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-equal
或monthly-calendar
:每月平均的气候风应力,从文件中读取,可能需要时间插值。n-hour
:每隔 n 小时指定一次风应力,从文件中读取,可能需要时间插值。default
:未知的风应力数据类型,报错退出。
在之后的强迫场构建时,对于风场强迫使用了set_ws方法,该方法的代码较长,但是逻辑总结起来就一句话,根据不同的类型完成风场强迫场的更新和插值。
在完整再遍历一遍之后发现taux变量完全是外来的,都是与IO过程相关。
转头看向Forcing_coupled文件,大致浏览该文件,文件中有很多关于各类变量的耦合过程,其中就有
其作用是将风应力旋转至pop2支持的网格中
对于两个实数数组 WORK1
和 WORK2,
三维数组,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中尝试寻找
果然,该方法就是进行海气耦合交换层变量的位置,以后修改的代码的位置就大概找到了