66 CHARACTER(CHRLEN) :: &
67 RCSIdentString =
'$RCSfile: RFLU_ModCOBALT.F90,v $ $Revision: 1.5 $'
70 INTEGER :: nFaces,nFacesPerCellMax,nMappings,nPatches,nQuads,nTris, &
72 INTEGER,
DIMENSION(:),
POINTER :: nvpf
73 INTEGER,
DIMENSION(:,:),
POINTER :: f2c,f2v,patch2bc
141 TYPE(t_region
),
POINTER :: pregion
147 CHARACTER(CHRLEN) :: ifilename
148 INTEGER :: cntr,c1,c2,errorflag,ibegmax,ibegmin,ibeg1,ibeg2,icg,icl, &
149 iendmax,iendmin,iend1,iend2,ifg,ifile,ifl,iloc,imap,imap2, &
150 ipatch,ivg,ivl,
j,v1,v2,v3,v4
151 INTEGER :: flag(4),
key(4),vert(4),verttemp(4)
152 INTEGER,
DIMENSION(:),
ALLOCATABLE :: cellmapp,celltype
153 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: celldegr
154 REAL(RFREAL) :: cofgappx,cofgappy,cofgappz,dotprod,fcenx,fceny,fcenz, &
156 REAL(RFREAL) :: xyznodes(xcoord:zcoord,4)
157 TYPE(t_grid),
POINTER :: pgrid
158 TYPE(t_patch),
POINTER :: ppatch
165 global => pregion%global
168 'RFLU_ModCOBALT.F90')
170 IF ( global%verbLevel > verbose_none )
THEN
171 WRITE(stdout,
'(A,1X,A)') solver_name, &
172 'Converting from COBALT to ROCFLU format...'
179 pgrid => pregion%grid
191 ALLOCATE(celldegr(face_type_tri:face_type_quad,gridcobalt%nFaces), &
193 global%error = errorflag
194 IF ( global%error /= err_none )
THEN
195 CALL
errorstop(global,err_allocate,__line__,
'cellDegr')
198 DO icg = 1,pgrid%nCellsTot
199 celldegr(face_type_tri,icg) = 0
200 celldegr(face_type_quad,icg) = 0
203 ALLOCATE(celltype(pgrid%nCellsTot),stat=errorflag)
204 global%error = errorflag
205 IF ( global%error /= err_none )
THEN
206 CALL
errorstop(global,err_allocate,__line__,
'cellType')
209 ALLOCATE(cellmapp(pgrid%nCellsTot),stat=errorflag)
210 global%error = errorflag
211 IF ( global%error /= err_none )
THEN
212 CALL
errorstop(global,err_allocate,__line__,
'cellMapp')
219 IF ( global%verbLevel > verbose_none )
THEN
220 WRITE(stdout,
'(A,3X,A)') solver_name,
'Determining cell types...'
227 DO ifg = 1,gridcobalt%nFaces
228 c1 = gridcobalt%f2c(1,ifg)
229 c2 = gridcobalt%f2c(2,ifg)
231 IF ( gridcobalt%nvpf(ifg) == 3 )
THEN
233 celldegr(face_type_tri,c1) = celldegr(face_type_tri,c1) + 1
237 celldegr(face_type_tri,c2) = celldegr(face_type_tri,c2) + 1
239 ELSE IF ( gridcobalt%nvpf(ifg) == 4 )
THEN
241 celldegr(face_type_quad,c1) = celldegr(face_type_quad,c1) + 1
245 celldegr(face_type_quad,c2) = celldegr(face_type_quad,c2) + 1
248 CALL
errorstop(global,err_reached_default,__line__)
261 DO icg = 1,pgrid%nCellsTot
262 IF ( celldegr(face_type_tri ,icg) == 4 .AND. &
263 celldegr(face_type_quad,icg) == 0 )
THEN
264 pgrid%nTetsTot = pgrid%nTetsTot + 1
265 celltype(icg) = cell_type_tet
266 cellmapp(icg) = pgrid%nTetsTot
267 ELSE IF ( celldegr(face_type_tri ,icg) == 0 .AND. &
268 celldegr(face_type_quad,icg) == 6 )
THEN
269 pgrid%nHexsTot = pgrid%nHexsTot + 1
270 celltype(icg) = cell_type_hex
271 cellmapp(icg) = pgrid%nHexsTot
272 ELSE IF ( celldegr(face_type_tri ,icg) == 2 .AND. &
273 celldegr(face_type_quad,icg) == 3 )
THEN
274 pgrid%nPrisTot = pgrid%nPrisTot + 1
275 celltype(icg) = cell_type_pri
276 cellmapp(icg) = pgrid%nPrisTot
277 ELSE IF ( celldegr(face_type_tri ,icg) == 4 .AND. &
278 celldegr(face_type_quad,icg) == 1 )
THEN
279 pgrid%nPyrsTot = pgrid%nPyrsTot + 1
280 celltype(icg) = cell_type_pyr
281 cellmapp(icg) = pgrid%nPyrsTot
283 CALL
errorstop(global,err_reached_default,__line__)
287 pgrid%nTets = pgrid%nTetsTot
288 pgrid%nHexs = pgrid%nHexsTot
289 pgrid%nPris = pgrid%nPrisTot
290 pgrid%nPyrs = pgrid%nPyrsTot
301 IF ( global%verbLevel > verbose_low )
THEN
302 WRITE(stdout,
'(A,5X,A)') solver_name,
'Cell statistics:'
303 WRITE(stdout,
'(A,7X,A,1X,I9)') solver_name,
'Tetrahedra:',pgrid%nTetsTot
304 WRITE(stdout,
'(A,7X,A,1X,I9)') solver_name,
'Hexahedra: ',pgrid%nHexsTot
305 WRITE(stdout,
'(A,7X,A,1X,I9)') solver_name,
'Prisms: ',pgrid%nPrisTot
306 WRITE(stdout,
'(A,7X,A,1X,I9)') solver_name,
'Pyramids: ',pgrid%nPyrsTot
309 IF ( global%verbLevel > verbose_none )
THEN
310 WRITE(stdout,
'(A,3X,A)') solver_name,
'Determining cell types done.'
326 IF ( global%verbLevel > verbose_none )
THEN
327 WRITE(stdout,
'(A,3X,A)') solver_name,
'Renumbering cells...'
342 DO ifg = 1,gridcobalt%nFaces
344 c1 = gridcobalt%f2c(
j,ifg)
349 SELECT CASE ( celltype(c1) )
350 CASE ( cell_type_tet )
351 icg = pgrid%tet2CellGlob(icl)
352 CASE ( cell_type_hex )
353 icg = pgrid%hex2CellGlob(icl)
354 CASE ( cell_type_pri )
355 icg = pgrid%pri2CellGlob(icl)
356 CASE ( cell_type_pyr )
357 icg = pgrid%pyr2CellGlob(icl)
359 CALL
errorstop(global,err_reached_default,__line__)
362 gridcobalt%f2c(
j,ifg) = icg
371 DEALLOCATE(cellmapp,stat=errorflag)
372 global%error = errorflag
373 IF ( global%error /= err_none )
THEN
374 CALL
errorstop(global,err_deallocate,__line__,
'cellMapp')
377 DEALLOCATE(celltype,stat=errorflag)
378 global%error = errorflag
379 IF ( global%error /= err_none )
THEN
380 CALL
errorstop(global,err_deallocate,__line__,
'cellType')
383 IF ( global%verbLevel > verbose_none )
THEN
384 WRITE(stdout,
'(A,3X,A)') solver_name,
'Renumbering cells done.'
393 IF ( global%verbLevel > verbose_none )
THEN
394 WRITE(stdout,
'(A,3X,A)') solver_name,
'Building cell connectivity...'
397 IF ( pgrid%nTetsMax > 0 )
THEN
398 ALLOCATE(pgrid%tet2v(4,pgrid%nTetsMax),stat=errorflag)
399 global%error = errorflag
400 IF ( global%error /= err_none )
THEN
401 CALL
errorstop(global,err_allocate,__line__,
'pGrid%tet2v')
404 DO icl = 1,pgrid%nTetsMax
405 pgrid%tet2v(1,icl) = c2v_init
406 pgrid%tet2v(2,icl) = c2v_init
407 pgrid%tet2v(3,icl) = c2v_init
408 pgrid%tet2v(4,icl) = c2v_init
412 IF ( pgrid%nHexsMax > 0 )
THEN
413 ALLOCATE(pgrid%hex2v(8,pgrid%nHexsMax),stat=errorflag)
414 global%error = errorflag
415 IF ( global%error /= err_none )
THEN
416 CALL
errorstop(global,err_allocate,__line__,
'pGrid%hex2v')
419 DO icl = 1,pgrid%nHexsMax
420 pgrid%hex2v(1,icl) = c2v_init
421 pgrid%hex2v(2,icl) = c2v_init
422 pgrid%hex2v(3,icl) = c2v_init
423 pgrid%hex2v(4,icl) = c2v_init
424 pgrid%hex2v(5,icl) = c2v_init
425 pgrid%hex2v(6,icl) = c2v_init
426 pgrid%hex2v(7,icl) = c2v_init
427 pgrid%hex2v(8,icl) = c2v_init
431 IF ( pgrid%nPrisMax > 0 )
THEN
432 ALLOCATE(pgrid%pri2v(6,pgrid%nPrisMax),stat=errorflag)
433 global%error = errorflag
434 IF ( global%error /= err_none )
THEN
435 CALL
errorstop(global,err_allocate,__line__,
'pGrid%pri2v')
438 DO icl = 1,pgrid%nPrisMax
439 pgrid%pri2v(1,icl) = c2v_init
440 pgrid%pri2v(2,icl) = c2v_init
441 pgrid%pri2v(3,icl) = c2v_init
442 pgrid%pri2v(4,icl) = c2v_init
443 pgrid%pri2v(5,icl) = c2v_init
444 pgrid%pri2v(6,icl) = c2v_init
448 IF ( pgrid%nPyrsMax > 0 )
THEN
449 ALLOCATE(pgrid%pyr2v(5,pgrid%nPyrsMax),stat=errorflag)
450 global%error = errorflag
451 IF ( global%error /= err_none )
THEN
452 CALL
errorstop(global,err_allocate,__line__,
'pGrid%pyr2v')
455 DO icl = 1,pgrid%nPyrsMax
456 pgrid%pyr2v(1,icl) = c2v_init
457 pgrid%pyr2v(2,icl) = c2v_init
458 pgrid%pyr2v(3,icl) = c2v_init
459 pgrid%pyr2v(4,icl) = c2v_init
460 pgrid%pyr2v(5,icl) = c2v_init
475 DO icg = 1,pgrid%nCellsTot
476 celldegr(face_type_tri,icg) = 0
477 celldegr(face_type_quad,icg) = 0
480 DO ifg = 1,gridcobalt%nFaces
482 c1 = gridcobalt%f2c(
j,ifg)
490 IF ( gridcobalt%nvpf(ifg) == 3 )
THEN
491 SELECT CASE ( pgrid%cellGlob2Loc(1,c1) )
495 CASE ( cell_type_tet )
496 IF ( celldegr(face_type_tri,c1) < 2 )
THEN
497 celldegr(face_type_tri,c1) = celldegr(face_type_tri,c1) + 1
499 icl = pgrid%cellGlob2Loc(2,c1)
501 IF ( celldegr(face_type_tri,c1) == 1 )
THEN
502 pgrid%tet2v(1:3,icl) = gridcobalt%f2v(1:3,ifg)
504 vert(1:3) = pgrid%tet2v(1:3,icl)
511 IF ( iloc == element_not_found )
THEN
512 pgrid%tet2v(4,icl) = gridcobalt%f2v(ivl,ifg)
517 IF ( pgrid%tet2v(4,icl) == c2v_init )
THEN
518 CALL
errorstop(global,err_c2vlist_invalid,__line__)
525 CASE ( cell_type_pri )
526 IF ( celldegr(face_type_tri,c1) < 2 )
THEN
527 celldegr(face_type_tri,c1) = celldegr(face_type_tri,c1) + 1
529 icl = pgrid%cellGlob2Loc(2,c1)
531 IF ( celldegr(face_type_tri,c1) == 1 )
THEN
532 pgrid%pri2v(1:3,icl) = gridcobalt%f2v(1:3,ifg)
534 pgrid%pri2v(4:6,icl) = gridcobalt%f2v(1:3,ifg)
540 CASE ( cell_type_pyr )
541 IF ( celldegr(face_type_tri,c1) < 1 )
THEN
542 celldegr(face_type_tri,c1) = celldegr(face_type_tri,c1) + 1
544 icl = pgrid%cellGlob2Loc(2,c1)
546 IF ( celldegr(face_type_quad,c1) == 0 )
THEN
547 pgrid%pyr2v(1,icl) = gridcobalt%f2v(1,ifg)
548 pgrid%pyr2v(2,icl) = gridcobalt%f2v(2,ifg)
549 pgrid%pyr2v(3,icl) = gridcobalt%f2v(3,ifg)
551 vert(1:4) = pgrid%pyr2v(1:4,icl)
556 gridcobalt%f2v(ivl,ifg),iloc)
558 IF ( iloc == element_not_found )
THEN
559 pgrid%pyr2v(5,icl) = gridcobalt%f2v(ivl,ifg)
563 IF ( pgrid%pyr2v(5,icl) == c2v_init )
THEN
564 CALL
errorstop(global,err_c2vlist_invalid,__line__)
574 ELSE IF ( gridcobalt%nvpf(ifg) == 4 )
THEN
575 SELECT CASE ( pgrid%cellGlob2Loc(1,c1) )
579 CASE ( cell_type_hex )
580 IF ( celldegr(face_type_quad,c1) < 2 )
THEN
581 icl = pgrid%cellGlob2Loc(2,c1)
583 IF ( celldegr(face_type_quad,c1) == 0 )
THEN
584 celldegr(face_type_quad,c1) = celldegr(face_type_quad,c1) &
586 pgrid%hex2v(1:4,icl) = gridcobalt%f2v(1:4,ifg)
588 vert(1:4) = pgrid%hex2v(1:4,icl)
594 ivg = gridcobalt%f2v(ivl,ifg)
598 IF ( iloc == element_not_found )
THEN
603 IF ( cntr == 4 )
THEN
604 celldegr(face_type_quad,c1) = &
605 celldegr(face_type_quad,c1) + 1
606 pgrid%hex2v(5:8,icl) = gridcobalt%f2v(1:4,ifg)
613 CASE ( cell_type_pyr )
614 IF ( celldegr(face_type_quad,c1) < 1 )
THEN
615 celldegr(face_type_quad,c1) = celldegr(face_type_quad,c1) + 1
617 icl = pgrid%cellGlob2Loc(2,c1)
619 IF ( celldegr(face_type_tri,c1) == 0 )
THEN
620 pgrid%pyr2v(1:4,icl) = gridcobalt%f2v(1:4,ifg)
622 verttemp(1:3) = pgrid%pyr2v(1:3,icl)
624 pgrid%pyr2v(1:4,icl) = gridcobalt%f2v(1:4,ifg)
625 vert(1:4) = pgrid%pyr2v(1:4,icl)
632 IF ( iloc == element_not_found )
THEN
633 pgrid%pyr2v(5,icl) = verttemp(ivl)
637 IF ( pgrid%pyr2v(5,icl) == c2v_init )
THEN
638 CALL
errorstop(global,err_c2vlist_invalid,__line__)
645 CALL
errorstop(global,err_reached_default,__line__)
651 IF ( global%verbLevel > verbose_none )
THEN
652 WRITE(stdout,
'(A,3X,A)') solver_name,
'Building cell connectivity done.'
680 IF ( global%verbLevel > verbose_none )
THEN
681 WRITE(stdout,
'(A,3X,A)') solver_name,
'Checking cell connectivity...'
683 IF ( global%verbLevel > verbose_low )
THEN
684 WRITE(stdout,
'(A,5X,A)') solver_name,
'Pass 1...'
692 IF ( pgrid%nTetsTot > 0 )
THEN
693 IF ( global%verbLevel > verbose_low )
THEN
694 WRITE(stdout,
'(A,7X,A)') solver_name,
'Tetrahedra...'
697 DO icl = 1,pgrid%nTetsTot
698 icg = pgrid%tet2CellGlob(icl)
700 cofgappx = pgrid%cofgApp(xcoord,icg)
701 cofgappy = pgrid%cofgApp(ycoord,icg)
702 cofgappz = pgrid%cofgApp(zcoord,icg)
707 v1 = pgrid%tet2v(f2vtet(1,ifl),icl)
708 v2 = pgrid%tet2v(f2vtet(2,ifl),icl)
709 v3 = pgrid%tet2v(f2vtet(3,ifl),icl)
711 xyznodes(xcoord:zcoord,1) = pgrid%xyz(xcoord:zcoord,v1)
712 xyznodes(xcoord:zcoord,2) = pgrid%xyz(xcoord:zcoord,v2)
713 xyznodes(xcoord:zcoord,3) = pgrid%xyz(xcoord:zcoord,v3)
715 CALL
facevectortria(xyznodes(xcoord:zcoord,1:3),fvecx,fvecy,fvecz)
718 dotprod = fvecx*(fcenx - cofgappx) &
719 + fvecy*(fceny - cofgappy) &
720 + fvecz*(fcenz - cofgappz)
722 IF ( dotprod < 0.0_rfreal )
THEN
726 CALL
errorstop(global,err_face_orient,__line__)
729 pgrid%tet2v(f2vtet(1,ifl),icl) = v1
730 pgrid%tet2v(f2vtet(2,ifl),icl) = v3
731 pgrid%tet2v(f2vtet(3,ifl),icl) = v2
741 IF ( pgrid%nHexsTot > 0 )
THEN
742 IF ( global%verbLevel > verbose_low )
THEN
743 WRITE(stdout,
'(A,7X,A)') solver_name,
'Hexahedra...'
746 DO icl = 1,pgrid%nHexsTot
747 icg = pgrid%hex2CellGlob(icl)
749 cofgappx = pgrid%cofgApp(xcoord,icg)
750 cofgappy = pgrid%cofgApp(ycoord,icg)
751 cofgappz = pgrid%cofgApp(zcoord,icg)
754 v1 = pgrid%hex2v(f2vhex(1,ifl),icl)
755 v2 = pgrid%hex2v(f2vhex(2,ifl),icl)
756 v3 = pgrid%hex2v(f2vhex(3,ifl),icl)
757 v4 = pgrid%hex2v(f2vhex(4,ifl),icl)
759 xyznodes(xcoord:zcoord,1) = pgrid%xyz(xcoord:zcoord,v1)
760 xyznodes(xcoord:zcoord,2) = pgrid%xyz(xcoord:zcoord,v2)
761 xyznodes(xcoord:zcoord,3) = pgrid%xyz(xcoord:zcoord,v3)
762 xyznodes(xcoord:zcoord,4) = pgrid%xyz(xcoord:zcoord,v4)
764 CALL
facevectorquad(xyznodes(xcoord:zcoord,1:4),fvecx,fvecy,fvecz)
767 dotprod = fvecx*(fcenx - cofgappx) &
768 + fvecy*(fceny - cofgappy) &
769 + fvecz*(fcenz - cofgappz)
771 IF ( dotprod < 0.0_rfreal )
THEN
772 pgrid%hex2v(f2vhex(1,ifl),icl) = v1
773 pgrid%hex2v(f2vhex(2,ifl),icl) = v4
774 pgrid%hex2v(f2vhex(3,ifl),icl) = v3
775 pgrid%hex2v(f2vhex(4,ifl),icl) = v2
785 IF ( pgrid%nPrisTot > 0 )
THEN
786 IF ( global%verbLevel > verbose_low )
THEN
787 WRITE(stdout,
'(A,7X,A)') solver_name,
'Prisms...'
790 DO icl = 1,pgrid%nPrisTot
791 icg = pgrid%pri2CellGlob(icl)
793 cofgappx = pgrid%cofgApp(xcoord,icg)
794 cofgappy = pgrid%cofgApp(ycoord,icg)
795 cofgappz = pgrid%cofgApp(zcoord,icg)
798 v1 = pgrid%pri2v(f2vpri(1,ifl),icl)
799 v2 = pgrid%pri2v(f2vpri(2,ifl),icl)
800 v3 = pgrid%pri2v(f2vpri(3,ifl),icl)
802 xyznodes(xcoord:zcoord,1) = pgrid%xyz(xcoord:zcoord,v1)
803 xyznodes(xcoord:zcoord,2) = pgrid%xyz(xcoord:zcoord,v2)
804 xyznodes(xcoord:zcoord,3) = pgrid%xyz(xcoord:zcoord,v3)
806 CALL
facevectortria(xyznodes(xcoord:zcoord,1:3),fvecx,fvecy,fvecz)
809 dotprod = fvecx*(fcenx - cofgappx) &
810 + fvecy*(fceny - cofgappy) &
811 + fvecz*(fcenz - cofgappz)
813 IF ( dotprod < 0.0_rfreal )
THEN
814 pgrid%pri2v(f2vpri(1,ifl),icl) = v1
815 pgrid%pri2v(f2vpri(2,ifl),icl) = v3
816 pgrid%pri2v(f2vpri(3,ifl),icl) = v2
826 IF ( pgrid%nPyrsTot > 0 )
THEN
827 IF ( global%verbLevel > verbose_low )
THEN
828 WRITE(stdout,
'(A,7X,A)') solver_name,
'Pyramids...'
831 DO icl = 1,pgrid%nPyrsTot
832 icg = pgrid%pyr2CellGlob(icl)
834 cofgappx = pgrid%cofgApp(xcoord,icg)
835 cofgappy = pgrid%cofgApp(ycoord,icg)
836 cofgappz = pgrid%cofgApp(zcoord,icg)
839 v1 = pgrid%pyr2v(f2vpyr(1,ifl),icl)
840 v2 = pgrid%pyr2v(f2vpyr(2,ifl),icl)
841 v3 = pgrid%pyr2v(f2vpyr(3,ifl),icl)
842 v4 = pgrid%pyr2v(f2vpyr(4,ifl),icl)
844 xyznodes(xcoord:zcoord,1) = pgrid%xyz(xcoord:zcoord,v1)
845 xyznodes(xcoord:zcoord,2) = pgrid%xyz(xcoord:zcoord,v2)
846 xyznodes(xcoord:zcoord,3) = pgrid%xyz(xcoord:zcoord,v3)
847 xyznodes(xcoord:zcoord,4) = pgrid%xyz(xcoord:zcoord,v4)
849 CALL
facevectorquad(xyznodes(xcoord:zcoord,1:4),fvecx,fvecy,fvecz)
852 dotprod = fvecx*(fcenx - cofgappx) &
853 + fvecy*(fceny - cofgappy) &
854 + fvecz*(fcenz - cofgappz)
856 IF ( dotprod < 0.0_rfreal )
THEN
857 pgrid%pyr2v(f2vpyr(1,ifl),icl) = v1
858 pgrid%pyr2v(f2vpyr(2,ifl),icl) = v4
859 pgrid%pyr2v(f2vpyr(3,ifl),icl) = v3
860 pgrid%pyr2v(f2vpyr(4,ifl),icl) = v2
874 IF ( global%verbLevel > verbose_low )
THEN
875 WRITE(stdout,
'(A,5X,A)') solver_name,
'Pass 2...'
882 DO ifg = 1,gridcobalt%nFaces
884 c1 = gridcobalt%f2c(
j,ifg)
887 IF ( gridcobalt%nvpf(ifg) == 4 )
THEN
888 SELECT CASE ( pgrid%cellGlob2Loc(1,c1) )
894 CASE ( cell_type_hex )
895 IF ( celldegr(face_type_quad,c1) < 3 )
THEN
896 icl = pgrid%cellGlob2Loc(2,c1)
900 verttemp(1:4) = pgrid%hex2v(1:4,icl)
906 ivg = gridcobalt%f2v(ivl,ifg)
910 IF ( iloc /= element_not_found )
THEN
917 IF ( cntr == 2 )
THEN
918 celldegr(face_type_quad,c1) = celldegr(face_type_quad,c1) &
921 v1 = gridcobalt%f2v(1,ifg)
922 v2 = gridcobalt%f2v(2,ifg)
923 v3 = gridcobalt%f2v(3,ifg)
924 v4 = gridcobalt%f2v(4,ifg)
926 xyznodes(xcoord:zcoord,1) = pgrid%xyz(xcoord:zcoord,v1)
927 xyznodes(xcoord:zcoord,2) = pgrid%xyz(xcoord:zcoord,v2)
928 xyznodes(xcoord:zcoord,3) = pgrid%xyz(xcoord:zcoord,v3)
929 xyznodes(xcoord:zcoord,4) = pgrid%xyz(xcoord:zcoord,v4)
938 dotprod = fvecx*(fcenx - pgrid%cofgApp(xcoord,c1)) &
939 + fvecy*(fceny - pgrid%cofgApp(ycoord,c1)) &
940 + fvecz*(fcenz - pgrid%cofgApp(zcoord,c1))
942 IF ( dotprod < 0.0_rfreal )
THEN
956 verttemp(1:4) = pgrid%hex2v(1:4,icl)
960 ivg = pgrid%hex2v(ivl,icl)
964 IF ( iloc /= element_not_found )
THEN
967 CALL
errorstop(global,err_reached_default,__line__)
979 IF ( iloc /= element_not_found )
THEN
988 IF ( flag(1) == 1 .AND. flag(2) == 1 )
THEN
989 CALL
cyclelist(vert(1:4),4,1,pgrid%hex2v(1,icl))
990 CALL
cyclelist(pgrid%hex2v(5:8,icl),4,1,vert(4))
991 ELSE IF ( flag(2) == 1 .AND. flag(3) == 1 )
THEN
992 CALL
cyclelist(vert(1:4),4,1,pgrid%hex2v(2,icl))
993 CALL
cyclelist(pgrid%hex2v(5:8,icl),4,2,vert(4))
994 ELSE IF ( flag(3) == 1 .AND. flag(4) == 1 )
THEN
995 CALL
cyclelist(vert(1:4),4,1,pgrid%hex2v(3,icl))
996 CALL
cyclelist(pgrid%hex2v(5:8,icl),4,3,vert(4))
997 ELSE IF ( flag(4) == 1 .AND. flag(1) == 1 )
THEN
998 CALL
cyclelist(vert(1:4),4,1,pgrid%hex2v(4,icl))
999 CALL
cyclelist(pgrid%hex2v(5:8,icl),4,4,vert(4))
1001 CALL
errorstop(global,err_reached_default,__line__)
1003 ELSE IF ( cntr /= 4 .AND. cntr /= 0 )
THEN
1004 CALL
errorstop(global,err_reached_default,__line__)
1012 CASE ( cell_type_pri )
1013 IF ( celldegr(face_type_quad,c1) < 1 )
THEN
1014 icl = pgrid%cellGlob2Loc(2,c1)
1018 verttemp(1:4) = pgrid%pri2v(1:4,icl)
1024 ivg = gridcobalt%f2v(ivl,ifg)
1028 IF ( iloc /= element_not_found )
THEN
1035 IF ( cntr == 2 )
THEN
1036 celldegr(face_type_quad,c1) = celldegr(face_type_quad,c1) &
1039 v1 = gridcobalt%f2v(1,ifg)
1040 v2 = gridcobalt%f2v(2,ifg)
1041 v3 = gridcobalt%f2v(3,ifg)
1042 v4 = gridcobalt%f2v(4,ifg)
1044 xyznodes(xcoord:zcoord,1) = pgrid%xyz(xcoord:zcoord,v1)
1045 xyznodes(xcoord:zcoord,2) = pgrid%xyz(xcoord:zcoord,v2)
1046 xyznodes(xcoord:zcoord,3) = pgrid%xyz(xcoord:zcoord,v3)
1047 xyznodes(xcoord:zcoord,4) = pgrid%xyz(xcoord:zcoord,v4)
1056 dotprod = fvecx*(fcenx - pgrid%cofgApp(xcoord,c1)) &
1057 + fvecy*(fceny - pgrid%cofgApp(ycoord,c1)) &
1058 + fvecz*(fcenz - pgrid%cofgApp(zcoord,c1))
1060 IF ( dotprod < 0.0_rfreal )
THEN
1074 verttemp(1:3) = pgrid%pri2v(1:3,icl)
1078 ivg = pgrid%pri2v(ivl,icl)
1082 IF ( iloc /= element_not_found )
THEN
1085 CALL
errorstop(global,err_reached_default,__line__)
1097 IF ( iloc /= element_not_found )
THEN
1106 IF ( flag(1) == 1 .AND. flag(2) == 1 )
THEN
1107 CALL
cyclelist(vert(1:4),4,1,pgrid%pri2v(1,icl))
1108 CALL
cyclelist(pgrid%pri2v(4:6,icl),3,1,vert(4))
1109 ELSE IF ( flag(2) == 1 .AND. flag(3) == 1 )
THEN
1110 CALL
cyclelist(vert(1:4),4,1,pgrid%pri2v(2,icl))
1111 CALL
cyclelist(pgrid%pri2v(4:6,icl),3,2,vert(4))
1112 ELSE IF ( flag(3) == 1 .AND. flag(1) == 1 )
THEN
1113 CALL
cyclelist(vert(1:4),4,1,pgrid%pri2v(3,icl))
1114 CALL
cyclelist(pgrid%pri2v(4:6,icl),3,3,vert(4))
1116 CALL
errorstop(global,err_reached_default,__line__)
1118 ELSE IF ( cntr /= 3 .AND. cntr /= 0 )
THEN
1119 CALL
errorstop(global,err_reached_default,__line__)
1130 IF ( global%verbLevel > verbose_none )
THEN
1131 WRITE(stdout,
'(A,3X,A)') solver_name,
'Checking cell connectivity done.'
1138 DEALLOCATE(celldegr,stat=errorflag)
1139 global%error = errorflag
1140 IF ( global%error /= err_none )
THEN
1141 CALL
errorstop(global,err_deallocate,__line__,
'cellDegr')
1150 IF ( global%verbLevel > verbose_none )
THEN
1151 WRITE(stdout,
'(A,3X,A)') solver_name,
'Building boundary face lists...'
1158 IF ( global%verbLevel > verbose_none )
THEN
1159 WRITE(stdout,
'(A,5X,A)') solver_name,
'Reading information file...'
1170 OPEN(ifile,file=ifilename,
form=
"FORMATTED",
status=
"OLD",iostat=errorflag)
1171 global%error = errorflag
1172 IF ( global%error /= err_none )
THEN
1173 CALL
errorstop(global,err_file_open,__line__,ifilename)
1180 READ(ifile,*) pgrid%nPatches
1181 READ(ifile,*) gridcobalt%nMappings
1183 ALLOCATE(gridcobalt%patch2bc(3,gridcobalt%nMappings),stat=errorflag)
1184 global%error = errorflag
1185 IF ( global%error /= err_none )
THEN
1186 CALL
errorstop(global,err_allocate,__line__,
'gridCOBALT%patch2bc')
1189 DO imap = 1,gridcobalt%nMappings
1190 READ(ifile,*) (gridcobalt%patch2bc(
j,imap),
j=1,3)
1197 CLOSE(ifile,iostat=errorflag)
1198 global%error = errorflag
1199 IF ( global%error /= err_none )
THEN
1200 CALL
errorstop(global,err_file_close,__line__,ifilename)
1203 IF ( global%verbLevel > verbose_none )
THEN
1204 WRITE(stdout,
'(A,5X,A)') solver_name,
'Reading information file done.'
1211 IF ( global%checkLevel > check_none )
THEN
1212 IF ( global%verbLevel > verbose_none )
THEN
1213 WRITE(stdout,
'(A,5X,A)') solver_name,
'Checking patch mapping entries...'
1216 DO imap = 1,gridcobalt%nMappings
1217 IF ( gridcobalt%patch2bc(2,imap) < gridcobalt%patch2bc(1,imap) )
THEN
1218 IF ( global%verbLevel > verbose_none )
THEN
1219 WRITE(stdout,
'(A,7X,A)') solver_name,
'Check failed.'
1221 CALL
errorstop(global,err_patch_numbering,__line__)
1225 IF ( minval(gridcobalt%patch2bc(3,:)) /= 1 .OR. &
1226 maxval(gridcobalt%patch2bc(3,:)) /= pgrid%nPatches )
THEN
1227 IF ( global%verbLevel > verbose_none )
THEN
1228 WRITE(stdout,
'(A,7X,A)') solver_name,
'Check failed.'
1230 CALL
errorstop(global,err_patch_numbering,__line__)
1233 DO imap = 1,gridcobalt%nMappings
1234 DO imap2 = 1,gridcobalt%nMappings
1236 IF ( imap /= imap2 )
THEN
1237 ibeg1 = gridcobalt%patch2bc(1,imap)
1238 iend1 = gridcobalt%patch2bc(2,imap)
1240 ibeg2 = gridcobalt%patch2bc(1,imap2)
1241 iend2 = gridcobalt%patch2bc(2,imap2)
1243 IF ( ibeg1 < ibeg2 )
THEN
1248 ELSE IF ( ibeg1 > ibeg2 )
THEN
1254 IF ( global%verbLevel > verbose_none )
THEN
1255 WRITE(stdout,
'(A,7X,A)') solver_name,
'Check failed.'
1257 CALL
errorstop(global,err_patch_numbering,__line__)
1260 IF ( iendmin >= ibegmax )
THEN
1261 IF ( global%verbLevel > verbose_none )
THEN
1262 WRITE(stdout,
'(A,7X,A)') solver_name,
'Check failed.'
1264 CALL
errorstop(global,err_patch_numbering,__line__)
1271 IF ( global%verbLevel > verbose_none )
THEN
1272 WRITE(stdout,
'(A,5X,A)') solver_name, &
1273 'Checking patch mapping entries done.'
1285 ALLOCATE(pregion%patches(pgrid%nPatches),stat=errorflag)
1286 global%error = errorflag
1287 IF ( global%error /= err_none )
THEN
1288 CALL
errorstop(global,err_allocate,__line__,
'pRegion%patches')
1291 DO ipatch = 1,pgrid%nPatches
1292 ppatch => pregion%patches(ipatch)
1298 ppatch%iPatchGlobal = ipatch
1299 ppatch%iBorder = patch_iborder_default
1300 ppatch%renumFlag = .false.
1303 global%nPatches = pgrid%nPatches
1309 DO ifg = 1,gridcobalt%nFaces
1311 c1 = gridcobalt%f2c(
j,ifg)
1316 DO imap = 1,gridcobalt%nMappings
1317 IF ( abs(c1) >= gridcobalt%patch2bc(1,imap) .AND. &
1318 abs(c1) <= gridcobalt%patch2bc(2,imap) )
THEN
1319 ipatch = gridcobalt%patch2bc(3,imap)
1320 ppatch => pregion%patches(ipatch)
1325 IF (
ASSOCIATED(ppatch) .EQV. .true. )
THEN
1326 IF ( gridcobalt%nvpf(ifg) == 3 )
THEN
1327 ppatch%nBTris = ppatch%nBTris + 1
1328 ELSE IF ( gridcobalt%nvpf(ifg) == 4 )
THEN
1329 ppatch%nBQuads = ppatch%nBQuads + 1
1331 CALL
errorstop(global,err_reached_default,__line__)
1334 CALL
errorstop(global,err_reached_default,__line__)
1346 DO ipatch = 1,pgrid%nPatches
1347 ppatch => pregion%patches(ipatch)
1349 ppatch%nBFaces = ppatch%nBTris + ppatch%nBQuads
1350 pgrid%nBFaces = pgrid%nBFaces + ppatch%nBFaces
1352 ppatch%nBFacesTot = ppatch%nBFaces
1353 ppatch%nBQuadsTot = ppatch%nBQuads
1354 ppatch%nBTrisTot = ppatch%nBTris
1355 ppatch%nBVertTot = ppatch%nBVert
1362 ppatch%nBCellsVirt = 0
1365 pgrid%nBFacesTot = pgrid%nBFaces
1371 DO ipatch = 1,pgrid%nPatches
1372 ppatch => pregion%patches(ipatch)
1374 IF ( ppatch%nBTrisMax > 0 )
THEN
1375 ALLOCATE(ppatch%bTri2v(3,ppatch%nBTrisMax),stat=errorflag)
1376 global%error = errorflag
1377 IF ( global%error /= err_none )
THEN
1378 CALL
errorstop(global,err_allocate,__line__,
'pPatch%bTri2v')
1384 IF ( ppatch%nBQuadsMax > 0 )
THEN
1385 ALLOCATE(ppatch%bQuad2v(4,ppatch%nBQuadsMax),stat=errorflag)
1386 global%error = errorflag
1387 IF ( global%error /= err_none )
THEN
1388 CALL
errorstop(global,err_allocate,__line__,
'pPatch%bQuad2v')
1400 DO ifg = 1,gridcobalt%nFaces
1402 c1 = gridcobalt%f2c(
j,ifg)
1405 DO imap = 1,gridcobalt%nMappings
1406 IF ( abs(c1) >= gridcobalt%patch2bc(1,imap) .AND. &
1407 abs(c1) <= gridcobalt%patch2bc(2,imap) )
THEN
1408 ipatch = gridcobalt%patch2bc(3,imap)
1409 ppatch => pregion%patches(ipatch)
1414 IF (
ASSOCIATED(ppatch) .EQV. .true. )
THEN
1415 c2 = gridcobalt%f2c(3-
j,ifg)
1417 IF ( gridcobalt%nvpf(ifg) == 3 )
THEN
1418 ppatch%nBTris = ppatch%nBTris + 1
1420 v1 = gridcobalt%f2v(1,ifg)
1421 v2 = gridcobalt%f2v(2,ifg)
1422 v3 = gridcobalt%f2v(3,ifg)
1424 xyznodes(xcoord:zcoord,1) = pgrid%xyz(xcoord:zcoord,v1)
1425 xyznodes(xcoord:zcoord,2) = pgrid%xyz(xcoord:zcoord,v2)
1426 xyznodes(xcoord:zcoord,3) = pgrid%xyz(xcoord:zcoord,v3)
1433 dotprod = fvecx*(fcenx - pgrid%cofgApp(xcoord,c2)) &
1434 + fvecy*(fceny - pgrid%cofgApp(ycoord,c2)) &
1435 + fvecz*(fcenz - pgrid%cofgApp(zcoord,c2))
1437 IF ( dotprod < 0.0_rfreal )
THEN
1438 ppatch%bTri2v(1,ppatch%nBTris) = v1
1439 ppatch%bTri2v(2,ppatch%nBTris) = v3
1440 ppatch%bTri2v(3,ppatch%nBTris) = v2
1442 ppatch%bTri2v(1,ppatch%nBTris) = v1
1443 ppatch%bTri2v(2,ppatch%nBTris) = v2
1444 ppatch%bTri2v(3,ppatch%nBTris) = v3
1446 ELSE IF ( gridcobalt%nvpf(ifg) == 4 )
THEN
1447 ppatch%nBQuads = ppatch%nBQuads + 1
1449 v1 = gridcobalt%f2v(1,ifg)
1450 v2 = gridcobalt%f2v(2,ifg)
1451 v3 = gridcobalt%f2v(3,ifg)
1452 v4 = gridcobalt%f2v(4,ifg)
1454 xyznodes(xcoord:zcoord,1) = pgrid%xyz(xcoord:zcoord,v1)
1455 xyznodes(xcoord:zcoord,2) = pgrid%xyz(xcoord:zcoord,v2)
1456 xyznodes(xcoord:zcoord,3) = pgrid%xyz(xcoord:zcoord,v3)
1457 xyznodes(xcoord:zcoord,4) = pgrid%xyz(xcoord:zcoord,v4)
1464 dotprod = fvecx*(fcenx - pgrid%cofgApp(xcoord,c2)) &
1465 + fvecy*(fceny - pgrid%cofgApp(ycoord,c2)) &
1466 + fvecz*(fcenz - pgrid%cofgApp(zcoord,c2))
1468 IF ( dotprod < 0.0_rfreal )
THEN
1469 ppatch%bQuad2v(1,ppatch%nBQuads) = v1
1470 ppatch%bQuad2v(2,ppatch%nBQuads) = v4
1471 ppatch%bQuad2v(3,ppatch%nBQuads) = v3
1472 ppatch%bQuad2v(4,ppatch%nBQuads) = v2
1474 ppatch%bQuad2v(1,ppatch%nBQuads) = v1
1475 ppatch%bQuad2v(2,ppatch%nBQuads) = v2
1476 ppatch%bQuad2v(3,ppatch%nBQuads) = v3
1477 ppatch%bQuad2v(4,ppatch%nBQuads) = v4
1480 CALL
errorstop(global,err_reached_default,__line__)
1483 CALL
errorstop(global,err_reached_default,__line__)
1490 IF ( global%verbLevel > verbose_none )
THEN
1491 WRITE(stdout,
'(A,3X,A)') solver_name,
'Building boundary face lists done.'
1498 DEALLOCATE(gridcobalt%patch2bc,stat=errorflag)
1499 global%error = errorflag
1500 IF ( global%error /= err_none )
THEN
1501 CALL
errorstop(global,err_deallocate,__line__,
'gridCOBALT%patch2bc')
1515 DO ipatch = 1,pgrid%nPatches
1516 ppatch => pregion%patches(ipatch)
1518 ALLOCATE(ppatch%bf2c(ppatch%nBFacesMax),stat=errorflag)
1519 global%error = errorflag
1520 IF ( global%error /= err_none )
THEN
1521 CALL
errorstop(global,err_allocate,__line__,
'pPatch%bf2c')
1524 ALLOCATE(ppatch%bf2v(4,ppatch%nBFacesMax),stat=errorflag)
1525 global%error = errorflag
1526 IF ( global%error /= err_none )
THEN
1527 CALL
errorstop(global,err_allocate,__line__,
'pPatch%bf2v')
1530 DO ifl = 1,ppatch%nBFacesMax
1531 ppatch%bf2v(1,ifl) = vert_none
1532 ppatch%bf2v(2,ifl) = vert_none
1533 ppatch%bf2v(3,ifl) = vert_none
1534 ppatch%bf2v(4,ifl) = vert_none
1542 IF ( global%verbLevel > verbose_none )
THEN
1543 WRITE(stdout,
'(A,1X,A)') solver_name, &
1544 'Converting from COBALT to ROCFLU format done.'
1593 TYPE(t_region
),
POINTER :: pregion
1599 CHARACTER(CHRLEN) :: dummystring,ifilename
1600 INTEGER :: errorflag,
ic,ifc,ifile,iv,
j,ndim,nvertperface,nzones
1601 TYPE(t_grid),
POINTER :: pgrid
1608 global => pregion%global
1611 'RFLU_ModCOBALT.F90')
1613 IF ( global%verbLevel > verbose_none )
THEN
1614 WRITE(stdout,
'(A,1X,A)') solver_name,
'Reading COBALT grid file...'
1625 OPEN(ifile,file=ifilename,
form=
"FORMATTED",
status=
"OLD",iostat=errorflag)
1626 global%error = errorflag
1627 IF ( global%error /= err_none )
THEN
1628 CALL
errorstop(global,err_file_open,__line__,ifilename)
1635 IF ( global%verbLevel > verbose_none )
THEN
1636 WRITE(stdout,
'(A,3X,A)') solver_name,
'Header...'
1639 pgrid => pregion%grid
1641 READ(ifile,*) ndim,nzones,gridcobalt%nPatches
1643 IF ( ndim /= 3 )
THEN
1644 CALL
errorstop(global,err_ndimens_invalid,__line__)
1647 IF ( nzones /= 1 )
THEN
1648 CALL
errorstop(global,err_nzones_invalid,__line__)
1651 READ(ifile,*) pgrid%nVertTot,gridcobalt%nFaces,pgrid%nCellsTot, &
1652 gridcobalt%nVertPerFaceMax,gridcobalt%nFacesPerCellMax
1654 pgrid%nVert = pgrid%nVertTot
1655 pgrid%nCells = pgrid%nCellsTot
1664 IF ( global%verbLevel > verbose_none )
THEN
1665 WRITE(stdout,
'(A,3X,A)') solver_name,
'Coordinates...'
1668 ALLOCATE(pgrid%xyz(3,pgrid%nVertMax),stat=errorflag)
1669 global%error = errorflag
1670 IF ( global%error /= err_none )
THEN
1671 CALL
errorstop(global,err_allocate,__line__,
'pGrid%xyz')
1674 DO iv = 1,pgrid%nVertTot
1675 READ(ifile,*) (pgrid%xyz(
j,iv),
j=1,3)
1682 IF ( global%verbLevel > verbose_none )
THEN
1683 WRITE(stdout,
'(A,3X,A)') solver_name,
'Connectivity...'
1686 ALLOCATE(gridcobalt%f2v(gridcobalt%nVertPerFaceMax,gridcobalt%nFaces), &
1688 global%error = errorflag
1689 IF ( global%error /= err_none )
THEN
1690 CALL
errorstop(global,err_allocate,__line__,
'gridCOBALT%f2v')
1693 DO ifc = 1,gridcobalt%nFaces
1694 DO j = 1,gridcobalt%nVertPerFaceMax
1695 gridcobalt%f2v(
j,ifc) = 0
1699 ALLOCATE(gridcobalt%f2c(2,gridcobalt%nFaces),stat=errorflag)
1700 global%error = errorflag
1701 IF ( global%error /= err_none )
THEN
1702 CALL
errorstop(global,err_allocate,__line__,
'gridCOBALT%f2c')
1705 ALLOCATE(gridcobalt%nvpf(gridcobalt%nFaces),stat=errorflag)
1706 global%error = errorflag
1707 IF ( global%error /= err_none )
THEN
1708 CALL
errorstop(global,err_allocate,__line__,
'gridCOBALT%nvpf')
1711 gridcobalt%nTris = 0
1712 gridcobalt%nQuads = 0
1714 DO ifc = 1,gridcobalt%nFaces
1715 READ(ifile,*) nvertperface
1718 IF ( nvertperface == 3 )
THEN
1719 gridcobalt%nTris = gridcobalt%nTris + 1
1720 ELSE IF ( nvertperface == 4 )
THEN
1721 gridcobalt%nQuads = gridcobalt%nQuads + 1
1723 CALL
errorstop(global,err_facetype_invalid,__line__)
1726 READ(ifile,*) gridcobalt%nvpf(ifc), &
1727 (gridcobalt%f2v(
j,ifc),
j=1,nvertperface), &
1728 (gridcobalt%f2c(
j,ifc),
j=1,2)
1735 CLOSE(ifile,iostat=errorflag)
1736 global%error = errorflag
1737 IF ( global%error /= err_none )
THEN
1738 CALL
errorstop(global,err_file_close,__line__,ifilename)
1745 IF ( global%verbLevel > verbose_none )
THEN
1746 WRITE(stdout,
'(A,3X,A)') solver_name,
'Grid Statistics:'
1747 WRITE(stdout,
'(A,5X,A,11X,I9)') solver_name,
'Vertices: ', &
1749 WRITE(stdout,
'(A,5X,A,11X,I9)') solver_name,
'Cells: ', &
1751 WRITE(stdout,
'(A,5X,A,11X,I9)') solver_name,
'Faces: ', &
1753 WRITE(stdout,
'(A,7X,A,9X,I9)') solver_name,
'Triangular faces: ', &
1755 WRITE(stdout,
'(A,7X,A,9X,I9)') solver_name,
'Quadrilateral faces:', &
1757 WRITE(stdout,
'(A,5X,A,11X,I9)') solver_name,
'Patches: ', &
1765 IF ( global%verbLevel > verbose_none )
THEN
1766 WRITE(stdout,
'(A,1X,A)') solver_name,
'Reading COBALT grid file done.'
subroutine facevectortria(xyzNodes, fVecX, fVecY, fVecZ)
subroutine, public rflu_destroyapproxcentroids(pRegion)
subroutine registerfunction(global, funName, fileName)
int status() const
Obtain the status of the attribute.
**********************************************************************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_setmaxdimensions(pRegion)
subroutine cyclelist(a, na, i, v)
subroutine quicksortinteger(a, n)
subroutine binarysearchinteger(a, n, v, i, j)
subroutine buildfilenameplain(global, dest, ext, fileName)
subroutine, public rflu_convcobalt2rocflu(pRegion)
subroutine, public rflu_readgridcobalt(pRegion)
subroutine, public rflu_buildglob2loccellmapping(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_destroycellmapping(pRegion)
INTEGER function, public rflu_setmaxdimension(global, nXyzTot)
subroutine errorstop(global, errorCode, errorLine, addMessage)
subroutine, public rflu_computeapproxcentroids(pRegion)
subroutine, public rflu_createcellmapping(pRegion)
subroutine facevectorquad(xyzNodes, fVecX, fVecY, fVecZ)
subroutine deregisterfunction(global)
subroutine, public rflu_createapproxcentroids(pRegion)
subroutine facecentroidtria(xyz, fCenX, fCenY, fCenZ)
subroutine facecentroidquad(xyz, fCenX, fCenY, fCenZ)
subroutine, public rflu_buildloc2globcellmapping(pRegion)