GEOS-Chem笔记——模式下载安装+驱动数据+运行流程

看过我博客的会发现我写了很多CESM的笔记,但是说实话,平时科研我其实更多时候是GEOS-Chem user。之所以写了很多CESM笔记,其实是因为不会,学的时候刚好也开始写CSDN博客,就边学边写。然后GEOS-Chem已经用比较熟了,所以也没想过做笔记啥的。但是我发现越来越多朋友私信我各种CESM问题,我觉得我可能给大家营造了一种我是CESM达人的错觉。感觉自己有点跑偏了呢。公平起见,我觉得我有必要补充点GEOS-Chem笔记。

GEOS-Chem是研究大气化学的人常用的大气化学传输模式,在全世界范围的大气化学研究组中被广泛使用。不过我没有比较过是GEOS-Chem user多还是CESM user多,感觉自己没什么概念,我猜可能还是CESM user多一些,毕竟地球系统模式应用的研究领域比大气化学模式应用领域要广很多,自然研究群体会大一些吧。闲话不多说,下面进入正题啦。


GEOS-Chem模式简介(narrative descripition):https://geos-chem.seas.harvard.edu/narrative​​​​​​ 

这个网页非常详细地介绍了GEOS-Chem的概况,包括版本、排放、模式各个组分。有助于初学者对GEOS-Chem有一个初步的大纲理解。

实操入门可以参考GEOS-Chem Wiki 上有一个quick start guide: http://wiki.seas.harvard.edu/geos-chem/index.php/Getting_Started_with_GEOS-Chem

但是Wiki上内容太多,我记得我刚开始学的时候我问师姐学模式怎么入门?师姐就说,你去看GEOS-Chem user guide呀。然后我打开这个GEOS-Chem网站我就懵了,因为太多太多信息,我根本不知道从哪儿开始看。现在回头来看,如果有学弟学妹问我,GEOS-Chem怎么学?我可能也会下意识说,你去看GEOS-Chem user guide和wiki呀,上面不是啥都有嘛。

但是回过头来想,正是因为网站太具体,反而给初学者造成了困扰。所以今天就总结最核心的操作流程。

本文还是以GEOS-Chem 12.3.2版为例,虽然现在GEOS-Chem更新到13版了,但我目前用的还是这个版本,写起来比较顺手。


step1: GEOS-Chem 模式代码(source code)下载

包括模式源代码CodeX.Y.Z(对应版本号)+Unit Tester(UT)

一般有两种下载方式

(1)通过github命令下载

wiki指路:GEOS-Chem 12 - Geos-chem

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第1张图片

(2) 通过github网页手动下载,将源代码保存成zip然后上传到Linux环境下再解压。(个人比较推荐这种做法,如果在windows环境下使用git clone下载源代码再上传到Linux环境编译会报错,除非直接是Linux环境,用git clone才行)

源代码:https://github.com/geoschem/geos-chem

UT: https://github.com/geoschem/geos-chem-unittest

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第2张图片

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第3张图片


 step2:气象场和排放数据下载

wiki指路:Downloading GEOS-Chem data directories - Geos-chem

GEOS-Chem模式运行需要最基本的数据包括气象场和排放数据

气象场一般是GEOS-FP或者MERRA2数据,而排放数据一般使用HEMCO。

数据下载方式有以下三种:

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第4张图片

我比较推荐Compute Canada这个,比较好用:Index of / (wustl.edu)

气象场数据和HEMCO数据存在Extdata目录下,大家可以按照自己需要的分辨率和模拟日期进行下载,全都下下来就太大啦。

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第5张图片

wget下载数据-wiki指路:Downloading data from WashU - Geos-chem (harvard.edu)

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第6张图片

wget下载整个目录可能会被拦截,出现下面这个情况

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第7张图片

在wget中加上  -e robots=off应该就可以解决,举个例子:

wget -r -np -nH -N -R index.html -k -e robots=off http://geoschemdata.wustl.edu/ExtData/GEOS_2x2.5/MERRA2/2012/01/


 step3:运行流程

(1)创建运行目录

进入到UT/perl目录下,

cd /GEOS-Chem.v12.3.2/UT/perl
vi CopyRunDirs.input 

修改CopyRunDirs.input文件,这里关注两点,

1)保证该文件中的路径都正确;

2)按照自己需要选择对应气象场,分辨率,是否嵌套,化学机制,修改模拟时间,设好后将开头的#号删掉;

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第8张图片

 运行以下两个可执行文件,创建运行目录

./cleanRunDirs
./gcCopyRunDirs 

这步运行完可以看到在预设的大的运行目录rundir1下会生成对应case的运行目录merra2_2x25_standard出现

(2)进入运行目录,编译模式

cd rundirs1/merra2_2x25_standard
make realclean
make -j4 mpbuild

该步骤完成后如果成功编译会出现geos.mp文件

(3)修改相关设置文件

 wiki指路:

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第9张图片

input.geos:控制模拟起止日期,分辨率,诊断量输出

input文件这里要注意一点,对应起始日期和终止日期需要将这里的0改成3,否则会报错。中间的日期随意,如果设成3则在trac_avg*诊断文件中每天都有日平均输出,而保持0则是月平均的输出。

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第10张图片

HEMCO_Config.rc:控制排放文件开关

HEMCO_Diag.rc:控制排放诊断量

HISTORY.rc:控制各种模式输出文件的输出频率

(4)提交任务

如果是PBS作业管理系统,提交任务一般为qsub merra2_pbs (shell脚本)

slurm作业管理系统,提交任务一般用yhbatch 或者sbatch merra2_slurm (shell脚本)

merra2_pbs脚本示例:这里选定节点01,用20个核(CPU)来跑模式

#!/bin/bash
#PBS -l nodes=node01:ppn=20
# Set
ulimit -t unlimited              # cputime
ulimit -f unlimited              # filesizee
ulimit -d unlimited              # datasize
ulimit -s unlimited              # stacksize
ulimit -c unlimited              # coredumpsize
ulimit -m unlimited              # memoryuse
ulimit -v unlimited              # vmemoryuse
# ulimit -n unlimited              # descriptors
# ulimit -l unlimited              # memorylocked
# ulimit -u unlimited              # maxproc

source /opt/intel/bin/compilervars.sh intel64

KMP_STACKSIZE=500000000
export KMP_STACKSIZE

# Set OpenMP
export OMP_NUM_THREADS=20

# Running the model
cd $PBS_O_WORKDIR

# Running the model 
./geos.mp > log0

exit 0

merra2_slurm2脚本示例:

#!/bin/bash

#SBATCH -J geos_test
#SBATCH -c 12
#SBATCH -N 1
#SBATCH -p sugon
##SBATCH -e %j.o


# Set OMP num threads properly
export OMP_NUM_THREADS=12
#if [[ "x$SLURM_CPUS_PER_TASK" != x ]]; then
#  export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
#fi


# Run GEOS-Chem (timing output goes to stderr)
# NOTE: Using srun will tell SLURM that only this part 
# of the script should use multiple CPUs (bmy, 12/22/16)
srun -c $OMP_NUM_THREADS ./geos.mp >log0

更多作业提交命令可以参考之前写的这篇:

Linux笔记——运行模式之调度系统-作业管理-用户命令_砍柴姑娘Jourosy的博客-CSDN博客


step4: 模式输出数据后处理

模式输出数据通常有bpch和netCDF两种格式,如果是GEOS-Chem比较早期的版本就只有bpch的输出,而较新的版本增加了netCDF格式的输出。

(1)bpch文件有两种:第一种是trac_avg.merra2_2x25_standard.198209010000,该文件包含了input.geos中设置的对应模拟整个时间段的所有诊断量输出,因此文件较大,可以用下面代码进行文件切分。

seperate_bpch.pro (idl代码)

pro seperate_bpch
year=1982


dir='./'
file=dir+'trac_avg.merra2_2x25_standard.198209010000'

        for mon=9,9 do begin
        for id=1,30 do begin
        date=year*10000L+mon*100+id
        num=NYMD2TAU(date)
        print,num,date

outfile='./bpch/'+'ctm_merra2_CM.2x25.'+strtrim(string(date),2)+'.bpch'

 bpch_sep,file,outfile,tau0=num,tracer=2

        endfor
        endfor

stop
end

第二种bpch文件则是user自己按需要在ND49中增加的相关物种的bpch文件,

例如我这里增加了臭氧(tracer=2)每小时(frequency=3600)的输出,将其保存在ts目录下。GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第11张图片

 bpch文件可以用IDL进行处理,idl+gamap可以初步查看。

(2)新一点版本的GEOS-Chem增加了netCDF输出文件,我这里以19820901这天为例,将所有有的诊断量全部输出,包括以下文件:

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程_第12张图片

Restart:重启文件,这个文件建议把输出频率设高一点,这样模式意外中断只需要挑选最近日期的restart文件,从该日期继续模拟,减少损失;

Aerosol, AerosolMass: 气溶胶相关诊断量;

Budget: 收支诊断量,但是只有边界层柱、对流层柱和整个大气柱的,并不是每层都有;

StateMet:气象相关变量;

StateChm:化学相关变量;

此外,还包括DryDep干沉降、WetLossConv对流性降水湿清除、WetLossLS大尺度降水湿清除、ProdLoss生消速率、JValues光反应系数等

关于netCDF输出文件的介绍可以参考这篇:

http://wiki.seas.harvard.edu/geos-chem/images/b/b5/Netcdf_Diagnostics.pdf

整个流程大致就是这样啦。给GEOS-Chem一个交代,姐姐也爱你的,嘻嘻。


PS: 写着写着累了,刷了会儿朋友圈发现咱模式人拿诺贝尔物理学奖了!看来全世界对global warming的关注度确实是越来越高了。还是得继续加油啊,向榜样学习!大气人,大气魂,地球科学yyds!

快写完的时候一不小心把前面大部分删了,还撤销不了,又重写了一遍的痛谁懂我!哭唧唧~

你可能感兴趣的:(GEOS-Chem笔记,fortran)