- 积分
- 296
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-4-14
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 燕灵飞雪 于 2015-12-16 16:32 编辑
计算heat budget,用的资料是SODA2.2.4,时间为1960-2008年,经度为25.75°S-25.75°N,纬度为119,75°E-299.75°W。
所用公式是图片上的公式,程序如下:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/cnmap/cnmap.ncl"
begin
f1=addfile("E:/work/data/SODA2.2.4/temp.nc","r")
f2=addfile("E:/work/data/SODA2.2.4/uwnd.nc","r")
f3=addfile("E:/work/data/SODA2.2.4/vwnd.nc","r")
f4=addfile("E:/work/data/SODA2.2.4/w.nc","r")
temp=f1->temp(:,:,11:92,60:341) ;经纬度取了20°S-20°N,150°E-70°W范围。经向上共82个格点,纬向上共282个格点
uwnd=f2->u(:,{5:45},11:92,60:341)
vwnd=f3->v(:,{5:45},11:92,60:341) ;u、v的层次取5-45m,即混合层的上层
w=f4->w(:,{45},11:92,60:341) ;w的层次l取45m
t1=dim_avg_n_Wrap(temp(:,{5:45},:,:),1) ;计算5-45m上t的平均
t2=dim_avg_n_Wrap(temp(:,{45:85},:,:),1) ;计算45-85m上t的平均
u=dim_avg_n_Wrap(uwnd,1) ;计算5-45m上u的平均
v=dim_avg_n_Wrap(vwnd,1) ;计算5-45m上v的平均
t1ave=clmMonTLL(t1)
t1a=calcMonAnomTLL(t1,t1ave)
t2ave=clmMonTLL(t2)
t2a=calcMonAnomTLL(t2,t2ave)
uave=clmMonTLL(u)
ua=calcMonAnomTLL(u,uave)
vave=clmMonTLL(v)
va=calcMonAnomTLL(v,vave)
wave=clmMonTLL(w)
wa=calcMonAnomTLL(w,wave)
;-----------------------------------------------------计算差分----------------------------------------------------------
lon=t1ave(0,0,:)
lat=t1ave(0,:,0)
dTavedX = new ((/12,82,282/), typeof(t1ave), t1ave@_FillValue)
dTadX = new ((/588,82,282/), typeof(t1a), t1a@_FillValue)
dlon = 0.5*0.0174533
do j=0,81
do i=1,280
dX = 6378388.*cos(0.0174533*lat(j))*dlon
dTavedX(:,j,0)=(t1ave(:,j,1)-t1ave(:,j,0))/dX
dTavedX(:,j,i)=(t1ave(:,j,i+1)-t1ave(:,j,i-1))/(2*dX)
dTavedX(:,j,281)=(t1ave(:,j,281)-t1ave(:,j,280))/dX
dTadX(:,j,0)=(t1a(:,j,1)-t1a(:,j,0))/dX
dTadX(:,j,i)=(t1a(:,j,i+1)-t1a(:,j,i-1))/(2*dX)
dTadX(:,j,281)=(t1a(:,j,281)-t1a(:,j,280))/dX
end do
end do
dTavedY = new ((/12,82,282/), typeof(t1ave), t1ave@_FillValue)
dTadY = new ((/588,82,282/), typeof(t1a), t1a@_FillValue)
dY = 6378388.*(51.5/103*0.0174533)
do i=0,281
do j=1,80
dTavedY(:,0,i)=(t1ave(:,1,i)-t1ave(:,0,i))/dY
dTavedY(:,j,i)=(t1ave(:,j+1,i)-t1ave(:,j-1,i))/(2*dY)
dTavedY(:,81,i)=(t1ave(:,81,i)-t1ave(:,80,i))/dY
dTadY(:,0,i)=(t1a(:,1,i)-t1a(:,0,i))/dY
dTadY(:,j,i)=(t1a(:,j+1,i)-t1a(:,j-1,i))/(2*dY)
dTadY(:,81,i)=(t1a(:,81,i)-t1a(:,80,i))/dY
end do
end do
copy_VarMeta(t1ave, dTavedX)
copy_VarMeta(t1ave, dTavedY)
copy_VarMeta(t1a, dTadX)
copy_VarMeta(t1a, dTadY)
;--------------------------------------------------------------------------------------------------------------------------
;-------------------------------------------------------dT/dt------------------------------------------------------------
dt=t1a
do i=0,48
do j=1,10
k=12*i+j
dt(12*i,:,:)=t1a(12*i+1,:,:)-t1a(12*i,:,:)
dt(k,:,:)=(t1a(k+1,:,:)-t1a(k-1,:,:))/2
dt(12*i+11,:,:)=t1a(12*i+11,:,:)-t1a(12*i+10,:,:)
end do
end do
copy_VarMeta(t1a, dt)
;--------------------------------------------------------------------------------------------------------------------------
;-----------------------------------------------------线性部分----------------------------------------------------------
uatc=ua
vatc=va
ucta=ua
vcta=va
watc=wa
wcta=wa
do i=0,11
do j=0,48
k=12*j+i
uatc(k,:,:) = -ua(k,:,:)*dTavedX(i,:,:)
vatc(k,:,:) = -va(k,:,:)*dTavedY(i,:,:)
ucta(k,:,:) = -uave(i,:,:)*dTadX(k,:,:)
vcta(k,:,:) = -vave(i,:,:)*dTadY(k,:,:)
watc(k,:,:) = -wa(k,:,:)*((t1ave(i,:,:)-t2ave(i,:,:))/40)
wcta(k,:,:) = -wave(i,:,:)*((t1a(k,:,:)-t2a(k,:,:))/40)
end do
end do
copy_VarMeta(t1a, uatc)
copy_VarMeta(t1a, vatc)
copy_VarMeta(t1a, ucta)
copy_VarMeta(t1a, vcta)
copy_VarMeta(t1a, watc)
copy_VarMeta(t1a, wcta)
;------------------------------------------------------------------------------------------------------------------------
;----------------------------------------------非线性部分------------------------------------------------------------
uata=ua
vata=va
wata=wa
do i=0,587
uata(i,:,:) = -ua(i,:,:)*dTadX(i,:,:)
vata(i,:,:) = -va(i,:,:)*dTadY(i,:,:)
wata(i,:,:) = -wa(i,:,:)*((t1a(i,:,:)-t2a(i,:,:))/40)
end do
copy_VarMeta(t1a, uata)
copy_VarMeta(t1a, vata)
copy_VarMeta(t1a, wata)
;-------------------------------------------------------------------------------------------------------------------------
;-----------------------------------------w<0的垂直项部分值设成0------------------------------------------------
do i=0,587
do j=0,81
do k=0,281
if( .not. ismissing(w(i,j,k))) then ;先排除w中的缺测值
if(w(i,j,k) .lt. 0) then
wcta(i,j,k)=0
watc(i,j,k)=0
wata(i,j,k)=0
end if
end if
end do
end do
end do
;---------------------------------------------------------------------------------------------------------------------------
fout=addfile("E:/work/data/SODA2.2.4/dt.nc","c")
fout->T=dt
fout=addfile("E:/work/data/SODA2.2.4/uatc.nc","c")
fout->UATC=uatc
fout=addfile("E:/work/data/SODA2.2.4/vatc.nc","c")
fout->VATC=vatc
fout=addfile("E:/work/data/SODA2.2.4/ucta.nc","c")
fout->UCTA=ucta
fout=addfile("E:/work/data/SODA2.2.4/vcta.nc","c")
fout->VCTA=vcta
fout=addfile("E:/work/data/SODA2.2.4/watc.nc","c")
fout->WATC=watc
fout=addfile("E:/work/data/SODA2.2.4/wcta.nc","c")
fout->WCTA=wcta
fout=addfile("E:/work/data/SODA2.2.4/uata.nc","c")
fout->UATA=uata
fout=addfile("E:/work/data/SODA2.2.4/vata.nc","c")
fout->VATA=vata
fout=addfile("E:/work/data/SODA2.2.4/wata.nc","c")
fout->WATA=wata
end
|
-
heat budgetj计算公式
|