@mat3ra/wode 2025.10.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/.babelrc +17 -0
  2. package/LICENSE.md +15 -0
  3. package/README.md +164 -0
  4. package/assets/subworkflows/deepmd/deepmd.yml +31 -0
  5. package/assets/subworkflows/deepmd/espresso_cp_md.yml +16 -0
  6. package/assets/subworkflows/espresso/average_electrostatic_potential_find_minima.yml +27 -0
  7. package/assets/subworkflows/espresso/average_electrostatic_potential_via_band_structure.yml +67 -0
  8. package/assets/subworkflows/espresso/band_gap.yml +21 -0
  9. package/assets/subworkflows/espresso/band_gap_hse_dos.yml +30 -0
  10. package/assets/subworkflows/espresso/band_structure.yml +26 -0
  11. package/assets/subworkflows/espresso/band_structure_dos.yml +34 -0
  12. package/assets/subworkflows/espresso/band_structure_hse.yml +30 -0
  13. package/assets/subworkflows/espresso/band_structure_magn.yml +31 -0
  14. package/assets/subworkflows/espresso/band_structure_soc.yml +30 -0
  15. package/assets/subworkflows/espresso/dielectric_tensor.yml +35 -0
  16. package/assets/subworkflows/espresso/dos.yml +24 -0
  17. package/assets/subworkflows/espresso/electronic_density_mesh.yml +19 -0
  18. package/assets/subworkflows/espresso/esm.yml +14 -0
  19. package/assets/subworkflows/espresso/esm_relax.yml +14 -0
  20. package/assets/subworkflows/espresso/espresso_extract_kpoints.yml +16 -0
  21. package/assets/subworkflows/espresso/espresso_xml_get_qpt_irr.yml +12 -0
  22. package/assets/subworkflows/espresso/fixed_cell_relaxation.yml +16 -0
  23. package/assets/subworkflows/espresso/gw_band_structure_band_gap_full_frequency.yml +22 -0
  24. package/assets/subworkflows/espresso/gw_band_structure_band_gap_plasmon_pole.yml +22 -0
  25. package/assets/subworkflows/espresso/hubbard_u_hp.yml +21 -0
  26. package/assets/subworkflows/espresso/kpoint_convergence.yml +86 -0
  27. package/assets/subworkflows/espresso/neb.yml +16 -0
  28. package/assets/subworkflows/espresso/ph_init_qpoints.yml +14 -0
  29. package/assets/subworkflows/espresso/ph_single_irr_qpt.yml +14 -0
  30. package/assets/subworkflows/espresso/phonon_dispersions.yml +29 -0
  31. package/assets/subworkflows/espresso/phonon_dos.yml +29 -0
  32. package/assets/subworkflows/espresso/phonon_dos_dispersion.yml +34 -0
  33. package/assets/subworkflows/espresso/phonon_reduce.yml +29 -0
  34. package/assets/subworkflows/espresso/post_processor.yml +14 -0
  35. package/assets/subworkflows/espresso/pre_processor.yml +14 -0
  36. package/assets/subworkflows/espresso/pw_scf.yml +16 -0
  37. package/assets/subworkflows/espresso/recalculate_bands.yml +19 -0
  38. package/assets/subworkflows/espresso/surface_energy.yml +16 -0
  39. package/assets/subworkflows/espresso/total_energy.yml +16 -0
  40. package/assets/subworkflows/espresso/valence_band_offset_calc_from_previous_esp_vbm.yml +35 -0
  41. package/assets/subworkflows/espresso/variable_cell_relaxation.yml +18 -0
  42. package/assets/subworkflows/espresso/zero_point_energy.yml +19 -0
  43. package/assets/subworkflows/jupyterLab/jupyter_notebook.yml +17 -0
  44. package/assets/subworkflows/nwchem/total_energy.yml +16 -0
  45. package/assets/subworkflows/python/ml/classification_tail.yml +56 -0
  46. package/assets/subworkflows/python/ml/clustering_tail.yml +62 -0
  47. package/assets/subworkflows/python/ml/regression_tail.yml +56 -0
  48. package/assets/subworkflows/python/ml/train_head.yml +61 -0
  49. package/assets/subworkflows/python/python_script.yml +14 -0
  50. package/assets/subworkflows/shell/batch_espresso_pwscf.yml +14 -0
  51. package/assets/subworkflows/shell/hello_world.yml +14 -0
  52. package/assets/subworkflows/vasp/band_gap.yml +21 -0
  53. package/assets/subworkflows/vasp/band_structure.yml +21 -0
  54. package/assets/subworkflows/vasp/band_structure_dos.yml +23 -0
  55. package/assets/subworkflows/vasp/dos.yml +18 -0
  56. package/assets/subworkflows/vasp/fixed_cell_relaxation.yml +16 -0
  57. package/assets/subworkflows/vasp/initial_final_total_energies.yml +25 -0
  58. package/assets/subworkflows/vasp/kpoint_convergence.yml +89 -0
  59. package/assets/subworkflows/vasp/neb_subworkflow.yml +16 -0
  60. package/assets/subworkflows/vasp/prepare_images.yml +16 -0
  61. package/assets/subworkflows/vasp/recalculate_bands.yml +16 -0
  62. package/assets/subworkflows/vasp/surface_energy.yml +18 -0
  63. package/assets/subworkflows/vasp/total_energy.yml +16 -0
  64. package/assets/subworkflows/vasp/variable_cell_relaxation.yml +18 -0
  65. package/assets/subworkflows/vasp/zero_point_energy.yml +16 -0
  66. package/assets/workflows/deepmd/deepmd_md.yml +6 -0
  67. package/assets/workflows/espresso/band_gap.yml +4 -0
  68. package/assets/workflows/espresso/band_gap_dos_hse.yml +4 -0
  69. package/assets/workflows/espresso/band_structure.yml +4 -0
  70. package/assets/workflows/espresso/band_structure_dos.yml +4 -0
  71. package/assets/workflows/espresso/band_structure_hse.yml +14 -0
  72. package/assets/workflows/espresso/band_structure_magn.yml +7 -0
  73. package/assets/workflows/espresso/band_structure_soc.yml +7 -0
  74. package/assets/workflows/espresso/dielectric_tensor.yml +4 -0
  75. package/assets/workflows/espresso/dos.yml +4 -0
  76. package/assets/workflows/espresso/electronic_density_mesh.yml +4 -0
  77. package/assets/workflows/espresso/esm.yml +4 -0
  78. package/assets/workflows/espresso/esm_relax.yml +4 -0
  79. package/assets/workflows/espresso/fixed_cell_relaxation.yml +4 -0
  80. package/assets/workflows/espresso/gw_band_structure_band_gap_full_frequency.yml +4 -0
  81. package/assets/workflows/espresso/gw_band_structure_band_gap_plasmon_pole.yml +4 -0
  82. package/assets/workflows/espresso/hubbard_u_hp.yml +7 -0
  83. package/assets/workflows/espresso/kpoint_convergence.yml +4 -0
  84. package/assets/workflows/espresso/neb.yml +4 -0
  85. package/assets/workflows/espresso/phonon_dispersions.yml +4 -0
  86. package/assets/workflows/espresso/phonon_dos.yml +4 -0
  87. package/assets/workflows/espresso/phonon_dos_dispersion.yml +4 -0
  88. package/assets/workflows/espresso/phonon_map.yml +28 -0
  89. package/assets/workflows/espresso/recalculate_bands.yml +4 -0
  90. package/assets/workflows/espresso/surface_energy.yml +4 -0
  91. package/assets/workflows/espresso/total_energy.yml +4 -0
  92. package/assets/workflows/espresso/valence_band_offset.yml +171 -0
  93. package/assets/workflows/espresso/variable_cell_relaxation.yml +4 -0
  94. package/assets/workflows/espresso/zero_point_energy.yml +4 -0
  95. package/assets/workflows/jupyterLab/jupyter_notebook.yml +4 -0
  96. package/assets/workflows/nwchem/total_energy.yml +4 -0
  97. package/assets/workflows/python/ml/classification_workflow.yml +9 -0
  98. package/assets/workflows/python/ml/clustering_workflow.yml +9 -0
  99. package/assets/workflows/python/ml/regression_workflow.yml +9 -0
  100. package/assets/workflows/python/python_script.yml +4 -0
  101. package/assets/workflows/shell/batch_espresso_pwscf.yml +4 -0
  102. package/assets/workflows/shell/hello_world.yml +4 -0
  103. package/assets/workflows/vasp/band_gap.yml +4 -0
  104. package/assets/workflows/vasp/band_structure.yml +4 -0
  105. package/assets/workflows/vasp/band_structure_dos.yml +4 -0
  106. package/assets/workflows/vasp/dos.yml +4 -0
  107. package/assets/workflows/vasp/fixed_cell_relaxation.yml +4 -0
  108. package/assets/workflows/vasp/kpoint_convergence.yml +4 -0
  109. package/assets/workflows/vasp/neb.yml +8 -0
  110. package/assets/workflows/vasp/recalculate_bands.yml +4 -0
  111. package/assets/workflows/vasp/surface_energy.yml +4 -0
  112. package/assets/workflows/vasp/total_energy.yml +4 -0
  113. package/assets/workflows/vasp/variable_cell_relaxation.yml +4 -0
  114. package/assets/workflows/vasp/zero_point_energy.yml +4 -0
  115. package/build_workflows.js +65 -0
  116. package/dist/context/context.js +49 -0
  117. package/dist/context/mixins/ApplicationContextMixin.js +19 -0
  118. package/dist/context/mixins/JobContextMixin.js +39 -0
  119. package/dist/context/mixins/MaterialContextMixin.js +40 -0
  120. package/dist/context/mixins/MaterialsContextMixin.js +19 -0
  121. package/dist/context/mixins/MaterialsSetContextMixin.js +25 -0
  122. package/dist/context/mixins/MethodDataContextMixin.js +48 -0
  123. package/dist/context/mixins/WorkflowContextMixin.js +28 -0
  124. package/dist/context/providers/BoundaryConditionsFormDataProvider.js +86 -0
  125. package/dist/context/providers/CollinearMagnetizationContextProvider.js +113 -0
  126. package/dist/context/providers/HubbardContextProviderLegacy.js +81 -0
  127. package/dist/context/providers/HubbardJContextProvider.js +74 -0
  128. package/dist/context/providers/HubbardUContextProvider.js +77 -0
  129. package/dist/context/providers/HubbardVContextProvider.js +104 -0
  130. package/dist/context/providers/IonDynamicsContextProvider.js +62 -0
  131. package/dist/context/providers/MLSettingsContextProvider.js +52 -0
  132. package/dist/context/providers/MLTrainTestSplitContextProvider.js +48 -0
  133. package/dist/context/providers/NEBFormDataProvider.js +38 -0
  134. package/dist/context/providers/NonCollinearMagnetizationContextProvider.js +253 -0
  135. package/dist/context/providers/PlanewaveCutoffsContextProvider.js +67 -0
  136. package/dist/context/providers/PointsGridFormDataProvider.js +272 -0
  137. package/dist/context/providers/PointsPathFormDataProvider.js +155 -0
  138. package/dist/context/providers/by_application/ExecutableContextProvider.js +17 -0
  139. package/dist/context/providers/by_application/espresso/QENEBContextProvider.js +60 -0
  140. package/dist/context/providers/by_application/espresso/QEPWXContextProvider.js +149 -0
  141. package/dist/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js +84 -0
  142. package/dist/context/providers/by_application/vasp/VASPContextProvider.js +64 -0
  143. package/dist/context/providers/by_application/vasp/VASPNEBContextProvider.js +56 -0
  144. package/dist/context/providers/settings.js +37 -0
  145. package/dist/context/providers.js +199 -0
  146. package/dist/enums.js +65 -0
  147. package/dist/index.js +64 -0
  148. package/dist/patch.js +19 -0
  149. package/dist/subworkflows/convergence/factory.js +35 -0
  150. package/dist/subworkflows/convergence/non_uniform_kgrid.js +31 -0
  151. package/dist/subworkflows/convergence/parameter.js +70 -0
  152. package/dist/subworkflows/convergence/uniform_kgrid.js +26 -0
  153. package/dist/subworkflows/convergence.js +189 -0
  154. package/dist/subworkflows/create.js +285 -0
  155. package/dist/subworkflows/dynamic/espresso/getQpointIrrep.js +34 -0
  156. package/dist/subworkflows/dynamic/index.js +19 -0
  157. package/dist/subworkflows/dynamic/surfaceEnergy.js +67 -0
  158. package/dist/subworkflows/index.js +19 -0
  159. package/dist/subworkflows/subworkflow.js +279 -0
  160. package/dist/units/assertion.js +37 -0
  161. package/dist/units/assignment.js +42 -0
  162. package/dist/units/base.js +91 -0
  163. package/dist/units/builders/AssertionUnitConfigBuilder.js +34 -0
  164. package/dist/units/builders/AssignmentUnitConfigBuilder.js +41 -0
  165. package/dist/units/builders/ExecutionUnitConfigBuilder.js +67 -0
  166. package/dist/units/builders/IOUnitConfigBuilder.js +54 -0
  167. package/dist/units/builders/UnitConfigBuilder.js +79 -0
  168. package/dist/units/builders/index.js +18 -0
  169. package/dist/units/condition.js +52 -0
  170. package/dist/units/execution.js +222 -0
  171. package/dist/units/factory.js +53 -0
  172. package/dist/units/index.js +82 -0
  173. package/dist/units/io.js +148 -0
  174. package/dist/units/map.js +38 -0
  175. package/dist/units/processing.js +41 -0
  176. package/dist/units/reduce.js +24 -0
  177. package/dist/units/subworkflow.js +23 -0
  178. package/dist/utils.js +92 -0
  179. package/dist/workflows/create.js +312 -0
  180. package/dist/workflows/default.js +41 -0
  181. package/dist/workflows/index.js +108 -0
  182. package/dist/workflows/relaxation.js +37 -0
  183. package/dist/workflows/workflow.js +303 -0
  184. package/package.json +94 -0
  185. package/src/context/context.js +47 -0
  186. package/src/context/mixins/ApplicationContextMixin.js +19 -0
  187. package/src/context/mixins/JobContextMixin.js +36 -0
  188. package/src/context/mixins/MaterialContextMixin.js +41 -0
  189. package/src/context/mixins/MaterialsContextMixin.js +18 -0
  190. package/src/context/mixins/MaterialsSetContextMixin.js +24 -0
  191. package/src/context/mixins/MethodDataContextMixin.js +48 -0
  192. package/src/context/mixins/WorkflowContextMixin.js +25 -0
  193. package/src/context/providers/BoundaryConditionsFormDataProvider.js +80 -0
  194. package/src/context/providers/CollinearMagnetizationContextProvider.js +117 -0
  195. package/src/context/providers/HubbardContextProviderLegacy.js +75 -0
  196. package/src/context/providers/HubbardJContextProvider.js +73 -0
  197. package/src/context/providers/HubbardUContextProvider.js +100 -0
  198. package/src/context/providers/HubbardVContextProvider.js +111 -0
  199. package/src/context/providers/IonDynamicsContextProvider.js +56 -0
  200. package/src/context/providers/MLSettingsContextProvider.js +48 -0
  201. package/src/context/providers/MLTrainTestSplitContextProvider.js +45 -0
  202. package/src/context/providers/NEBFormDataProvider.js +32 -0
  203. package/src/context/providers/NonCollinearMagnetizationContextProvider.js +269 -0
  204. package/src/context/providers/PlanewaveCutoffsContextProvider.js +68 -0
  205. package/src/context/providers/PointsGridFormDataProvider.js +285 -0
  206. package/src/context/providers/PointsPathFormDataProvider.js +165 -0
  207. package/src/context/providers/by_application/ExecutableContextProvider.js +10 -0
  208. package/src/context/providers/by_application/espresso/QENEBContextProvider.js +56 -0
  209. package/src/context/providers/by_application/espresso/QEPWXContextProvider.js +166 -0
  210. package/src/context/providers/by_application/nwchem/NWChemTotalEnergyContextProvider.js +86 -0
  211. package/src/context/providers/by_application/vasp/VASPContextProvider.js +56 -0
  212. package/src/context/providers/by_application/vasp/VASPNEBContextProvider.js +46 -0
  213. package/src/context/providers/settings.js +38 -0
  214. package/src/context/providers.js +140 -0
  215. package/src/enums.js +65 -0
  216. package/src/index.js +17 -0
  217. package/src/patch.js +12 -0
  218. package/src/subworkflows/convergence/factory.js +14 -0
  219. package/src/subworkflows/convergence/non_uniform_kgrid.js +28 -0
  220. package/src/subworkflows/convergence/parameter.js +58 -0
  221. package/src/subworkflows/convergence/uniform_kgrid.js +22 -0
  222. package/src/subworkflows/convergence.js +196 -0
  223. package/src/subworkflows/create.js +201 -0
  224. package/src/subworkflows/dynamic/espresso/getQpointIrrep.js +35 -0
  225. package/src/subworkflows/dynamic/index.js +8 -0
  226. package/src/subworkflows/dynamic/surfaceEnergy.js +124 -0
  227. package/src/subworkflows/index.js +2 -0
  228. package/src/subworkflows/subworkflow.js +329 -0
  229. package/src/units/assertion.js +29 -0
  230. package/src/units/assignment.js +34 -0
  231. package/src/units/base.js +97 -0
  232. package/src/units/builders/AssertionUnitConfigBuilder.js +28 -0
  233. package/src/units/builders/AssignmentUnitConfigBuilder.js +36 -0
  234. package/src/units/builders/ExecutionUnitConfigBuilder.js +59 -0
  235. package/src/units/builders/IOUnitConfigBuilder.js +53 -0
  236. package/src/units/builders/UnitConfigBuilder.js +86 -0
  237. package/src/units/builders/index.js +15 -0
  238. package/src/units/condition.js +47 -0
  239. package/src/units/execution.js +263 -0
  240. package/src/units/factory.js +53 -0
  241. package/src/units/index.js +25 -0
  242. package/src/units/io.js +163 -0
  243. package/src/units/map.js +33 -0
  244. package/src/units/processing.js +39 -0
  245. package/src/units/reduce.js +17 -0
  246. package/src/units/subworkflow.js +15 -0
  247. package/src/utils.js +73 -0
  248. package/src/workflows/create.js +222 -0
  249. package/src/workflows/default.js +39 -0
  250. package/src/workflows/index.js +99 -0
  251. package/src/workflows/relaxation.js +41 -0
  252. package/src/workflows/workflow.js +351 -0
package/.babelrc ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "presets": [
3
+ [
4
+ "@babel/preset-env",
5
+ {
6
+ "targets": {
7
+ "node": "current"
8
+ }
9
+ }
10
+ ],
11
+ "@babel/preset-react",
12
+ ],
13
+ "plugins": [
14
+ "@babel/plugin-proposal-class-properties"
15
+ ]
16
+ }
17
+
package/LICENSE.md ADDED
@@ -0,0 +1,15 @@
1
+ # LICENSE
2
+
3
+ Copyright 2022 Exabyte Inc.
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,164 @@
1
+ [![npm version](https://badge.fury.io/js/%40exabyte-io%2Fwode.js.svg)](https://badge.fury.io/js/%40exabyte-io%2Fwode.js)
2
+ [![License: Apache](https://img.shields.io/badge/License-Apache-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
3
+
4
+ # wode.js
5
+
6
+ WOrkflow DEfinitions in JavaScript - wode.js - houses entity definitions for use in the Mat3ra platform.
7
+
8
+
9
+ ## Installation
10
+
11
+ For usage within a javascript project:
12
+
13
+ ```bash
14
+ npm install @exabyte-io/wode.js
15
+ ```
16
+
17
+ For development:
18
+
19
+ ```bash
20
+ git clone https://github.com/Exabyte-io/wode.js.git
21
+ ```
22
+
23
+
24
+ ## Contribution
25
+
26
+ This repository is an [open-source](LICENSE.md) work-in-progress and we welcome contributions.
27
+
28
+ We regularly deploy the latest code containing all accepted contributions online as part of the
29
+ [Mat3ra.com](https://mat3ra.com) platform, so contributors will see their code in action there.
30
+
31
+ See [ESSE](https://github.com/Exabyte-io/esse) for additional context regarding the data schemas used here.
32
+
33
+ Useful commands for development:
34
+
35
+ ```bash
36
+ # run linter without persistence
37
+ npm run lint
38
+
39
+ # run linter and save edits
40
+ npm run lint:fix
41
+
42
+ # compile the library
43
+ npm run transpile
44
+
45
+ # run tests
46
+ npm run test
47
+ ```
48
+
49
+ ## Using Linter
50
+
51
+ Linter setup will prevent committing files that don't adhere to the code standard. It will
52
+ attempt to fix what it can automatically prior to the commit in order to reduce diff noise. This can lead to "unexpected" behavior where a
53
+ file that is staged for commit is not identical to the file that actually gets committed. This happens
54
+ in the `lint-staged` directive of the `package.json` file (by using a `husky` pre-commit hook). For example,
55
+ if you add extra whitespace to a file, stage it, and try to commit it, you will see the following:
56
+
57
+ ```bash
58
+ ➜ repo-js git:(feature/cool-feature) ✗ git commit -m "Awesome feature works great"
59
+ ✔ Preparing...
60
+ ✔ Running tasks...
61
+ ✖ Prevented an empty git commit!
62
+ ✔ Reverting to original state because of errors...
63
+ ✔ Cleaning up...
64
+
65
+ ⚠ lint-staged prevented an empty git commit.
66
+ Use the --allow-empty option to continue, or check your task configuration
67
+
68
+ husky - pre-commit hook exited with code 1 (error)
69
+ ```
70
+
71
+ The staged change may remain but will not have been committed. Then it will look like you still have a staged
72
+ change to commit, but the pre-commit hook will not actually commit it for you, quite frustrating! Styling can
73
+ be applied manually and fixed by running:
74
+
75
+ ```bash
76
+ npm run lint:fix
77
+ ```
78
+
79
+ In which case, you may need to then add the linter edits to your staging, which in the example above, puts the
80
+ file back to identical with the base branch, resulting in no staged changes whatsoever.
81
+
82
+
83
+ WoDe
84
+ ====
85
+
86
+ The`WoDe` package synthesizes other entity definition (`De`) libraries
87
+ in the Mat3ra workflow ecosystem and implements the following entities:
88
+
89
+ - `Workflow` - a workflow to be executed on the Mat3ra platform
90
+ - `Subworkflow` - a logical collection of units of work defined by a unique `Applidation`
91
+ - `Units` - one of the following:
92
+ - `AssertionUnit` - assert an expression
93
+ - `AssignmentUnit` - assign a value
94
+ - `ConditionUnit` - evaluate a condition
95
+ - `IOUnit` - Read or write data
96
+ - `ExecutionUnit` - execute an `ADe` `Application`
97
+ - `MapUnit` - create a dynamic number of units based on output of a previous unit
98
+ - `ReduceUnit` - collect the results of a fanned out operation
99
+
100
+ Workflow configurations are processed at build time using `build_workflows.js` and compiled into
101
+ a single JS file so that workflow configurations can be accessed in the browser runtime, not just
102
+ in a NodeJS process.
103
+
104
+
105
+ Workflow Spec
106
+ -------------
107
+
108
+ Workflows defined as configuration conform to the following specification:
109
+
110
+ - `Workflow: Object` - The workflow configuration itself
111
+ - `name: String` - a human readable name describing the functionality of the workflow
112
+ - `units: Array` - a list of workflow units where each unit takes the following shape *Not == Unit*
113
+ - `name: String` - the snake_case name of a subworkflow or another workflow that must exist
114
+ - `config: Optional[Object]` - see `Config` defined below
115
+ - `type: String` - one of:
116
+ - `subworkflow|workflow`
117
+ - **Note:** workflow units may specify `mapUnit: true` in their config
118
+ - `units: Optional[Array]` - if `type == workflow` see above (recursively defined)
119
+ - `config: Optional[Object]` - see `Config` defined below
120
+ - `Subworkflow: Object` - a logical collection of workflow units
121
+ - `application: Object` - an application specification
122
+ - `name: String` - an application name recognized by ADe
123
+ - `version: Optional[String]` - (often a semver) application version string supported by ADe
124
+ - `build: Optional[String]` - application build string supported by ADe
125
+ - `method: Object` - a method specification
126
+ - `name: String` - a named method class exported from MeDe
127
+ - `config: Optional[Object]` - see `Config` defined below
128
+ - `model: Object` - a model specification
129
+ - `name: String` - a named model class exported from MeDe
130
+ - `config: Optional[Object]` - see `Config` defined below
131
+ - `config: Optional[Object]` - see `Config` defined below
132
+ - `units: Array` - a list of subworkflow units where each unit is a Unit defined below
133
+ - `Unit: Object` - a unit of computational work in a workflow
134
+ - `type: String` - one of:
135
+ - `execution|assignment|condition|io|processing|map|subworkflow|assertion`
136
+ - **Note:** optionally may have `Builder` appended to type to use unit builders instead of units directly
137
+ - `executionBuilder` is the primary use case for this
138
+ - `config: Object` - arguments to pass to constructor based on type
139
+ - `functions: Object` - similar to `Config`.functions defined below
140
+ - in the case of builders, functions are applied before calling build
141
+ - `attributes: Object` - similar to `Config`.attributes defined below
142
+ - in the case of builders, attributes are applied after calling build
143
+ - `Config: Object` - custom configuration to apply to an entity
144
+ - **Note:** `functions` and `attributes` may not be supported for all entities, please check the implementation
145
+ - `functions: Object` - collection of functions defined on the entity to run
146
+ - `[key]: {{functionName}}: String` - name of function to run
147
+ - `[value]: {{args}}: Any` - arguments matching the call signature
148
+ - `attributes: Object` - collection of attributes to assign to the entity on creation
149
+ - `[key]: {{attributeName}}: String` - name of function to run
150
+ - `[value]: {{value}}: Any` - value to assign to attribute
151
+ - `[key]: {{constructorArgument}}: String` - parameter passed to constructor
152
+ - `[value]: {{constructorValue}}: Any` - value for a given constructor parameter
153
+
154
+
155
+ Workflow Creation
156
+ -----------------
157
+
158
+ The Workflow instances associated with the workflow configurations are built by
159
+ the `createWorkflows` function traversing all three levels (workflow, subworkflow, unit):
160
+ ![Workflow Generation Diagram](https://user-images.githubusercontent.com/10773967/196579112-d249cafb-d775-4834-b146-e3dedc796174.jpg)
161
+
162
+ ## Links
163
+
164
+ 1. Workflows explained in Mat3ra documentation: https://docs.mat3ra.com/workflows/overview/
@@ -0,0 +1,31 @@
1
+ application:
2
+ name: deepmd
3
+ version: "2.0.2"
4
+ method:
5
+ name: UnknownMethod
6
+ model:
7
+ name: UnknownModel
8
+ name: DeePMD
9
+ units:
10
+ - config:
11
+ execName: python
12
+ flavorName: espresso_cp_to_deepmd
13
+ name: espresso_cp_to_deepmd
14
+ functions:
15
+ head: true
16
+ type: executionBuilder
17
+ - config:
18
+ execName: dp
19
+ flavorName: dp_train_se_e2_r
20
+ name: dp_train_se_e2_r
21
+ type: executionBuilder
22
+ - config:
23
+ execName: python
24
+ flavorName: espresso_to_lammps_structure
25
+ name: espresso_to_lammps_structure
26
+ type: executionBuilder
27
+ - config:
28
+ execName: lmp
29
+ flavorName: lammps_md
30
+ name: lammps_md
31
+ type: executionBuilder
@@ -0,0 +1,16 @@
1
+ application:
2
+ name: espresso
3
+ version: "7.2"
4
+ method:
5
+ name: PseudopotentialMethod
6
+ model:
7
+ name: DFTModel
8
+ name: CP-MD
9
+ units:
10
+ - config:
11
+ execName: cp.x
12
+ flavorName: cp
13
+ name: cp
14
+ functions:
15
+ head: true
16
+ type: executionBuilder
@@ -0,0 +1,27 @@
1
+ # Note: this subworkflow is assumed to be used as part of the valence band offset workflow
2
+ # and is this NOT self-sufficient!
3
+ # Furthermore, this subworkflow expects the following variable(s) to exist in the global context:
4
+ # array_from_context
5
+ application:
6
+ name: python
7
+ version: 3.10.13
8
+ method:
9
+ name: UnknownMethod
10
+ model:
11
+ name: UnknownModel
12
+ name: Find ESP Value
13
+ units:
14
+ - config:
15
+ name: Find Extrema
16
+ execName: python
17
+ flavorName: generic:processing:find_extrema:scipy
18
+ flowchartId: python-find-extrema
19
+ type: executionBuilder
20
+ - config:
21
+ name: Set Average ESP Value
22
+ operand: AVG_ESP
23
+ value: "json.loads(STDOUT)['minima']"
24
+ input:
25
+ - name: STDOUT
26
+ scope: python-find-extrema
27
+ type: assignment
@@ -0,0 +1,67 @@
1
+ config:
2
+ isMultiMaterial: true
3
+ application:
4
+ name: espresso
5
+ version: "6.3"
6
+ method:
7
+ name: PseudopotentialMethod
8
+ model:
9
+ name: DFTModel
10
+ name: Band Structure + average ESP
11
+ units:
12
+ - config:
13
+ name: Set Material Index
14
+ operand: MATERIAL_INDEX
15
+ value: 0
16
+ type: assignment
17
+ - config:
18
+ execName: pw.x
19
+ flavorName: pw_scf
20
+ name: pw_scf
21
+ type: executionBuilder
22
+ - config:
23
+ execName: pw.x
24
+ flavorName: pw_bands
25
+ name: pw_bands
26
+ flowchartId: pw-bands-calculate-band-gap
27
+ type: executionBuilder
28
+ attributes:
29
+ results:
30
+ - name: band_gaps
31
+ - config:
32
+ name: Select indirect band gap
33
+ operand: BAND_GAP_INDIRECT
34
+ value: "[bandgap for bandgap in band_gaps['values'] if bandgap['type'] == 'indirect'][0]"
35
+ input:
36
+ - name: band_gaps
37
+ scope: pw-bands-calculate-band-gap
38
+ type: assignment
39
+ - config:
40
+ name: Set Valence Band Maximum
41
+ operand: VBM
42
+ value: "BAND_GAP_INDIRECT['eigenvalueValence']"
43
+ type: assignment
44
+ - config:
45
+ execName: bands.x
46
+ flavorName: bands
47
+ name: bands
48
+ type: executionBuilder
49
+ - config:
50
+ execName: pp.x
51
+ flavorName: pp_electrostatic_potential
52
+ name: Electrostatic Potential (ESP)
53
+ type: executionBuilder
54
+ - config:
55
+ execName: average.x
56
+ flavorName: average_potential
57
+ name: average ESP
58
+ flowchartId: average-electrostatic-potential
59
+ type: executionBuilder
60
+ - config:
61
+ name: Set Macroscopically Averaged ESP Data
62
+ operand: array_from_context
63
+ value: "average_potential_profile['yDataSeries'][1]"
64
+ input:
65
+ - name: average_potential_profile
66
+ scope: average-electrostatic-potential
67
+ type: assignment
@@ -0,0 +1,21 @@
1
+ application:
2
+ name: espresso
3
+ version: "6.3"
4
+ method:
5
+ name: PseudopotentialMethod
6
+ model:
7
+ name: DFTModel
8
+ name: Band Gap
9
+ units:
10
+ - config:
11
+ execName: pw.x
12
+ flavorName: pw_scf
13
+ name: pw_scf
14
+ functions:
15
+ head: true
16
+ type: executionBuilder
17
+ - config:
18
+ execName: pw.x
19
+ flavorName: pw_nscf
20
+ name: pw_nscf
21
+ type: executionBuilder
@@ -0,0 +1,30 @@
1
+ name: HSE Band Gap
2
+ application:
3
+ name: espresso
4
+ version: "6.3"
5
+ model:
6
+ name: DFTModel
7
+ config:
8
+ type: dft
9
+ subtype: hybrid
10
+ functional:
11
+ name: hse06
12
+ slug: hse06
13
+ method:
14
+ name: PseudopotentialMethod
15
+ config:
16
+ type: pseudopotential
17
+ subtype: us
18
+ units:
19
+ - config:
20
+ execName: pw.x
21
+ flavorName: pw_scf_hse
22
+ name: pw_scf_hse
23
+ functions:
24
+ head: true
25
+ type: executionBuilder
26
+ - config:
27
+ execName: projwfc.x
28
+ flavorName: projwfc
29
+ name: projwfc
30
+ type: executionBuilder
@@ -0,0 +1,26 @@
1
+ application:
2
+ name: espresso
3
+ version: "6.3"
4
+ method:
5
+ name: PseudopotentialMethod
6
+ model:
7
+ name: DFTModel
8
+ name: Band Structure
9
+ units:
10
+ - config:
11
+ execName: pw.x
12
+ flavorName: pw_scf
13
+ name: pw_scf
14
+ functions:
15
+ head: true
16
+ type: executionBuilder
17
+ - config:
18
+ execName: pw.x
19
+ flavorName: pw_bands
20
+ name: pw_bands
21
+ type: executionBuilder
22
+ - config:
23
+ execName: bands.x
24
+ flavorName: bands
25
+ name: bands
26
+ type: executionBuilder
@@ -0,0 +1,34 @@
1
+ application:
2
+ name: espresso
3
+ version: "6.3"
4
+ method:
5
+ name: PseudopotentialMethod
6
+ model:
7
+ name: DFTModel
8
+ name: Band Structure + Density of States
9
+ units:
10
+ - config:
11
+ execName: pw.x
12
+ flavorName: pw_scf
13
+ name: pw_scf
14
+ type: executionBuilder
15
+ - config:
16
+ execName: pw.x
17
+ flavorName: pw_bands
18
+ name: pw_bands
19
+ type: executionBuilder
20
+ - config:
21
+ execName: bands.x
22
+ flavorName: bands
23
+ name: bands
24
+ type: executionBuilder
25
+ - config:
26
+ execName: pw.x
27
+ flavorName: pw_nscf
28
+ name: pw_nscf
29
+ type: executionBuilder
30
+ - config:
31
+ execName: projwfc.x
32
+ flavorName: projwfc
33
+ name: projwfc
34
+ type: executionBuilder
@@ -0,0 +1,30 @@
1
+ # Note: this subworkflow is assumed to be part of the "Band Structure - HSE" workflow
2
+ # and is this NOT self-sufficient!
3
+ name: Band Structure - HSE
4
+ application:
5
+ name: espresso
6
+ version: "6.3"
7
+ model:
8
+ name: DFTModel
9
+ config:
10
+ type: dft
11
+ subtype: hybrid
12
+ functional:
13
+ name: hse06
14
+ slug: hse06
15
+ method:
16
+ name: PseudopotentialMethod
17
+ config:
18
+ type: pseudopotential
19
+ subtype: us
20
+ units:
21
+ - config:
22
+ execName: pw.x
23
+ flavorName: pw_scf_bands_hse
24
+ name: pw_scf_bands_hse
25
+ type: executionBuilder
26
+ - config:
27
+ execName: bands.x
28
+ flavorName: bands
29
+ name: bands
30
+ type: executionBuilder
@@ -0,0 +1,31 @@
1
+ name: Spin magnetic bandstructure
2
+ application:
3
+ name: espresso
4
+ version: "6.3"
5
+ method:
6
+ name: PseudopotentialMethod
7
+ model:
8
+ name: DFTModel
9
+ units:
10
+ - config:
11
+ execName: pw.x
12
+ flavorName: pw_scf_magn
13
+ name: pw_scf_magn
14
+ functions:
15
+ head: true
16
+ type: executionBuilder
17
+ - config:
18
+ execName: pw.x
19
+ flavorName: pw_bands_magn
20
+ name: pw_bands_magn
21
+ type: executionBuilder
22
+ - config:
23
+ execName: bands.x
24
+ flavorName: bands_spin_up
25
+ name: bands_spin_up
26
+ type: executionBuilder
27
+ - config:
28
+ execName: bands.x
29
+ flavorName: bands_spin_dn
30
+ name: bands_spin_dn
31
+ type: executionBuilder
@@ -0,0 +1,30 @@
1
+ name: Spin orbit coupling bandstructure
2
+ application:
3
+ name: espresso
4
+ version: "6.3"
5
+ method:
6
+ name: PseudopotentialMethod
7
+ setSearchText: nc-fr
8
+ config:
9
+ type: pseudopotential
10
+ subtype: nc-fr
11
+ model:
12
+ name: DFTModel
13
+ units:
14
+ - config:
15
+ execName: pw.x
16
+ flavorName: pw_scf_soc
17
+ name: pw_scf_soc
18
+ functions:
19
+ head: true
20
+ type: executionBuilder
21
+ - config:
22
+ execName: pw.x
23
+ flavorName: pw_bands_soc
24
+ name: pw_bands_soc
25
+ type: executionBuilder
26
+ - config:
27
+ execName: bands.x
28
+ flavorName: bands
29
+ name: bands
30
+ type: executionBuilder
@@ -0,0 +1,35 @@
1
+ application:
2
+ name: espresso
3
+ version: "6.3"
4
+ method:
5
+ config:
6
+ data: {}
7
+ subtype: nc
8
+ type: pseudopotential
9
+ name: PseudopotentialMethod
10
+ model:
11
+ name: DFTModel
12
+ name: Compute Dielectric Function
13
+ units:
14
+ - config:
15
+ execName: pw.x
16
+ flavorName: pw_scf
17
+ name: pw_scf
18
+ functions:
19
+ head: true
20
+ type: executionBuilder
21
+ - config:
22
+ name: Set No-Symmetry Flag
23
+ operand: NO_SYMMETRY_NO_INVERSION
24
+ value: True # yamllint disable-line rule:truthy
25
+ type: assignment
26
+ - config:
27
+ execName: pw.x
28
+ flavorName: pw_nscf
29
+ name: pw_nscf
30
+ type: executionBuilder
31
+ - config:
32
+ execName: epsilon.x
33
+ flavorName: dielectric_tensor
34
+ name: Compute dielectric function
35
+ type: executionBuilder
@@ -0,0 +1,24 @@
1
+ application:
2
+ name: espresso
3
+ version: "6.3"
4
+ method:
5
+ name: PseudopotentialMethod
6
+ model:
7
+ name: DFTModel
8
+ name: Density of States
9
+ units:
10
+ - config:
11
+ execName: pw.x
12
+ flavorName: pw_scf
13
+ name: pw_scf
14
+ type: executionBuilder
15
+ - config:
16
+ execName: pw.x
17
+ flavorName: pw_nscf
18
+ name: pw_nscf
19
+ type: executionBuilder
20
+ - config:
21
+ execName: projwfc.x
22
+ flavorName: projwfc
23
+ name: projwfc
24
+ type: executionBuilder
@@ -0,0 +1,19 @@
1
+ application:
2
+ name: espresso
3
+ version: "6.3"
4
+ method:
5
+ name: PseudopotentialMethod
6
+ model:
7
+ name: DFTModel
8
+ name: Electronic Density Mesh
9
+ units:
10
+ - config:
11
+ execName: pw.x
12
+ flavorName: pw_scf
13
+ name: pw_scf
14
+ type: executionBuilder
15
+ - config:
16
+ execName: pp.x
17
+ flavorName: pp_density
18
+ name: pp_density
19
+ type: executionBuilder
@@ -0,0 +1,14 @@
1
+ application:
2
+ name: espresso
3
+ version: "6.3"
4
+ method:
5
+ name: PseudopotentialMethod
6
+ model:
7
+ name: DFTModel
8
+ name: Effective Screening Medium (ESM)
9
+ units:
10
+ - config:
11
+ execName: pw.x
12
+ flavorName: pw_esm
13
+ name: pw_esm
14
+ type: executionBuilder
@@ -0,0 +1,14 @@
1
+ application:
2
+ name: espresso
3
+ version: "6.3"
4
+ method:
5
+ name: PseudopotentialMethod
6
+ model:
7
+ name: DFTModel
8
+ name: Effective Screening Medium (ESM) Relax
9
+ units:
10
+ - config:
11
+ execName: pw.x
12
+ flavorName: pw_esm_relax
13
+ name: pw_esm_relax
14
+ type: executionBuilder
@@ -0,0 +1,16 @@
1
+ # Note: this subworkflow is assumed to be run after a pw_scf unit
2
+ # and is this NOT self-sufficient!
3
+ name: Extract KPOINTS
4
+ application:
5
+ name: python
6
+ version: 3.10.13
7
+ method:
8
+ name: UnknownMethod
9
+ model:
10
+ name: UnknownModel
11
+ units:
12
+ - config:
13
+ name: Extract kpoints
14
+ execName: python
15
+ flavorName: espresso_extract_kpoints
16
+ type: executionBuilder