cesm 物理过程计算流程(每天看一个fortran文件(6))

cesm物理过程参数化控制代码 physpkg.F90

目录

引言:

physpkg module 简介

 子程序phys_register

子程序phys_inidat

子程序phys_init

子程序phys_run1

子程序phys_run2

子程序phys_final

子程序tphysac

子程序tphysbc

子程序phys_timestpep_init


引言:

我在向cesm中添加物理过程计算代码的时候都需要往vertical_diffusion_tend 的子程序里加,因为我知道这个会在正确的时间被调用。

但是我还是想追根溯源,找到到底是哪个文件在控制物理过程的计算。

于是我 grep -r "vertical_diffusion_tend" *

我发现,在physpkg.F90 文件中调用了vertical_diffusion_tend,我简单看一下,就是这个文件在控制各个物理过程的计算。

 

physpkg module 简介

首先是注释和作者

 这里用了很多module中的很多subroutine

 然后这里面有5个子程序,其中第一是注册,第二个初始化,第三个和第四个是运行物理过程计算,第五个是结束

其中vertical_diffusion_tend 在第三个run1中

 然后是对物理过程的一些选项的控制变量


 

 子程序phys_register

 首先读取前面的控制变量,然后根据这些变量选择是否调用某些子程序,在这个子程序中,大部分只是准备变量之类的操作。

 pbuf_add_field子程序就是创建变量场

 我们看到,这后面还会不经过判断就执行某些子程序。


子程序phys_inidat

 我们看见这里面定义了一些type:cam_out,pbuf2d等等,这个里面更多对数据的处理

 

这里面有tptr,tptr_2,tptr3d...

infld

pbuf_set_field

 2D数据

这里面有一些是关于边界层高度的。这是二维数据,三维数据在下面

 3D的数据


子程序phys_init

 为了物理包的 初始化

 

 这里有对边界层的初始化和垂直扩散的初始化,以及辐射,云,浅对流等等


子程序phys_run1

 这里面的计算程序会在更新表面模式之前运行

 

 

 

 这里是主要的步骤,并行计算里面的内容,然后相关的调用各个物理过程的语句在tphysbc中


子程序phys_run2

 这里的程序会在表面模式更新之后再运行

 重要的部分,其中tphysac 中的a 应该是after的意思,之前就是tphysbc,before.

 


子程序phys_final

 应该是一些收尾工作


子程序tphysac

 我们看到很多的物理过程都是在更新之后才进行的,其中包括了我们之前写的代码的。

 我们简单看一下调用

 其中垂直扩散和边界层计算在这里调用


子程序tphysbc

 method 中介绍参数化的方法,可以看见,我们只需要写我们的参数化方法,然后在这个程序中call调用,当然需要遵守上面的三个步骤。


子程序phys_timestpep_init


 

结束module

总结: 这个程序是参数化最源头的程序了。相关的逻辑也大致明确了。之后可以在这个程序中调用我们的参数化方法,从而不需要再到别人的代码里面嫁接了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值