structure optimization loop
需要一个阻塞,因为我需要迭代几次(从for循环中可以明显看出),所以我希望“ loop over elements”继续进行。也就是说,当structure optimization loop
以及随后的loop on magnetic state for each combo
正在串行等待时,我希望从最外面的loop over elements
开始有4个这样的实例。
我能做到吗?
def main():
# loop over elements
for ds in delem:
for ps in pelem:
for cs in celem: # THIS LOOP SHOULD BE PARALLEL
latpar = (lats[delem.index(ds)])
dstr = ds+"-"+ps+"-"+cs
os.makedirs(dstr, exist_ok=True)
os.chdir(dstr)
# loop on magnetic state for each combo
# THIS LOOP SHOULD ALSO WAIT
# FOR THE NEXT LOOP
for mstate in magstate:
os.makedirs(mstate, exist_ok=True)
mdir = magstate.index(mstate)
string = ds+"-"+ps+"-"+cs+"-"+mstate.upper()
print(string)
os.chdir(mstate)
genpos(float(latpar))
genincar(mdir,string)
shutil.copy2(os.path.join(root,"KPOINTS"),".")
genpot(ds,ps,cs)
gensub(string)
# Structure optimization loop
for sstate in optstate:
# genincar2(sdir)
shutil.copy2("INCAR.main","INCAR")
subprocess.call(scfc)
time.sleep(5)
while True:
jobnum=int(subprocess.getoutput("qselect -u rudrab|wc -l"))
print(str(jobnum)+" jobs still running")
time.sleep(30)
if jobnum < 1:
with open("log","a") as flog:
flog.write(str(string)+ " submitted on "+time.strftime("%d/%m/%Y"+" at "+"%H:%M:%S")+"\n")
break
# os.makedirs(sstate, exist_ok=True)
sdir = optstate.index(sstate)
print(sstate)
genincar2(sdir)
shutil.copy2("INCAR", "INCAR"+"."+str(sstate))
shutil.copy2("CONTCAR", "POSCAR")
shutil.copy2("CONTCAR", "CONTCAR"+"."+str(sstate))
shutil.copy2("OUTCAR", "OUTCAR"+"."+str(sstate))
os.chdir("..")
os.chdir(root)