Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RFLU_ModTETMESH.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: Collection of routines to read and convert TETMESH grids.
26 !
27 ! Description: None.
28 !
29 ! Notes: None.
30 !
31 ! ******************************************************************************
32 !
33 ! $Id: RFLU_ModTETMESH.F90,v 1.8 2008/12/06 08:44:24 mtcampbe Exp $
34 !
35 ! Copyright: (c) 2004-2006 by the University of Illinois
36 !
37 ! ******************************************************************************
38 
40 
41  USE modparameters
42  USE moddatatypes
43  USE moderror
44  USE modglobal, ONLY: t_global
45  USE modgrid, ONLY: t_grid
46  USE modbndpatch, ONLY: t_patch
47  USE moddatastruct, ONLY: t_region
48  USE modmpi
49 
51 
53 
54  IMPLICIT NONE
55 
56 ! ******************************************************************************
57 ! Declarations and definitions
58 ! ******************************************************************************
59 
60  PRIVATE
61 
62 ! ==============================================================================
63 ! Data
64 ! ==============================================================================
65 
66  CHARACTER(CHRLEN) :: &
67  RCSIdentString = '$RCSfile: RFLU_ModTETMESH.F90,v $ $Revision: 1.8 $'
68 
70  INTEGER :: nBFaces,nBQuads,nBTris,nBVert
71  INTEGER, DIMENSION(:), POINTER :: bf2p,bv
72  INTEGER, DIMENSION(:,:), POINTER :: bf2v
73  END TYPE t_gridtetmesh
74 
75  TYPE(t_gridtetmesh) :: gridTETMESH
76 
77 ! ==============================================================================
78 ! Public procedures
79 ! ==============================================================================
80 
81  PUBLIC :: rflu_convrocflu2tetmesh, &
85 
86 ! ******************************************************************************
87 ! Routines
88 ! ******************************************************************************
89 
90  CONTAINS
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 ! ******************************************************************************
101 !
102 ! Purpose: Convert grid format from ROCFLU to TETMESH.
103 !
104 ! Description: None.
105 !
106 ! Input:
107 ! pRegion Pointer to region
108 !
109 ! Output: None.
110 !
111 ! Notes: None.
112 !
113 ! ******************************************************************************
114 
115  SUBROUTINE rflu_convrocflu2tetmesh(pRegion)
116 
118 
119  IMPLICIT NONE
120 
121 ! ******************************************************************************
122 ! Declarations and definitions
123 ! ******************************************************************************
124 
125 ! ==============================================================================
126 ! Arguments
127 ! ==============================================================================
128 
129  TYPE(t_region), POINTER :: pregion
130 
131 ! ==============================================================================
132 ! Local variables
133 ! ==============================================================================
134 
135  INTEGER :: errorflag,ifl,ipatch,iv
136  TYPE(t_global), POINTER :: global
137  TYPE(t_grid), POINTER :: pgrid,pgridtetmesh
138  TYPE(t_patch), POINTER :: ppatch,ppatchtetmesh
139  TYPE(t_region), TARGET :: regiontetmesh
140  TYPE(t_region), POINTER :: pregiontetmesh
141 
142 ! ******************************************************************************
143 ! Start
144 ! ******************************************************************************
145 
146  global => pregion%global
147 
148  CALL registerfunction(global,'RFLU_ConvROCFLU2TETMESH', &
149  'RFLU_ModTETMESH.F90')
150 
151  IF ( global%verbLevel > verbose_none ) THEN
152  WRITE(stdout,'(A,1X,A)') solver_name, &
153  'Converting from ROCFLU to TETMESH format...'
154  END IF ! global%verbLevel
155 
156 ! ==============================================================================
157 ! Set grid pointer and initialize variables
158 ! ==============================================================================
159 
160  pgrid => pregion%grid
161 
162 ! ******************************************************************************
163 ! Convert patch data structure. NOTE treat combined boundary within the
164 ! Rocflu data structure so that can use the boundary-vertex list routines
165 ! (which require pRegion as argument and corresponding data), then copy over
166 ! into gridTETMESH data structure.
167 ! ******************************************************************************
168 
169  pregiontetmesh => regiontetmesh
170  pgridtetmesh => pregiontetmesh%grid
171 
172  pregiontetmesh%global => global
173 
174 ! ==============================================================================
175 ! Fill relevant data of pRegionTETMESH so can use boundary-vertex list
176 ! routines
177 ! ==============================================================================
178 
179 ! ------------------------------------------------------------------------------
180 ! Patch data structure
181 ! ------------------------------------------------------------------------------
182 
183  pgridtetmesh%nPatches = 1
184 
185  ALLOCATE(pregiontetmesh%patches(pgridtetmesh%nPatches),stat=errorflag)
186  global%error = errorflag
187  IF ( global%error /= err_none ) THEN
188  CALL errorstop(global,err_allocate,__line__,'pRegionTETMESH%patches')
189  END IF ! global%error
190 
191 ! ------------------------------------------------------------------------------
192 ! Patch dimensions
193 ! ------------------------------------------------------------------------------
194 
195  gridtetmesh%nBTris = 0
196  gridtetmesh%nBQuads = 0
197 
198  DO ipatch = 1,pgrid%nPatches
199  ppatch => pregion%patches(ipatch)
200 
201  gridtetmesh%nBTris = gridtetmesh%nBTris + ppatch%nBTris
202  gridtetmesh%nBQuads = gridtetmesh%nBQuads + ppatch%nBQuads
203  END DO ! iPatch
204 
205  gridtetmesh%nBFaces = gridtetmesh%nBTris + gridtetmesh%nBQuads
206 
207  ppatchtetmesh => regiontetmesh%patches(pgridtetmesh%nPatches)
208 
209  ppatchtetmesh%nBTris = gridtetmesh%nBTris
210  ppatchtetmesh%nBQuads = gridtetmesh%nBQuads
211  ppatchtetmesh%nBFaces = gridtetmesh%nBFaces
212  ppatchtetmesh%nBVert = 0
213  ppatchtetmesh%nBTrisTot = ppatchtetmesh%nBTris
214  ppatchtetmesh%nBQuadsTot = ppatchtetmesh%nBQuads
215  ppatchtetmesh%nBFacesTot = ppatchtetmesh%nBFaces
216  ppatchtetmesh%nBVertTot = 0
217 
218 ! ------------------------------------------------------------------------------
219 ! Allocate memory for face connectivity and fill in
220 ! ------------------------------------------------------------------------------
221 
222  IF ( ppatchtetmesh%nBTris > 0 ) THEN
223  ALLOCATE(ppatchtetmesh%bTri2v(3,gridtetmesh%nBTris),stat=errorflag)
224  global%error = errorflag
225  IF ( global%error /= err_none ) THEN
226  CALL errorstop(global,err_allocate,__line__,'pPatchTETMESH%bTri2v')
227  END IF ! global%error
228  END IF ! pPatchTETMESH%nBTris
229 
230  IF ( ppatchtetmesh%nBQuads > 0 ) THEN
231  ALLOCATE(ppatchtetmesh%bQuad2v(4,gridtetmesh%nBQuads),stat=errorflag)
232  global%error = errorflag
233  IF ( global%error /= err_none ) THEN
234  CALL errorstop(global,err_allocate,__line__,'pPatchTETMESH%bQuad2v')
235  END IF ! global%error
236  END IF ! pPatchTETMESH%nBQuads
237 
238  ALLOCATE(ppatchtetmesh%bf2v(4,gridtetmesh%nBFaces),stat=errorflag)
239  global%error = errorflag
240  IF ( global%error /= err_none ) THEN
241  CALL errorstop(global,err_allocate,__line__,'pPatchTETMESH%bf2v')
242  END IF ! global%error
243 
244  ALLOCATE(gridtetmesh%bf2p(gridtetmesh%nBFaces),stat=errorflag)
245  global%error = errorflag
246  IF ( global%error /= err_none ) THEN
247  CALL errorstop(global,err_allocate,__line__,'gridTETMESH%bf2p')
248  END IF ! global%error
249 
250 ! ------------------------------------------------------------------------------
251 ! Denumber face list
252 ! ------------------------------------------------------------------------------
253 
254  CALL rflu_denumberbfacelists(pregion)
255 
256 ! ------------------------------------------------------------------------------
257 ! Fill in face connectivity
258 ! ------------------------------------------------------------------------------
259 
260  gridtetmesh%nBTris = 0
261  gridtetmesh%nBQuads = 0
262  gridtetmesh%nBFaces = 0
263 
264  DO ipatch = 1,pgrid%nPatches
265  ppatch => pregion%patches(ipatch)
266 
267  IF ( ppatch%nBTris > 0 ) THEN
268  DO ifl = 1,ppatch%nBTris
269  gridtetmesh%nBTris = gridtetmesh%nBTris + 1
270  ppatchtetmesh%bTri2v(1,gridtetmesh%nBTris) = ppatch%bTri2v(1,ifl)
271  ppatchtetmesh%bTri2v(2,gridtetmesh%nBTris) = ppatch%bTri2v(2,ifl)
272  ppatchtetmesh%bTri2v(3,gridtetmesh%nBTris) = ppatch%bTri2v(3,ifl)
273  END DO ! ifl
274  END IF ! pPatch%nBTris
275 
276  IF ( ppatch%nBQuads > 0 ) THEN
277  DO ifl = 1,ppatch%nBQuads
278  gridtetmesh%nBQuads = gridtetmesh%nBQuads + 1
279  ppatchtetmesh%bQuad2v(1,gridtetmesh%nBQuads) = ppatch%bQuad2v(1,ifl)
280  ppatchtetmesh%bQuad2v(2,gridtetmesh%nBQuads) = ppatch%bQuad2v(2,ifl)
281  ppatchtetmesh%bQuad2v(3,gridtetmesh%nBQuads) = ppatch%bQuad2v(3,ifl)
282  ppatchtetmesh%bQuad2v(4,gridtetmesh%nBQuads) = ppatch%bQuad2v(4,ifl)
283  END DO ! ifl
284  END IF ! pPatch%nBQuads
285 
286  DO ifl = 1,ppatch%nBFaces
287  gridtetmesh%nBFaces = gridtetmesh%nBFaces + 1
288  ppatchtetmesh%bf2v(1,gridtetmesh%nBFaces) = ppatch%bf2v(1,ifl)
289  ppatchtetmesh%bf2v(2,gridtetmesh%nBFaces) = ppatch%bf2v(2,ifl)
290  ppatchtetmesh%bf2v(3,gridtetmesh%nBFaces) = ppatch%bf2v(3,ifl)
291  ppatchtetmesh%bf2v(4,gridtetmesh%nBFaces) = ppatch%bf2v(4,ifl)
292 
293  gridtetmesh%bf2p(gridtetmesh%nBFaces) = ipatch
294  END DO ! ifl
295  END DO ! iPatch
296 
297 ! ==============================================================================
298 ! Build patch vertex lists and renumber boundary face lists
299 ! ==============================================================================
300 
301  CALL rflu_createbvertexlists(pregiontetmesh)
302  CALL rflu_buildbvertexlists(pregiontetmesh)
303  CALL rflu_renumberbfacelists(pregiontetmesh)
304 
305  gridtetmesh%nBVert = pregiontetmesh%patches(1)%nBVert
306 
307 ! ==============================================================================
308 ! Copy lists into gridTETMESH data structure
309 ! ==============================================================================
310 
311  ALLOCATE(gridtetmesh%bf2v(4,gridtetmesh%nBFaces),stat=errorflag)
312  global%error = errorflag
313  IF ( global%error /= err_none ) THEN
314  CALL errorstop(global,err_allocate,__line__,'gridTETMESH%bf2v')
315  END IF ! global%error
316 
317  ALLOCATE(gridtetmesh%bv(gridtetmesh%nBVert),stat=errorflag)
318  global%error = errorflag
319  IF ( global%error /= err_none ) THEN
320  CALL errorstop(global,err_allocate,__line__,'gridTETMESH%bv')
321  END IF ! global%error
322 
323  DO ifl = 1,gridtetmesh%nBFaces
324  gridtetmesh%bf2v(1,ifl) = ppatchtetmesh%bf2v(1,ifl)
325  gridtetmesh%bf2v(2,ifl) = ppatchtetmesh%bf2v(2,ifl)
326  gridtetmesh%bf2v(3,ifl) = ppatchtetmesh%bf2v(3,ifl)
327  gridtetmesh%bf2v(4,ifl) = ppatchtetmesh%bf2v(4,ifl)
328  END DO ! ifl
329 
330  DO iv = 1,gridtetmesh%nBVert
331  gridtetmesh%bv(iv) = ppatchtetmesh%bv(iv)
332  END DO ! iv
333 
334  CALL rflu_destroybvertexlists(pregiontetmesh)
335 
336 ! ==============================================================================
337 ! Deallocate temporary memory
338 ! ==============================================================================
339 
340  IF ( ppatchtetmesh%nBTris > 0 ) THEN
341  DEALLOCATE(ppatchtetmesh%bTri2v,stat=errorflag)
342  global%error = errorflag
343  IF ( global%error /= err_none ) THEN
344  CALL errorstop(global,err_deallocate,__line__,'pPatchTETMESH%bTri2v')
345  END IF ! global%error
346  END IF ! pPatchTETMESH%nBTris
347 
348  IF ( ppatchtetmesh%nBQuads > 0 ) THEN
349  DEALLOCATE(ppatchtetmesh%bQuad2v,stat=errorflag)
350  global%error = errorflag
351  IF ( global%error /= err_none ) THEN
352  CALL errorstop(global,err_deallocate,__line__,'pPatchTETMESH%bQuad2v')
353  END IF ! global%error
354  END IF ! pPatchTETMESH%nBQuads
355 
356  DEALLOCATE(ppatchtetmesh%bf2v,stat=errorflag)
357  global%error = errorflag
358  IF ( global%error /= err_none ) THEN
359  CALL errorstop(global,err_deallocate,__line__,'pPatchTETMESH%bf2v')
360  END IF ! global%error
361 
362  DEALLOCATE(pregiontetmesh%patches,stat=errorflag)
363  global%error = errorflag
364  IF ( global%error /= err_none ) THEN
365  CALL errorstop(global,err_deallocate,__line__,'pRegionTETMESH%patches')
366  END IF ! global%error
367 
368 ! ******************************************************************************
369 ! End
370 ! ******************************************************************************
371 
372  IF ( global%verbLevel > verbose_none ) THEN
373  WRITE(stdout,'(A,1X,A)') solver_name, &
374  'Converting from ROCFLU to TETMESH format done.'
375  END IF ! global%verbLevel
376 
377  CALL deregisterfunction(global)
378 
379  END SUBROUTINE rflu_convrocflu2tetmesh
380 
381 
382 
383 
384 
385 
386 
387 
388 ! ******************************************************************************
389 !
390 ! Purpose: Convert grid format from TETMESH to ROCFLU.
391 !
392 ! Description: None.
393 !
394 ! Input:
395 ! pRegion Pointer to region
396 !
397 ! Output: None.
398 !
399 ! Notes:
400 ! 1. The .tmi file is written by rfluconv and contains a single integer
401 ! which is equal to the number of boundary patches. Knowing this quantity
402 ! makes the conversion easier because it is not necessary to determine
403 ! the number of boundary patches from the .faces file.
404 !
405 ! ******************************************************************************
406 
407  SUBROUTINE rflu_convtetmesh2rocflu(pRegion)
408 
409  IMPLICIT NONE
410 
411 ! ******************************************************************************
412 ! Declarations and definitions
413 ! ******************************************************************************
414 
415 ! ==============================================================================
416 ! Arguments
417 ! ==============================================================================
418 
419  TYPE(t_region), POINTER :: pregion
420 
421 ! ==============================================================================
422 ! Local variables
423 ! ==============================================================================
424 
425  CHARACTER(CHRLEN) :: ifilename
426  INTEGER :: dummyinteger,errorflag,i,ic,ifc,ifile,ifl,ipatch
427  INTEGER, DIMENSION(3) :: dummyintegerarray(3)
428  TYPE(t_grid), POINTER :: pgrid
429  TYPE(t_patch), POINTER :: ppatch
430  TYPE(t_global), POINTER :: global
431 
432 ! ******************************************************************************
433 ! Start
434 ! ******************************************************************************
435 
436  global => pregion%global
437 
438  CALL registerfunction(global,'RFLU_ConvTETMESH2ROCFLU', &
439  'RFLU_ModTETMESH.F90')
440 
441  IF ( global%verbLevel > verbose_none ) THEN
442  WRITE(stdout,'(A,1X,A)') solver_name, &
443  'Converting from TETMESH to ROCFLU format...'
444  END IF ! global%verbLevel
445 
446 ! ==============================================================================
447 ! Set grid pointer and initialize variables
448 ! ==============================================================================
449 
450  pgrid => pregion%grid
451 
452  pgrid%nEdges = 0
453  pgrid%nEdgesTot = 0
454 
455  pgrid%nFaces = 0
456  pgrid%nFacesTot = 0
457 
458 ! ******************************************************************************
459 ! Read information file (generated by rfluconv)
460 ! ******************************************************************************
461 
462  IF ( global%verbLevel > verbose_none ) THEN
463  WRITE(stdout,'(A,3X,A)') solver_name,'Reading TETMESH information file...'
464  END IF ! global%verbLevel
465 
466  ifile = if_grid
467 
468  CALL buildfilenameplain(global,filedest_indir,'.tmi',ifilename)
469 
470  OPEN(ifile,file=ifilename,form="FORMATTED",status="OLD",iostat=errorflag)
471  global%error = errorflag
472  IF ( global%error /= err_none ) THEN
473  CALL errorstop(global,err_file_open,__line__,ifilename)
474  END IF ! global%error
475 
476  READ(ifile,*) pgrid%nPatches
477 
478  CLOSE(ifile,iostat=errorflag)
479  global%error = errorflag
480  IF ( global%error /= err_none ) THEN
481  CALL errorstop(global,err_file_close,__line__,ifilename)
482  END IF ! global%error
483 
484  IF ( global%verbLevel > verbose_none ) THEN
485  WRITE(stdout,'(A,3X,A)') solver_name, &
486  'Reading TETMESH information file done.'
487  END IF ! global%verbLevel
488 
489 ! ******************************************************************************
490 ! Allocate boundary patch data structure
491 ! ******************************************************************************
492 
493  ALLOCATE(pregion%patches(pgrid%nPatches),stat=errorflag)
494  global%error = errorflag
495  IF ( global%error /= err_none ) THEN
496  CALL errorstop(global,err_allocate,__line__,'pRegion%patches')
497  END IF ! global%error
498 
499  DO ipatch = 1,pgrid%nPatches
500  ppatch => pregion%patches(ipatch)
501 
502  ppatch%nBFaces = 0
503  ppatch%nBTris = 0
504  ppatch%nBQuads = 0
505  ppatch%nBVert = 0
506 
507  ppatch%iPatchGlobal = ipatch
508  ppatch%iBorder = patch_iborder_default
509  ppatch%renumFlag = .false.
510  END DO ! iPatch
511 
512 ! ******************************************************************************
513 ! Read boundary face file (generated by rfluconv). NOTE do not read second
514 ! (reserved integer) on first line from file because YAMS does not write it.
515 ! ******************************************************************************
516 
517  IF ( global%verbLevel > verbose_none ) THEN
518  WRITE(stdout,'(A,3X,A)') solver_name,'Reading .faces file...'
519  END IF ! global%verbLevel
520 
521  ifile = if_grid
522 
523  CALL buildfilenameplain(global,filedest_indir,'.faces',ifilename)
524 
525  OPEN(ifile,file=ifilename,form="FORMATTED",status="OLD",iostat=errorflag)
526  global%error = errorflag
527  IF ( global%error /= err_none ) THEN
528  CALL errorstop(global,err_file_open,__line__,ifilename)
529  END IF ! global%error
530 
531  READ(ifile,*) gridtetmesh%nBFaces
532 
533  ALLOCATE(gridtetmesh%bf2v(3,gridtetmesh%nBFaces),stat=errorflag)
534  global%error = errorflag
535  IF ( global%error /= err_none ) THEN
536  CALL errorstop(global,err_allocate,__line__,'gridTETMESH%bf2v')
537  END IF ! global%error
538 
539  ALLOCATE(gridtetmesh%bf2p(gridtetmesh%nBFaces),stat=errorflag)
540  global%error = errorflag
541  IF ( global%error /= err_none ) THEN
542  CALL errorstop(global,err_allocate,__line__,'gridTETMESH%bf2v')
543  END IF ! global%error
544 
545  gridtetmesh%nBTris = gridtetmesh%nBFaces
546  gridtetmesh%nBQuads = 0
547 
548  DO ifc = 1,gridtetmesh%nBFaces
549  READ(if_grid,*) dummyinteger,gridtetmesh%bf2v(1:3,ifc), &
550  gridtetmesh%bf2p(ifc),dummyintegerarray(1:3)
551  END DO ! ifc
552 
553  CLOSE(ifile,iostat=errorflag)
554  global%error = errorflag
555  IF ( global%error /= err_none ) THEN
556  CALL errorstop(global,err_file_close,__line__,ifilename)
557  END IF ! global%error
558 
559  IF ( global%verbLevel > verbose_none ) THEN
560  WRITE(stdout,'(A,3X,A)') solver_name,'Reading .faces file done.'
561  END IF ! global%verbLevel
562 
563 ! ******************************************************************************
564 ! Convert boundary face data structure
565 ! ******************************************************************************
566 
567  IF ( global%verbLevel > verbose_none ) THEN
568  WRITE(stdout,'(A,3X,A)') solver_name,'Converting boundary faces...'
569  END IF ! global%verbLevel
570 
571  DO ifc = 1,gridtetmesh%nBFaces
572  ppatch => pregion%patches(gridtetmesh%bf2p(ifc))
573 
574  ppatch%nBTris = ppatch%nBTris + 1
575  ppatch%nBFaces = ppatch%nBFaces + 1
576  END DO ! ifc
577 
578 ! ------------------------------------------------------------------------------
579 ! Set total boundary patch quantities and number of boundary faces
580 ! ------------------------------------------------------------------------------
581 
582  pgrid%nBFaces = 0
583 
584  DO ipatch = 1,pgrid%nPatches
585  ppatch => pregion%patches(ipatch)
586 
587  ppatch%nBFaces = ppatch%nBTris + ppatch%nBQuads
588  pgrid%nBFaces = pgrid%nBFaces + ppatch%nBFaces
589 
590  ppatch%nBFacesTot = ppatch%nBFaces
591  ppatch%nBQuadsTot = ppatch%nBQuads
592  ppatch%nBTrisTot = ppatch%nBTris
593  ppatch%nBVertTot = ppatch%nBVert
594 
595  ppatch%nBTrisMax = rflu_setmaxdimension(global,ppatch%nBTrisTot)
596  ppatch%nBQuadsMax = rflu_setmaxdimension(global,ppatch%nBQuadsTot)
597  ppatch%nBFacesMax = rflu_setmaxdimension(global,ppatch%nBFacesTot)
598  ppatch%nBVertMax = rflu_setmaxdimension(global,ppatch%nBVertTot)
599 
600  ppatch%nBCellsVirt = 0
601  END DO ! iPatch
602 
603  pgrid%nBFacesTot = pgrid%nBFaces
604 
605 ! ------------------------------------------------------------------------------
606 ! Build face list
607 ! ------------------------------------------------------------------------------
608 
609  DO ipatch = 1,pgrid%nPatches
610  ppatch => pregion%patches(ipatch)
611 
612  ALLOCATE(ppatch%bTri2v(3,ppatch%nBTrisMax),stat=errorflag)
613  global%error = errorflag
614  IF ( global%error /= err_none ) THEN
615  CALL errorstop(global,err_allocate,__line__,'pPatch%bTri2v')
616  END IF ! global%error
617 
618  ppatch%nBTris = 0
619  END DO ! iPatch
620 
621  DO ifc = 1,gridtetmesh%nBFaces
622  ppatch => pregion%patches(gridtetmesh%bf2p(ifc))
623 
624  ppatch%nBTris = ppatch%nBTris + 1
625 
626  ppatch%bTri2v(1,ppatch%nBTris) = gridtetmesh%bf2v(1,ifc)
627  ppatch%bTri2v(2,ppatch%nBTris) = gridtetmesh%bf2v(2,ifc)
628  ppatch%bTri2v(3,ppatch%nBTris) = gridtetmesh%bf2v(3,ifc)
629  END DO ! ifc
630 
631  DEALLOCATE(gridtetmesh%bf2v,stat=errorflag)
632  global%error = errorflag
633  IF ( global%error /= err_none ) THEN
634  CALL errorstop(global,err_deallocate,__line__,'gridTETMESH%bf2v')
635  END IF ! global%error
636 
637  DEALLOCATE(gridtetmesh%bf2p,stat=errorflag)
638  global%error = errorflag
639  IF ( global%error /= err_none ) THEN
640  CALL errorstop(global,err_deallocate,__line__,'gridTETMESH%bf2v')
641  END IF ! global%error
642 
643  IF ( global%verbLevel > verbose_none ) THEN
644  WRITE(stdout,'(A,3X,A)') solver_name,'Converting boundary faces done.'
645  END IF ! global%verbLevel
646 
647 ! ******************************************************************************
648 ! Convert connectivity
649 ! ******************************************************************************
650 
651  IF ( global%verbLevel > verbose_none ) THEN
652  WRITE(stdout,'(A,3X,A)') solver_name,'Converting connectivity...'
653  END IF ! global%verbLevel
654 
655  DO ic = 1,pgrid%nTetsTot
656  dummyinteger = pgrid%tet2v(2,ic)
657  pgrid%tet2v(2,ic) = pgrid%tet2v(3,ic)
658  pgrid%tet2v(3,ic) = dummyinteger
659  END DO ! ic
660 
661  IF ( global%verbLevel > verbose_none ) THEN
662  WRITE(stdout,'(A,3X,A)') solver_name,'Converting connectivity done.'
663  END IF ! global%verbLevel
664 
665 ! ******************************************************************************
666 ! Set/allocate remaining quantities
667 ! ******************************************************************************
668 
669  global%nPatches = pgrid%nPatches
670 
671 ! ==============================================================================
672 ! Initialize other cell types
673 ! ==============================================================================
674 
675  pgrid%nHexsTot = 0
676  pgrid%nPrisTot = 0
677  pgrid%nPyrsTot = 0
678 
679  pgrid%nHexs = pgrid%nHexsTot
680  pgrid%nPris = pgrid%nPrisTot
681  pgrid%nPyrs = pgrid%nPyrsTot
682 
683 ! *****************************************************************************
684 ! Allocate memory for boundary face lists bf2c and bf2v
685 ! *****************************************************************************
686 
687  DO ipatch = 1,pgrid%nPatches
688  ppatch => pregion%patches(ipatch)
689 
690  ALLOCATE(ppatch%bf2c(ppatch%nBFacesMax),stat=errorflag)
691  global%error = errorflag
692  IF ( global%error /= err_none ) THEN
693  CALL errorstop(global,err_allocate,__line__,'pPatch%bf2c')
694  END IF ! global%error
695 
696  ALLOCATE(ppatch%bf2v(4,ppatch%nBFacesMax),stat=errorflag)
697  global%error = errorflag
698  IF ( global%error /= err_none ) THEN
699  CALL errorstop(global,err_allocate,__line__,'pPatch%bf2v')
700  END IF ! global%error
701 
702  DO ifl = 1,ppatch%nBFacesMax
703  ppatch%bf2v(1,ifl) = vert_none
704  ppatch%bf2v(2,ifl) = vert_none
705  ppatch%bf2v(3,ifl) = vert_none
706  ppatch%bf2v(4,ifl) = vert_none
707  END DO ! ifl
708  END DO ! iPatch
709 
710 ! ******************************************************************************
711 ! End
712 ! ******************************************************************************
713 
714  IF ( global%verbLevel > verbose_none ) THEN
715  WRITE(stdout,'(A,1X,A)') solver_name, &
716  'Converting from TETMESH to ROCFLU format done.'
717  END IF ! global%verbLevel
718 
719  CALL deregisterfunction(global)
720 
721  END SUBROUTINE rflu_convtetmesh2rocflu
722 
723 
724 
725 
726 
727 
728 ! ******************************************************************************
729 !
730 ! Purpose: Read grid file from TETMESH in ASCII format.
731 !
732 ! Description: None.
733 !
734 ! Input:
735 ! pRegion Pointer to region
736 !
737 ! Output: None.
738 !
739 ! Notes:
740 ! 1. Part of the file is read directly into the grid data structure, while
741 ! the remainder needs to be processed in RFLU_ConvTETMESH2ROCFLU.F90.
742 !
743 ! ******************************************************************************
744 
745  SUBROUTINE rflu_readgridtetmesh(pRegion)
746 
747  IMPLICIT NONE
748 
749 ! ******************************************************************************
750 ! Declarations and definitions
751 ! ******************************************************************************
752 
753 ! ==============================================================================
754 ! Arguments
755 ! ==============================================================================
756 
757  TYPE(t_region), POINTER :: pregion
758 
759 ! ==============================================================================
760 ! Local variables
761 ! ==============================================================================
762 
763  CHARACTER(CHRLEN) :: dummystring,ifilename
764  INTEGER :: cvmax,cvmin,dummyinteger,errorflag,i,ic,ifile,iv
765  TYPE(t_grid), POINTER :: pgrid
766  TYPE(t_global), POINTER :: global
767 
768 ! ******************************************************************************
769 ! Start
770 ! ******************************************************************************
771 
772  global => pregion%global
773 
774  CALL registerfunction(global,'RFLU_ReadGridTETMESH', &
775  'RFLU_ModTETMESH.F90')
776 
777  IF ( global%verbLevel > verbose_none ) THEN
778  WRITE(stdout,'(A,1X,A)') solver_name,'Reading TETMESH grid file...'
779  END IF ! global%verbLevel
780 
781 ! ==============================================================================
782 ! Open grid file
783 ! ==============================================================================
784 
785  ifile = if_grid
786 
787  CALL buildfilenameplain(global,filedest_indir,'.noboite',ifilename)
788 
789  OPEN(ifile,file=ifilename,form="FORMATTED",status="OLD",iostat=errorflag)
790  global%error = errorflag
791  IF ( global%error /= err_none ) THEN
792  CALL errorstop(global,err_file_open,__line__,ifilename)
793  END IF ! global%error
794 
795 ! ==============================================================================
796 ! Header
797 ! ==============================================================================
798 
799  IF ( global%verbLevel > verbose_none ) THEN
800  WRITE(stdout,'(A,3X,A)') solver_name,'Header...'
801  END IF ! global%verbLevel
802 
803  pgrid => pregion%grid
804 
805  READ(ifile,*) pgrid%nTetsTot,pgrid%nVertTot
806 
807  pgrid%nTetsMax = rflu_setmaxdimension(global,pgrid%nTetsTot)
808  pgrid%nVertMax = rflu_setmaxdimension(global,pgrid%nVertTot)
809 
810  pgrid%nCellsTot = pgrid%nTetsTot ! TETMESH only generates tetrahedral grids
811  pgrid%nCells = pgrid%nCellsTot
812  pgrid%nTets = pgrid%nTetsTot
813  pgrid%nVert = pgrid%nVertTot
814 
815 ! ==============================================================================
816 ! Connectivity
817 ! ==============================================================================
818 
819  IF ( global%verbLevel > verbose_none ) THEN
820  WRITE(stdout,'(A,3X,A)') solver_name,'Connectivity...'
821  END IF ! global%verbLevel
822 
823  ALLOCATE(pgrid%tet2v(4,pgrid%nTetsMax),stat=errorflag)
824  global%error = errorflag
825  IF ( global%error /= err_none ) THEN
826  CALL errorstop(global,err_allocate,__line__,'pGrid%tet2v')
827  END IF ! global%error
828 
829  READ(ifile,*) ((pgrid%tet2v(i,ic),i=1,4),ic=1,pgrid%nTetsTot)
830 
831 ! ==============================================================================
832 ! Coordinates
833 ! ==============================================================================
834 
835  IF ( global%verbLevel > verbose_none ) THEN
836  WRITE(stdout,'(A,3X,A)') solver_name,'Coordinates...'
837  END IF ! global%verbLevel
838 
839  ALLOCATE(pgrid%xyz(3,pgrid%nVertMax),stat=errorflag)
840  global%error = errorflag
841  IF ( global%error /= err_none ) THEN
842  CALL errorstop(global,err_allocate,__line__,'pGrid%xyz')
843  END IF ! global%error
844 
845  READ(ifile,*) ((pgrid%xyz(i,iv),i=1,3),iv=1,pgrid%nVertTot)
846 
847 ! ==============================================================================
848 ! Close grid file
849 ! ==============================================================================
850 
851  CLOSE(ifile,iostat=errorflag)
852  global%error = errorflag
853  IF ( global%error /= err_none ) THEN
854  CALL errorstop(global,err_file_close,__line__,ifilename)
855  END IF ! global%error
856 
857 ! ==============================================================================
858 ! Checking - only valid for tetrahedral grids, cf. RFLU_ReadGridCENTAUR.F90
859 ! ==============================================================================
860 
861  IF ( global%checkLevel > check_none ) THEN
862  IF ( global%verbLevel > verbose_none ) THEN
863  WRITE(stdout,'(A,3X,A)') solver_name, &
864  'Checking cell connectivity array entries...'
865  END IF ! global%verbLevel
866 
867  cvmin = minval(pgrid%tet2v(1:4,1:pgrid%nTetsTot))
868  cvmax = maxval(pgrid%tet2v(1:4,1:pgrid%nTetsTot))
869 
870  IF ( cvmin /= 1 .OR. cvmax /= pgrid%nVertTot ) THEN
871  IF ( global%verbLevel > verbose_none ) THEN
872  WRITE(stdout,'(A,5X,A)') solver_name,'Check failed.'
873  END IF ! global%verbLevel
874  CALL errorstop(global,err_vertex_number,__line__)
875  END IF ! cvmin
876 
877  IF ( global%verbLevel > verbose_none ) THEN
878  WRITE(stdout,'(A,3X,A)') solver_name, &
879  'Checking cell connectivity array entries done.'
880  END IF ! global%verbLevel
881  END IF ! global%checkLevel
882 
883 ! ******************************************************************************
884 ! Print grid statistics
885 ! ******************************************************************************
886 
887  IF ( global%verbLevel > verbose_none ) THEN
888  WRITE(stdout,'(A,3X,A)') solver_name,'Grid Statistics:'
889  WRITE(stdout,'(A,5X,A,11X,I9)') solver_name,'Vertices: ',pgrid%nVertTot
890  WRITE(stdout,'(A,5X,A,11X,I9)') solver_name,'Tetrahedra:',pgrid%nTetsTot
891  END IF ! global%verbLevel
892 
893 ! ******************************************************************************
894 ! End
895 ! ******************************************************************************
896 
897  IF ( global%verbLevel > verbose_none ) THEN
898  WRITE(stdout,'(A,1X,A)') solver_name,'Reading TETMESH grid file done.'
899  END IF ! global%verbLevel
900 
901  CALL deregisterfunction(global)
902 
903  END SUBROUTINE rflu_readgridtetmesh
904 
905 
906 
907 
908 
909 
910 ! ******************************************************************************
911 !
912 ! Purpose: Write surface grid in ASCII TETMESH/YAMS format.
913 !
914 ! Description: None.
915 !
916 ! Input:
917 ! pRegion Pointer to region
918 !
919 ! Output: None.
920 !
921 ! Notes:
922 ! 1. This routine has the capability to write quadrilateral faces to the
923 ! TETMESH file, but the converter in rfluprep cannot yet handle
924 ! quadrilateral boundary faces. The problem is that TETMESH will convert
925 ! the quadrilateral faces to triangular faces internally, but it does not
926 ! appear to write out a new .faces file, so it is impossible for rfluprep
927 ! to know in which way the faces were split. This knowledge is needed to
928 ! correctly reconstruct the boundary-face list so that it is consistent
929 ! with the tetrahedra.
930 !
931 ! ******************************************************************************
932 
933  SUBROUTINE rflu_writesurfgridtetmesh(pRegion)
934 
935  IMPLICIT NONE
936 
937 ! ******************************************************************************
938 ! Declarations and definitions
939 ! ******************************************************************************
940 
941 ! ==============================================================================
942 ! Arguments
943 ! ==============================================================================
944 
945  TYPE(t_region), POINTER :: pregion
946 
947 ! ==============================================================================
948 ! Local variables
949 ! ==============================================================================
950 
951  CHARACTER(CHRLEN) :: ifilename
952  INTEGER :: dummyinteger,errorflag,ifc,ifctype,ifile,iv
953  INTEGER, DIMENSION(4) :: dummyintegerarray
954  TYPE(t_grid), POINTER :: pgrid
955  TYPE(t_global), POINTER :: global
956 
957 ! ******************************************************************************
958 ! Start
959 ! ******************************************************************************
960 
961  global => pregion%global
962 
963  CALL registerfunction(global,'RFLU_WriteSurfGridTETMESH', &
964  'RFLU_ModTETMESH.F90')
965 
966  IF ( global%myProcid == masterproc .AND. &
967  global%verbLevel > verbose_none ) THEN
968  WRITE(stdout,'(A,1X,A)') solver_name,'Writing TETMESH surface grid...'
969  END IF ! global%verbLevel
970 
971 ! ==============================================================================
972 ! Set pointers and variables
973 ! ==============================================================================
974 
975  pgrid => pregion%grid
976 
977  dummyinteger = 1
978  dummyintegerarray(:) = dummyinteger
979 
980 ! ******************************************************************************
981 ! Writing faces file
982 ! ******************************************************************************
983 
984 ! ==============================================================================
985 ! Open file
986 ! ==============================================================================
987 
988  IF ( global%myProcid == masterproc .AND. &
989  global%verbLevel > verbose_none ) THEN
990  WRITE(stdout,'(A,3X,A)') solver_name,'Writing .faces file...'
991  END IF ! global%verbLevel
992 
993  ifile = if_grid
994 
995  CALL buildfilenameplain(global,filedest_indir,'.faces',ifilename)
996 
997  OPEN(ifile,file=ifilename,form="FORMATTED",status="UNKNOWN", &
998  iostat=errorflag)
999  global%error = errorflag
1000  IF ( global%error /= err_none ) THEN
1001  CALL errorstop(global,err_file_open,__line__,ifilename)
1002  END IF ! global%error
1003 
1004 ! ==============================================================================
1005 ! Write file
1006 ! ==============================================================================
1007 
1008  WRITE(if_grid,*) gridtetmesh%nBFaces,dummyinteger
1009 
1010  DO ifc = 1,gridtetmesh%nBFaces
1011  IF ( gridtetmesh%bf2v(4,ifc) == vert_none ) THEN
1012  ifctype = 3
1013  ELSE
1014  ifctype = 4
1015  END IF ! gridTETMESH%bf2v
1016 
1017  WRITE(if_grid,*) ifctype,gridtetmesh%bf2v(1:ifctype,ifc), &
1018  gridtetmesh%bf2p(ifc),dummyintegerarray(1:ifctype)
1019  END DO ! ifc
1020 
1021 ! ==============================================================================
1022 ! Close file
1023 ! ==============================================================================
1024 
1025  CLOSE(ifile,iostat=errorflag)
1026  global%error = errorflag
1027  IF ( global%myProcid == masterproc .AND. &
1028  global%error /= err_none ) THEN
1029  CALL errorstop(global,err_file_close,__line__,ifilename)
1030  END IF ! global%error
1031 
1032  IF ( global%myProcid == masterproc .AND. &
1033  global%verbLevel > verbose_none ) THEN
1034  WRITE(stdout,'(A,3X,A)') solver_name,'Writing .faces file done.'
1035  END IF ! global%verbLevel
1036 
1037 ! ******************************************************************************
1038 ! Writing points file
1039 ! ******************************************************************************
1040 
1041 ! ==============================================================================
1042 ! Open file
1043 ! ==============================================================================
1044 
1045  IF ( global%myProcid == masterproc .AND. &
1046  global%verbLevel > verbose_none ) THEN
1047  WRITE(stdout,'(A,3X,A)') solver_name,'Writing .points file...'
1048  END IF ! global%verbLevel
1049 
1050  ifile = if_grid
1051 
1052  CALL buildfilenameplain(global,filedest_indir,'.points',ifilename)
1053 
1054  OPEN(ifile,file=ifilename,form="FORMATTED",status="UNKNOWN", &
1055  iostat=errorflag)
1056  global%error = errorflag
1057  IF ( global%error /= err_none ) THEN
1058  CALL errorstop(global,err_file_open,__line__,ifilename)
1059  END IF ! global%error
1060 
1061 ! ==============================================================================
1062 ! Write file
1063 ! ==============================================================================
1064 
1065  WRITE(if_grid,*) gridtetmesh%nBVert
1066 
1067  DO iv = 1,gridtetmesh%nBVert
1068  WRITE(if_grid,*) pgrid%xyz(xcoord:zcoord,iv),dummyinteger
1069  END DO ! iv
1070 
1071 ! ==============================================================================
1072 ! Close file
1073 ! ==============================================================================
1074 
1075  CLOSE(ifile,iostat=errorflag)
1076  global%error = errorflag
1077  IF ( global%myProcid == masterproc .AND. &
1078  global%error /= err_none ) THEN
1079  CALL errorstop(global,err_file_close,__line__,ifilename)
1080  END IF ! global%error
1081 
1082  IF ( global%myProcid == masterproc .AND. &
1083  global%verbLevel > verbose_none ) THEN
1084  WRITE(stdout,'(A,3X,A)') solver_name,'Writing .points file done.'
1085  END IF ! global%verbLevel
1086 
1087 ! ******************************************************************************
1088 ! Writing information file (for ROCFLU use only, in rfluprep)
1089 ! ******************************************************************************
1090 
1091 ! ==============================================================================
1092 ! Open file
1093 ! ==============================================================================
1094 
1095  IF ( global%myProcid == masterproc .AND. &
1096  global%verbLevel > verbose_none ) THEN
1097  WRITE(stdout,'(A,3X,A)') solver_name,'Writing .tmi file...'
1098  END IF ! global%verbLevel
1099 
1100  ifile = if_grid
1101 
1102  CALL buildfilenameplain(global,filedest_indir,'.tmi',ifilename)
1103 
1104  OPEN(ifile,file=ifilename,form="FORMATTED",status="UNKNOWN", &
1105  iostat=errorflag)
1106  global%error = errorflag
1107  IF ( global%error /= err_none ) THEN
1108  CALL errorstop(global,err_file_open,__line__,ifilename)
1109  END IF ! global%error
1110 
1111 ! ==============================================================================
1112 ! Write file
1113 ! ==============================================================================
1114 
1115  WRITE(if_grid,*) pgrid%nPatches
1116 
1117 ! ==============================================================================
1118 ! Close file
1119 ! ==============================================================================
1120 
1121  CLOSE(ifile,iostat=errorflag)
1122  global%error = errorflag
1123  IF ( global%myProcid == masterproc .AND. &
1124  global%error /= err_none ) THEN
1125  CALL errorstop(global,err_file_close,__line__,ifilename)
1126  END IF ! global%error
1127 
1128  IF ( global%myProcid == masterproc .AND. &
1129  global%verbLevel > verbose_none ) THEN
1130  WRITE(stdout,'(A,3X,A)') solver_name,'Writing .tmi file done.'
1131  END IF ! global%verbLevel
1132 
1133 ! ******************************************************************************
1134 ! End
1135 ! ******************************************************************************
1136 
1137  IF ( global%myProcid == masterproc .AND. &
1138  global%verbLevel > verbose_none ) THEN
1139  WRITE(stdout,'(A,1X,A)') solver_name,'Writing TETMESH surface grid done.'
1140  END IF ! global%verbLevel
1141 
1142  CALL deregisterfunction(global)
1143 
1144  END SUBROUTINE rflu_writesurfgridtetmesh
1145 
1146 
1147 
1148 
1149 
1150 
1151 ! ******************************************************************************
1152 ! End
1153 ! ******************************************************************************
1154 
1155 
1156 END MODULE rflu_modtetmesh
1157 
1158 ! ******************************************************************************
1159 !
1160 ! RCS Revision history:
1161 !
1162 ! $Log: RFLU_ModTETMESH.F90,v $
1163 ! Revision 1.8 2008/12/06 08:44:24 mtcampbe
1164 ! Updated license.
1165 !
1166 ! Revision 1.7 2008/11/19 22:17:35 mtcampbe
1167 ! Added Illinois Open Source License/Copyright
1168 !
1169 ! Revision 1.6 2006/04/18 21:02:37 haselbac
1170 ! Fixed checks; bug arose bcos of max-dimensioned arrays for sype
1171 !
1172 ! Revision 1.5 2006/03/25 21:58:45 haselbac
1173 ! Changes because of sype patches
1174 !
1175 ! Revision 1.4 2005/01/20 14:52:29 haselbac
1176 ! Added setting of nBFaces and nBFacesTot
1177 !
1178 ! Revision 1.3 2004/11/03 17:04:32 haselbac
1179 ! Removed code related to vertex and tet flags
1180 !
1181 ! Revision 1.2 2004/10/19 19:28:33 haselbac
1182 ! Rewrote to use new renumbering module
1183 !
1184 ! Revision 1.1 2004/07/06 15:14:33 haselbac
1185 ! Initial revision
1186 !
1187 ! ******************************************************************************
1188 
1189 
1190 
1191 
1192 
1193 
1194 
1195 
1196 
1197 
1198 
1199 
subroutine, public rflu_buildbvertexlists(pRegion)
subroutine, public rflu_writesurfgridtetmesh(pRegion)
subroutine, public rflu_convtetmesh2rocflu(pRegion)
subroutine, public rflu_convrocflu2tetmesh(pRegion)
subroutine registerfunction(global, funName, fileName)
Definition: ModError.F90:449
int status() const
Obtain the status of the attribute.
Definition: Attribute.h:240
**********************************************************************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 ic
subroutine, public rflu_denumberbfacelists(pRegion)
subroutine buildfilenameplain(global, dest, ext, fileName)
blockLoc i
Definition: read.cpp:79
subroutine, public rflu_renumberbfacelists(pRegion)
**********************************************************************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, public rflu_destroybvertexlists(pRegion)
INTEGER function, public rflu_setmaxdimension(global, nXyzTot)
subroutine, public rflu_createbvertexlists(pRegion)
subroutine, public rflu_readgridtetmesh(pRegion)
subroutine errorstop(global, errorCode, errorLine, addMessage)
Definition: ModError.F90:483
subroutine deregisterfunction(global)
Definition: ModError.F90:469