Back to home page

MITgcm

 
 

    


File indexing completed on 2018-03-02 18:37:33 UTC

view on githubraw file Latest commit add29e06 on 2018-01-31 20:35:05 UTC
09a6f3668a Jeff*0001 #include "ctrparam.h"
                0002 #include "ATM2D_OPTIONS.h"
                0003 
                0004 C     !INTERFACE:
                0005       SUBROUTINE TAVE_END_DIAGS(  nYears, myTime, myIter, myThid )
                0006 C     *==========================================================*
                0007 C     | Calculate and dump all diagnostics at tave periods.      |
                0008 C     *==========================================================*
                0009         IMPLICIT NONE
                0010 
                0011 C     === Global Atmosphere Variables ===
                0012 #include "ATMSIZE.h"
                0013 #include "SIZE.h"
                0014 #include "EEPARAMS.h"
                0015 #include "PARAMS.h"
                0016 #include "ATM2D_VARS.h"
                0017 
                0018 C     !INPUT/OUTPUT PARAMETERS:
                0019 C     === Routine arguments ===
                0020 C     nYears - number of years in this dump (maybe be different from
                0021 C              tave if starting time not divisible by tave)
                0022 C     myTime - current simulation time (ocean model time)
                0023 C     myIter - iteration number (ocean model)
                0024 C     myThid - Thread no. that called this routine.
                0025       INTEGER nYears
                0026       _RL     myTime
                0027       INTEGER myIter
                0028       INTEGER myThid
                0029 
                0030 C     LOCAL VARIABLES:
                0031       CHARACTER*(MAX_LEN_MBUF) suff, fn
                0032       INTEGER ndmonth(12)
                0033       DATA ndmonth/31,28,31,30,31,30,31,31,30,31,30,31/
                0034       _RL secYr
9274434acc Jean*0035       DATA secYr /31536000. _d 0/
09a6f3668a Jeff*0036       INTEGER i,j,mn,j_atm
                0037       INTEGER simYr
                0038       INTEGER dUnit
                0039       _RS norm_factor
                0040       _RL qnet_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0041       _RL evap_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0042       _RL precip_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0043       _RL runoff_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0044       _RL qrel_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0045       _RL frel_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0046       _RL qnet_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0047       _RL evap_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0048       _RL precip_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0049       _RL runoff_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0050       _RL qrel_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0051       _RL frel_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0052       _RL iceMask_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0053       _RL iceHeight_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0054       _RL iceTime_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0055       _RL oceMxLT_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0056       _RL oceMxLS_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0057 
                0058 
                0059       DO j=1,sNy
                0060         DO i=1,sNx
                0061 
                0062           qnet_ann(i,j) = 0. _d 0
                0063           evap_ann(i,j) = 0. _d 0
                0064           precip_ann(i,j) = 0. _d 0
                0065           runoff_ann(i,j) = 0. _d 0
                0066           qrel_ann(i,j) = 0. _d 0
                0067           frel_ann(i,j) = 0. _d 0
                0068 
                0069         ENDDO
                0070       ENDDO
                0071 
                0072       DO mn=1,nForcingPer
                0073 
                0074         norm_factor=nYears*ndmonth(mn)*86400.0
                0075         DO j=1,sNy
                0076           DO i=1,sNx
                0077 
                0078             qnet_mon(i,j)= qnet_atm_ta(i,j,mn)/norm_factor
                0079             evap_mon(i,j)= evap_atm_ta(i,j,mn)/norm_factor
                0080             precip_mon(i,j)= precip_atm_ta(i,j,mn)/norm_factor
                0081             runoff_mon(i,j)=  runoff_atm_ta(i,j,mn)/norm_factor
                0082             qrel_mon(i,j)= sum_qrel_ta(i,j,mn)/norm_factor
                0083             frel_mon(i,j)= sum_frel_ta(i,j,mn)/norm_factor
                0084             iceMask_mon(i,j)= sum_iceMask_ta(i,j,mn)/norm_factor
                0085             iceHeight_mon(i,j)= sum_iceHeight_ta(i,j,mn)/norm_factor
                0086             iceTime_mon(i,j)= sum_iceTime_ta(i,j,mn)/norm_factor
                0087             oceMxLT_mon(i,j)= sum_oceMxLT_ta(i,j,mn)/norm_factor
                0088             oceMxLS_mon(i,j)= sum_oceMxLS_ta(i,j,mn)/norm_factor
                0089 
9274434acc Jean*0090             qnet_ann(i,j) = qnet_ann(i,j) +
09a6f3668a Jeff*0091      &                      qnet_mon(i,j)*ndmonth(mn)/365.0
9274434acc Jean*0092             evap_ann(i,j) = evap_ann(i,j) +
09a6f3668a Jeff*0093      &                      evap_mon(i,j)*ndmonth(mn)/365.0
9274434acc Jean*0094             precip_ann(i,j) = precip_ann(i,j) +
09a6f3668a Jeff*0095      &                        precip_mon(i,j)*ndmonth(mn)/365.0
9274434acc Jean*0096             runoff_ann(i,j) = runoff_ann(i,j) +
09a6f3668a Jeff*0097      &                        runoff_mon(i,j)*ndmonth(mn)/365.0
9274434acc Jean*0098             qrel_ann(i,j) = qrel_ann(i,j) +
09a6f3668a Jeff*0099      &                      qrel_mon(i,j)*ndmonth(mn)/365.0
9274434acc Jean*0100             frel_ann(i,j) = frel_ann(i,j) +
09a6f3668a Jeff*0101      &                      frel_mon(i,j)*ndmonth(mn)/365.0
                0102 
                0103             qnet_atm_ta(i,j,mn)= 0. _d 0
                0104             evap_atm_ta(i,j,mn)= 0. _d 0
                0105             precip_atm_ta(i,j,mn)= 0. _d 0
9274434acc Jean*0106             runoff_atm_ta(i,j,mn)= 0. _d 0
09a6f3668a Jeff*0107             sum_qrel_ta(i,j,mn)= 0. _d 0
                0108             sum_frel_ta(i,j,mn)= 0. _d 0
                0109             sum_iceMask_ta(i,j,mn)= 0. _d 0
                0110             sum_iceHeight_ta(i,j,mn)= 0. _d 0
                0111             sum_iceTime_ta(i,j,mn)= 0. _d 0
                0112             sum_oceMxLT_ta(i,j,mn)= 0. _d 0
                0113             sum_oceMxLS_ta(i,j,mn)= 0. _d 0
                0114 
                0115           ENDDO
                0116         ENDDO
                0117 
                0118         DO j_atm=1,jm0
                0119           sum_tauu_ta(j_atm,mn) = sum_tauu_ta(j_atm,mn) / norm_factor
                0120           sum_tauv_ta(j_atm,mn) = sum_tauv_ta(j_atm,mn) / norm_factor
                0121           sum_wsocean_ta(j_atm,mn) = sum_wsocean_ta(j_atm,mn) /
                0122      &                               norm_factor
9274434acc Jean*0123           sum_ps4ocean_ta(j_atm,mn) = sum_ps4ocean_ta(j_atm,mn) /
09a6f3668a Jeff*0124      &                                norm_factor
                0125         ENDDO
                0126 
                0127         WRITE(suff,'(I2.2)') mn
9274434acc Jean*0128         CALL WRITE_FLD_XY_RL('amQnetAtmtave.', suff,
09a6f3668a Jeff*0129      &                       qnet_mon, myIter, myThid)
9274434acc Jean*0130         CALL WRITE_FLD_XY_RL('amEvapAtmtave.', suff,
09a6f3668a Jeff*0131      &                       evap_mon, myIter, myThid)
9274434acc Jean*0132         CALL WRITE_FLD_XY_RL('amPrecipAtmtave.', suff,
09a6f3668a Jeff*0133      &                       precip_mon, myIter, myThid)
9274434acc Jean*0134         CALL WRITE_FLD_XY_RL('amRunoffAtmtave.', suff,
09a6f3668a Jeff*0135      &                       runoff_mon, myIter, myThid)
9274434acc Jean*0136         CALL WRITE_FLD_XY_RL('amQrelfluxtave.', suff,
09a6f3668a Jeff*0137      &                       qrel_mon, myIter, myThid)
9274434acc Jean*0138         CALL WRITE_FLD_XY_RL('amFrelfluxtave.', suff,
09a6f3668a Jeff*0139      &                       frel_mon, myIter, myThid)
9274434acc Jean*0140         CALL WRITE_FLD_XY_RL('amIceMasktave.', suff,
09a6f3668a Jeff*0141      &                       iceMask_mon, myIter, myThid)
9274434acc Jean*0142         CALL WRITE_FLD_XY_RL('amIceHeighttave.', suff,
09a6f3668a Jeff*0143      &                       iceHeight_mon, myIter, myThid)
9274434acc Jean*0144         CALL WRITE_FLD_XY_RL('amIceTimetave.', suff,
09a6f3668a Jeff*0145      &                       iceTime_mon, myIter, myThid)
9274434acc Jean*0146         CALL WRITE_FLD_XY_RL('amOceMxLTtave.', suff,
09a6f3668a Jeff*0147      &                       oceMxLT_mon, myIter, myThid)
9274434acc Jean*0148         CALL WRITE_FLD_XY_RL('amOceMxLStave.', suff,
09a6f3668a Jeff*0149      &                       oceMxLS_mon, myIter, myThid)
                0150 
                0151       ENDDO
                0152 
                0153       WRITE(suff,'(I10.10)') myIter
                0154       CALL WRITE_FLD_XY_RL('QnetAtmtave.',  suff,
                0155      &                     qnet_ann,  myIter, myThid)
                0156       CALL WRITE_FLD_XY_RL('EvapAtmtave.',  suff,
                0157      &                     evap_ann,  myIter, myThid)
                0158       CALL WRITE_FLD_XY_RL('PrecipAtmtave.',  suff,
                0159      &                     precip_ann,  myIter, myThid)
                0160       CALL WRITE_FLD_XY_RL('RunoffAtmtave.',  suff,
                0161      &                     runoff_ann,  myIter, myThid)
                0162       CALL WRITE_FLD_XY_RL('Qrelfluxtave.',  suff,
                0163      &                     qrel_ann,  myIter, myThid)
                0164       CALL WRITE_FLD_XY_RL('Frelfluxtave.',  suff,
                0165      &                     frel_ann,  myIter, myThid)
                0166 
                0167 
                0168       simYr = int(myIter*deltaTClock/secYr)
                0169       CALL MDSFINDUNIT( dUnit, mythid )
9274434acc Jean*0170 
09384db9d5 Jeff*0171       WRITE(fn,'(A,I5.5)') 'attauu.', simYr
09a6f3668a Jeff*0172       OPEN(dUnit, FILE=fn, STATUS='unknown',
                0173      &     ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted')
                0174       WRITE(dUnit,REC=1) sum_tauu_ta
                0175       CLOSE(dUnit)
                0176 
09384db9d5 Jeff*0177       WRITE(fn,'(A,I5.5)') 'attauv.', simYr
09a6f3668a Jeff*0178       OPEN(dUnit, FILE=fn, STATUS='unknown',
                0179      &     ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted')
                0180       WRITE(dUnit,REC=1) sum_tauv_ta
                0181       CLOSE(dUnit)
                0182 
09384db9d5 Jeff*0183       WRITE(fn,'(A,I5.5)') 'atwind.', simYr
09a6f3668a Jeff*0184       OPEN(dUnit, FILE=fn, STATUS='unknown',
                0185      &     ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted')
                0186       WRITE(dUnit,REC=1) sum_wsocean_ta
                0187       CLOSE(dUnit)
                0188 
09384db9d5 Jeff*0189       WRITE(fn,'(A,I5.5)') 'atps4ocn.', simYr
09a6f3668a Jeff*0190       OPEN(dUnit, FILE=fn, STATUS='unknown',
                0191      &     ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted')
                0192       WRITE(dUnit,REC=1) sum_ps4ocean_ta
                0193       CLOSE(dUnit)
                0194 
                0195       DO mn=1,nForcingPer
                0196         DO j_atm=1,jm0
                0197           sum_tauu_ta(j_atm,mn) = 0. _d 0
                0198           sum_tauv_ta(j_atm,mn) = 0. _d 0
                0199           sum_wsocean_ta(j_atm,mn) = 0. _d 0
                0200           sum_ps4ocean_ta(j_atm,mn) = 0. _d 0
                0201         ENDDO
                0202       ENDDO
                0203 
                0204       RETURN
                0205       END
                0206