Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
rfluconv.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: Driver routine for rfluconv.
26 !
27 ! Description: None.
28 !
29 ! Input:
30 ! caseString String with casename
31 ! stampString String with iteration or time stamp
32 ! verbLevel Verbosity level
33 !
34 ! Output: None.
35 !
36 ! Notes: None.
37 !
38 ! ******************************************************************************
39 !
40 ! $Id: rfluconv.F90,v 1.6 2008/12/06 08:44:55 mtcampbe Exp $
41 !
42 ! Copyright: (c) 2003-2005 by the University of Illinois
43 !
44 ! ******************************************************************************
45 
46 SUBROUTINE rfluconv(caseString,stampString,verbLevel)
47 
48  USE modglobal, ONLY: t_global
49  USE moderror
50  USE moddatatypes
51  USE moddatastruct, ONLY: t_level,t_region
52  USE modparameters
53 
57  USE rflu_modfacelist
58  USE rflu_modgeometry
63  USE rflu_modstl
64  USE rflu_modtetmesh
65 
79 
80  IMPLICIT NONE
81 
82 ! ******************************************************************************
83 ! Definitions and declarations
84 ! ******************************************************************************
85 
86 ! ==============================================================================
87 ! Arguments
88 ! ==============================================================================
89 
90  CHARACTER(*) :: casestring,stampstring
91  INTEGER, INTENT(IN) :: verblevel
92 
93 ! ==============================================================================
94 ! Locals
95 ! ==============================================================================
96 
97  CHARACTER(CHRLEN) :: casename,nregions,rcsidentstring,stamp
98  INTEGER, PARAMETER :: conv_rflu2rflu_asc2bin_grid = 10, &
99  conv_rflu2rflu_asc2bin_gridflow = 11, &
100  conv_rflu2rflu_bin2asc_grid = 20, &
101  conv_rflu2rflu_bin2asc_gridflow = 21, &
102  conv_rflu2tetm_grid = 40, &
103  conv_rflu2stl_grid = 50
104  INTEGER :: convoption,errorflag,ireg
105  TYPE(t_region), POINTER :: pregion
106  TYPE(t_global), POINTER :: global
107  TYPE(t_level), POINTER :: levels(:)
108 
109 !******************************************************************************
110 
111  rcsidentstring = '$RCSfile: rfluconv.F90,v $ $Revision: 1.6 $'
112 
113 ! ******************************************************************************
114 ! Start, initialize global data
115 ! ******************************************************************************
116 
117  ALLOCATE(global,stat=errorflag)
118  IF ( errorflag /= err_none ) THEN
119  WRITE(stderr,'(A,1X,A)') solver_name,'ERROR - Pointer allocation failed.'
120  stop
121  END IF ! errorFlag
122 
123  casename = casestring(1:len(casestring))
124  stamp = stampstring(1:len(stampstring))
125 
126  CALL rflu_initglobal(casename,verblevel,crazy_value_int,global)
127 
128  CALL registerfunction(global,'main', &
129  'rfluconv.F90')
130 
131 ! ******************************************************************************
132 ! Print header
133 ! ******************************************************************************
134 
135  CALL rflu_writeversionstring(global)
136  CALL rflu_printheader(global)
137 
138 ! ******************************************************************************
139 ! Get conversion option
140 ! ******************************************************************************
141 
142  WRITE(stdout,'(A,1X,A)') solver_name,'Options:'
143  WRITE(stdout,'(A,3X,A)') solver_name, &
144  'Convert Rocflu files from ASCII to binary format:'
145  WRITE(stdout,'(A,5X,I2,A)') solver_name,conv_rflu2rflu_asc2bin_grid, &
146  ': Grid file only'
147  WRITE(stdout,'(A,5X,I2,A)') solver_name,conv_rflu2rflu_asc2bin_gridflow, &
148  ': Grid and flow file'
149  WRITE(stdout,'(A,3X,A)') solver_name, &
150  'Convert Rocflu files from binary to ASCII format:'
151  WRITE(stdout,'(A,5X,I2,A)') solver_name,conv_rflu2rflu_bin2asc_grid, &
152  ': Grid file only'
153  WRITE(stdout,'(A,5X,I2,A)') solver_name,conv_rflu2rflu_bin2asc_gridflow, &
154  ': Grid and flow file'
155  WRITE(stdout,'(A,3X,A)') solver_name, &
156  'Convert Rocflu grid file to surface grid:'
157  WRITE(stdout,'(A,5X,I2,A)') solver_name,conv_rflu2tetm_grid, &
158  ': Tetmesh/YAMS surface grid (msh2 format)'
159  WRITE(stdout,'(A,5X,I2,A)') solver_name,conv_rflu2stl_grid, &
160  ': STL surface grid'
161  WRITE(stdout,'(A,1X,A)') solver_name,'Enter selection:'
162 
163  READ(stdin,*) convoption
164 
165 ! ******************************************************************************
166 ! Read mapping file and impose serial mapping
167 ! ******************************************************************************
168 
169  CALL rflu_readregionmappingfile(global,mapfile_readmode_peek,global%myProcId)
170  CALL rflu_setregionmappingserial(global)
171  CALL rflu_createregionmapping(global,maptype_reg)
172  CALL rflu_imposeregionmappingserial(global)
173 
174 ! ******************************************************************************
175 ! Prepare data structure
176 ! ******************************************************************************
177 
178  CALL rflu_builddatastruct(global,levels)
179  CALL rflu_applyregionmapping(global,levels)
180  CALL rflu_destroyregionmapping(global,maptype_reg)
181 
182 ! ******************************************************************************
183 ! Read input file
184 ! ******************************************************************************
185 
186  CALL rflu_getuserinput(levels(1)%regions,.true.)
187 
188  IF ( global%flowType == flow_steady ) THEN
189  READ(stamp,*) global%currentIter
190  ELSE
191  READ(stamp,*) global%currentTime
192  END IF ! global%flowType
193 
194 ! ******************************************************************************
195 ! Read dimensions and allocate memory
196 ! ******************************************************************************
197 
198  IF ( global%nRegions == 1 ) THEN ! single region
199  pregion => levels(1)%regions(0)
200 
201  CALL rflu_readdimensions(pregion)
202  CALL rflu_creategrid(pregion)
203 
204  IF ( pregion%grid%nPatches > 0 ) THEN
205  CALL rflu_readbcinputfilewrapper(pregion)
206  END IF ! pRegion%grid%nPatches
207 
208  CALL rflu_allocmemsolwrapper(pregion)
209  CALL rflu_setvarinfowrapper(pregion)
210  ELSE ! multiple regions
211  DO ireg = 1,global%nRegionsLocal
212  pregion => levels(1)%regions(ireg)
213 
214  CALL rflu_readdimensions(pregion)
215  CALL rflu_creategrid(pregion)
216 
217  IF ( pregion%grid%nPatches > 0 ) THEN
218  CALL rflu_readbcinputfilewrapper(pregion)
219  END IF ! pRegion%grid%nPatches
220 
221  CALL rflu_allocmemsolwrapper(pregion)
222  CALL rflu_setvarinfowrapper(pregion)
223  END DO ! iReg
224  END IF ! global%nRegions
225 
226 ! ******************************************************************************
227 ! Convert
228 ! ******************************************************************************
229 
230  SELECT CASE ( convoption )
231 
232 ! ==============================================================================
233 ! Rocflu files from ASCII to binary - NOTE that the gridFormat and solutFormat
234 ! variables are overridden.
235 ! ==============================================================================
236 
237 ! ------------------------------------------------------------------------------
238 ! Grid file only
239 ! ------------------------------------------------------------------------------
240 
241  CASE (conv_rflu2rflu_asc2bin_grid)
242  IF ( global%nRegions == 1 ) THEN ! single region
243  pregion => levels(1)%regions(0)
244 
245  pregion%global%gridFormat = format_ascii
246  CALL rflu_readgridwrapper(pregion)
247 
248  IF ( global%verbLevel > verbose_none ) THEN
249  CALL rflu_printgridinfo(pregion)
250  END IF ! global%verbLevel
251 
252  pregion%global%gridFormat = format_binary
253  CALL rflu_writegridwrapper(pregion)
254  ELSE ! multiple regions
255  DO ireg = 1,global%nRegionsLocal
256  pregion => levels(1)%regions(ireg)
257 
258  pregion%global%gridFormat = format_ascii
259  CALL rflu_readgridwrapper(pregion)
260 
261  IF ( global%verbLevel > verbose_none ) THEN
262  CALL rflu_printgridinfo(pregion)
263  END IF ! global%verbLevel
264 
265  pregion%global%gridFormat = format_binary
266  CALL rflu_writegridwrapper(pregion)
267  END DO ! iReg
268  END IF ! global%nRegions
269 
270 ! ------------------------------------------------------------------------------
271 ! Grid and solution files
272 ! ------------------------------------------------------------------------------
273 
274  CASE (conv_rflu2rflu_asc2bin_gridflow)
275  IF ( global%nRegions == 1 ) THEN ! single region
276  pregion => levels(1)%regions(0)
277 
278  pregion%global%gridFormat = format_ascii
279  pregion%global%solutFormat = format_ascii
280  CALL rflu_readgridwrapper(pregion)
281  CALL rflu_readflowwrapper(pregion)
282 
283  IF ( global%verbLevel > verbose_none ) THEN
284  CALL rflu_printgridinfo(pregion)
285  CALL rflu_printflowinfo(pregion)
286  END IF ! global%verbLevel
287 
288  pregion%global%gridFormat = format_binary
289  pregion%global%solutFormat = format_binary
290 
291  CALL rflu_writegridwrapper(pregion)
292  CALL rflu_writeflowwrapper(pregion)
293  ELSE ! multiple regions
294  DO ireg = 1,global%nRegionsLocal
295  pregion => levels(1)%regions(ireg)
296 
297  pregion%global%gridFormat = format_ascii
298  pregion%global%solutFormat = format_ascii
299  CALL rflu_readgridwrapper(pregion)
300  CALL rflu_readflowwrapper(pregion)
301 
302  IF ( global%verbLevel > verbose_none ) THEN
303  CALL rflu_printgridinfo(pregion)
304  CALL rflu_printflowinfo(pregion)
305  END IF ! global%verbLevel
306 
307  pregion%global%gridFormat = format_binary
308  pregion%global%solutFormat = format_binary
309 
310  CALL rflu_writegridwrapper(pregion)
311  CALL rflu_writeflowwrapper(pregion)
312  END DO ! iReg
313  END IF ! global%nRegions
314 
315 ! ==============================================================================
316 ! Rocflu files from binary to ASCII - NOTE that the gridFormat and solutFormat
317 ! variables are overridden.
318 ! ==============================================================================
319 
320 ! ------------------------------------------------------------------------------
321 ! Grid file only
322 ! ------------------------------------------------------------------------------
323 
324  CASE (conv_rflu2rflu_bin2asc_grid)
325  IF ( global%nRegions == 1 ) THEN ! single region
326  pregion => levels(1)%regions(0)
327 
328  pregion%global%gridFormat = format_binary
329  CALL rflu_readgridwrapper(pregion)
330 
331  IF ( global%verbLevel > verbose_none ) THEN
332  CALL rflu_printgridinfo(pregion)
333  END IF ! global%verbLevel
334 
335  pregion%global%gridFormat = format_ascii
336  CALL rflu_writegridwrapper(pregion)
337  ELSE ! multiple regions
338  DO ireg = 1,global%nRegionsLocal
339  pregion => levels(1)%regions(ireg)
340 
341  pregion%global%gridFormat = format_binary
342  CALL rflu_readgridwrapper(pregion)
343 
344  IF ( global%verbLevel > verbose_none ) THEN
345  CALL rflu_printgridinfo(pregion)
346  END IF ! global%verbLevel
347 
348  pregion%global%gridFormat = format_ascii
349  CALL rflu_writegridwrapper(pregion)
350  END DO ! iReg
351  END IF ! global%nRegions
352 
353 ! ------------------------------------------------------------------------------
354 ! Grid and solution files
355 ! ------------------------------------------------------------------------------
356 
357  CASE (conv_rflu2rflu_bin2asc_gridflow)
358  IF ( global%nRegions == 1 ) THEN ! single region
359  pregion => levels(1)%regions(0)
360 
361  pregion%global%gridFormat = format_binary
362  pregion%global%solutFormat = format_binary
363  CALL rflu_readgridwrapper(pregion)
364  CALL rflu_readflowwrapper(pregion)
365 
366  IF ( global%verbLevel > verbose_none ) THEN
367  CALL rflu_printgridinfo(pregion)
368  CALL rflu_printflowinfo(pregion)
369  END IF ! global%verbLevel
370 
371  pregion%global%gridFormat = format_ascii
372  pregion%global%solutFormat = format_ascii
373 
374  CALL rflu_writegridwrapper(pregion)
375  CALL rflu_writeflowwrapper(pregion)
376  ELSE ! multiple regions
377  DO ireg = 1,global%nRegionsLocal
378  pregion => levels(1)%regions(ireg)
379 
380  pregion%global%gridFormat = format_binary
381  pregion%global%solutFormat = format_binary
382  CALL rflu_readgridwrapper(pregion)
383  CALL rflu_readflowwrapper(pregion)
384 
385  IF ( global%verbLevel > verbose_none ) THEN
386  CALL rflu_printgridinfo(pregion)
387  CALL rflu_printflowinfo(pregion)
388  END IF ! global%verbLevel
389 
390  pregion%global%gridFormat = format_ascii
391  pregion%global%solutFormat = format_ascii
392 
393  CALL rflu_writegridwrapper(pregion)
394  CALL rflu_writeflowwrapper(pregion)
395  END DO ! iReg
396  END IF ! global%nRegions
397 
398 ! ==============================================================================
399 ! Convert Rocflu grid to surface grid
400 ! ==============================================================================
401 
402 ! ------------------------------------------------------------------------------
403 ! Tetmesh/YAMS .msh2 format
404 ! ------------------------------------------------------------------------------
405 
406  CASE (conv_rflu2tetm_grid)
407  IF ( global%nRegions == 1 ) THEN ! single region
408  pregion => levels(1)%regions(0)
409 
410  CALL rflu_readgridwrapper(pregion)
411 
412  IF ( global%verbLevel > verbose_none ) THEN
413  CALL rflu_printgridinfo(pregion)
414  END IF ! global%verbLevel
415 
416  CALL rflu_createcellmapping(pregion)
417  CALL rflu_readloc2globcellmapping(pregion)
418  CALL rflu_buildglob2loccellmapping(pregion)
419 
420  CALL rflu_createbvertexlists(pregion)
421  CALL rflu_buildbvertexlists(pregion)
422 
423  CALL rflu_createfacelist(pregion)
424  CALL rflu_buildfacelist(pregion)
425  CALL rflu_renumberbfacelists(pregion)
426 
427  CALL rflu_convrocflu2tetmesh(pregion)
428  CALL rflu_writesurfgridtetmesh(pregion)
429 
430  CALL rflu_destroyfacelist(pregion)
431  CALL rflu_destroybvertexlists(pregion)
432  CALL rflu_destroycellmapping(pregion)
433  ELSE ! multiple regions, must not happen
434  CALL errorstop(global,err_reached_default,__line__)
435  END IF ! global%nRegions
436 
437 ! ------------------------------------------------------------------------------
438 ! STL format
439 ! ------------------------------------------------------------------------------
440 
441  CASE (conv_rflu2stl_grid)
442  IF ( global%nRegions == 1 ) THEN ! single region
443  pregion => levels(1)%regions(0)
444 
445  CALL rflu_readgridwrapper(pregion)
446 
447  IF ( global%verbLevel > verbose_none ) THEN
448  CALL rflu_printgridinfo(pregion)
449  END IF ! global%verbLevel
450 
451  CALL rflu_createcellmapping(pregion)
452  CALL rflu_readloc2globcellmapping(pregion)
453  CALL rflu_buildglob2loccellmapping(pregion)
454 
455  CALL rflu_createbvertexlists(pregion)
456  CALL rflu_buildbvertexlists(pregion)
457 
458  CALL rflu_createfacelist(pregion)
459  CALL rflu_buildfacelist(pregion)
460  CALL rflu_renumberbfacelists(pregion)
461 
462  CALL rflu_creategeometry(pregion)
463  CALL rflu_buildgeometry(pregion)
464 
465  CALL rflu_stl_writesurfgridascii(pregion)
466 
467  CALL rflu_destroygeometry(pregion)
468  CALL rflu_destroyfacelist(pregion)
469  CALL rflu_destroybvertexlists(pregion)
470  CALL rflu_destroycellmapping(pregion)
471  ELSE ! multiple regions, must not happen
472  CALL errorstop(global,err_reached_default,__line__)
473  END IF ! global%nRegions
474 
475 ! ==============================================================================
476 ! Default
477 ! ==============================================================================
478 
479  CASE default
480  CALL errorstop(global,err_reached_default,__line__)
481  END SELECT ! convOption
482 
483 ! ******************************************************************************
484 ! Deallocate memory for solution and grid
485 ! ******************************************************************************
486 
487  IF ( global%nRegions == 1 ) THEN ! single region
488  pregion => levels(1)%regions(0)
489 
490  CALL rflu_deallocmemsolwrapper(pregion)
491  CALL rflu_destroygrid(pregion)
492  ELSE ! multiple regions
493  DO ireg = 1,global%nRegionsLocal
494  pregion => levels(1)%regions(ireg)
495 
496  CALL rflu_deallocmemsolwrapper(pregion)
497  CALL rflu_destroygrid(pregion)
498  END DO ! iReg
499  END IF ! global%nRegions
500 
501 ! *****************************************************************************
502 ! Print info about warnings
503 ! *****************************************************************************
504 
505  CALL rflu_printwarninfo(global)
506 
507 ! ******************************************************************************
508 ! End
509 ! ******************************************************************************
510 
511  CALL deregisterfunction(global)
512 
513 END SUBROUTINE rfluconv
514 
515 ! ******************************************************************************
516 !
517 ! RCS Revision history:
518 !
519 ! $Log: rfluconv.F90,v $
520 ! Revision 1.6 2008/12/06 08:44:55 mtcampbe
521 ! Updated license.
522 !
523 ! Revision 1.5 2008/11/19 22:18:05 mtcampbe
524 ! Added Illinois Open Source License/Copyright
525 !
526 ! Revision 1.4 2006/02/06 23:55:54 haselbac
527 ! Added comm argument to RFLU_InitGlobal
528 !
529 ! Revision 1.3 2005/07/07 03:51:09 haselbac
530 ! Added STL conversion, some clean-up
531 !
532 ! Revision 1.2 2005/05/03 03:09:09 haselbac
533 ! Converted to C++ reading of command-line, fixed bug in formats
534 !
535 ! Revision 1.1 2005/04/18 14:57:56 haselbac
536 ! Initial revision
537 !
538 ! ******************************************************************************
539 
540 
541 
542 
543 
544 
545 
subroutine rflu_creategrid(pRegion)
subroutine, public rflu_buildbvertexlists(pRegion)
subroutine, public rflu_writesurfgridtetmesh(pRegion)
subroutine rflu_destroygrid(pRegion)
subroutine rflu_printwarninfo(global)
subroutine, public rflu_destroyregionmapping(global, mapType)
subroutine, public rflu_destroyfacelist(pRegion)
subroutine, public rflu_writeflowwrapper(pRegion)
subroutine, public rflu_convrocflu2tetmesh(pRegion)
subroutine, public rflu_destroygeometry(pRegion)
subroutine rflu_getuserinput(regions, inPrep)
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
subroutine, public rflu_readgridwrapper(pRegion)
subroutine rflu_printheader(global)
subroutine, public rflu_buildgeometry(pRegion, sypeFaceFlag)
subroutine, public rflu_readbcinputfilewrapper(pRegion)
subroutine rflu_setvarinfowrapper(pRegion)
subroutine, public rflu_setregionmappingserial(global)
subroutine, public rflu_readloc2globcellmapping(pRegion)
subroutine, public rflu_createfacelist(pRegion)
subroutine, public rflu_buildglob2loccellmapping(pRegion)
subroutine rflu_deallocmemsolwrapper(pRegion)
subroutine, public rflu_buildfacelist(pRegion)
subroutine, public rflu_renumberbfacelists(pRegion)
subroutine, public rflu_readregionmappingfile(global, readMode, myProcId)
subroutine rflu_printflowinfo(pRegion)
subroutine, public rflu_destroycellmapping(pRegion)
subroutine rflu_builddatastruct(global, levels)
subroutine, public rflu_readflowwrapper(pRegion)
subroutine, public rflu_writegridwrapper(pRegion)
subroutine rflu_allocmemsolwrapper(pRegion)
subroutine, public rflu_stl_writesurfgridascii(pRegion)
Definition: RFLU_ModSTL.F90:98
subroutine, public rflu_destroybvertexlists(pRegion)
subroutine, public rflu_createbvertexlists(pRegion)
subroutine rfluconv(caseString, stampString, verbLevel)
Definition: rfluconv.F90:46
subroutine rflu_printgridinfo(pRegion)
subroutine, public rflu_readdimensions(pRegion)
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
subroutine, public rflu_createcellmapping(pRegion)
subroutine deregisterfunction(global)
Definition: ModError.F90:469
subroutine, public rflu_creategeometry(pRegion)
subroutine rflu_writeversionstring(global)
subroutine, public rflu_applyregionmapping(global, levels)
subroutine rflu_initglobal(casename, verbLevel, communicator, global)
subroutine, public rflu_imposeregionmappingserial(global)
subroutine, public rflu_createregionmapping(global, mapType)