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