#include "../../ESMFVersionDefine.h" !----------------------------------------------------------------------- !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% !----------------------------------------------------------------------- ! subroutine post_run_nmm(wrt_int_state,mype,mpicomp,lead_write, & mygridtype,mymaptype,mynsoil,mynfhr,mynfmin) !*** HISTORY ! 28May2013 Lu: Specify iostatusD3D ! !----------------------------------------------------------------------- !*** run post on quilt !----------------------------------------------------------------------- ! use MODULE_WRITE_INTERNAL_STATE use CTLBLK_mod, only : komax,ifhr,ifmin,MODELNAME ! !----------------------------------------------------------------------- ! implicit none ! !----------------------------------------------------------------------- ! type(WRITE_INTERNAL_STATE),intent(in) :: wrt_int_state integer,intent(in) :: mype integer,intent(in) :: mpicomp integer,intent(in) :: lead_write character(1),intent(in) :: mygridtype integer,intent(in) :: mymaptype integer,intent(in) :: mynsoil integer,intent(in) :: mynfhr integer,intent(in) :: mynfmin ! !----------------------------------------------------------------------- !*** LOCAL VARIABLES !----------------------------------------------------------------------- ! integer N,NWTPG,IEOF,LCNTRL integer jts,jte integer,allocatable :: jstagrp(:),jendgrp(:) integer,save :: kpo,kth,kpv real,dimension(komax),save :: po, th, pv logical,save :: LOG_POSTALCT=.false. integer,save :: iostatusD3D=-1 ! write(0,*)'in post_run start' !----------------------------------------------------------------------- !*** set up dimensions !----------------------------------------------------------------------- ! MODELNAME='NMM' ifhr=mynfhr ifmin=mynfmin ! JTS=wrt_int_state%LOCAL_JSTART(wrt_int_state%ID_FTASK_RECV_STA(MYPE)) !<-- Starting J of this write task's subsection JTE=wrt_int_state%LOCAL_JEND (wrt_int_state%ID_FTASK_RECV_END(MYPE)) !<-- Ending J of this write task's subsection NWTPG=wrt_int_state%WRITE_TASKS_PER_GROUP write(0,*)'in post_run,jts=',jts,'jte=',jte,'nwtpg=',nwtpg, & 'log_postalct=',log_postalct,'ifhr=',ifhr,'ifmin=',mynfmin ! !----------------------------------------------------------------------- !*** set up fields ro run post !----------------------------------------------------------------------- ! IF(.not.LOG_POSTALCT) THEN ! ALLOCATE(JSTAGRP(NWTPG),JENDGRP(NWTPG)) ! DO N=0,NWTPG-1 JSTAGRP(N+1)=wrt_int_state%LOCAL_JSTART(wrt_int_state%ID_FTASK_RECV_STA(N+LEAD_WRITE)) JENDGRP(N+1)=wrt_int_state%LOCAL_JEND (wrt_int_state%ID_FTASK_RECV_END(N+LEAD_WRITE)) ENDDO write(0,*)'in post_run,jstagrp=',jstagrp,'jendgrp=',jendgrp ! !----------------------------------------------------------------------- !*** allocate post variables !----------------------------------------------------------------------- ! call post_alctvars(wrt_int_state%im,wrt_int_state%jm, & wrt_int_state%lm,MYPE,wrt_int_state%WRITE_TASKS_PER_GROUP, & mpicomp,mygridtype,mymaptype,wrt_int_state%post_gribversion, & MYNSOIL, & LEAD_WRITE,JTS,JTE,JSTAGRP,JENDGRP) write(0,*)'in post_run,aft post_alctvars' ! !----------------------------------------------------------------------- !*** read namelist for pv,th,po !----------------------------------------------------------------------- ! call read_postnmlt(kpo,kth,kpv,po,th,pv) write(0,*)'in post_run,aft nmlst po' ! !----------------------------------------------------------------------- !*** read namelist for pv,th,po !----------------------------------------------------------------------- ! LOG_POSTALCT=.true. ! ENDIF ! !----------------------------------------------------------------------- !*** fill post variables with values from forecast results !----------------------------------------------------------------------- ! call set_postvars_nmm(wrt_int_state,mpicomp,JTS,JTE) write(0,*)'af set_postvars' ! call MICROINIT ! IEOF=0 do while( IEOF .eq. 0) CALL READCNTRL(kth,IEOF) print *,'after readcntrl,IEOF=',IEOF ! if ( IEOF.eq.0) CALL PROCESS(KTH,KPV,TH(1:KTH),PV(1:KPV)) if ( IEOF.eq.0) CALL PROCESS(KTH,KPV,TH(1:KTH),PV(1:KPV),iostatusD3D) print *,'after readcntrl,IEOF=',IEOF enddo ! ! call de_allocate LCNTRL=14 rewind(LCNTRL) print *,'after readcntrl and process' end subroutine post_run_nmm ! !----------------------------------------------------------------------- !%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% !----------------------------------------------------------------------- subroutine set_postvars_nmm(wrt_int_state,mpicomp,jts,jte) ! !*** HISTORY ! 15Jan2013: Sarah Lu, EL_MYJ changed to EL_PBL to be consistent with ! nceppost upgrade ! !----------------------------------------------------------------------- !*** set up int_state !----------------------------------------------------------------------- ! use vrbls3d use vrbls2d use soil use masks use ctlblk_mod use params_mod use gridspec_mod use lookup_mod ! use ESMF_Mod use MODULE_WRITE_INTERNAL_STATE use module_constants,only : G1=>G ! !----------------------------------------------------------------------- ! implicit none ! include 'mpif.h' ! !----------------------------------------------------------------------- ! type(WRITE_INTERNAL_STATE),intent(in) :: wrt_int_state integer,intent(in) :: mpicomp integer,intent(in) :: jts,jte ! !----------------------------------------------------------------------- ! integer I,ii,J,jj,L,LL,K,N,N1,N2,NPOSN_1,NPOSN_2, LENGTH integer iim1,jm1,im1 integer NPOS_START,NPOS_END,indx_2d,nfield,ierr,iret character(ESMF_MAXSTR) :: NAME CHARACTER(3) :: model_level REAL :: FACT real degrad REAL,dimension(:,:),allocatable :: dummy,vlat,vlon,buf REAL,dimension(:,:,:),allocatable :: FI REAL,dimension(:),allocatable :: ETA1, ETA2, DXH ! !----------------------------------------------------------------------- !*** INTEGER SCALAR/1D HISTORY VARIABLES !----------------------------------------------------------------------- ! N2=0 !<-- Word counter for full string of integer scalar/1D data ! DO N=1,wrt_int_state%KOUNT_I1D(1) !<-- Loop through all scalar/1D integer data ! NPOSN_1=(N-1)*ESMF_MAXSTR+1 NPOSN_2=N*ESMF_MAXSTR NAME=wrt_int_state%NAMES_I1D_STRING(NPOSN_1:NPOSN_2) !<-- The variable's na me LENGTH=wrt_int_state%LENGTH_DATA_I1D(N) !<-- The variable's length in words ! DO N1=1,LENGTH N2=N2+1 if(trim(NAME)== 'MP_PHYSICS' .or. trim(NAME)=='MP_PHYSI' ) & imp_physics=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'SF_SFC_PHYSICS'.or. trim(NAME)== 'SF_SURFA' ) & iSF_SURFACE_PHYSICS=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'IHRST' ) & ihrst=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'NPHS' ) & NPHS=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'NRDSW' ) & TRDSW=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'NRDLW' ) & TRDLW=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'NPREC' ) & TPREC=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'NHEAT' ) & THEAT=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'NCLOD' ) & TCLOD=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'NSRFC' ) & TSRFC=wrt_int_state%ALL_DATA_I1D(N2) if(trim(NAME)== 'IDAT' .and.N1<=size(SDAT)) & SDAT(N1)=wrt_int_state%ALL_DATA_I1D(N2) !<-- Extract the individual data from the data string ENDDO ! enddo !SDAT order needs to change I=SDAT(1) SDAT(1)=SDAT(2) SDAT(2)=I print *,'imp_physics=',imp_physics,'ihrst=',ihrst,'NPHS=',NPHS, & 'TRDLW=',TRDLW,'TRDSW=',TRDSW,'TPREC=',TPREC,'THEAT=',THEAT, & 'TCLOD=',TCLOD,'TSRFC=',TSRFC,'SDAT=',SDAT,'iSF_SURFACE_PHYSICS=', & iSF_SURFACE_PHYSICS ! !----------------------------------------------------------------------- !*** REAL SCALAR/1D HISTORY VARIABLES !----------------------------------------------------------------------- ! N2=0 !<-- Word counter for full string of real scalar/1D data dt=spval dyval=spval dxval=spval cenlon=spval cenlon=spval if(.not.allocated(ETA1)) allocate(ETA1(LM+1)) if(.not.allocated(ETA2)) allocate(ETA2(LM+1)) if(.not.allocated(DXH)) allocate(DXH(JM)) ! DO N=1,wrt_int_state%KOUNT_R1D(1) !<-- Loop through all scalar/1D real data ! NPOSN_1=(N-1)*ESMF_MAXSTR+1 NPOSN_2=N*ESMF_MAXSTR NAME=wrt_int_state%NAMES_R1D_STRING(NPOSN_1:NPOSN_2) !<-- The variable's name LENGTH=wrt_int_state%LENGTH_DATA_R1D(N) !<-- The variable's length ! print *,'R1D,NAME=',NAME,'LENGTH=',LENGTH,'N=',N,wrt_int_state%KOUNT_R1D(1) ! DO N1=1,LENGTH N2=N2+1 if(trim(NAME)== 'DT' ) & DT=wrt_int_state%ALL_DATA_R1D(N2) if(trim(NAME)== 'PT' ) & PT=wrt_int_state%ALL_DATA_R1D(N2) if(trim(NAME)== 'PDTOP' ) & PDTOP=wrt_int_state%ALL_DATA_R1D(N2) if(trim(NAME)== 'DYH' ) & DY(:,:)=wrt_int_state%ALL_DATA_R1D(N2) if(trim(NAME)== 'DXH' ) & DXH(N1)=wrt_int_state%ALL_DATA_R1D(N2) if(trim(NAME)== 'DPHD' ) & dyval=wrt_int_state%ALL_DATA_R1D(N2)*gdsdegr if(trim(NAME)== 'DLMD' ) & dxval=wrt_int_state%ALL_DATA_R1D(N2)*gdsdegr if(trim(NAME)== 'TPH0D' ) & cenlat=nint(wrt_int_state%ALL_DATA_R1D(N2)*gdsdegr) if(trim(NAME)== 'TLM0D' ) & cenlon=nint(wrt_int_state%ALL_DATA_R1D(N2)*gdsdegr) if(trim(NAME)== 'SLDPTH' ) & SLDPTH(N1)=wrt_int_state%ALL_DATA_R1D(N2) if(trim(NAME)== 'SG1' ) & ETA1(N1)=wrt_int_state%ALL_DATA_R1D(N2) if(trim(NAME)== 'SG2' ) & ETA2(N1)=wrt_int_state%ALL_DATA_R1D(N2) ENDDO ! ENDDO ! !flux are averaged, so set: DTQ2=dt*NPHS TSRFC=TSRFC*dt/3600. IF(TSRFC.EQ.0)TSRFC=float(ifhr) !in case buket does not get emptied TRDLW=TRDLW*dt/3600. IF(TRDLW.EQ.0)TRDLW=float(ifhr) !in case buket does not get emptied TRDSW=TRDSW*dt/3600. IF(TRDSW.EQ.0)TRDSW=float(ifhr) !in case buket does not get emptied THEAT=THEAT*dt/3600. IF(THEAT.EQ.0)THEAT=float(ifhr) !in case buket does not get emptied TCLOD=TCLOD*dt/3600. IF(TCLOD.EQ.0)TCLOD=float(ifhr) !in case buket does not get emptied TPREC=TPREC*dt/3600. IF(TPREC.EQ.0)TPREC=float(ifhr) !in case buket does not get emptied ! !for dx print *,'in set_postvars,jsta=',jsta,'jend=',jend,'im=',im,'jm=',jm do J=jsta,jend dx(1:im,j)=dxh(j) enddo !----------------------------------------------------------------------- !*** set up module variables !----------------------------------------------------------------------- ! 3-D real var: ! tmaxmin=1. DEGRAD=90./ASIN(1.) write(0,*)'name r2d size=',len(wrt_int_state%NAMES_R2D_STRING) allocate(vlat(1:im,jsta_2l:jend_2u),vlon(1:im,jsta_2l:jend_2u)) allocate(buf(1:im,jsta_2l:jend_2u)) allocate(dummy(im,jm)) field_loop_real: DO NFIELD=1,wrt_int_state%KOUNT_R2D(1) ! NPOS_START=(NFIELD-1)*ESMF_MAXSTR+1 NPOS_END=NFIELD*ESMF_MAXSTR ! print *,'NPOS_START=',NPOS_START,'NPOS_END=',NPOS_END NAME=wrt_int_state%NAMES_R2D_STRING(NPOS_START:NPOS_END) INDX_2D=index(NAME,"_2D") ! print *,'in set_postvars,nfield=',nfield,'name=',trim(NAME), & ! wrt_int_state%WRITE_SUBSET_R(1:2,jsta:jsta+2,NFIELD), & ! maxval(wrt_int_state%WRITE_SUBSET_R(1:im,jsta:jend,NFIELD)), & ! minval(wrt_int_state%WRITE_SUBSET_R(1:im,jsta:jend,NFIELD)) if (INDX_2D.gt.0) then model_level=name(indx_2D-3:indx_2D-1) LL=(ichar(model_level(1:1))-48)*100+(ichar(model_level(2:2))-48)*10+ichar(model_level(3:3))-48 if(name(1:INDX_2d-5).eq.'CLDFRA') then do j=jsta,jend cfr(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'CW') then do j=jsta,jend cwm(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'EXCH_H') then do j=jsta,jend exch_h(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'Q') then do j=jsta,jend Q(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo ! print *,'in set_postvars Q=',maxval(Q(1:im,jsta:jend,LL)), & ! minval(Q(1:im,jsta:jend,LL)), & ! wrt_int_state%WRITE_SUBSET_R(1:5,jsta+3,NFIELD) endif if(name(1:INDX_2d-5).eq.'Q2') then do j=jsta,jend Q2(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo ! print *,'in set_postvars Q2=',maxval(Q2(1:im,jsta:jend,LL)), & ! minval(Q2(1:im,jsta:jend,LL)), & ! wrt_int_state%WRITE_SUBSET_R(1:5,jsta+3,NFIELD) endif if(name(1:INDX_2d-5).eq.'PINT') then do j=jsta,jend PINT(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo if(ll/=1) then do j=jsta,jend alpint(:,j,ll)=alog(pint(:,j,ll)) enddo elseif(ll==1) then do j=jsta,jend do i=1,im if(pint(i,j,ll)/=0.) then alpint(:,j,ll)=alog(pint(:,j,ll)) else alpint(I,J,ll)=spval endif enddo enddo endif if(ll.gt.1) then do j = jsta, jend PMID(:,j,ll-1 ) = (PINT(:,J,ll-1)+ & PINT(:,J,ll))*0.5 ! representative of what model does end do ! print *,'in set_postvars pmid=',maxval(pmid(1:im,jsta:jend,ll-1)), & ! minval(pmid(1:im,jsta:jend,ll-1)) endif ! print *,'in set_postvars,ll=',ll,'pint=',maxval(pint(1:im,jsta:jend,LL)), & ! minval(pint(1:im,jsta:jend,LL)) endif if(name(1:INDX_2d-5).eq.'RLWTT') then do j=jsta,jend RLWTT(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'RSWTT') then do j=jsta,jend RSWTT(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'T') then do j=jsta,jend T(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo ! print *,'in set_postvars T=',maxval(T(1:im,jsta:jend,LL)), & ! minval(T(1:im,jsta:jend,LL)) endif if(name(1:INDX_2d-5).eq.'TCUCN') then do j=jsta,jend TCUCN(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'TRAIN') then do j=jsta,jend TRAIN(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'U') then do j=jsta,jend UH(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) U(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo ! put u on h point for global nmm if(global)then buf(:,:)=uh(:,:,ll) call exch(buf(1,jsta_2l)) do j=jsta,jend do i=1,im im1=i-1 if(im1<1)im1=im1+im jm1=j-1 if(j==1)then ii=i+im/2 iim1=ii-1 if(iim1<1)iim1=iim1+im if (ii > im) ii = ii - im uh(i,j,ll)=(buf(i,j)+buf(im1,j)+buf(ii,j)+buf(iim1,j))/4.0 else uh(i,j,ll)=(buf(i,j)+buf(im1,j)+buf(im1,jm1)+buf(i,jm1))/4.0 end if end do end do end if ! end of wind interpolation for global NMM ! print *,'in set_postvars uh=',maxval(uh(1:im,jsta:jend,LL)), & ! minval(uh(1:im,jsta:jend,LL)), & ! wrt_int_state%WRITE_SUBSET_R(1:5,jsta+3,NFIELD) endif if(name(1:INDX_2d-5).eq.'V') then do j=jsta,jend VH(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) V(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo ! put u on h point for global nmm if(global)then buf(:,:)=vh(:,:,ll) call exch(buf(1,jsta_2l)) do j=jsta,jend do i=1,im im1=i-1 if(im1<1)im1=im1+im jm1=j-1 if(j==1)then ii=i+im/2 iim1=ii-1 if(iim1<1)iim1=iim1+im if (ii > im) ii = ii - im vh(i,j,ll)=(buf(i,j)+buf(im1,j)+buf(ii,j)+buf(iim1,j))/4.0 else vh(i,j,ll)=(buf(i,j)+buf(im1,j)+buf(im1,jm1)+buf(i,jm1))/4.0 end if end do end do end if ! end of wind interpolation for global NMM ! print *,'in set_postvars vh=',maxval(vh(1:im,jsta:jend,LL)), & ! minval(vh(1:im,jsta:jend,LL)), & ! wrt_int_state%WRITE_SUBSET_R(1:5,jsta+3,NFIELD) endif if(name(1:INDX_2d-5).eq.'W') then do j=jsta,jend WH(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo ! print *,'in set_postvars vh=',maxval(vh(1:im,jsta:jend,LL)), & ! minval(vh(1:im,jsta:jend,LL)), & ! wrt_int_state%WRITE_SUBSET_R(1:5,jsta+3,NFIELD) endif if(name(1:INDX_2d-5).eq.'XLEN_MIX') then do j=jsta,jend ! EL_MYJ(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) EL_PBL(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'F_ICE') then do j=jsta,jend F_ICE(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'F_RIMEF') then do j=jsta,jend F_RimeF(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo ! print *,'ll=',ll,'f_rimef=',maxval(f_rimef(1:im,jsta:jend,ll)), & ! minval(f_rimef(1:im,jsta:jend,ll)) endif if(name(1:INDX_2d-5).eq.'F_RAIN') then do j=jsta,jend F_RAIN(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'SH2O') then do j=jsta,jend sh2o(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'SMC') then do j=jsta,jend smc(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(name(1:INDX_2d-5).eq.'STC') then do j=jsta,jend stc(:,j,LL)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif ! else if(trim(name).eq.'GLAT') then do j=jsta,jend gdlat(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD)*DEGRAD enddo ! print *,'in ste_post,gdlat=',maxval(gdlat(1:im,jstA:jend)),minval(gdlat(1:im,jsta:jend)) endif if(trim(name).eq.'GLON') then do j=jsta,jend gdlon(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD)*DEGRAD enddo ! print *,'in ste_post,gdlon=',maxval(gdlon(1:im,jstA:jend)),minval(gdlon(1:im,jsta:jend)) endif if(trim(name).eq.'PD') then do j=jsta,jend pd(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo ! print *,'in ste_post,pd=',maxval(pd(1:im,jstA:jend)),minval(pd(1:im,jsta:jend)) endif if(trim(name).eq.'VLAT') then do j=jsta,jend vlat(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD)*DEGRAD enddo endif if(trim(name).eq.'VLON') then do j=jsta,jend vlon(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD)*DEGRAD enddo endif if(trim(name).eq.'ACFRCV') then do j=jsta,jend ACFRCV(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ACFRST') then do j=jsta,jend ACFRST(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ACPREC') then do j=jsta,jend ACPREC(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ACSNOM') then do j=jsta,jend ACSNOM(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ACSNOW') then do j=jsta,jend ACSNOW(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'AKHS_OUT') then do j=jsta,jend AKHS(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'AKMS_OUT') then do j=jsta,jend AKMS(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ALBASE') then do j=jsta,jend ALBASE(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ALBEDO') then do j=jsta,jend ALBEDO(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ALWIN') then do j=jsta,jend ALWIN(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ALWOUT') then do j=jsta,jend ALWOUT(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ALWTOA') then do j=jsta,jend ALWTOA(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ASWIN') then do j=jsta,jend ASWIN(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ASWOUT') then do j=jsta,jend ASWOUT(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'ASWTOA') then do j=jsta,jend ASWTOA(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'AVRAIN') then AVRAIN=wrt_int_state%WRITE_SUBSET_R(im/2,(jsta+jend)/2,NFIELD) endif if(trim(name).eq.'AVCNVC') then AVCNVC=wrt_int_state%WRITE_SUBSET_R(im/2,(jsta+jend)/2,NFIELD) endif if(trim(name).eq.'ARDLW') then ARDLW=wrt_int_state%WRITE_SUBSET_R(im/2,(jsta+jend)/2,NFIELD) endif if(trim(name).eq.'ARDSW') then ARDSW=wrt_int_state%WRITE_SUBSET_R(im/2,(jsta+jend)/2,NFIELD) endif if(trim(name).eq.'ASRFC') then ASRFC=wrt_int_state%WRITE_SUBSET_R(im/2,(jsta+jend)/2,NFIELD) endif if(trim(name).eq.'BGROFF') then do j=jsta,jend BGROFF(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'CFRACH') then do j=jsta,jend CFRACH(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'CFRACL') then do j=jsta,jend CFRACL(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'CFRACM') then do j=jsta,jend CFRACM(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'CLDEFI') then do j=jsta,jend CLDEFI(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'CMC') then do j=jsta,jend CMC(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo endif if(trim(name).eq.'CNVBOT') then do j=jsta,jend HBOT(:,j)=wrt_int_state%WRITE_SUBSET_R(:,j,NFIELD) enddo write(0,*) 'HBOT1=',maxval(HBOT(:,jsta:jend)),minval(HBOT(:,jsta:jend)) where(HBOT