Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RADI_ReadRadiSection.F90
Go to the documentation of this file.
1 ! *********************************************************************
2 ! * Rocstar Simulation Suite *
3 ! * Copyright@2015, Illinois Rocstar LLC. All rights reserved. *
4 ! * *
5 ! * Illinois Rocstar LLC *
6 ! * Champaign, IL *
7 ! * www.illinoisrocstar.com *
8 ! * sales@illinoisrocstar.com *
9 ! * *
10 ! * License: See LICENSE file in top level of distribution package or *
11 ! * http://opensource.org/licenses/NCSA *
12 ! *********************************************************************
13 ! *********************************************************************
14 ! * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
15 ! * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES *
16 ! * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND *
17 ! * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR *
18 ! * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
19 ! * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
20 ! * Arising FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
21 ! * USE OR OTHER DEALINGS WITH THE SOFTWARE. *
22 ! *********************************************************************
23 !******************************************************************************
24 !
25 ! Purpose: Read in user input within RADI section (done on all processors).
26 !
27 ! Description: none.
28 !
29 ! Input: regions = user input file of all regions.
30 !
31 ! Output: regions = RADI input parameters.
32 !
33 ! Notes: Mother routine = ReadInputFile.
34 !
35 !******************************************************************************
36 !
37 ! $Id: RADI_ReadRadiSection.F90,v 1.4 2008/12/06 08:44:38 mtcampbe Exp $
38 !
39 ! Copyright: (c) 2001 by the University of Illinois
40 !
41 !******************************************************************************
42 
43 #ifdef RFLO
44 SUBROUTINE radi_readradisection( regions )
45 #endif
46 #ifdef RFLU
47 SUBROUTINE radi_readradisection
48 #endif
49 
50  USE moddatatypes
51 #ifdef RFLO
52  USE moddatastruct, ONLY : t_region
53 #endif
54  USE modglobal, ONLY : t_global
55 #ifdef RFLO
57 #endif
58 #ifdef RFLU
60 #endif
61  USE moderror
62  USE modparameters
64 
65  IMPLICIT NONE
66 
67 ! ... parameters
68 #ifdef RFLO
69  TYPE(t_region), POINTER :: regions(:)
70 #endif
71 
72 ! ... loop variables
73  INTEGER :: ireg
74 
75 ! ... local variables
76  TYPE(t_global), POINTER :: global
77 
78  INTEGER :: nvals
79 #ifdef RFLO
80  INTEGER :: brbeg, brend
81 #endif
82  INTEGER, PARAMETER :: nvals_max = 20
83 
84  REAL(RFREAL) :: vals(nvals_max)
85  LOGICAL :: defined(nvals_max)
86  CHARACTER(20) :: keys(nvals_max)
87  CHARACTER(256) :: sectionline, line(2)
88 
89 !******************************************************************************
90 
91  global => regions(1)%global
92  CALL registerfunction( global,'RADI_ReadRadiSection',&
93  'RADI_ReadRadiSection.F90' )
94 
95 ! specify keywords
96 
97  nvals = nvals_max
98  keys( 1) = 'RADIMODEL'
99  keys( 2) = 'MEDIA'
100  keys( 3) = 'FLUXLIMITER'
101  keys( 4) = 'SMOOCF'
102  keys( 5) = 'DISCR'
103  keys( 6) = 'K2'
104  keys( 7) = '1/K4'
105  keys( 8) = 'ORDER'
106  keys( 9) = 'CONPARTVFRAC'
107  keys(10) = 'CONPARTDIAM'
108  keys(11) = 'CONPARTQE'
109  keys(12) = 'DISPARTVFRAC'
110  keys(13) = 'DISPARTDIAM'
111  keys(14) = 'DISPARTQE'
112  keys(15) = 'SOLMETHOD'
113  keys(16) = 'NPOLAR'
114  keys(17) = 'NAZIMUTHAL'
115  keys(18) = 'NINTANGLES'
116  keys(19) = 'POLANGLES'
117  keys(20) = 'AZIANGLES'
118 
119 ! 4 - 8 only relevant for FLD involving transport eq. for Er
120 ! 9,10,12,13 only relevant for artificial media
121 ! 15 only relevant for RTE radiation model
122 ! 16 - 17 only relevant for RTE radiation model/ FVM sol. method
123 ! 18 only relevant for diffusion approximation methods
124 ! 19 - 20 only relevant for diffusion approximation methods
125 
126 ! safety check
127 
128  IF (nvals-1 /= 14) THEN
129  CALL errorstop( global,err_radi_input,__line__, &
130  'number of input parameters being read is inconsistent' )
131  ENDIF
132 
133 ! search for keywords
134 
135 #ifdef RFLO
136  CALL readregionsection( global,if_input,nvals-2,keys(1:nvals-2), &
137  vals(1:nvals-2),brbeg,brend,defined(1:nvals-2) )
138 
139  IF (defined(1)) THEN
140  regions(brbeg:brend)%radiInput%radiModel = int(vals(1)+0.5_rfreal)
141  ENDIF
142  IF (defined(2)) THEN
143  IF (int(vals(2)+0.5_rfreal) <= 1) THEN
144  regions(brbeg:brend)%radiInput%media = radi_media_artif
145  ELSE
146  regions(brbeg:brend)%radiInput%media = radi_media_real
147  ENDIF
148  ENDIF
149  IF (defined(3)) THEN
150  IF (int(vals(3)+0.5_rfreal) <= 0) THEN
151  regions(brbeg:brend)%radiInput%fluxLim = fld_lim_none
152  ELSE
153  regions(brbeg:brend)%radiInput%fluxLim = fld_lim_lp
154  ENDIF
155  ENDIF
156 
157  IF (defined(4)) regions(brbeg:brend)%radiInput%smoocf = vals(4)
158 
159  IF (defined(5)) THEN
160  regions(brbeg:brend)%radiInput%spaceDiscr = int(vals(5)+0.5_rfreal)
161  ENDIF
162 
163  IF (defined(6)) regions(brbeg:brend)%radiInput%vis2 = abs(vals(6))
164 
165  IF (defined(7)) THEN
166  IF (vals(7) > 1.e-10_rfreal) THEN
167  regions(brbeg:brend)%radiInput%vis4 = 1._rfreal/vals(7)
168  ELSEIF (vals(7) > 0._rfreal .AND. vals(7) <= 1.e-10_rfreal) THEN
169  regions(brbeg:brend)%radiInput%vis4 = 1.e+10_rfreal
170  ELSEIF (vals(7) <= 0._rfreal ) THEN
171  regions(brbeg:brend)%radiInput%vis4 = 0.0_rfreal
172  ENDIF
173  ENDIF
174 
175  IF (defined(8)) THEN
176  regions(brbeg:brend)%radiInput%spaceOrder = int(vals(8)+0.5_rfreal)
177  ENDIF
178 
179  IF (defined(9)) THEN
180  DO ireg = brbeg,brend
181  regions(ireg)%radiInput%optConst(phase_prop_v,radi_phase_conpart)= &
182  abs(vals(9))
183  ENDDO
184  ENDIF
185  IF (defined(10)) THEN
186  DO ireg = brbeg,brend
187  regions(ireg)%radiInput%optConst(phase_prop_d,radi_phase_conpart)= &
188  abs(vals(10))
189  ENDDO
190  ENDIF
191  IF (defined(11)) THEN
192  DO ireg = brbeg,brend
193  regions(ireg)%radiInput%optConst(phase_prop_q,radi_phase_conpart)= &
194  abs(vals(11))
195  ENDDO
196  ENDIF
197  IF (defined(12)) THEN
198  DO ireg = brbeg,brend
199  regions(ireg)%radiInput%optConst(phase_prop_v,radi_phase_dispart)= &
200  abs(vals(12))
201  ENDDO
202  ENDIF
203  IF (defined(13)) THEN
204  DO ireg = brbeg,brend
205  regions(ireg)%radiInput%optConst(phase_prop_d,radi_phase_dispart)= &
206  abs(vals(13))
207  ENDDO
208  ENDIF
209  IF (defined(14)) THEN
210  DO ireg = brbeg,brend
211  regions(ireg)%radiInput%optConst(phase_prop_q,radi_phase_dispart)= &
212  abs(vals(14))
213  ENDDO
214  ENDIF
215 
216  IF (defined(15)) THEN
217  regions(brbeg:brend)%radiInput%solMethod = int(vals(15)+0.5_rfreal)
218  ENDIF
219  IF (defined(16)) THEN
220  regions(brbeg:brend)%radiInput%nPol = int(vals(16)+0.5_rfreal)
221  ENDIF
222  IF (defined(17)) THEN
223  regions(brbeg:brend)%radiInput%nAzi = int(vals(17)+0.5_rfreal)
224  ENDIF
225  IF (defined(18)) THEN
226  regions(brbeg:brend)%radiInput%nAng = int(vals(18)+0.5_rfreal)
227  ENDIF
228 
229  rewind(if_input, err=10)
230  DO
231  READ(if_input,'(A256)',err=10,end=79) sectionline
232 
233  SELECT CASE(trim(sectionline))
234  CASE ('# RADIATION')
235  CALL readstringsection( global,if_input,2,keys(nvals-1:nvals), &
236  line(1:2),defined(nvals-1:nvals) )
237  END SELECT
238  ENDDO
239 
240 79 CONTINUE
241 
242  IF (defined(19) .AND. defined(nvals-1)) THEN
243  regions(brbeg:brend)%radiInput%line(1) = line(1)
244  ELSE
245  regions(brbeg:brend)%radiInput%nAng = 1
246  regions(brbeg:brend)%radiInput%line(1) = '45'
247  ENDIF
248  IF (defined(20) .AND. defined(nvals)) THEN
249  regions(brbeg:brend)%radiInput%line(2) = line(2)
250  ELSE
251  regions(brbeg:brend)%radiInput%nAng = 1
252  regions(brbeg:brend)%radiInput%line(2) = '45'
253  ENDIF
254 #endif
255 
256 #ifdef RFLU
257  CALL readsection( global,if_input,nvals-2,keys(1:nvals-2),vals(1:nvals-2), &
258  defined(1:nvals-2) )
259 
260  IF (defined(1)) THEN
261  radiinput%radiModel = nint(vals(1))
262  END IF
263  IF (defined(2)) THEN
264  IF (nint(vals(2)) <= 1) THEN
265  radiinput%media = radi_media_artif
266  ELSE
267  radiinput%media = radi_media_real
268  ENDIF
269  ENDIF
270  IF (defined(3)) THEN
271  IF (nint(vals(3)) <= 0) THEN
272  radiinput%fluxLim = fld_lim_none
273  ELSE
274  radiinput%fluxLim = fld_lim_lp
275  ENDIF
276  ENDIF
277 
278  IF (defined(4)) THEN
279  radiinput%smoocf = vals(4)
280  ENDIF
281 
282  IF (defined(5)) THEN
283  radiinput%spaceDiscr = nint(vals(5))
284  ENDIF
285 
286  IF (defined(6)) THEN
287  radiinput%vis2 = abs(vals(6))
288  ENDIF
289 
290  IF (defined(7)) THEN
291  IF (vals(7) > 1.e-10_rfreal) THEN
292  radiinput%vis4 = 1._rfreal/vals(7)
293  ELSEIF (vals(7) > 0._rfreal .AND. vals(7) <= 1.e-10_rfreal) THEN
294  radiinput%vis4 = 1.e+10_rfreal
295  ELSEIF (vals(7) <= 0._rfreal ) THEN
296  radiinput%vis4 = 0.0_rfreal
297  ENDIF
298  ENDIF
299 
300  IF (defined(8)) THEN
301  radiinput%spaceOrder = nint(vals(8))
302  ENDIF
303 
304  IF (defined(9)) &
305  radiinput%optConst(phase_prop_v,radi_phase_conpart)= abs(vals(9))
306  IF (defined(10)) &
307  radiinput%optConst(phase_prop_d,radi_phase_conpart)= abs(vals(10))
308  IF (defined(11)) &
309  radiinput%optConst(phase_prop_q,radi_phase_conpart)= abs(vals(11))
310  IF (defined(12)) &
311  radiinput%optConst(phase_prop_v,radi_phase_dispart)= abs(vals(12))
312  IF (defined(13)) &
313  radiinput%optConst(phase_prop_d,radi_phase_dispart)= abs(vals(13))
314  IF (defined(14)) &
315  radiinput%optConst(phase_prop_q,radi_phase_dispart)= abs(vals(14))
316 
317  IF (defined(15)) THEN
318  radiinput%solMethod = nint(vals(15))
319  END IF
320 
321  IF (defined(16)) THEN
322  radiinput%nPol = nint(vals(16))
323  END IF
324 
325  IF (defined(17)) THEN
326  radiinput%nAzi = nint(vals(17))
327  END IF
328 
329  IF (defined(18)) THEN
330  radiinput%nAng = nint(vals(18))
331  END IF
332 
333  rewind(if_input, err=10)
334  DO
335  READ(if_input,'(A256)',err=10,end=89) sectionline
336 
337  SELECT CASE(trim(sectionline))
338  CASE ('# RADIATION')
339  CALL readstringsection( global,if_input,2,keys(nvals-1:nvals), &
340  line(1:2),defined(nvals-1:nvals) )
341  END SELECT
342  ENDDO
343 
344 89 CONTINUE
345 
346  IF (defined(19) .AND. defined(nvals-1)) THEN
347  radiinput%line(1) = line(1)
348  ELSE
349  radiinput%nAng = 1
350  radiinput%line(1) = '45'
351  ENDIF
352  IF (defined(20) .AND. defined(nvals)) THEN
353  radiinput%line(2) = line(2)
354  ELSE
355  radiinput%nAng = 1
356  radiinput%line(2) = '45'
357  ENDIF
358 #endif
359 
360 ! finalize -------------------------------------------------------
361 
362  goto 999
363 
364 ! error handling
365 
366 10 CONTINUE
367  CALL errorstop( global,err_file_read,__line__, &
368  'reading Radiation section in Input File' )
369 
370 999 CONTINUE
371 
372  CALL deregisterfunction( global )
373 
374 END SUBROUTINE radi_readradisection
375 
376 !******************************************************************************
377 !
378 ! RCS Revision history:
379 !
380 ! $Log: RADI_ReadRadiSection.F90,v $
381 ! Revision 1.4 2008/12/06 08:44:38 mtcampbe
382 ! Updated license.
383 !
384 ! Revision 1.3 2008/11/19 22:17:50 mtcampbe
385 ! Added Illinois Open Source License/Copyright
386 !
387 ! Revision 1.2 2004/09/30 17:10:42 wasistho
388 ! prepared for full FLD radiation model
389 !
390 ! Revision 1.1 2004/09/22 02:35:50 wasistho
391 ! changed file nomenclature from lower to upper case
392 !
393 ! Revision 1.6 2004/09/22 01:30:58 wasistho
394 ! switch LFD to FLD for flux limited diffusion
395 !
396 ! Revision 1.5 2004/09/18 17:41:04 wasistho
397 ! install Limited Flux Diffusion radiation
398 !
399 ! Revision 1.4 2003/07/30 22:23:55 wasistho
400 ! enter part and smoke data into radiation
401 !
402 ! Revision 1.3 2003/07/23 03:13:36 wasistho
403 ! cured baby illness
404 !
405 ! Revision 1.2 2003/07/18 01:39:31 wasistho
406 ! removed bcModel from input data structure
407 !
408 ! Revision 1.1 2003/07/17 01:16:59 wasistho
409 ! initial activation rocrad
410 !
411 !
412 !
413 !******************************************************************************
414 
415 
416 
417 
418 
419 
420 
CImg< T > & line(const unsigned int y0)
Get a line.
Definition: CImg.h:18421
subroutine readstringsection(global, fileID, nvals, keys, vals, defined)
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE brbeg
subroutine readsection(global, fileID, nvals, keys, vals, defined)
subroutine readregionsection(global, fileID, nvals, keys, vals, brbeg, brend, defined)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE USE ModDataTypes USE nvals
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
subroutine deregisterfunction(global)
Definition: ModError.F90:469