standard WRF version 3.0.1.1
[wrffire.git] / wrfv2_fire / dyn_nmm / module_NEST_UTIL.F
blob56157feedce6e7c22db5dabae0bbf4a70cb37c53
2 !NCEP_MESO:MODEL_LAYER: BOUNDARY CONDITION UPDATES
4 !----------------------------------------------------------------------
6       MODULE module_NEST_UTIL
8 !----------------------------------------------------------------------
9       USE MODULE_MPP
10       USE MODULE_STATE_DESCRIPTION
11       USE MODULE_DM
13 !#ifdef DM_PARALLEL
14 !      INCLUDE "mpif.h"
15 !#endif
16 !----------------------------------------------------------------------
17       CONTAINS
19 !*********************************************************************************************
20       SUBROUTINE NESTBC_PATCH(PD_BXS,PD_BXE,PD_BYS,PD_BYE                                 &
21                              ,T_BXS,T_BXE,T_BYS,T_BYE,Q_BXS,Q_BXE,Q_BYS,Q_BYE             &
22                              ,U_BXS,U_BXE,U_BYS,U_BYE,V_BXS,V_BXE,V_BYS,V_BYE             &
23                              ,Q2_BXS,Q2_BXE,Q2_BYS,Q2_BYE                                 &
24                              ,CWM_BXS,CWM_BXE,CWM_BYS,CWM_BYE                             &
25                              ,PD_BTXS,PD_BTXE,PD_BTYS,PD_BTYE                             &
26                              ,T_BTXS,T_BTXE,T_BTYS,T_BTYE,Q_BTXS,Q_BTXE,Q_BTYS,Q_BTYE     &
27                              ,U_BTXS,U_BTXE,U_BTYS,U_BTYE,V_BTXS,V_BTXE,V_BTYS,V_BTYE     &
28                              ,Q2_BTXS,Q2_BTXE,Q2_BTYS,Q2_BTYE                             &
29                              ,CWM_BTXS,CWM_BTXE,CWM_BTYS,CWM_BTYE                         &
31                              ,PDTMP_B,TTMP_B, QTMP_B,UTMP_B,VTMP_B,Q2TMP_B,CWMTMP_B       &
32                              ,PDTMP_BT,TTMP_BT,QTMP_BT,UTMP_BT,VTMP_BT,Q2TMP_BT,CWMTMP_BT &
34                              ,SPEC_BDY_WIDTH                                              &  
35                              ,IDS,IDE,JDS,JDE,KDS,KDE                                     &
36                              ,IMS,IME,JMS,JME,KMS,KME                                     &
37                              ,ITS,ITE,JTS,JTE,KTS,KTE                                     )
38 !**********************************************************************
39 !$$$  SUBPROGRAM DOCUMENTATION BLOCK
40 !                .      .    .     
41 ! SUBPROGRAM:    PATCH       
42 !   PRGRMMR: gopal 
43 !     
44 ! ABSTRACT:
45 !         THIS IS JUST A FIX FOR USING NESTED BOUNDARIES IN THE HALO REGION     
46 ! PROGRAM HISTORY LOG:
47 !   09-23-2004  : gopal 
48 !     
49 ! USAGE: CALL PATCH FROM SUBROUTINE SOLVE_RUNSTREAM FOR NESTED DOMAIN ONLY
50 !  
51 ! ATTRIBUTES:
52 !   LANGUAGE: FORTRAN 90
53 !   MACHINE : IBM SP
54 !$$$  
55 !**********************************************************************
56 !----------------------------------------------------------------------
58       IMPLICIT NONE
60 !----------------------------------------------------------------------
63       INTEGER,INTENT(IN) :: IDS,IDE,JDS,JDE,KDS,KDE                    &
64                            ,IMS,IME,JMS,JME,KMS,KME                    &
65                            ,ITS,ITE,JTS,JTE,KTS,KTE
66       INTEGER,INTENT(IN) :: SPEC_BDY_WIDTH
69       REAL,DIMENSION(IMS:IME,1,SPEC_BDY_WIDTH)                     &
70                                            ,INTENT(INOUT) :: PD_BYS,PD_BYE &
71                                                           ,PD_BTYS,PD_BTYE
73       REAL,DIMENSION(IMS:IME,KMS:KME,SPEC_BDY_WIDTH)                &
74                                       ,INTENT(INOUT) :: CWM_BYS,CWM_BYE &
75                                                        ,Q_BYS,Q_BYE     &
76                                                        ,Q2_BYS,Q2_BYE   &
77                                                        ,T_BYS,T_BYE     &
78                                                        ,U_BYS,U_BYE     &
79                                                        ,V_BYS,V_BYE     
81       REAL,DIMENSION(IMS:IME,KMS:KME,SPEC_BDY_WIDTH)                &
82                                       ,INTENT(INOUT) :: CWM_BTYS,CWM_BTYE &
83                                                        ,Q_BTYS,Q_BTYE     &
84                                                        ,Q2_BTYS,Q2_BTYE   &
85                                                        ,T_BTYS,T_BTYE     &
86                                                        ,U_BTYS,U_BTYE     &
87                                                        ,V_BTYS,V_BTYE     
91       REAL,DIMENSION(JMS:JME,1,SPEC_BDY_WIDTH)                     &
92                                            ,INTENT(INOUT) :: PD_BXS,PD_BXE &
93                                                           ,PD_BTXS,PD_BTXE
95       REAL,DIMENSION(JMS:JME,KMS:KME,SPEC_BDY_WIDTH)                &
96                                       ,INTENT(INOUT) :: CWM_BXS,CWM_BXE &
97                                                        ,Q_BXS,Q_BXE     &
98                                                        ,Q2_BXS,Q2_BXE   &
99                                                        ,T_BXS,T_BXE     &
100                                                        ,U_BXS,U_BXE     &
101                                                        ,V_BXS,V_BXE     
103       REAL,DIMENSION(JMS:JME,KMS:KME,SPEC_BDY_WIDTH)                &
104                                       ,INTENT(INOUT) :: CWM_BTXS,CWM_BTXE &
105                                                        ,Q_BTXS,Q_BTXE     &
106                                                        ,Q2_BTXS,Q2_BTXE   &
107                                                        ,T_BTXS,T_BTXE     &
108                                                        ,U_BTXS,U_BTXE     &
109                                                        ,V_BTXS,V_BTXE     
113       REAL,DIMENSION(IMS:IME,JMS:JME)                     &
114                                       ,INTENT(IN) :: PDTMP_B,PDTMP_BT
116       REAL,DIMENSION(IMS:IME,JMS:JME,KMS:KME)                     &
117                                       ,INTENT(IN) :: CWMTMP_B,CWMTMP_BT  &
118                                                     ,QTMP_B,QTMP_BT     &
119                                                     ,Q2TMP_B,Q2TMP_BT   &
120                                                     ,TTMP_B,TTMP_BT     &
121                                                     ,UTMP_B,UTMP_BT     &
122                                                     ,VTMP_B,VTMP_BT    
126 !----------------------------------------------------------------------
128 !***  LOCAL VARIABLES
130       LOGICAL :: E_BDY,W_BDY,N_BDY,S_BDY
131       INTEGER :: I,J,K,IBDY,II,JJ,IB,JB,IIM,JJM,BF
132 !----------------------------------------------------------------------
133 !**********************************************************************
134 !----------------------------------------------------------------------
136       W_BDY=(ITS==IDS)
137       E_BDY=(ITE==IDE)
138       S_BDY=(JTS==JDS)
139       N_BDY=(JTE==JDE)
141 !----------------------------------------------------------------------
142 !***  WEST AND EAST BOUNDARIES
143 !----------------------------------------------------------------------
145 !***  USE IBDY=1 FOR WEST; 2 FOR EAST.
147 !      WRITE(0,*)'WESTERN BC FOR PATCH',IDS,MAX(JTS-1,JDS+3-1),MIN(JTE+1,JDE-2)
150       DO IBDY=1,2
152 !***  MAKE SURE THE PROCESSOR HAS THIS BOUNDARY.
154         IF(W_BDY.AND.IBDY.EQ.1)THEN
155 !            BF=P_XSB     ! Which boundary (XSB=the boundary where X is at its start)
156             IB=1         ! Which cell in from boundary
157             II=1         ! Which cell in the domain
159           DO J=MAX(JTS-1,JDS+3-1),MIN(JTE+1,JDE-2)
160              IF(MOD(J,2).EQ.1)THEN                 ! J=3,5,7,9
161                 PD_BXS(J,1,IB)  =PDTMP_B(II,J)
162                 PD_BTXS(J,1,IB) =PDTMP_BT(II,J)
163              ENDIF
164           ENDDO
166           DO K=KTS,KTE
167             DO J=MAX(JTS-1,JDS+3-1),MIN(JTE+1,JDE-2)
168               IF(MOD(J,2).EQ.1)THEN                  ! J=3,5,7,9
169                 T_BXS(J,K,IB)    = TTMP_B(II,J,K)
170                 T_BTXS(J,K,IB)   = TTMP_BT(II,J,K)
171                 Q_BXS(J,K,IB)    = QTMP_B(II,J,K)
172                 Q_BTXS(J,K,IB)   = QTMP_BT(II,J,K)
173                 Q2_BXS(J,K,IB)   = Q2TMP_B(II,J,K)
174                 Q2_BTXS(J,K,IB)  = Q2TMP_BT(II,J,K)
175                 CWM_BXS(J,K,IB)  = CWMTMP_B(II,J,K)
176                 CWM_BTXS(J,K,IB) = CWMTMP_BT(II,J,K)
177               ENDIF
178             ENDDO
179           ENDDO
181           DO K=KTS,KTE
182             DO J=MAX(JTS-1,JDS+2-1),MIN(JTE+1,JDE-1)
183               IF(MOD(J,2).EQ.0)THEN                  ! J=2,4,6,8  
184                 U_BXS(J,K,IB)    = UTMP_B(II,J,K)
185                 U_BTXS(J,K,IB)   = UTMP_BT(II,J,K)
186                 V_BXS(J,K,IB)    = VTMP_B(II,J,K)
187                 V_BTXS(J,K,IB)   = VTMP_BT(II,J,K)
188               ENDIF
189             ENDDO
190           ENDDO
192         ELSEIF (E_BDY.AND.IBDY.EQ.2) THEN
194 !            BF=P_XEB     ! Which boundary (XEB=the boundary where X is at its end)
195             IB=1         ! Which cell in from boundary
196             II=IDE       ! Which cell in the domain
198           DO J=MAX(JTS-1,JDS+3-1),MIN(JTE+1,JDE-2)
199              IF(MOD(J,2).EQ.1)THEN                 ! J=3,5,7,9
200                 PD_BXE(J,1,IB)  =PDTMP_B(II,J)
201                 PD_BTXE(J,1,IB) =PDTMP_BT(II,J)
202              ENDIF
203           ENDDO
205           DO K=KTS,KTE
206             DO J=MAX(JTS-1,JDS+3-1),MIN(JTE+1,JDE-2)
207               IF(MOD(J,2).EQ.1)THEN                  ! J=3,5,7,9
208                 T_BXE(J,K,IB)    = TTMP_B(II,J,K)
209                 T_BTXE(J,K,IB)   = TTMP_BT(II,J,K)
210                 Q_BXE(J,K,IB)    = QTMP_B(II,J,K)
211                 Q_BTXE(J,K,IB)   = QTMP_BT(II,J,K)
212                 Q2_BXE(J,K,IB)   = Q2TMP_B(II,J,K)
213                 Q2_BTXE(J,K,IB)  = Q2TMP_BT(II,J,K)
214                 CWM_BXE(J,K,IB)  = CWMTMP_B(II,J,K)
215                 CWM_BTXE(J,K,IB) = CWMTMP_BT(II,J,K)
216               ENDIF
217             ENDDO
218           ENDDO
220           DO K=KTS,KTE
221             DO J=MAX(JTS-1,JDS+2-1),MIN(JTE+1,JDE-1)
222               IF(MOD(J,2).EQ.0)THEN                  ! J=2,4,6,8  
223                 U_BXE(J,K,IB)    = UTMP_B(II,J,K)
224                 U_BTXE(J,K,IB)   = UTMP_BT(II,J,K)
225                 V_BXE(J,K,IB)    = VTMP_B(II,J,K)
226                 V_BTXE(J,K,IB)   = VTMP_BT(II,J,K)
227               ENDIF
228             ENDDO
229           ENDDO
231         ENDIF
232       ENDDO
234 !----------------------------------------------------------------------
235 !***  SOUTH AND NORTH BOUNDARIES
236 !----------------------------------------------------------------------
238 !***  USE IBDY=1 FOR SOUTH; 2 FOR NORTH
240       DO IBDY=1,2
242 !***  MAKE SURE THE PROCESSOR HAS THIS BOUNDARY.
244         IF(S_BDY.AND.IBDY.EQ.1) THEN 
246 !            BF=P_YSB     ! Which boundary (YSB=the boundary where Y is at its start)
247             JB=1         ! Which cell in from boundary
248             JJ=1         ! Which cell in the domain
250           DO I=MAX(ITS-1,IDS),MIN(ITE+1,IDE)
251             PD_BYS(I,1,JB) = PDTMP_B(I,JJ)
252             PD_BTYS(I,1,JB)= PDTMP_BT(I,JJ)
253           ENDDO
256           DO K=KTS,KTE
257             DO I=MAX(ITS-1,IDS),MIN(ITE+1,IDE)
258               T_BYS(I,K,JB)   = TTMP_B(I,JJ,K)
259               T_BTYS(I,K,JB)  = TTMP_BT(I,JJ,K)
260               Q_BYS(I,K,JB)   = QTMP_B(I,JJ,K)
261               Q_BTYS(I,K,JB)  = QTMP_BT(I,JJ,K)
262               Q2_BYS(I,K,JB)  = Q2TMP_B(I,JJ,K)
263               Q2_BTYS(I,K,JB) = Q2TMP_BT(I,JJ,K)
264               CWM_BYS(I,K,JB) = CWMTMP_B(I,JJ,K)
265               CWM_BTYS(I,K,JB)= CWMTMP_BT(I,JJ,K)
266             ENDDO
267           ENDDO
269           DO K=KTS,KTE
270            DO I=MAX(ITS-1,IDS),MIN(ITE+1,IDE)
271               U_BYS(I,K,JB)   = UTMP_B(I,JJ,K)
272               U_BTYS(I,K,JB)  = UTMP_BT(I,JJ,K)
273               V_BYS(I,K,JB)   = VTMP_B(I,JJ,K)
274               V_BTYS(I,K,JB)  = VTMP_BT(I,JJ,K)
275            ENDDO
276           ENDDO
278           ELSEIF (N_BDY.AND.IBDY.EQ.2) THEN
279 !            BF=P_YEB      ! Which boundary (YEB=the boundary where Y is at its end)
280             JB=1          ! Which cell in from boundary
281             JJ=JDE        ! Which cell in the domain
283           DO I=MAX(ITS-1,IDS),MIN(ITE+1,IDE)
284             PD_BYE(I,1,JB) = PDTMP_B(I,JJ)
285             PD_BTYE(I,1,JB)= PDTMP_BT(I,JJ)
286           ENDDO
289           DO K=KTS,KTE
290             DO I=MAX(ITS-1,IDS),MIN(ITE+1,IDE)
291               T_BYE(I,K,JB)   = TTMP_B(I,JJ,K)
292               T_BTYE(I,K,JB)  = TTMP_BT(I,JJ,K)
293               Q_BYE(I,K,JB)   = QTMP_B(I,JJ,K)
294               Q_BTYE(I,K,JB)  = QTMP_BT(I,JJ,K)
295               Q2_BYE(I,K,JB)  = Q2TMP_B(I,JJ,K)
296               Q2_BTYE(I,K,JB) = Q2TMP_BT(I,JJ,K)
297               CWM_BYE(I,K,JB) = CWMTMP_B(I,JJ,K)
298               CWM_BTYE(I,K,JB)= CWMTMP_BT(I,JJ,K)
299             ENDDO
300           ENDDO
302           DO K=KTS,KTE
303            DO I=MAX(ITS-1,IDS),MIN(ITE+1,IDE)
304               U_BYE(I,K,JB)   = UTMP_B(I,JJ,K)
305               U_BTYE(I,K,JB)  = UTMP_BT(I,JJ,K)
306               V_BYE(I,K,JB)   = VTMP_B(I,JJ,K)
307               V_BTYE(I,K,JB)  = VTMP_BT(I,JJ,K)
308            ENDDO
309           ENDDO
313         ENDIF
314       ENDDO
315 END  SUBROUTINE NESTBC_PATCH
317 !----------------------------------------------------------------------
319 SUBROUTINE STATS_FOR_MOVE (XLOC,YLOC,PDYN,MSLP,SQWS              &
320                           ,PINT,T,Q,U,V                          &
321                           ,FIS,PD,SM,PDTOP,PTOP                  &
322                           ,DETA1,DETA2                           &
323                           ,MOVED,MVNEST,NTSD,NPHS                &
324                           ,IDS,IDE,JDS,JDE,KDS,KDE               &
325                           ,IMS,IME,JMS,JME,KMS,KME               &
326                           ,ITS,ITE,JTS,JTE,KTS,KTE               )
328 !**********************************************************************
329 !$$$  SUBPROGRAM DOCUMENTATION BLOCK
330 !                .      .    .
331 ! SUBPROGRAM:  STATS_FOR_MOVE  
332 !   PRGRMMR: gopal
334 ! ABSTRACT:
335 !         THIS ROUTINE COMPUTES SOME STATS REQUIRED FOR AUTOMATIC GRID MOTION 
336 ! PROGRAM HISTORY LOG:
337 !   05-18-2005  : gopal
339 ! USAGE: CALL STATS_FOR_MOVE FROM SUBROUTINE SOLVE_RUNSTREAM FOR NESTED DOMAIN ONLY
341 ! ATTRIBUTES:
342 !   LANGUAGE: FORTRAN 90
343 !   MACHINE : IBM SP
344 !$$$
345 !**********************************************************************
347       USE MODULE_MODEL_CONSTANTS
348       USE MODULE_DM
350       IMPLICIT NONE
352       LOGICAL,EXTERNAL                                      :: wrf_dm_on_monitor
353       LOGICAL,INTENT(INOUT)                                 :: MVNEST  ! NMM SWITCH FOR GRID MOTION
354       LOGICAL,INTENT(IN)                                    :: MOVED
355       INTEGER,INTENT(IN)                                    :: IDS,IDE,JDS,JDE,KDS,KDE   &
356                                                               ,IMS,IME,JMS,JME,KMS,KME   &
357                                                               ,ITS,ITE,JTS,JTE,KTS,KTE   &
358                                                               ,NTSD,NPHS
360       INTEGER, INTENT(OUT)                                  :: XLOC,YLOC
361       REAL, DIMENSION(KMS:KME),                 INTENT(IN)  :: DETA1,DETA2
362       REAL,                                     INTENT(IN)  :: PDTOP,PTOP
363       REAL, DIMENSION(IMS:IME,JMS:JME),         INTENT(IN)  :: FIS,PD,SM
364       REAL, DIMENSION(IMS:IME,JMS:JME,KMS:KME), INTENT(IN)  :: PINT,T,Q,U,V
365       REAL, DIMENSION(IMS:IME,JMS:JME),         INTENT(OUT) :: PDYN,MSLP,SQWS
367 !     LOCAL
369       INTEGER,SAVE                                          :: NTIME0
370       INTEGER                                               :: IM,JM,IP,JP
371       INTEGER                                               :: I,K,J,XR,YR,DTMOVE,IDUM,JDUM,ITF,JTF
372       REAL, PARAMETER                                       :: LAPSR=6.5E-3, GI=1./G,D608=0.608
373       REAL, PARAMETER                                       :: COEF3=287.05*GI*LAPSR, COEF2=-1./COEF3
374       REAL, PARAMETER                                       :: TRG=2.0*R_D*GI,LAPSI=1.0/LAPSR
375       REAL                                                  :: DZ,RTOPP,APELP,A,TSFC,STMP0,STMP1
376       REAL                                                  :: SMSUM,SMOUT,XDIFF,YDIFF,PCUT,PGR
377       REAL                                                  :: MINGBL_PDYN,MAXGBL_PDYN,MAXGBL_SQWS
378       REAL                                                  :: MINGBL_MIJ
379       REAL, DIMENSION(IMS:IME,JMS:JME)                      :: MIJ
380       REAL, DIMENSION(IMS:IME,JMS:JME,KMS:KME)              :: Z
382 !    EXEC 
384      ITF=MIN(ITE,IDE-1)
385      JTF=MIN(JTE,JDE-1)
387 !----------------------------------------------------------------------------------
389 !     KEEP NEST MOTION IN SINK WITH PHYSICS TIME STEPS
391       IF(MOD(NTSD+1,NPHS)/=0)THEN
392         MVNEST=.FALSE.
393         RETURN
394       ENDIF
396       WRITE(0,*)'PHYSICS IN SINK',NTSD,NPHS
398 !     DETERMINE THE HEIGHTS ON THE PARENT DOMAIN
400       DO J = JTS, MIN(JTE,JDE)
401        DO I = ITS, MIN(ITE,IDE)
402          Z(I,1,J)=FIS(I,J)*GI
403        ENDDO
404       ENDDO
406       DO K = KTS,KTE
407        DO J = JTS, MIN(JTE,JDE)
408         DO I = ITS, MIN(ITE,IDE)
409           APELP      = (PINT(I,J,K+1)+PINT(I,J,K))
410           RTOPP      = TRG*T(I,J,K)*(1.0+Q(I,J,K)*P608)/APELP
411           DZ         = RTOPP*(DETA1(K)*PDTOP+DETA2(K)*PD(I,J))
412           Z(I,K+1,J) = Z(I,J,K) + DZ
413         ENDDO
414        ENDDO
415       ENDDO
417 !     DETERMINE THE MEAN SEA LEVEL PRESSURE, THE VERTICALLY AVERAGED WIND
418 !     SPEED AT ABOUT LEVELS 9 10 AND 11 AND THE DYNAMIC PRESSURES DEFINED
419 !     FROM BASIC BERNOULLI's THEOREM
421       DO J = JTS, MIN(JTE,JDE)
422         DO I = ITS, MIN(ITE,IDE)
423             TSFC      = T(I,J,1)*(1.+D608*Q(I,J,1)) + LAPSR*(Z(I,J,1)+Z(I,J,2))*0.5
424             A         = LAPSR*Z(I,J,1)/TSFC
425             MSLP(I,J) = PINT(I,J,1)*(1-A)**COEF2
426             SQWS(I,J) =  (U(I,J,9)*U(I,J,9) + V(I,J,9)*V(I,J,9)           &
427                       +   U(I,J,10)*U(I,J,10) + V(I,J,10)*V(I,J,10)       &
428                       +   U(I,J,11)*U(I,J,11) + V(I,J,11)*V(I,J,11))/3.0
429             PDYN(I,J) =   MSLP(I,J)  + 1.1*SQWS(I,J)/2.0
430         ENDDO
431       ENDDO
433 !     FILTER OUT PDYN AND STORE THAT IN MIJ. THE MAXIMUM VALUE OF MIJ GIVES THE STORM CENTER
434 !     ALSO DO THAT WITHIN A SUB DOMAIN
436       MAXGBL_PDYN=MAXVAL(PDYN(ITS:ITF,JTS:JTF))
437       CALL WRF_DM_MAXVAL(MAXGBL_PDYN,IDUM,JDUM)
438       MINGBL_PDYN=MINVAL(PDYN(ITS:ITF,JTS:JTF))
439       CALL WRF_DM_MINVAL(MINGBL_PDYN,IDUM,JDUM)
440       PCUT = 0.5*(MAXGBL_PDYN + MINGBL_PDYN)
442       IM=IDE/2 - IDE/6
443       IP=IDE/2 + IDE/6
444       JM=JDE/2 - JDE/4
445       JP=JDE/2 + JDE/4
447       DO J = JTS, MIN(JTE,JDE)
448         DO I = ITS, MIN(ITE,IDE)
449           IF(I .GE. IM .AND. I .LE. IP .AND. J .GE. JM .AND. J .LE. JP  &
450                        .AND. PCUT .GT. PDYN(I,J))THEN
451              MIJ(I,J) = PDYN(I,J)
452           ELSE
453              MIJ(I,J) = 105000.0
454           ENDIF
455         ENDDO
456       ENDDO
458       DO J = JTS, MIN(JTE,JDE)
459         DO I = ITS, MIN(ITE,IDE)
460           PDYN(I,J)=MIJ(I,J)
461         ENDDO
462       ENDDO
464 !     DETERMINE THE LOCATION OF CENTER OF THE CIRCULATION DEFINED BY MIJ AND FIND THE CORRESPONDING MSLP 
466       MINGBL_MIJ=MINVAL(MIJ(ITS:ITF,JTS:JTF))
467       DO J = JTS, MIN(JTE,JDE)
468         DO I = ITS, MIN(ITE,IDE)
469            IF(MIJ(I,J) .EQ. MINGBL_MIJ)THEN
470              XLOC=I
471              YLOC=J
472              STMP0=MSLP(I,J)
473            ENDIF
474         ENDDO
475       ENDDO
477       CALL WRF_DM_MINVAL(MINGBL_MIJ,XLOC,YLOC)
478       CALL WRF_DM_MINVAL(STMP0,IDUM,JDUM)
480 !     DETERMINE THE MAXIMUM MSLP AT ABOUT 18 GRID POINTS AWAY FROM THE STORM CENTER 
482       DO J = JTS, MIN(JTE,JDE)
483         DO I = ITS, MIN(ITE,IDE)
484            IF(I .EQ. XLOC+18)THEN
485              XR=I
486              YR=J
487              STMP1=MSLP(I,J)
488            ENDIF
489         ENDDO
490       ENDDO
492       CALL WRF_DM_MAXVAL(STMP1,XR,YR)
495 !     DETERMINE IF THE ENTIRE NESTED DOMAIN IS OVER LAND (SM=0)
498       SMSUM = 0.0
499       DO J = JTS, MIN(JTE,JDE)
500        DO I = ITS, MIN(ITE,IDE)
501          SMSUM = SMSUM + SM(I,J)
502        ENDDO
503       ENDDO
505       SMOUT=WRF_DM_SUM_REAL(SMSUM)/(IDE*JDE)
507 !     STOP GRID MOTION. AVOID MOVING TOO RAPID GRID MOTION, SAY SOMETHING LIKE EVERY
508 !     OTHER TIME STEP OR SO  
510       PGR=STMP1-STMP0
511       XDIFF=ABS(XLOC - IDE/2)
512       YDIFF=ABS(YLOC - JDE/2)
513       IF(NTSD==0 .OR. MOVED)NTIME0=NTSD
514       DTMOVE=NTSD-NTIME0                    ! TIME INTERVAL SINCE THE PREVIOUS MOVE
516       IF(DTMOVE .LE. 45 .OR. PGR .LE. 200.)THEN
517         WRITE(0,*)'SUSPEND MOTION: SMALL DTMOVE OR WEAK PGF:','DTMOVE=',DTMOVE,'PGR=',PGR
518         MVNEST=.FALSE.                               ! SET STATIC GRID
519       ELSE IF(STMP0 .GE. STMP1)THEN
520         WRITE(0,*)'SUSPEND MOTION: THERE IS NO VORTEX IN THE DOMAIN:','STMP0=',STMP0,'STMP1=',STMP1
521         MVNEST=.FALSE.
522       ELSE IF(XDIFF .GT. 24 .OR. YDIFF .GT. 24)THEN
523         WRITE(0,*)'SUSPEND MOTION: LOST VORTEX ','DTMOVE=',DTMOVE,'XDIFF=',XDIFF,'YDIFF=',YDIFF
524         MVNEST=.FALSE.
525       ELSE IF(SMOUT .LE. 0.2 .AND. XDIFF .GT. 12 .AND. YDIFF .GT. 12)THEN
526         WRITE(0,*)'SUSPEND MOTION: VORTEX LOST OVER LAND ','DTMOVE=',DTMOVE,'XDIFF=',XDIFF,'YDIFF=',YDIFF
527         MVNEST=.FALSE.
528       ELSE IF(SMOUT .LE. 0.2 .AND. PGR .LE. 400.)THEN
529         WRITE(0,*)'SUSPEND MOTION: VORTEX WEAK OVER LAND ','SMOUT=',SMOUT,'PGR=',PGR
530         MVNEST=.FALSE.
531       ELSE IF(SMOUT .LE. 0.2 .AND. DTMOVE .GE. 1500)THEN
532         WRITE(0,*)'SUSPEND MOTION: STOP MOTION  OVER LAND','SMOUT=',SMOUT,'DTMOVE=',DTMOVE
533         MVNEST=.FALSE.
534       ELSE
535         MVNEST=.TRUE.
536       ENDIF
538       RETURN
540 END SUBROUTINE STATS_FOR_MOVE
541 !----------------------------------------------------------------------------------
543 END  MODULE module_NEST_UTIL