File: N:\mfix\model\get_stats.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
2     !                                                                      C
3     !  Module name: GET_STATS(IER)                                         C
4     !  Purpose: Get statistics for stalled or diverged iterations          C
5     !                                                                      C
6     !  Author: M. Syamlal                                 Date: 11-FEB-97  C
7     !  Reviewer:                                          Date:            C
8     !                                                                      C
9     !  Revision Number:                                                    C
10     !  Purpose:                                                            C
11     !  Author:                                            Date: dd-mmm-yy  C
12     !  Reviewer:                                          Date: dd-mmm-yy  C
13     !                                                                      C
14     !  Literature/Document References:                                     C
15     !                                                                      C
16     !  Variables referenced:                                               C
17     !                                                                      C
18     !  Variables modified:                                                 C
19     !                                                                      C
20     !  Local variables:  None                                              C
21     !                                                                      C
22     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
23     !
24           SUBROUTINE GET_STATS()
25     !...Translated by Pacific-Sierra Research VAST-90 2.06G5  12:17:31  12/09/98
26     !...Switches: -xf
27     !
28     !  Include param.inc file to specify parameter values
29     !
30     !-----------------------------------------------
31     !   M o d u l e s
32     !-----------------------------------------------
33           USE param
34           USE param1
35           USE physprop
36           USE geometry
37           USE fldvar
38           USE indices
39           USE funits
40           USE residual
41           USE run
42           USE compar
43           USE functions
44     
45           use machine
46     
47           IMPLICIT NONE
48     !-----------------------------------------------
49     !   G l o b a l   P a r a m e t e r s
50     !-----------------------------------------------
51     !-----------------------------------------------
52     !   L o c a l   P a r a m e t e r s
53     !-----------------------------------------------
54     !-----------------------------------------------
55     !   L o c a l   V a r i a b l e s
56     !-----------------------------------------------
57     !
58     !                      Indices
59           INTEGER          I, J, K, IJK, M
60     
61           DOUBLE PRECISION tmp
62     !
63     !                      direction (1 - x, 2 - y, 3- z)
64           INTEGER          Dir_g, Dir_s(DIMENSION_M)
65     !
66     !                      Courant number
67           DOUBLE PRECISION NC_g, NC_s(DIMENSION_M)
68     !
69     !                      Maximum P_star
70           DOUBLE PRECISION Ps
71     !
72     !                      Locations of maxima
73           INTEGER          IJK_NC_g, IJK_Ps, IJK_NC_s(DIMENSION_M)
74     
75     
76     !
77     !-----------------------------------------------
78     
79           DIR_G = 1
80           NC_G = LARGE_NUMBER
81           IJK_NC_G = 0
82     !
83           PS = 0.
84           IJK_PS = 0
85     !
86           DO IJK = IJKMIN1, IJKMAX1
87              IF (FLUID_AT(IJK)) THEN
88                 I = I_OF(IJK)
89                 J = J_OF(IJK)
90                 K = K_OF(IJK)
91     !
92                 IF (U_G(IJK) == ZERO) THEN
93                    TMP = LARGE_NUMBER
94                 ELSE IF (U_G(IJK) > ZERO) THEN
95                    TMP = DX(IP1(I))/U_G(IJK)
96                 ELSE
97                    TMP = -DX(I)/U_G(IJK)
98                 ENDIF
99     !
100                 IF (TMP < NC_G) THEN
101                    NC_G = TMP
102                    IJK_NC_G = IJK
103                    DIR_G = 1
104                 ENDIF
105     !
106                 IF (V_G(IJK) == ZERO) THEN
107                    TMP = LARGE_NUMBER
108                 ELSE IF (V_G(IJK) > ZERO) THEN
109                    TMP = DY(JP1(J))/V_G(IJK)
110                 ELSE
111                    TMP = -DY(J)/V_G(IJK)
112                 ENDIF
113     !
114                 IF (TMP < NC_G) THEN
115                    NC_G = TMP
116                    IJK_NC_G = IJK
117                    DIR_G = 2
118                 ENDIF
119     !
120                 IF (W_G(IJK) == ZERO) THEN
121                    TMP = LARGE_NUMBER
122                 ELSE IF (W_G(IJK) > ZERO) THEN
123                    TMP = DZ(KP1(K))*X(I)/W_G(IJK)
124                 ELSE
125                    TMP = -DZ(K)*X(I)/W_G(IJK)
126                 ENDIF
127     !
128                 IF (TMP < NC_G) THEN
129                    NC_G = TMP
130                    IJK_NC_G = IJK
131                    DIR_G = 3
132                 ENDIF
133     !
134                 IF (P_STAR(IJK) > PS) THEN
135                    PS = P_STAR(IJK)
136                    IJK_PS = IJK
137                 ENDIF
138     !
139              ENDIF
140           END DO
141           M = 1
142           IF (MMAX > 0) THEN
143              DIR_S(:MMAX) = 1
144              NC_S(:MMAX) = LARGE_NUMBER
145              IJK_NC_S(:MMAX) = 0
146              M = MMAX + 1
147           ENDIF
148           DO M = 1, MMAX
149              DO IJK = IJKMIN1, IJKMAX1
150                 IF (FLUID_AT(IJK)) THEN
151                    I = I_OF(IJK)
152                    J = J_OF(IJK)
153                    K = K_OF(IJK)
154                    IF (U_S(IJK,M) == ZERO) THEN
155                       TMP = LARGE_NUMBER
156                    ELSE IF (U_S(IJK,M) > ZERO) THEN
157                       TMP = DX(IP1(I))/U_S(IJK,M)
158                    ELSE
159                       TMP = -DX(I)/U_S(IJK,M)
160                    ENDIF
161     !
162                    IF (TMP < NC_S(M)) THEN
163                       NC_S(M) = TMP
164                       IJK_NC_S(M) = IJK
165                       DIR_S(M) = 1
166                    ENDIF
167     !
168                    IF (V_S(IJK,M) == ZERO) THEN
169                       TMP = LARGE_NUMBER
170                    ELSE IF (V_S(IJK,M) > ZERO) THEN
171                       TMP = DY(JP1(J))/V_S(IJK,M)
172                    ELSE
173                       TMP = -DY(J)/V_S(IJK,M)
174                    ENDIF
175     !
176                    IF (TMP < NC_S(M)) THEN
177                       NC_S(M) = TMP
178                       IJK_NC_S(M) = IJK
179                       DIR_S(M) = 2
180                    ENDIF
181     !
182                    IF (W_S(IJK,M) == ZERO) THEN
183                       TMP = LARGE_NUMBER
184                    ELSE IF (W_S(IJK,M) > ZERO) THEN
185                       TMP = DZ(KP1(K))*X(I)/W_S(IJK,M)
186                    ELSE
187                       TMP = -DZ(K)*X(I)/W_S(IJK,M)
188                    ENDIF
189     !
190                    IF (TMP < NC_S(M)) THEN
191                       NC_S(M) = TMP
192                       IJK_NC_S(M) = IJK
193                       DIR_S(M) = 3
194                    ENDIF
195     !
196                 ENDIF
197              END DO
198           END DO
199           CALL START_LOG
200           IF(DMP_LOG)WRITE (UNIT_LOG, *) 'Gas phase:'
201           IF(DMP_LOG)WRITE (UNIT_LOG, '(A, G12.3, A, I6, A, I1)') ' Minimum Courant No = ', &
202              NC_G*ODT, '  Location = ', IJK_NC_G, '  Direction = ', DIR_G
203     !
204           DO M = 1, MMAX
205              IF(DMP_LOG)WRITE (UNIT_LOG, '(A, I2, A)') ' Solids phase (', M, '):'
206              IF(DMP_LOG)WRITE (UNIT_LOG, '(A, G12.3, A, I6, A, I1)') ' Minimum Courant No = '&
207                 , NC_S(M)*ODT, '  Location = ', IJK_NC_S(M), '  Direction = ', &
208                 DIR_S(M)
209           END DO
210           IF(DMP_LOG)WRITE (UNIT_LOG, '(A, G12.3, A, I6)') ' Maximum P_star = ', PS, &
211              '  Location = ', IJK_PS
212     !
213     !      IF(DMP_LOG)WRITE(UNIT_LOG,'(A, G12.3, A, I6)')
214     !     & " Maximum P_g residual = ", MAX_RESID(RESID_P, 0),
215     !     & "  Location = ", IJK_RESID(RESID_P, 0)
216     !      IF(DMP_LOG)WRITE(UNIT_LOG,'(A, G12.3, A, I6)')
217     !     & " Maximum P_s residual = ", MAX_RESID(RESID_p, 1),
218     !     & "  Location = ", IJK_RESID(RESID_p, 1)
219     !
220           IF(DMP_LOG)WRITE (UNIT_LOG, *)
221     !
222           CALL END_LOG
223     !
224           RETURN
225           END SUBROUTINE GET_STATS
226     
227     !// Comments on the modifications for DMP version implementation
228     !// 001 Include header file and common declarations for parallelization
229     !//? DO loop limits still running between IJKMIN1, IJKMAX1
230