File: RELATIVE:/../../../mfix.git/model/des/des_time_march.f
1
2
3
4
5
6
7
8
9 SUBROUTINE DES_TIME_MARCH
10
11 use des_bc, only: DEM_BCMI, DEM_BCMO
12 use des_thermo, only: DES_ENERGY_SOURCE
13 use desgrid, only: desgrid_pic
14 use discretelement
15 use error_manager
16 use fldvar, only: EP_g, ROP_g, ROP_s
17 use fldvar, only: EP_g, ROP_g, ROP_s
18 use functions
19 use machine
20 use mpi_funs_des, only: DES_PAR_EXCHANGE
21 use mpi_utility
22 use run, only: ANY_SPECIES_EQ
23 use run, only: ANY_SPECIES_EQ
24 use run, only: CALL_USR
25 use run, only: ENERGY_EQ
26 use run, only: NSTEP
27 use run, only: TIME, TSTOP, DT
28 use sendrecv
29
30 IMPLICIT NONE
31
32
33
34
35 INTEGER, SAVE :: NP=0
36
37
38 INTEGER :: NN
39
40
41 INTEGER :: FACTOR
42
43
44
45 DOUBLE PRECISION :: TMP_DTS, DTSOLID_TMP
46
47
48 DOUBLE PRECISION :: TMP_WALL
49
50
51 = TIME
52 TMP_DTS = ZERO
53 DTSOLID_TMP = ZERO
54 TMP_WALL = WALL_TIME()
55
56
57 IF(DES_CONTINUUM_COUPLED) THEN
58 IF(DT.GE.DTSOLID) THEN
59 FACTOR = CEILING(real(DT/DTSOLID))
60 ELSE
61 FACTOR = 1
62 DTSOLID_TMP = DTSOLID
63 DTSOLID = DT
64 ENDIF
65
66
67 ELSE
68 FACTOR = CEILING(real((TSTOP-TIME)/DTSOLID))
69 DT = DTSOLID
70 CALL OUTPUT_MANAGER(.FALSE., .FALSE.)
71 ENDIF
72
73 = PIP - IGHOST_CNT
74 CALL GLOBAL_ALL_SUM(NP)
75
76 IF(DES_CONTINUUM_COUPLED) THEN
77 WRITE(ERR_MSG, 1000) trim(iVal(factor)), trim(iVAL(NP))
78 CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE., LOG=.FALSE.)
79 ELSE
80 WRITE(ERR_MSG, 1100) TIME, DTSOLID, trim(iVal(factor))
81 CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE., LOG=.FALSE.)
82 ENDIF
83 1000 FORMAT(/'DEM NITs: ',A,3x,'Total PIP: ', A)
84 1100 FORMAT(/'Time: ',g12.5,3x,'DT: ',g12.5,3x,'DEM NITs: ',A)
85
86 IF(CALL_USR) CALL USR0_DES
87
88 IF(DES_CONTINUUM_COUPLED) THEN
89 IF(DES_EXPLICITLY_COUPLED) THEN
90 CALL DRAG_GS_DES1
91 ELSE
92 IF(ANY_SPECIES_EQ) CALL ZERO_RRATE_DES
93 IF(ENERGY_EQ) CALL ZERO_ENERGY_SOURCE
94 ENDIF
95 CALL CALC_PG_GRAD
96 ENDIF
97
98
99
100
101 DO NN = 1, FACTOR
102
103 IF(DES_CONTINUUM_COUPLED) THEN
104
105
106 IF(S_TIME.GE.(TIME+DT)) EXIT
107
108
109
110 IF((S_TIME+DTSOLID).GT.(TIME+DT)) THEN
111 TMP_DTS = DTSOLID
112 DTSOLID = TIME + DT - S_TIME
113 ENDIF
114 ENDIF
115
116
117 CALL CALC_FORCE_DEM
118
119 CALL CALC_DRAG_DES
120
121
122
123 IF (DO_OLD) CALL CFUPDATEOLD
124
125 CALL CALC_THERMO_DES
126
127 IF(CALL_USR) CALL USR1_DES
128
129 CALL CFNEWVALUES
130
131 CALL DES_THERMO_NEWVALUES
132
133 CALL DES_REACTION_MODEL
134
135
136 = (NN == 1 .OR. MOD(NN,NEIGHBOR_SEARCH_N) == 0)
137
138
139 IF(DEM_BCMI > 0) CALL MASS_INFLOW_DEM
140 IF(DEM_BCMO > 0) CALL MASS_OUTFLOW_DEM(DO_NSEARCH)
141
142
143
144 IF (DO_NSEARCH .OR. (numPEs>1) .OR. DES_PERIODIC_WALLS) THEN
145 CALL DESGRID_PIC(.TRUE.)
146 CALL DES_PAR_EXCHANGE
147 ENDIF
148
149 IF(DO_NSEARCH) CALL NEIGHBOUR
150
151
152
153
154 IF(DES_CONTINUUM_COUPLED .AND. &
155 .NOT.DES_EXPLICITLY_COUPLED) THEN
156
157 CALL PARTICLES_IN_CELL
158
159 CALL CALC_INTERP_WEIGHTS
160
161 CALL COMP_MEAN_FIELDS
162 ENDIF
163
164
165 = S_TIME + DTSOLID
166
167
168 IF(.NOT.DES_CONTINUUM_COUPLED) THEN
169
170 = S_TIME
171 NSTEP = NSTEP + 1
172
173 CALL OUTPUT_MANAGER(.FALSE., .FALSE.)
174 ENDIF
175
176 IF(CALL_USR) CALL USR2_DES
177
178 ENDDO
179
180
181
182
183 IF(CALL_USR) CALL USR3_DES
184
185
186
187
188
189 IF(DT.LT.DTSOLID_TMP) THEN
190 DTSOLID = DTSOLID_TMP
191 ENDIF
192
193 IF(TMP_DTS.NE.ZERO) THEN
194 DTSOLID = TMP_DTS
195 TMP_DTS = ZERO
196 ENDIF
197
198 IF(.NOT.DES_CONTINUUM_COUPLED)THEN
199 WRITE(ERR_MSG,"('<---------- END DES_TIME_MARCH ----------')")
200 CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
201 ELSE
202 call send_recv(ep_g,2)
203 call send_recv(rop_g,2)
204 call send_recv(des_u_s,2)
205 call send_recv(des_v_s,2)
206 if(do_K) call send_recv(des_w_s,2)
207 call send_recv(rop_s,2)
208 if(ENERGY_EQ) call send_recv(des_energy_source,2)
209
210 TMP_WALL = WALL_TIME() - TMP_WALL
211 IF(TMP_WALL > 1.0d-10) THEN
212 WRITE(ERR_MSG, 9000) trim(iVal(dble(FACTOR)/TMP_WALL))
213 ELSE
214 WRITE(ERR_MSG, 9000) '+Inf'
215 ENDIF
216 CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE., LOG=.FALSE.)
217
218 9000 FORMAT(' NITs/SEC = ',A)
219
220 ENDIF
221
222 RETURN
223 END SUBROUTINE DES_TIME_MARCH
224