MFIX  2016-1
residual_mod.f
Go to the documentation of this file.
1 ! -*- f90 -*-
2 MODULE residual
3 
4  Use param, only: dim_n, dim_m
5 
6 ! residual.inc
7 
8  INTEGER, PARAMETER :: max_resid_index = 8 !for printing; don't change this
9 
10  INTEGER, PARAMETER :: resid_p = 1 !pressure
11  INTEGER, PARAMETER :: resid_ro = 2 !density, volume fraction
12  INTEGER, PARAMETER :: resid_u = 3 !u-velocity
13  INTEGER, PARAMETER :: resid_v = 4 !v-velocity
14  INTEGER, PARAMETER :: resid_w = 5 !w-velocity
15  INTEGER, PARAMETER :: resid_t = 6 !temperature
16  INTEGER, PARAMETER :: resid_th = 7 !granular temperature
17  INTEGER, PARAMETER :: resid_sc = 8 !user-defined scalar
18  INTEGER, PARAMETER :: nresid = 8 + dim_n
19  INTEGER, PARAMETER :: resid_ke = 9 !k-epsilon equations
20  INTEGER, PARAMETER :: resid_x = 10 !mass fraction (keep this the last)
21  INTEGER, PARAMETER :: nprefix = 10
22 !
23 ! Group Resisuals by equation
24  INTEGER, PARAMETER :: hydro_grp = 1 !hydrodynamics
25  INTEGER, PARAMETER :: theta_grp = 2 !Granular Energy
26  INTEGER, PARAMETER :: energy_grp = 3 !Energy
27  INTEGER, PARAMETER :: species_grp = 4 !Species
28  INTEGER, PARAMETER :: scalar_grp = 5 !Scalars
29  INTEGER, PARAMETER :: ke_grp = 6 !K-Epsilon
30 
31 ! prefix of Residuals string
32  CHARACTER, PARAMETER, DIMENSION(NPREFIX) :: resid_prefix = &
33  (/ 'P', 'R', 'U', 'V', 'W', 'T', 'G', 'S', 'K', 'X' /)
34 
35 !
36 ! Average residual
37  DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: resid
38 !
39 ! Maximum residual
40  DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: max_resid
41 !
42 ! sum of residuals every 5 iterations
43  DOUBLE PRECISION sum5_resid
44 !
45 ! IJK location of maximum residual
46  INTEGER, DIMENSION(:,:), ALLOCATABLE :: ijk_resid
47 
48 ! Residual Numerator
49  DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: num_resid
50 !
51 ! Residual Denominator
52  DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: den_resid
53 !
54 ! Residual Packing for Global Operations
55  DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: resid_pack
56 !
57 ! Residual sum within a group of equations
58  LOGICAL :: group_resid
59  DOUBLE PRECISION :: resid_grp(6)
60 !
61 ! Residuals to be printed out
62  CHARACTER(LEN=4) resid_string(max_resid_index)
63  CHARACTER(LEN=8) resid_grp_string(6)
64 !
65 ! Indices of residuals to be printed out
67 !
68 
69 ! fluid and solids accumulation, for checking the over-all fluid mass balance
70  DOUBLE PRECISION accum_resid_g, accum_resid_s(dim_m)
71 
72  CONTAINS
73 
74  FUNCTION get_resid_string(INDEX)
75  IMPLICIT NONE
76  CHARACTER(LEN=4) :: GET_RESID_STRING
77  INTEGER, INTENT(IN) :: INDEX
78 
79  get_resid_string = resid_string(index)
80 
81  END FUNCTION get_resid_string
82 
83  FUNCTION get_resid_grp_string(INDEX)
84  IMPLICIT NONE
85  CHARACTER(LEN=8) :: GET_RESID_GRP_STRING
86  INTEGER, INTENT(IN) :: INDEX
87 
88  get_resid_grp_string = resid_grp_string(index)
89 
90  END FUNCTION get_resid_grp_string
91 
92  FUNCTION get_resid(INDEX)
93  IMPLICIT NONE
94  DOUBLE PRECISION :: GET_RESID
95  INTEGER, INTENT(IN) :: INDEX
96  INTEGER :: RI, RI2
97 
98  IF (index > SIZE(resid_index,1)) THEN
99  ! PRINT *,__FILE__," INVALID VALUE FOR INDEX ",INDEX
100  get_resid = 0.0
101  RETURN
102  ENDIF
103  ri = resid_index(index,1)
104  ri2 = resid_index(index,2)
105  IF (ri > SIZE(resid,1)) THEN
106  ! PRINT *,__FILE__," INVALID VALUE FOR RESID_INDEX 1 ",RI
107  get_resid = 0.0
108  RETURN
109  ENDIF
110  IF (ri2 > SIZE(resid,1)) THEN
111  ! PRINT *,__FILE__," INVALID VALUE FOR RESID_INDEX 2 ",RI2
112  get_resid = 0.0
113  RETURN
114  ENDIF
115  get_resid = resid(ri,ri2)
116 
117  END FUNCTION get_resid
118 
119  FUNCTION get_resid_grp(INDEX)
120  IMPLICIT NONE
121  DOUBLE PRECISION :: GET_RESID_GRP
122  INTEGER, INTENT(IN) :: INDEX
123 
124  get_resid_grp = resid_grp(index)
125 
126  END FUNCTION get_resid_grp
127 
128  END MODULE residual
integer, parameter resid_t
Definition: residual_mod.f:15
integer, parameter resid_ro
Definition: residual_mod.f:11
character(len=8) function get_resid_grp_string(INDEX)
Definition: residual_mod.f:84
double precision, dimension(dim_m) accum_resid_s
Definition: residual_mod.f:70
integer, parameter hydro_grp
Definition: residual_mod.f:24
integer, parameter dim_n
Definition: param_mod.f:73
integer, parameter resid_p
Definition: residual_mod.f:10
double precision, dimension(6) resid_grp
Definition: residual_mod.f:59
double precision, dimension(:,:), allocatable den_resid
Definition: residual_mod.f:52
integer, parameter scalar_grp
Definition: residual_mod.f:28
integer, parameter dim_m
Definition: param_mod.f:67
logical group_resid
Definition: residual_mod.f:58
integer, parameter nresid
Definition: residual_mod.f:18
double precision, dimension(:,:), allocatable num_resid
Definition: residual_mod.f:49
character, dimension(nprefix), parameter resid_prefix
Definition: residual_mod.f:32
integer, parameter species_grp
Definition: residual_mod.f:27
double precision function get_resid(INDEX)
Definition: residual_mod.f:93
integer, parameter resid_sc
Definition: residual_mod.f:17
double precision sum5_resid
Definition: residual_mod.f:43
integer, dimension(max_resid_index, 2) resid_index
Definition: residual_mod.f:66
integer, parameter nprefix
Definition: residual_mod.f:21
character(len=4) function get_resid_string(INDEX)
Definition: residual_mod.f:75
integer, parameter resid_w
Definition: residual_mod.f:14
double precision, dimension(:,:), allocatable max_resid
Definition: residual_mod.f:40
integer, parameter resid_th
Definition: residual_mod.f:16
double precision, dimension(:), allocatable resid_pack
Definition: residual_mod.f:55
integer, parameter resid_v
Definition: residual_mod.f:13
integer, parameter max_resid_index
Definition: residual_mod.f:8
Definition: param_mod.f:2
integer, parameter energy_grp
Definition: residual_mod.f:26
double precision accum_resid_g
Definition: residual_mod.f:70
integer, parameter theta_grp
Definition: residual_mod.f:25
integer, dimension(:,:), allocatable ijk_resid
Definition: residual_mod.f:46
integer, parameter resid_u
Definition: residual_mod.f:12
character(len=4), dimension(max_resid_index) resid_string
Definition: residual_mod.f:62
integer, parameter resid_ke
Definition: residual_mod.f:19
double precision function get_resid_grp(INDEX)
Definition: residual_mod.f:120
character(len=8), dimension(6) resid_grp_string
Definition: residual_mod.f:63
double precision, dimension(:,:), allocatable resid
Definition: residual_mod.f:37
integer, parameter resid_x
Definition: residual_mod.f:20
integer, parameter ke_grp
Definition: residual_mod.f:29