diff --git a/.eslintrc.json b/.eslintrc.json index c5f08480..4d6a4dda 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,46 +1,17 @@ { - "extends": ["@exabyte-io/eslint-config"], - "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" - ] - }, - "plugins": [ - "@typescript-eslint" - ] - } - ], - "ignorePatterns": ["dist/*"] + "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/.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/.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/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..ad732526 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 @@ -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/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..641748e6 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 @@ -45,324 +45,324 @@ 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 - name: requirements.txt templateName: processing_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python - 'generic:processing:find_extrema:scipy': + "generic:processing:find_extrema:scipy": input: - name: find_extrema.py templateName: find_extrema.py - name: requirements.txt templateName: processing_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python - 'pyml:setup_variables_packages': + "pyml:setup_variables_packages": input: - name: settings.py templateName: pyml_settings.py - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output applicationName: python executableName: python - 'pyml:custom': + "pyml:custom": input: - name: pyml_custom.py templateName: pyml_custom.py - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output 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 - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output 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 - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output 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 - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output 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 - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output 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 - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output 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 - name: requirements.txt templateName: pyml_requirements.txt monitors: - - standard_output + - name: standard_output 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 - 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 - '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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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: - - 'workflow:pyml_predict' + - name: "workflow:pyml_predict" monitors: - - standard_output + - 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 - name: requirements.txt templateName: pyml_requirements.txt results: - - file_content + - name: file_content monitors: - - standard_output + - name: standard_output 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 - name: requirements.txt templateName: pyml_requirements.txt results: - - file_content + - name: file_content monitors: - - standard_output + - name: standard_output 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 - 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/assets/workflows/subworkflows/categories.yml b/assets/workflows/subworkflows/categories.yml index 36cb76fd..f99d30ff 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 @@ -340,6 +341,7 @@ entities: - fermi_energy - pressure - stress_tensor + - surface_energy - total_energy - total_energy_contributions - total_force @@ -357,7 +359,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 +530,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/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 516409b6..e8d82aba 100644 --- a/assets/workflows/workflows/espresso/phonon_map.yml +++ b/assets/workflows/workflows/espresso/phonon_map.yml @@ -1,28 +1,25 @@ 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 + - 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 - - 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 a701db05..cf5331ab 100644 --- a/build-config.ts +++ b/build-config.ts @@ -151,7 +151,7 @@ export const BUILD_CONFIG = { lineWidth: -1, sortKeys: false, }, -}; +} as const; // sometimes we need to define certain keys prior to using them later in another // key, e.g., environment variables, which must be excluded from sorting diff --git a/data/workflows/subworkflows/espresso/average_electrostatic_potential.json b/data/workflows/subworkflows/espresso/average_electrostatic_potential.json index f1285f74..260cca88 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" + } ], + "applicationName": "espresso", "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": [ @@ -101,46 +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" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s 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 +187,9 @@ "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -166,14 +201,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -182,28 +225,32 @@ } ], "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 +269,9 @@ "flowchartId": "average-electrostatic-potential", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -233,14 +283,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "average_potential_profile" + } + ], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -249,29 +311,33 @@ } ], "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..18fe5a8c 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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -59,36 +70,44 @@ } ], "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 +120,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 02a25d15..34faecf0 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 @@ -6,14 +6,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", @@ -23,11 +23,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -36,22 +32,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", @@ -91,6 +83,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -102,20 +97,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" + } ], + "applicationName": "espresso", "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": [ @@ -125,46 +155,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 } ], - "next": "pw-bands-calculate-band-gap" + "context": [], + "next": "pw-bands-calculate-band-gap", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -183,6 +211,9 @@ "flowchartId": "pw-bands-calculate-band-gap", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -194,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -216,40 +264,42 @@ } ], "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", @@ -262,22 +312,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", @@ -285,22 +331,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", @@ -315,6 +357,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -326,14 +371,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -342,27 +395,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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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", @@ -377,6 +435,9 @@ "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -388,14 +449,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -404,28 +473,32 @@ } ], "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", @@ -444,6 +517,9 @@ "flowchartId": "average-electrostatic-potential", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -455,14 +531,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "average_potential_profile" + } + ], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -471,30 +559,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 } ], - "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", @@ -507,21 +597,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..1d9df59f 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" + } ], + "applicationName": "espresso", "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": [ @@ -102,46 +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" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s 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 +194,9 @@ "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -174,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -196,40 +250,43 @@ } ], "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..f4f3090a 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" + } ], + "applicationName": "espresso", "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": [ @@ -104,48 +141,45 @@ } ], "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 +198,9 @@ "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -175,14 +212,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "density_of_states" + } + ], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -191,29 +240,33 @@ } ], "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 6d0398c4..6d768a60 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" + } ], + "applicationName": "espresso", "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": [ @@ -101,46 +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" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s 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 +191,9 @@ "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -170,20 +205,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -192,40 +244,42 @@ } ], "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 +294,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -251,14 +308,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -267,26 +332,33 @@ } ], "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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 b343fef9..929e0b5b 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" + } ], + "applicationName": "espresso", "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": [ @@ -104,46 +137,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 } ], - "next": "d618df45-5af3-5da5-8882-d74a27e00b04" + "context": [], + "next": "d618df45-5af3-5da5-8882-d74a27e00b04", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -162,6 +193,9 @@ "flowchartId": "d618df45-5af3-5da5-8882-d74a27e00b04", "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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -195,40 +246,42 @@ } ], "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 +296,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -254,14 +310,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -270,27 +334,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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 +381,9 @@ "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -323,20 +395,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -345,41 +437,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 } ], - "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" + "context": [], + "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -398,6 +491,9 @@ "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -409,14 +505,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "density_of_states" + } + ], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -425,29 +533,33 @@ } ], "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 593f9827..0b6ab3ee 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" + } ], + "applicationName": "espresso", "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": [ @@ -99,50 +133,48 @@ } ], "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 +189,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -168,14 +203,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -184,26 +227,33 @@ } ], "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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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..64210baf 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" + } ], + "applicationName": "espresso", "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": [ @@ -100,50 +134,48 @@ } ], "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 +194,9 @@ "flowchartId": "ea06c333-0cc7-51d4-bd98-cc53fa0844d1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -173,20 +208,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -195,43 +247,45 @@ } ], "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 +300,9 @@ "flowchartId": "a8e4de4b-1f55-50e8-a712-ce0b37c04752", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -257,14 +314,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -273,27 +338,32 @@ } ], "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 +378,9 @@ "flowchartId": "fd937050-a3f3-5d4d-bb50-d150a93ea5e0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -319,14 +392,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -335,26 +416,33 @@ } ], "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 0b30210b..4ddafab1 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" + } ], + "applicationName": "espresso", "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": [ @@ -102,50 +136,48 @@ } ], "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 +196,9 @@ "flowchartId": "cee6ae30-cf34-5138-bdc5-5c57c2a6de5b", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -175,20 +210,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -197,43 +249,45 @@ } ], "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 +302,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -259,14 +316,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -275,26 +340,33 @@ } ], "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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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..502d94ee 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" + } ], + "applicationName": "espresso", "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": [ @@ -103,46 +136,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 } ], - "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 +181,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 +214,9 @@ "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -198,20 +228,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -220,41 +270,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 } ], - "next": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb" + "context": [], + "next": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -273,6 +324,9 @@ "flowchartId": "8c2ec8bd-cdbf-54a0-a217-64a7a26eaebb", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -284,14 +338,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "epsilon.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "dielectric_tensor" + } + ], "applicationName": "espresso", "executableName": "epsilon.x", "input": [ @@ -300,29 +366,33 @@ } ], "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..9c3d5662 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" + } ], + "applicationName": "espresso", "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": [ @@ -103,46 +136,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 } ], - "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0" + "context": [], + "next": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -164,6 +195,9 @@ "flowchartId": "7b4c726e-3c46-501a-9a3a-ca19e06de5f0", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -175,20 +209,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "fermi_energy" + }, + { + "name": "band_gaps" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -197,41 +251,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 } ], - "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651" + "context": [], + "next": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -250,6 +305,9 @@ "flowchartId": "3c8ffaf7-d01d-57e3-a0ae-118b3ecfc651", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -261,14 +319,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "projwfc.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "density_of_states" + } + ], "applicationName": "espresso", "executableName": "projwfc.x", "input": [ @@ -277,29 +347,33 @@ } ], "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..74158980 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" + } ], + "applicationName": "espresso", "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": [ @@ -100,46 +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 } ], - "next": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061" + "context": [], + "next": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -154,6 +186,9 @@ "flowchartId": "e1a6e1e9-7994-5cd0-98d7-ae8909a10061", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -165,14 +200,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -181,27 +224,33 @@ } ], "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..fddcc268 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" + } ], + "applicationName": "espresso", "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": [ @@ -107,51 +147,49 @@ } ], "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..1cacea05 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" + } ], + "applicationName": "espresso", "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": [ @@ -107,51 +147,49 @@ } ], "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..195305bf 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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -58,35 +69,45 @@ } ], "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..de7f4e0c 100644 --- a/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.json +++ b/data/workflows/subworkflows/espresso/espresso_xml_get_qpt_irr.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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -54,53 +65,54 @@ } ], "monitors": [ - "standard_output" + { + "name": "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" + "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", - "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": [], + "operand": "Q_POINTS", + "value": "json.loads(STDOUT)", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], + "flowchartId": "assignment", "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/fixed_cell_relaxation.json b/data/workflows/subworkflows/espresso/fixed_cell_relaxation.json index 69c9ceab..ba22f2ad 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" + } ], + "applicationName": "espresso", "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": [ @@ -102,47 +136,49 @@ } ], "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..844ea700 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" + } ], + "applicationName": "espresso", "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": [ @@ -105,46 +138,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 } ], - "next": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e" + "context": [], + "next": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -169,6 +200,9 @@ "flowchartId": "d82a9858-3f20-5fcd-baeb-0f1d65e9e22e", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -180,14 +214,32 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "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": [ @@ -196,41 +248,43 @@ } ], "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..56933ebb 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" + } ], + "applicationName": "espresso", "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": [ @@ -105,46 +138,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 } ], - "next": "f9910952-eca9-5a5f-ae03-a0060ae2fc78" + "context": [], + "next": "f9910952-eca9-5a5f-ae03-a0060ae2fc78", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -169,6 +200,9 @@ "flowchartId": "f9910952-eca9-5a5f-ae03-a0060ae2fc78", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -180,14 +214,32 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "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": [ @@ -196,41 +248,43 @@ } ], "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..f653bd4a 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" + } ], + "applicationName": "espresso", "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": [ @@ -187,43 +202,42 @@ } ], "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 +250,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 +295,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 +323,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 +347,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 1bd5d3c5..4d97c33b 100644 --- a/data/workflows/subworkflows/espresso/neb.json +++ b/data/workflows/subworkflows/espresso/neb.json @@ -16,11 +16,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -43,6 +39,9 @@ "flowchartId": "9f273ca0-d240-5b1f-89a9-64dd579304ac", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -54,14 +53,29 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "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": [ @@ -70,43 +84,46 @@ } ], "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..8e991bcf 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" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -60,31 +67,37 @@ } ], "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..45fe99fe 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" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -60,31 +67,37 @@ } ], "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..13261b61 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" + } ], + "applicationName": "espresso", "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": [ @@ -102,46 +136,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 } ], - "next": "13bcafce-56ef-5b47-b079-317495eb6933" + "context": [], + "next": "13bcafce-56ef-5b47-b079-317495eb6933", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -160,6 +192,9 @@ "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -171,14 +206,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dos" + } + ], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -187,34 +234,36 @@ } ], "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 +278,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -240,14 +292,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -256,28 +316,32 @@ } ], "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 +360,9 @@ "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -307,14 +374,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dispersions" + } + ], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -323,33 +402,37 @@ } ], "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..3f170b3d 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" + } ], + "applicationName": "espresso", "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": [ @@ -101,46 +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" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s 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 +191,9 @@ "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -170,14 +205,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dos" + } + ], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -186,34 +233,36 @@ } ], "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 +277,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -239,14 +291,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -255,28 +315,32 @@ } ], "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 +359,9 @@ "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -306,14 +373,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dos" + } + ], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -322,33 +401,37 @@ } ], "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..56e5d739 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" + } ], + "applicationName": "espresso", "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": [ @@ -102,46 +136,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 } ], - "next": "13bcafce-56ef-5b47-b079-317495eb6933" + "context": [], + "next": "13bcafce-56ef-5b47-b079-317495eb6933", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -160,6 +192,9 @@ "flowchartId": "13bcafce-56ef-5b47-b079-317495eb6933", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -171,14 +206,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dos" + } + ], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -187,34 +234,36 @@ } ], "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 +278,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -240,14 +292,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -256,28 +316,32 @@ } ], "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 +360,9 @@ "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -307,14 +374,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dos" + } + ], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -323,34 +402,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 } ], - "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" + "context": [], + "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -369,6 +450,9 @@ "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -380,14 +464,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dispersions" + } + ], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -396,33 +492,37 @@ } ], "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..fa8d0f6a 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" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -63,32 +70,36 @@ } ], "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 +114,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -114,14 +128,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -130,28 +152,32 @@ } ], "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 +196,9 @@ "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -181,14 +210,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dos" + } + ], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -197,34 +238,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 } ], - "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" + "context": [], + "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -243,6 +286,9 @@ "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -254,14 +300,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dispersions" + } + ], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -270,33 +328,37 @@ } ], "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 a7acfc56..d953cd70 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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "file_content" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -67,42 +80,45 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ { - "basename": "wf_r.png", - "filetype": "image", - "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..58c20dd5 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" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -54,26 +65,33 @@ } ], "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..026462b6 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" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -54,26 +65,33 @@ } ], "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..891180ad 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" + } ], + "applicationName": "espresso", "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": [ @@ -100,45 +134,45 @@ ], "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 3050f539..a9cdcfa0 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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -72,40 +88,42 @@ } ], "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 +138,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -131,14 +152,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -147,26 +176,33 @@ } ], "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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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..3e210486 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,26 +22,26 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { - "name": "io-slab", "type": "io", - "subtype": "input", + "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": { @@ -52,65 +53,50 @@ } ], "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": [] + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "slab", "type": "assignment", - "operand": "SLAB", - "value": "DATA[0]", - "input": [ - { - "name": "DATA", - "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" - } - ], + "name": "slab", "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": [] + "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 }, { - "name": "io-bulk", "type": "io", - "subtype": "input", + "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": { @@ -122,91 +108,68 @@ } ], "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": [] + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "bulk", "type": "assignment", - "operand": "BULK", - "value": "DATA[0] if DATA else None", - "input": [ - { - "name": "DATA", - "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" - } - ], + "name": "bulk", "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": [] + "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 }, { - "name": "assert-bulk", "type": "assertion", - "statement": "BULK != None", - "errorMessage": "Bulk material does not exist!", + "name": "assert-bulk", "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": [] + "tags": [], + "statement": "BULK != None", + "errorMessage": "Bulk material does not exist!", + "next": "490635e0-c593-5809-9eb2-c794b96cfed1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "io-e-bulk", "type": "io", - "subtype": "input", + "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": { @@ -218,158 +181,107 @@ } ], "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": [] + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "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" - } - ], + "name": "e-bulk", "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": [] + "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 }, { - "name": "assert-e-bulk", "type": "assertion", - "statement": "E_BULK != None", - "errorMessage": "E_BULK does not exist!", + "name": "assert-e-bulk", "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": [] + "tags": [], + "statement": "E_BULK != None", + "errorMessage": "E_BULK does not exist!", + "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "surface", "type": "assignment", - "operand": "A", - "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", - "input": [], + "name": "surface", "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": [] + "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 }, { - "name": "n-bulk", "type": "assignment", - "operand": "N_BULK", - "value": "len(BULK.basis.elements)", - "input": [], + "name": "n-bulk", "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": [] + "tags": [], + "input": [], + "operand": "N_BULK", + "value": "len(BULK.basis.elements)", + "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "n-slab", "type": "assignment", - "operand": "N_SLAB", - "value": "len(SLAB.basis.elements)", - "input": [], + "name": "n-slab", "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": [] + "tags": [], + "input": [], + "operand": "N_SLAB", + "value": "len(SLAB.basis.elements)", + "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -409,6 +321,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -420,20 +335,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" + } ], + "applicationName": "espresso", "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": [ @@ -443,85 +393,72 @@ ], "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": "fcd88119-817c-5ac1-a430-ba892ac743eb" + "context": [], + "next": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "e-slab", "type": "assignment", - "operand": "E_SLAB", - "value": "total_energy", - "input": [ - { - "name": "total_energy", - "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" - } - ], + "name": "e-slab", "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": [] + "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 }, { - "name": "surface-energy", "type": "assignment", - "operand": "SURFACE_ENERGY", - "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", - "input": [], + "name": "surface-energy", "head": false, "results": [ { @@ -532,19 +469,16 @@ "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": [] + "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/data/workflows/subworkflows/espresso/total_energy.json b/data/workflows/subworkflows/espresso/total_energy.json index 7685f345..7d44edc1 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" + } ], + "applicationName": "espresso", "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": [ @@ -100,47 +134,47 @@ ], "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..ca471284 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" + } ], + "applicationName": "espresso", "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": [ @@ -103,49 +137,51 @@ } ], "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..1a0a2a89 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" + } ], + "applicationName": "espresso", "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": [ @@ -105,46 +139,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 } ], - "next": "extract-band-energies" + "context": [], + "next": "extract-band-energies", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Extract Band Energies", @@ -157,22 +189,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 +213,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 +232,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 +251,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 +281,9 @@ "flowchartId": "pp-wfn", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -276,14 +295,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "wavefunction_amplitude" + } + ], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -292,31 +323,35 @@ } ], "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..4639a44e 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" + } ], + "applicationName": "espresso", "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": [ @@ -101,46 +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" + "template": { + "applicationName": "espresso", + "content": "{% if subworkflowContext.MATERIAL_INDEX %}\n{%- set input = input.perMaterial[subworkflowContext.MATERIAL_INDEX] -%}\n{% endif -%}\n&CONTROL\n calculation = 'scf'\n title = ''\n verbosity = 'low'\n restart_mode = '{{ input.RESTART_MODE }}'\n wf_collect = .true.\n tstress = .true.\n tprnfor = .true.\n outdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n wfcdir = {% raw %}'{{ JOB_WORK_DIR }}/outdir'{% endraw %}\n prefix = '__prefix__'\n pseudo_dir = {% raw %}'{{ JOB_WORK_DIR }}/pseudo'{% endraw %}\n/\n&SYSTEM\n ibrav = {{ input.IBRAV }}\n nat = {{ input.NAT }}\n ntyp = {{ input.NTYP }}\n ecutwfc = {{ cutoffs.wavefunction }}\n ecutrho = {{ cutoffs.density }}\n occupations = 'smearing'\n degauss = 0.005\n/\n&ELECTRONS\n diagonalization = 'david'\n diago_david_ndim = 4\n diago_full_acc = .true.\n mixing_beta = 0.3\n startingwfc = 'atomic+random'\n/\n&IONS\n/\n&CELL\n/\nATOMIC_SPECIES\n{% for specie in input.ATOMIC_SPECIES -%}\n{{ specie.X }} {{ specie.Mass_X|sprintf(\"%f\") }} {{ specie.PseudoPot_X }}\n{% endfor %}\nATOMIC_POSITIONS crystal\n{%- set print_constraints = false %}\n{%- for position in input.ATOMIC_POSITIONS %}\n {%- if position[\"if_pos(1)\"] != 1 or position[\"if_pos(2)\"] != 1 or position[\"if_pos(3)\"] != 1 %}\n {%- set print_constraints = true %}\n {%- endif %}\n{%- endfor %}\n{% for position in input.ATOMIC_POSITIONS -%}\n{{ position.X|sprintf(\"%-3s\") }} {{ position.x|sprintf(\"%14.9f\") }} {{ position.y|sprintf(\"%14.9f\") }} {{ position.z|sprintf(\"%14.9f\") }}{% if print_constraints %} {{ position[\"if_pos(1)\"] }} {{ position[\"if_pos(2)\"] }} {{ position[\"if_pos(3)\"] }}{% endif %}\n{% endfor %}\nCELL_PARAMETERS angstrom\n{{ input.CELL_PARAMETERS.v1[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v1[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v2[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v2[2]|sprintf(\"%14.9f\") }}\n{{ input.CELL_PARAMETERS.v3[0]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[1]|sprintf(\"%14.9f\") }} {{ input.CELL_PARAMETERS.v3[2]|sprintf(\"%14.9f\") }}\nK_POINTS automatic\n{% for d in kgrid.dimensions %}{{d}} {% endfor %}{% for s 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 +191,9 @@ "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -170,14 +205,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "zero_point_energy" + } + ], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -186,29 +233,33 @@ } ], "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..de5a1ec7 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" + } ], + "applicationName": "nwchem", "name": "nwchem", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + } + ], "applicationName": "nwchem", "executableName": "nwchem", "input": [ @@ -74,33 +89,36 @@ ], "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..36c03a75 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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -62,41 +73,49 @@ } ], "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 +130,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -121,14 +143,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -142,36 +172,44 @@ } ], "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 +224,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -196,14 +237,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -217,40 +266,48 @@ } ], "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 +322,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -275,14 +335,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -296,36 +364,44 @@ } ], "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 +420,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 +436,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "workflow:pyml_predict" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -375,42 +469,44 @@ } ], "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 +514,6 @@ "head": false, "results": [ { - "basename": "my_roc_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -435,6 +529,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -445,14 +544,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "file_content" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -466,40 +577,45 @@ } ], "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..0fe033b3 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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -62,41 +73,49 @@ } ], "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 +130,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -121,14 +143,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -142,36 +172,44 @@ } ], "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 +224,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -196,14 +237,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -217,40 +266,48 @@ } ], "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 +322,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -275,14 +335,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -296,36 +364,44 @@ } ], "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 +420,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 +436,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "workflow:pyml_predict" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -375,42 +469,44 @@ } ], "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 +514,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 +535,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -455,14 +550,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "file_content" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -476,40 +583,45 @@ } ], "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..5357cbc2 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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -62,41 +73,49 @@ } ], "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 +130,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -121,14 +143,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -142,36 +172,44 @@ } ], "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 +224,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -196,14 +237,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -217,40 +266,48 @@ } ], "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 +322,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -275,14 +335,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -296,36 +364,44 @@ } ], "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 +420,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 +436,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "workflow:pyml_predict" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -375,42 +469,44 @@ } ], "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 +514,6 @@ "head": false, "results": [ { - "basename": "my_parity_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -435,6 +529,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -445,14 +544,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "file_content" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -466,40 +577,45 @@ } ], "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..56271908 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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -59,34 +70,44 @@ ], "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..40025e66 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" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -54,26 +65,33 @@ } ], "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..8d642d1d 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" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -55,25 +66,32 @@ ], "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..ad5347ef 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" + } ], + "applicationName": "vasp", "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": [ @@ -109,69 +146,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 } ], - "next": "f0d65517-9592-5bc8-948e-a0851a766cbb" + "context": [], + "next": "f0d65517-9592-5bc8-948e-a0851a766cbb", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -196,6 +237,9 @@ "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -207,21 +251,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" + } ], + "applicationName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_gaps" + }, + { + "name": "fermi_energy" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -239,64 +307,75 @@ } ], "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..71d73af4 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" + } ], + "applicationName": "vasp", "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": [ @@ -108,69 +146,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 } ], - "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" + "context": [], + "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -192,6 +234,9 @@ "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -203,21 +248,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" + } ], + "applicationName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -235,63 +301,75 @@ } ], "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..28037664 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" + } ], + "applicationName": "vasp", "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": [ @@ -112,69 +150,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 } ], - "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" + "context": [], + "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -196,6 +238,9 @@ "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -207,21 +252,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" + } ], + "applicationName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -239,63 +305,75 @@ } ], "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..2fc5061c 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" + } ], + "applicationName": "vasp", "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": [ @@ -111,68 +149,74 @@ ], "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..cf019c1c 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" + } ], + "applicationName": "vasp", "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": [ @@ -116,73 +158,78 @@ } ], "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 bafd5e45..7a7673d8 100644 --- a/data/workflows/subworkflows/vasp/initial_final_total_energies.json +++ b/data/workflows/subworkflows/vasp/initial_final_total_energies.json @@ -5,20 +5,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", @@ -28,11 +21,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -73,6 +62,9 @@ "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -84,21 +76,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" + } ], + "applicationName": "vasp", "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": [ @@ -115,76 +146,80 @@ } ], "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", @@ -224,6 +259,9 @@ "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -235,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" + } ], + "applicationName": "vasp", "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": [ @@ -266,75 +343,100 @@ } ], "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..5ac5fe54 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" + } ], + "applicationName": "vasp", "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": [ @@ -201,70 +223,74 @@ } ], "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 +303,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 +348,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 +376,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 +400,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 f6fba5ec..3fe710e7 100644 --- a/data/workflows/subworkflows/vasp/neb_subworkflow.json +++ b/data/workflows/subworkflows/vasp/neb_subworkflow.json @@ -16,11 +16,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -43,6 +39,9 @@ "flowchartId": "9a1660ab-8067-5fad-9fb8-7c039f634636", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -54,21 +53,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" + } ], + "applicationName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "reaction_energy_barrier" + }, + { + "name": "reaction_energy_profile" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -82,53 +105,59 @@ } ], "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 b968cf5e..fdd09580 100644 --- a/data/workflows/subworkflows/vasp/prepare_images.json +++ b/data/workflows/subworkflows/vasp/prepare_images.json @@ -28,6 +28,9 @@ "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "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" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -54,30 +65,37 @@ } ], "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" + "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", - "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": [], + "operand": "Q_POINTS", + "value": "json.loads(STDOUT)", + "preProcessors": [], + "postProcessors": [], + "monitors": [], + "results": [], + "flowchartId": "assignment", "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": "545a66e2-dfbe-513e-acaf-d79d0d139b9c", @@ -375,8 +435,8 @@ "schemaVersion": "2022.8.16" }, "properties": [ - "phonon_dos", - "phonon_dispersions" + "phonon_dispersions", + "phonon_dos" ], "model": { "type": "dft", @@ -386,11 +446,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -406,6 +462,9 @@ "flowchartId": "cb206177-a4af-599a-81ba-6c88d24253b6", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -417,14 +476,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -433,32 +500,36 @@ } ], "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 +544,9 @@ "flowchartId": "3b4507a7-9244-540b-abe0-66bceab700f5", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -484,14 +558,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "q2r.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "q2r.x", "input": [ @@ -500,28 +582,32 @@ } ], "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 +626,9 @@ "flowchartId": "8fe6a24b-c994-55a2-a448-88657292e8c2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -551,14 +640,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dos" + } + ], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -567,34 +668,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 } ], - "next": "a7fded20-889b-54fc-bbb0-456e82689ab1" + "context": [], + "next": "a7fded20-889b-54fc-bbb0-456e82689ab1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -613,6 +716,9 @@ "flowchartId": "a7fded20-889b-54fc-bbb0-456e82689ab1", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -624,14 +730,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "matdyn.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "phonon_dispersions" + } + ], "applicationName": "espresso", "executableName": "matdyn.x", "input": [ @@ -640,75 +758,90 @@ } ], "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", "type": "subworkflow", - "_id": "79f2cb6a-7994-5369-8c85-af07c55ad26f", + "name": "pw-scf", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "b6a2b27a-0fec-5e0e-8974-073ee9d2ad83", "tags": [], - "head": true, - "next": "4bb74dfb-46a6-5bf4-a477-5d374dc2e271" + "_id": "f52b8039-83d0-5485-a1f1-0bc37cb01ed3", + "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 +849,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": "731d3397-3278-516a-b28e-53626ef50f0a", + "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": [ @@ -741,12 +884,14 @@ "stress_tensor", "total_energy", "total_energy_contributions", - "total_force" + "total_force", + "phonon_dispersions", + "phonon_dos" ], - "_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 +929,9 @@ "flowchartId": "99304304-e873-5c89-ae83-91e61a7f629c", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -794,14 +942,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -810,28 +966,35 @@ } ], "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 +1018,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -875,6 +1034,9 @@ "flowchartId": "8db9af08-d935-57a0-a824-e7db6d936de8", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -886,14 +1048,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -902,33 +1072,39 @@ } ], "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 +1142,9 @@ "flowchartId": "cd5c3e29-511b-5ef8-949d-ad884f210301", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -976,14 +1155,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -992,79 +1179,80 @@ } ], "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", + "name": "pre-processor", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "e9a790f4-dec6-52c1-b951-014f0ff01cb4", "tags": [], - "head": true, - "next": "c2195045-7a5c-54d3-ab88-211c82de09f1" + "_id": "03f3a8a3-1fd0-5007-925f-fba78be63a51", + "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 b7d3e3ad..f1eca7a1 100644 --- a/data/workflows/workflows/espresso/recalculate_bands.json +++ b/data/workflows/workflows/espresso/recalculate_bands.json @@ -1,4 +1,5 @@ { + "_id": "42b2b964-8ccc-5b36-9e33-41a954abc2ba", "name": "Recalculate Bands", "subworkflows": [ { @@ -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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -82,40 +99,42 @@ } ], "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 +149,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -141,14 +163,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -157,46 +187,57 @@ } ], "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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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", + "name": "Recalculate Bands", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "e8b72a45-765e-565f-ab17-c91a21aec09d", "tags": [], - "head": true + "_id": "64551dfb-e529-5d8d-9092-ff268f4da134", + "flowchartId": "e8b72a45-765e-565f-ab17-c91a21aec09d", + "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..b130d3c4 100644 --- a/data/workflows/workflows/espresso/surface_energy.json +++ b/data/workflows/workflows/espresso/surface_energy.json @@ -1,4 +1,5 @@ { + "_id": "68512987-de73-5614-bab2-0f8b575cffa3", "name": "Surface Energy", "subworkflows": [ { @@ -19,6 +20,7 @@ "fermi_energy", "pressure", "stress_tensor", + "surface_energy", "total_energy", "total_energy_contributions", "total_force" @@ -31,26 +33,26 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { - "name": "io-slab", "type": "io", - "subtype": "input", + "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": { @@ -62,65 +64,50 @@ } ], "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": [] + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "slab", "type": "assignment", - "operand": "SLAB", - "value": "DATA[0]", - "input": [ - { - "name": "DATA", - "scope": "e463ef46-a36e-5168-87dd-e21eb980dfb8" - } - ], + "name": "slab", "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": [] + "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 }, { - "name": "io-bulk", "type": "io", - "subtype": "input", + "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": { @@ -132,91 +119,68 @@ } ], "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": [] + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "bulk", "type": "assignment", - "operand": "BULK", - "value": "DATA[0] if DATA else None", - "input": [ - { - "name": "DATA", - "scope": "44263820-0c80-5bd1-b854-9da8d198eac1" - } - ], + "name": "bulk", "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": [] + "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 }, { - "name": "assert-bulk", "type": "assertion", - "statement": "BULK != None", - "errorMessage": "Bulk material does not exist!", + "name": "assert-bulk", "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": [] + "tags": [], + "statement": "BULK != None", + "errorMessage": "Bulk material does not exist!", + "next": "490635e0-c593-5809-9eb2-c794b96cfed1", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "io-e-bulk", "type": "io", - "subtype": "input", + "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": { @@ -228,158 +192,107 @@ } ], "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": [] + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "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" - } - ], + "name": "e-bulk", "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": [] + "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 }, { - "name": "assert-e-bulk", "type": "assertion", - "statement": "E_BULK != None", - "errorMessage": "E_BULK does not exist!", + "name": "assert-e-bulk", "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": [] + "tags": [], + "statement": "E_BULK != None", + "errorMessage": "E_BULK does not exist!", + "next": "cdf210be-26ed-585a-b4ac-d55795ba2975", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "surface", "type": "assignment", - "operand": "A", - "value": "np.linalg.norm(np.cross(SLAB.lattice.vectors.a, SLAB.lattice.vectors.b))", - "input": [], + "name": "surface", "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": [] + "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 }, { - "name": "n-bulk", "type": "assignment", - "operand": "N_BULK", - "value": "len(BULK.basis.elements)", - "input": [], + "name": "n-bulk", "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": [] + "tags": [], + "input": [], + "operand": "N_BULK", + "value": "len(BULK.basis.elements)", + "next": "a0336ec5-a6da-5e4c-bb48-82b70cf5245f", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "n-slab", "type": "assignment", - "operand": "N_SLAB", - "value": "len(SLAB.basis.elements)", - "input": [], + "name": "n-slab", "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": [] + "tags": [], + "input": [], + "operand": "N_SLAB", + "value": "len(SLAB.basis.elements)", + "next": "9fc7a088-5533-5f70-bb33-f676ec65f565", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -419,6 +332,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -430,20 +346,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" + } ], + "applicationName": "espresso", "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": [ @@ -453,85 +404,72 @@ ], "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": "fcd88119-817c-5ac1-a430-ba892ac743eb" + "context": [], + "next": "fcd88119-817c-5ac1-a430-ba892ac743eb", + "schemaVersion": "2022.8.16", + "isDefault": false }, { - "name": "e-slab", "type": "assignment", - "operand": "E_SLAB", - "value": "total_energy", - "input": [ - { - "name": "total_energy", - "scope": "9fc7a088-5533-5f70-bb33-f676ec65f565" - } - ], + "name": "e-slab", "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": [] + "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 }, { - "name": "surface-energy", "type": "assignment", - "operand": "SURFACE_ENERGY", - "value": "1 / (2 * A) * (E_SLAB - E_BULK * (N_SLAB/N_BULK))", - "input": [], + "name": "surface-energy", "head": false, "results": [ { @@ -542,33 +480,35 @@ "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": [] + "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": [ { - "name": "Surface Energy", "type": "subworkflow", - "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", + "name": "Surface Energy", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6", "tags": [], - "head": true + "_id": "3e05a2b5-4171-54a2-9d2d-9e46118a56bf", + "flowchartId": "d81dc9ce-bb50-5bc6-af1d-e5ede03bb0a6", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -581,7 +521,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..f29e8359 100644 --- a/data/workflows/workflows/espresso/total_energy.json +++ b/data/workflows/workflows/espresso/total_energy.json @@ -1,4 +1,5 @@ { + "_id": "4e36ca25-fa46-5628-a227-27d22dea8553", "name": "Total Energy", "subworkflows": [ { @@ -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" + } ], + "applicationName": "espresso", "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": [ @@ -110,59 +145,64 @@ ], "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", + "name": "Total Energy", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "tags": [], - "head": true + "_id": "a16677f9-bb5b-54b5-9f97-c2af8c073184", + "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -174,7 +214,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 c082c826..bd8181d9 100644 --- a/data/workflows/workflows/espresso/valence_band_offset.json +++ b/data/workflows/workflows/espresso/valence_band_offset.json @@ -1,4 +1,5 @@ { + "_id": "d8e08cac-7747-50aa-b925-41f214d722c6", "name": "Valence Band Offset (2D)", "subworkflows": [ { @@ -16,14 +17,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", @@ -33,11 +34,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -46,22 +43,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", @@ -101,6 +94,9 @@ "flowchartId": "9fc7a088-5533-5f70-bb33-f676ec65f565", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -112,20 +108,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" + } ], + "applicationName": "espresso", "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": [ @@ -135,46 +166,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 } ], - "next": "pw-bands-calculate-band-gap" + "context": [], + "next": "pw-bands-calculate-band-gap", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -193,6 +222,9 @@ "flowchartId": "pw-bands-calculate-band-gap", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -204,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -226,40 +275,42 @@ } ], "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", @@ -272,22 +323,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", @@ -295,22 +342,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", @@ -325,6 +368,9 @@ "flowchartId": "771fbb40-ea80-5ba4-ae3f-6cd9a56c26e2", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -336,14 +382,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -352,27 +406,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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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", @@ -387,6 +446,9 @@ "flowchartId": "9ed927b1-3d84-5730-a6a8-1b1cfba39bde", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -398,14 +460,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -414,28 +484,32 @@ } ], "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", @@ -454,6 +528,9 @@ "flowchartId": "average-electrostatic-potential", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -465,14 +542,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "average_potential_profile" + } + ], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -481,30 +570,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 } ], - "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", @@ -517,23 +608,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", @@ -571,6 +660,9 @@ "flowchartId": "python-find-extrema", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -581,14 +673,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -602,36 +702,44 @@ } ], "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", @@ -644,22 +752,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 }, { "_id": "ba46d9b4-610f-537e-ae39-e39ce5240cda", @@ -676,14 +783,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", @@ -693,11 +800,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -706,22 +809,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", @@ -761,6 +860,9 @@ "flowchartId": "3e6d3a1e-8d6c-5d5f-9a97-ffc0b895ef08", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -772,20 +874,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" + } ], + "applicationName": "espresso", "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": [ @@ -795,46 +932,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 } ], - "next": "pw-bands-calculate-band-gap-left" + "context": [], + "next": "pw-bands-calculate-band-gap-left", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -853,6 +988,9 @@ "flowchartId": "pw-bands-calculate-band-gap-left", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -864,20 +1002,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -886,40 +1041,42 @@ } ], "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", @@ -932,22 +1089,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", @@ -955,22 +1108,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", @@ -985,6 +1134,9 @@ "flowchartId": "dfc4f1c5-5856-588a-99df-6d5fb46bb429", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -996,14 +1148,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -1012,27 +1172,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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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", @@ -1047,6 +1212,9 @@ "flowchartId": "b1bb2b3e-3197-5bcd-85b0-959cc357c8d3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1058,14 +1226,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -1074,28 +1250,32 @@ } ], "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", @@ -1114,6 +1294,9 @@ "flowchartId": "average-electrostatic-potential-left", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1125,14 +1308,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "average_potential_profile" + } + ], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -1141,30 +1336,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 } ], - "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", @@ -1177,23 +1374,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", @@ -1231,6 +1426,9 @@ "flowchartId": "python-find-extrema-left", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -1241,14 +1439,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -1262,36 +1468,44 @@ } ], "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", @@ -1304,22 +1518,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 }, { "_id": "aa611fe8-1e6a-5e5c-976a-f64bfaaaace9", @@ -1336,14 +1549,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", @@ -1353,11 +1566,7 @@ "subtype": "us", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -1366,22 +1575,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", @@ -1421,6 +1626,9 @@ "flowchartId": "b89d6348-3915-5c24-9fbb-350bc98ac708", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1432,20 +1640,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" + } ], + "applicationName": "espresso", "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": [ @@ -1455,46 +1698,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 } ], - "next": "pw-bands-calculate-band-gap-right" + "context": [], + "next": "pw-bands-calculate-band-gap-right", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -1513,6 +1754,9 @@ "flowchartId": "pw-bands-calculate-band-gap-right", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1524,20 +1768,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" + } ], + "applicationName": "espresso", "name": "pw.x", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "espresso", "executableName": "pw.x", "input": [ @@ -1546,40 +1807,42 @@ } ], "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", @@ -1592,22 +1855,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", @@ -1615,22 +1874,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", @@ -1645,6 +1900,9 @@ "flowchartId": "bc3f514c-4bed-521b-85a3-4e0edfdc3585", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1656,14 +1914,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "bands.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "bands.x", "input": [ @@ -1672,27 +1938,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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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", @@ -1707,6 +1978,9 @@ "flowchartId": "28bb682d-d287-5beb-8a67-826449c474ee", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1718,14 +1992,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -1734,28 +2016,32 @@ } ], "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", @@ -1774,6 +2060,9 @@ "flowchartId": "average-electrostatic-potential-right", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -1785,14 +2074,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "average.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "average_potential_profile" + } + ], "applicationName": "espresso", "executableName": "average.x", "input": [ @@ -1801,30 +2102,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 } ], - "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", @@ -1837,23 +2140,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", @@ -1891,6 +2192,9 @@ "flowchartId": "python-find-extrema-right", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -1901,14 +2205,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -1922,36 +2234,44 @@ } ], "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", @@ -1964,22 +2284,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", @@ -2012,21 +2331,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", @@ -2034,21 +2350,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", @@ -2056,21 +2369,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", @@ -2083,100 +2393,127 @@ "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", + "name": "BS + Avg ESP (Interface)", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "fd622b5c-5c02-594e-b582-b245c17ca9a4", "tags": [], - "head": true, - "next": "ad3b1e4c-5965-5605-a067-dd0c59907c4b" + "_id": "9c65d03e-6a30-58f3-947a-f174342be0c3", + "flowchartId": "fd622b5c-5c02-594e-b582-b245c17ca9a4", + "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": [ @@ -2188,9 +2525,9 @@ "stress_tensor", "total_energy", "total_energy_contributions", - "total_force" + "total_force", + "valence_band_offset" ], - "_id": "d8e08cac-7747-50aa-b925-41f214d722c6", "workflows": [], "isMultiMaterial": true, "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 1022f84d..82acd31c 100644 --- a/data/workflows/workflows/espresso/variable_cell_relaxation.json +++ b/data/workflows/workflows/espresso/variable_cell_relaxation.json @@ -1,4 +1,5 @@ { + "_id": "c45dcef1-d16b-59d1-9318-cedd0b1acf08", "name": "Variable-cell Relaxation", "subworkflows": [ { @@ -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" + } ], + "applicationName": "espresso", "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": [ @@ -113,61 +148,68 @@ } ], "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", + "name": "Variable-cell Relaxation", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8f6e9590-6a87-584b-abd7-1fb98253054c", "tags": [], - "head": true + "_id": "58709c44-47f6-5fbf-bf2e-358b9d98f75d", + "flowchartId": "8f6e9590-6a87-584b-abd7-1fb98253054c", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -179,7 +221,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 4150bb17..ea5d8e55 100644 --- a/data/workflows/workflows/espresso/wavefunction_amplitude.json +++ b/data/workflows/workflows/espresso/wavefunction_amplitude.json @@ -1,4 +1,5 @@ { + "_id": "196d364a-5a30-549b-a898-8b9704b50ff1", "name": "Wavefunction Amplitude", "subworkflows": [ { @@ -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" + } ], + "applicationName": "espresso", "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": [ @@ -115,46 +150,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 } ], - "next": "extract-band-energies" + "context": [], + "next": "extract-band-energies", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "name": "Extract Band Energies", @@ -167,22 +200,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 +224,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 +243,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 +262,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 +292,9 @@ "flowchartId": "pp-wfn", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -286,14 +306,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "pp.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "wavefunction_amplitude" + } + ], "applicationName": "espresso", "executableName": "pp.x", "input": [ @@ -302,31 +334,35 @@ } ], "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 +395,7 @@ "head": true, "results": [ { - "name": "file_content", - "basename": "wf_r.png", - "filetype": "image" + "name": "file_content" } ], "monitors": [ @@ -372,6 +406,9 @@ "flowchartId": "57fca898-8e8b-5ef2-81a5-9d2b612bc18d", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -382,14 +419,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "file_content" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -403,67 +452,79 @@ } ], "monitors": [ - "standard_output" - ], - "results": [ { - "basename": "wf_r.png", - "filetype": "image", - "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", + "name": "Wavefunction Amplitude", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "36467db9-279f-52a3-a6ef-ffdc26d875ed", "tags": [], - "head": true, - "next": "4ce49281-e731-550e-af66-6d2408db8237" + "_id": "6a670ac8-6c12-5285-a6f8-9bf579fc88ee", + "flowchartId": "36467db9-279f-52a3-a6ef-ffdc26d875ed", + "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,9 +536,9 @@ "total_energy", "total_energy_contributions", "total_force", - "wavefunction_amplitude" + "wavefunction_amplitude", + "file_content" ], - "_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..51ced719 100644 --- a/data/workflows/workflows/espresso/zero_point_energy.json +++ b/data/workflows/workflows/espresso/zero_point_energy.json @@ -1,4 +1,5 @@ { + "_id": "3158c78d-58bb-5675-8c7f-6f2337061015", "name": "Zero Point Energy", "subworkflows": [ { @@ -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" + } ], + "applicationName": "espresso", "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": [ @@ -111,46 +146,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 } ], - "next": "107595d1-490f-53a2-8432-7f8a12f14d96" + "context": [], + "next": "107595d1-490f-53a2-8432-7f8a12f14d96", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -169,6 +202,9 @@ "flowchartId": "107595d1-490f-53a2-8432-7f8a12f14d96", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "espresso", "shortName": "qe", @@ -180,14 +216,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "espresso", "name": "ph.x", "schemaVersion": "2022.8.16", "isDefault": false }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "zero_point_energy" + } + ], "applicationName": "espresso", "executableName": "ph.x", "input": [ @@ -196,43 +244,52 @@ } ], "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", + "name": "Zero Point Energy", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "d906bd20-eb92-5a01-a0e2-c81a2d9b2a41", "tags": [], - "head": true + "_id": "151538cc-9e71-5269-8b9e-cb5977151227", + "flowchartId": "d906bd20-eb92-5a01-a0e2-c81a2d9b2a41", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -245,7 +302,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..835a6d50 100644 --- a/data/workflows/workflows/nwchem/total_energy.json +++ b/data/workflows/workflows/nwchem/total_energy.json @@ -1,4 +1,5 @@ { + "_id": "937fbac8-2dec-5fb1-a46f-b8a0cc3d3d05", "name": "Total Energy", "subworkflows": [ { @@ -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" + } ], + "applicationName": "nwchem", "name": "nwchem", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "total_energy" + }, + { + "name": "total_energy_contributions" + } + ], "applicationName": "nwchem", "executableName": "nwchem", "input": [ @@ -83,54 +99,61 @@ ], "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", + "name": "Total Energy", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", "tags": [], - "head": true + "_id": "9e7a15b7-0b7d-5a8e-be7f-b8fcacd5cc13", + "flowchartId": "6059d61a-6a92-5657-9130-02208639aff8", + "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..7953419b 100644 --- a/data/workflows/workflows/python/ml/classification_workflow.json +++ b/data/workflows/workflows/python/ml/classification_workflow.json @@ -1,4 +1,5 @@ { + "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "name": "Python ML Train Classification", "subworkflows": [ { @@ -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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -241,41 +239,49 @@ } ], "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 +296,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -300,14 +309,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -321,36 +338,44 @@ } ], "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 +390,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -375,14 +403,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -396,40 +432,48 @@ } ], "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 +488,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -454,14 +501,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -475,36 +530,44 @@ } ], "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 +586,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 +602,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "workflow:pyml_predict" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -554,42 +635,44 @@ } ], "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 +680,6 @@ "head": false, "results": [ { - "basename": "my_roc_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -614,6 +695,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -624,14 +710,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "file_content" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -645,69 +743,85 @@ } ], "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", + "name": "Set Up the Job", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], - "head": true, - "next": "90738aae-daac-599f-913f-29fb6acdff00" + "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", + "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", + "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", + "properties": [ + "file_content", + "workflow:pyml_predict" + ], "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", diff --git a/data/workflows/workflows/python/ml/clustering_workflow.json b/data/workflows/workflows/python/ml/clustering_workflow.json index 0a88b7a8..fb139d48 100644 --- a/data/workflows/workflows/python/ml/clustering_workflow.json +++ b/data/workflows/workflows/python/ml/clustering_workflow.json @@ -1,4 +1,5 @@ { + "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "name": "Python ML Train Clustering", "subworkflows": [ { @@ -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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -241,41 +239,49 @@ } ], "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 +296,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -300,14 +309,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -321,36 +338,44 @@ } ], "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 +390,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -375,14 +403,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -396,40 +432,48 @@ } ], "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 +488,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -454,14 +501,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -475,36 +530,44 @@ } ], "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 +586,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 +602,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "workflow:pyml_predict" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -554,42 +635,44 @@ } ], "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 +680,6 @@ "head": false, "results": [ { - "basename": "my_roc_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -614,6 +695,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -624,14 +710,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "file_content" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -645,69 +743,85 @@ } ], "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", + "name": "Set Up the Job", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], - "head": true, - "next": "90738aae-daac-599f-913f-29fb6acdff00" + "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", + "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", + "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", + "properties": [ + "file_content", + "workflow:pyml_predict" + ], "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", diff --git a/data/workflows/workflows/python/ml/regression_workflow.json b/data/workflows/workflows/python/ml/regression_workflow.json index 41a45b83..3d8b515b 100644 --- a/data/workflows/workflows/python/ml/regression_workflow.json +++ b/data/workflows/workflows/python/ml/regression_workflow.json @@ -1,4 +1,5 @@ { + "_id": "f447c6df-3b7b-5b8e-a0cc-1a743847ceed", "name": "Python ML Train Regression", "subworkflows": [ { @@ -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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -241,41 +239,49 @@ } ], "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 +296,9 @@ "flowchartId": "cb69ea2a-7efc-56b4-8bbe-0de1e70c49e3", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -300,14 +309,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -321,36 +338,44 @@ } ], "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 +390,9 @@ "flowchartId": "7fff5212-6c6d-586b-9997-4d4485e09383", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -375,14 +403,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -396,40 +432,48 @@ } ], "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 +488,9 @@ "flowchartId": "799de7dc-9394-571b-8e0d-3ff876a3df02", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "python", "shortName": "py", @@ -454,14 +501,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -475,36 +530,44 @@ } ], "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 +586,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 +602,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "workflow:pyml_predict" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -554,42 +635,44 @@ } ], "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 +680,6 @@ "head": false, "results": [ { - "basename": "my_parity_plot.png", - "filetype": "image", "name": "file_content" } ], @@ -614,6 +695,11 @@ "name": "remove_virtual_environment" } ], + "status": "idle", + "statusTrack": [], + "tags": [ + "remove-all-results" + ], "application": { "name": "python", "shortName": "py", @@ -624,14 +710,26 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "file_content" + } + ], "applicationName": "python", "executableName": "python", "input": [ @@ -645,69 +743,85 @@ } ], "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", + "name": "Set Up the Job", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", "tags": [], - "head": true, - "next": "90738aae-daac-599f-913f-29fb6acdff00" + "_id": "03e3f15b-2b22-5bb4-8bfd-6839d28a1ba9", + "flowchartId": "5b51df93-15dd-5440-90fd-a3ffa264b7d8", + "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", + "properties": [ + "file_content", + "workflow:pyml_predict" + ], "workflows": [], "isUsingDataset": true, "schemaVersion": "2022.8.16", diff --git a/data/workflows/workflows/python/python_script.json b/data/workflows/workflows/python/python_script.json index 57173435..3ddf8cf4 100644 --- a/data/workflows/workflows/python/python_script.json +++ b/data/workflows/workflows/python/python_script.json @@ -1,4 +1,5 @@ { + "_id": "de816646-766b-5f97-b468-0937d4381440", "name": "Python Script", "subworkflows": [ { @@ -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" + } ], + "applicationName": "python", "name": "python", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "python", "executableName": "python", "input": [ @@ -68,52 +80,66 @@ ], "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", + "name": "Python Script", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "c50e28b2-a0c5-5324-8b6f-e99b5a546bd8", "tags": [], - "head": true + "_id": "64a079ba-7a12-57b7-ac06-310b2bf8d354", + "flowchartId": "c50e28b2-a0c5-5324-8b6f-e99b5a546bd8", + "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..46c4049f 100644 --- a/data/workflows/workflows/shell/batch_espresso_pwscf.json +++ b/data/workflows/workflows/shell/batch_espresso_pwscf.json @@ -1,4 +1,5 @@ { + "_id": "e0046fb4-37db-5732-bf81-c48e13081a4c", "name": "Shell Batch Job (Espresso PWSCF)", "subworkflows": [ { @@ -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" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -63,44 +75,55 @@ } ], "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", + "name": "Shell Batch Job (Espresso PWSCF)", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "d884e8f7-7acf-5a03-bc9a-186903bdaa0e", "tags": [], - "head": true + "_id": "f0775c7b-214a-5245-b921-5b4eb53d15a9", + "flowchartId": "d884e8f7-7acf-5a03-bc9a-186903bdaa0e", + "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..08c96fde 100644 --- a/data/workflows/workflows/shell/hello_world.json +++ b/data/workflows/workflows/shell/hello_world.json @@ -1,4 +1,5 @@ { + "_id": "d2fd444c-06b4-5d66-baeb-449c680ae1bf", "name": "Shell Script", "subworkflows": [ { @@ -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" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -64,43 +76,54 @@ ], "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", + "name": "Shell Hello World", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "319307c2-bf22-5bf2-b4e9-a4cdf671b786", "tags": [], - "head": true + "_id": "ce33d4cf-e0d2-5020-854d-9ea1fe5c8512", + "flowchartId": "319307c2-bf22-5bf2-b4e9-a4cdf671b786", + "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..6b830da9 100644 --- a/data/workflows/workflows/vasp/band_gap.json +++ b/data/workflows/workflows/vasp/band_gap.json @@ -1,4 +1,5 @@ { + "_id": "1a358471-0a73-5fcb-ad3c-7a8079029c86", "name": "Band Gap", "subworkflows": [ { @@ -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" + } ], + "applicationName": "vasp", "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": [ @@ -119,69 +157,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 } ], - "next": "f0d65517-9592-5bc8-948e-a0851a766cbb" + "context": [], + "next": "f0d65517-9592-5bc8-948e-a0851a766cbb", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -206,6 +248,9 @@ "flowchartId": "f0d65517-9592-5bc8-948e-a0851a766cbb", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -217,21 +262,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" + } ], + "applicationName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_gaps" + }, + { + "name": "fermi_energy" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -249,92 +318,106 @@ } ], "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", + "name": "Band Gap", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "db3b83ea-0ef5-594c-89a8-bde38dbc6105", "tags": [], - "head": true + "_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", - "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..6000344d 100644 --- a/data/workflows/workflows/vasp/band_structure.json +++ b/data/workflows/workflows/vasp/band_structure.json @@ -1,4 +1,5 @@ { + "_id": "25b0ad08-87bb-5400-bea4-acd5fe2163c0", "name": "Band Structure", "subworkflows": [ { @@ -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" + } ], + "applicationName": "vasp", "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": [ @@ -118,69 +157,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 } ], - "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" + "context": [], + "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -202,6 +245,9 @@ "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -213,21 +259,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" + } ], + "applicationName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -245,77 +312,94 @@ } ], "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", + "name": "Band Structure", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "c573187f-a8bb-5084-9fcf-1560bf4a7786", "tags": [], - "head": true + "_id": "cd6e3d59-5544-56ac-878b-fd8716a09768", + "flowchartId": "c573187f-a8bb-5084-9fcf-1560bf4a7786", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -328,7 +412,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..543eaf8a 100644 --- a/data/workflows/workflows/vasp/band_structure_dos.json +++ b/data/workflows/workflows/vasp/band_structure_dos.json @@ -1,4 +1,5 @@ { + "_id": "c8338d40-3c6e-5581-b03c-d7fb5cbb8df5", "name": "Band Structure + Density of States", "subworkflows": [ { @@ -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" + } ], + "applicationName": "vasp", "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": [ @@ -122,69 +161,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 } ], - "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108" + "context": [], + "next": "1e1de3be-f6e4-513e-afe2-c84e567a8108", + "schemaVersion": "2022.8.16", + "isDefault": false }, { "type": "execution", @@ -206,6 +249,9 @@ "flowchartId": "1e1de3be-f6e4-513e-afe2-c84e567a8108", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -217,21 +263,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" + } ], + "applicationName": "vasp", "name": "vasp", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [ + { + "name": "band_structure" + } + ], "applicationName": "vasp", "executableName": "vasp", "input": [ @@ -249,77 +316,94 @@ } ], "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", + "name": "Band Structure + Density of States", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "8a098bb9-73b1-5e84-bfc7-b783e02d0f53", "tags": [], - "head": true + "_id": "d38fea11-9781-5151-8dae-d705381498be", + "flowchartId": "8a098bb9-73b1-5e84-bfc7-b783e02d0f53", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -333,7 +417,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..8744135f 100644 --- a/data/workflows/workflows/vasp/dos.json +++ b/data/workflows/workflows/vasp/dos.json @@ -1,4 +1,5 @@ { + "_id": "629a79fb-a03f-5e34-b2ce-9c735e8ef6c0", "name": "Density of States", "subworkflows": [ { @@ -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" + } ], + "applicationName": "vasp", "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": [ @@ -121,82 +160,93 @@ ], "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", + "name": "Density of States", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "3e64fdb4-ab5b-52a0-a1d5-51343c49481c", "tags": [], - "head": true + "_id": "4897ca33-b023-5a8d-9a5d-9e74df0f00ad", + "flowchartId": "3e64fdb4-ab5b-52a0-a1d5-51343c49481c", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -209,7 +259,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..c87f2a6d 100644 --- a/data/workflows/workflows/vasp/fixed_cell_relaxation.json +++ b/data/workflows/workflows/vasp/fixed_cell_relaxation.json @@ -1,4 +1,5 @@ { + "_id": "cb69418c-2f6c-551d-af81-0cf20ec1113d", "name": "Fixed-cell Relaxation", "subworkflows": [ { @@ -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" + } ], + "applicationName": "vasp", "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": [ @@ -126,87 +169,97 @@ } ], "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", + "name": "Fixed-cell Relaxation", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "0de8c4c8-b722-5cd2-ae68-b484262e0a01", "tags": [], - "head": true + "_id": "db6cc94b-2f26-5688-ba97-80b11567b549", + "flowchartId": "0de8c4c8-b722-5cd2-ae68-b484262e0a01", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -218,7 +271,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..3adbd686 100644 --- a/data/workflows/workflows/vasp/kpoint_convergence.json +++ b/data/workflows/workflows/vasp/kpoint_convergence.json @@ -1,4 +1,5 @@ { + "_id": "fcf105f9-5ae7-5c32-a6b3-e3579cbdf39a", "name": "K-point Convergence", "subworkflows": [ { @@ -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" + } ], + "applicationName": "vasp", "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": [ @@ -211,70 +234,74 @@ } ], "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 +314,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 +359,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 +387,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 +411,38 @@ "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", + "name": "K-point Convergence", + "results": [], + "monitors": [], + "preProcessors": [], + "postProcessors": [], "status": "idle", "statusTrack": [], - "flowchartId": "a34eec2c-cdb2-537d-88c0-ed1d7b205879", "tags": [], - "head": true + "_id": "5d736d84-d616-538f-a09b-81a32ac0777c", + "flowchartId": "a34eec2c-cdb2-537d-88c0-ed1d7b205879", + "schemaVersion": "2022.8.16", + "isDefault": false } ], "properties": [ @@ -443,7 +454,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 f31cd825..da5dae2b 100644 --- a/data/workflows/workflows/vasp/neb.json +++ b/data/workflows/workflows/vasp/neb.json @@ -1,4 +1,5 @@ { + "_id": "2973908e-21ae-5424-afc9-ccb3fde477d8", "name": "Nudged Elastic Band (NEB)", "subworkflows": [ { @@ -15,20 +16,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", @@ -38,11 +32,7 @@ "subtype": "paw", "data": {} }, - "functional": { - "slug": "pbe" - }, - "refiners": [], - "modifiers": [] + "functional": "pbe" }, "units": [ { @@ -83,6 +73,9 @@ "flowchartId": "f969f010-9dae-5085-9ac5-86150ef78897", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -94,21 +87,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" + } ], + "applicationName": "vasp", "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": [ @@ -125,76 +157,80 @@ } ], "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", @@ -234,6 +270,9 @@ "flowchartId": "e65a17ce-10c8-5710-ad4d-fb3d42434091", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "isLicensed": true, "name": "vasp", @@ -245,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" + } ], + "applicationName": "vasp", "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": [ @@ -276,77 +354,102 @@ } ], "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 }, { "_id": "c9b7ad2a-5207-5e41-9b66-28474a8921f8", @@ -384,6 +487,9 @@ "flowchartId": "dc397ead-54ad-513b-992e-aedd54576409", "preProcessors": [], "postProcessors": [], + "status": "idle", + "statusTrack": [], + "tags": [], "application": { "name": "shell", "shortName": "sh", @@ -394,14 +500,22 @@ "schemaVersion": "2022.8.16" }, "executable": { + "preProcessors": [], + "postProcessors": [], "isDefault": true, "monitors": [ - "standard_output" + { + "name": "standard_output" + } ], + "applicationName": "shell", "name": "sh", "schemaVersion": "2022.8.16" }, "flavor": { + "preProcessors": [], + "postProcessors": [], + "results": [], "applicationName": "shell", "executableName": "sh", "input": [ @@ -410,32 +524,39 @@ } ], "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 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 declare class ApplicationStandata extends Standata { static runtimeData: { filesMapByName: { "espresso/espresso_gnu_6.3.json": { @@ -92,8 +106,8 @@ export declare class ApplicationStandata extends Standata { + return [ + name, + { + executable: { + preProcessors: [], + postProcessors: [], + applicationId: [], + ...executable, + applicationName: appName, + name, + }, + flavors: Object.entries(flavors).map(([name, value]) => { + return { + preProcessors: [], + postProcessors: [], + results: [], + ...value, + name, + }; + }), + }, + ]; + })); + return this.appCache[appName]; } - // eslint-disable-next-line class-methods-use-this getAllAppTemplates() { // 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 executableFlavorMapByApplication_json_1.default; @@ -55,7 +77,6 @@ class ApplicationStandata extends base_1.Standata { getAllAppData() { return this.getAll(); } - // eslint-disable-next-line class-methods-use-this getTemplatesByName(appName, execName, templateName) { // TODO: Convert to use this.findEntitiesByTags() when template data is in Standata format const templates = TEMPLATES_LIST; @@ -74,46 +95,107 @@ class ApplicationStandata extends base_1.Standata { const allEntities = this.getAll(); return allEntities.filter((entity) => entity.name === appName); } - static getDefaultVersionForApplication(appName) { - const applicationVersionsMap = new applicationVersionMap_1.ApplicationVersionsMap(applicationVersionsMapByApplication_json_1.default[appName]); - return applicationVersionsMap.defaultVersion; - } static getDefaultBuildForApplicationAndVersion(appName, version) { - const applicationVersionsMap = new applicationVersionMap_1.ApplicationVersionsMap(applicationVersionsMapByApplication_json_1.default[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; - } - // 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; + var _a; + const versionConfig = APP_VERSIONS[appName].versions.find((config) => { + return config.version === version && config.isDefault; }); - 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]; + return (_a = versionConfig === null || versionConfig === void 0 ? void 0 : versionConfig.build) !== null && _a !== void 0 ? _a : null; } getDefaultConfig() { const fullConfig = this.findEntitiesByTags(TAGS.DEFAULT)[0]; const { name, shortName, version, summary, build } = fullConfig; return { name, shortName, version, summary, build }; } + buildApplicationsTree() { + const applicationNames = this.getAllApplicationNames(); + 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]: { + defaultVersion, + versions: versions.reduce((acc, versionInfo) => { + return { + ...acc, + [versionInfo.version]: { + ...acc[versionInfo.version], + [versionInfo.build]: { + ...appData, + ...versionInfo, + }, + }, + }; + }, {}), + }, + }; + }, {}); + } + getApplicationsTree() { + if (this.applicationsTree) { + return this.applicationsTree; + } + this.applicationsTree = this.buildApplicationsTree(); + return this.applicationsTree; + } + 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.getApplicationExecutablesTree(appName); + const config = (execName && appTree[execName]) || + Object.values(appTree).find((exec) => exec.executable.isDefault); + if (!config) { + throw new Error(`Executable ${execName || "default"} not found for application ${appName}`); + } + return config; + } + getExecutableAndFlavorByName(appName, execName, flavorName) { + 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}`); + } + 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/index.d.ts b/dist/js/index.d.ts index dc95a8da..e5e96839 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,6 @@ 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 { setUnitLinks } from "./utils/unit"; export { modelTree, methodTree, baseUiSchema }; diff --git a/dist/js/index.js b/dist/js/index.js index 858f2c29..987c4e98 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.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")); +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,7 @@ 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; } }); +var unit_1 = require("./utils/unit"); +Object.defineProperty(exports, "setUnitLinks", { enumerable: true, get: function () { return unit_1.setUnitLinks; } }); 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/runtime_data/applications/executableFlavorMapByApplication.json b/dist/js/runtime_data/applications/executableFlavorMapByApplication.json index 5daf2ddf..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":[]},"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":[{"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/templatesList.json b/dist/js/runtime_data/applications/templatesList.json index 3c555472..433c74f9 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 lsym = .false.\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":"# ---------------------------------------------------------------- #\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","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"},"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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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"},"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":[{"basename":"wf_r.png","filetype":"image","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 lsym = .false.\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 lsym = .false.\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"},"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"},"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"},"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","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,"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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,"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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"python","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":{"applicationName":"shell","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":{"applicationName":"shell","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"nwchem","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"shell","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":{"applicationName":"shell","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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,"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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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,"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":{"applicationName":"vasp","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,"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":{"applicationName":"shell","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","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":{"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 5fd1f7a7..f4986689 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,5 @@ +<<<<<<< HEAD +{"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} +======= {"_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"}}]} +>>>>>>> 3481763ac8de81e460766e0b9ba43efb30ab707b diff --git a/dist/js/runtime_data/subworkflows/espresso/band_gap.json b/dist/js/runtime_data/subworkflows/espresso/band_gap.json index 8d4e3ddf..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","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":{"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 52ea42cb..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","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":{"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 32109a37..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","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":{"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 ec2069e7..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","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":{"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 1b4a157e..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":["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":{"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 a57fc6bc..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","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":{"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 6b4669ad..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","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":{"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 2b6858e4..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","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":{"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 26b2ca2f..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","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":{"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 fd9d8e5c..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":{"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":{"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 2f3f0400..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":["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":{"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 d8c777d3..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":["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":{"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 be636a9d..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":[],"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":{"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 d27d4f44..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":[{"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":[{"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 d4a82568..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":["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":{"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 83445382..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","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":{"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 cc19f132..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","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":{"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 ad51f63d..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":["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":{"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 62bcbdd2..0b100fb5 100644 --- a/dist/js/runtime_data/subworkflows/espresso/neb.json +++ b/dist/js/runtime_data/subworkflows/espresso/neb.json @@ -1 +1,5 @@ +<<<<<<< HEAD +{"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} +======= {"_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"}]}]} +>>>>>>> 3481763ac8de81e460766e0b9ba43efb30ab707b 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..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":{"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":{"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 f83acb60..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":{"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":{"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 d103fc41..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","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":{"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 addabd57..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","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":{"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 8dff0a51..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","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":{"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 d8b66e69..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_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":{"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 2a26de1e..23827631 100644 --- a/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json +++ b/dist/js/runtime_data/subworkflows/espresso/plot_wavefunction.json @@ -1 +1,5 @@ +<<<<<<< HEAD +{"_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} +======= {"_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":[{"basename":"wf_r.png","filetype":"image","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"}]}]} +>>>>>>> 3481763ac8de81e460766e0b9ba43efb30ab707b diff --git a/dist/js/runtime_data/subworkflows/espresso/post_processor.json b/dist/js/runtime_data/subworkflows/espresso/post_processor.json index f6def150..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":[],"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":{"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 63dcc5c9..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":[],"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":{"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 83468158..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":{"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":{"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 59c777a9..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":{"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":{"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 984271f6..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","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":"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 a4450413..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":{"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":{"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/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..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":["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":{"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 be0263bd..2d91561c 100644 --- a/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json +++ b/dist/js/runtime_data/subworkflows/espresso/wavefunction_amplitude.json @@ -1 +1,5 @@ +<<<<<<< HEAD +{"_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"]} +======= {"_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"]} +>>>>>>> 3481763ac8de81e460766e0b9ba43efb30ab707b 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..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":{"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":{"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 0d553d34..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":{"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":{"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 62528691..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":["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":{"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 8d5f3a1e..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":["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":{"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 a5acb4b4..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":["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":{"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/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..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":[],"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":{"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 3d0571b6..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":[],"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":{"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 9e0e6b3e..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":[],"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":{"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 61fd8e8c..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":["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":{"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 b8bb8081..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":["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":{"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 a51aa5e1..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":["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":{"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 98b92b3d..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":["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":{"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 0d2d5b77..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":["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":{"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 501001e2..3f3edd5a 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,5 @@ +<<<<<<< HEAD +{"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} +======= {"_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"}]}]} +>>>>>>> 3481763ac8de81e460766e0b9ba43efb30ab707b diff --git a/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json b/dist/js/runtime_data/subworkflows/vasp/kpoint_convergence.json index 45e88c93..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":["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":{"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 50497aad..457ddd2f 100644 --- a/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json +++ b/dist/js/runtime_data/subworkflows/vasp/neb_subworkflow.json @@ -1 +1,5 @@ +<<<<<<< HEAD +{"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} +======= {"_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"}]}]} +>>>>>>> 3481763ac8de81e460766e0b9ba43efb30ab707b diff --git a/dist/js/runtime_data/subworkflows/vasp/prepare_images.json b/dist/js/runtime_data/subworkflows/vasp/prepare_images.json index 7d63d571..961be6f1 100644 --- a/dist/js/runtime_data/subworkflows/vasp/prepare_images.json +++ b/dist/js/runtime_data/subworkflows/vasp/prepare_images.json @@ -1 +1,5 @@ +<<<<<<< HEAD +{"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 < 00/POSCAR < 0{{ input.INTERMEDIATE_IMAGES.length + 1 }}/POSCAR < 0{{ loop.index }}/POSCAR < 00/POSCAR < 01/POSCAR <>>>>>> 3481763ac8de81e460766e0b9ba43efb30ab707b diff --git a/dist/js/runtime_data/subworkflows/vasp/recalculate_bands.json b/dist/js/runtime_data/subworkflows/vasp/recalculate_bands.json index 49651ced..1a3d2c61 100644 --- a/dist/js/runtime_data/subworkflows/vasp/recalculate_bands.json +++ b/dist/js/runtime_data/subworkflows/vasp/recalculate_bands.json @@ -1 +1 @@ -{"_id":"12f70885-f81a-5ff4-ae18-7ef4aaa27fc2","name":"Recalculate Bands","application":{"name":"vasp"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_bands","head":true,"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":"12f70885-f81a-5ff4-ae18-7ef4aaa27fc2","name":"Recalculate Bands","application":{"name":"vasp"},"properties":["band_structure"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_bands","head":true,"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/surface_energy.json b/dist/js/runtime_data/subworkflows/vasp/surface_energy.json index c4cd6346..0f980d45 100644 --- a/dist/js/runtime_data/subworkflows/vasp/surface_energy.json +++ b/dist/js/runtime_data/subworkflows/vasp/surface_energy.json @@ -1 +1 @@ -{"_id":"257d53c6-c3b6-564c-95ce-dd0514d26c63","name":"Surface Energy","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":"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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":"913f756d-fbe1-548f-b3fc-f82ac46f1015","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]},{"type":"execution","name":"vasp_symprec","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":"913f756d-fbe1-548f-b3fc-f82ac46f1015","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_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"],"name":"vasp_symprec","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n# To avoid errors with high precision structures: \"internal error in subroutine SGRCON\"\nSYMPREC = 1e-6\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n# To avoid errors with high precision structures: \"internal error in subroutine SGRCON\"\nSYMPREC = 1e-6\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":"fcd88119-817c-5ac1-a430-ba892ac743eb"},{"name":"e-slab","type":"assignment","operand":"E_SLAB","value":"total_energy","input":[{"name":"total_energy","scope":"913f756d-fbe1-548f-b3fc-f82ac46f1015"}],"head":false,"results":[],"monitors":[],"flowchartId":"fcd88119-817c-5ac1-a430-ba892ac743eb","preProcessors":[],"postProcessors":[],"next":"542ea9ad-8a07-5a76-b233-f72fb27c4fc6","application":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","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":{"isLicensed":true,"name":"vasp","shortName":"vasp","summary":"Vienna Ab-initio Simulation Package","build":"GNU","isDefault":true,"version":"5.4.4","schemaVersion":"2022.8.16"},"status":"idle","statusTrack":[],"tags":[]}]} +{"_id":"257d53c6-c3b6-564c-95ce-dd0514d26c63","name":"Surface Energy","application":{"name":"vasp"},"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":"paw","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":"913f756d-fbe1-548f-b3fc-f82ac46f1015","schemaVersion":"2022.8.16","isDefault":false},{"type":"execution","name":"vasp_symprec","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":"913f756d-fbe1-548f-b3fc-f82ac46f1015","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_SYMPREC"},{"name":"KPOINTS"},{"name":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"}],"name":"vasp_symprec","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nLORBIT = 11\n# To avoid errors with high precision structures: \"internal error in subroutine SGRCON\"\nSYMPREC = 1e-6\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":"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}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/total_energy.json b/dist/js/runtime_data/subworkflows/vasp/total_energy.json index b0161ad0..f62e0de2 100644 --- a/dist/js/runtime_data/subworkflows/vasp/total_energy.json +++ b/dist/js/runtime_data/subworkflows/vasp/total_energy.json @@ -1 +1 @@ -{"_id":"1cd988fa-03f2-5b8c-aa72-8d7e50554988","name":"Total Energy","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":[{"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"}]}]} +{"_id":"1cd988fa-03f2-5b8c-aa72-8d7e50554988","name":"Total Energy","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","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":[],"schemaVersion":"2022.8.16","isDefault":false}],"schemaVersion":"2022.8.16","isDraft":false} diff --git a/dist/js/runtime_data/subworkflows/vasp/variable_cell_relaxation.json b/dist/js/runtime_data/subworkflows/vasp/variable_cell_relaxation.json index f1f4ac7c..3b2d5ef0 100644 --- a/dist/js/runtime_data/subworkflows/vasp/variable_cell_relaxation.json +++ b/dist/js/runtime_data/subworkflows/vasp/variable_cell_relaxation.json @@ -1 +1 @@ -{"systemName":"vasp-variable-cell-relaxation","_id":"542f7e87-cf65-5579-952c-ddd9611ac558","name":"Variable-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_vc_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":"26d53101-7288-547d-a994-e244417568d6","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_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"],"name":"vasp_vc_relax","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 3\nIBRION = 2\nNSW = 300\nLWAVE = .FALSE.\nLCHARG = .FALSE.\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 3\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"}]}],"tags":["variable-cell_relaxation"]} +{"systemName":"vasp-variable-cell-relaxation","_id":"542f7e87-cf65-5579-952c-ddd9611ac558","name":"Variable-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_vc_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":"26d53101-7288-547d-a994-e244417568d6","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_VC_RELAX"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"monitors":[{"name":"standard_output"},{"name":"convergence_electronic"},{"name":"convergence_ionic"}],"name":"vasp_vc_relax","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 0\nSIGMA = 0.05\nISIF = 3\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,"tags":["variable-cell_relaxation"]} diff --git a/dist/js/runtime_data/subworkflows/vasp/zero_point_energy.json b/dist/js/runtime_data/subworkflows/vasp/zero_point_energy.json index 607b6c69..1ad37c51 100644 --- a/dist/js/runtime_data/subworkflows/vasp/zero_point_energy.json +++ b/dist/js/runtime_data/subworkflows/vasp/zero_point_energy.json @@ -1 +1 @@ -{"_id":"2667054e-3c04-50a9-bd95-55c530d727c9","name":"Zero Point Energy","application":{"name":"vasp"},"properties":["total_energy","fermi_energy","pressure","atomic_forces","stress_tensor","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":{"slug":"pbe"},"refiners":[],"modifiers":[]},"units":[{"type":"execution","name":"vasp_zpe","head":true,"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"}],"flowchartId":"c205541a-c734-5c4a-b0ca-a07d05c3e0ea","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_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"],"name":"vasp_zpe","schemaVersion":"2022.8.16","isDefault":false},"status":"idle","statusTrack":[],"tags":[],"input":[{"applicationName":"vasp","content":"ISMEAR = 1\nSIGMA = 0.1\nIBRION = 5\n","contextProviders":[{"name":"VASPInputDataManager"}],"executableName":"vasp","name":"INCAR","rendered":"ISMEAR = 1\nSIGMA = 0.1\nIBRION = 5\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":"2667054e-3c04-50a9-bd95-55c530d727c9","name":"Zero Point Energy","application":{"name":"vasp"},"properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_force","zero_point_energy"],"model":{"type":"dft","subtype":"gga","method":{"type":"pseudopotential","subtype":"paw","data":{}},"functional":"pbe"},"units":[{"type":"execution","name":"vasp_zpe","head":true,"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"}],"flowchartId":"c205541a-c734-5c4a-b0ca-a07d05c3e0ea","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":"fermi_energy"},{"name":"pressure"},{"name":"atomic_forces"},{"name":"stress_tensor"},{"name":"total_force"},{"name":"zero_point_energy"}],"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"}],"name":"vasp_zpe","schemaVersion":"2022.8.16","isDefault":false},"input":[{"template":{"applicationName":"vasp","content":"ISMEAR = 1\nSIGMA = 0.1\nIBRION = 5\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/workflows.json b/dist/js/runtime_data/workflows.json index b9d3aa27..8e014af5 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,"isMultiMaterial":true,"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"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Average Electrostatic Potential","properties":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force","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"},"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":"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"}],"status":"idle","statusTrack":[],"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","postProcessors":[],"preProcessors":[],"results":[{"name":"average_potential_profile"}],"status":"idle","statusTrack":[],"tags":[],"type":"execution"}]}],"units":[{"_id":"7f2f8a38-c3bd-5aa9-b3b0-2c367287dd60","flowchartId":"88861e21-1e6d-557d-b080-eafe3511872f","head":true,"name":"Average Electrostatic Potential","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_gap.json":{"_id":"cd826954-8c96-59f7-b2de-f36ce2d86105","application":{"name":"espresso"},"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":"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"},"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"}]}],"units":[{"_id":"233bb8cf-3b4a-5378-84d9-a6a95a2ab43d","flowchartId":"db3b83ea-0ef5-594c-89a8-bde38dbc6105","head":true,"name":"Band Gap","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"},"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"}]}],"units":[{"_id":"f1341a29-777d-5ca3-8933-78a5e0d3f6f2","flowchartId":"f7a0860d-6f9e-59e3-b600-07bbf986998a","head":true,"name":"HSE Band Gap","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"},"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 lsym = .false.\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 lsym = .false.\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":"26d32e68-c2b5-50e9-8933-15f684fcc039","flowchartId":"c573187f-a8bb-5084-9fcf-1560bf4a7786","head":true,"name":"Band Structure","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/band_structure_dos.json":{"_id":"9b36cf93-81b9-5a40-bba3-d25955a9bfa8","application":{"name":"espresso"},"isDefault":false,"name":"Band Structure + Density of States","properties":["atomic_forces","band_gaps","band_structure","density_of_states","fermi_energy","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"},"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 lsym = .false.\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 lsym = .false.\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"}]}],"units":[{"_id":"fa594399-6b98-5d79-986c-0713601dc06c","flowchartId":"8a098bb9-73b1-5e84-bfc7-b783e02d0f53","head":true,"name":"Band Structure + Density of States","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"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Preliminary SCF Calculation","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"}]},{"_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"},"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"}]},{"_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"},"model":{"functional":{"slug":"hse06"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"hybrid","type":"dft"},"name":"Main HSE Run","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 lsym = .false.\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 lsym = .false.\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":"79f2cb6a-7994-5369-8c85-af07c55ad26f","flowchartId":"b6a2b27a-0fec-5e0e-8974-073ee9d2ad83","head":true,"name":"Preliminary SCF Calculation","next":"65789b0a-cfe2-5062-a53e-89f71112fb57","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"a2785cc5-2427-5c7a-b30f-7077475b948c","flowchartId":"65789b0a-cfe2-5062-a53e-89f71112fb57","head":false,"name":"Extract KPOINTS","next":"8f4c63a3-a06a-5f73-88d7-a57d7958b91d","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"},{"_id":"e47ca302-96f2-5726-9b4c-f34cdfaa7f72","flowchartId":"8f4c63a3-a06a-5f73-88d7-a57d7958b91d","head":false,"name":"Main HSE Run","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"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Bandstructure with spin magnetism","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"}]}],"units":[{"_id":"354942f1-9f3d-57a9-b5ae-6bdf5b3a60af","flowchartId":"41e70bc1-ba00-5871-9289-4d57c7b79452","head":true,"name":"Bandstructure with spin magnetism","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"},"model":{"functional":{"slug":"pbe"},"method":{"data":{"searchText":"nc-fr"},"subtype":"nc-fr","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Bandstructure with SOC","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 lsym = .false.\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 lsym = .false.\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":"153b4a88-5d56-553f-b7d3-40df96968eb4","flowchartId":"872d54a6-679c-5af5-a153-72709fcf46df","head":true,"name":"Bandstructure with SOC","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/dielectric_tensor.json":{"_id":"cba28656-925a-59ad-b572-b6dee17a63ce","application":{"name":"espresso"},"isDefault":false,"name":"Dielectric Function","properties":["atomic_forces","band_gaps","dielectric_tensor","fermi_energy","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"},"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"}]}],"units":[{"_id":"38340b52-83ad-5862-bc18-c140bdc0cb72","flowchartId":"8408f3c4-1c42-5ffe-bc29-bee11b5a6a05","head":true,"name":"Compute Dielectric Function","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/dos.json":{"_id":"b91a64fa-8b98-5aee-a568-9247fb9a00b3","application":{"name":"espresso"},"isDefault":false,"name":"Density of States","properties":["atomic_forces","band_gaps","density_of_states","fermi_energy","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"},"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"}]}],"units":[{"_id":"2cf317f3-3306-5a96-bc9b-e9103ebcd5be","flowchartId":"3e64fdb4-ab5b-52a0-a1d5-51343c49481c","head":true,"name":"Density of States","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"},"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"}]}],"units":[{"_id":"e2749c5a-fcd9-589c-819b-8b88c5c90924","flowchartId":"79e421a1-18aa-5c27-b8a8-9a769c1a89a0","head":true,"name":"Electronic Density Mesh","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"},"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"}]}],"units":[{"_id":"0de669f6-a455-5dae-b331-19dc85f7090f","flowchartId":"e7893fdf-0515-58a0-a9e1-0393bdc57d33","head":true,"name":"Effective Screening Medium (ESM)","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"},"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"}]}],"units":[{"_id":"69728792-afeb-50aa-9b4e-6974a90f676a","flowchartId":"f0733dc9-f3ad-5a1c-82fc-515edc0276b6","head":true,"name":"Effective Screening Medium (ESM) Relax","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"},"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"}]}],"units":[{"_id":"fb75e249-5489-5146-bd8a-786d33330d9c","flowchartId":"0de8c4c8-b722-5cd2-ae68-b484262e0a01","head":true,"name":"Fixed-cell Relaxation","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/gw_band_structure_band_gap_full_frequency.json":{"_id":"b2b4871b-30e5-5320-a130-a73027560156","application":{"name":"espresso"},"isDefault":false,"name":"Full Frequency GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","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"},"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"}]}],"units":[{"_id":"46bcdcc8-628e-518e-b8c3-9bf38d7a2aef","flowchartId":"b1748925-1c8e-5c73-a8ff-ec4da33a49ce","head":true,"name":"Full Frequency GW Band Structure + Band Gap","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/gw_band_structure_band_gap_plasmon_pole.json":{"_id":"7d083bf3-c506-5294-8f3c-74d49d6d8aa2","application":{"name":"espresso"},"isDefault":false,"name":"Plasmon-Pole GW Band Structure + Band Gap","properties":["atomic_forces","band_gaps","band_structure","fermi_energy","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"},"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"}]}],"units":[{"_id":"72b79a87-8eef-5fe2-9d6c-6c9c256dd56c","flowchartId":"911d4cc1-cde5-5097-a7be-0e11f73113a7","head":true,"name":"Plasmon-Pole GW Band Structure + Band Gap","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"},"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"}]}],"units":[{"_id":"ff6a8fbc-2202-5786-9a26-67c843417d0b","flowchartId":"a34eec2c-cdb2-537d-88c0-ed1d7b205879","head":true,"name":"K-point Convergence","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/neb.json":{"_id":"6dc0a5af-7ec5-50e4-b663-42fc5ddf0ef1","application":{"name":"espresso"},"isDefault":false,"isMultiMaterial":true,"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"},"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"}]}],"units":[{"_id":"c9034468-df28-5357-8912-02226f919042","flowchartId":"134c70e2-aeaf-543d-aded-1585cd71b800","head":true,"name":"Nudged Elastic Band (NEB)","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"},"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"}]}],"units":[{"_id":"bfb69b48-8fbf-5a0d-8949-448f20754766","flowchartId":"2cd13237-d089-5d5e-8372-1db8bb8e383f","head":true,"name":"Phonon Dispersions","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/phonon_dos.json":{"_id":"3f7ff505-615d-5544-ab5f-407e67e1add6","application":{"name":"espresso"},"isDefault":false,"name":"Phonon Density of States","properties":["atomic_forces","fermi_energy","phonon_dos","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"},"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"}]}],"units":[{"_id":"2232051b-9f2a-5a48-9b4d-6231eb6e8297","flowchartId":"1954e749-1d37-50e6-8ae7-7292f5ef59c0","head":true,"name":"Phonon Density of States","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/phonon_dos_dispersion.json":{"_id":"82043e83-bf1d-5b08-bed6-369c7dfcc1ae","application":{"name":"espresso"},"isDefault":false,"name":"Phonon Density of States + Dispersions","properties":["atomic_forces","fermi_energy","phonon_dispersions","phonon_dos","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"},"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"}]}],"units":[{"_id":"291d25cd-378a-5be7-9d85-c8013a4b165b","flowchartId":"7897ed9a-6b48-5a79-a50e-28797f3912a5","head":true,"name":"Phonon Density of States + Dispersions","status":"idle","statusTrack":[],"tags":[],"type":"subworkflow"}],"workflows":[]},"espresso/phonon_map.json":{"_id":"23b9058b-884c-52d4-82a8-ee162b9761e0","application":{"name":"espresso"},"isDefault":false,"name":"Phonon Map","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"},"model":{"functional":{"slug":"pbe"},"method":{"data":{},"subtype":"us","type":"pseudopotential"},"modifiers":[],"refiners":[],"subtype":"gga","type":"dft"},"name":"Preliminary SCF Calculation","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"}]},{"_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"},"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"}]},{"_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"},"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)"}]},{"_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 lsym = .false.\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 lsym = .false.\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,"isMultiMaterial":true,"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"},"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 lsym = .false.\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 lsym = .false.\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"},"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 lsym = .false.\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 lsym = .false.\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"},"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 lsym = .false.\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 lsym = .false.\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":[{"basename":"wf_r.png","filetype":"image","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,"isMultiMaterial":true,"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"},"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"},"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","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":"731d3397-3278-516a-b28e-53626ef50f0a"},{"_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":{"applicationName":"shell","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":{"applicationName":"espresso","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":{"applicationName":"shell","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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,"isMultiMaterial":true,"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,"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"python","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,"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"python","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,"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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 lsym = .false.\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":{"applicationName":"espresso","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":{"applicationName":"espresso","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":{"applicationName":"python","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"python","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":{"applicationName":"espresso","hasAdvancedComputeOptions":true,"isDefault":true,"monitors":[{"name":"standard_output"},{"name":"convergence_ionic"},{"name":"convergence_electronic"}],"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":{"applicationName":"espresso","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":{"applicationName":"nwchem","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"python","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":{"applicationName":"shell","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":{"applicationName":"shell","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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":{"applicationName":"vasp","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,"isMultiMaterial":true,"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,"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":{"applicationName":"vasp","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":{"applicationName":"vasp","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,"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":{"applicationName":"shell","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"},"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}},"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":{},"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":{},"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","config":{"attributes":{"isMultiMaterial":true}},"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","config":{"attributes":{"isMultiMaterial":true}},"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","config":{"attributes":{"isMultiMaterial":true}},"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","config":{"attributes":{"isMultiMaterial":true}},"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"},"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"},"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}},"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"},"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"},"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","config":{"attributes":{"isMultiMaterial":true}},"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","config":{"attributes":{"isMultiMaterial":true}},"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","config":{"attributes":{"isMultiMaterial":true}},"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","config":{"attributes":{"isMultiMaterial":true}},"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..503e6490 100644 --- a/dist/js/types/application.d.ts +++ b/dist/js/types/application.d.ts @@ -1,20 +1,24 @@ -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 VersionFields = "isDefault" | "build" | "hasAdvancedComputeOptions" | "version"; +type ApplicationFields = "name" | "shortName" | "summary" | "isLicensed"; +export type ApplicationVersion = Pick; +export type ApplicationConfigItem = Pick & { defaultVersion: string; - versions: ApplicationVersionInfo[]; - name: Required["name"]; + versions: ApplicationVersion[]; }; export type ApplicationVersionsMapByApplicationType = { - [key: string]: ApplicationVersionsMapType; + [key: string]: ApplicationConfigItem; +}; +type OptionalFlavorSchema = Partial; +type RequiredFlavorFields = "input" | "monitors" | "applicationName" | "executableName" | "isDefault"; +type OptionalFlavorFields = "results"; +export 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"][]; }; -export interface ExecutableTreeItem extends Pick { - isDefault?: ApplicationSchemaBase["isDefault"]; - supportedApplicationVersions?: ApplicationSchemaBase["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/utils/applicationVersionMap.d.ts b/dist/js/utils/applicationVersionMap.d.ts index ed703870..199475f8 100644 --- a/dist/js/utils/applicationVersionMap.d.ts +++ b/dist/js/utils/applicationVersionMap.d.ts @@ -1,21 +1,21 @@ -import { ApplicationSchemaBase } from "@mat3ra/esse/dist/js/types"; -import { ApplicationVersionInfo, ApplicationVersionsMapType } from "../types/application"; -export declare class ApplicationVersionsMap implements ApplicationVersionsMapType { - shortName?: string | undefined; - summary?: string | undefined; +import { ApplicationSchema } from "@mat3ra/esse/dist/js/types"; +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(): { - 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 versionConfigs(): ApplicationVersion[]; + 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/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/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/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 93d3c6c4..6d1a72da 100644 --- a/dist/js/workflow.js +++ b/dist/js/workflow.js @@ -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 af6dc4b4..bccd03dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,37 +9,33 @@ "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" + "nunjucks": "^3.2.4", + "sprintf-js": "^1.1.3" }, "devDependencies": { - "@exabyte-io/eslint-config": "^2022.11.17-0", - "@mat3ra/ade": "2025.11.19-0", - "@mat3ra/code": "^2025.8.7-0", - "@mat3ra/esse": "^2026.3.7-0", - "@mat3ra/mode": "2025.12.25-0", + "@exabyte-io/eslint-config": "2025.5.13-0", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse.git#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "@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": "^2026.3.7-0", - "@mat3ra/wode": "2026.2.9-0", "@types/chai": "^4.3.5", "@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", + "ajv": "^8.17.1", + "ajv-formats": "^2.1.1", "babel-eslint": "^10.1.0", "chai": "^4.3.4", "eslint": "7.32.0", @@ -57,16 +53,20 @@ "lint-staged": "^12.1.2", "mocha": "10.3.0", "nyc": "^15.1.0", - "prettier": "^2.7.1" + "prettier": "^2.7.1", + "ts-node": "^10.9.1", + "typescript": "^4.5.5" }, "engines": { "node": ">=20.0.0" + }, + "peerDependencies": { + "@mat3ra/esse": "*" } }, "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 +96,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", @@ -127,6 +126,7 @@ "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.28.5", @@ -141,6 +141,7 @@ "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": { "node": ">=6.9.0" @@ -148,8 +149,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 +178,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", @@ -204,6 +202,7 @@ "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.29.0", @@ -218,8 +217,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" @@ -232,6 +230,7 @@ "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.28.6", @@ -245,17 +244,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 +265,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 +281,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 +297,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 +308,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 +316,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", @@ -337,6 +330,7 @@ "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.28.6", @@ -350,6 +344,7 @@ "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.28.6", @@ -365,8 +360,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" @@ -379,6 +373,7 @@ "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": { "node": ">=6.9.0" @@ -386,8 +381,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 +396,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 +413,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 +425,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 +433,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 +441,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 +474,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 +488,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 +499,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 +512,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 +520,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 +533,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 +541,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" @@ -575,6 +554,7 @@ "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.29.0" @@ -588,8 +568,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 +583,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 +597,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 +611,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 +626,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 +642,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 +659,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 +674,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 +690,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 +705,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 +720,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 +735,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 +750,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 +765,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 +780,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 +798,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 +813,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 +829,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 +844,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 +861,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 +876,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 +887,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 +898,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 +912,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 +923,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 +933,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 +947,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 +962,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 +972,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 +987,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 +998,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 +1009,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 +1020,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 +1031,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 +1042,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 +1053,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 +1067,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 +1080,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 +1095,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 +1110,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 +1123,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 +1139,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 +1156,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 +1169,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 +1183,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 +1198,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 +1213,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 +1232,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 +1248,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 +1262,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 +1278,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 +1291,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 +1307,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 +1320,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 +1335,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 +1350,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 +1364,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 +1379,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 +1394,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 +1409,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 +1422,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 +1437,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 +1451,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 +1465,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 +1480,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 +1498,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", @@ -1631,6 +1515,7 @@ "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": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", @@ -1645,8 +1530,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 +1543,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 +1557,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 +1571,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 +1590,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 +1604,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 +1618,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 +1634,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 +1647,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 +1662,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 +1679,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 +1693,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 +1706,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 +1725,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 +1739,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 +1753,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 +1767,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 +1783,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 +1797,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 +1810,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 +1826,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 +1840,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 +1854,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 +1867,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 +1886,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 +1899,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 +1915,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 +1929,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 +1945,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 +2032,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 +2047,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 +2066,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 +2083,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 +2101,16 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", - "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "version": "7.28.4", "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==", - "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", @@ -2297,6 +2124,7 @@ "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.28.6", @@ -2311,6 +2139,7 @@ "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.29.0", @@ -2329,6 +2158,7 @@ "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": { "@babel/helper-string-parser": "^7.27.1", @@ -2340,8 +2170,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 +2181,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 +2190,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 +2203,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 +2211,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 +2218,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 +2236,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 +2247,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 +2255,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 +2274,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 +2289,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 +2297,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 +2305,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,133 +2317,52 @@ }, "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==", - "dev": true, - "hasInstallScript": 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/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", - "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/@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", - "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", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha512-5WsVTFcH1ut/kkhAaHf4PVgI8c7++GiVcpCGxPouI6ZVjsqPnSDf8h/8HtVqc0t4fzRXwnMK70EcZeAs3PIddg==", - "dev": true, - "license": "MIT", - "peer": true - }, "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 +2375,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 +2395,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 +2403,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 +2415,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 +2427,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 +2438,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 +2452,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 +2463,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 +2471,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 +2484,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 +2493,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 +2502,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 +2510,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", @@ -2827,33 +2529,10 @@ "dev": true, "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==", - "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" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@mat3ra/code": "*", - "@mat3ra/esse": "*", - "@mat3ra/made": "*", - "@mat3ra/standata": "*", - "@mat3ra/utils": "*" - } - }, "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 +2570,9 @@ } }, "node_modules/@mat3ra/esse": { - "version": "2026.3.7-0", - "resolved": "https://registry.npmjs.org/@mat3ra/esse/-/esse-2026.3.7-0.tgz", - "integrity": "sha512-CccwryLKAA/zp+ICCvD+kXKwywMywkGY7gvTVANJevilE9VPIpnF32arjawZHrQy+1grzS5b9orBlCpDUWPPYA==", + "version": "0.0.0", + "resolved": "git+ssh://git@github.com/Exabyte-io/esse.git#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "integrity": "sha512-qQl96uFmRcA1bP7fxQjSIbt5YtAJ5tcWQEQLgtcPXb1k6COrrc/HqkI5a8QyMxC8NclNosIAzM9myj5sQ+AK0w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2925,9 +2604,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": { @@ -2955,21 +2634,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", @@ -2986,9 +2665,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": { @@ -3053,76 +2732,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", @@ -3174,9 +2853,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": { @@ -3245,12 +2924,33 @@ "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==", + "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": "MIT" + "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", @@ -3258,7 +2958,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", @@ -3287,7 +2986,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", @@ -3314,12 +3012,11 @@ } }, "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", - "peer": true, "dependencies": { "@babel/core": "7.24.1", "@exabyte-io/periodic-table.js": "2022.5.28-0", @@ -3343,10 +3040,88 @@ "@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", - "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": { @@ -3512,165 +3287,46 @@ "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/utils/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "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==", - "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", - "crypto-js": "^4.2.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "mixwith": "^0.1.1", - "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" + "typed-function": "^4.1.1" }, - "engines": { - "node": ">=6.9.0" + "bin": { + "mathjs": "bin/cli.js" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 18" } }, - "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/utils/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "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" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "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==", + "node_modules/@mat3ra/utils/node_modules/typed-function": { + "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" + "license": "MIT", + "engines": { + "node": ">= 18" + } }, "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": { @@ -3679,8 +3335,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": { @@ -3693,8 +3347,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": { @@ -3703,8 +3355,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": { @@ -3715,34 +3365,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" }, @@ -3752,29 +3410,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": { @@ -3783,22 +3434,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": { @@ -3807,52 +3452,38 @@ }, "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==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "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==", + "version": "20.19.25", "dev": true, "license": "MIT", "dependencies": { - "csstype": "^3.2.2" + "undici-types": "~6.21.0" } }, - "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==", + "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", - "dependencies": { - "@types/json-schema": "*", - "@types/react": "*" - } + "license": "MIT" }, "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" }, @@ -3862,15 +3493,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": { @@ -3903,9 +3531,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": { @@ -3917,8 +3543,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": { @@ -3945,8 +3569,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": { @@ -3963,8 +3585,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": { @@ -3991,8 +3611,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": { @@ -4005,8 +3623,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": { @@ -4032,9 +3648,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": { @@ -4046,8 +3660,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": { @@ -4072,9 +3684,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": { @@ -4086,8 +3696,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": { @@ -4104,8 +3712,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": { @@ -4117,15 +3723,11 @@ }, "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" @@ -4136,8 +3738,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" @@ -4145,8 +3746,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" @@ -4157,8 +3757,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" @@ -4169,8 +3768,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": { @@ -4183,8 +3780,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", @@ -4199,8 +3795,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": { @@ -4220,21 +3814,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" @@ -4242,8 +3833,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": { @@ -4258,8 +3847,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": { @@ -4271,8 +3858,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" @@ -4280,8 +3865,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" @@ -4295,8 +3878,6 @@ }, "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, "license": "ISC", "dependencies": { @@ -4309,8 +3890,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": { @@ -4322,27 +3901,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": { @@ -4359,7 +3931,6 @@ "integrity": "sha512-NiQJq0vH5nEebm7FMs52fli23nwCh+RBKZZtA5g5qUmqGAkb9n8/WOTW8zjDocLADXXM1CRanFfPTMdrI2yZwg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "almost-equal": "0.0.0", "an-array": "^1.0.0" @@ -4367,8 +3938,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": { @@ -4384,8 +3953,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": { @@ -4407,8 +3974,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": { @@ -4417,8 +3982,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": { @@ -4436,8 +3999,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": { @@ -4455,8 +4016,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": { @@ -4477,15 +4036,10 @@ }, "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": { @@ -4494,15 +4048,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" @@ -4510,8 +4061,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": { @@ -4520,8 +4069,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": { @@ -4535,9 +4082,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": { @@ -4546,16 +4091,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": { @@ -4575,8 +4115,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": { @@ -4585,8 +4123,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", @@ -4599,8 +4136,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", @@ -4612,8 +4148,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" @@ -4624,14 +4159,14 @@ }, "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==", + "dev": true, "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -4639,8 +4174,6 @@ }, "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, "license": "MIT", "engines": { @@ -4652,8 +4185,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", @@ -4662,8 +4194,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -4675,8 +4205,6 @@ }, "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" }, @@ -4684,6 +4212,7 @@ "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -4715,14 +4244,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": { @@ -4737,8 +4263,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": { @@ -4753,8 +4277,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": { @@ -4772,8 +4294,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": { @@ -4786,8 +4306,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": { @@ -4803,8 +4321,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" @@ -4812,8 +4329,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": { @@ -4824,6 +4339,7 @@ "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": [ { "type": "opencollective", @@ -4842,8 +4358,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": { @@ -4861,8 +4375,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", @@ -4877,8 +4389,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": { @@ -4887,8 +4397,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": { @@ -4900,8 +4408,6 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "optional": true, "dependencies": { @@ -4925,8 +4431,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": { @@ -4935,8 +4439,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": { @@ -4948,8 +4450,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": { @@ -4965,8 +4465,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": { @@ -4977,15 +4475,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": { @@ -4994,8 +4488,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": { @@ -5009,8 +4501,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": { @@ -5019,8 +4509,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", @@ -5033,8 +4522,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", @@ -5045,8 +4532,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" @@ -5057,21 +4542,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" @@ -5079,8 +4559,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": { @@ -5089,14 +4567,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": { @@ -5105,8 +4580,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", @@ -5116,8 +4589,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", @@ -5128,36 +4599,24 @@ }, "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==", + "dev": true, "license": "MIT", "dependencies": { "browserslist": "^4.28.1" @@ -5171,6 +4630,7 @@ "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", "funding": { @@ -5180,14 +4640,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", @@ -5200,8 +4658,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": { @@ -5210,36 +4666,21 @@ }, "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" - }, - "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", - "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": { @@ -5256,8 +4697,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": { @@ -5274,8 +4713,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": { @@ -5292,8 +4729,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" @@ -5309,8 +4744,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": { @@ -5319,15 +4752,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": { @@ -5339,14 +4768,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": { @@ -5361,8 +4787,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": { @@ -5379,8 +4803,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": { @@ -5397,24 +4819,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": { @@ -5426,8 +4853,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" @@ -5438,8 +4864,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": { @@ -5453,8 +4877,6 @@ }, "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" }, @@ -5462,19 +4884,17 @@ "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" }, "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", @@ -5485,9 +4905,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": { @@ -5555,8 +4973,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": { @@ -5565,8 +4981,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": { @@ -5575,8 +4989,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": { @@ -5588,8 +5000,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": { @@ -5604,8 +5014,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": { @@ -5617,8 +5025,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": { @@ -5635,15 +5041,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" @@ -5651,15 +5054,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" @@ -5670,9 +5070,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", @@ -5726,10 +5124,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.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "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": { @@ -5750,8 +5177,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": { @@ -5770,8 +5195,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": { @@ -5783,8 +5206,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": { @@ -5812,8 +5233,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": { @@ -5824,18 +5243,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": { @@ -5852,8 +5290,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": { @@ -5862,8 +5298,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": { @@ -5890,8 +5324,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": { @@ -5900,8 +5332,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": { @@ -5913,15 +5343,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": { @@ -5943,9 +5369,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": { @@ -5955,10 +5379,83 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-jsonc": { + "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, + "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": { @@ -5984,8 +5481,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": { @@ -6000,8 +5495,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": { @@ -6022,8 +5515,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": { @@ -6065,8 +5556,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": { @@ -6078,8 +5567,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": { @@ -6096,8 +5583,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": { @@ -6106,8 +5591,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", @@ -6119,8 +5603,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" @@ -6128,8 +5611,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" @@ -6143,8 +5625,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" @@ -6152,8 +5633,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" @@ -6161,8 +5641,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" @@ -6170,8 +5649,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", @@ -6186,8 +5664,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" @@ -6195,8 +5672,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" @@ -6204,8 +5680,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", @@ -6217,14 +5692,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" @@ -6235,14 +5708,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", @@ -6255,8 +5726,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" @@ -6264,8 +5734,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", @@ -6276,9 +5745,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" @@ -6289,8 +5757,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" @@ -6301,8 +5768,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" @@ -6310,8 +5776,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" @@ -6319,8 +5784,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": { @@ -6343,21 +5806,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": { @@ -6373,20 +5831,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", @@ -6400,9 +5855,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": { @@ -6411,8 +5864,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" @@ -6423,8 +5875,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -6436,8 +5886,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", @@ -6450,8 +5899,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": { @@ -6467,8 +5914,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": { @@ -6477,8 +5922,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", @@ -6491,14 +5935,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": { @@ -6513,8 +5954,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": { @@ -6527,8 +5966,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": { @@ -6537,8 +5974,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": [ { @@ -6558,34 +5993,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==", + "dev": true, "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==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "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 +6011,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 +6030,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 +6043,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 +6051,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 +6059,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 +6067,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 +6075,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 +6098,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 +6106,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 +6118,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 +6129,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 +6145,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 +6164,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==", + "devOptional": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -6782,8 +6175,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 +6189,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 +6204,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 +6223,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 +6231,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 +6242,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 +6260,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 +6271,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 +6278,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 +6289,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 +6303,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 +6314,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 +6328,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 +6343,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 +6351,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 +6362,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 +6370,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 +6383,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 +6391,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 +6406,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 +6414,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 +6422,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 +6431,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 +6449,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 +6465,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 +6483,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,8 +6497,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -7172,8 +6508,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 +6523,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 +6539,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 +6553,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 +6569,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 +6584,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==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7268,8 +6592,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 +6606,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 +6617,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 +6635,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==", + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -7329,8 +6646,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 +6657,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 +6665,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 +6676,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 +6687,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,8 +6698,6 @@ }, "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, "license": "MIT", "engines": { @@ -7401,8 +6706,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 +6721,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 +6729,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 +6740,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 +6757,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 +6768,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 +6782,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 +6793,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 +6808,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 +6824,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 +6838,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 +6854,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 +6865,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 +6876,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 +6890,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 +6905,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 +6913,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 +6931,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 +6939,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 +6950,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 +6964,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 +6980,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 +6991,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 +7004,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 +7017,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 +7029,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 +7042,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 +7050,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 +7062,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 +7082,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 +7090,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 +7101,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 +7119,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 +7137,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 +7173,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 +7190,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 +7209,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.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "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 +7306,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 +7314,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 +7322,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 +7338,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 +7350,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 +7358,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 +7388,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 +7396,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 +7407,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 +7433,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 +7448,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 +7461,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 +7474,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 +7487,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 +7500,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 +7540,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 +7557,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 +7570,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 +7586,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 +7599,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 +7612,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 +7623,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 +7631,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 +7639,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 +7651,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 +7659,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 +7672,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 +7693,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 +7708,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 +7726,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 +7738,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 +7746,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 +7757,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 +7765,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 +7804,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 +7812,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 +7820,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 +7846,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 +7862,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 +7885,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 +7896,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 +7907,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": { @@ -8722,53 +7925,26 @@ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "*" } }, "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,14 +7956,11 @@ }, "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, "license": "MIT", "engines": { @@ -8796,8 +7969,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": { @@ -8811,7 +7982,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", @@ -8835,9 +8005,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": { "node": ">= 6" @@ -8845,8 +8012,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 +8052,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 +8062,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 +8083,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 +8095,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 +8103,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 +8114,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 +8128,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 +8142,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 +8153,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 +8164,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 +8175,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 +8183,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 +8196,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 +8209,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 +8235,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 +8247,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 +8255,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 +8266,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 +8274,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 +8293,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 +8307,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 +8324,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 +8340,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 +8357,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 +8365,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 +8379,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 +8395,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 +8411,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 +8425,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 +8439,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 +8453,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 +8461,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 +8475,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 +8486,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 +8494,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 +8502,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 +8510,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 +8523,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,14 +8531,11 @@ }, "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, "license": "MIT", "engines": { @@ -9460,8 +8547,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 +8558,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 +8566,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 +8574,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 +8585,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 +8596,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 +8608,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 +8622,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 +8633,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" @@ -9567,13 +8644,10 @@ "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", - "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 +8656,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 +8664,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 +8677,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 +8689,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 +8700,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 +8708,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 +8718,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 +8726,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,92 +8745,19 @@ }, "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, "license": "MIT", "dependencies": { @@ -9781,8 +8769,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 +8790,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 +8806,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 +8830,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 +8841,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 +8857,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 +8865,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 +8881,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 +8892,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 +8900,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 +8908,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 +8921,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 +8940,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 +8948,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 +8956,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 +8968,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 +8977,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 +8996,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 +9018,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 +9026,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 +9044,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 +9063,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 +9078,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 +9094,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 +9112,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 +9120,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 +9141,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 +9155,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 +9168,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 +9179,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 +9190,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 +9216,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 +9231,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 +9248,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 +9266,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 +9279,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 +9294,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 +9305,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 +9313,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 +9322,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 +9330,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 +9346,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 +9360,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 +9374,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" }, @@ -10495,13 +9381,10 @@ "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": { "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 +9397,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 +9405,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 +9421,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 +9432,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 +9446,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 +9472,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 +9492,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 +9509,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 +9525,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 +9535,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 +9543,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 +9551,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 +9562,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 +9572,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 +9581,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 +9615,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 +9628,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 +9644,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 +9657,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 +9670,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,8 +9733,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -10884,8 +9744,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 +9760,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 +9802,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 +9812,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 +9821,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 +9832,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 +9843,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 +9851,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 +9870,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 +9886,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 +9894,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 +9905,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 +9918,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 +9936,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 +9956,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 +9975,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 +9982,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 +9990,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 +10011,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 +10023,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 +10040,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 +10057,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 +10070,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 +10082,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,8 +10090,7 @@ }, "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" @@ -11287,6 +10100,7 @@ "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": [ { "type": "opencollective", @@ -11315,8 +10129,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,63 +10137,42 @@ }, "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": { "uuid": "dist/bin/uuid" } }, - "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 +10180,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 +10188,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 +10206,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 +10224,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 +10250,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 +10267,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 +10292,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 +10300,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 +10321,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 +10334,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 +10347,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 +10363,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 +10371,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 +10384,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 +10401,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 +10409,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 +10423,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 +10434,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 +10445,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 +10458,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 +10471,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 +10479,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 ad5fd086..38cc282f 100644 --- a/package.json +++ b/package.json @@ -12,37 +12,36 @@ "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" + "nunjucks": "^3.2.4", + "sprintf-js": "^1.1.3" + }, + "peerDependencies": { + "@mat3ra/esse": "*" }, "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": "^2026.3.7-0", - "@mat3ra/code": "^2025.8.7-0", - "@mat3ra/tsconfig": "^2024.6.3-0", - "@mat3ra/esse": "^2026.3.7-0", + "@exabyte-io/eslint-config": "2025.5.13-0", + "@mat3ra/code": "git+https://github.com/Exabyte-io/code.git#3b42a844bebd5de65dc3877f7602521af308a09e", + "@mat3ra/esse": "git+https://github.com/Exabyte-io/esse.git#75ec994043d2dfadfff0c36a23ec9f6fbcf214e4", + "@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": "^2026.3.7-0", "@types/chai": "^4.3.5", "@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", + "ajv": "^8.17.1", + "ajv-formats": "^2.1.1", "babel-eslint": "^10.1.0", "chai": "^4.3.4", "eslint": "7.32.0", @@ -60,19 +59,21 @@ "lint-staged": "^12.1.2", "mocha": "10.3.0", "nyc": "^15.1.0", - "prettier": "^2.7.1" + "prettier": "^2.7.1", + "ts-node": "^10.9.1", + "typescript": "^4.5.5" }, "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 && ts-node scripts/applications/build_executable_flavor_map_by_application.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 && ts-node --transpile-only scripts/applications/build_executable_flavor_map_by_application.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/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/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 f07a22d7..908b59ad 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 { ApplicationVersionsMapByApplicationType } from "../../src/js/types/application"; import { BUILD_CONFIG, EXCLUDE_KEYS_FROM_SORTING } from "../../build-config"; -import { ApplicationVersionsMapType } 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({ @@ -24,11 +25,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( @@ -46,14 +47,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 { @@ -101,12 +104,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 a2afef25..015de902 100644 --- a/scripts/processors/BaseWorkflowSubworkflowProcessor.ts +++ b/scripts/processors/BaseWorkflowSubworkflowProcessor.ts @@ -1,39 +1,45 @@ +/* eslint-disable class-methods-use-this */ // eslint-disable-next-line import/no-extraneous-dependencies import { validateAndClean } from "@mat3ra/esse/dist/js/utils/ajv"; // eslint-disable-next-line import/no-extraneous-dependencies import workflowSchema from "@mat3ra/esse/dist/js/schema/workflow.json"; // eslint-disable-next-line import/no-extraneous-dependencies 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); } @@ -42,46 +48,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) { @@ -89,14 +107,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); }); } @@ -105,68 +123,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 9b5ee629..b0cb543a 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,15 +20,15 @@ export interface EntityProcessorOptions { dataDir: string; buildDir: string; categoriesRelativePath: string; - categoryKeys?: string[]; + categoryKeys?: readonly string[]; excludedAssetFiles?: string[]; areKeysSorted?: boolean; excludeKeys?: string[]; } -export type AssetRecord = { +export type AssetRecord = { sourceFile: string; - entities: any[]; + entities: T[]; }; export abstract class EntityProcessor { @@ -62,12 +61,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 ""; } @@ -75,12 +74,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", @@ -97,7 +96,6 @@ export abstract class EntityProcessor { const entities = Utils.array.normalizeToArray(parsed); return { sourceFile: filePath, entities } as AssetRecord; }); - return this.assets; } protected getExcludedAssetFiles(): string[] { @@ -134,22 +132,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, }); @@ -159,24 +167,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); } @@ -253,17 +272,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 48ffb048..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, Subworkflow, UnitFactory, Workflow, createWorkflow } 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..e54b57fa --- /dev/null +++ b/scripts/processors/utils/createSubworkflow.ts @@ -0,0 +1,275 @@ +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 { setUnitLinks } from "../../../src/js/utils/unit"; +import { + defaultAssertionUnit, + defaultAssignmentUnit, + defaultConditionUnit, + defaultIOUnit, +} from "./defaults"; +import { dynamicSubworkflowsByApp, getSurfaceEnergySubworkflowUnits } from "./dynamicSubworkflows"; +import ExecutionUnitConfigBuilder, { + type ExecutionConfig, +} from "./unitBuilders/ExecutionUnitConfigBuilder"; +import { generateFlowChartId, generateSubworkflowId, 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: setUnitLinks(finalUnits), + ...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..afd2f960 --- /dev/null +++ b/scripts/processors/utils/createWorkflow.ts @@ -0,0 +1,214 @@ +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: UnitDataArray; + config?: WorkflowUnitConfig; +}; + +type SubworkflowUnitData = { + name: string; + type: "subworkflow"; + config?: AttributesConfig & SubworkflowFunctionsConfig & Partial; + unitConfigs?: SubworkflowUnitConfig[]; +}; + +type UnitData = WorkflowUnitData | SubworkflowUnitData; +type UnitDataArray = [SubworkflowUnitData, ...UnitData[]]; + +type UnitConfig = { + index: number; + type: + | "assignment" + | "condition" + | "processing" + | "io" + | "assertion" + | "executionBuilder" + | "reduce"; + config: AttributesConfig; +}; + +type WorkflowConfig = AttributesConfig & Partial; + +type MapUnitConfig = { + mapUnit: boolean; + input?: { + name: string; + }; +}; + +type WorkflowUnitConfig = WorkflowConfig & MapUnitConfig; + +type SubworkflowUnitConfig = UnitConfig & { index: number }; + +export type WorkflowData = { + name: string; + units: UnitDataArray; + config?: WorkflowConfig; +}; + +export type SubworkflowsTree = Record>; + +function addWorkflowToWorkflow>( + rootWorkflow: T, + nestedWorkflow: WorkflowSchema, + config?: MapUnitConfig, +) { + const workflowId = nestedWorkflow._id || generateDefaultWorkflowId(); + + const mapUnit: MapUnitSchema = { + ...defaultMapConfig, + workflowId, + input: { ...defaultMapConfig.input, ...config?.input }, + flowchartId: generateFlowChartId(defaultMapConfig.name), + }; + + const mapWorkflow: WorkflowSchema = { + _id: workflowId, + ...nestedWorkflow, + }; + + return { + ...rootWorkflow, + workflows: [...(rootWorkflow.workflows || []), mapWorkflow], + units: [...(rootWorkflow.units || []), mapUnit], + }; +} + +function addSubworkflowToWorkflow>( + workflow: T, + subworkflow: SubworkflowSchema, +) { + const name = subworkflow.name || defaultSubworkflowUnitConfig.name; + + const subworkflowUnit: SubworkflowUnitSchema = { + ...defaultSubworkflowUnitConfig, + _id: subworkflow._id, + name, + flowchartId: generateFlowChartId(name), + }; + + const subworkflows = [...(workflow.subworkflows || []), subworkflow]; + + return { + ...workflow, + units: [...(workflow.units || []), subworkflowUnit], + subworkflows, + properties: [...new Set(subworkflows.map((x) => x.properties || []).flat())], + }; +} + +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 createWorkflowFromWorkflowData( + appName: string, + workflowData: WorkflowData, + subworkflows: SubworkflowsTree, + cache: string[] = [], +): WorkflowSchema { + const initialWorkflow: Omit = { + subworkflows: [], + units: [], + properties: [], + workflows: [], + }; + + const workflowWithUnits = workflowData.units.reduce((acc, unitData) => { + if (unitData.type === "workflow") { + const workflow = createWorkflowFromWorkflowData(appName, unitData, subworkflows, cache); + return addWorkflowToWorkflow(acc, workflow, unitData.config); + } + + 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, + }; +} + +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..202bce70 --- /dev/null +++ b/scripts/processors/utils/utils.ts @@ -0,0 +1,66 @@ +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, +} 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(): string { + return Utils.uuid.getUUID(); +} + +export function generateFlowChartId(unitName: string): string { + return Utils.uuid.getUUIDFromNamespace(`flowchart-${unitName}`); +} + +export function generateBuilderFlowChartId(seed: string, cache: string[] = []): 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): string { + 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, +): string { + 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); +} 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 3c245ec7..d988e715 100644 --- a/src/js/application.ts +++ b/src/js/application.ts @@ -1,4 +1,10 @@ -import type { ApplicationSchemaBase, TemplateSchema } from "@mat3ra/esse/dist/js/types"; +/* eslint-disable class-methods-use-this */ +import type { + ApplicationSchema, + ExecutableSchema, + FlavorSchema, + TemplateSchema, +} from "@mat3ra/esse/dist/js/types"; import { Standata } from "./base"; import APPLICATIONS from "./runtime_data/applications.json"; @@ -8,12 +14,11 @@ import TEMPLATES_LIST_RAW from "./runtime_data/applications/templatesList.json"; 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,44 +26,95 @@ export enum TAGS { DEFAULT_BUILD = "default_build", } -export class ApplicationStandata extends Standata { +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; - // eslint-disable-next-line class-methods-use-this - getAppDataForApplication(appName: string): ApplicationVersionsMapType { - const applicationVersionsMap = ( - APPLICATION_VERSIONS_MAP as ApplicationVersionsMapByApplicationType - )[appName]; - if (!applicationVersionsMap) { - throw new Error(`Application ${appName} not found`); + private appCache: Record< + string, + Record< + string, + { + executable: ExecutableSchema; + flavors: FlavorSchema[]; + } + > + > = {}; + + private getApplicationExecutablesTree(appName: string) { + if (appName in this.appCache) { + return this.appCache[appName]; } - return applicationVersionsMap; - } - // eslint-disable-next-line class-methods-use-this - getAppTreeForApplication(appName: string): ApplicationExecutableTree { // 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; + + const appTree = executableData[appName]; + + this.appCache[appName] = Object.fromEntries( + Object.entries(appTree).map(([name, { flavors, ...executable }]) => { + return [ + name, + { + executable: { + preProcessors: [], + postProcessors: [], + applicationId: [], + ...executable, + applicationName: appName, + name, + }, + flavors: Object.entries(flavors).map(([name, value]) => { + return { + preProcessors: [], + postProcessors: [], + results: [], + ...value, + name, + }; + }), + }, + ]; + }), + ); + + return this.appCache[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; } // 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); @@ -69,7 +125,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; @@ -92,61 +147,156 @@ export class ApplicationStandata extends Standata { return allEntities.filter((entity) => entity.name === appName); } - static getDefaultVersionForApplication(appName: string) { - const applicationVersionsMap = new ApplicationVersionsMap( - (APPLICATION_VERSIONS_MAP as ApplicationVersionsMapByApplicationType)[appName], - ); - return applicationVersionsMap.defaultVersion; + static getDefaultBuildForApplicationAndVersion(appName: string, version: string) { + const versionConfig = APP_VERSIONS[appName].versions.find((config) => { + return config.version === version && config.isDefault; + }); + return versionConfig?.build ?? null; } - static getDefaultBuildForApplicationAndVersion(appName: string, version: string): string { - const applicationVersionsMap = new ApplicationVersionsMap( - (APPLICATION_VERSIONS_MAP as ApplicationVersionsMapByApplicationType)[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}`); + getDefaultConfig() { + const fullConfig = this.findEntitiesByTags(TAGS.DEFAULT)[0]; + const { name, shortName, version, summary, build } = fullConfig; + return { name, shortName, version, summary, build }; + } + + private applicationsTree?: ApplicationTree; + + private buildApplicationsTree() { + const applicationNames = this.getAllApplicationNames(); + + 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]: { + defaultVersion, + versions: versions.reduce( + (acc, versionInfo) => { + return { + ...acc, + [versionInfo.version]: { + ...acc[versionInfo.version], + [versionInfo.build]: { + ...appData, + ...versionInfo, + }, + }, + }; + }, + {}, + ), + }, + }; + }, {}); + } + + public getApplicationsTree() { + if (this.applicationsTree) { + return this.applicationsTree; } - if (!versionConfig.build) { + + this.applicationsTree = this.buildApplicationsTree(); + + return this.applicationsTree; + } + + 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( - `No build specified for default config of ${appName} with version ${version}`, + `Application ${name} not found with version ${version} and build ${build}`, ); } - return versionConfig.build; + + return application; } - // TODO: move to parent class Standata, name and generic parameters - getDefaultConfigByNameAndVersion( - appName: string, - version?: string, - ): ApplicationVersionsMapType { - 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: any) => { - return entity.name === appName && entity.version === versionToUse; - }); - if (allEntriesWithTagsForNameAndVersion.length > 1) { + getExecutableByName(appName: string, execName?: string) { + const appTree = this.getApplicationExecutablesTree(appName); + + const config = + (execName && appTree[execName]) || + Object.values(appTree).find((exec) => exec.executable.isDefault); + + if (!config) { throw new Error( - `Multiple default version entries found for ${appName} with version ${versionToUse}`, + `Executable ${execName || "default"} not found for application ${appName}`, ); - } else if (allEntriesWithTagsForNameAndVersion.length === 0) { + } + + return config; + } + + getExecutableAndFlavorByName( + appName: string, + execName?: string, + flavorName?: string, + ): { + executable: ExecutableSchema; + flavor: FlavorSchema; + } { + 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( - `No default version entry found for ${appName} with version ${versionToUse}`, + `Flavor ${ + flavorName || "default" + } not found for executable ${execName} in application ${appName}`, ); } - return allEntriesWithTagsForNameAndVersion[0]; + + return { + executable, + flavor, + }; } - getDefaultConfig(): DefaultApplicationConfig { - const fullConfig = this.findEntitiesByTags(TAGS.DEFAULT)[0]; - const { name, shortName, version, summary, build } = fullConfig as ApplicationSchemaBase; - return { name, shortName, version, summary, build }; + 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/index.ts b/src/js/index.ts index 571d0c37..408164a7 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,7 @@ 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 { setUnitLinks } from "./utils/unit"; export { modelTree, methodTree, baseUiSchema }; 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..928b53fa 100644 --- a/src/js/types/application.ts +++ b/src/js/types/application.ts @@ -1,37 +1,40 @@ -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 VersionFields = "isDefault" | "build" | "hasAdvancedComputeOptions" | "version"; +type ApplicationFields = "name" | "shortName" | "summary" | "isLicensed"; -export type DefaultApplicationConfig = Pick< - ApplicationSchemaBase, - "name" | "shortName" | "version" | "summary" | "build" ->; +export type ApplicationVersion = Pick; -export type ApplicationVersionsMapType = Pick< - ApplicationSchemaBase, - "shortName" | "summary" | "isLicensed" -> & { +export type ApplicationConfigItem = Pick & { // TODO: defaultVersion should come from ESSE defaultVersion: string; - versions: ApplicationVersionInfo[]; - name: Required["name"]; + versions: ApplicationVersion[]; }; export type ApplicationVersionsMapByApplicationType = { - [key: string]: ApplicationVersionsMapType; + [key: string]: ApplicationConfigItem; }; -export interface ExecutableTreeItem - extends Pick { - isDefault?: ApplicationSchemaBase["isDefault"]; - supportedApplicationVersions?: ApplicationSchemaBase["version"][]; - flavors?: Record; - [key: string]: any; -} +type OptionalFlavorSchema = Partial; +type RequiredFlavorFields = + | "input" + | "monitors" + | "applicationName" + | "executableName" + | "isDefault"; +type OptionalFlavorFields = "results"; + +export 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"][]; + }; -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..ffcbcce8 100644 --- a/src/js/utils/applicationVersionMap.ts +++ b/src/js/utils/applicationVersionMap.ts @@ -1,22 +1,22 @@ // 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"; +import { ApplicationConfigItem, ApplicationVersion } from "../types/application"; -export class ApplicationVersionsMap implements ApplicationVersionsMapType { - shortName?: string | undefined; +export class ApplicationVersionsMap implements ApplicationConfigItem { + shortName: string; - summary?: string | undefined; + summary: string; isLicensed?: boolean | undefined; 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; @@ -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/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/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)); +} 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/src/py/mat3ra/standata/data/executable_flavor_map_by_application.py b/src/py/mat3ra/standata/data/executable_flavor_map_by_application.py index 9aed9955..9f943905 100644 --- a/src/py/mat3ra/standata/data/executable_flavor_map_by_application.py +++ b/src/py/mat3ra/standata/data/executable_flavor_map_by_application.py @@ -1,3 +1,3 @@ import json -executable_flavor_map_by_application_data = json.loads(r'''{"espresso":{"abcoeff_to_eps.x":{"monitors":["standard_output"],"results":[],"flavors":{"abcoeff_to_eps_simple":{"input":[{"name":"abcoeff_to_eps_simple.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"abcoeff_to_eps.x"}}},"average.x":{"monitors":["standard_output"],"results":["average_potential_profile"],"flavors":{"average":{"input":[{"name":"average.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"average.x"},"average_potential":{"input":[{"name":"average.in"}],"results":["average_potential_profile"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"average.x"}}},"bands.x":{"monitors":["standard_output"],"results":["band_structure"],"flavors":{"bands":{"input":[{"name":"bands.in"}],"monitors":["standard_output"],"applicationName":"espresso","executableName":"bands.x"},"bands_spin_up":{"input":[{"name":"bands_spin_up.in"}],"monitors":["standard_output"],"applicationName":"espresso","executableName":"bands.x"},"bands_spin_dn":{"input":[{"name":"bands_spin_dn.in"}],"monitors":["standard_output"],"applicationName":"espresso","executableName":"bands.x"}}},"cp.x":{"monitors":["standard_output"],"results":[],"flavors":{"cp":{"isDefault":true,"input":[{"name":"cp.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"cp.x"},"cp_wf":{"input":[{"name":"cp_wf.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"cp.x"}}},"dos.x":{"monitors":["standard_output"],"results":["density_of_states"],"flavors":{"dos":{"input":[{"name":"dos.in"}],"results":["density_of_states"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"dos.x"}}},"dynmat.x":{"monitors":["standard_output"],"results":[],"flavors":{"dynmat":{"input":[{"name":"dynmat_grid.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"dynmat.x"}}},"epsilon.x":{"monitors":["standard_output"],"results":["dielectric_tensor"],"flavors":{"dielectric_tensor":{"input":[{"name":"epsilon.in"}],"results":["dielectric_tensor"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"epsilon.x"}}},"gw.x":{"monitors":["standard_output"],"results":["band_structure","fermi_energy","band_gaps"],"flavors":{"gw_bands_plasmon_pole":{"input":[{"name":"gw_bands_plasmon_pole.in"}],"results":["band_structure","fermi_energy","band_gaps"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"gw.x"},"gw_bands_full_frequency":{"input":[{"name":"gw_bands_full_frequency.in"}],"results":["band_structure","fermi_energy","band_gaps"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"gw.x"}}},"gww.x":{"monitors":["standard_output"],"results":[],"flavors":{"gww_simple":{"input":[{"name":"gww_simple.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"gww.x"}}},"head.x":{"monitors":["standard_output"],"results":[],"flavors":{"head_simple":{"input":[{"name":"head_simple.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"head.x"}}},"hp.x":{"monitors":["standard_output"],"results":["hubbard_u","hubbard_v_nn","hubbard_v"],"flavors":{"hp":{"input":[{"name":"hp.in"}],"results":["hubbard_u","hubbard_v_nn","hubbard_v"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"hp.x"}},"supportedApplicationVersions":["7.0","7.2","7.3"]},"matdyn.x":{"monitors":["standard_output"],"results":["phonon_dos","phonon_dispersions"],"flavors":{"matdyn_grid":{"input":[{"name":"matdyn_grid.in"}],"monitors":["standard_output"],"results":["phonon_dos"],"applicationName":"espresso","executableName":"matdyn.x"},"matdyn_path":{"input":[{"name":"matdyn_path.in"}],"monitors":["standard_output"],"results":["phonon_dispersions"],"applicationName":"espresso","executableName":"matdyn.x"}}},"neb.x":{"monitors":["standard_output"],"results":["reaction_energy_barrier","reaction_energy_profile"],"flavors":{"neb":{"isMultiMaterial":true,"input":[{"name":"neb.in"}],"results":["reaction_energy_barrier","reaction_energy_profile"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"neb.x"}}},"ph.x":{"monitors":["standard_output"],"results":["phonon_dos","phonon_dispersions","zero_point_energy"],"flavors":{"ph_path":{"input":[{"name":"ph_path.in"}],"results":["phonon_dispersions"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"ph.x"},"ph_grid":{"input":[{"name":"ph_grid.in"}],"results":["phonon_dos"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"ph.x"},"ph_gamma":{"input":[{"name":"ph_gamma.in"}],"results":["zero_point_energy"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"ph.x"},"ph_init_qpoints":{"input":[{"name":"ph_init_qpoints.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"ph.x"},"ph_grid_restart":{"input":[{"name":"ph_grid_restart.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"ph.x"},"ph_single_irr_qpt":{"input":[{"name":"ph_single_irr_qpt.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"ph.x"}}},"pp.x":{"monitors":["standard_output"],"results":[],"flavors":{"pp_density":{"input":[{"name":"pp_density.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pp.x"},"pp_electrostatic_potential":{"input":[{"name":"pp_electrostatic_potential.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pp.x"},"pp_wfn":{"input":[{"name":"pp_wfn.in"}],"results":["wavefunction_amplitude"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pp.x"}}},"projwfc.x":{"monitors":["standard_output"],"results":["density_of_states"],"flavors":{"projwfc":{"input":[{"name":"projwfc.in"}],"results":["density_of_states"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"projwfc.x"}}},"pw.x":{"isDefault":true,"hasAdvancedComputeOptions":true,"postProcessors":["remove_non_zero_weight_kpoints"],"monitors":["standard_output","convergence_ionic","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"],"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"],"monitors":["standard_output","convergence_electronic"],"applicationName":"espresso","executableName":"pw.x"},"pw_scf_bands_hse":{"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"},"pw_scf_hse":{"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"},"pw_scf_kpt_conv":{"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"},"pw_scf_dft_u":{"input":[{"name":"pw_scf_dft_u.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","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v":{"input":[{"name":"pw_scf_dft_v.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","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+j":{"input":[{"name":"pw_scf_dft_j.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","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_legacy":{"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"],"monitors":["standard_output","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":["atomic_forces","fermi_energy","pressure","stress_tensor","total_energy","total_energy_contributions","total_force"],"monitors":["standard_output","convergence_electronic"],"applicationName":"espresso","executableName":"pw.x"},"pw_scf_soc":{"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"},"pw_scf_dft_u_magn":{"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"],"monitors":["standard_output","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":["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","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u+v_magn":{"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"],"monitors":["standard_output","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":["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","supportedApplicationVersions":["7.2","7.3"]},"pw_scf_dft_u_magn_legacy":{"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"],"monitors":["standard_output","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":["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","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":["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"},"pw_esm_relax":{"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"},"pw_nscf":{"input":[{"name":"pw_nscf.in"}],"results":["fermi_energy","band_gaps"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pw.x"},"pw_nscf_magn":{"input":[{"name":"pw_nscf_magn.in"}],"results":["fermi_energy","band_gaps"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pw.x"},"pw_nscf_soc":{"input":[{"name":"pw_nscf_soc.in"}],"results":["fermi_energy","band_gaps"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pw.x"},"pw_nscf_dft_u_magn":{"input":[{"name":"pw_nscf_dft_u_magn.in"}],"results":["fermi_energy","band_gaps"],"monitors":["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":["fermi_energy","band_gaps"],"monitors":["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":["fermi_energy","band_gaps"],"monitors":["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":["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","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":["fermi_energy","band_gaps"],"monitors":["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":["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","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":["band_structure"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pw.x"},"pw_bands_magn":{"input":[{"name":"pw_bands_magn.in"}],"results":["band_structure"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pw.x"},"pw_bands_soc":{"input":[{"name":"pw_bands_soc.in"}],"results":["band_structure"],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pw.x"},"pw_bands_dft_u_magn":{"input":[{"name":"pw_bands_dft_u_magn.in"}],"results":["band_structure"],"monitors":["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":["band_structure"],"monitors":["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":["band_structure"],"monitors":["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":["band_structure"],"monitors":["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":["band_structure"],"monitors":["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":["band_structure"],"monitors":["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":["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"},"pw_vc-relax":{"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"},"pw_md":{"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"],"applicationName":"espresso","executableName":"pw.x"}}},"pw4gww.x":{"monitors":["standard_output"],"results":[],"flavors":{"pw4gww_simple":{"input":[{"name":"pw4gww_simple.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"pw4gww.x"}}},"q2r.x":{"monitors":["standard_output"],"results":[],"flavors":{"q2r":{"input":[{"name":"q2r.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"q2r.x"}}},"simple.x":{"monitors":["standard_output"],"results":[],"flavors":{"simple":{"input":[{"name":"simple.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"simple.x"}}},"simple_bse.x":{"monitors":["standard_output"],"results":[],"flavors":{"simple_bse":{"input":[{"name":"simple_bse.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"simple_bse.x"}}},"simple_ip.x":{"monitors":["standard_output"],"results":[],"flavors":{"simple_ip":{"input":[{"name":"simple_ip.in"}],"results":[],"monitors":["standard_output"],"applicationName":"espresso","executableName":"simple_ip.x"}}}},"nwchem":{"nwchem":{"isDefault":true,"hasAdvancedComputeOptions":false,"postProcessors":["error_handler"],"monitors":["standard_output"],"results":["total_energy","total_energy_contributions"],"flavors":{"nwchem_total_energy":{"isDefault":true,"input":[{"name":"nwchem_total_energy.inp"}],"results":["total_energy","total_energy_contributions"],"monitors":["standard_output"],"applicationName":"nwchem","executableName":"nwchem"}}}},"python":{"python":{"isDefault":true,"monitors":["standard_output"],"results":["file_content","workflow:pyml_predict"],"flavors":{"hello_world":{"isDefault":true,"input":[{"name":"script.py","templateName":"hello_world.py"},{"name":"requirements.txt"}],"monitors":["standard_output"],"applicationName":"python","executableName":"python"},"espresso_xml_get_qpt_irr":{"input":[{"name":"espresso_xml_get_qpt_irr.py"}],"monitors":["standard_output"],"applicationName":"python","executableName":"python"},"espresso_extract_kpoints":{"input":[{"name":"espresso_extract_kpoints.py"},{"name":"requirements.txt","templateName":"requirements_empty.txt"}],"monitors":["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":["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":["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":["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":["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":["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":["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":["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":["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":["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":["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":["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":["standard_output"],"results":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["workflow:pyml_predict"],"monitors":["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":["file_content"],"monitors":["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":["file_content"],"monitors":["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":["file_content"],"monitors":["standard_output"],"applicationName":"python","executableName":"python"}}}},"shell":{"sh":{"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"],"flavors":{"hello_world":{"isDefault":true,"input":[{"name":"hello_world.sh"}],"monitors":["standard_output"],"applicationName":"shell","executableName":"sh"},"job_espresso_pw_scf":{"input":[{"name":"job_espresso_pw_scf.sh"}],"monitors":["standard_output"],"applicationName":"shell","executableName":"sh"},"espresso_link_outdir_save":{"input":[{"name":"espresso_link_outdir_save.sh"}],"monitors":["standard_output"],"applicationName":"shell","executableName":"sh"},"espresso_collect_dynmat":{"input":[{"name":"espresso_collect_dynmat.sh"}],"monitors":["standard_output"],"applicationName":"shell","executableName":"sh"},"bash_vasp_prepare_neb_images":{"isMultiMaterial":true,"input":[{"name":"bash_vasp_prepare_neb_images.sh"}],"monitors":["standard_output"],"applicationName":"shell","executableName":"sh"}}}},"vasp":{"vasp":{"isDefault":true,"postProcessors":["error_handler","prepare_restart","remove_non_zero_weight_kpoints"],"monitors":["standard_output","convergence_ionic","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"],"flavors":{"vasp":{"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"},"vasp_symprec":{"input":[{"name":"INCAR","templateName":"INCAR_SYMPREC"},{"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"},"vasp_bands":{"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"},"vasp_nscf":{"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"},"vasp_hse":{"isDefault":false,"input":[{"name":"INCAR","templateName":"INCAR_HSE"},{"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"},"vasp_bands_hse":{"isDefault":false,"input":[{"name":"INCAR","templateName":"INCAR_BANDS_HSE"},{"name":"KPOINTS","templateName":"KPOINTS_BANDS"},{"name":"POSCAR","templateName":""}],"results":["band_structure"],"monitors":["standard_output","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":["band_gaps","fermi_energy"],"monitors":["standard_output","convergence_electronic"],"applicationName":"vasp","executableName":"vasp"},"vasp_relax":{"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"},"vasp_vc_relax":{"input":[{"name":"INCAR","templateName":"INCAR_VC_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"},"vasp_zpe":{"input":[{"name":"INCAR","templateName":"INCAR_ZPE"},{"name":"KPOINTS","templateName":"KPOINTS"},{"name":"POSCAR","templateName":"POSCAR"}],"results":["total_energy","fermi_energy","pressure","atomic_forces","stress_tensor","total_force","zero_point_energy"],"monitors":["standard_output","convergence_electronic","convergence_ionic"],"applicationName":"vasp","executableName":"vasp"},"vasp_kpt_conv":{"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"},"vasp_vc_relax_conv":{"input":[{"name":"INCAR","templateName":"INCAR_VC_RELAX"},{"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","convergence_ionic"],"applicationName":"vasp","executableName":"vasp"},"vasp_neb":{"isMultiMaterial":true,"input":[{"name":"INCAR","templateName":"INCAR_NEB"},{"name":"KPOINTS","templateName":"KPOINTS"}],"results":["reaction_energy_barrier","reaction_energy_profile"],"monitors":["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":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"monitors":["standard_output","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":["total_energy","total_energy_contributions","pressure","fermi_energy","atomic_forces","total_force","stress_tensor"],"monitors":["standard_output","convergence_electronic"],"applicationName":"vasp","executableName":"vasp"}}}}}''') +executable_flavor_map_by_application_data = json.loads(r'''{"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/src/py/mat3ra/standata/data/subworkflows.py b/src/py/mat3ra/standata/data/subworkflows.py index c6b38f97..f20a75aa 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":{"_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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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 lsym = .false.\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":{"_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":[{"basename":"wf_r.png","filetype":"image","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 lsym = .false.\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 lsym = .false.\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":{"_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":{"_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":{"_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":{"_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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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":{"_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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"python","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"}],"applicationName":"shell","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"}],"applicationName":"shell","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"nwchem","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"shell","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"}],"applicationName":"shell","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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":{"_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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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":{"_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"}],"applicationName":"vasp","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":{"_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"}],"applicationName":"shell","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","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 lsym = .false.\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 lsym = .false.\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":[{"_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 lsym = .false.\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 lsym = .false.\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"}}]},{"_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 lsym = .false.\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 lsym = .false.\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"}}]},{"_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 lsym = .false.\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 lsym = .false.\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":[],"isMultiMaterial":true,"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":[{"basename":"wf_r.png","filetype":"image","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":[{"_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"}]}]},{"_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 < 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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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":"731d3397-3278-516a-b28e-53626ef50f0a","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"}],"applicationName":"shell","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"}],"applicationName":"espresso","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"}],"applicationName":"shell","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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":[{"_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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"python","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},{"_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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"python","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},{"_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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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 lsym = .false.\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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"python","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":[],"isMultiMaterial":true,"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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"python","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"}],"applicationName":"espresso","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"}],"applicationName":"espresso","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"}],"applicationName":"nwchem","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"python","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"}],"applicationName":"shell","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"}],"applicationName":"shell","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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":[{"_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"}],"applicationName":"vasp","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"}],"applicationName":"vasp","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},{"_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"}],"applicationName":"shell","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("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 { executable } = standata.getExecutableByName("espresso", "pw.x"); + expect(executable).to.be.an("object"); + expect(executable).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 +98,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); }); @@ -131,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"); diff --git a/tests/js/espressoTemplates.test.ts b/tests/js/espressoTemplates.test.ts new file mode 100644 index 00000000..49299eb2 --- /dev/null +++ b/tests/js/espressoTemplates.test.ts @@ -0,0 +1,83 @@ +import { getRenderedTemplateFile, getTemplateContexts } from "@mat3ra/fixtures"; +import { expect } from "chai"; +import { Environment, FileSystemLoader } from "nunjucks"; +import * as path from "path"; + +import { setupNunjucksEnvironment } from "../../src/js/utils/template"; + +/** + * 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 templatePath = path.join( + __dirname, + "../../assets/applications/input_files_templates/espresso", + ); + const env = setupNunjucksEnvironment(new Environment(new FileSystemLoader(templatePath))); + + 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"); diff --git a/tsconfig.json b/tsconfig.json index 62584c2b..837f23f6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,3 +1,6 @@ { "extends": "@mat3ra/tsconfig/tsconfig-js-py-transpile.json", + "compilerOptions": { + "noEmitOnError": false + } }