MFIX  2016-1
get_stats.f
Go to the documentation of this file.
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
integer, dimension(:), allocatable ip1
Definition: indices_mod.f:50
double precision, dimension(:,:), allocatable v_s
Definition: fldvar_mod.f:105
logical dmp_log
Definition: funits_mod.f:6
integer, dimension(:), allocatable i_of
Definition: indices_mod.f:45
double precision, dimension(:,:), allocatable w_s
Definition: fldvar_mod.f:117
integer ijkmax1
Definition: geometry_mod.f:86
double precision, dimension(0:dim_j) dy
Definition: geometry_mod.f:70
double precision, dimension(0:dim_k) dz
Definition: geometry_mod.f:72
double precision, dimension(:,:), allocatable u_s
Definition: fldvar_mod.f:93
integer ijkmin1
Definition: geometry_mod.f:84
integer, dimension(:), allocatable k_of
Definition: indices_mod.f:47
integer mmax
Definition: physprop_mod.f:19
integer, dimension(:), allocatable j_of
Definition: indices_mod.f:46
integer, dimension(:), allocatable jp1
Definition: indices_mod.f:51
double precision odt
Definition: run_mod.f:54
double precision, dimension(:), allocatable v_g
Definition: fldvar_mod.f:99
double precision, dimension(0:dim_i) dx
Definition: geometry_mod.f:68
integer, dimension(:), allocatable kp1
Definition: indices_mod.f:52
double precision, dimension(:), allocatable w_g
Definition: fldvar_mod.f:111
integer, parameter unit_log
Definition: funits_mod.f:21
Definition: run_mod.f:13
double precision, parameter large_number
Definition: param1_mod.f:23
Definition: param_mod.f:2
double precision, dimension(:), allocatable p_star
Definition: fldvar_mod.f:142
subroutine get_stats()
Definition: get_stats.f:25
double precision, dimension(:), allocatable u_g
Definition: fldvar_mod.f:87
subroutine start_log
Definition: machine_mod.f:182
Definition: ps_mod.f:22
integer dimension_m
Definition: param_mod.f:18
double precision, dimension(:), allocatable x
Definition: geometry_mod.f:129
double precision, parameter zero
Definition: param1_mod.f:27
subroutine end_log
Definition: machine_mod.f:208