| 1 |
jscott |
1.1 |
#include "ctrparam.h" |
| 2 |
|
|
#include "ATM2D_OPTIONS.h" |
| 3 |
|
|
|
| 4 |
|
|
C !INTERFACE: |
| 5 |
|
|
SUBROUTINE TAVE_END_DIAGS( nYears, myTime, myIter, myThid ) |
| 6 |
|
|
C *==========================================================* |
| 7 |
jscott |
1.3 |
C | Calculate and dump all diagnostics at tave periods. | |
| 8 |
jscott |
1.1 |
C *==========================================================* |
| 9 |
|
|
IMPLICIT NONE |
| 10 |
|
|
|
| 11 |
|
|
C === Global Atmosphere Variables === |
| 12 |
|
|
#include "ATMSIZE.h" |
| 13 |
|
|
#include "SIZE.h" |
| 14 |
|
|
#include "EEPARAMS.h" |
| 15 |
|
|
#include "PARAMS.h" |
| 16 |
|
|
#include "ATM2D_VARS.h" |
| 17 |
|
|
|
| 18 |
|
|
C !INPUT/OUTPUT PARAMETERS: |
| 19 |
|
|
C === Routine arguments === |
| 20 |
jscott |
1.3 |
C nYears - number of years in this dump (maybe be different from |
| 21 |
|
|
C tave if starting time not divisible by tave) |
| 22 |
jscott |
1.1 |
C myTime - current simulation time (ocean model time) |
| 23 |
|
|
C myIter - iteration number (ocean model) |
| 24 |
|
|
C myThid - Thread no. that called this routine. |
| 25 |
|
|
INTEGER nYears |
| 26 |
|
|
_RL myTime |
| 27 |
|
|
INTEGER myIter |
| 28 |
|
|
INTEGER myThid |
| 29 |
|
|
|
| 30 |
|
|
C LOCAL VARIABLES: |
| 31 |
|
|
CHARACTER*(MAX_LEN_MBUF) suff, fn |
| 32 |
|
|
INTEGER ndmonth(12) |
| 33 |
|
|
DATA ndmonth/31,28,31,30,31,30,31,31,30,31,30,31/ |
| 34 |
|
|
_RL secYr |
| 35 |
jscott |
1.2 |
DATA secYr /31536000. _d 0/ |
| 36 |
jscott |
1.1 |
INTEGER i,j,mn,j_atm |
| 37 |
|
|
INTEGER simYr |
| 38 |
jscott |
1.2 |
INTEGER dUnit |
| 39 |
jscott |
1.1 |
_RS norm_factor |
| 40 |
|
|
_RL qnet_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 41 |
|
|
_RL evap_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 42 |
|
|
_RL precip_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 43 |
|
|
_RL runoff_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 44 |
|
|
_RL qrel_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 45 |
|
|
_RL frel_ann(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 46 |
|
|
_RL qnet_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 47 |
|
|
_RL evap_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 48 |
|
|
_RL precip_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 49 |
|
|
_RL runoff_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 50 |
|
|
_RL qrel_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 51 |
|
|
_RL frel_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 52 |
jscott |
1.2 |
_RL iceMask_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 53 |
|
|
_RL iceHeight_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 54 |
|
|
_RL iceTime_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 55 |
|
|
_RL oceMxLT_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 56 |
|
|
_RL oceMxLS_mon(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
| 57 |
jscott |
1.1 |
|
| 58 |
|
|
|
| 59 |
|
|
DO j=1,sNy |
| 60 |
|
|
DO i=1,sNx |
| 61 |
|
|
|
| 62 |
|
|
qnet_ann(i,j) = 0. _d 0 |
| 63 |
|
|
evap_ann(i,j) = 0. _d 0 |
| 64 |
|
|
precip_ann(i,j) = 0. _d 0 |
| 65 |
|
|
runoff_ann(i,j) = 0. _d 0 |
| 66 |
|
|
qrel_ann(i,j) = 0. _d 0 |
| 67 |
|
|
frel_ann(i,j) = 0. _d 0 |
| 68 |
|
|
|
| 69 |
|
|
ENDDO |
| 70 |
|
|
ENDDO |
| 71 |
|
|
|
| 72 |
|
|
DO mn=1,nForcingPer |
| 73 |
|
|
|
| 74 |
|
|
norm_factor=nYears*ndmonth(mn)*86400.0 |
| 75 |
|
|
DO j=1,sNy |
| 76 |
|
|
DO i=1,sNx |
| 77 |
|
|
|
| 78 |
|
|
qnet_mon(i,j)= qnet_atm_ta(i,j,mn)/norm_factor |
| 79 |
|
|
evap_mon(i,j)= evap_atm_ta(i,j,mn)/norm_factor |
| 80 |
|
|
precip_mon(i,j)= precip_atm_ta(i,j,mn)/norm_factor |
| 81 |
|
|
runoff_mon(i,j)= runoff_atm_ta(i,j,mn)/norm_factor |
| 82 |
|
|
qrel_mon(i,j)= sum_qrel_ta(i,j,mn)/norm_factor |
| 83 |
|
|
frel_mon(i,j)= sum_frel_ta(i,j,mn)/norm_factor |
| 84 |
jscott |
1.2 |
iceMask_mon(i,j)= sum_iceMask_ta(i,j,mn)/norm_factor |
| 85 |
|
|
iceHeight_mon(i,j)= sum_iceHeight_ta(i,j,mn)/norm_factor |
| 86 |
|
|
iceTime_mon(i,j)= sum_iceTime_ta(i,j,mn)/norm_factor |
| 87 |
|
|
oceMxLT_mon(i,j)= sum_oceMxLT_ta(i,j,mn)/norm_factor |
| 88 |
|
|
oceMxLS_mon(i,j)= sum_oceMxLS_ta(i,j,mn)/norm_factor |
| 89 |
jscott |
1.1 |
|
| 90 |
|
|
qnet_ann(i,j) = qnet_ann(i,j) + |
| 91 |
|
|
& qnet_mon(i,j)*ndmonth(mn)/365.0 |
| 92 |
|
|
evap_ann(i,j) = evap_ann(i,j) + |
| 93 |
|
|
& evap_mon(i,j)*ndmonth(mn)/365.0 |
| 94 |
|
|
precip_ann(i,j) = precip_ann(i,j) + |
| 95 |
|
|
& precip_mon(i,j)*ndmonth(mn)/365.0 |
| 96 |
|
|
runoff_ann(i,j) = runoff_ann(i,j) + |
| 97 |
|
|
& runoff_mon(i,j)*ndmonth(mn)/365.0 |
| 98 |
|
|
qrel_ann(i,j) = qrel_ann(i,j) + |
| 99 |
|
|
& qrel_mon(i,j)*ndmonth(mn)/365.0 |
| 100 |
|
|
frel_ann(i,j) = frel_ann(i,j) + |
| 101 |
|
|
& frel_mon(i,j)*ndmonth(mn)/365.0 |
| 102 |
|
|
|
| 103 |
|
|
qnet_atm_ta(i,j,mn)= 0. _d 0 |
| 104 |
|
|
evap_atm_ta(i,j,mn)= 0. _d 0 |
| 105 |
|
|
precip_atm_ta(i,j,mn)= 0. _d 0 |
| 106 |
|
|
runoff_atm_ta(i,j,mn)= 0. _d 0 |
| 107 |
|
|
sum_qrel_ta(i,j,mn)= 0. _d 0 |
| 108 |
|
|
sum_frel_ta(i,j,mn)= 0. _d 0 |
| 109 |
jscott |
1.2 |
sum_iceMask_ta(i,j,mn)= 0. _d 0 |
| 110 |
|
|
sum_iceHeight_ta(i,j,mn)= 0. _d 0 |
| 111 |
|
|
sum_iceTime_ta(i,j,mn)= 0. _d 0 |
| 112 |
|
|
sum_oceMxLT_ta(i,j,mn)= 0. _d 0 |
| 113 |
|
|
sum_oceMxLS_ta(i,j,mn)= 0. _d 0 |
| 114 |
jscott |
1.1 |
|
| 115 |
|
|
ENDDO |
| 116 |
|
|
ENDDO |
| 117 |
|
|
|
| 118 |
|
|
DO j_atm=1,jm0 |
| 119 |
|
|
sum_tauu_ta(j_atm,mn) = sum_tauu_ta(j_atm,mn) / norm_factor |
| 120 |
|
|
sum_tauv_ta(j_atm,mn) = sum_tauv_ta(j_atm,mn) / norm_factor |
| 121 |
|
|
sum_wsocean_ta(j_atm,mn) = sum_wsocean_ta(j_atm,mn) / |
| 122 |
|
|
& norm_factor |
| 123 |
|
|
sum_ps4ocean_ta(j_atm,mn) = sum_ps4ocean_ta(j_atm,mn) / |
| 124 |
|
|
& norm_factor |
| 125 |
|
|
ENDDO |
| 126 |
|
|
|
| 127 |
|
|
WRITE(suff,'(I2.2)') mn |
| 128 |
|
|
CALL WRITE_FLD_XY_RL('amQnetAtmtave.', suff, |
| 129 |
|
|
& qnet_mon, myIter, myThid) |
| 130 |
|
|
CALL WRITE_FLD_XY_RL('amEvapAtmtave.', suff, |
| 131 |
|
|
& evap_mon, myIter, myThid) |
| 132 |
|
|
CALL WRITE_FLD_XY_RL('amPrecipAtmtave.', suff, |
| 133 |
|
|
& precip_mon, myIter, myThid) |
| 134 |
|
|
CALL WRITE_FLD_XY_RL('amRunoffAtmtave.', suff, |
| 135 |
|
|
& runoff_mon, myIter, myThid) |
| 136 |
|
|
CALL WRITE_FLD_XY_RL('amQrelfluxtave.', suff, |
| 137 |
|
|
& qrel_mon, myIter, myThid) |
| 138 |
|
|
CALL WRITE_FLD_XY_RL('amFrelfluxtave.', suff, |
| 139 |
|
|
& frel_mon, myIter, myThid) |
| 140 |
jscott |
1.2 |
CALL WRITE_FLD_XY_RL('amIceMasktave.', suff, |
| 141 |
|
|
& iceMask_mon, myIter, myThid) |
| 142 |
|
|
CALL WRITE_FLD_XY_RL('amIceHeighttave.', suff, |
| 143 |
|
|
& iceHeight_mon, myIter, myThid) |
| 144 |
|
|
CALL WRITE_FLD_XY_RL('amIceTimetave.', suff, |
| 145 |
|
|
& iceTime_mon, myIter, myThid) |
| 146 |
|
|
CALL WRITE_FLD_XY_RL('amOceMxLTtave.', suff, |
| 147 |
|
|
& oceMxLT_mon, myIter, myThid) |
| 148 |
|
|
CALL WRITE_FLD_XY_RL('amOceMxLStave.', suff, |
| 149 |
|
|
& oceMxLS_mon, myIter, myThid) |
| 150 |
jscott |
1.1 |
|
| 151 |
|
|
ENDDO |
| 152 |
|
|
|
| 153 |
|
|
WRITE(suff,'(I10.10)') myIter |
| 154 |
|
|
CALL WRITE_FLD_XY_RL('QnetAtmtave.', suff, |
| 155 |
|
|
& qnet_ann, myIter, myThid) |
| 156 |
|
|
CALL WRITE_FLD_XY_RL('EvapAtmtave.', suff, |
| 157 |
|
|
& evap_ann, myIter, myThid) |
| 158 |
|
|
CALL WRITE_FLD_XY_RL('PrecipAtmtave.', suff, |
| 159 |
|
|
& precip_ann, myIter, myThid) |
| 160 |
|
|
CALL WRITE_FLD_XY_RL('RunoffAtmtave.', suff, |
| 161 |
|
|
& runoff_ann, myIter, myThid) |
| 162 |
|
|
CALL WRITE_FLD_XY_RL('Qrelfluxtave.', suff, |
| 163 |
|
|
& qrel_ann, myIter, myThid) |
| 164 |
|
|
CALL WRITE_FLD_XY_RL('Frelfluxtave.', suff, |
| 165 |
|
|
& frel_ann, myIter, myThid) |
| 166 |
|
|
|
| 167 |
|
|
|
| 168 |
|
|
simYr = int(myIter*deltaTClock/secYr) |
| 169 |
jscott |
1.2 |
CALL MDSFINDUNIT( dUnit, mythid ) |
| 170 |
|
|
|
| 171 |
jscott |
1.1 |
WRITE(fn,'(A,I5.5') 'attauu.', simYr |
| 172 |
jscott |
1.2 |
OPEN(dUnit, FILE=fn, STATUS='unknown', |
| 173 |
jscott |
1.1 |
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted') |
| 174 |
jscott |
1.2 |
WRITE(dUnit,REC=1) sum_tauu_ta |
| 175 |
|
|
CLOSE(dUnit) |
| 176 |
jscott |
1.1 |
|
| 177 |
|
|
WRITE(fn,'(A,I5.5') 'attauv.', simYr |
| 178 |
jscott |
1.2 |
OPEN(dUnit, FILE=fn, STATUS='unknown', |
| 179 |
jscott |
1.1 |
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted') |
| 180 |
jscott |
1.2 |
WRITE(dUnit,REC=1) sum_tauv_ta |
| 181 |
|
|
CLOSE(dUnit) |
| 182 |
jscott |
1.1 |
|
| 183 |
|
|
WRITE(fn,'(A,I5.5') 'atwind.', simYr |
| 184 |
jscott |
1.2 |
OPEN(dUnit, FILE=fn, STATUS='unknown', |
| 185 |
jscott |
1.1 |
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted') |
| 186 |
jscott |
1.2 |
WRITE(dUnit,REC=1) sum_wsocean_ta |
| 187 |
|
|
CLOSE(dUnit) |
| 188 |
jscott |
1.1 |
|
| 189 |
|
|
WRITE(fn,'(A,I5.5') 'atps4ocn.', simYr |
| 190 |
jscott |
1.2 |
OPEN(dUnit, FILE=fn, STATUS='unknown', |
| 191 |
jscott |
1.1 |
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted') |
| 192 |
jscott |
1.2 |
WRITE(dUnit,REC=1) sum_ps4ocean_ta |
| 193 |
|
|
CLOSE(dUnit) |
| 194 |
jscott |
1.1 |
|
| 195 |
|
|
DO mn=1,nForcingPer |
| 196 |
|
|
DO j_atm=1,jm0 |
| 197 |
|
|
sum_tauu_ta(j_atm,mn) = 0. _d 0 |
| 198 |
|
|
sum_tauv_ta(j_atm,mn) = 0. _d 0 |
| 199 |
|
|
sum_wsocean_ta(j_atm,mn) = 0. _d 0 |
| 200 |
|
|
sum_ps4ocean_ta(j_atm,mn) = 0. _d 0 |
| 201 |
|
|
ENDDO |
| 202 |
|
|
ENDDO |
| 203 |
|
|
|
| 204 |
|
|
RETURN |
| 205 |
|
|
END |
| 206 |
|
|
|