Skip to content

Commit f2fe66b

Browse files
authored
Update aiida.py
1 parent 83f1d79 commit f2fe66b

File tree

1 file changed

+0
-212
lines changed
  • python_workflow_definition/src/python_workflow_definition

1 file changed

+0
-212
lines changed

python_workflow_definition/src/python_workflow_definition/aiida.py

Lines changed: 0 additions & 212 deletions
Original file line numberDiff line numberDiff line change
@@ -123,215 +123,3 @@ def write_workflow_json(wg, file_name):
123123
json.dump(data, f, indent=2)
124124

125125
return data
126-
127-
128-
def construct_wg_qe(
129-
get_bulk_structure,
130-
calculate_qe,
131-
generate_structures,
132-
plot_energy_volume_curve,
133-
strain_lst,
134-
):
135-
136-
from .shared import get_dict
137-
from .shared import get_list
138-
139-
# NOTE: `get_dict` is `get_input_dict`, to compile the input values for the calc tasks
140-
# NOTE: `add_link` must be from outputs to inputs
141-
wg = WorkGraph("wg-qe")
142-
143-
get_bulk_structure_task = wg.add_task(
144-
get_bulk_structure,
145-
name="get_bulk_structure",
146-
register_pickle_by_value=True,
147-
)
148-
149-
relax_task = wg.add_task(
150-
calculate_qe,
151-
# ! I don't like the `mini` name...
152-
name="mini",
153-
register_pickle_by_value=True,
154-
)
155-
156-
generate_structures_task = wg.add_task(
157-
generate_structures,
158-
name="generate_structures",
159-
register_pickle_by_value=True,
160-
)
161-
162-
# here we add the structure outputs based on the number of strains
163-
del wg.tasks.generate_structures.outputs["result"]
164-
165-
scf_qe_tasks = []
166-
for i, strain in enumerate(strain_lst):
167-
generate_structures_task.add_output("workgraph.any", f"s_{i}")
168-
169-
scf_qe_task = wg.add_task(
170-
calculate_qe,
171-
name=f"qe_{i}",
172-
register_pickle_by_value=True,
173-
)
174-
scf_qe_tasks.append(scf_qe_task)
175-
176-
plot_energy_volume_curve_task = wg.add_task(
177-
plot_energy_volume_curve,
178-
name="plot_energy_volume_curve",
179-
register_pickle_by_value=True,
180-
)
181-
182-
pickle_element_task = wg.add_task(
183-
pickle_node,
184-
name="pickle_element",
185-
value="Al",
186-
)
187-
188-
pickle_a_task = wg.add_task(
189-
pickle_node, name="pickle_a", value=4.05
190-
)
191-
192-
pickle_cubic_task = wg.add_task(
193-
pickle_node, name="pickle_cubic", value=True
194-
)
195-
196-
pickle_relax_workdir_task = wg.add_task(
197-
pickle_node,
198-
name="pickle_relax_workdir",
199-
value="mini",
200-
)
201-
202-
# ? relax or SCF, or general? -> Should be relax
203-
relax_get_dict_task = wg.add_task(
204-
task.pythonjob(
205-
# outputs=["structure", "calculation", "kpts", "pseudopotentials", "smearing"]
206-
# outputs=["dict"]
207-
)(get_dict),
208-
name="relax_get_dict",
209-
register_pickle_by_value=True,
210-
)
211-
212-
pickle_pp_task = wg.add_task(
213-
pickle_node,
214-
name="pseudopotentials",
215-
value={"Al": "Al.pbe-n-kjpaw_psl.1.0.0.UPF"},
216-
)
217-
218-
pickle_kpts_task = wg.add_task(
219-
pickle_node, name="kpts_task", value=[3, 3, 3] # FIXME: Back to [3, 3, 3]
220-
)
221-
222-
pickle_calc_type_relax_task = wg.add_task(
223-
pickle_node,
224-
name="calc_type_relax",
225-
value="vc-relax",
226-
)
227-
228-
pickle_smearing_task = wg.add_task(
229-
pickle_node, name="smearing", value=0.02
230-
)
231-
232-
strain_lst_task = wg.add_task(
233-
pickle_node,
234-
name="pickle_strain_lst",
235-
value=strain_lst,
236-
)
237-
238-
strain_dir_tasks, scf_get_dict_tasks = [], []
239-
for i, strain in enumerate(strain_lst):
240-
strain_dir = f"strain_{i}"
241-
242-
strain_dir_task = wg.add_task(
243-
pickle_node,
244-
name=f"pickle_{strain_dir}_dir",
245-
value=strain_dir,
246-
register_pickle_by_value=True,
247-
)
248-
strain_dir_tasks.append(strain_dir_task)
249-
250-
scf_get_dict_task = wg.add_task(
251-
task.pythonjob()(get_dict),
252-
name=f"get_dict_{i}",
253-
register_pickle_by_value=True,
254-
)
255-
scf_get_dict_tasks.append(scf_get_dict_task)
256-
257-
if i == 0:
258-
pickle_calc_type_scf_task = wg.add_task(
259-
pickle_node,
260-
name="calc_type_scf",
261-
value="scf",
262-
)
263-
264-
get_volumes_task = wg.add_task(
265-
task.pythonjob()(get_list),
266-
name="get_volumes",
267-
register_pickle_by_value=True,
268-
)
269-
270-
get_energies_task = wg.add_task(
271-
task.pythonjob()(get_list),
272-
name="get_energies",
273-
register_pickle_by_value=True,
274-
)
275-
276-
# Add remaining links
277-
wg.add_link(
278-
pickle_element_task.outputs.result, get_bulk_structure_task.inputs.element
279-
)
280-
wg.add_link(pickle_a_task.outputs.result, get_bulk_structure_task.inputs.a)
281-
wg.add_link(pickle_cubic_task.outputs.result, get_bulk_structure_task.inputs.cubic)
282-
283-
# `.set` rather than `.add_link`, as get_dict takes `**kwargs` as input
284-
relax_get_dict_task.set(
285-
{
286-
"structure": get_bulk_structure_task.outputs.result,
287-
"calculation": pickle_calc_type_relax_task.outputs.result,
288-
"kpts": pickle_kpts_task.outputs.result,
289-
"pseudopotentials": pickle_pp_task.outputs.result,
290-
"smearing": pickle_smearing_task.outputs.result,
291-
}
292-
)
293-
294-
wg.add_link(relax_get_dict_task.outputs.result, relax_task.inputs.input_dict)
295-
wg.add_link(
296-
pickle_relax_workdir_task.outputs.result,
297-
relax_task.inputs.working_directory,
298-
)
299-
300-
wg.add_link(relax_task.outputs.structure, generate_structures_task.inputs.structure)
301-
wg.add_link(
302-
strain_lst_task.outputs.result, generate_structures_task.inputs.strain_lst
303-
)
304-
305-
for i, (scf_get_dict_task, scf_qe_task, strain_dir_task) in enumerate(
306-
list(zip(scf_get_dict_tasks, scf_qe_tasks, strain_dir_tasks))
307-
):
308-
scf_get_dict_task.set(
309-
{
310-
"structure": generate_structures_task.outputs[f"s_{i}"],
311-
"calculation": pickle_calc_type_scf_task.outputs.result,
312-
"kpts": pickle_kpts_task.outputs.result,
313-
"pseudopotentials": pickle_pp_task.outputs.result,
314-
"smearing": pickle_smearing_task.outputs.result,
315-
}
316-
)
317-
wg.add_link(scf_get_dict_task.outputs.result, scf_qe_task.inputs.input_dict)
318-
wg.add_link(
319-
strain_dir_task.outputs.result, scf_qe_task.inputs.working_directory
320-
)
321-
322-
# collect energy and volume
323-
# wg.add_link(scf_qe_task.outputs.energy, get_energies_task.inputs.kwargs)
324-
get_energies_task.set({f"{i}": scf_qe_task.outputs.energy})
325-
# wg.add_link(scf_qe_task.outputs.volume, get_volumes_task.inputs.kwargs)
326-
get_volumes_task.set({f"{i}": scf_qe_task.outputs.volume})
327-
328-
wg.add_link(
329-
get_volumes_task.outputs.result,
330-
plot_energy_volume_curve_task.inputs.volume_lst,
331-
)
332-
wg.add_link(
333-
get_energies_task.outputs.result,
334-
plot_energy_volume_curve_task.inputs.energy_lst,
335-
)
336-
337-
return wg

0 commit comments

Comments
 (0)