Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RFLO_ReadBcInflowVelSection.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 inflow boundary condition.
26 !
27 ! Description: present inflow bc is based on prescribed velocities and
28 ! either temperature or pressure.
29 !
30 ! Input: boundary condition file.
31 !
32 ! Output: regions = BC data.
33 !
34 ! Notes: none.
35 !
36 !******************************************************************************
37 !
38 ! $Id: RFLO_ReadBcInflowVelSection.F90,v 1.11 2008/12/06 08:44:07 mtcampbe Exp $
39 !
40 ! Copyright: (c) 2001 by the University of Illinois
41 !
42 !******************************************************************************
43 
44 SUBROUTINE rflo_readbcinflowvelsection( regions,bcTitle )
45 
46  USE moddatatypes
47  USE modbndpatch, ONLY : t_patch
48  USE moddatastruct, ONLY : t_region
49  USE modglobal, ONLY : t_global
51  USE moderror
52  USE modparameters
53  IMPLICIT NONE
54 
55 #include "Indexing.h"
56 
57 ! ... parameters
58  TYPE(t_region), POINTER :: regions(:)
59  INTEGER :: bctitle
60 
61 ! ... loop variables
62  INTEGER :: ireg, ipatch
63 
64 ! ... local variables
65  INTEGER, PARAMETER :: nvals_max = 8
66 
67  CHARACTER(10) :: keys(nvals_max)
68  CHARACTER(256) :: fname
69 
70  INTEGER :: nvals, brbeg, brend, prbeg, prend, distrib, switch
71  INTEGER :: n1, n2, ioff, ijbeg, ijend, errorflag
72  INTEGER :: ipnbeg, ipnend, jpnbeg, jpnend, kpnbeg, kpnend
73  INTEGER :: lbound, nijk
74 
75  LOGICAL :: defined(nvals_max)
76 
77  REAL(RFREAL) :: vals(nvals_max)
78 
79  TYPE(t_patch), POINTER :: patch
80  TYPE(t_global), POINTER :: global
81 
82 !******************************************************************************
83 
84  global => regions(1)%global
85 
86  CALL registerfunction( global,'RFLO_ReadBcInflowVelSection',&
87  'RFLO_ReadBcInflowVelSection.F90' )
88 
89 ! specify keywords and search for them ----------------------------------------
90 
91  keys(1) = 'TYPE'
92  keys(2) = 'VELX'
93  keys(3) = 'VELY'
94  keys(4) = 'VELZ'
95  IF (bctitle==bc_inflow_veltemp) THEN
96  keys(5) = 'TEMP'
97  keys(6) = 'PRESS'
98  ELSEIF (bctitle==bc_inflow_velpress) THEN
99  keys(5) = 'PRESS'
100  keys(6) = 'TEMP'
101  ELSE
102  CALL errorstop( global,err_unknown_bc,&
103  __line__ )
104  ENDIF
105  keys(7) = 'RECYCTURB'
106  keys(8) = 'AMPLITUDE'
107 
108  nvals = nvals_max
109 
110  CALL readpatchsection( global,if_input,nvals,keys,vals,brbeg,brend, &
111  prbeg,prend,distrib,fname,defined )
112 
113 
114 ! module consistency check ----------------------------------------------------
115 
116  IF (vals(7) > 0.1_rfreal) THEN
117 #ifdef STATS
118  IF ((global%flowType == flow_unsteady) .AND. &
119  (global%doStat == active) .AND. &
120  (global%mixtNStat > 0)) THEN
121  ELSE
122  CALL errorstop( global,err_val_bcval,&
123  __line__, &
124  'inflow bc parameter RECYCTURB > 0 inconsistent with STATS' )
125  ENDIF
126 #else
127  CALL errorstop( global,err_val_bcval,&
128  __line__, &
129  'Activate STATS for inflow bc parameter RECYCTURB > 0' )
130 #endif
131  ENDIF
132 
133 ! get switches & check if all necessary values defined ------------------------
134 
135  DO ireg=brbeg,brend
136  DO ipatch=prbeg,min(prend,regions(ireg)%nPatches)
137 
138  patch => regions(ireg)%levels(1)%patches(ipatch)
139 
140  IF ((patch%bcType>=bc_inflow .AND. &
141  patch%bcType<=bc_inflow+bc_range) .AND. & ! my boundary type,
142  regions(ireg)%procid==global%myProcid .AND. & ! region active and
143  regions(ireg)%active==active) THEN ! on my processor
144 
145  patch%bcType = bctitle
146 
147  IF (patch%mixt%bcSet .eqv. .true.) &
148  CALL errorstop( global,err_patch_overspec,&
149  __line__,'Inflow boundary.' )
150 
151  patch%mixt%nSwitches = 3
152  IF (patch%bcCoupled == bc_external) THEN ! data from outside
153  patch%mixt%distrib = bcdat_distrib ! => always distribution
154  ELSE
155  patch%mixt%distrib = distrib
156  ENDIF
157 
158  ALLOCATE( patch%mixt%switches(patch%mixt%nSwitches), &
159  stat=errorflag )
160  global%error = errorflag
161  IF (global%error /= 0) CALL errorstop( global,err_allocate,&
162  __line__ )
163 
164 ! ----- check if switch defined
165  IF (defined(1).eqv..true.) THEN
166  patch%mixt%switches(bcswi_inflow_type) = bcopt_subsonic
167  IF (vals(1) < 0.1) &
168  patch%mixt%switches(bcswi_inflow_type) = bcopt_supersonic
169  IF (vals(1) > 1.9) &
170  patch%mixt%switches(bcswi_inflow_type) = bcopt_mixed
171  ELSE
172  CALL errorstop( global,err_no_bcswitch,&
173  __line__,'(inflow type).' )
174  ENDIF
175 
176  patch%mixt%switches(bcswi_inflow_model) = bcopt_steady
177  IF (defined(7).eqv..true.) THEN
178  IF (vals(7) > 0.1) &
179  patch%mixt%switches(bcswi_inflow_model) = bcopt_unsteady
180  ENDIF
181 
182 ! ----- check if appropriate values specified
183  IF (patch%mixt%switches(bcswi_inflow_type) == bcopt_subsonic) THEN
184  IF (patch%mixt%distrib==bcdat_constant .AND. &
185  (.NOT. (defined(2).eqv..true.) .OR. &
186  .NOT. (defined(3).eqv..true.) .OR. &
187  .NOT. (defined(4).eqv..true.) .OR. &
188  .NOT. (defined(5).eqv..true.))) CALL errorstop( global,err_bcval_missing,&
189  __line__ )
190  ENDIF
191  IF (patch%mixt%switches(bcswi_inflow_type) == bcopt_supersonic .OR. &
192  patch%mixt%switches(bcswi_inflow_type) == bcopt_mixed) THEN
193  IF (patch%mixt%distrib==bcdat_constant .AND. &
194  (.NOT. (defined(2).eqv..true.) .OR. &
195  .NOT. (defined(3).eqv..true.) .OR. &
196  .NOT. (defined(4).eqv..true.) .OR. &
197  .NOT. (defined(5).eqv..true.) .OR. &
198  .NOT. (defined(6).eqv..true.))) CALL errorstop( global,err_bcval_missing,&
199  __line__ )
200  ENDIF
201  IF (defined(7).eqv..true.) THEN
202  IF (patch%mixt%switches(bcswi_inflow_model) == bcopt_unsteady) THEN
203  IF (defined(8).eqv..true.) THEN
204  patch%mixt%amplitude = abs( vals(8) )
205  ELSE
206  CALL errorstop( global,err_bcval_missing,&
207  __line__, &
208  'AMPLITUDE should be specified in inflow with recycturb' )
209  ENDIF
210  ENDIF
211  ENDIF
212 
213 ! ----- set flag to BC specified
214  patch%mixt%bcSet = .true.
215 
216  ENDIF ! my BC & processor, active
217  ENDDO
218  ENDDO
219 
220 ! copy values/distribution to variables ---------------------------------------
221 
222  DO ireg=brbeg,brend
223  DO ipatch=prbeg,min(prend,regions(ireg)%nPatches)
224 
225  patch => regions(ireg)%levels(1)%patches(ipatch)
226 
227  IF ((patch%bcType>=bc_inflow .AND. &
228  patch%bcType<=bc_inflow+bc_range) .AND. & ! my boundary type,
229  regions(ireg)%procid==global%myProcid .AND. & ! region active and
230  regions(ireg)%active==active) THEN ! on my processor
231 
232  switch = patch%mixt%switches(bcswi_inflow_type)
233  IF (switch == bcopt_subsonic) THEN
234 ! ----- BUGFIX - Didn't allocate enough for this BC (MTC)
235  patch%mixt%nData = 5
236  ELSE
237  patch%mixt%nData = 5
238  ENDIF
239 
240 ! ----- allocate memory for the values
241 
242  IF (patch%mixt%distrib == bcdat_distrib) THEN
243  n1 = abs(patch%l1end-patch%l1beg)
244  n2 = abs(patch%l2end-patch%l2beg)
245  ioff = n1 + 1
246  ijbeg = indij( 0, 0,ioff)
247  ijend = indij(n1,n2,ioff)
248  ELSE
249  ijbeg = 0
250  ijend = 1
251  ENDIF
252  ALLOCATE( patch%mixt%vals(patch%mixt%nData,ijbeg:ijend), &
253  stat=errorflag )
254  global%error = errorflag
255  IF (global%error /= 0) CALL errorstop( global,err_allocate,&
256  __line__ )
257 
258 ! ----- distribution from file
259 
260  IF (patch%mixt%distrib==bcdat_distrib .AND. &
261  patch%bcCoupled /=bc_external ) THEN
262  WRITE(*,*) 'Reading more bc from file',fname
263  CALL rflo_readbcfromfile( global,fname,patch )
264 
265 ! ----- distribution from external source / constant value
266 
267  ELSE
268 
269  patch%mixt%vals(bcdat_inflow_u,:) = vals(2)
270  patch%mixt%vals(bcdat_inflow_v,:) = vals(3)
271  patch%mixt%vals(bcdat_inflow_w,:) = vals(4)
272  IF (bctitle==bc_inflow_veltemp) THEN
273  patch%mixt%vals(bcdat_inflow_t,:) = vals(5)
274  IF (defined(6).eqv..true.) THEN
275  patch%mixt%vals(bcdat_inflow_p,:) = vals(6)
276  ENDIF
277  ELSEIF (bctitle==bc_inflow_velpress) THEN
278  patch%mixt%vals(bcdat_inflow_p,:) = vals(5)
279  IF (defined(6).eqv..true.) &
280  patch%mixt%vals(bcdat_inflow_t,:) = vals(6)
281  ENDIF
282  ENDIF ! distribution?
283 
284  ENDIF ! bcType, active region on my processor
285 
286  ENDDO ! iPatch
287  ENDDO ! iReg
288 
289 ! search for max ijk-index for turbulence recycling ---------------------------
290 
291  IF (vals(7) > 0.1_rfreal) THEN
292  nijk = global%infloNijk
293  DO ireg=brbeg,brend
294  CALL rflo_getdimensphysnodes( regions(ireg),1,ipnbeg,ipnend, &
295  jpnbeg,jpnend,kpnbeg,kpnend )
296  DO ipatch=prbeg,min(prend,regions(ireg)%nPatches)
297 
298  patch => regions(ireg)%levels(1)%patches(ipatch)
299 
300  IF ((patch%bcType>=bc_inflow .AND. &
301  patch%bcType<=bc_inflow+bc_range) .AND. & ! my boundary type,
302  regions(ireg)%procid==global%myProcid .AND. & ! region active and
303  regions(ireg)%active==active) THEN ! on my processor
304  lbound = patch%lbound
305  IF (lbound==1 .OR. lbound==2) THEN
306  nijk = abs(ipnend-ipnbeg)+1
307  ELSEIF (lbound==3 .OR. lbound==4) THEN
308  nijk = abs(jpnend-jpnbeg)+1
309  ELSEIF (lbound==5 .OR. lbound==6) THEN
310  nijk = abs(kpnend-kpnbeg)+1
311  ENDIF
312  ENDIF ! bcType
313  global%infloNijk = min( global%infloNijk,nijk )
314  ENDDO ! iPatch
315  ENDDO ! iReg
316  global%infloNijk = global%infloNijk/2+1
317  ENDIF ! recycTurb
318 
319 ! finalize --------------------------------------------------------------------
320 
321  CALL deregisterfunction( global )
322 
323 END SUBROUTINE rflo_readbcinflowvelsection
324 
325 !******************************************************************************
326 !
327 ! RCS Revision history:
328 !
329 ! $Log: RFLO_ReadBcInflowVelSection.F90,v $
330 ! Revision 1.11 2008/12/06 08:44:07 mtcampbe
331 ! Updated license.
332 !
333 ! Revision 1.10 2008/11/19 22:17:20 mtcampbe
334 ! Added Illinois Open Source License/Copyright
335 !
336 ! Revision 1.9 2008/10/23 18:20:53 mtcampbe
337 ! Crazy number of changes to track and fix initialization and
338 ! restart bugs. Many improperly formed logical expressions
339 ! were fixed, and bug in allocation for data associated with
340 ! the BC_INFLOWVELTEMP boundary condition squashed in
341 ! RFLO_ReadBcInflowVelSection.F90.
342 !
343 ! Revision 1.8 2006/08/19 15:38:12 mparmar
344 ! Renamed patch variables
345 !
346 ! Revision 1.7 2006/04/13 21:37:43 wasistho
347 ! take half of global%infloNijk
348 !
349 ! Revision 1.6 2006/02/18 08:26:33 wasistho
350 ! fixed reading temperature and pressure
351 !
352 ! Revision 1.5 2005/11/19 03:25:36 wasistho
353 ! bug fixed errorstop reading amplitude
354 !
355 ! Revision 1.4 2005/11/18 07:18:42 wasistho
356 ! added parameter AMPLITUDE
357 !
358 ! Revision 1.3 2005/09/20 23:56:57 wasistho
359 ! modified computation of global%infloNijk
360 !
361 ! Revision 1.2 2005/09/20 23:03:22 wasistho
362 ! added user input RECYCTURB
363 !
364 ! Revision 1.1 2005/04/28 05:48:28 wasistho
365 ! added velocity based inflow BC
366 !
367 !
368 !******************************************************************************
369 
370 
371 
372 
373 
374 
375 
**********************************************************************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 jpnbeg
subroutine rflo_readbcfromfile(global, fname, patch)
**********************************************************************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 kpnbeg
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
**********************************************************************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 jpnend
subroutine readpatchsection(global, fileID, nvals, keys, vals, brbeg, brend, prbeg, prend, distrib, profType, fname, defined)
Definition: patch.h:74
**********************************************************************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 ipnbeg
**********************************************************************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 prend
subroutine rflo_readbcinflowvelsection(regions, bcTitle)
**********************************************************************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 prbeg
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
Definition: Vector_n.h:346
subroutine rflo_getdimensphysnodes(region, iLev, ipnbeg, ipnend, jpnbeg, jpnend, kpnbeg, kpnend)
**********************************************************************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
**********************************************************************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 ipnend