1.背景
vim namelist.input ## Change the simulated period mpirun np -16 ./wrf.exe模型。2.我的尝试
当目标周期足够大(如1年)时,较长的计算时间会降低计算结果的稳定性。(有人可能熟悉蝴蝶效应:如果计算时间太长,即使模拟结果与实际结果相差不大,也会变得巨大)
因此,我需要将模拟周期分成几个子部分,并多次运行模型。有一个.csh文件是由一位研究者编写的,可以达到我的目标。我把它上传到这里作为参考。
#!/bin/csh -f
set year = "2013"
foreach strtime (010106010600 010512011100) ## just show two periods here
set smon = `echo ${strtime}|cut -c1-2`
set sday = `echo ${strtime}|cut -c3-4`
set shr = `echo ${strtime}|cut -c5-6`
set emon = `echo ${strtime}|cut -c7-8`
set eday = `echo ${strtime}|cut -c9-10`
set ehr = `echo ${strtime}|cut -c11-12`
cat > namelist.input << EOF
start_year = ${year},${year},
start_month = ${smon},${smon},
start_day = ${sday},${sday},
start_hour = ${shr},${shr},
end_year = ${year},${year},
end_month = ${emon},${emon},
end_day = ${eday},${eday},
end_hour = ${ehr},${ehr},
... # the .csh file contain all content of __namelist.input__ with start and end time changes.
EOF
# running wrf
mpirun -np 16 ./wrf.exe
end我想用编写一个程序来代替csh文件。Python语言更强大(我可以在同一个.py程序中对输出文件进行后置处理)。
3.我的问题
我曾多次尝试为自动运行WRF模型编写一个.py程序。它包含三个主要内容:
但我对重新开始的时间有点困惑。
话说回来,--如何测试一次运行--已经结束,我需要在Python中为下一段时间重新运行该模型。
发布于 2017-04-22 12:34:38
因此,问题是:如何检查进程是否仍在运行?
可能的解决办法:
1)创建执行模型的start manager脚本,并检查其他进程是否在while循环中完成?还是在你的模型结束时进行函数调用?
2)在每段时间结束时做些事情,写一些简单的文本文件或类似的东西。另一个过程就会发现这一点。
3)使用psutil https://github.com/giampaolo/psutil检查exe是否正在运行
import psutil
def is_alive():
for pid in psutil.pids():
p = psutil.Process(pid)
if p.name() == "wrf.exe":
print("Process is alive")
return True
return Falsehttps://stackoverflow.com/questions/43558038
复制相似问题