最近在制作CMAQ-MASK文件,使用了python制作但是没有办法识别,在论坛里寻找一番得知可以通过ioapi的m3mask程序制作,故写下此文记录。
一、数据准备
脚本需要mcip输出的2D网格文件(本脚本选用GRIDCRO2D文件),对应的网格区域划分csv文件,具体格式如下图所示:
二、bash脚本
#!/bin/bash
export COLROW=Y
export LLFILE=GRIDCRO2D_D01.nc ##mcip输出网格文件
awk -F, '! /#N/ {print $1,$2,$3,$5}' mask.csv > temp.csv ##将mask.csv中没有划分区域的网格删除,提取第三列数值为1的行到temp.csv
for NAME in $(awk '!a[$4]++{print $4}' temp.csv) ##根据第五列读取区域名称列表
do
awk "/$NAME/"'{print $1,$2,$3}' temp.csv > $NAME.csv ##将不同区域的名称分别提取到不同的csv中
mv $NAME.csv outputcsv/
export MASKDATA=outputcsv/$NAME.csv
export MASKFILE=output/$NAME.nc
echo yes|./m3mask ##使用m3mask生成对应的nc文件
done
export LIST=$(awk '!a[$4]++{print $4}' temp.csv)
NAME=($LIST)
export INFILE1=output/${NAME[0]}.nc ##定义输入文件,有多少个区域就设置多少个
export INFILE2=output/${NAME[1]}.nc
export INFILE3=output/${NAME[2]}.nc
export INFILE4=output/${NAME[3]}.nc
export INFILE5=output/${NAME[4]}.nc
export INFILE6=output/${NAME[5]}.nc
export INFILE7=output/${NAME[6]}.nc
export INFILE8=output/${NAME[7]}.nc
export INFILE9=output/${NAME[8]}.nc
export INFILE10=output/${NAME[9]}.nc
export INFILE11=output/${NAME[10]}.nc
export INFILE12=output/${NAME[11]}.nc
export INFILE13=output/${NAME[12]}.nc
export INFILE14=output/${NAME[13]}.nc
export INFILE15=output/${NAME[14]}.nc
export INFILE16=output/${NAME[15]}.nc
export INFILE17=output/${NAME[16]}.nc
echo -e "Y\n\nN\n1\n"${NAME[0]}"\n0\n\nN\n1\n"${NAME[1]}"\n0\n\nN\n1\n"${NAME[2]}"\n0\n\nN\n1\n"${NAME[3]}"\n0\n\nN\n1\n"${NAME[4]}"\n0\n\nN\n1\n"${NAME[5]}"\n0\n\nN\n1\n"${NAME[6]}"\n0\n\nN\n1\n"${NAME[7]}"\n0\n\nN\n1\n"${NAME[8]}"\n0\n\nN\n1\n"${NAME[9]}"\n0\n\nN\n1\n"${NAME[10]}"\n0\n\nN\n1\n"${NAME[11]}"\n0\n\nN\n1\n"${NAME[12]}"\n0\n\nN\n1\n"${NAME[13]}"\n0\n\nN\n1\n"${NAME[14]}"\n0\n\nN\n1\n"${NAME[15]}"\n0\n\nN\n1\n"${NAME[16]}"\n0\nNONE\n0\n0\n0\n0\nmask.nc"|./m3merge
##设置m3merge运行指令,\n代表enter,开始运行为“Y\n”一组为“\nN\n1\n"${NAME[i]}"\n0\n”,结束指令为“NONE\n0\n0\n0\n0\nmask.nc”,其中“mask.nc”为输出文件名称。
##在编写过程中按照 “Y\n” + 区域个数个“\nN\n1\n"${NAME[i]}"\n0\n” + “NONE\n0\n0\n0\n0\nmask.nc” 即可
##例如三个区域就可以写为 “Y\n\nN\n1\n"${NAME[0]}"\n0\n\nN\n1\n"${NAME[1]}"\n0\n\nN\n1\n"${NAME[2]}"\n0\nNONE\n0\n0\n0\n0\nmask.nc”
运行完毕之后即可得到名为mask.nc的区域划分文件,可使用ncview进行查看。
三、运行结果
以河北地区为例,结果如下图所示,标记的区域为红色,数值为1,其余区域为蓝色,数值为0。CMAQ运行所需的OCEAN文件也可以用此方法制作。