CESM POP2+CPL7耦合器源码学习(1)

pop2强迫场文件forcing.F90中对风场强迫场的定义

使用参数SMF,SMFT分别是初始化为零的强迫数组,lsmft_avail未知

在子例程init_ws中有明确说明,lsmft_avail为动量通量是否在T点可用(以防止之后的平均化),

SMF为当前时间步长的表面动量通量,SMFT为T点的表面动量通量

在方法init_ws中,最初的初始化,也是从文件中读取相关的风应力数据,并根据不同的类型进行不同的插值方法

select case (ws_data_type):根据风应力数据类型进行选择:

  • none:无风应力数据,因此不需要时间插值,将相关参数设置为默认值。
  • analytic:简单的解析风应力,根据给定的公式计算风应力值,不需要时间插值。
  • annual:年均气候风应力,从文件中读取,不需要时间插值。
  • monthly-equalmonthly-calendar:每月平均的气候风应力,从文件中读取,可能需要时间插值。
  • n-hour:每隔 n 小时指定一次风应力,从文件中读取,可能需要时间插值。
  • default:未知的风应力数据类型,报错退出。

在之后的强迫场构建时,对于风场强迫使用了set_ws方法,该方法的代码较长,但是逻辑总结起来就一句话,根据不同的类型完成风场强迫场的更新和插值。

在完整再遍历一遍之后发现taux变量完全是外来的,都是与IO过程相关。

转头看向Forcing_coupled文件,大致浏览该文件,文件中有很多关于各类变量的耦合过程,其中就有

其作用是将风应力旋转至pop2支持的网格中

对于两个实数数组 WORK1WORK2,三维数组,WORK1 包含了来自耦合器的真实经向风应力(taux),而 WORK2 包含了来自耦合器的真实纬向风应力(tauy)。并从耦合器传来,好的,现在新的目标已经出现,该去看看CESM的耦合器了。

一番查找之后发现CESM2.0和1.2的耦合器还不一样

2.0主要使用CIME,1.2主要使用CPL7,稍稍翻阅CPL7文档之后,发现内容还是挺多的,就扒下代码,继续查找风应力的计算过程

在CPL7模块,seq_flux_mct找到了相关的定义

第一个方法通量初始化,分配空间

第二个方法初始化海气耦合交换数据的变量和参数,详细查阅

在这个过程中也初始化了风应力相关的数据并分配了空间,这可以看出风应力确实是该模块的输出,现在继续找相关的计算过程

对于大气模块的耦合序列通量,其中参数xao中明显包括风应力的相关数据

而在这个子例程中,发现了一个关键方法shr_flux_atmocn,这似乎是用于计算相互作用通量的关键方法,而该方法在CAM和csm_share中各有一份

先看耦合器中的方法

这是一个用于计算大气/海洋通量的内部子例程 。接受一系列输入参数,包括大气和海洋的风速、温度、湿度等,并计算出表面通量、热通量、风应力等。

在其中自然而然的找到了taux的计算过程,其中计算包括使用大气层网格点n处的风速和海洋层的风速,属于一个交换层变量,成功破案!

然后去CAM中寻找是否有关于该方法的调用

似乎仅有相关定义而没有相关的调用。

在CPL7中尝试寻找

果然,该方法就是进行海气耦合交换层变量的位置,以后修改的代码的位置就大概找到了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值