clm_ini.f90
来自「CLM集合卡曼滤波数据同化算法」· F90 代码 · 共 493 行 · 第 1/2 页
F90
493 行
do m = 1, msub do l = 1, lpt kvec(l,m) = l wsg2g(l,m) = 0. end do end do l = 0 k = 0 do j = 1, lat do i = 1, lon if (oroxy(i,j) > 0.) then !land point l = l+1 !land index ixy(l) = i !longitude index jxy(l) = j !latitude index ktile(l) = mtile(i,j) do m = 1, ktile(l) !subgrid points k = k + 1 !subgrid index kvec(l,m) = k !subgrid index for land point klnd(k) = l !land index for subgrid point dlat(k) = latixy(i,j) !latitude in radians dlon(k) = longxy(i,j) !longitude in radians ivt(k) = surf2d(i,j,m) !land cover type isc(k) = soic2d(i,j) !soil color index sand(k) = sand2d(i,j) !percent of sand clay(k) = clay2d(i,j) !percent of clay wsg2g(l,m) = wt(i,j,m) !subgrid weights end do end if end do end do!-> do k = 1, kpt!-> wetlnd(k) = 0!-> icetyp(k) = 0!-> watertyp(k) = 0!-> if(ivt(k) .eq. 11) wetlnd(k) = 1!-> if(ivt(k) .eq. 15) icetyp(k) = 1!-> if(ivt(k) .eq. 17) watertyp(k) = 1!-> enddo! ----------------------------------------------------------------------! initialize time invariant variables, as subgrid vectors of length ! [kpt], for [clmtc_module]! !please take care the expression, for expample,! !z(2:5,1) is a 1D array with 4 elements;! !z(2:5,1:1) is a 4x1 2D array! ---------------------------------------------------------------------- call clmtci (kpt ,msl ,ivt ,isc ,sand ,clay ,& csol ,porsl ,phi0 ,bsw ,dkmg ,dksatu ,& dkdry ,albsol ,hksati ,z0m ,displa ,sqrtdi ,& effcon ,vmax25 ,slti ,hlti ,shti ,hhti ,& trda ,trdm ,trop ,gradm ,binter ,extkn ,& albvgs ,albvgl ,chil ,ref ,tran ,rootfr ,& z(1,1) ,dz(1,1),zi(0,1)) write (6,*) write (6,*) ('successful set up of clmtc module')! ----------------------------------------------------------------------! begin clm initialization! if continuation run: end of clm initialization because time-varying ! data in [clmtv_module] has been read in from atmospheric restart ! file by atmospheric model. atmospheric model also has surface temperature,! albedos, and snow from restart file.! ---------------------------------------------------------------------- dtime = dt_step if (nsrest == 0) then ! initial run iyear = mbyear jday = mbday mcsec = mbsec if(.not. greenwich)then! please pay attention when running the off-line regions cases! for off-line (stand alone or regions), here the local time ! is set as the same as the first grid point mcsec = mcsec - longxy(1,1)/(15.*pi/180.)*3600. if(mcsec < 0)then jday = jday -1 mcsec = 86400 + mcsec endif if(jday < 1)then iyear = iyear - 1 if((mod(iyear,4) == 0 .AND. mod(iyear,100) /=0) .OR. mod(iyear,400) == 0)then jday = 366 else jday = 365 endif endif endif! initialize time-varying data in [clmtv] common block ! o rdlsf = false: arbitrary initialization! o rdlsf = true : read initial data set call clmtvi (kpt ,msl ,maxsnl ,lun_ini ,& ivt ,z0m ,albsol ,albvgs ,albvgl ,chil ,ref ,tran, porsl ,& glai ,gsai ,dlon ,dlat ,rdlsf ,rdlai ,& mcsec ,jday ,xerr ,zerr ,& dz ,z ,zi ,tss ,wliq ,wice ,& rootr ,tlsun,tlsha ,ldew ,sag ,scv ,snowdp ,& etrc ,tg ,albg ,albv ,alb ,ssun ,ssha ,tranc,thermk,extkb,extkd, & cosz ,green,fveg ,fsno ,sigf ,lai ,sai ,& snl) else ! re-start run! read (unit=lun_rst,*) &! mcsec ,jday ,iyear ,xerr ,zerr ,&! dz ,z ,zi ,tss ,wliq ,wice ,&! rootr ,tlsun ,tlsha ,ldew ,sag ,scv ,snowdp,&! etrc ,tg ,albg ,albv ,alb ,ssun ,ssha ,tranc ,thermk ,extkb ,extkd ,& ! cosz ,green ,fveg ,fsno ,sigf ,lai ,sai ,snl!! write(6,*) 'balance error of last run =', xerr, zerr! xerr = 0.; zerr = 0.! write(6,*) mcsec ,jday ,iyear,snl open(888,file='compare.txt',form='formatted') read(unit=lun_rst,*) mcsec, jday, iyear write(888,*) mcsec, jday, iyear read(unit=lun_rst,*) xerr,zerr write(888,*) xerr,zerr read(unit=lun_rst,*) (( dz(m,n),m=-4,10),n=1,kpt) write(888,*) dz read(unit=lun_rst,*) (( z(m,n),m=-4,10),n=1,kpt) write(888,*) z read(unit=lun_rst,*) (( zi(m,n),m=-5,10),n=1,kpt) write(888,*) zi read(unit=lun_rst,*) ((tss(m,n),m=-4,10),n=1,kpt) write(888,*) tss read(unit=lun_rst,*) ((wliq(m,n),m=-4,10),n=1,kpt) write(888,*) wliq read(unit=lun_rst,*) ((wice(m,n),m=-4,10),n=1,kpt) write(888,*) wliq read(unit=lun_rst,*) (rootr(m),m=1,10) write(888,*) rootr read(unit=lun_rst,*) tlsun,tlsha write(888,*) tlsun,tlsha read(unit=lun_rst,*) ldew write(888,*) ldew read(unit=lun_rst,*) sag,scv,snowdp write(888,*) sag,scv,snowdp read(unit=lun_rst,*) etrc write(888,*) etrc read(unit=lun_rst,*) tg write(888,*) tg read(unit=lun_rst,*) (albg(m),m=1,4) write(888,*) albg read(unit=lun_rst,*) (albv(m),m=1,4) write(888,*) albv read(unit=lun_rst,*) ( alb(m),m=1,4) write(888,*) alb read(unit=lun_rst,*) (ssun(m),m=1,4) write(888,*) ssun read(unit=lun_rst,*) (ssha(m),m=1,4) write(888,*) ssha read(unit=lun_rst,*) thermk write(888,*) thermk read(unit=lun_rst,*) extkb,extkd write(888,*) extkb,extkd read(unit=lun_rst,*) cosz,green write(888,*) cosz,green read(unit=lun_rst,*) fveg,fsno,sigf write(888,*) fveg,fsno,sigf read(unit=lun_rst,*) lai,sai write(888,*) lai,sai read(unit=lun_rst,*) snl write(888,*) snl close(888) ! for spin-up use! iyear = 1965 ! for Valdai! iyear = 1986 ! for Cabauw! iyear = 1986 ! for Hapex case! iyear = 1983; jday=244; mcsec=14296 ! for arme case! iyear = 1992; jday=1; mcsec=0 ! for abracos case! iyear = 1987; jday=121; mcsec=0 ! for fife case! iyear = 1993; jday=152; mcsec=26659 ! for tucson case ! iyear = 1994 ! for boreas close(lun_rst) endif write (6,*) write (6,*) ('successful set up of clmtv module') print*,'successful set up of clmtv module'! ----------------------------------------------------------------------! end clm initialization and return clmtv.h to clmtv_module! ----------------------------------------------------------------------! average subgrid albedos, srf temperature, and snow for atmospheric model! initialize to zero for land only do j = 1, lat do i = 1, lon if (oroxy(i,j) > 0.) then asdirxy(i,j) = 0. asdifxy(i,j) = 0. aldirxy(i,j) = 0. aldifxy(i,j) = 0. scv2xy(i,j) = 0. tsxy(i,j) = 0. lwupxy(i,j) = 0. else asdirxy(i,j) = -999. asdifxy(i,j) = -999. aldirxy(i,j) = -999. aldifxy(i,j) = -999. scv2xy(i,j) = -999. tsxy(i,j) = -999. lwupxy(i,j) = -999. endif end do end do! [kpt] vector of subgrid points -> [lpt] vector of land points -> ! [lon] x [lat] grid do l = 1, lpt !land point index for [lon] x [lat] grid i = ixy(l) !longitude index j = jxy(l) !latitude index do m = 1, ktile(l) k = kvec(l,m) !clm subgrid vector index asdirxy(i,j) = asdirxy(i,j) + alb(1,1,k) * wsg2g(l,m) asdifxy(i,j) = asdifxy(i,j) + alb(1,2,k) * wsg2g(l,m) aldirxy(i,j) = aldirxy(i,j) + alb(2,1,k) * wsg2g(l,m) aldifxy(i,j) = aldifxy(i,j) + alb(2,2,k) * wsg2g(l,m) scv2xy(i,j) = scv2xy(i,j) + scv(k) * wsg2g(l,m) tsxy(i,j) = tsxy(i,j) + tg(k) * wsg2g(l,m) lwupxy(i,j) = lwupxy(i,j) + stefnc*(tg(k)**4) * wsg2g(l,m) enddo end do END SUBROUTINE clm_ini
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?