!------------------------------------------------------------------------- ! NASA GSFC Land Information Systems LIS 2.3 ! !------------------------------------------------------------------------- !BOP ! ! !ROUTINE: noah_singleout.F90 ! ! !DESCRIPTION: ! Write output file for a single noah variable ! ! !REVISION HISTORY: ! 14 Jun 2002 Sujay Kumar; Initial Specification ! ! !INTERFACE: subroutine noah_singleout (ld,tile,gindex, var_array, index) ! !USES: use lis_module ! LDAS non-model-specific 1-D variables use tile_module ! LDAS non-model-specific tile variables use time_manager, only : get_nstep use noah_varder, only : noahdrv use drv_output_mod, only : t2gr implicit none !ARGUMENTS: type (lisdec) :: ld !data structure for lis domain specific variables type (tiledec) :: tile(ld%d%glbnch) !tile array for the modeled domain integer :: gindex(ld%d%lnc, ld%d%lnr) !2-d array for mapping from 2d to 1d real :: var_array(ld%d%glbnch) !array of variable that is being output integer :: index !Index of the output varible in the ALMA list. !EOP !=== Local Variables ================================================== INTEGER :: T,C,R,M,I,N,length CHARACTER*80 MKFYRMO,FILENMT,FILENMG,CDIR,NAMET,NAMEG,FILENGB CHARACTER*80 MKFYRMO2 CHARACTER*1 FNAME(80),FBASE(40),FMKDIR(80) CHARACTER*1 FTIME(8),FCD(3),FRM(3),FLATS(13),FTIMEC(4) CHARACTER*1 FYRMODIR(26),FSUBFT(80) CHARACTER*1 FVARNAME(10) CHARACTER*1 FSUBFG(80),FTIMEB(10),FSUBGB(9) CHARACTER (LEN=100) :: FBINNAME CHARACTER (LEN=100) :: temp1 !=== Variables used for writing output in HDF format INTEGER,PARAMETER :: NVARSG=32,NVARST=32,KMG=1 CHARACTER*80 :: VNAME(NVARSG) CHARACTER*80 :: VNAME1(NVARSG) INTEGER :: PREC,KBEGT,KOUNTT real :: gtmp (ld%d%glbngrid) REAL :: VMEAN,VSTDEV,VMIN,VMAX DATA VNAME / "SWnet(W/m2)","LWnet(W/m2)", & "Qle(W/m2)","Qh(W/m2)","Qg(W/m2)", & "Snowf(kg/m2s)","Rainf(kg/m2s)","Evap(kg/m2s)", & "Qs(kg/m2s)","Qsb(kg/m2s)","Qsm(kg/m2s)", & "DelSoilMoist(kg/m2)","DelSWE(kg/m2)", & "AvgSurfT(K)", & "Albedo(-)","SWE(kg/m2)", & "SoilMoist1(kg/m2)","SoilMoist2(kg/m2)", & "SoilMoist3(kg/m2)","SoilMoist4(kg/m2)","SoilWet(-)", & "TVeg(kg/m2s)","ESoil(kg/m2s)","RootMoist(kg/m2)", & "Wind(m/s)","Rainf(kg/m2s)","Snowf(kg/m2s)","Tair(K)",& "Qair(kg/kg)","Psurf(Pa)","SWdown(W/m2)","LWdown(W/m2)" / DATA VNAME1/ "SWnet","LWnet", & "Qle","Qh","Qg", & "Snowf","Rainf","Evap",& "Qs","Qsb","Qsm", & "DelSM","DelSWE", & "AvgSurfT", & "Albedo","SWE", & "SoilMoist1","SoilMoist2", & "SoilMoist3","SoilMoist4","SoilWet", & "TVeg","ESoil","RootMoist", & "Wind","Rainf","Snowf","Tair",& "Qair","Psurf","SWdown","LWdown" / CHARACTER*40 FILE CHARACTER*80 NAME !BOC !--------------------------------------------------------------------------- ! Test to see if output writing interval has been reached !--------------------------------------------------------------------------- IF(MOD(LD%T%GMT, noahdrv%WRITEINTN).EQ.0)THEN noahdrv%NUMOUTNH=noahdrv%NUMOUTNH+1 !--------------------------------------------------------------------------- ! Generate directory structure and file names for NOAH output !--------------------------------------------------------------------------- length = len(trim(vname1(index))) WRITE(UNIT=temp1, FMT='(A10)') VNAME1(index) READ(UNIT=temp1,FMT='(10A1)') (FVARNAME(I), I=1,length) WRITE(UNIT=temp1,FMT='(I4,I2,I2)')LD%T%YR,LD%T%MO,LD%T%DA READ(UNIT=temp1,FMT='(8A1)') FTIME DO I=1,8 IF(FTIME(I).EQ.(' '))FTIME(I)='0' ENDDO WRITE(UNIT=temp1,FMT='(I4)')LD%T%YR READ(UNIT=temp1,FMT='(8A1)')FTIMEC DO I=1,4 IF(FTIMEC(I).EQ.(' '))FTIMEC(I)='0' ENDDO WRITE(UNIT=temp1,FMT='(A7,I3,A1)') '/LDAS.E',LD%O%EXPCODE,'.' READ(UNIT=temp1,FMT='(80A1)') (FNAME(I),I=1,11) DO I=1,11 IF(FNAME(I).EQ.(' '))FNAME(I)='0' ENDDO WRITE(UNIT=temp1,FMT='(A40)') LD%O%ODIR READ(UNIT=temp1,FMT='(40A1)') (FBASE(I),I=1,40) C=0 DO I=1,40 IF(FBASE(I).EQ.(' ').AND.C.EQ.0)C=I-1 ENDDO WRITE(UNIT=temp1,FMT='(A4,I3,A6,I4,A1,I4,I2,I2)')'/EXP', & LD%O%EXPCODE,'/NOAH/', & LD%T%YR,'/',LD%T%YR,LD%T%MO,LD%T%DA READ(UNIT=temp1,FMT='(80A1)') (FYRMODIR(I),I=1,26) DO I=1,26 IF(FYRMODIR(I).EQ.(' '))FYRMODIR(I)='0' ENDDO WRITE(UNIT=temp1,FMT='(A9)')'mkdir -p ' READ(UNIT=temp1,FMT='(80A1)')(FMKDIR(I),I=1,9) WRITE(UNIT=temp1,FMT='(80A1)')(FMKDIR(I),I=1,9),(FBASE(I),I=1,C), & (FYRMODIR(I),I=1,26) READ(UNIT=temp1,FMT='(A80)')MKFYRMO !--------------------------------------------------------------------------- ! Make the directories for the NOAH output data files !--------------------------------------------------------------------------- CALL SYSTEM(MKFYRMO) !--------------------------------------------------------------------------- ! Generate file name for BINARY output !--------------------------------------------------------------------------- IF(LD%O%WOUT.EQ.1) THEN WRITE(UNIT=FBINNAME, FMT='(I4,I2,I2,I2)') LD%T%YR,LD%T%MO, & LD%T%DA,LD%T%HR READ(UNIT=FBINNAME,FMT='(10A1)') FTIMEB DO I=1,10 IF(FTIMEB(I).EQ.(' '))FTIMEB(I)='0' ENDDO WRITE(UNIT=FBINNAME,FMT='(A9)') '.NOAHgbin' READ(UNIT=FBINNAME,FMT='(80A1)') (FSUBGB(I),I=1,9) WRITE(UNIT=FBINNAME,FMT='(80A1)')(FBASE(I),I=1,C), & (FYRMODIR(I),I=1,26), & (FNAME(I),I=1,11),(FTIMEB(I),I=1,10), & (FVARNAME(I), I=1,length),(FSUBGB(I),I=1,9) READ(UNIT=FBINNAME,FMT='(A80)')FILENGB !--------------------------------------------------------------------------- ! Open statistical output file !--------------------------------------------------------------------------- IF(noahdrv%NOAHopen.EQ.0)THEN FILE='NOAHstats.dat' CALL OPENFILE(NAME,LD%O%ODIR,LD%O%EXPCODE,FILE) IF(LD%O%STARTCODE.EQ.1)THEN OPEN(65,FILE=NAME,FORM='FORMATTED',STATUS='UNKNOWN', & POSITION='APPEND') ELSE OPEN(65,FILE=NAME,FORM='FORMATTED',STATUS='REPLACE') ENDIF noahdrv%NOAHopen=1 ENDIF WRITE(65,996)' Statistical Summary of NOAH Output for: ', & LD%T%MO,'/',LD%T%DA,'/',LD%T%YR,LD%T%HR,':',LD%T%MN,':',LD%T%SS 996 FORMAT(A47,I2,A1,I2,A1,I4,1X,I2,A1,I2,A1,I2) WRITE(65,*) WRITE(65,997) 997 FORMAT(T27,'Mean',T41,'StDev',T56,'Min',T70,'Max') ENDIF !--------------------------------------------------------------------------- ! Write output in HDF and binary (if WBIN=1) format !--------------------------------------------------------------------------- IF(LD%O%WOUT.EQ.1) then OPEN(58,file=FILENGB,FORM='UNFORMATTED') endif if(ld%o%wout.eq.1) then call t2gr(var_array,gtmp,ld%d%glbngrid, & ld%d%glbnch,tile); write(58) gtmp call stats(var_array,ld%d%udef,ld%d%glbnch, vmean, & vstdev, vmin, vmax); write(65,999) vname(index),vmean, vstdev, vmin, vmax endif 998 FORMAT(1X,A18,4E14.3) 999 FORMAT(1X,A18,4F14.3) endif !EOC end subroutine noah_singleout