Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
INRT_ReadMaterialInput.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 related to physical materials.
26 !
27 ! Description: None.
28 !
29 ! Input:
30 ! global Pointer to global data
31 !
32 ! Output: None.
33 !
34 ! Notes: None.
35 !
36 ! *****************************************************************************
37 !
38 ! $Id: INRT_ReadMaterialInput.F90,v 1.5 2008/12/06 08:44:32 mtcampbe Exp $
39 !
40 ! Copyright: (c) 2003-2005 by the University of Illinois
41 !
42 ! *****************************************************************************
43 
44 SUBROUTINE inrt_readmaterialinput(global)
45 
46  USE moddatatypes
47  USE modglobal, ONLY: t_global
48  USE modmaterials
49  USE moderror
50  USE modparameters
51 
53 
55 
56  IMPLICIT NONE
57 
58 ! ******************************************************************************
59 ! Declarations and definitions
60 ! ******************************************************************************
61 
62 ! ==============================================================================
63 ! Arguments
64 ! ==============================================================================
65 
66  TYPE(t_global), POINTER :: global
67 
68 ! ==============================================================================
69 ! Locals
70 ! ==============================================================================
71 
72  INTEGER, PARAMETER :: nstrkeys_max = 5
73  INTEGER, PARAMETER :: nkeys_max = 20
74  LOGICAL :: strdefined(nstrkeys_max),defined(nkeys_max)
75  CHARACTER(20) :: strkeys(nstrkeys_max),keys(nkeys_max)
76  CHARACTER(256) :: line
77  CHARACTER(CHRLEN) :: rcsidentstring,strvals(nstrkeys_max)
78  CHARACTER(CHRLEN) :: fname
79  INTEGER :: errorflag,nmat,ikeymolw,ikeydens,ikeyspht,ikeysurftens, &
80  ikeytboil,ikeytmelt,imat,ipass,istrkeyname,istrkeyphase, &
81  nstrkeys,nkeys
82  REAL(RFREAL) :: vals(nkeys_max)
83  TYPE(t_material), POINTER :: material
84 
85 ! ******************************************************************************
86 ! Start
87 ! ******************************************************************************
88 
89  rcsidentstring = '$RCSfile: INRT_ReadMaterialInput.F90,v $ $Revision: 1.5 $'
90 
91  CALL registerfunction( global,'INRT_ReadMaterialInput',&
92  'INRT_ReadMaterialInput.F90' )
93 
94 ! ******************************************************************************
95 ! Define keys for string-valued quantities
96 ! ******************************************************************************
97 
98  istrkeyname = 1
99  istrkeyphase = 2
100  nstrkeys = 2
101 
102  IF ( nstrkeys > nstrkeys_max ) THEN
103  CALL errorstop(global,err_exceeds_decl_mem,__line__)
104  END IF ! nStrKeys
105 
106  strkeys(istrkeyname) = 'NAME'
107  strkeys(istrkeyphase) = 'PHASE'
108 
109 ! ******************************************************************************
110 ! Define keys for real-valued quantities
111 ! ******************************************************************************
112 
113  ikeymolw = 1
114  ikeydens = 2
115  ikeyspht = 3
116  ikeysurftens = 4
117  ikeytboil = 5
118  ikeytmelt = 6
119  nkeys = 6
120 
121  IF ( nkeys > nkeys_max ) THEN
122  CALL errorstop(global,err_exceeds_decl_mem,__line__)
123  END IF ! nKeys
124 
125  keys(ikeymolw) = 'MOLW'
126  keys(ikeydens) = 'DENS'
127  keys(ikeyspht) = 'SPHT'
128  keys(ikeysurftens) = 'SURFTENS'
129  keys(ikeytboil) = 'TBOIL'
130  keys(ikeytmelt) = 'TMELT'
131 
132 ! ******************************************************************************
133 ! Search for MATERIAL sections
134 ! ******************************************************************************
135 
136  CALL buildfilenameplain(global,filedest_indir,'.inp',fname)
137 
138  DO ipass = 1,2
139 
140 ! ==============================================================================
141 ! Open file
142 ! ==============================================================================
143 
144  OPEN(if_input,file=trim(fname),form='FORMATTED',status='OLD', &
145  iostat=errorflag)
146  global%error = errorflag
147  IF ( global%error /= err_none ) THEN
148  CALL errorstop(global,err_file_open,__line__,'File: '//trim(fname))
149  END IF ! global%error
150 
151 ! ==============================================================================
152 ! Read file looking for keywords
153 ! ==============================================================================
154 
155  SELECT CASE ( ipass )
156 
157 ! -----------------------------------------------------------------------------
158 ! First pass: Count number of material sections and allocate materials
159 ! -----------------------------------------------------------------------------
160 
161  CASE ( 1 )
162  nmat = 0 ! initialize count of materials
163 
164  DO
165  READ(if_input,'(A256)',err=10,end=86) line
166  IF ( trim(line) == '# MATERIAL' ) THEN
167  nmat = nmat + 1
168  END IF ! TRIM
169  END DO ! <empty>
170 
171 86 CONTINUE
172 
173  IF ( nmat > 0 ) THEN
174  ALLOCATE(global%materials(nmat),stat=errorflag)
175  global%error = errorflag
176  IF ( global%error /= err_none ) THEN
177  CALL errorstop(global,err_allocate,__line__)
178  END IF ! global%error
179  ELSE
180  nullify(global%materials)
181  END IF ! nMat
182 
183  global%nMaterials = nmat
184 
185 ! -----------------------------------------------------------------------------
186 ! Second pass: Search for real- and string-valued keys
187 ! -----------------------------------------------------------------------------
188 
189  CASE ( 2 )
190  imat = 0 ! initialize index of materials
191 
192  DO
193  READ(if_input,'(A256)',err=10,end=87) line
194 
195  IF ( trim(line) == '# MATERIAL' ) THEN
196  imat = imat + 1
197  material => global%materials(imat)
198 
199 ! --------- Set values to indicate the status of undefined --------------------
200 
201  material%molw = -1.0_rfreal
202  material%dens = -1.0_rfreal
203  material%spht = -1.0_rfreal
204  material%surftens = -1.0_rfreal
205  material%Tboil = -1.0_rfreal
206  material%Tmelt = -1.0_rfreal
207  material%Phase = -1
208 
209 ! --------- Read real- and string-valued keys ---------------------------------
210 
211  CALL readbothsection(global,if_input,nkeys,nstrkeys,keys, &
212  strkeys,vals,strvals,defined,strdefined)
213 
214 ! --------- ensure that material is named -------------------------------------
215 
216  IF ( strdefined(istrkeyname) .EQV. .true. ) THEN
217  material%name = trim(strvals(istrkeyname))
218  ELSE
219  CALL errorstop(global,err_val_undefined,__line__)
220  END IF ! strDefined(iStrKeyName)
221 
222 ! --------- Set material phase ------------------------------------------------
223 
224  IF ( strdefined(istrkeyphase) .EQV. .true. ) THEN
225  SELECT CASE ( strvals(istrkeyphase)(1:1) )
226  CASE ( 'G','g' )
227  material%phase = 1
228  CASE ( 'L','l' )
229  material%phase = 2
230  CASE ( 'S','s' )
231  material%phase = 3
232  CASE default
233  CALL errorstop(global,err_reached_default,__line__)
234  END SELECT ! strVals
235  END IF ! strDefined
236 
237 ! --------- Set material index to iMat (its index in global%materials(:)) -----
238 
239  material%index = imat
240 
241 ! --------- Set real-valued quantities ----------------------------------------
242 
243  IF ( defined(ikeymolw) .EQV. .true. ) THEN
244  material%molw = vals(ikeymolw)
245  ELSE
246  CALL errorstop(global,err_val_undefined,__line__,'MOLW')
247  END IF ! defined(iKeyMolw)
248 
249  IF ( defined(ikeydens) .EQV. .true. ) THEN
250  material%dens = vals(ikeydens)
251  ELSE
252  IF ( material%phase /= 1 ) THEN
253  CALL errorstop(global,err_val_undefined,__line__,'DENS')
254  END IF ! material%phase
255  END IF ! defined(iKeyDens)
256 
257  IF ( defined(ikeyspht) .EQV. .true. ) THEN
258  material%spht = vals(ikeyspht)
259  ELSE
260  CALL errorstop(global,err_val_undefined,__line__,'SPHT')
261  END IF ! defined(iKeySpht)
262 
263  IF ( defined(ikeysurftens) .EQV. .true. ) THEN
264  material%surftens = vals(ikeysurftens)
265  END IF ! defined(iKeySurfTens)
266 
267  IF ( defined(ikeytboil) .EQV. .true. ) THEN
268  material%Tboil = vals(ikeytboil)
269  END IF ! defined(iKeyTboil)
270 
271  IF ( defined(ikeytmelt) .EQV. .true. ) THEN
272  material%Tmelt = vals(ikeytmelt)
273  END IF ! defined(iKeyTmelt)
274  END IF ! line
275  END DO ! <empty>
276 
277 87 CONTINUE
278 
279 ! -----------------------------------------------------------------------------
280 ! Default
281 ! -----------------------------------------------------------------------------
282 
283  CASE default
284  CALL errorstop(global,err_reached_default,__line__)
285  END SELECT ! iPass
286 
287 ! ==============================================================================
288 ! Close file
289 ! ==============================================================================
290 
291  CLOSE(if_input,iostat=errorflag)
292  global%error = errorflag
293  IF ( global%error /= err_none ) THEN
294  CALL errorstop(global,err_file_close,__line__,'File: '//trim(fname))
295  END IF ! global%error
296  END DO ! iPass
297 
298 ! ******************************************************************************
299 ! End
300 ! ******************************************************************************
301 
302  CALL deregisterfunction(global)
303 
304  goto 999
305 
306 10 CONTINUE
307  CALL errorstop(global,err_file_read,__line__,'File: '//trim(fname))
308 
309 999 CONTINUE
310 
311 END SUBROUTINE inrt_readmaterialinput
312 
313 ! *****************************************************************************
314 !
315 ! RCS Revision history:
316 !
317 ! $Log: INRT_ReadMaterialInput.F90,v $
318 ! Revision 1.5 2008/12/06 08:44:32 mtcampbe
319 ! Updated license.
320 !
321 ! Revision 1.4 2008/11/19 22:17:44 mtcampbe
322 ! Added Illinois Open Source License/Copyright
323 !
324 ! Revision 1.3 2005/11/14 17:01:44 haselbac
325 ! Added check for DENS, clean-up
326 !
327 ! Revision 1.2 2005/11/10 02:32:35 haselbac
328 ! Clean-up
329 !
330 ! Revision 1.1 2004/12/01 21:56:39 fnajjar
331 ! Initial revision after changing case
332 !
333 ! Revision 1.6 2004/07/27 21:28:32 jferry
334 ! minor bug fix
335 !
336 ! Revision 1.5 2004/07/23 22:43:17 jferry
337 ! Integrated rocspecies into rocinteract
338 !
339 ! Revision 1.4 2004/04/15 16:04:21 jferry
340 ! minor formatting (removed trailing spaces)
341 !
342 ! Revision 1.3 2004/03/02 21:49:46 jferry
343 ! Added melting and boiling point to material definitions
344 !
345 ! Revision 1.2 2003/09/13 20:17:31 fnajjar
346 ! Added surface tension to Materials datastructure
347 !
348 ! Revision 1.1 2003/03/24 23:23:25 jferry
349 ! converted from libfloflu routine to rocinteract routine
350 !
351 ! *****************************************************************************
352 
353 
354 
355 
356 
357 
358 
subroutine readbothsection(global, fileID, nvals, nStrVals, keys, strKeys, vals, strVals, defined, strDefined)
CImg< T > & line(const unsigned int y0)
Get a line.
Definition: CImg.h:18421
subroutine inrt_readmaterialinput(global)
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
int status() const
Obtain the status of the attribute.
Definition: Attribute.h:240
subroutine buildfilenameplain(global, dest, ext, fileName)
**********************************************************************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 form
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
subroutine deregisterfunction(global)
Definition: ModError.F90:469