File: /nfs/home/0/users/jenkins/mfix.git/model/check_data/check_ic_common_discrete.f
1
2
3
4
5
6
7
8
9
10
11
12
13 SUBROUTINE CHECK_IC_COMMON_DISCRETE
14
15
16 USE discretelement, only : gener_part_config
17
18 USE discretelement, only: DIMN
19
20 USE discretelement, only: DES_MMAX
21
22 USE ic, only: IC_DEFINED
23
24 USE ic, only: IC_EP_G
25
26 USE ic, only: IC_EP_S
27
28 USE ic, only: IC_THETA_M
29
30 USE ic, only: IC_X_w, IC_X_e, IC_Y_s, IC_Y_n, IC_Z_b, IC_Z_t
31
32 USE param1, only: UNDEFINED, UNDEFINED_I, ZERO, ONE
33
34
35 Use geometry, only: xlength, ylength, zlength
36
37
38
39 USE param, only: DIMENSION_IC
40
41
42
43 use error_manager
44
45 implicit none
46
47 INTEGER :: ICV, ICV2, M, IDIM
48 INTEGER :: COUNT_IC, COUNT_IC_WITH_SOLS
49 INTEGER :: FIRST_DEF_IC
50
51 DOUBLE PRECISION :: IC_ORIG(3), IC_END(3), IC2_ORIG(3) , IC2_END(3)
52 DOUBLE PRECISION :: IC_MIN, IC_MAX, IC2_MIN, IC2_MAX , TOL_IC_REG
53
54 LOGICAL :: SEP_AXIS, first_ic_ok
55
56 IF (.NOT.GENER_PART_CONFIG) RETURN
57
58
59 CALL INIT_ERR_MSG("CHECK_IC_COMMON_DISCRETE")
60
61
62
63
64
65 = 0
66
67 = 0
68 FIRST_DEF_IC = UNDEFINED_I
69 DO ICV = 1, DIMENSION_IC
70
71 IF (IC_DEFINED(ICV)) THEN
72 COUNT_IC = COUNT_IC + 1
73 FIRST_DEF_IC = MIN(FIRST_DEF_IC, ICV)
74
75 IF(IC_EP_G(ICV).LT.ONE) COUNT_IC_WITH_SOLS &
76 = COUNT_IC_WITH_SOLS + 1
77
78 ENDIF
79 end DO
80
81 IF(COUNT_IC_WITH_SOLS >= 1 .AND. &
82 COUNT_IC > COUNT_IC_WITH_SOLS+1) THEN
83
84
85
86
87 = FIRST_DEF_IC
88 FIRST_IC_OK = .FALSE.
89 IF(IC_EP_G(ICV).EQ.ONE &
90 .AND.IC_X_W(ICV).LE.ZERO.AND.IC_X_E(ICV).GE.XLENGTH &
91 .AND.IC_Y_S(ICV).LE.ZERO.AND.IC_Y_N(ICV).GE.YLENGTH) &
92 FIRST_IC_OK = .TRUE.
93
94 IF (FIRST_IC_OK .AND. IC_Z_B(ICV) <= ZERO .AND. &
95 IC_Z_T(ICV) >= ZLENGTH) FIRST_IC_OK = .TRUE.
96
97 IF(.NOT.FIRST_IC_OK) THEN
98 WRITE(ERR_MSG, 1003)
99 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
100 ENDIF
101
102 1003 FORMAT(' Error 1003: Particle seeding with more than one IC ', &
103 'region requires',/'that IC 1 span the entire domain and ', &
104 'have IC_EP_g(1) = 1.0.',/'Please correct the mfix.dat file.')
105
106 ENDIF
107
108
109 = 1E-04
110 ICVLOOP : DO ICV = 1, DIMENSION_IC
111
112 IF(.NOT.IC_DEFINED(ICV)) CYCLE ICVLOOP
113 IF(IC_EP_G(ICV) == 1.d0) CYCLE ICVLOOP
114 IC_ORIG(1) = IC_X_W(ICV)
115 IC_ORIG(2) = IC_Y_S(ICV)
116 IC_ORIG(3) = IC_Z_B(ICV)
117 IC_END(1) = IC_X_E(ICV)
118 IC_END(2) = IC_Y_N(ICV)
119 IC_END(3) = IC_Z_T(ICV)
120 ICVTWOLOOP : DO ICV2 = ICV+1, DIMENSION_IC
121
122 IF(.NOT.IC_DEFINED(ICV2)) CYCLE ICVTWOLOOP
123 IF(IC_EP_G(ICV2) == 1.0d0) CYCLE ICVTWOLOOP
124
125 IC2_ORIG(1) = IC_X_W(ICV2)
126 IC2_ORIG(2) = IC_Y_S(ICV2)
127 IC2_ORIG(3) = IC_Z_B(ICV2)
128 IC2_END(1) = IC_X_E(ICV2)
129 IC2_END(2) = IC_Y_N(ICV2)
130 IC2_END(3) = IC_Z_T(ICV2)
131
132 sep_axis = .false.
133 DO idim = 1, dimn
134
135 ic_min = IC_ORIG(idim)
136 ic_max = IC_END(idim)
137 ic2_min = IC2_ORIG(idim)
138 ic2_max = ic2_END(idim)
139
140
141
142
143
144
145
146 if ((ic_min .ge. ic2_max) .or. (ic_max .le. ic2_min) ) then
147 sep_axis = .true.
148 exit
149 endif
150 end DO
151
152
153
154 IF(.NOT.sep_axis) THEN
155 WRITE(ERR_MSG, 1004) ICV, ICV2
156 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
157 ENDIF
158
159 1004 FORMAT('Error 1004: Overlapping IC regions with nonzero solids ',&
160 'volume',/'fraction detected. This is not supported for ', &
161 'discrete solids.',2/'Overlapping ICs: ',2(2x,I4),2/, &
162 'Please correct the mfix.dat file.')
163
164 end DO ICVTWOLOOP
165 end DO ICVLOOP
166
167
168
169
170 DO ICV = 1, DIMENSION_IC
171
172 IF (IC_DEFINED(ICV).and.IC_EP_G(ICV).LT.ONE) THEN
173 DO M = 1, DES_MMAX
174 IF(IC_THETA_M(ICV,M)==UNDEFINED) THEN
175 IF(IC_EP_S(ICV,M).gt.Zero) THEN
176 WRITE(ERR_MSG, 1000) trim(iVar('IC_THETA_M',ICV,M))
177 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
178 ELSE
179 IC_Theta_M(ICV,M) = ZERO
180 ENDIF
181 ENDIF
182 ENDDO
183 ENDIF
184 ENDDO
185
186 CALL FINL_ERR_MSG
187
188 RETURN
189
190 1000 FORMAT('Error 1000: Required input not specified: ',A,/'Please ',&
191 'correct the mfix.dat file.')
192
193 END SUBROUTINE CHECK_IC_COMMON_DISCRETE
194