70 CHARACTER(CHRLEN) :: RCSIdentString = &
71 '$RCSfile: RFLU_ModStencilsCells.F90,v $ $Revision: 1.18 $'
115 INTEGER,
INTENT(IN) :: fndir,icgbeg,icgend
116 TYPE(t_region
),
POINTER :: pregion
122 INTEGER :: c1,c2,c2cs1dbeg,c2cs1dend,degr,errorflag,icg,icg2, &
123 icl,ict,ifg,ifl,ilayer,iloc,ipatch,isl, &
124 ncellmembsinfomax,ncellmembsinfomaxloc,ncellmembsinfomin, &
125 ncellmembsinfominloc,
nfaces,nlayersinfomax,nlayersinfomaxloc, &
126 nlayersinfomin,nlayersinfominloc,nlayersmax,stencilsizemax, &
128 INTEGER,
DIMENSION(:),
ALLOCATABLE :: c2cs1d
129 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: layerinfo
131 TYPE(t_grid),
POINTER :: pgrid
132 TYPE(t_patch),
POINTER :: ppatch
139 global => pregion%global
142 'RFLU_ModStencilsCells.F90')
144 IF ( (global%myProcid == masterproc) .AND. &
145 (global%verbLevel > verbose_none) .AND. &
146 (icgend > icgbeg) )
THEN
147 WRITE(stdout,
'(A,1X,A)') solver_name,
'Building 1D cell-to-cell stencil...'
148 WRITE(stdout,
'(A,3X,A,1X,I2)') solver_name,
'Direction:',fndir
155 pgrid => pregion%grid
157 IF (
ASSOCIATED(pgrid%hex2f) .EQV. .false. )
THEN
158 CALL
errorstop(global,err_associated,__line__,
'pGrid%hex2f')
165 nlayersmax = pgrid%c2csInfo%nLayersMax
166 stencilsizemax = pgrid%c2csInfo%nCellMembsMax
167 stencilsizemin = pgrid%c2csInfo%nCellMembsMin
169 ncellmembsinfomax = 0
170 ncellmembsinfomin = huge(1)
173 nlayersinfomin = huge(1)
179 ALLOCATE(c2cs1d(stencilsizemax),stat=errorflag)
180 global%error = errorflag
181 IF ( global%error /= err_none )
THEN
182 CALL
errorstop(global,err_allocate,__line__,
'c2cs1D')
185 ALLOCATE(layerinfo(x2cs_layer_beg:x2cs_layer_end,nlayersmax), &
187 global%error = errorflag
188 IF ( global%error /= err_none )
THEN
189 CALL
errorstop(global,err_allocate,__line__,
'layerInfo')
196 DO icg = icgbeg,icgend
197 ict = pgrid%cellGlob2Loc(1,icg)
199 IF ( ict /= cell_type_hex )
THEN
200 CALL
errorstop(global,err_stencilmember_invalid,__line__)
203 icl = pgrid%cellGlob2Loc(2,icg)
211 DO isl = 1,stencilsizemax
215 DO ilayer = 1,nlayersmax
216 layerinfo(x2cs_layer_beg,ilayer) = 0
217 layerinfo(x2cs_layer_end,ilayer) = 0
220 pgrid%c2cs1D(fndir,icg)%nLayers = 1
226 nfaces =
SIZE(pgrid%hex2f,2)
233 ipatch = pgrid%hex2f(1,ifl,icl)
234 ifg = pgrid%hex2f(2,ifl,icl)
236 IF ( ipatch == 0 )
THEN
237 c1 = pgrid%f2c(1,ifg)
238 c2 = pgrid%f2c(2,ifg)
240 IF ( c1 == icg )
THEN
241 fn = pgrid%fn(fndir,ifg)
242 ELSE IF ( c2 == icg )
THEN
243 fn = -pgrid%fn(fndir,ifg)
245 CALL
errorstop(global,err_reached_default,__line__)
248 IF ( abs(fn) >= 0.999_rfreal )
THEN
249 IF ( c1 == icg )
THEN
251 ELSE IF ( c2 == icg )
THEN
254 CALL
errorstop(global,err_reached_default,__line__)
260 IF ( iloc == element_not_found )
THEN
261 IF ( degr < stencilsizemax )
THEN
272 ELSE IF ( ipatch > 0 )
THEN
277 CALL
errorstop(global,err_reached_default,__line__)
281 layerinfo(x2cs_layer_beg,1) = 1
282 layerinfo(x2cs_layer_end,1) = degr
289 DO ilayer = 2,nlayersmax
290 IF ( degr < stencilsizemin )
THEN
291 c2cs1dbeg = layerinfo(x2cs_layer_beg,ilayer-1)
292 c2cs1dend = layerinfo(x2cs_layer_end,ilayer-1)
295 c2cs1dbeg,c2cs1dend,c2cs1d,fndir)
297 pgrid%c2cs1D(fndir,icg)%nLayers = pgrid%c2cs1D(fndir,icg)%nLayers + 1
299 layerinfo(x2cs_layer_beg,ilayer) = &
300 layerinfo(x2cs_layer_end,ilayer-1) + 1
301 layerinfo(x2cs_layer_end,ilayer) = degr
311 pgrid%c2cs1D(fndir,icg)%nCellMembs = degr
313 ALLOCATE(pgrid%c2cs1D(fndir,icg)%cellMembs( &
314 pgrid%c2cs1D(fndir,icg)%nCellMembs),stat=errorflag)
315 global%error = errorflag
316 IF ( global%error /= err_none )
THEN
317 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs1D%cellMembs')
320 DO isl = 1,pgrid%c2cs1D(fndir,icg)%nCellMembs
321 pgrid%c2cs1D(fndir,icg)%cellMembs(isl) = c2cs1d(isl)
324 ALLOCATE(pgrid%c2cs1D(fndir,icg)%layerInfo(x2cs_layer_beg: &
325 x2cs_layer_end,pgrid%c2cs1D(fndir,icg)%nLayers),stat=errorflag)
326 global%error = errorflag
327 IF ( global%error /= err_none )
THEN
328 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs1D%layerInfo')
331 DO ilayer = 1,pgrid%c2cs1D(fndir,icg)%nLayers
332 pgrid%c2cs1D(fndir,icg)%layerInfo(x2cs_layer_beg,ilayer) = &
333 layerinfo(x2cs_layer_beg,ilayer)
334 pgrid%c2cs1D(fndir,icg)%layerInfo(x2cs_layer_end,ilayer) = &
335 layerinfo(x2cs_layer_end,ilayer)
342 IF ( pgrid%c2cs1D(fndir,icg)%nLayers < nlayersinfomin )
THEN
343 nlayersinfomin = pgrid%c2cs1D(fndir,icg)%nLayers
344 nlayersinfominloc = icg
347 IF ( pgrid%c2cs1D(fndir,icg)%nLayers > nlayersinfomax )
THEN
348 nlayersinfomax = pgrid%c2cs1D(fndir,icg)%nLayers
349 nlayersinfomaxloc = icg
352 IF ( pgrid%c2cs1D(fndir,icg)%nCellMembs < ncellmembsinfomin )
THEN
353 ncellmembsinfomin = pgrid%c2cs1D(fndir,icg)%nCellMembs
354 ncellmembsinfominloc = icg
357 IF ( pgrid%c2cs1D(fndir,icg)%nCellMembs > ncellmembsinfomax )
THEN
358 ncellmembsinfomax = pgrid%c2cs1D(fndir,icg)%nCellMembs
359 ncellmembsinfomaxloc = icg
367 DEALLOCATE(c2cs1d,stat=errorflag)
368 global%error = errorflag
369 IF ( global%error /= err_none )
THEN
370 CALL
errorstop(global,err_deallocate,__line__,
'c2cs1D')
373 DEALLOCATE(layerinfo,stat=errorflag)
374 global%error = errorflag
375 IF ( global%error /= err_none )
THEN
376 CALL
errorstop(global,err_deallocate,__line__,
'layerInfo')
383 IF ( (global%myProcid == masterproc) .AND. &
384 (global%verbLevel > verbose_none) .AND. &
385 (icgend > icgbeg) )
THEN
386 WRITE(stdout,
'(A,1X,A)') solver_name, &
387 'Building 1D cell-to-cell stencil done.'
431 INTEGER,
INTENT(IN) ::
dir,icgbeg,icgend
432 TYPE(t_region
),
POINTER :: pregion
438 INTEGER :: c2cs1dbeg,c2cs1dend,degr,errorflag,icg,icg2,icl,ict, &
439 ilayer,iloc,isl,ivg,ivl,iv2c,nbfacemembs,nbfacemembsmax, &
440 nbfacemembsmaxtemp,ncellmembsinfomax,ncellmembsinfomaxloc, &
441 ncellmembsinfomin,ncellmembsinfominloc,nlayersinfomax, &
442 nlayersinfomaxloc,nlayersinfomin,nlayersinfominloc, &
443 nlayersmax,nrows,
order,ordernominal,stencilsizemax, &
445 INTEGER,
DIMENSION(:),
ALLOCATABLE :: c2cs1d
446 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: bfacemembs,layerinfo
447 REAL(RFREAL) :: rc(xcoord:zcoord)
448 TYPE(t_grid),
POINTER :: pgrid
455 global => pregion%global
458 'RFLU_ModStencilsCells.F90')
460 IF ( (global%myProcid == masterproc) .AND. (icgend > icgbeg) )
THEN
461 IF ( global%verbLevel > verbose_none )
THEN
462 WRITE(stdout,
'(A,1X,A)') solver_name,
'Building cell-to-cell stencil...'
464 IF ( global%verbLevel > verbose_low )
THEN
465 WRITE(stdout,
'(A,3X,A,1X,I5.5)') solver_name,
'Global region:', &
466 pregion%iRegionGlobal
475 pgrid => pregion%grid
481 ordernominal = pgrid%c2csInfo%orderNominal
482 nlayersmax = pgrid%c2csInfo%nLayersMax
483 stencilsizemax = pgrid%c2csInfo%nCellMembsMax
484 stencilsizemin = pgrid%c2csInfo%nCellMembsMin
486 ncellmembsinfomax = 0
487 ncellmembsinfomin = huge(1)
490 nlayersinfomin = huge(1)
496 ALLOCATE(c2cs1d(stencilsizemax),stat=errorflag)
497 global%error = errorflag
498 IF ( global%error /= err_none )
THEN
499 CALL
errorstop(global,err_allocate,__line__,
'c2cs1D')
502 ALLOCATE(layerinfo(x2cs_layer_beg:x2cs_layer_end,nlayersmax), &
504 global%error = errorflag
505 IF ( global%error /= err_none )
THEN
506 CALL
errorstop(global,err_allocate,__line__,
'layerInfo')
513 DO icg = icgbeg,icgend
515 icl = pgrid%cellGlob2Loc(2,icg)
517 rc(xcoord) = pgrid%cofg(xcoord,icg)
518 rc(ycoord) = pgrid%cofg(ycoord,icg)
519 rc(zcoord) = pgrid%cofg(zcoord,icg)
527 DO isl = 1,stencilsizemax
531 DO ilayer = 1,nlayersmax
532 layerinfo(x2cs_layer_beg,ilayer) = 0
533 layerinfo(x2cs_layer_end,ilayer) = 0
536 pgrid%c2cs1D(
dir,icg)%nLayers = 1
545 layerinfo(x2cs_layer_beg,1) = 1
546 layerinfo(x2cs_layer_end,1) = degr
552 DO ilayer = 2,nlayersmax
555 IF ( degr < stencilsizemin )
THEN
556 c2cs1dbeg = layerinfo(x2cs_layer_beg,ilayer-1)
557 c2cs1dend = layerinfo(x2cs_layer_end,ilayer-1)
560 c2cs1dbeg,c2cs1dend,c2cs1d,rc,
dir)
562 pgrid%c2cs1D(
dir,icg)%nLayers = pgrid%c2cs1D(
dir,icg)%nLayers + 1
564 layerinfo(x2cs_layer_beg,ilayer) = &
565 layerinfo(x2cs_layer_end,ilayer-1) + 1
566 layerinfo(x2cs_layer_end,ilayer) = degr
576 pgrid%c2cs1D(
dir,icg)%nCellMembs = degr
578 ALLOCATE(pgrid%c2cs1D(
dir,icg)%cellMembs( &
579 pgrid%c2cs1D(
dir,icg)%nCellMembs),stat=errorflag)
580 global%error = errorflag
581 IF ( global%error /= err_none )
THEN
582 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs1D%cellMembs')
585 DO isl = 1,pgrid%c2cs1D(
dir,icg)%nCellMembs
586 pgrid%c2cs1D(
dir,icg)%cellMembs(isl) = c2cs1d(isl)
589 ALLOCATE(pgrid%c2cs1D(
dir,icg)%layerInfo(x2cs_layer_beg:x2cs_layer_end, &
590 pgrid%c2cs1D(
dir,icg)%nLayers),stat=errorflag)
591 global%error = errorflag
592 IF ( global%error /= err_none )
THEN
593 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs1D%layerInfo')
596 DO ilayer = 1,pgrid%c2cs1D(
dir,icg)%nLayers
597 pgrid%c2cs1D(
dir,icg)%layerInfo(x2cs_layer_beg,ilayer) = &
598 layerinfo(x2cs_layer_beg,ilayer)
599 pgrid%c2cs1D(
dir,icg)%layerInfo(x2cs_layer_end,ilayer) = &
600 layerinfo(x2cs_layer_end,ilayer)
607 IF ( pgrid%c2cs1D(
dir,icg)%nLayers < nlayersinfomin )
THEN
608 nlayersinfomin = pgrid%c2cs1D(
dir,icg)%nLayers
609 nlayersinfominloc = icg
612 IF ( pgrid%c2cs1D(
dir,icg)%nLayers > nlayersinfomax )
THEN
613 nlayersinfomax = pgrid%c2cs1D(
dir,icg)%nLayers
614 nlayersinfomaxloc = icg
617 IF ( pgrid%c2cs1D(
dir,icg)%nCellMembs < ncellmembsinfomin )
THEN
618 ncellmembsinfomin = pgrid%c2cs1D(
dir,icg)%nCellMembs
619 ncellmembsinfominloc = icg
622 IF ( pgrid%c2cs1D(
dir,icg)%nCellMembs > ncellmembsinfomax )
THEN
623 ncellmembsinfomax = pgrid%c2cs1D(
dir,icg)%nCellMembs
624 ncellmembsinfomaxloc = icg
632 DEALLOCATE(c2cs1d,stat=errorflag)
633 global%error = errorflag
634 IF ( global%error /= err_none )
THEN
635 CALL
errorstop(global,err_deallocate,__line__,
'c2cs')
638 DEALLOCATE(layerinfo,stat=errorflag)
639 global%error = errorflag
640 IF ( global%error /= err_none )
THEN
641 CALL
errorstop(global,err_deallocate,__line__,
'layerInfo')
648 IF ( (global%myProcid == masterproc) .AND. &
649 (global%verbLevel > verbose_low) .AND. &
650 (icgend > icgbeg) )
THEN
651 WRITE(stdout,
'(A,3X,A)') solver_name,
'Statistics:'
652 WRITE(stdout,
'(A,5X,A,2(1X,I3),2(1X,I9))') solver_name, &
653 'Minimum/maximum number of cell layers: ',nlayersinfomin, &
654 nlayersinfomax,nlayersinfominloc,nlayersinfomaxloc
655 WRITE(stdout,
'(A,5X,A,2(1X,I3),2(1X,I9))') solver_name, &
656 'Minimum/maximum number of cell members:',ncellmembsinfomin, &
657 ncellmembsinfomax,ncellmembsinfominloc,ncellmembsinfomaxloc
660 #ifdef CHECK_DATASTRUCT
665 WRITE(stdout,
'(A)') solver_name
666 WRITE(stdout,
'(A,1X,A)') solver_name,
'### START CHECK OUTPUT ###'
667 WRITE(stdout,
'(A,1X,A)') solver_name,
'Cell-to-cell stencils'
668 WRITE(stdout,
'(A,1X,A,1X,I6)') solver_name,
'Maximum number of layers:', &
669 pgrid%c2csInfo%nLayersMax
670 WRITE(stdout,
'(A,1X,A,1X,I6)') solver_name,
'Minimum stencil size:', &
671 pgrid%c2csInfo%nCellMembsMin
673 DO icg = 1,pgrid%nCellsTot
674 WRITE(stdout,
'(A,1X,I6,2(1X,I3),3X,20(1X,I6))') solver_name,icg, &
675 pgrid%c2cs1D(
dir,icg)%nLayers,pgrid%c2cs1D(
dir,icg)%nCellMembs, &
676 pgrid%c2cs1D(
dir,icg)%cellMembs(1:pgrid%c2cs1D(
dir,icg)%nCellMembs)
679 WRITE(stdout,
'(A,1X,A)') solver_name,
'### END CHECK OUTPUT ###'
680 WRITE(stdout,
'(A)') solver_name
687 IF ( (global%myProcid == masterproc) .AND. &
688 (global%verbLevel > verbose_none) .AND. &
689 (icgend > icgbeg) )
THEN
690 WRITE(stdout,
'(A,1X,A)') solver_name,
'Building cell-to-cell stencil done.'
736 LOGICAL,
INTENT(IN) :: addbfaces
737 INTEGER,
INTENT(IN) :: icgbeg,icgend
738 TYPE(t_region
),
POINTER :: pregion
744 INTEGER :: c2csbeg,c2csend,degr,errorflag,icg,icg2,icl,ict, &
745 ilayer,iloc,isl,ivg,ivl,iv2c,nbfacemembs,nbfacemembsmax, &
746 nbfacemembsmaxtemp,ncellmembsinfomax,ncellmembsinfomaxloc, &
747 ncellmembsinfomin,ncellmembsinfominloc,nlayersinfomax, &
748 nlayersinfomaxloc,nlayersinfomin,nlayersinfominloc, &
749 nlayersmax,nrows,
order,ordernominal,scount,stencilsizemax, &
750 stencilsizemin,ncols,irow,icol
751 INTEGER,
DIMENSION(:),
ALLOCATABLE :: c2cs,c2cstemp
752 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: bfacemembs,layerinfo
754 REAL(RFREAL) :: colmax(4)
755 REAL(RFREAL),
DIMENSION(:,:),
ALLOCATABLE ::
a,
ainv
756 TYPE(t_grid),
POINTER :: pgrid
763 global => pregion%global
766 'RFLU_ModStencilsCells.F90')
768 IF ( (global%myProcid == masterproc) .AND. (icgend > icgbeg) )
THEN
769 IF ( global%verbLevel > verbose_none )
THEN
770 WRITE(stdout,
'(A,1X,A)') solver_name,
'Building cell-to-cell stencil...'
772 IF ( global%verbLevel > verbose_low )
THEN
773 WRITE(stdout,
'(A,3X,A,1X,I5.5)') solver_name,
'Global region:', &
774 pregion%iRegionGlobal
783 pgrid => pregion%grid
789 ordernominal = pgrid%c2csInfo%orderNominal
790 nlayersmax = pgrid%c2csInfo%nLayersMax
791 nbfacemembsmax = pgrid%c2csInfo%nBFaceMembsMax
792 stencilsizemax = pgrid%c2csInfo%nCellMembsMax
793 stencilsizemin = pgrid%c2csInfo%nCellMembsMin
795 ncellmembsinfomax = 0
796 ncellmembsinfomin = huge(1)
799 nlayersinfomin = huge(1)
801 nbfacemembsmaxtemp = 2*nbfacemembsmax
807 ALLOCATE(c2cs(stencilsizemax),stat=errorflag)
808 global%error = errorflag
809 IF ( global%error /= err_none )
THEN
810 CALL
errorstop(global,err_allocate,__line__,
'c2cs')
813 ALLOCATE(bfacemembs(2,nbfacemembsmaxtemp),stat=errorflag)
814 global%error = errorflag
815 IF ( global%error /= err_none )
THEN
816 CALL
errorstop(global,err_allocate,__line__,
'bFaceMembs')
819 ALLOCATE(layerinfo(x2cs_layer_beg:x2cs_layer_end,nlayersmax), &
821 global%error = errorflag
822 IF ( global%error /= err_none )
THEN
823 CALL
errorstop(global,err_allocate,__line__,
'layerInfo')
830 DO icg = icgbeg,icgend
832 icl = pgrid%cellGlob2Loc(2,icg)
840 DO isl = 1,stencilsizemax
844 DO ilayer = 1,nlayersmax
845 layerinfo(x2cs_layer_beg,ilayer) = 0
846 layerinfo(x2cs_layer_end,ilayer) = 0
849 pgrid%c2cs(icg)%nLayers = 1
857 layerinfo(x2cs_layer_beg,1) = 1
858 layerinfo(x2cs_layer_end,1) = degr
864 DO ilayer = 2,nlayersmax
872 IF ( degr >= stencilsizemin )
THEN
874 ncols = pregion%mixtInput%dimens + 1
876 ALLOCATE(
a(nrows,ncols),stat=errorflag)
877 global%error = errorflag
878 IF ( global%error /= err_none )
THEN
879 CALL
errorstop(global,err_allocate,__line__,
'a')
882 ALLOCATE(
ainv(nrows,ncols),stat=errorflag)
883 global%error = errorflag
884 IF ( global%error /= err_none )
THEN
885 CALL
errorstop(global,err_allocate,__line__,
'aInv')
888 SELECT CASE ( pregion%mixtInput%dimens )
893 dx = pgrid%cofg(xcoord,icg2) - pgrid%cofg(xcoord,icg)
894 dy = pgrid%cofg(ycoord,icg2) - pgrid%cofg(ycoord,icg)
906 dx = pgrid%cofg(xcoord,icg2) - pgrid%cofg(xcoord,icg)
907 dy = pgrid%cofg(ycoord,icg2) - pgrid%cofg(ycoord,icg)
908 dz = pgrid%cofg(zcoord,icg2) - pgrid%cofg(zcoord,icg)
918 CALL
errorstop(global,err_reached_default,__line__)
922 colmax(icol) = -huge(1.0_rfreal)
925 colmax(icol) =
max(colmax(icol),abs(
a(irow,icol)))
929 a(irow,icol) =
a(irow,icol)/colmax(icol)
935 DEALLOCATE(
a,stat=errorflag)
936 global%error = errorflag
937 IF ( global%error /= err_none )
THEN
938 CALL
errorstop(global,err_deallocate,__line__,
'a')
941 DEALLOCATE(
ainv,stat=errorflag)
942 global%error = errorflag
943 IF ( global%error /= err_none )
THEN
944 CALL
errorstop(global,err_deallocate,__line__,
'aInv')
953 IF ( scount /= 0 .OR. degr < stencilsizemin )
THEN
954 c2csbeg = layerinfo(x2cs_layer_beg,ilayer-1)
955 c2csend = layerinfo(x2cs_layer_end,ilayer-1)
958 c2csbeg,c2csend,c2cs)
959 pgrid%c2cs(icg)%nLayers = pgrid%c2cs(icg)%nLayers + 1
961 layerinfo(x2cs_layer_beg,ilayer) = &
962 layerinfo(x2cs_layer_end,ilayer-1) + 1
963 layerinfo(x2cs_layer_end,ilayer) = degr
973 pgrid%c2cs(icg)%nCellMembs = degr
975 ALLOCATE(pgrid%c2cs(icg)%cellMembs(pgrid%c2cs(icg)%nCellMembs), &
977 global%error = errorflag
978 IF ( global%error /= err_none )
THEN
979 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs%cellMembs')
982 DO isl = 1,pgrid%c2cs(icg)%nCellMembs
983 pgrid%c2cs(icg)%cellMembs(isl) = c2cs(isl)
986 ALLOCATE(pgrid%c2cs(icg)%layerInfo(x2cs_layer_beg:x2cs_layer_end, &
987 pgrid%c2cs(icg)%nLayers),stat=errorflag)
988 global%error = errorflag
989 IF ( global%error /= err_none )
THEN
990 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs%layerInfo')
993 DO ilayer = 1,pgrid%c2cs(icg)%nLayers
994 pgrid%c2cs(icg)%layerInfo(x2cs_layer_beg,ilayer) = &
995 layerinfo(x2cs_layer_beg,ilayer)
996 pgrid%c2cs(icg)%layerInfo(x2cs_layer_end,ilayer) = &
997 layerinfo(x2cs_layer_end,ilayer)
1010 IF ( addbfaces .EQV. .true. )
THEN
1011 ALLOCATE(c2cstemp(pgrid%c2cs(icg)%nCellMembs+1),stat=errorflag)
1012 global%error = errorflag
1013 IF ( global%error /= err_none )
THEN
1014 CALL
errorstop(global,err_allocate,__line__,
'c2csTemp')
1019 DO isl = 1,pgrid%c2cs(icg)%nCellMembs
1020 c2cstemp(isl+1) = pgrid%c2cs(icg)%cellMembs(isl)
1024 pgrid%c2cs(icg)%nCellMembs+1, &
1025 c2cstemp,nbfacemembs,bfacemembs)
1027 DEALLOCATE(c2cstemp,stat=errorflag)
1028 global%error = errorflag
1029 IF ( global%error /= err_none )
THEN
1030 CALL
errorstop(global,err_deallocate,__line__,
'c2csTemp')
1034 IF ( nbfacemembs > 0 )
THEN
1036 nbfacemembs,bfacemembs(1:2,1:nbfacemembs))
1038 pgrid%c2cs(icg)%nBFaceMembs =
min(nbfacemembs,nbfacemembsmax)
1040 ALLOCATE(pgrid%c2cs(icg)%bFaceMembs(2,pgrid%c2cs(icg)%nBFaceMembs), &
1042 global%error = errorflag
1043 IF ( global%error /= err_none )
THEN
1044 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs%bFaceMembs')
1047 DO isl = 1,pgrid%c2cs(icg)%nBFaceMembs
1048 pgrid%c2cs(icg)%bFaceMembs(1,isl) = bfacemembs(1,isl)
1049 pgrid%c2cs(icg)%bFaceMembs(2,isl) = bfacemembs(2,isl)
1052 pgrid%c2cs(icg)%nBFaceMembs = 0
1054 nullify(pgrid%c2cs(icg)%bFaceMembs)
1061 IF ( pgrid%c2cs(icg)%nLayers < nlayersinfomin )
THEN
1062 nlayersinfomin = pgrid%c2cs(icg)%nLayers
1063 nlayersinfominloc = icg
1066 IF ( pgrid%c2cs(icg)%nLayers > nlayersinfomax )
THEN
1067 nlayersinfomax = pgrid%c2cs(icg)%nLayers
1068 nlayersinfomaxloc = icg
1071 IF ( pgrid%c2cs(icg)%nCellMembs < ncellmembsinfomin )
THEN
1072 ncellmembsinfomin = pgrid%c2cs(icg)%nCellMembs
1073 ncellmembsinfominloc = icg
1076 IF ( pgrid%c2cs(icg)%nCellMembs > ncellmembsinfomax )
THEN
1077 ncellmembsinfomax = pgrid%c2cs(icg)%nCellMembs
1078 ncellmembsinfomaxloc = icg
1086 DEALLOCATE(c2cs,stat=errorflag)
1087 global%error = errorflag
1088 IF ( global%error /= err_none )
THEN
1089 CALL
errorstop(global,err_deallocate,__line__,
'c2cs')
1092 DEALLOCATE(bfacemembs,stat=errorflag)
1093 global%error = errorflag
1094 IF ( global%error /= err_none )
THEN
1095 CALL
errorstop(global,err_deallocate,__line__,
'bFaceMembs')
1098 DEALLOCATE(layerinfo,stat=errorflag)
1099 global%error = errorflag
1100 IF ( global%error /= err_none )
THEN
1101 CALL
errorstop(global,err_deallocate,__line__,
'layerInfo')
1108 IF ( (global%myProcid == masterproc) .AND. &
1109 (global%verbLevel > verbose_low) .AND. &
1110 (icgend > icgbeg) )
THEN
1111 WRITE(stdout,
'(A,3X,A)') solver_name,
'Statistics:'
1112 WRITE(stdout,
'(A,5X,A,2(1X,I3),2(1X,I9))') solver_name, &
1113 'Minimum/maximum number of cell layers: ',nlayersinfomin, &
1114 nlayersinfomax,nlayersinfominloc,nlayersinfomaxloc
1115 WRITE(stdout,
'(A,5X,A,2(1X,I3),2(1X,I9))') solver_name, &
1116 'Minimum/maximum number of cell members:',ncellmembsinfomin, &
1117 ncellmembsinfomax,ncellmembsinfominloc,ncellmembsinfomaxloc
1120 #ifdef CHECK_DATASTRUCT
1125 WRITE(stdout,
'(A)') solver_name
1126 WRITE(stdout,
'(A,1X,A)') solver_name,
'### START CHECK OUTPUT ###'
1127 WRITE(stdout,
'(A,1X,A)') solver_name,
'Cell-to-cell stencils'
1128 WRITE(stdout,
'(A,1X,A,1X,I6)') solver_name,
'Maximum number of layers:', &
1129 pgrid%c2csInfo%nLayersMax
1130 WRITE(stdout,
'(A,1X,A,1X,I6)') solver_name,
'Minimum stencil size:', &
1131 pgrid%c2csInfo%nCellMembsMin
1133 DO icg = 1,pgrid%nCellsTot
1134 WRITE(stdout,
'(A,1X,I6,2(1X,I3),3X,20(1X,I6))') solver_name,icg, &
1135 pgrid%c2cs(icg)%nLayers,pgrid%c2cs(icg)%nCellMembs, &
1136 pgrid%c2cs(icg)%cellMembs(1:pgrid%c2cs(icg)%nCellMembs)
1139 WRITE(stdout,
'(A,1X,A)') solver_name,
'### END CHECK OUTPUT ###'
1140 WRITE(stdout,
'(A)') solver_name
1147 IF ( (global%myProcid == masterproc) .AND. &
1148 (global%verbLevel > verbose_none) .AND. &
1149 (icgend > icgbeg) )
THEN
1150 WRITE(stdout,
'(A,1X,A)') solver_name,
'Building cell-to-cell stencil done.'
1192 INTEGER,
INTENT(IN) :: icg,stencilsizemax
1193 INTEGER,
INTENT(OUT) :: degr
1194 INTEGER,
INTENT(OUT) :: c2cs(stencilsizemax)
1195 TYPE(t_region
),
POINTER :: pregion
1201 INTEGER,
PARAMETER :: nvertmax = 8
1202 INTEGER :: errorflag,icg2,icl,icltemp,icl2,ict,ict2,iloc,ivg,ivl,ivl2, &
1203 iv2c,ncells,ncells2,
nvert,nvert2,nvert3
1204 INTEGER,
DIMENSION(NVERTMAX) :: vtemp,vtemp2,vtemp3
1205 INTEGER,
DIMENSION(:),
ALLOCATABLE :: icgtemp
1206 INTEGER,
DIMENSION(:,:),
POINTER :: x2v
1208 REAL(RFREAL),
DIMENSION(:),
ALLOCATABLE :: nvertsharedfrac
1209 TYPE(t_grid),
POINTER :: pgrid
1216 global => pregion%global
1219 'RFLU_ModStencilsCells.F90')
1225 pgrid => pregion%grid
1232 icl = pgrid%cellGlob2Loc(2,icg)
1239 CASE ( cell_type_tet )
1241 CASE ( cell_type_hex )
1243 CASE ( cell_type_pri )
1245 CASE ( cell_type_pyr )
1248 CALL
errorstop(global,err_reached_default,__line__)
1252 invert = 1.0_rfreal/
REAL(nVert,KIND=RFREAL)
1259 ncells = ncells + pgrid%v2cInfo(v2c_end,ivg) &
1260 - pgrid%v2cInfo(v2c_beg,ivg) &
1264 ALLOCATE(icgtemp(ncells),stat=errorflag)
1265 global%error = errorflag
1266 IF ( global%error /= err_none )
THEN
1267 CALL
errorstop(global,err_allocate,__line__,
'icgTemp')
1270 ALLOCATE(nvertsharedfrac(ncells),stat=errorflag)
1271 global%error = errorflag
1272 IF ( global%error /= err_none )
THEN
1273 CALL
errorstop(global,err_allocate,__line__,
'nVertSharedFrac')
1281 DO iv2c = pgrid%v2cInfo(v2c_beg,ivg),pgrid%v2cInfo(v2c_end,ivg)
1284 icgtemp(ncells) = pgrid%v2c(iv2c)
1296 IF ( iloc /= element_not_found )
THEN
1300 WRITE(*,*)
'ERROR! Cell icg not found in own stencil!'
1313 DO icltemp = 1,ncells2
1314 icg2 = icgtemp(icltemp)
1317 icl2 = pgrid%cellGlob2Loc(2,icg2)
1319 SELECT CASE ( ict2 )
1320 CASE ( cell_type_tet )
1322 vtemp2(1:4) = pgrid%tet2v(1:4,icl2)
1323 CASE ( cell_type_hex )
1325 vtemp2(1:8) = pgrid%hex2v(1:8,icl2)
1326 CASE ( cell_type_pri )
1328 vtemp2(1:6) = pgrid%pri2v(1:6,icl2)
1329 CASE ( cell_type_pyr )
1331 vtemp2(1:5) = pgrid%pyr2v(1:5,icl2)
1333 CALL
errorstop(global,err_reached_default,__line__)
1338 nvert2,vtemp3,nvertmax,nvert3,errorflag)
1340 IF ( errorflag /= err_none )
THEN
1341 WRITE(*,*)
'ERROR!',errorflag
1344 IF ( nvert3 == 0 )
THEN
1345 WRITE(*,*)
'ERROR! nVert3 = 0!!!'
1349 nvertsharedfrac(icltemp) = nvert3*
invert
1361 DO icl2 = ncells2,
max(ncells2-stencilsizemax+1,1),-1
1363 c2cs(degr) = icgtemp(icl2)
1372 DEALLOCATE(icgtemp,stat=errorflag)
1373 global%error = errorflag
1374 IF ( global%error /= err_none )
THEN
1375 CALL
errorstop(global,err_deallocate,__line__,
'icgTemp')
1378 DEALLOCATE(nvertsharedfrac,stat=errorflag)
1379 global%error = errorflag
1380 IF ( global%error /= err_none )
THEN
1381 CALL
errorstop(global,err_deallocate,__line__,
'nVertSharedFrac')
1432 INTEGER,
INTENT(IN) ::
dir,icg,stencilsizemax
1433 INTEGER,
INTENT(OUT) :: degr
1434 INTEGER,
INTENT(OUT) :: c2cs1d(stencilsizemax)
1435 TYPE(t_region
),
POINTER :: pregion
1441 INTEGER :: errorflag,icg2,icl,ict,iloc,ivg,ivl,iv2c,ncells,ncells2
1442 INTEGER,
DIMENSION(:),
ALLOCATABLE :: icgtemp
1443 REAL(RFREAL) :: dr(xcoord:zcoord),rc(xcoord:zcoord)
1444 TYPE(t_grid),
POINTER :: pgrid
1451 global => pregion%global
1454 'RFLU_ModStencilsCells.F90')
1460 pgrid => pregion%grid
1467 icl = pgrid%cellGlob2Loc(2,icg)
1469 IF ( ict /= cell_type_hex )
THEN
1470 CALL
errorstop(global,err_reached_default,__line__)
1473 IF ( icl /= icg )
THEN
1475 CALL
errorstop(global,err_reached_default,__line__)
1479 rc(xcoord) = pgrid%cofg(xcoord,icg)
1480 rc(ycoord) = pgrid%cofg(ycoord,icg)
1481 rc(zcoord) = pgrid%cofg(zcoord,icg)
1491 ivg = pgrid%hex2v(ivl,icg)
1493 ncells = ncells + pgrid%v2cInfo(v2c_end,ivg) &
1494 - pgrid%v2cInfo(v2c_beg,ivg) &
1498 ALLOCATE(icgtemp(ncells),stat=errorflag)
1499 global%error = errorflag
1500 IF ( global%error /= err_none )
THEN
1501 CALL
errorstop(global,err_allocate,__line__,
'icgTemp')
1507 ivg = pgrid%hex2v(ivl,icl)
1509 DO iv2c = pgrid%v2cInfo(v2c_beg,ivg),pgrid%v2cInfo(v2c_end,ivg)
1510 icg2 = pgrid%v2c(iv2c)
1512 dr(xcoord) = pgrid%cofg(xcoord,icg2) - rc(xcoord)
1513 dr(ycoord) = pgrid%cofg(ycoord,icg2) - rc(ycoord)
1514 dr(zcoord) = pgrid%cofg(zcoord,icg2) - rc(zcoord)
1519 icgtemp(ncells) = icg2
1532 IF ( iloc /= element_not_found )
THEN
1536 WRITE(*,*)
'ERROR! Cell icg not found in own stencil!'
1547 DO icl = ncells2,
max(ncells2-stencilsizemax+1,1),-1
1549 c2cs1d(degr) = icgtemp(icl)
1558 DEALLOCATE(icgtemp,stat=errorflag)
1559 global%error = errorflag
1560 IF ( global%error /= err_none )
THEN
1561 CALL
errorstop(global,err_deallocate,__line__,
'icgTemp')
1608 INTEGER,
INTENT(IN),
OPTIONAL :: icginput,constrinput
1609 TYPE(t_region
),
POINTER :: pregion
1615 LOGICAL :: addbfaces
1616 INTEGER :: icgbeg,icgend
1617 TYPE(t_grid),
POINTER :: pgrid
1624 global => pregion%global
1627 'RFLU_ModStencilsCells.F90')
1633 pgrid => pregion%grid
1635 IF ( .NOT. present(icginput) )
THEN
1637 icgend = pgrid%nCellsTot
1643 IF ( .NOT. present(constrinput) )
THEN
1646 IF ( constrinput == constr_none )
THEN
1657 SELECT CASE ( pregion%mixtInput%stencilDimensCells )
1661 IF ( pregion%mixtInput%dimens > 1 )
THEN
1664 IF ( pregion%mixtInput%dimens > 2 )
THEN
1671 CALL
errorstop(global,err_reached_default,__line__)
1715 TYPE(t_region
),
POINTER :: pregion
1721 INTEGER :: errorflag,icg
1722 TYPE(t_grid),
POINTER :: pgrid
1729 global => pregion%global
1732 'RFLU_ModStencilsCells.F90')
1734 IF ( global%myProcid == masterproc .AND. &
1735 global%verbLevel > verbose_none )
THEN
1736 WRITE(stdout,
'(A,1X,A,A)') solver_name,
'Building list of constrained ', &
1737 'cell-to-cell stencil...'
1744 pgrid => pregion%grid
1750 pgrid%nCellsConstr = 0
1752 IF ( pregion%mixtInput%cReconstCells > constr_none )
THEN
1753 DO icg = 1,pgrid%nCellsTot
1754 IF ( pgrid%c2cs(icg)%nBFaceMembs > 0 )
THEN
1755 pgrid%nCellsConstr = pgrid%nCellsConstr + 1
1759 IF ( pgrid%nCellsConstr > 0 )
THEN
1760 ALLOCATE(pgrid%icgConstr(pgrid%nCellsConstr),stat=errorflag)
1761 global%error = errorflag
1762 IF ( global%error /= err_none )
THEN
1763 CALL
errorstop(global,err_allocate,__line__,
'pGrid%icgConstr')
1766 pgrid%nCellsConstr = 0
1768 DO icg = 1,pgrid%nCellsTot
1769 IF ( pgrid%c2cs(icg)%nBFaceMembs > 0 )
THEN
1770 pgrid%nCellsConstr = pgrid%nCellsConstr + 1
1772 pgrid%icgConstr(pgrid%nCellsConstr) = icg
1776 nullify(pgrid%icgConstr)
1779 nullify(pgrid%icgConstr)
1786 IF ( global%myProcid == masterproc .AND. &
1787 global%verbLevel > verbose_low )
THEN
1788 WRITE(stdout,
'(A,3X,A,A,1X,I5)') solver_name,
'Number of constrained ', &
1789 'cell-to-cell stencils:', &
1797 IF ( global%myProcid == masterproc .AND. &
1798 global%verbLevel > verbose_none )
THEN
1799 WRITE(stdout,
'(A,1X,A,A)') solver_name,
'Building list of constrained ', &
1800 'cell-to-cell stencil done.'
1840 TYPE(t_region
),
POINTER :: pregion
1846 INTEGER :: errorflag,fndir,fndirend,icg
1847 TYPE(t_grid),
POINTER :: pgrid
1854 global => pregion%global
1857 'RFLU_ModStencilsCells.F90')
1859 IF ( global%myProcid == masterproc .AND. &
1860 global%verbLevel > verbose_none )
THEN
1861 WRITE(stdout,
'(A,1X,A)') solver_name,
'Creating 1D cell-to-cell stencil...'
1874 pgrid => pregion%grid
1880 SELECT CASE ( pregion%mixtInput%dimens )
1888 CALL
errorstop(global,err_reached_default,__line__)
1891 ALLOCATE(pgrid%c2cs1D(xcoord:fndirend,pgrid%nCellsTot),stat=errorflag)
1892 global%error = errorflag
1893 IF ( global%error /= err_none )
THEN
1894 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs1D')
1897 DO fndir = xcoord,fndirend
1898 DO icg = 1,pgrid%nCellsTot
1899 pgrid%c2cs1D(fndir,icg)%nCellMembs = 0
1900 pgrid%c2cs1D(fndir,icg)%nBFaceMembs = 0
1908 IF ( global%myProcid == masterproc .AND. &
1909 global%verbLevel > verbose_none )
THEN
1910 WRITE(stdout,
'(A,1X,A)') solver_name, &
1911 'Creating 1D cell-to-cell stencil done.'
1951 TYPE(t_region
),
POINTER :: pregion
1957 INTEGER :: errorflag,icg
1958 TYPE(t_grid),
POINTER :: pgrid
1965 global => pregion%global
1968 'RFLU_ModStencilsCells.F90')
1970 IF ( global%myProcid == masterproc .AND. &
1971 global%verbLevel > verbose_none )
THEN
1972 WRITE(stdout,
'(A,1X,A)') solver_name,
'Creating cell-to-cell stencil...'
1985 pgrid => pregion%grid
1991 ALLOCATE(pgrid%c2cs(pgrid%nCellsTot),stat=errorflag)
1992 global%error = errorflag
1993 IF ( global%error /= err_none )
THEN
1994 CALL
errorstop(global,err_allocate,__line__,
'pGrid%c2cs')
1997 DO icg = 1,pgrid%nCellsTot
1998 pgrid%c2cs(icg)%nCellMembs = 0
1999 pgrid%c2cs(icg)%nBFaceMembs = 0
2006 IF ( global%myProcid == masterproc .AND. &
2007 global%verbLevel > verbose_none )
THEN
2008 WRITE(stdout,
'(A,1X,A)') solver_name, &
2009 'Creating cell-to-cell stencil done.'
2048 TYPE(t_region
),
POINTER :: pregion
2060 global => pregion%global
2063 'RFLU_ModStencilsCells.F90')
2069 SELECT CASE ( pregion%mixtInput%stencilDimensCells )
2075 CALL
errorstop(global,err_reached_default,__line__)
2120 TYPE(t_region
),
POINTER :: pregion
2126 INTEGER :: errorflag,fndir,fndirend,icg
2127 TYPE(t_grid),
POINTER :: pgrid
2134 global => pregion%global
2137 'RFLU_ModStencilsCells.F90')
2139 IF ( global%myProcid == masterproc .AND. &
2140 global%verbLevel > verbose_none )
THEN
2141 WRITE(stdout,
'(A,1X,A)') solver_name, &
2142 'Destroying 1D cell-to-cell stencil...'
2149 pgrid => pregion%grid
2155 SELECT CASE ( pregion%mixtInput%dimens )
2163 CALL
errorstop(global,err_reached_default,__line__)
2166 DO fndir = xcoord,fndirend
2167 DO icg = 1,pgrid%nCellsTot
2168 IF ( pgrid%c2cs1D(fndir,icg)%nCellMembs > 0 )
THEN
2169 DEALLOCATE(pgrid%c2cs1D(fndir,icg)%cellMembs,stat=errorflag)
2170 global%error = errorflag
2171 IF ( global%error /= err_none )
THEN
2172 CALL
errorstop(global,err_deallocate,__line__, &
2173 'pGrid%c2cs1D%cellMembs')
2176 pgrid%c2cs1D(fndir,icg)%nCellMembs = 0
2179 IF ( pgrid%c2cs1D(fndir,icg)%nBFaceMembs > 0 )
THEN
2180 DEALLOCATE(pgrid%c2cs1D(fndir,icg)%bFaceMembs,stat=errorflag)
2181 global%error = errorflag
2182 IF ( global%error /= err_none )
THEN
2183 CALL
errorstop(global,err_deallocate,__line__, &
2184 'pGrid%c2cs1D%bFaceMembs')
2187 pgrid%c2cs1D(fndir,icg)%nBFaceMembs = 0
2192 DEALLOCATE(pgrid%c2cs1D,stat=errorflag)
2193 global%error = errorflag
2194 IF ( global%error /= err_none )
THEN
2195 CALL
errorstop(global,err_deallocate,__line__,
'pGrid%c2cs1D')
2208 IF ( global%myProcid == masterproc .AND. &
2209 global%verbLevel > verbose_none )
THEN
2210 WRITE(stdout,
'(A,1X,A)') solver_name, &
2211 'Destroying 1D cell-to-cell stencil done.'
2252 TYPE(t_region
),
POINTER :: pregion
2258 INTEGER :: errorflag,icg
2259 TYPE(t_grid),
POINTER :: pgrid
2266 global => pregion%global
2269 'RFLU_ModStencilsCells.F90')
2271 IF ( global%myProcid == masterproc .AND. &
2272 global%verbLevel > verbose_none )
THEN
2273 WRITE(stdout,
'(A,1X,A)') solver_name, &
2274 'Destroying cell-to-cell stencil...'
2281 pgrid => pregion%grid
2287 DO icg = 1,pgrid%nCellsTot
2288 IF ( pgrid%c2cs(icg)%nCellMembs > 0 )
THEN
2289 DEALLOCATE(pgrid%c2cs(icg)%cellMembs,stat=errorflag)
2290 global%error = errorflag
2291 IF ( global%error /= err_none )
THEN
2292 CALL
errorstop(global,err_deallocate,__line__,
'pGrid%c2cs%cellMembs')
2295 pgrid%c2cs(icg)%nCellMembs = 0
2298 IF ( pgrid%c2cs(icg)%nBFaceMembs > 0 )
THEN
2299 DEALLOCATE(pgrid%c2cs(icg)%bFaceMembs,stat=errorflag)
2300 global%error = errorflag
2301 IF ( global%error /= err_none )
THEN
2302 CALL
errorstop(global,err_deallocate,__line__,
'pGrid%c2cs%bFaceMembs')
2305 pgrid%c2cs(icg)%nBFaceMembs = 0
2309 DEALLOCATE(pgrid%c2cs,stat=errorflag)
2310 global%error = errorflag
2311 IF ( global%error /= err_none )
THEN
2312 CALL
errorstop(global,err_deallocate,__line__,
'pGrid%c2cs')
2325 IF ( global%myProcid == masterproc .AND. &
2326 global%verbLevel > verbose_none )
THEN
2327 WRITE(stdout,
'(A,1X,A)') solver_name, &
2328 'Destroying cell-to-cell stencil done.'
2368 TYPE(t_region
),
POINTER :: pregion
2380 global => pregion%global
2383 'RFLU_ModStencilsCells.F90')
2389 SELECT CASE ( pregion%mixtInput%stencilDimensCells )
2395 CALL
errorstop(global,err_reached_default,__line__)
2439 TYPE(t_region
),
POINTER :: pregion
2445 INTEGER :: errorflag
2446 TYPE(t_grid),
POINTER :: pgrid
2453 global => pregion%global
2456 'RFLU_ModStencilsCells.F90')
2458 IF ( global%myProcid == masterproc .AND. &
2459 global%verbLevel > verbose_none )
THEN
2460 WRITE(stdout,
'(A,1X,A,A)') solver_name,
'Destroying list of ', &
2461 'constrained cell-to-cell stencil...'
2468 pgrid => pregion%grid
2474 IF ( pregion%mixtInput%cReconstCells > constr_none )
THEN
2475 IF ( pgrid%nCellsConstr > 0 )
THEN
2476 DEALLOCATE(pgrid%icgConstr,stat=errorflag)
2477 global%error = errorflag
2478 IF ( global%error /= err_none )
THEN
2479 CALL
errorstop(global,err_deallocate,__line__,
'pGrid%icgConstr')
2482 pgrid%nCellsConstr = 0
2490 IF ( global%myProcid == masterproc .AND. &
2491 global%verbLevel > verbose_none )
THEN
2492 WRITE(stdout,
'(A,1X,A,A)') solver_name,
'Destroying list of ', &
2493 'constrained cell-to-cell stencil done.'
2532 TYPE(t_region
),
POINTER :: pregion
2538 TYPE(t_grid),
POINTER :: pgrid
2545 global => pregion%global
2548 'RFLU_ModStencilsCells.F90')
2550 IF ( global%myProcid == masterproc .AND. &
2551 global%verbLevel > verbose_none )
THEN
2552 WRITE(stdout,
'(A,1X,A)') solver_name, &
2553 'Nullifying 1D cell-to-cell stencil...'
2560 pgrid => pregion%grid
2566 nullify(pgrid%c2cs1D)
2572 IF ( global%myProcid == masterproc .AND. &
2573 global%verbLevel > verbose_none )
THEN
2574 WRITE(stdout,
'(A,1X,A)') solver_name, &
2575 'Nullifying 1D cell-to-cell stencil done.'
2616 TYPE(t_region
),
POINTER :: pregion
2622 TYPE(t_grid),
POINTER :: pgrid
2629 global => pregion%global
2632 'RFLU_ModStencilsCells.F90')
2634 IF ( global%myProcid == masterproc .AND. &
2635 global%verbLevel > verbose_none )
THEN
2636 WRITE(stdout,
'(A,1X,A)') solver_name, &
2637 'Nullifying cell-to-cell stencil...'
2644 pgrid => pregion%grid
2656 IF ( global%myProcid == masterproc .AND. &
2657 global%verbLevel > verbose_none )
THEN
2658 WRITE(stdout,
'(A,1X,A)') solver_name, &
2659 'Nullifying cell-to-cell stencil done.'
2703 INTEGER,
INTENT(IN) :: ordernominal
2704 TYPE(t_region
),
POINTER :: pregion
2710 INTEGER :: nbfacemembsmax,nlayersmax,stencilsizemax,stencilsizemin
2711 TYPE(t_grid),
POINTER :: pgrid
2718 global => pregion%global
2721 'RFLU_ModStencilsCells.F90')
2723 IF ( global%myProcid == masterproc .AND. &
2724 global%verbLevel > verbose_none )
THEN
2725 WRITE(stdout,
'(A,1X,A)') solver_name, &
2726 'Setting 1D cell-to-cell stencil information...'
2733 pgrid => pregion%grid
2739 nlayersmax = ordernominal+1
2741 stencilsizemin = ordernominal+1
2742 stencilsizemax = ordernominal+1
2744 pgrid%c2csInfo%orderNominal = ordernominal
2745 pgrid%c2csInfo%nLayersMax = nlayersmax
2746 pgrid%c2csInfo%nBFaceMembsMax = nbfacemembsmax
2747 pgrid%c2csInfo%nCellMembsMax = stencilsizemax
2748 pgrid%c2csInfo%nCellMembsMin = stencilsizemin
2754 IF ( global%myProcid == masterproc .AND. &
2755 global%verbLevel > verbose_low )
THEN
2756 WRITE(stdout,
'(A,3X,A,1X,I3)') solver_name, &
2757 'Maximum allowed number of cell layers in 1D stencil: ', &
2759 WRITE(stdout,
'(A,3X,A,1X,I3)') solver_name, &
2760 'Minimum required number of cell members in 1D stencil:', &
2762 WRITE(stdout,
'(A,3X,A,1X,I3)') solver_name, &
2763 'Maximum allowed number of cell members in 1D stencil: ', &
2771 IF ( global%myProcid == masterproc .AND. &
2772 global%verbLevel > verbose_none )
THEN
2773 WRITE(stdout,
'(A,1X,A)') solver_name, &
2774 'Setting 1D cell-to-cell stencil information done.'
2815 INTEGER,
INTENT(IN) :: ordernominal
2816 TYPE(t_region
),
POINTER :: pregion
2822 INTEGER :: nbfacemembsmax,nlayersmax,stencilsizemax,stencilsizemin
2823 TYPE(t_grid),
POINTER :: pgrid
2830 global => pregion%global
2833 'RFLU_ModStencilsCells.F90')
2835 IF ( global%myProcid == masterproc .AND. &
2836 global%verbLevel > verbose_none )
THEN
2837 WRITE(stdout,
'(A,1X,A)') solver_name, &
2838 'Setting cell-to-cell stencil information...'
2845 pgrid => pregion%grid
2861 stencilsizemax = 10*stencilsizemin
2863 pgrid%c2csInfo%orderNominal = ordernominal
2864 pgrid%c2csInfo%nLayersMax = nlayersmax
2865 pgrid%c2csInfo%nBFaceMembsMax = nbfacemembsmax
2866 pgrid%c2csInfo%nCellMembsMax = stencilsizemax
2867 pgrid%c2csInfo%nCellMembsMin = stencilsizemin
2873 IF ( global%myProcid == masterproc .AND. &
2874 global%verbLevel > verbose_low )
THEN
2875 WRITE(stdout,
'(A,3X,A,1X,I3)') solver_name, &
2876 'Maximum allowed number of cell layers: ',nlayersmax
2877 WRITE(stdout,
'(A,3X,A,1X,I3)') solver_name, &
2878 'Minimum required number of cell members: ',stencilsizemin
2879 WRITE(stdout,
'(A,3X,A,1X,I3)') solver_name, &
2880 'Maximum allowed number of cell members: ',stencilsizemax
2881 WRITE(stdout,
'(A,3X,A,1X,I3)') solver_name, &
2882 'Maximum allowed number of boundary face members: ',nbfacemembsmax
2889 IF ( global%myProcid == masterproc .AND. &
2890 global%verbLevel > verbose_none )
THEN
2891 WRITE(stdout,
'(A,1X,A)') solver_name, &
2892 'Setting cell-to-cell stencil information done.'
2933 INTEGER,
INTENT(IN) :: ordernominal
2934 TYPE(t_region
),
POINTER :: pregion
2946 global => pregion%global
2949 'RFLU_ModStencilsCells.F90')
2955 SELECT CASE ( pregion%mixtInput%stencilDimensCells )
2961 CALL
errorstop(global,err_reached_default,__line__)
subroutine findcommonsortedintegers(a, na, b, nb, c, ncMax, nc, errorFlag)
subroutine, public rflu_createc2cstencilwrapper(pRegion)
subroutine removeinteger(a, na, iLoc)
subroutine, public rflu_addcelllayer(global, pGrid, stencilSizeMax, ixg, degr, x2csBeg, x2csEnd, x2cs)
subroutine rflu_setinfoc2cstencil_1d(pRegion, orderNominal)
subroutine invert(a, nrow, det)
subroutine, public rflu_addcelllayer_1d(global, pGrid, stencilSizeMax, ixg, degr, x2csBeg, x2csEnd, x2cs, fnDir)
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
subroutine ainv(ajac, ajacin, det, ndim)
Size order() const
Degree of the element. 1 for linear and 2 for quadratic.
subroutine rflu_invertmatrixsvd(global, nRows, nCols, a, aInv, sCount)
subroutine registerfunction(global, funName, fileName)
subroutine, public rflu_destroylistcc2cstencil(pRegion)
subroutine, public rflu_buildlistcc2cstencil(pRegion)
subroutine simplifysortedintegers(a, na, nb)
subroutine rflu_createc2cstencil_1d(pRegion)
subroutine quicksortinteger(a, n)
subroutine binarysearchinteger(a, n, v, i, j)
subroutine rflu_setinfoc2cstencil(pRegion, orderNominal)
subroutine, public rflu_addbfaces(pRegion, nBFaceMembsMaxTemp, nCellMembs, cellMembs, nBFaceMembs, bFaceMembs)
subroutine, public rflu_destroyc2cstencilwrapper(pRegion)
subroutine rflu_buildc2cstencilbasic(pRegion, icg, stencilSizeMax, degr, c2cs)
INTEGER function rflu_computestencilsize(global, factor, order)
subroutine rflu_nullifyc2cstencil_1d(pRegion)
subroutine rflu_buildc2cstencilbasic_1d(pRegion, icg, stencilSizeMax, dir, degr, c2cs1D)
subroutine rflu_buildc2cstencil_1d_g(pRegion, dir, icgBeg, icgEnd)
subroutine rflu_createc2cstencil(pRegion)
subroutine rflu_buildc2cstencil(pRegion, icgBeg, icgEnd, addBFaces)
subroutine rflu_destroyc2cstencil_1d(pRegion)
subroutine, public rflu_setinfoc2cstencilwrapper(pRegion, orderNominal)
subroutine quicksortrfrealinteger(a, b, n)
subroutine, public rflu_addcelllayer_1d_g(global, pGrid, stencilSizeMax, ixg, degr, x2csBeg, x2csEnd, x2cs, rc, dir)
subroutine, public rflu_buildc2cstencilwrapper(pRegion, icgInput, constrInput)
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
subroutine, public rflu_sortbfaces(pRegion, xyz, nBFaceMembs, bFaceMembs)
subroutine errorstop(global, errorCode, errorLine, addMessage)
subroutine rflu_nullifyc2cstencil(pRegion)
subroutine rflu_destroyc2cstencil(pRegion)
subroutine deregisterfunction(global)
subroutine rflu_buildc2cstencil_1d(pRegion, fnDir, icgBeg, icgEnd)
INTEGER function, public rflu_getglobalcelltype(global, pGrid, icg)