BUCKETS.F
References to this file elsewhere.
1 !-----------------------------------------------------------------------
2 !
3 !NCEP_MESO:MODEL_LAYER: ACCUMULATION BUCKETS
4 !
5 !-----------------------------------------------------------------------
6 SUBROUTINE BUCKETS(NTSD,NPREC,NSRFC,NRDSW,NRDLW &
7 & ,RESTART,TSTART &
8 & ,NCLOD,NHEAT,NPHS,TSPH &
9 & ,ACPREC,CUPREC,ACSNOW,ACSNOM,SSROFF,BGROFF &
10 & ,SFCEVP,POTEVP,SFCSHX,SFCLHX,SUBSHX,SNOPCX &
11 & ,SFCUVX,POTFLX &
12 & ,ARDSW,ASWIN,ASWOUT,ASWTOA &
13 & ,ARDLW,ALWIN,ALWOUT,ALWTOA &
14 & ,ACFRST,NCFRST,ACFRCV,NCFRCV &
15 & ,AVCNVC,AVRAIN,TCUCN,TRAIN &
16 & ,ASRFC &
17 & ,T,TLMAX,TLMIN &
18 & ,IDS,IDE,JDS,JDE,KDS,KDE &
19 & ,IMS,IME,JMS,JME,KMS,KME &
20 & ,ITS,ITE,JTS,JTE,KTS,KTE)
21 !-----------------------------------------------------------------------
22 !$$$ SUBPROGRAM DOCUMENTATION BLOCK
23 ! . . .
24 ! SUBPROGRAM: BUCKETS EMPTY ACCUMULATION BUCKETS WHEN NEEDED
25 ! PRGRMMR: BLACK ORG: W/NP22 DATE: 04-08-18
26 !
27 ! ABSTRACT:
28 ! VARIOUS ACCUMULATING QUANTITIES NEED TO BE RESET TO ZERO AT
29 ! SPECIFIED INTERVALS.
30 !
31 ! USAGE: CALL BUCKETS FROM SOLVE_NMM
32 ! INPUT ARGUMENT LIST:
33 ! NTSD - CURRENT TIMESTEP
34 ! NPREC - NUMBER OF TIMESTEPS BETWEEN EMPTYING BUCKETS FOR PRECIP
35 ! NHEAT - NUMBER OF TIMESTEPS BETWEEN EMPTYING BUCKETS FOR
36 ! LATENT HEATING
37 ! NCNVC - NUMBER OF TIMESTEPS BETWEEN CALLS TO CONVECTION
38 ! TSPH - NUMBER OF DYNAMICS TIMESTEPS PER HOUR
39 ! ACPREC - ACCUMULATED TOTAL PRECIPITATION (M)
40 ! CUPREC - ACCUMULATED CONVECTIVE PRECIPITATION (M)
41 ! ACSNOW - ACCUMULATED SNOWFALL (M)
42 ! ACSNOM - ACCUMULATED SNOWMELT (M)
43 ! SSROFF - ACCUMULATED SURFACE RUNOFF
44 ! BGROFF - ACCUMULATED BELOW GROUND RUNOFF
45 ! SFCEVP - ACCUMULATED SURFACE EVAPORATION
46 ! POTEVP - ACCUMULATED POTENTIAL EVAPORATION
47 ! T - TEMPERATURE
48 ! TLMAX - MAX TEMPERATURE EACH HOUR IN LOWEST LAYER
49 ! TLMIN - MIN TEMPERATURE EACH HOUR IN LOWEST LAYER
50 !
51 ! OUTPUT ARGUMENT LIST: THE ACCUMULATED QUANTITIES
52 !
53 ! OUTPUT FILES: NONE
54 !
55 ! SUBPROGRAMS CALLED: NONE
56 !
57 ! UNIQUE: NONE
58 !
59 ! LIBRARY: NONE
60 !
61 ! ATTRIBUTES:
62 ! LANGUAGE: FORTRAN 90
63 ! MACHINE : IBM SP
64 !$$$
65 !-----------------------------------------------------------------------
66 !
67 IMPLICIT NONE
68 !
69 !-----------------------------------------------------------------------
70 !*** ARGUMENTS
71 !-----------------------------------------------------------------------
72 !
73 INTEGER,INTENT(IN) :: NCLOD,NHEAT,NPHS,NPREC,NRDLW,NRDSW &
74 ,NSRFC,NTSD &
75 ,IDS,IDE,JDS,JDE,KDS,KDE &
76 ,IMS,IME,JMS,JME,KMS,KME &
77 ,ITS,ITE,JTS,JTE,KTS,KTE
78 !
79 REAL,INTENT(IN) :: TSPH,TSTART
80 REAL,INTENT(OUT) :: ARDLW,ARDSW,ASRFC,AVCNVC,AVRAIN
81 !
82 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: ACPREC,ACSNOM &
83 & ,ACSNOW,ALWIN &
84 & ,ACFRST,ACFRCV &
85 & ,ALWOUT,ALWTOA &
86 & ,ASWIN,ASWOUT &
87 & ,ASWTOA,BGROFF &
88 & ,CUPREC,POTEVP &
89 & ,POTFLX,SFCEVP &
90 & ,SFCLHX,SFCSHX &
91 & ,SFCUVX,SNOPCX &
92 & ,SSROFF,SUBSHX
93 !
94 INTEGER,DIMENSION(IMS:IME,JMS:JME),INTENT(OUT) :: NCFRST,NCFRCV
95 REAL,DIMENSION(IMS:IME,JMS:JME),INTENT(INOUT) :: TLMAX,TLMIN
96 !
97 REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(IN) :: T
98 REAL,DIMENSION(IMS:IME,KMS:KME,JMS:JME),INTENT(OUT) :: TCUCN &
99 & ,TRAIN
100 !
101 LOGICAL,INTENT(IN) :: RESTART
102 !
103 !-----------------------------------------------------------------------
104 !*** LOCAL VARIABLES
105 !-----------------------------------------------------------------------
106 !
107 INTEGER :: I,J,K,NTSD_BUCKET,NTSPH
108 LOGICAL WRF_DM_ON_MONITOR
109 EXTERNAL WRF_DM_ON_MONITOR
110 !
111 !-----------------------------------------------------------------------
112 !***********************************************************************
113 !-----------------------------------------------------------------------
114 !
115 NTSD_BUCKET=NTSD
116 IF(RESTART.AND.TSTART>0.)THEN
117 NTSD_BUCKET=NTSD-1
118 ENDIF
119 !
120 !-----------------------------------------------------------------------
121 !*** TOTAL AND CONVECTIVE PRECIPITATION ARRAYS.
122 !*** TOTAL SNOW AND SNOW MELT ARRAYS.
123 !*** STORM SURFACE AND BASE GROUND RUN OFF ARRAYS.
124 !*** EVAPORATION ARRAYS.
125 !-----------------------------------------------------------------------
126 !
127 IF(MOD(NTSD_BUCKET,NPREC)==0)THEN
128 DO J=JTS,JTE
129 DO I=ITS,ITE
130 ACPREC(I,J)=0.
131 CUPREC(I,J)=0.
132 ACSNOW(I,J)=0.
133 ACSNOM(I,J)=0.
134 SSROFF(I,J)=0.
135 BGROFF(I,J)=0.
136 SFCEVP(I,J)=0.
137 POTEVP(I,J)=0.
138 ENDDO
139 ENDDO
140 !
141 IF ( WRF_DM_ON_MONITOR() ) THEN
142 CALL WRF_MESSAGE('ZEROED OUT PRECIP/RUNOFF ARRAYS')
143 ENDIF
144 !
145 ENDIF
146 !
147 !-----------------------------------------------------------------------
148 !*** SFC FLUX ARRAYS.
149 !-----------------------------------------------------------------------
150 !
151 IF(MOD(NTSD_BUCKET,NSRFC)==0)THEN
152 ASRFC=0.
153 DO J=JTS,JTE
154 DO I=ITS,ITE
155 SFCSHX(I,J)=0.
156 SFCLHX(I,J)=0.
157 SUBSHX(I,J)=0.
158 SNOPCX(I,J)=0.
159 SFCUVX(I,J)=0.
160 POTFLX(I,J)=0.
161 ENDDO
162 ENDDO
163 !
164 IF ( WRF_DM_ON_MONITOR() ) THEN
165 CALL WRF_MESSAGE('ZEROED OUT SFC EVAP/FLUX ARRAYS')
166 ENDIF
167 !
168 ENDIF
169 !
170 !-----------------------------------------------------------------------
171 !*** SHORTWAVE FLUX ACCUMULATION ARRAYS.
172 !-----------------------------------------------------------------------
173 !
174 IF(MOD(NTSD_BUCKET,NRDSW)==0)THEN
175 ARDSW=0.
176 DO J=JTS,JTE
177 DO I=ITS,ITE
178 ASWIN(I,J) =0.
179 ASWOUT(I,J)=0.
180 ASWTOA(I,J)=0.
181 ENDDO
182 ENDDO
183 !
184 IF ( WRF_DM_ON_MONITOR() ) THEN
185 CALL WRF_MESSAGE('ZEROED OUT ACCUMULATED SHORTWAVE FLUX ARRAYS')
186 ENDIF
187 !
188 ENDIF
189 !
190 !-----------------------------------------------------------------------
191 !*** LONGWAVE FLUX ACCUMULATION ARRAYS.
192 !-----------------------------------------------------------------------
193 !
194 IF(MOD(NTSD_BUCKET,NRDLW)==0)THEN
195 ARDLW=0.
196 DO J=JTS,JTE
197 DO I=ITS,ITE
198 ALWIN(I,J) =0.
199 ALWOUT(I,J)=0.
200 ALWTOA(I,J)=0.
201 ENDDO
202 ENDDO
203 !
204 IF ( WRF_DM_ON_MONITOR() ) THEN
205 CALL WRF_MESSAGE('ZEROED OUT ACCUMULATED LONGWAVE FLUX ARRAYS')
206 ENDIF
207 !
208 ENDIF
209 !
210 !-----------------------------------------------------------------------
211 !*** TIME-AVERAGED CLOUD FRACTION ARRAYS.
212 !-----------------------------------------------------------------------
213 !
214 IF(MOD(NTSD_BUCKET,NCLOD)==0)THEN
215 !***
216 !--- Ferrier 11/2/05: Right now no accumulator variable is used (e.g.,
217 ! "ACLOD"), but instead the 2D arrays NCFRST & NCFRCV are used. These
218 ! can be removed later to streamline the code.
219 !***
220 DO J=JTS,JTE
221 DO I=ITS,ITE
222 ACFRCV(I,J)=0.
223 ACFRST(I,J)=0.
224 NCFRCV(I,J)=0
225 NCFRST(I,J)=0
226 ENDDO
227 ENDDO
228 !
229 IF ( WRF_DM_ON_MONITOR() ) THEN
230 CALL WRF_MESSAGE('ZEROED OUT ACCUMULATED CLOUD FRACTION ARRAYS')
231 ENDIF
232 !
233 ENDIF
234 !
235 !-----------------------------------------------------------------------
236 !*** GRID-SCALE AND CONVECTIVE (LATENT) HEATING ARRAYS.
237 !-----------------------------------------------------------------------
238 !
239 IF(MOD(NTSD_BUCKET,NHEAT)==0)THEN
240 AVCNVC=0.
241 AVRAIN=0.
242 !
243 DO J=JTS,JTE
244 DO K=KTS,KTE
245 DO I=ITS,ITE
246 TRAIN(I,K,J)=0.
247 TCUCN(I,K,J)=0.
248 ENDDO
249 ENDDO
250 ENDDO
251 !
252 IF ( WRF_DM_ON_MONITOR() ) THEN
253 CALL WRF_MESSAGE('ZEROED OUT ACCUMULATED LATENT HEATING ARRAYS')
254 ENDIF
255 !
256 ENDIF
257 !
258 !-----------------------------------------------------------------------
259 !*** MAX/MIN TEMPERATURES
260 !-----------------------------------------------------------------------
261 !
262 NTSPH=NINT(TSPH)
263 IF(MOD(NTSD_BUCKET,NTSPH)==0)THEN
264 DO J=JTS,JTE
265 DO I=ITS,ITE
266 TLMAX(I,J)=-999.
267 TLMIN(I,J)=999.
268 ENDDO
269 ENDDO
270 !
271 IF ( WRF_DM_ON_MONITOR() ) THEN
272 CALL WRF_MESSAGE('RESET MAX/MIN TEMPERTURES')
273 ENDIF
274 ENDIF
275 !
276 DO J=JTS,JTE
277 DO I=ITS,ITE
278 TLMAX(I,J)=MAX(TLMAX(I,J),T(I,1,J))
279 TLMIN(I,J)=MIN(TLMIN(I,J),T(I,1,J))
280 ENDDO
281 ENDDO
282 !
283 !-----------------------------------------------------------------------
284 !
285 END SUBROUTINE BUCKETS
286 !
287 !-----------------------------------------------------------------------