在地转平衡的背景场中,气块在水平气压梯度力和科氏力作用下,水平位移的稳定性问题
在具有水平切变的纬向流 u(y) 中,南北位移的气块是受抑制而返回其平衡位置(稳定)?还是加速远离其平衡位置(不稳定)?或是随遇而安(中性)?
这取决于背景场的绝对涡度,
静力稳定度是气块垂直运动时的稳定性,惯性稳定度是气块水平运动时的稳定性。如果大气既是静力稳定的又是惯性稳定的,则它在作垂直运动或水平运动时,运动都是稳定的。
但是,当气块沿倾斜等熵面(位温为常数)作倾斜运动时,其运动仍有可能是不稳定的,这是的不稳定称为对称不稳定。
有时又称对称不稳定为中尺度不稳定
从波动观点看,大气长波的不稳定增长是大尺度天气系统发生发展的重要机制。
在无切变的平行基流(u=常数)中,大气长波的频率或波速为实数,即波动是稳定的。当基本气流存在水平或铅直切变时,大气长波则可能出现不稳定。
正压稳定性问题————只有水平切变的基本气流中的大气长波稳定性问题。
感觉正压稳定性与惯性稳定度很像,两者都是考虑大气水平运动的稳定性问题,只是前者是整个大气气流,而后者是基于某个气块。但两者的判据都与绝对涡度有关。
基本气流只有垂直切变的纯斜压大气中的大气长波的稳定性问题。
中纬度对流层,基本气流临界垂直切变的最小值为 4m/s,对应的临界波长约等于4000km。
中纬度天气尺度系统可以是叠加在斜压不稳定基流上的微小扰动发展的结果。
尽管实际大气中,有许多其他因素可影响天气系统的发展,例如惯性不稳定、有限振幅扰动的非线性相互作用和潜热释放等,但是,从观测研究、实验室模拟和数值模拟等所得到的证据都表明,斜压不稳定是中纬度天气尺度波动发展的主要机制。
斜压不稳定大气长波的结构:
红噪声是低频长波,其功率谱能量主要集中于低频处
白噪声是各个频率上的谱密度值相同
类似于谐波分析,将序列中的周期性视为正弦波
可以对数据做纬向傅里叶变换,也可以做时间上的傅里叶变换,得到傅里叶系数。常用的函数有以下三种
除以下三种外,还有基于复数时间序列的傅里叶变换 cfftf, cfftb
,当把其中的虚部数值设为0时,其计算结果类似于用 ezfftf
,但用 ezfftf
时得到的频率只有正值,而用 cfftf
时可以得到负的频率值,适用于纬向数据,可以得到东传和西传的傅里叶系数,用该函数也可以对经傅里叶变换的傅里叶系数再进行傅里叶变换。
但用 cfftf
计算得到的结果没有标准化,若要得到标准化的结果,需要的输出结果再除以样本数
最近在写中尺度气象学作业时,由于有太多公式,用word自带的公式编辑器编写的话,过于麻烦,于是上网搜查好用的公式编辑器。
常用的公式编辑器好像就是 MathType,另外有一位知乎上的网友推荐使用 AxMath,由于这一款编辑器可以使用 LaTex code 编写公式,于是我选择了这一款.
刚开始用着感觉还挺好的,但当要输入大型偏微分方程组时,由于它在没有注册前无法复制粘贴code,使得编辑效率低下,于是只能放弃。
随后在网上下了一个 LaTex语法的编译器,我选择的是 Tex Live,通过自己编写脚本,编译后产生pdf文件,再把公式截图复制到word文档中,虽然这样还是挺麻烦的,但在时间仓促的情况下暂时也想不到更好的办法。
在进一步了解LaTex时,发现它是一个排版工具,可以使用这个语言写论文,这样就可以很方便地利用code在文中插入公式、化学方程式、图片,插入图片时也可以用code控制图片大小,也可以使用code控制页边距、排版格式,不过这个语法感觉似乎挺麻烦的。忽然想到之前好像有一个师兄的博士论文完全是用这个写的。
2020年3月更新
后在网友的推荐下,发现 mathpix 也很好用,可以通过截图将图片中的公式转换为LaTex语法,这样引用修改别人的公式就方便多了。下载网址
该链接中含有多种不同类型的公式可供抓取与模仿:https://mathpix.com/examples.pdf
此外,mathpix还有一个网页版的同时具有Markdown和LaTeX语法的编译器,可以左边写代码,右边立即看到效果,同时还可输出pdf,然后通过截图将公式复制粘贴到word上,相比Tex Live要好用很多。可以注册一个账号,将编辑过的公式都保存在网页上。
如果不想将公式以图片形式放到word上,该博文提供了将LaTeX公式拷贝到Word中的两种方法,个人觉得第二种方法比较好用,适用于任何形式的公式。只是 https://stackedit.io/editor 该在线Markdown编辑器是其第四版,除了复制粘贴,网页编辑似乎不太流畅,但其第五版又不支持MathML代码的显示支持,有点鸡肋。
此外,现在office似乎也支持LaTex语法了,只是有些其中的有些字符依然不能识别,鸡肋。
Word 中使用UnicodeMath和LaTeX的线性格式公式
发现用Fortran读写nc文件时的编译方法和一般的不一样,因为需要调用netcdf的静态库。
首先Fortran代码中要包含下面这一句话,需要加在 implicit none
后面:
include '/usr/local/netcdf/include/netcdf.inc'
然后编译时分两步走
ifort -c -I/usr/local/netcdf/include test.f90
ifort -o test test.o -L/usr/local/netcdf/lib -lnetcdff
其中-c
是编译,产生后缀为o的文件,-o
是连接,产生可执行文件。如果需要编译的文件较多,也可以写 Makefile 文件进行编译。
若是没有调用netcdf库的话,在linux中直接对fortran编译的操作如下:
ifort 1910-iterative_monthly.f90 -o iteration -mcmodel=medium
!可产生名为 iteration 的可执行文件。
!当该程序运行时运到的内存很大时,可在编译时加上最后那句话 -mcmodel=medium
Module 用来封装程序模块,通过 use module_name
来使用,且要在开始声明之前就使用。
module中的变量若不声明成全局变量,这些变量被函数使用时,只会是函数中的局部变量。若想要函数之间通过module中的变量来传递数据,要把这些变量声明成全局变量,或者在声明变量时加上SAVE. 在声明中加入 SAVE 可以增加变量的生存周期,保留住所保存的数据,这些变量会在程序执行中永久记住上一次函数调用时所被设置的数值。
module中在 ` contains `后开始写作函数。
同一个module中的函数可以直接使用同一个module中的所声明的变量,不需要再次声明。
同一个module中的函数调用也在其中的函数时,不需要声明这个函数就可以直接使用。
想要在原来已跑好实验的基础上再积分10年,有两种方法。如果是模式跑到一半由于硬件原因(例如停电、服务器重启等原因)而中断,需要接着上一步继续积分,也可以用这两种方法。
一、修改 env_run。xml 中的 CONTINUE_RUN = TRUE
,然后 ./$casename.run
,但这种做法似乎无法修改输出数据的频率,即输出数据的频率和该实验之前一样。这是因为restart的时候,模式不会再读atm_in文件。因此如果要修改atm_in里面的内容,最好用第二种方法continue run。
二、修改 env_run。xml 中的 RUN_TYPE = branch
,然后再修改 RUN_REFCASE, RUN_REFDATE,其中若 RUN_REFCASE 等同于 casename,那么需要设置 ` BRNCH_RETAIN_CASENAME = TRUE ` , 然后 ./$casename.run
但是上述两种操作,都需要有restart file(文件名中带有“.r.”)。restart files的输出用 REST_OPTION 和 REST_N 来设置。因此如果模式运行所需时间较长,最好设置这两项,防止因断电等不可抗因素使模式运行到一半中断后需要重头积分。 Restart files allow the model to stop and then start again with bit-for-bit exact capability (i.e. the model output is exactly the same as if it had never been stopped).
用CONTINUE_RUN = TRUE
继续跑一个模式时,输出的信息:
若在继续积分的同时,需要修改计算的节点数,则需要修改 env_mach_pes.xml 中的 NTASKS等参数,可以直接从其他case中复制相应的 env_mach_pes.xml,但随后需要做如下操作,才会生效
./cesm_setup -clean
./cesm_setup
./$casename.build
./$casename.run
此外,可以通过查看 CaseStatus 文件来查看目前对该case都进行过哪些操作