通过物理过程部分提供的Diagfi方法存储
通过此方法所存储的变量均位于diagfi.nc文件中。
程序调用过程
- 首先在迭代主程序LMDZ.COMMON/libf/dyn3dpar/leapfrog_p.F中,每iphysiq步会进入一次物理过程的计算(通过MOD(itau,iphysiq )给出apphys的值,用于决定是否进入物理步)。
- 每次在物理过程计算时,调用子程序CALL calfis_p,转入dynphy_lonlat/calfis_p.F
- 经过一些不清楚的操作(好像有分配新数组,收集各进程变量,可能是把动力变量转为物理变量),调用子程序CALL call_physiq,转入LMDZ.MARS/libf/dynphy_lonlat/phymars/callphysiq_mod.F90
- 这一步仅仅检查planet_type是否是mars,然后调用子程序CALL physiq,转入LMDZ.MARS/libf/phymars/physiq_mod.F
- 在子程序physiq的中后段,调用存储数据子程序call WRITEDIAGFI,转入writediagfi.F。每次调用只能传入并存储一个变量。
- 在writediagfi的子程序中,执行以下操作。
- 在首次调用时,读入diagfi.def并储存要记录的变量列表。将传入的变量名赋值给firstnom。以后每次遇到该变量,都将记录时间+1。
- 判断传入的变量名是否在储存的列表中,如果不在则直接返回。如果之前没有给定diagfi.def,那么不执行此判断,默认为存储。
- 然后进行存储。
通过动力部分的writefield方法存储
通过此方法所存储的变量位于<变量名>.nc文件中。
程序调用过程
- 在迭代主程序LMDZ.COMMON/libf/dyn3dpar/leapfrog_p.F中,可以利用call WriteField_p存储变量,每次只能存储一个变量,程序中存在样例代码。此后转入write_field_p.F90
- WriteField_p是一个接口,分别处理了一维、二维、三维数组。对于每种情况,首先由0号进程收集其他各个进程的数据,然后0号进程执行call WriteField,转入misc/write_field.F90
- WriteField也是一个接口,负责底层的存储工作。