mozbc边界场制作
背景
CAM-Chem主要用于模拟全球对流层和平流层的大气组分,CAM-Chem中的化学主要基于MOZART化学机制族,CESM2对应的是CAM6-chem版本。在区域模式(如 WRF-Chem)中,边界条件的准确性对模拟结果至关重要,而 CAM-Chem 数据常被用作区域模式的边界场输入。更原始的边界场采用MOZART数据,目前已经停止运营了。 MOZART网址 ## 1.数据版本介绍 ### 1.1 CESM2.1作为边界 介绍网址 直接获取网址 一般情况下,裁剪空间和拼接时间的操作官方会直接操作,并邮箱传给处理好的数据,此处不多赘述,本文主要是为了解决网站崩掉的情况。
官方网站偶尔会崩的备用Archive - 可以尝试直接这个网站找到对应单日时间的文件。 - 也可以采用python进行下载 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44import requests
from requests.exceptions import RequestException
from tqdm import tqdm
filelist = [
'https://data-osdf.rda.ucar.edu/ncar/rda/d313008/hist/2019/FCnudged_f09.mam.mar27.2000_2021.001.cam.h2.2019-01-02-21600.nc',
'https://data-osdf.rda.ucar.edu/ncar/rda/d313008/hist/2019/FCnudged_f09.mam.mar27.2000_2021.001.cam.h2.2019-01-03-21600.nc',
'https://data-osdf.rda.ucar.edu/ncar/rda/d313008/hist/2019/FCnudged_f09.mam.mar27.2000_2021.001.cam.h2.2019-01-04-21600.nc',
'https://data-osdf.rda.ucar.edu/ncar/rda/d313008/hist/2019/FCnudged_f09.mam.mar27.2000_2021.001.cam.h2.2019-01-05-21600.nc',
'https://data-osdf.rda.ucar.edu/ncar/rda/d313008/hist/2019/FCnudged_f09.mam.mar27.2000_2021.001.cam.h2.2019-01-06-21600.nc',
'https://data-osdf.rda.ucar.edu/ncar/rda/d313008/hist/2019/FCnudged_f09.mam.mar27.2000_2021.001.cam.h2.2019-01-07-21600.nc'
]
# 代理设置
proxies = {
'http': 'http://127.0.0.1:7890',
'https': 'http://127.0.0.1:7890'
}
for file_url in filelist:
try:
response = requests.get(file_url, proxies=proxies, stream=True)
response.raise_for_status() # 检查请求是否成功
filename = file_url.split('/')[-1] # 从 URL 中提取文件名
total_size = int(response.headers.get('content-length', 0)) # 获取文件总大小
# 使用 tqdm 显示进度条
with open(filename, 'wb') as file, tqdm(
desc=filename,
total=total_size,
unit='B',
unit_scale=True,
unit_divisor=1024,
miniters=1
) as bar:
for data in response.iter_content(chunk_size=1024):
bar.update(len(data)) # 更新进度条
file.write(data) # 写入文件
print(f"下载成功: {filename}")
except RequestException as e:
print(f"下载失败: {file_url} - {e}")
2.全球数据处理的方式
- 整体逻辑:1.所有单日文件进行经纬度裁剪 2.区域裁剪后的文件进行合并 3.初始时间不对应的删去
- 方法:NCO ### 2.1 经纬度裁剪
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 定义文件列表
FILES=(
"fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.branch02.cam.h1.2018-12-31-21600.nc"
"fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.branch02.cam.h1.2019-01-01-21600.nc"
"fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.branch02.cam.h1.2019-01-02-21600.nc"
"fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.branch02.cam.h1.2019-01-03-21600.nc"
"fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.branch02.cam.h1.2019-01-04-21600.nc"
"fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.branch02.cam.h1.2019-01-05-21600.nc"
"fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.branch02.cam.h1.2019-01-06-21600.nc"
"fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.branch02.cam.h1.2019-01-07-21600.nc"
)
# 定义裁剪的经度范围
LON_MIN=45.0
LON_MAX=160.0
# 循环处理每个文件
for FILE in "${FILES[@]}"; do
# 生成裁剪后的文件名
CROPPED_FILE="cropped_${FILE}"
# 输出当前处理的文件信息
echo "Processing $FILE for longitude range..."
# 执行裁剪操作
ncks -d lon,$LON_MIN,$LON_MAX "$FILE" -o "$CROPPED_FILE"
# 检查裁剪是否成功
if [ $? -eq 0 ]; then
echo "成功裁剪 $FILE -> $CROPPED_FILE"
else
echo "裁剪 $FILE 失败,退出脚本"
exit 1
fi
done
echo "所有文件裁剪完成。"
2.2 时间筛选
ncks -d time,3, camchem-201901010107.nc demo.nc 根据自己的需求修改,我这里是将2018年12月31日的6,12,18去掉,保留2019年1月1日0时刻的数据,mozbc的开始时间必须和wrfinput对应,否则会报错。
2.3 文件融合
ncrcat --ovr cropped的所有文件名字
