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 |
C | Calculate and dump all diagnostics at tave periods. | |
8 |
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 |
C nYears - number of years in this dump (maybe be different from |
21 |
C tave if starting time not divisible by tave) |
22 |
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 |
DATA secYr /31536000. _d 0/ |
36 |
INTEGER i,j,mn,j_atm |
37 |
INTEGER simYr |
38 |
INTEGER dUnit |
39 |
_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 |
_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 |
|
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 |
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 |
|
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 |
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 |
|
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 |
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 |
|
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 |
CALL MDSFINDUNIT( dUnit, mythid ) |
170 |
|
171 |
WRITE(fn,'(A,I5.5)') 'attauu.', simYr |
172 |
OPEN(dUnit, FILE=fn, STATUS='unknown', |
173 |
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted') |
174 |
WRITE(dUnit,REC=1) sum_tauu_ta |
175 |
CLOSE(dUnit) |
176 |
|
177 |
WRITE(fn,'(A,I5.5)') 'attauv.', simYr |
178 |
OPEN(dUnit, FILE=fn, STATUS='unknown', |
179 |
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted') |
180 |
WRITE(dUnit,REC=1) sum_tauv_ta |
181 |
CLOSE(dUnit) |
182 |
|
183 |
WRITE(fn,'(A,I5.5)') 'atwind.', simYr |
184 |
OPEN(dUnit, FILE=fn, STATUS='unknown', |
185 |
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted') |
186 |
WRITE(dUnit,REC=1) sum_wsocean_ta |
187 |
CLOSE(dUnit) |
188 |
|
189 |
WRITE(fn,'(A,I5.5)') 'atps4ocn.', simYr |
190 |
OPEN(dUnit, FILE=fn, STATUS='unknown', |
191 |
& ACCESS='direct', RECL=8*jm0*nForcingPer, FORM='unformatted') |
192 |
WRITE(dUnit,REC=1) sum_ps4ocean_ta |
193 |
CLOSE(dUnit) |
194 |
|
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 |
|