LBM的运行初始场更改,强迫场更改,输出结果可视化记录

本文详细描述了如何从NCEP数据文件中提取并转化为LBM所需的grd格式,包括气温、湿度等变量的处理,以及如何生成初始场和forcing文件,最后将模拟结果进行输出和转换的过程。
摘要由CSDN通过智能技术生成

写在前面的话:

        LBM的安装见其他up主,这里不多加赘述。

1.准备初始场

1.1首先把ncl的初始文件转化为符合LBM需求的.grd文件

因为我们想做的分辨率是t42l20的,也就是(lat,lon)=(64,128)

begin
z_read   =  addfile("/home/group/data/NCEP/hgt.mon.mean.nc", "r")
z   =  z_read->hgt(:(1986-1948)*12+11,:,::-1,:)
z_clm   =  clmMonTLLL(z)

rh_read   =  addfile("/home/group/data/NCEP/rhum.mon.mean.nc", "r")
rh   =  rh_read->rhum(:(1986-1948)*12+11,:,::-1,:)
rh_clm   =  clmMonTLLL(rh)

q_read   =  addfile("/home/group/data/NCEP/shum.mon.mean.nc", "r")
q   =  q_read->shum(:(1986-1948)*12+11,:,::-1,:)
q_clm   =  clmMonTLLL(q)
q_clm   =  q_clm/1000.
printVarSummary(q_clm)

t_read   =  addfile("/home/group/data/NCEP/air.mon.mean.nc", "r")
t   =  t_read->air(:(1986-1948)*12+11,:,::-1,:)
t   =  t+273.15
t_clm   =  clmMonTLLL(t)
printVarSummary(t_clm)

u_read   =  addfile("/home/group/data/NCEP/uwnd.mon.mean.nc", "r")
u   =  u_read->uwnd(:(1986-1948)*12+11,:,::-1,:)
u_clm   =  clmMonTLLL(u)

v_read   =  addfile("/home/group/data/NCEP/vwnd.mon.mean.nc", "r")
v   =  v_read->vwnd(:(1986-1948)*12+11,:,::-1,:)
v_clm   =  clmMonTLLL(v)

omega_read   =  addfile("/home/group/data/NCEP/omega.mon.mean.nc", "r")
omega   =  omega_read->omega(:(1986-1948)*12+11,:,::-1,:)
omega_clm   =  clmMonTLLL(omega)



lon   =  z_clm&lon
lat   =  z_clm&lat


LON   =  fspan(0, 357.1875, 128)
LAT   =  (/-87.8638, -85.0965, -82.3129, -79.5256, -76.7369, -73.9475, -71.1577,-68.3678, -65.5776, \
          -62.7873, -59.9970, -57.2066, -54.4162, -51.6257,-48.8352, -46.0447, -43.2542, -40.4636, \
          -37.6731, -34.8825, -32.0919,-29.3014, -26.5108, -23.7202, -20.9296, -18.1390, -15.3484, \
          -12.5578, -9.76715, -6.97653, -4.18592, -1.39531, 1.39531, 4.18592, 6.97653,9.76715, 12.5578, \
          15.3484, 18.1390, 20.9296, 23.7202, 26.5108,\
                29.3014, 32.0919, 34.8825, 37.6731, 40.4636, 43.2542, 46.0447,\
                48.8352, 51.6257, 54.4162, 57.2066, 59.9970, 62.7873, 65.5776,\
                68.3678, 71.1577, 73.9475, 76.7369, 79.5256, 82.3129, 85.0965,\
                87.8638/)


z_t42  = linint2_Wrap(lon, lat, z_clm, True, LON, LAT, 0) 
rh_t42 = linint2_Wrap(lon, lat, rh_clm, True, LON, LAT, 0) 
q_t42  = linint2_Wrap(lon, lat, q_clm, True, LON, LAT, 0) 
t_t42  = linint2_Wrap(lon, lat, t_clm, True, LON, LAT, 0) 
u_t42  = linint2_Wrap(lon, lat, u_clm, True, LON, LAT, 0) 
v_t42  = linint2_Wrap(lon, lat, v_clm, True, LON, LAT, 0) 
omega_t42 = linint2_Wrap(lon, lat, omega_clm, True, LON, LAT, 0) 
printVarSummary(omega_t42)

; z_t42_2  =  z_t42(LON|:,LAT|:,level|:,month|:)
; rh_t42_2 =  rh_t42(LON|:,LAT|:,level|:,month|:)
; q_t42_2  =  q_t42(LON|:,LAT|:,level|:,month|:)
; t_t42_2  =  t_t42(LON|:,LAT|:,level|:,month|:)
; u_t42_2  =  u_t42(LON|:,LAT|:,level|:,month|:)
; v_t42_2  =  v_t42(LON|:,LAT|:,level|:,month|:)
; omega_t42_2  =  omega_t42(LON|:,LAT|:,level|:,month|:)


write_file_name   =  "/home/group/xdwang/data/NCEP/NCEP1.clim.t42120.grd"

nan  =  -9.96921e+36;omega_t42@_FillValue

    setfileoption("bin","WriteByteOrder","BigEndian")
do  nt=0,11
  do jj=0,16
  fbinrecwrite(write_file_name, -1, z_t42(nt,jj,:,:))
  end do

  do jj=0,7
  fbinrecwrite(write_file_name, -1, rh_t42(nt,jj,:,:))
  end do

  do jj=0,7
  fbinrecwrite(write_file_name, -1, q_t42(nt,jj,:,:))
  end do

  do jj=0,16
  fbinrecwrite(write_file_name, -1, t_t42(nt,jj,:,:))
  end do

  do jj=0,16
  fbinrecwrite(write_file_name, -1, u_t42(nt,jj,:,:))
  end do

  do jj=0,16
  fbinrecwrite(write_file_name, -1, v_t42(nt,jj,:,:))
  end do

  do jj=0,11
  fbinrecwrite(write_file_name, -1, omega_t42(nt,jj,:,:))
  end do
end do
print("DONE")

end

然后把文件放在$LNHOME/bs/ncep 中

1.2生成初始场

$LNHOME/solver/util中的SETPAR文件修改

 &nmbs  cbs0='/home/group/Audery/LBM/ln_solver/bs/gt3/ncepwin.48-86.t42l20',
        cbs='/home/group/Audery/LBM/ln_solver/bs/grads/ncepwin.48-86.t42l20.sy.grd'
 &end

#这部分是输出的初始场资料

 &nmncp cncep='/home/group/Audery/LBM/ln_solver/bs/ncep/NCEP1.clim.t42120.grd',
        
 cncep2='/home/group/Audery/LBM/ln_solver/bs/ncep/NCEP1.pres.clim.t42120.grd',
        calt='/home/group/Audery/LBM/ln_solver/bs/gt3/grz.t42',
        kmo=11 navg=6 ozm=f, osw=f, ousez=t
 &end

#这部分是我们刚用.nc转化出来的初始场资料

calt也选中与我们空间分辨率一致的grz.t42文件即可 

kmo是初始月份,navg是延续几个月份,osw是否做纬向对称,ousez是否转化为sigmal坐标系。

保存后,在服务器中输入

cd $LNHOME/solver/util
./ncepsbs

这样就在gs和grads中生成了想要的初始资料ncepwin.48-86.t42l20.sy.grd

2.生成Forcing

cd $LNHOME/solver/util 中有SETPAR文件的下面部分是forcing部分

 &nmfin cfm='/home/group/Audery/LBM/ln_solver/data/Forcing/frc.t42l20.classic.mat',
        cfg='/home/group/Audery/LBM/ln_solver/data/Forcing/frc.t42l20.classic.grd'
        fact=1.0,1.0,1.0,1.0,1.0
 &end

#生成的强迫文件

&nmvar ovor=f, odiv=f, otmp=t, ops=f, osph=f
#(涡度强迫关闭,散度强迫关闭,温度强迫打开,地表气压强迫关闭,湿度强迫关闭)
 &end

 &nmhpr khpr=1,
        hamp=-1.,
        xdil=15.,
        ydil=10.,
        xcnt=120.,
        ycnt=35.
 &end
#nmhpr部分是强迫的水平形状:khpr=1/2代表椭圆/水平均匀的强迫,hamp是振幅(单位是-1/day)冷源,
#xdil是纬向范围(就是多少个格点衰减到0),ydil是径向范围,
#xcnt是强迫的中心经度,ycnt是强迫的中心纬度

 &nmvpr kvpr=2,
        vamp=8,
        vdil=20.,
        vcnt=0.4
 &end
#nmvpr是强迫的垂直廓线:kvpr是垂直廓线的函数
#1.是正弦函数,2是gamma函数,3是上下均匀的
#vamp是垂直廓线的振幅,vdil是膨胀系数(仅在垂直廓线函数设置为gamma函数的时候才生效),
#vcnt是垂直方向上强迫最大值所在的层次。

我这里是模仿一个东亚冬季风的位置,在欧亚大陆做一个冷源,保存后

cd $LNHOME/solver/util
./mkfrcng

这样就在data/forcing中出现了强迫文件

3.开始生成模拟结果

cd $LNHOME/model/sh/tintgr
csh linear-run.test.csh 

这样在 ln_solver/data/Output中生成了结果,大概5分钟跑完。

4.把输出的变量集合

4.1把模拟结果输出

当对在ln_solver/data/Output中的输出资料转化为grd文件:

cd $LNHOME/solver/util
./gt2gr

这时会在ln_solver/data/Output中出现48-86win.clim.t42l20.grd,即输出文件的集合。

然后用cdo把.grd文件转化成.nc文件

cd $LNHOME/data/Output
cdo -f nc import_binary 48-86win.clim.t42l20.ctl 48-86win.clim.t42l20.nc


4.2把forcing结果输出可视化

cd $LNHOME/data/Forcing
cdo -f nc import_binary frc.t42l20.classic.ctl frc.t42l20.classic.nc

frc.t42l20.classic.ctl代码如下

* sample forcing pattern
DSET ^frc.t42l20.classic.grd
* BYTESWAPPED
OPTIONS SEQUENTIAL YREV
TITLE dumy
UNDEF -999.
OPTIONS big_endian
XDEF 128 LINEAR 0. 2.8125
YDEF  64 LEVELS 
 -87.8638 -85.0965 -82.3129 -79.5256 -76.7369 -73.9475 -71.1577
 -68.3678 -65.5776 -62.7873 -59.9970 -57.2066 -54.4162 -51.6257
 -48.8352 -46.0447 -43.2542 -40.4636 -37.6731 -34.8825 -32.0919
 -29.3014 -26.5108 -23.7202 -20.9296 -18.1390 -15.3484 -12.5578
 -9.76715 -6.97653 -4.18592 -1.39531 1.39531 4.18592 6.97653
  9.76715 12.5578 15.3484 18.1390 20.9296 23.7202 26.5108
  29.3014 32.0919 34.8825 37.6731 40.4636 43.2542 46.0447
  48.8352 51.6257 54.4162 57.2066 59.9970 62.7873 65.5776
  68.3678 71.1577 73.9475 76.7369 79.5256 82.3129 85.0965
  87.8638
ZDEF 20  LEVELS 1000 950 900 850 700 600 500 400 300 250 
200 150 100  70  50 30  20  10   7   5
TDEF 1 LINEAR 15jan0000 1mo
VARS 4 
v      20 99 vor.   forcing [s**-2]
d      20 99 div.   forcing [s**-2]
t      20 99 temp.  forcing [K s**-1]
p      1  99 sfc.Ln(Ps) forcing
ENDVARS

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值