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

1     MODULE REINIT
2        CONTAINS
3     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
4     !                                                                      !
5     !  SUBROUTINE: REINITIALIZE                                            !
6     !  Purpose: read and verify input data, open files                     !
7     !                                                                      !
8     !  Author: P. Nicoletti                               Date: 04-DEC-91  !
9     !  Reviewer: M.SYAMLAL, W.ROGERS, P.NICOLETTI         Date: 24-JAN-92  !
10     !                                                                      !
11     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
12           SUBROUTINE REINITIALIZE(filename)
13     
14           use run, only: REINITIALIZING
15     
16           use error_manager
17     
18           IMPLICIT NONE
19     
20           CHARACTER(LEN=*), intent(in) :: filename
21     
22           INTEGER :: IER
23     
24           IER = 0
25           REINITIALIZING = .TRUE.
26     
27     ! Clean up reaction data if needed
28           CALL REINIT_RXN_DATA
29     
30     ! Read in the namelist variables from the ascii input file.
31           CALL READ_NAMELIST(2, filename)
32     
33           CALL REINITIALIZE0(IER)
34     
35           REINITIALIZING = .FALSE.
36     
37           IF(IER /=0) THEN
38              WRITE(ERR_MSG, 2000)
39           ELSE
40              WRITE(ERR_MSG, 2100)
41           ENDIF
42     
43      2000 FORMAT(2/70('*'),/'Reinitialization failed!',/'Correct all ',    &
44              'reported errors and reinitialize again.',/70('*'))
45     
46      2100 FORMAT(2/,70('*'),/'Successfully reinitialized!'/70('*'))
47           CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
48     
49           RETURN
50           END SUBROUTINE REINITIALIZE
51     
52     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
53     !                                                                      !
54     !  SUBROUTINE: REINITIALIZE0                                           !
55     !  Purpose: read and verify input data, open files                     !
56     !                                                                      !
57     !  Author: P. Nicoletti                               Date: 04-DEC-91  !
58     !  Reviewer: M.SYAMLAL, W.ROGERS, P.NICOLETTI         Date: 24-JAN-92  !
59     !                                                                      !
60     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
61           SUBROUTINE REINITIALIZE0(pIER)
62     
63           USE cutcell, only: CARTESIAN_GRID
64           use coeff, only: INIT_COEFF
65     
66           use error_manager
67     
68           IMPLICIT NONE
69     
70           INTEGER, INTENT(OUT) :: pIER
71           INTEGER :: IER
72     
73     ! Set the default error flag to ERROR state.
74           pIER = 1
75     
76           CALL CHECK_RUN_CONTROL()
77           IF(REINIT_ERROR()) RETURN
78     
79           CALL CHECK_NUMERICS()
80           IF(REINIT_ERROR()) RETURN
81     
82           CALL CHECK_OUTPUT_CONTROL()
83           IF(REINIT_ERROR()) RETURN
84     
85           CALL CHECK_GAS_PHASE
86           IF(REINIT_ERROR()) RETURN
87     
88           CALL CHECK_SOLIDS_PHASES
89           IF(REINIT_ERROR()) RETURN
90     
91           CALL CHECK_INITIAL_CONDITIONS
92           IF(REINIT_ERROR()) RETURN
93           CALL CHECK_BOUNDARY_CONDITIONS
94           IF(REINIT_ERROR()) RETURN
95           CALL CHECK_INTERNAL_SURFACES
96           IF(REINIT_ERROR()) RETURN
97           CALL CHECK_POINT_SOURCES
98     
99           CALL CHECK_CHEMICAL_RXNS
100           IF(REINIT_ERROR()) RETURN
101           CALL CHECK_ODEPACK_STIFF_CHEM
102           IF(REINIT_ERROR()) RETURN
103     
104     ! Convert (mass, volume) flows to velocities.
105           CALL SET_BC_FLOW
106           IF(REINIT_ERROR()) RETURN
107     
108     ! This is all that happens in SET_L_SCALE so it needs moved, maybe
109     ! this should go in int_fluid_var.?
110     !     CALL SET_L_SCALE
111     !      L_SCALE(:) = L_SCALE0
112     
113     ! Set constant physical properties
114           CALL SET_CONSTPROP
115           IF(REINIT_ERROR()) RETURN
116     
117     ! Set initial conditions
118           CALL SET_IC
119           IF(REINIT_ERROR()) RETURN
120     
121     ! Set point sources.
122           CALL SET_PS
123           IF(REINIT_ERROR()) RETURN
124     
125     ! Set boundary conditions
126           CALL ZERO_NORM_VEL
127           IF(REINIT_ERROR()) RETURN
128           CALL SET_BC0
129           IF(REINIT_ERROR()) RETURN
130           IF(CARTESIAN_GRID) CALL CG_SET_BC0
131           IF(REINIT_ERROR()) RETURN
132     
133     ! Set gas mixture molecular weight
134           CALL SET_MW_MIX_G
135           IF(REINIT_ERROR()) RETURN
136     
137     ! Initialize densities.
138           CALL SET_RO_G
139           IF(REINIT_ERROR()) RETURN
140           CALL SET_RO_S
141           IF(REINIT_ERROR()) RETURN
142     
143     ! Initialize time dependent boundary conditions
144           CALL SET_BC1
145           IF(REINIT_ERROR()) RETURN
146     
147     ! Check the field variable data and report errors.
148           IF(.NOT.CARTESIAN_GRID) CALL CHECK_DATA_20
149           IF(REINIT_ERROR()) RETURN
150     
151     ! Parse residual strings
152           CALL PARSE_RESID_STRING ()
153           IF(REINIT_ERROR()) RETURN
154     
155           CALL RRATES_INIT(IER)
156           IF(REINIT_ERROR()) RETURN
157     
158     ! Calculate all the coefficients once before entering the time loop
159           CALL INIT_COEFF(IER)
160           IF(REINIT_ERROR()) RETURN
161     
162     ! After reinitialization, the field vars should pass these checks too
163           CALL CHECK_DATA_30()
164           IF(REINIT_ERROR()) RETURN
165     
166           CALL WRITE_RES0()
167           CALL WRITE_OUT0()
168     
169     ! Made it here without error.
170           pIER = 0
171     
172           RETURN
173           END SUBROUTINE REINITIALIZE0
174     
175     
176     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
177     !                                                                      !
178     !  SUBROUTINE: REINIT_RXN_DATA                                         !
179     !  Purpose: read and verify input data, open files                     !
180     !                                                                      !
181     !  Author: P. Nicoletti                               Date: 04-DEC-91  !
182     !  Reviewer: M.SYAMLAL, W.ROGERS, P.NICOLETTI         Date: 24-JAN-92  !
183     !                                                                      !
184     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
185           SUBROUTINE REINIT_RXN_DATA
186     
187           use parse, only: RXN_NAME, DES_RXN_NAME
188           use parse, only: RXN_CHEM_EQ, DES_RXN_CHEM_EQ
189           use parse, only: usrDH, DES_usrDH
190           use parse, only: usrfDH, DES_usrfDH
191     
192           use rxns, only: NO_OF_RXNS
193           use rxns, only: REACTION
194           use des_rxns, only: NO_OF_DES_RXNS
195           use des_rxns, only: DES_REACTION
196     
197           use error_manager
198     
199           IMPLICIT NONE
200     
201           INTEGER :: LC
202     
203     ! Reaction Names: Allocate/Initialize
204           IF(allocated( RXN_NAME )) deallocate(RXN_NAME)
205     ! Chemical Equations: Allocate/Initialize
206           IF(allocated( RXN_CHEM_EQ )) deallocate(RXN_CHEM_EQ)
207     ! User defined heat of reaction: Allocate/Initialize
208           IF(allocated( usrDH ))deallocate(usrDH)
209     ! User defined heat of reaction partitions: Allocate/Initialize
210           IF(allocated( usrfDH )) deallocate(usrfDH)
211     
212     
213           IF(allocated(Reaction)) THEN
214              DO LC=1,NO_OF_RXNS
215                 IF(allocated(Reaction(LC)%HoR)) &
216                    deallocate(Reaction(LC)%HoR)
217                 IF(allocated(Reaction(LC)%rPhase)) &
218                    deallocate(Reaction(LC)%rPhase)
219                 IF(allocated(Reaction(LC)%Species)) &
220                    deallocate(Reaction(LC)%Species)
221              ENDDO
222              deallocate(Reaction)
223           ENDIF
224           NO_OF_RXNS = 0
225     
226     ! Reaction Names: Allocate/Initialize
227           IF(allocated( DES_RXN_NAME )) deallocate(DES_RXN_NAME)
228     ! Chemical Equations: Allocate/Initialize
229           IF(allocated( DES_RXN_CHEM_EQ )) deallocate(DES_RXN_CHEM_EQ)
230     ! User defined heat of reaction: Allocate/Initialize
231           IF(allocated( DES_usrDH )) deallocate( DES_usrDH)
232     ! User defined heat of reaction partitions: Allocate/Initialize
233           IF(Allocated( DES_usrfDH )) deallocate( DES_usrfDH)
234     
235           IF(allocated(DES_Reaction)) THEN
236              DO LC=1,NO_OF_DES_RXNS
237                 IF(allocated(DES_Reaction(LC)%HoR)) &
238                    deallocate(DES_Reaction(LC)%HoR)
239                 IF(allocated(DES_Reaction(LC)%rPhase)) &
240                    deallocate(DES_Reaction(LC)%rPhase)
241                 IF(allocated(DES_Reaction(LC)%Species)) &
242                    deallocate(DES_Reaction(LC)%Species)
243              ENDDO
244              deallocate(DES_Reaction)
245           ENDIF
246           NO_OF_DES_RXNS = 0
247     
248     
249           RETURN
250           END SUBROUTINE REINIT_RXN_DATA
251     END MODULE REINIT
252