C $Header: /u/gcmpack/MITgcm/pkg/atm2d/tave_end_diags.F,v 1.3 2007/10/08 23:48:28 jmc Exp $
C $Name: $
#include "ctrparam.h"
#include "ATM2D_OPTIONS.h"
C !INTERFACE:
SUBROUTINE TAVE_END_DIAGS( nYears, myTime, myIter, myThid )
C *==========================================================*
C | Calculate and dump all diagnostics at tave periods. |
C *==========================================================*
IMPLICIT NONE
C === Global Atmosphere Variables ===
#include "ATMSIZE.h"
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "ATM2D_VARS.h"
C !INPUT/OUTPUT PARAMETERS:
C === Routine arguments ===
C nYears - number of years in this dump (maybe be different from
C tave if starting time not divisible by tave)
C myTime - current simulation time (ocean model time)
C myIter - iteration number (ocean model)
C myThid - Thread no. that called this routine.
INTEGER nYears
_RL myTime
INTEGER myIter
INTEGER myThid
C LOCAL VARIABLES:
CHARACTER*(MAX_LEN_MBUF) suff, fn
INTEGER ndmonth(12)
DATA ndmonth/31,28,31,30,31,30,31,31,30,31,30,31/
_RL secYr
DATA secYr /31536000. _d 0/
INTEGER i,j,mn,j_atm
INTEGER simYr
INTEGER dUnit
_RS norm_factor
_RL qnet_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL evap_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL precip_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL runoff_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL qrel_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL frel_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL qnet_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL evap_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL precip_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL runoff_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL qrel_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL frel_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL iceMask_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL iceHeight_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL iceTime_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL oceMxLT_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
_RL oceMxLS_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
DO j=1,sNy
DO i=1,sNx
qnet_ann(i,j) = 0. _d 0
evap_ann(i,j) = 0. _d 0
precip_ann(i,j) = 0. _d 0
runoff_ann(i,j) = 0. _d 0
qrel_ann(i,j) = 0. _d 0
frel_ann(i,j) = 0. _d 0
ENDDO
ENDDO
DO mn=1,nForcingPer
norm_factor=nYears*ndmonth(mn)*86400.0
DO j=1,sNy
DO i=1,sNx
qnet_mon(i,j)= qnet_atm_ta(i,j,mn)/norm_factor
evap_mon(i,j)= evap_atm_ta(i,j,mn)/norm_factor
precip_mon(i,j)= precip_atm_ta(i,j,mn)/norm_factor
runoff_mon(i,j)= runoff_atm_ta(i,j,mn)/norm_factor
qrel_mon(i,j)= sum_qrel_ta(i,j,mn)/norm_factor
frel_mon(i,j)= sum_frel_ta(i,j,mn)/norm_factor
iceMask_mon(i,j)= sum_iceMask_ta(i,j,mn)/norm_factor
iceHeight_mon(i,j)= sum_iceHeight_ta(i,j,mn)/norm_factor
iceTime_mon(i,j)= sum_iceTime_ta(i,j,mn)/norm_factor
oceMxLT_mon(i,j)= sum_oceMxLT_ta(i,j,mn)/norm_factor
oceMxLS_mon(i,j)= sum_oceMxLS_ta(i,j,mn)/norm_factor
qnet_ann(i,j) = qnet_ann(i,j) +
& qnet_mon(i,j)*ndmonth(mn)/365.0
evap_ann(i,j) = evap_ann(i,j) +
& evap_mon(i,j)*ndmonth(mn)/365.0
precip_ann(i,j) = precip_ann(i,j) +
& precip_mon(i,j)*ndmonth(mn)/365.0
runoff_ann(i,j) = runoff_ann(i,j) +
& runoff_mon(i,j)*ndmonth(mn)/365.0
qrel_ann(i,j) = qrel_ann(i,j) +
& qrel_mon(i,j)*ndmonth(mn)/365.0
frel_ann(i,j) = frel_ann(i,j) +
& frel_mon(i,j)*ndmonth(mn)/365.0
qnet_atm_ta(i,j,mn)= 0. _d 0
evap_atm_ta(i,j,mn)= 0. _d 0
precip_atm_ta(i,j,mn)= 0. _d 0
runoff_atm_ta(i,j,mn)= 0. _d 0
sum_qrel_ta(i,j,mn)= 0. _d 0
sum_frel_ta(i,j,mn)= 0. _d 0
sum_iceMask_ta(i,j,mn)= 0. _d 0
sum_iceHeight_ta(i,j,mn)= 0. _d 0
sum_iceTime_ta(i,j,mn)= 0. _d 0
sum_oceMxLT_ta(i,j,mn)= 0. _d 0
sum_oceMxLS_ta(i,j,mn)= 0. _d 0
ENDDO
ENDDO
DO j_atm=1,jm0
sum_tauu_ta(j_atm,mn) = sum_tauu_ta(j_atm,mn) / norm_factor
sum_tauv_ta(j_atm,mn) = sum_tauv_ta(j_atm,mn) / norm_factor
sum_wsocean_ta(j_atm,mn) = sum_wsocean_ta(j_atm,mn) /
& norm_factor
sum_ps4ocean_ta(j_atm,mn) = sum_ps4ocean_ta(j_atm,mn) /
& norm_factor
ENDDO
WRITE(suff,'(I2.2)') mn
CALL WRITE_FLD_XY_RL('amQnetAtmtave.', suff,
& qnet_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amEvapAtmtave.', suff,
& evap_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amPrecipAtmtave.', suff,
& precip_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amRunoffAtmtave.', suff,
& runoff_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amQrelfluxtave.', suff,
& qrel_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amFrelfluxtave.', suff,
& frel_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amIceMasktave.', suff,
& iceMask_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amIceHeighttave.', suff,
& iceHeight_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amIceTimetave.', suff,
& iceTime_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amOceMxLTtave.', suff,
& oceMxLT_mon, myIter, myThid)
CALL WRITE_FLD_XY_RL('amOceMxLStave.', suff,
& oceMxLS_mon, myIter, myThid)
ENDDO
WRITE(suff,'(I10.10)') myIter
CALL WRITE_FLD_XY_RL('QnetAtmtave.', suff,
& qnet_ann, myIter, myThid)
CALL WRITE_FLD_XY_RL('EvapAtmtave.', suff,
& evap_ann, myIter, myThid)
CALL WRITE_FLD_XY_RL('PrecipAtmtave.', suff,
& precip_ann, myIter, myThid)
CALL WRITE_FLD_XY_RL('RunoffAtmtave.', suff,
& runoff_ann, myIter, myThid)
CALL WRITE_FLD_XY_RL('Qrelfluxtave.', suff,
& qrel_ann, myIter, myThid)
CALL WRITE_FLD_XY_RL('Frelfluxtave.', suff,
& frel_ann, myIter, myThid)
simYr = int(myIter*deltaTClock/secYr)
CALL MDSFINDUNIT( dUnit, mythid )
WRITE(fn,'(A,I5.5)') 'attauu.', simYr
OPEN(dUnit, FILE=fn, STATUS='unknown',
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted')
WRITE(dUnit,REC=1) sum_tauu_ta
CLOSE(dUnit)
WRITE(fn,'(A,I5.5)') 'attauv.', simYr
OPEN(dUnit, FILE=fn, STATUS='unknown',
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted')
WRITE(dUnit,REC=1) sum_tauv_ta
CLOSE(dUnit)
WRITE(fn,'(A,I5.5)') 'atwind.', simYr
OPEN(dUnit, FILE=fn, STATUS='unknown',
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted')
WRITE(dUnit,REC=1) sum_wsocean_ta
CLOSE(dUnit)
WRITE(fn,'(A,I5.5)') 'atps4ocn.', simYr
OPEN(dUnit, FILE=fn, STATUS='unknown',
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted')
WRITE(dUnit,REC=1) sum_ps4ocean_ta
CLOSE(dUnit)
DO mn=1,nForcingPer
DO j_atm=1,jm0
sum_tauu_ta(j_atm,mn) = 0. _d 0
sum_tauv_ta(j_atm,mn) = 0. _d 0
sum_wsocean_ta(j_atm,mn) = 0. _d 0
sum_ps4ocean_ta(j_atm,mn) = 0. _d 0
ENDDO
ENDDO
RETURN
END