7 character(len=maxStringLen) ::
sci6 =
"(ES14.6)"
27 character(len=maxStringLen) :: slicename
28 integer(kind=intType) :: sps
29 integer(kind=intType),
dimension(:, :),
allocatable :: ind, conn
30 real(kind=realtype),
dimension(:, :),
allocatable :: w, vars
31 integer(kind=intType) :: nnodes
32 real(kind=realtype) :: pl, vl, pd, vd, pm, vm, clp, clv, cdp, cdv, cmp, cmv
33 real(kind=realtype) :: chord, twist, thickness
34 real(kind=realtype),
dimension(3) :: le, te
35 real(kind=realtype),
dimension(3) :: pt, normal, dir_vec
37 integer(kind=intType),
allocatable,
dimension(:) :: famlist
39 real(kind=realtype) :: fx, fy, fz
50 character(len=maxStringLen) :: distname
51 integer(kind=intType) :: nsegments, normal_ind
52 integer(kind=intType),
dimension(:),
allocatable :: famlist
53 real(kind=realtype) :: normal(3)
54 real(kind=realtype) :: delta
55 real(kind=realtype),
dimension(:, :),
allocatable :: slicepts
62 integer(kind=intType),
parameter ::
nslicemax = 1000
73 character(len=maxCGNSNameLen),
dimension(:),
allocatable ::
liftdistname
77 subroutine addparaslice(sliceName, pt, normal, dir_vec, use_dir, famList, n)
90 character(len=*),
intent(in) :: sliceName
91 real(kind=realtype),
dimension(3),
intent(in) :: pt, normal, dir_vec
92 logical,
intent(in) :: use_dir
93 integer(kind=intType),
intent(in) :: n, famList(n)
96 integer(kind=intType) :: sps, sizeNode, sizeCell
97 integer(kind=intType),
dimension(:),
pointer :: wallList
98 real(kind=realtype),
dimension(:, :),
allocatable :: pts
99 integer(kind=intType),
dimension(:, :),
allocatable :: conn
100 integer(kind=intType),
dimension(:),
allocatable :: elemFam, cgnsBlockID
111 print *,
'Error: Exceeded the maximum number of slices. Increase nSliceMax'
118 call getsurfacesize(sizenode, sizecell, walllist,
size(walllist), .true.)
119 allocate (pts(3, sizenode), conn(4, sizecell), elemfam(sizecell), cgnsblockid(sizecell))
126 use_dir, slicename, famlist)
129 deallocate (pts, conn, elemfam)
134 subroutine addabsslice(sliceName, pt, normal, dir_vec, use_dir, famList, n)
147 character(len=*),
intent(in) :: sliceName
148 real(kind=realtype),
dimension(3),
intent(in) :: pt, normal, dir_vec
149 logical,
intent(in) :: use_dir
150 integer(kind=intType),
intent(in) :: n, famList(n)
153 integer(kind=intType) :: sps, sizeNode, sizeCell
154 integer(kind=intType),
dimension(:),
pointer :: wallList
155 real(kind=realtype),
dimension(:, :),
allocatable :: pts
156 integer(kind=intType),
dimension(:, :),
allocatable :: conn
157 integer(kind=intType),
dimension(:),
allocatable :: elemFam, cgnsBlockID
167 print *,
'Error: Exceeded the maximum number of slices. Increase nSliceMax'
172 call getsurfacesize(sizenode, sizecell, walllist,
size(walllist), .true.)
173 allocate (pts(3, sizenode), conn(4, sizecell), elemfam(sizecell), cgnsblockid(sizecell))
178 use_dir, slicename, famlist)
181 deallocate (pts, conn, elemfam)
197 character(len=*),
intent(in) :: distName
198 integer(kind=intType),
intent(in) :: nSegments
199 real(kind=realtype),
dimension(3) :: normal
200 integer(kind=intType),
intent(in) :: normal_ind
201 integer(kind=intType),
intent(in) :: n, famList(n)
205 print *,
'Error: Exceeded the maximum number of lift distributions. &
206 &Increase nLiftDistMax'
221 surfFile, writeSurf, famList, nFamList)
238 character(len=*),
intent(in) :: sliceFile, liftFile, surfFile
239 logical,
intent(in) :: writeSlices, writeLift, writeSurf
240 integer(kind=intType),
intent(in) :: nFamList
241 integer(kind=intType),
intent(in),
dimension(nFamList) :: famList
242 real(kind=realtype),
dimension(:, :, :),
allocatable :: nodalvalues
244 integer(kind=intType) :: sps, nSolVar, sizeNOde, sizeCell
245 integer(kind=intType),
dimension(:),
pointer :: wallLIST
250 call getsurfacesize(sizenode, sizecell, walllist,
size(walllist), .true.)
261 if (writeslices)
then
269 deallocate (nodalvalues)
296 character(len=*),
intent(in) :: fileName
297 real(kind=realtype),
intent(inout),
dimension(:, :, :) :: nodalvalues
300 integer(kind=intType) :: file, i, sps, nSolVar, ierr
301 character(len=maxStringLen) :: fname
302 character(len=7) :: intString
303 character(len=maxCGNSNameLen),
dimension(:),
allocatable :: solNames
304 integer(kind=intType),
allocatable,
dimension(:) :: famList
305 type(
slice) :: globalSlice
306 integer(kind=intType) :: sizeNode, sizeCell
307 integer(kind=intType),
dimension(:),
pointer :: wallList
308 real(kind=realtype),
dimension(:, :),
allocatable :: pts
309 integer(kind=intType),
dimension(:, :),
allocatable :: conn
310 integer(kind=intType),
dimension(:),
allocatable :: elemFam, cgnsBlockID
317 print
"(a)",
"# Writing slices file(s): "
324 write (intstring,
"(i7)") sps
325 intstring = adjustl(intstring)
326 fname = trim(filename)//
"Spectral"//trim(intstring)
335 print
"(a,4x,a)",
"#", trim(fname)
336 open (unit=file, file=trim(fname))
339 write (file, *)
"Title = ""ADflow Slice Data"""
340 write (file,
"(a)", advance=
"no")
"Variables = "
341 write (file,
"(a)", advance=
"no")
" ""CoordinateX"" "
342 write (file,
"(a)", advance=
"no")
" ""CoordinateY"" "
343 write (file,
"(a)", advance=
"no")
" ""CoordinateZ"" "
344 write (file,
"(a)", advance=
"no")
" ""XoC"" "
345 write (file,
"(a)", advance=
"no")
" ""YoC"" "
346 write (file,
"(a)", advance=
"no")
" ""ZoC"" "
350 allocate (solnames(nsolvar))
355 write (file,
"(a,a,a)", advance=
"no")
"""", trim(solnames(i)),
""" "
359 deallocate (solnames)
362 call echk(ierr, __file__, __line__)
367 call getsurfacesize(sizenode, sizecell, walllist,
size(walllist), .true.)
368 allocate (pts(3, sizenode), conn(4, sizecell), elemfam(sizecell), cgnsblockid(sizecell))
376 nodalvalues(:, :, sps), nsolvar, .true.)
386 allocate (famlist(
size(
absslices(i, sps)%famList)))
396 nodalvalues(:, :, sps), nsolvar, .true.)
411 print
"(a)",
"# Slices file(s) written"
414 end if testwriteslices
435 character(len=*),
intent(in) :: fileName
436 real(kind=realtype),
dimension(:, :, :),
allocatable :: nodalvalues
439 integer(kind=intType) :: file, sps
440 character(len=maxStringLen) :: fname
441 character(len=7) :: intString
448 print
"(a)",
"# Writing lift distribution file(s):"
455 write (intstring,
"(i7)") sps
456 intstring = adjustl(intstring)
457 fname = trim(filename)//
"Spectral"//trim(intstring)
466 print
"(a,4x,a)",
"#", trim(fname)
468 open (unit=file, file=trim(fname))
480 print
"(a)",
"# Lift distribution file(s) written"
484 end if testwriteliftdists
504 integer(kind=intType),
intent(in) :: sps, fileID
505 real(kind=realtype),
dimension(:, :),
intent(in) :: nodalvalues
507 real(kind=realtype),
dimension(3) :: xmin, xmax, xmin_local, xmax_local
508 real(kind=realtype),
parameter :: tol = 1e-8
510 integer(kind=intType) :: i, j, ii, jj, idist, ierr
511 real(kind=realtype),
dimension(:, :),
allocatable :: values
512 character(len=maxCGNSNameLen),
dimension(:),
allocatable :: liftdistnames
513 real(kind=realtype) :: dmin, dmax, suml, sumd, summ, span, delta, xcur(3)
514 type(
slice) :: localslice, globalslice
515 integer(kind=intType) :: sizenode, sizecell
516 integer(kind=intType),
dimension(:),
pointer :: walllist
517 real(kind=realtype),
dimension(:, :),
allocatable :: pts
518 integer(kind=intType),
dimension(:, :),
allocatable :: conn
519 integer(kind=intType),
dimension(:),
allocatable :: elemfam, cgnsblockid
524 call getsurfacesize(sizenode, sizecell, walllist,
size(walllist), .true.)
525 allocate (pts(3, sizenode), conn(4, sizecell), elemfam(sizecell), cgnsblockid(sizecell))
533 xmin_local = huge(real(
zero))
534 xmax_local = -huge(real(
zero))
537 elemloop:
do i = 1,
size(conn, 2)
538 if (
faminlist(elemfam(i), d%FamList))
then
542 xcur = pts(:, conn(jj, i))
545 xmin_local(ii) = min(xmin_local(ii), xcur(ii))
546 xmax_local(ii) = max(xmax_local(ii), xcur(ii))
553 call mpi_allreduce(xmin_local, xmin, 3, adflow_real, mpi_min, &
555 call echk(ierr, __file__, __line__)
557 call mpi_allreduce(xmax_local, xmax, 3, adflow_real, mpi_max, &
559 call echk(ierr, __file__, __line__)
561 d%delta = (xmax(d%normal_ind) - xmin(d%normal_ind)) / dble((d%nSegments - 1))
562 allocate (d%slicePts(3, d%nSegments))
570 liftdistnames(1) =
"eta"
574 liftdistnames(5) =
"Lift"
575 liftdistnames(6) =
"Drag"
576 liftdistnames(7) =
"Moment"
577 liftdistnames(8) =
"Normalized Lift"
578 liftdistnames(9) =
"Normalized Drag"
579 liftdistnames(10) =
"Normalized Moment"
580 liftdistnames(11) =
"CL"
581 liftdistnames(12) =
"CD"
582 liftdistnames(13) =
"CM"
583 liftdistnames(14) =
"CLp"
584 liftdistnames(15) =
"CDp"
585 liftdistnames(16) =
"CMp"
586 liftdistnames(17) =
"CLv"
587 liftdistnames(18) =
"CDv"
588 liftdistnames(19) =
"CMv"
589 liftdistnames(20) =
"Elliptical"
590 liftdistnames(21) =
"thickness"
591 liftdistnames(22) =
"twist"
592 liftdistnames(23) =
"chord"
593 liftdistnames(24) =
"fx"
594 liftdistnames(25) =
"fy"
595 liftdistnames(26) =
"fz"
600 write (fileid, *)
"Title= ""ADflow Lift Distribution Data"""
601 write (fileid,
"(a)", advance=
"no")
"Variables = "
603 write (fileid,
"(a,a,a)", advance=
"no")
"""", trim(liftdistnames(i)),
""" "
605 write (fileid,
"(1x)")
608 write (fileid,
"(a,a,a)")
"Zone T= """, trim(d%distName),
""""
609 write (fileid, *)
"I= ", d%nSegments
610 write (fileid, *)
"DATAPACKING=BLOCK"
616 do i = 1, d%nSegments
618 d%slicePts(d%normal_ind, i) = xmin(d%normal_ind) + tol
619 else if (i == d%nSegments)
then
620 d%slicePts(d%normal_ind, i) = xmin(d%normal_ind) + (i - 1) * d%delta - tol
622 d%slicePts(d%normal_ind, i) = xmin(d%normal_ind) + (i - 1) * d%delta
627 dmin = minval(d%slicePts(d%normal_ind, :))
628 dmax = maxval(d%slicePts(d%normal_ind, :))
633 values(:, 1) = (d%slicePts(d%normal_ind, :) - dmin) / (dmax - dmin)
635 if (d%normal_ind == 1) then
636 values(:, 2) = d%slicePts(1, :)
637 else if (d%normal_ind == 2)
then
638 values(:, 3) = d%slicePts(2, :)
639 else if (d%normal_ind == 3)
then
640 values(:, 4) = d%slicePts(3, :)
650 do i = 1, d%nSegments
653 call createslice(pts, conn, elemfam, localslice, d%slicePts(:, i), &
654 d%normal, d%normal, .false.,
"does_not_matter", d%famList)
655 call integrateslice(localslice, globalslice, nodalvalues, 0, .false.)
658 values(i, 5) = globalslice%pL + globalslice%vL
659 values(i, 6) = globalslice%pD + globalslice%vD
660 values(i, 7) = globalslice%pM + globalslice%vM
663 values(i, 11) = globalslice%CLp + globalslice%CLv
664 values(i, 12) = globalslice%CDp + globalslice%CDv
665 values(i, 13) = globalslice%CMp + globalslice%CMv
668 values(i, 14) = globalslice%CLp
669 values(i, 15) = globalslice%CDp
670 values(i, 16) = globalslice%CMp
673 values(i, 17) = globalslice%CLv
674 values(i, 18) = globalslice%CDv
675 values(i, 19) = globalslice%CMv
678 values(i, 21) = globalslice%thickness
679 values(i, 22) = globalslice%twist
680 values(i, 23) = globalslice%chord
683 values(i, 24) = globalslice%fx
684 values(i, 25) = globalslice%fy
685 values(i, 26) = globalslice%fz
696 do i = 1, d%nSegments - 1
697 suml = suml +
half * (values(i, 5) + values(i + 1, 5))
698 sumd = sumd +
half * (values(i, 6) + values(i + 1, 6))
699 summ = summ +
half * (values(i, 7) + values(i + 1, 7))
704 delta = values(2, 1) - values(1, 1)
708 span = maxval(values(:, 1)) - minval(values(:, 1))
709 dmin = minval(values(:, 1))
714 do i = 1, d%nSegments
717 values(i, 8) = values(i, 5) / suml
718 values(i, 9) = values(i, 6) / sumd
719 values(i, 10) = values(i, 7) / abs(summ)
722 values(i, 20) =
four /
pi / span * sqrt(
one - (values(i, 1) - dmin)**2 / span**2)
728 do i = 1, d%nSegments
729 write (fileid,
sci6) values(i, j)
735 deallocate (d%slicePts)
738 deallocate (liftdistnames, values)
758 #include <petsc/finclude/petsc.h>
763 character(len=*),
intent(in) :: filename
764 integer(kind=intType),
intent(in),
dimension(:) :: famlist
767 integer(kind=intType) :: i, j, nn, mm, fileid, ivar, ii, ierr, isize
768 integer(Kind=intType) :: nsolvar, ibeg, iend, jbeg, jend, sps, sizenode, sizecell
769 integer(kind=intType) :: ibcgroup, ifam, iproc, ncells, nnodes, ncellstowrite, izone, lastzonesharing
770 character(len=maxStringLen) :: fname
771 character(len=7) :: intstring
772 integer(kind=intType),
dimension(:),
allocatable :: nodesizes, nodedisps
773 integer(kind=intType),
dimension(:),
allocatable :: cellsizes, celldisps
774 character(len=maxCGNSNameLen),
dimension(:),
allocatable :: solnames
775 real(kind=realtype),
dimension(:, :),
allocatable :: nodalvalues
776 integer(kind=intType),
dimension(:, :),
allocatable :: conn, localconn
777 real(kind=realtype),
dimension(:, :),
allocatable :: vars
778 integer(kind=intType),
dimension(:),
allocatable :: mask, elemfam, localelemfam, cgnsblockid
779 logical :: blanksave, bcgroupneeded, datawritten
784 print
"(a)",
"# Writing tecplot surface file(s):"
795 allocate (solnames(nsolvar))
802 write (intstring,
"(i7)") sps
803 intstring = adjustl(intstring)
804 fname = trim(filename)//
"Spectral"//trim(intstring)
814 print
"(a,4x,a)",
"#", trim(fname)
816 open (unit=fileid, file=trim(fname), form=
'UNFORMATTED', access=
'stream', status=
'replace')
819 write (fileid)
"#!TDV112"
843 deallocate (solnames)
859 bcgroupneeded = .false.
860 do i = 1,
size(famlist)
861 if (
faminlist(famlist(i), exch%famList))
then
862 bcgroupneeded = .true.
867 if (.not. bcgroupneeded)
then
872 call getsurfacesize(sizenode, sizecell, exch%famList,
size(exch%famList), .true.)
873 call mpi_reduce(sizenode, nnodes, 1, adflow_integer, mpi_sum, 0,
adflow_comm_world, ierr)
874 call echk(ierr, __file__, __line__)
877 allocate (celldisps(0:
nproc), cellsizes(
nproc))
879 call mpi_gather(sizecell, 1, adflow_integer, &
881 call echk(ierr, __file__, __line__)
883 allocate (localelemfam(sizecell))
884 call getsurfacefamily(localelemfam, sizecell, exch%famList,
size(exch%famList), .true.)
889 celldisps(iproc) = celldisps(iproc - 1) + cellsizes(iproc)
891 ncells = sum(cellsizes)
892 allocate (elemfam(ncells))
895 call mpi_gatherv(localelemfam, &
896 size(localelemfam), adflow_integer, elemfam, &
898 call echk(ierr, __file__, __line__)
901 deallocate (localelemfam, cellsizes, celldisps)
903 rootproc:
if (
myid == 0 .and. ncells > 0)
then
904 do ifam = 1,
size(exch%famList)
907 faminclude:
if (
faminlist(exch%famList(ifam), famlist))
then
911 if (elemfam(i) == exch%famList(ifam))
then
912 ncellstowrite = ncellstowrite + 1
916 if (ncellstowrite > 0)
then
958 bcgroupneeded = .false.
959 do i = 1,
size(famlist)
960 if (
faminlist(famlist(i), exch%famList))
then
961 bcgroupneeded = .true.
966 if (.not. bcgroupneeded)
then
971 call getsurfacesize(sizenode, sizecell, exch%famList,
size(exch%famList), .true.)
972 allocate (nodalvalues(max(sizenode, 1), nsolvar + 3 + 6))
979 allocate (nodesizes(
nproc), nodedisps(0:
nproc))
983 call mpi_allgather(sizenode, 1, adflow_integer, nodesizes, 1, adflow_integer, &
985 call echk(ierr, __file__, __line__)
988 nodedisps(iproc) = nodedisps(iproc - 1) + nodesizes(iproc)
991 isize = 3 + 6 + nsolvar
993 nnodes = sum(nodesizes)
999 allocate (vars(nnodes, isize))
1003 call mpi_gatherv(nodalvalues(:, i), sizenode, &
1004 adflow_real, vars(:, i), nodesizes, nodedisps, &
1006 call echk(ierr, __file__, __line__)
1008 deallocate (nodalvalues)
1011 allocate (celldisps(0:
nproc), cellsizes(
nproc))
1013 call mpi_gather(sizecell, 1, adflow_integer, &
1015 call echk(ierr, __file__, __line__)
1017 if (
allocated(cgnsblockid))
then
1018 deallocate (cgnsblockid)
1021 allocate (localconn(4, sizecell), localelemfam(sizecell), cgnsblockid(sizecell))
1023 call getsurfacefamily(localelemfam, sizecell, exch%famList,
size(exch%famList), .true.)
1028 celldisps(iproc) = celldisps(iproc - 1) + cellsizes(iproc)
1030 ncells = sum(cellsizes)
1031 allocate (conn(4, ncells))
1032 allocate (elemfam(ncells))
1039 call mpi_gatherv(localconn + nodedisps(
myid), &
1040 4 *
size(localconn, 2), adflow_integer, conn, &
1042 call echk(ierr, __file__, __line__)
1044 call mpi_gatherv(localelemfam, &
1045 size(localelemfam), adflow_integer, elemfam, &
1047 call echk(ierr, __file__, __line__)
1050 deallocate (localconn, localelemfam)
1052 rootproc2:
if (
myid == 0 .and. ncells > 0)
then
1057 allocate (mask(ncells))
1058 datawritten = .false.
1059 do ifam = 1,
size(exch%famList)
1062 faminclude2:
if (
faminlist(exch%famList(ifam), famlist))
then
1069 if (elemfam(i) == exch%famList(ifam))
then
1071 ncellstowrite = ncellstowrite + 1
1075 actualwrite2:
if (ncellstowrite > 0)
then
1099 if (.not. datawritten)
then
1102 lastzonesharing = izone
1142 do j = 1, 3 + nsolvar
1153 if (mask(i) == 1)
then
1166 deallocate (conn, elemfam)
1168 deallocate (cellsizes, celldisps, nodesizes, nodedisps, vars)
1180 print
"(a)",
"# Tecplot surface file(s) written"
1187 use iso_fortran_env,
only: real32
1189 real(kind=realtype) :: adflowrealval
1190 real(kind=real32) :: float
1191 float = adflowrealval
1192 write (fileid) float
1196 use iso_fortran_env,
only: real64
1198 real(kind=realtype) :: adflowrealval
1199 real(kind=real64) :: dble
1200 dble = adflowrealval
1205 use iso_fortran_env,
only: real32
1207 real(kind=realtype) :: adflowrealvals(:)
1208 real(kind=real32) :: floats(
size(adflowrealvals))
1210 floats = adflowrealvals
1211 write (fileid) floats
1216 use iso_fortran_env,
only: real64
1218 real(kind=realtype) :: adflowrealvals(:)
1219 real(kind=real64) :: dbles(
size(adflowrealvals))
1221 dbles = adflowrealvals
1222 write (fileid) dbles
1227 use iso_fortran_env,
only: int32
1229 integer(kind=intType) :: adflowIntegerVal
1230 integer(kind=int32) :: int
1232 int = adflowintegerval
1237 use iso_fortran_env,
only: int32
1239 integer(kind=intType) :: adflowIntegerVals(:), i
1240 integer(kind=int32) :: ints(size(adflowintegervals))
1241 ints = adflowintegervals
1250 character(len=*) :: str
1251 integer(kind=intType) :: i
1254 write (fileid) iachar(str(i:i))
1273 integer(kind=intType) :: nPts, nCells, sps
1283 mscon1(1, :) = (/0, 0, 0, 0, 0/)
1284 mscon1(2, :) = (/1, 4, 0, 0, 0/)
1285 mscon1(3, :) = (/1, 2, 0, 0, 0/)
1286 mscon1(4, :) = (/4, 2, 0, 0, 0/)
1287 mscon1(5, :) = (/2, 3, 0, 0, 0/)
1288 mscon1(6, :) = (/2, 3, 0, 0, 0/)
1289 mscon1(7, :) = (/1, 3, 0, 0, 0/)
1290 mscon1(8, :) = (/4, 3, 0, 0, 0/)
1291 mscon1(9, :) = (/4, 3, 0, 0, 0/)
1292 mscon1(10, :) = (/1, 3, 0, 0, 0/)
1293 mscon1(11, :) = (/2, 3, 0, 0, 0/)
1294 mscon1(12, :) = (/2, 3, 0, 0, 0/)
1295 mscon1(13, :) = (/4, 2, 0, 0, 0/)
1296 mscon1(14, :) = (/1, 2, 0, 0, 0/)
1297 mscon1(15, :) = (/1, 4, 0, 0, 0/)
1298 mscon1(16, :) = (/0, 0, 0, 0, 0/)
1324 #include <petsc/finclude/petsc.h>
1329 logical :: includeTractions
1330 real(kind=realtype),
dimension(:, :),
intent(inout) :: nodalvalues
1333 integer(kind=intType) :: i, j, ii, jj, kk, nn, mm, isol, ierr, npts, ncells
1334 integer(kind=intType) :: nfields, nsolvar, ibeg, iend, jbeg, jend, ind(4), ni, nj
1335 integer(kind=intType) :: sizeNode, sizeCell, iDim
1336 integer(kind=intType),
dimension(3, 2) :: cellRangeCGNS
1337 character(len=maxCGNSNameLen),
dimension(:),
allocatable :: solNames
1338 real(kind=realtype),
dimension(:),
allocatable :: buffer
1339 real(kind=realtype),
dimension(:),
pointer :: weightptr, localptr
1340 real(kind=realtype),
dimension(:, :),
allocatable :: tmp
1341 logical :: viscousSubFace
1346 allocate (solnames(nsolvar))
1352 if (includetractions)
then
1370 nodalvalues(ii, 4) =
bcdata(mm)%Tp(i, j, 1)
1371 nodalvalues(ii, 5) =
bcdata(mm)%Tp(i, j, 2)
1372 nodalvalues(ii, 6) =
bcdata(mm)%Tp(i, j, 3)
1374 nodalvalues(ii, 7) =
bcdata(mm)%Tv(i, j, 1)
1375 nodalvalues(ii, 8) =
bcdata(mm)%Tv(i, j, 2)
1376 nodalvalues(ii, 9) =
bcdata(mm)%Tv(i, j, 3)
1387 if (zipper%allocated)
then
1393 call vecgetarrayf90(exch%nodeValLocal, localptr, ierr)
1394 call echk(ierr, __file__, __line__)
1396 do i = 1, exch%nNodes
1397 localptr(i) = nodalvalues(i, idim + 3)
1400 call vecrestorearrayf90(exch%nodeValLocal, localptr, ierr)
1401 call echk(ierr, __file__, __line__)
1404 call vecscatterbegin(zipper%scatter, exch%nodeValLocal, &
1405 zipper%localVal, insert_values, scatter_forward, ierr)
1406 call echk(ierr, __file__, __line__)
1408 call vecscatterend(zipper%scatter, exch%nodeValLocal, &
1409 zipper%localVal, insert_values, scatter_forward, ierr)
1410 call echk(ierr, __file__, __line__)
1414 call vecgetarrayf90(zipper%localVal, localptr, ierr)
1415 call echk(ierr, __file__, __line__)
1417 do i = 1,
size(localptr)
1418 nodalvalues(exch%nNodes + i, idim + 3) = localptr(i)
1421 call vecrestorearrayf90(zipper%localVal, localptr, ierr)
1422 call echk(ierr, __file__, __line__)
1429 call getsurfacesize(sizenode, sizecell, exch%famList,
size(exch%famlist), .true.)
1430 allocate (tmp(3, sizenode))
1431 call getsurfacepoints(tmp, sizenode, exch%sps, exch%famList,
size(exch%famList), .true.)
1434 nodalvalues(i, 1:3) = tmp(1:3, i)
1438 call vecgetarrayf90(exch%nodeValLocal, localptr, ierr)
1439 call echk(ierr, __file__, __line__)
1449 ni = iend - ibeg + 1
1450 nj = jend - jbeg + 1
1456 ind(1) = ii + (j) * ni + i + 1
1457 ind(2) = ii + (j) * ni + i + 2
1458 ind(3) = ii + (j + 1) * ni + i + 2
1459 ind(4) = ii + (j + 1) * ni + i + 1
1461 localptr(ind(jj)) = localptr(ind(jj)) +
one
1470 call vecrestorearrayf90(exch%nodeValLocal, localptr, ierr)
1471 call echk(ierr, __file__, __line__)
1474 call vecset(exch%sumGlobal,
zero, ierr)
1475 call echk(ierr, __file__, __line__)
1477 call vecscatterbegin(exch%scatter, exch%nodeValLocal, &
1478 exch%sumGlobal, add_values, scatter_forward, ierr)
1479 call echk(ierr, __file__, __line__)
1481 call vecscatterend(exch%scatter, exch%nodeValLocal, &
1482 exch%sumGlobal, add_values, scatter_forward, ierr)
1483 call echk(ierr, __file__, __line__)
1488 call vecgetarrayf90(exch%sumGlobal, localptr, ierr)
1489 call echk(ierr, __file__, __line__)
1491 localptr =
one / localptr
1493 call vecrestorearrayf90(exch%sumGlobal, localptr, ierr)
1494 call echk(ierr, __file__, __line__)
1496 varloop:
do isol = 1, nsolvar
1499 call vecgetarrayf90(exch%nodeValLocal, localptr, ierr)
1500 call echk(ierr, __file__, __line__)
1506 domainloop:
do nn = 1, ndom
1509 bocoloop:
do mm = 1,
nbocos
1514 viscoussubface = .false.
1517 viscoussubface = .true.
1526 jbeg =
bcdata(mm)%jnBeg + 1
1528 ibeg =
bcdata(mm)%inBeg + 1
1536 cellrangecgns(2, 1) = ibeg +
jbegor - 1
1537 cellrangecgns(2, 2) = iend +
jbegor - 1
1539 cellrangecgns(3, 1) = jbeg +
kbegor - 1
1540 cellrangecgns(3, 2) = jend +
kbegor - 1
1544 cellrangecgns(1, 1) = ibeg +
ibegor - 1
1545 cellrangecgns(1, 2) = iend +
ibegor - 1
1547 cellrangecgns(3, 1) = jbeg +
kbegor - 1
1548 cellrangecgns(3, 2) = jend +
kbegor - 1
1552 cellrangecgns(1, 1) = ibeg +
ibegor - 1
1553 cellrangecgns(1, 2) = iend +
ibegor - 1
1555 cellrangecgns(2, 1) = jbeg +
jbegor - 1
1556 cellrangecgns(2, 2) = jend +
jbegor - 1
1560 allocate (buffer((iend - ibeg + 1) * (jend - jbeg + 1)))
1563 cellrangecgns, solnames(isol), viscoussubface, .false.)
1571 ni = iend - ibeg + 1
1572 nj = jend - jbeg + 1
1578 ind(1) = ii + (j) * ni + i + 1
1579 ind(2) = ii + (j) * ni + i + 2
1580 ind(3) = ii + (j + 1) * ni + i + 2
1581 ind(4) = ii + (j + 1) * ni + i + 1
1583 localptr(ind(kk)) = localptr(ind(kk)) + buffer(jj)
1595 call vecrestorearrayf90(exch%nodeValLocal, localptr, ierr)
1596 call echk(ierr, __file__, __line__)
1599 call vecset(exch%nodeValGlobal,
zero, ierr)
1600 call echk(ierr, __file__, __line__)
1602 call vecscatterbegin(exch%scatter, exch%nodeValLocal, &
1603 exch%nodeValGlobal, add_values, scatter_forward, ierr)
1604 call echk(ierr, __file__, __line__)
1606 call vecscatterend(exch%scatter, exch%nodeValLocal, &
1607 exch%nodeValGlobal, add_values, scatter_forward, ierr)
1608 call echk(ierr, __file__, __line__)
1612 call vecpointwisemult(exch%nodeValGlobal, exch%nodeValGlobal, &
1613 exch%sumGlobal, ierr)
1614 call echk(ierr, __file__, __line__)
1617 call vecscatterbegin(exch%scatter, exch%nodeValGlobal, &
1618 exch%nodeValLocal, insert_values, scatter_reverse, ierr)
1619 call echk(ierr, __file__, __line__)
1621 call vecscatterend(exch%scatter, exch%nodeValGlobal, &
1622 exch%nodeValLocal, insert_values, scatter_reverse, ierr)
1623 call echk(ierr, __file__, __line__)
1626 call vecgetarrayf90(exch%nodeValLocal, localptr, ierr)
1627 call echk(ierr, __file__, __line__)
1629 do i = 1,
size(localptr)
1630 nodalvalues(i, isol + 9) = localptr(i)
1633 call vecrestorearrayf90(exch%nodeValLocal, localptr, ierr)
1634 call echk(ierr, __file__, __line__)
1636 if (zipper%allocated)
then
1639 call vecscatterbegin(zipper%scatter, exch%nodeValLocal, &
1640 zipper%localVal, insert_values, scatter_forward, ierr)
1641 call echk(ierr, __file__, __line__)
1643 call vecscatterend(zipper%scatter, exch%nodeValLocal, &
1644 zipper%localVal, insert_values, scatter_forward, ierr)
1645 call echk(ierr, __file__, __line__)
1649 call vecgetarrayf90(zipper%localVal, localptr, ierr)
1650 call echk(ierr, __file__, __line__)
1652 do i = 1,
size(localptr)
1653 nodalvalues(exch%nNodes + i, 9 + isol) = localptr(i)
1656 call vecrestorearrayf90(zipper%localVal, localptr, ierr)
1657 call echk(ierr, __file__, __line__)
1661 deallocate (solnames)
1665 subroutine createslice(pts, conn, elemFam, slc, pt, normal, dir_vec, use_dir, sliceName, famList)
1677 real(kind=realtype),
dimension(:, :),
intent(in) :: pts
1678 integer(kind=intType),
dimension(:, :),
intent(in) :: conn
1679 integer(kind=intType),
dimension(:),
intent(in) :: elemFam
1680 type(
slice),
intent(inout) :: slc
1681 real(kind=realtype),
dimension(3),
intent(in) :: pt, dir_vec, normal
1682 logical,
intent(in) :: use_dir
1683 character(len=*),
intent(in) :: sliceName
1684 integer(kind=intType),
dimension(:),
intent(in) :: famList
1687 integer(kind=intType) :: i, nMax, nUnique, oldInd, newInd
1688 integer(kind=intType) :: patchIndices(4), indexSquare, jj, kk, icon, iCoor, num1, num2
1689 real(kind=realtype) :: f(4), d, ovrdnom, tol, len_vec
1690 logical :: logic1, foundFam
1691 real(kind=realtype),
dimension(:, :),
pointer :: tmpweight, dummy, tmpnodes
1692 integer(kind=intType),
dimension(:, :),
pointer :: tmpInd
1693 integer(kind=intType),
dimension(:),
allocatable :: link
1694 real(kind=realtype),
dimension(:),
allocatable :: fc
1695 real(kind=realtype),
dimension(3) :: elemc, vec
1698 slc%sliceName = slicename
1702 slc%dir_vec = dir_vec
1703 slc%use_dir = use_dir
1705 allocate (slc%famList(
size(famlist)))
1706 slc%famList = famlist
1711 d = -pt(1) * normal(1) - pt(2) * normal(2) - pt(3) * normal(3)
1712 ovrdnom =
one / sqrt(normal(1)**2 + normal(2)**2 + normal(3)**2)
1716 allocate (fc(
size(pts, 2)))
1717 do i = 1,
size(pts, 2)
1719 fc(i) = (normal(1) * pts(1, i) + normal(2) * pts(2, i) + normal(3) * pts(3, i) + d) * ovrdnom
1724 nmax = int(sqrt(dble(
size(pts, 2))))
1725 allocate (tmpweight(2, nmax), tmpind(2, nmax), tmpnodes(3, nmax))
1731 elemloop:
do i = 1,
size(conn, 2)
1733 faminclude:
if (
faminlist(elemfam(i), famlist))
then
1740 patchindices(jj) = conn(jj, i)
1741 f(jj) = fc(patchindices(jj))
1742 elemc = elemc + 0.25_realtype * pts(:, patchindices(jj))
1750 len_vec = sqrt(vec(1) * vec(1) + vec(2) * vec(2) + vec(3) * vec(3))
1752 if ((vec(1) * dir_vec(1) + vec(2) * dir_vec(2) + vec(3) * dir_vec(3)) .lt.
zero)
then
1764 if (f(1) .lt.
zero) indexsquare = indexsquare + 1
1765 if (f(2) .lt.
zero) indexsquare = indexsquare + 2
1766 if (f(3) .lt.
zero) indexsquare = indexsquare + 4
1767 if (f(4) .lt.
zero) indexsquare = indexsquare + 8
1774 icon =
mscon1(indexsquare, kk)
1785 if (icoor > nmax)
then
1794 tmpweight(2, icoor) = (
zero - f(num1)) / (f(num2) - f(num1))
1795 tmpweight(1, icoor) =
one - tmpweight(2, icoor)
1798 tmpind(:, icoor) = (/patchindices(num1), patchindices(num2)/)
1801 tmpnodes(:, icoor) = &
1802 tmpweight(1, icoor) * pts(:, tmpind(1, icoor)) + &
1803 tmpweight(2, icoor) * pts(:, tmpind(2, icoor))
1815 allocate (dummy(3, icoor), link(icoor))
1817 call pointreduce(tmpnodes, icoor, tol, dummy, link, nunique)
1818 allocate (slc%w(2, nunique), slc%ind(2, nunique), slc%conn(2, icoor / 2))
1819 slc%nNodes = nunique
1823 slc%w(:, link(i)) = tmpweight(:, i)
1824 slc%ind(:, link(i)) = tmpind(:, i)
1830 slc%conn(1, i) = link(2 * i - 1)
1831 slc%conn(2, i) = link(2 * i)
1834 deallocate (tmpnodes, tmpweight, tmpind, dummy, link, fc)
1846 type(
slice),
intent(inout) :: slc
1849 if (
allocated(slc%w))
then
1853 if (
allocated(slc%ind))
then
1854 deallocate (slc%ind)
1857 if (
allocated(slc%conn))
then
1858 deallocate (slc%conn)
1861 if (
allocated(slc%famList))
then
1862 deallocate (slc%famList)
1865 if (
allocated(slc%vars))
then
1866 deallocate (slc%vars)
1886 type(
slice) :: lSlc, gSlc
1887 integer(kind=intType),
intent(in) :: nFields
1888 logical,
intent(in) :: doConnectivity
1889 real(kind=realtype),
dimension(:, :),
intent(in) :: nodalvalues
1891 integer(kind=intType) :: i, j, i1, i2
1892 real(kind=realtype),
dimension(3) :: x1, x2, pt1, pt2, vt1, vt2, pf,
vf, pf_elem, vf_elem
1893 real(kind=realtype) :: len, dmax, dmin, dist, fact, m(3, 3), tmp(6)
1894 real(kind=realtype) :: r(3), r_new(3), hyp, te(3), le(3), theta, w1, w2
1895 integer(kind=intType) :: bestPair(2), normal_ind, iProc, ierr, iSize
1896 real(kind=realtype),
dimension(:, :),
allocatable :: tempcoords
1897 real(kind=realtype),
dimension(:, :),
allocatable :: localvals
1898 integer(kind=intType),
dimension(:),
allocatable :: sliceNodeSizes, sliceCellSizes
1899 integer(kind=intType),
dimension(:),
allocatable :: nodeDisps, cellDisps
1900 real(kind=realtype),
dimension(3) :: refpoint, pm, vm
1901 real(kind=realtype) :: xc, yc, zc
1903 real(kind=realtype) :: tmp_(3)
1906 gslc%sliceName = trim(lslc%sliceName)
1908 gslc%normal = lslc%normal
1913 normal_ind = maxloc(abs(gslc%normal), 1)
1919 isize = 3 + 6 + nfields
1920 allocate (localvals(isize, lslc%nNodes))
1923 do i = 1, lslc%nNodes
1928 localvals(1:isize, i) = w1 * nodalvalues(i1, 1:isize) + w2 * nodalvalues(i2, 1:isize)
1936 allocate (slicenodesizes(
nproc), nodedisps(0:
nproc))
1939 call mpi_allgather(lslc%nNodes, 1, adflow_integer, slicenodesizes, 1, adflow_integer, &
1941 call echk(ierr, __file__, __line__)
1944 nodedisps(iproc) = nodedisps(iproc - 1) + slicenodesizes(iproc) * isize
1948 gslc%nNodes = sum(slicenodesizes)
1949 allocate (gslc%vars(isize, gslc%nNodes))
1952 call mpi_gatherv(localvals, isize * lslc%nNodes, adflow_real, gslc%vars, slicenodesizes * isize, &
1954 call echk(ierr, __file__, __line__)
1958 if (doconnectivity)
then
1959 i =
size(lslc%conn, 2)
1960 allocate (celldisps(0:
nproc), slicecellsizes(
nproc))
1962 call mpi_gather(i, 1, adflow_integer, slicecellsizes, 1, adflow_integer, &
1964 call echk(ierr, __file__, __line__)
1969 celldisps(iproc) = celldisps(iproc - 1) + slicecellsizes(iproc) * 2
1971 allocate (gslc%conn(2, sum(slicecellsizes)))
1978 call mpi_gatherv(lslc%conn + nodedisps(
myid) / isize, 2 *
size(lslc%conn, 2), adflow_integer, gslc%conn, &
1980 call echk(ierr, __file__, __line__)
1985 deallocate (slicecellsizes, celldisps)
1988 deallocate (slicenodesizes, nodedisps)
2010 do i = 1,
size(gslc%vars, 2)
2012 x1 = gslc%vars(1:3, i)
2014 do j = i + 1,
size(gslc%vars, 2)
2016 x2 = gslc%vars(1:3, j)
2018 dist = sqrt((x1(1) - x2(1))**2 + (x1(2) - x2(2))**2 + (x1(3) - x2(3))**2)
2020 if (dist > dmax)
then
2028 gslc%chord = max(dmax, 1e-12)
2031 if (gslc%vars(1, bestpair(1)) < gslc%vars(1, bestpair(2)))
then
2033 x1 = gslc%vars(1:3, bestpair(1))
2034 x2 = gslc%vars(1:3, bestpair(2))
2037 x1 = gslc%vars(1:3, bestpair(2))
2038 x2 = gslc%vars(1:3, bestpair(1))
2043 refpoint(1) = 0.75_realtype * x1(1) + 0.25_realtype * x2(1)
2044 refpoint(2) = 0.75_realtype * x1(2) + 0.25_realtype * x2(2)
2045 refpoint(3) = 0.75_realtype * x1(3) + 0.25_realtype * x2(3)
2050 call echk(ierr, __file__, __line__)
2055 do i = 1,
size(lslc%conn, 2)
2059 i1 = lslc%conn(1, i)
2060 i2 = lslc%conn(2, i)
2062 x1 = localvals(1:3, i1)
2063 x2 = localvals(1:3, i2)
2066 pt1 = localvals(4:6, i1)
2067 pt2 = localvals(4:6, i2)
2070 vt1 = localvals(7:9, i1)
2071 vt2 = localvals(7:9, i2)
2074 len = sqrt((x1(1) - x2(1))**2 + (x1(2) - x2(2))**2 + (x1(3) - x2(3))**2)
2077 pf_elem =
half * (pt1 + pt2) * len
2078 vf_elem =
half * (vt1 + vt2) * len
2085 xc =
half * (x1(1) + x2(1)) - refpoint(1)
2086 yc =
half * (x1(2) + x2(2)) - refpoint(2)
2087 zc =
half * (x1(3) + x2(3)) - refpoint(3)
2090 pm(1) = pm(1) + yc * pf_elem(3) - zc * pf_elem(2)
2091 pm(2) = pm(2) + zc * pf_elem(1) - xc * pf_elem(3)
2092 pm(3) = pm(3) + xc * pf_elem(2) - yc * pf_elem(1)
2095 vm(1) = vm(1) + yc * vf_elem(3) - zc * vf_elem(2)
2096 vm(2) = vm(2) + zc * vf_elem(1) - xc * vf_elem(3)
2097 vm(3) = vm(3) + xc * vf_elem(2) - yc * vf_elem(1)
2113 lslc%pM = pm(normal_ind)
2114 lslc%vM = vm(normal_ind)
2118 lslc%fx = pf(1) +
vf(1)
2119 lslc%fy = pf(2) +
vf(2)
2120 lslc%fz = pf(3) +
vf(3)
2123 call mpi_reduce((/lslc%pL, lslc%pD, lslc%pM, lslc%vL, lslc%vD, lslc%vM/), tmp, 6, adflow_real, mpi_sum, &
2125 call echk(ierr, __file__, __line__)
2128 call mpi_reduce((/lslc%fx, lslc%fy, lslc%fz/), tmp_, 3, adflow_real, mpi_sum, &
2130 call echk(ierr, __file__, __line__)
2150 gslc%CLp = gslc%pL / gslc%chord * fact
2151 gslc%CDp = gslc%pD / gslc%chord * fact
2152 gslc%CLv = gslc%vL / gslc%chord * fact
2153 gslc%CDv = gslc%vD / gslc%chord * fact
2159 gslc%CMp = gslc%pM / gslc%chord * fact
2160 gslc%CMv = gslc%vM / gslc%chord * fact
2164 gslc%thickness =
zero
2166 if (gslc%nNodes == 0)
then
2173 x1 = gslc%vars(1:3, i1)
2174 x2 = gslc%vars(1:3, i2)
2176 if (x1(1) > x2(1))
then
2194 hyp = sqrt((x1(1) - x2(1))**2 + (x1(2) - x2(2))**2 + (x1(3) - x2(3))**2)
2196 if (normal_ind == 1)
then
2200 else if (normal_ind == 2)
then
2202 theta = asin((le(3) - te(3)) / hyp)
2203 gslc%twist = theta * 180.0 /
pi
2206 theta = asin((le(2) - te(2)) / hyp)
2207 gslc%twist = theta * 180.0 /
pi
2210 if (normal_ind == 1)
then
2214 else if (normal_ind == 2)
then
2216 m(1, 1) = cos(-theta); m(1, 2) =
zero; m(1, 3) = sin(-theta);
2218 m(3, 1) = -sin(-theta); m(3, 2) =
zero; m(3, 3) = cos(-theta);
2221 m(1, 1) = cos(theta); m(1, 2) = -sin(theta); m(1, 3) =
zero;
2222 m(2, 1) = sin(theta); m(2, 2) = cos(theta); m(2, 3) =
zero;
2226 allocate (tempcoords(3,
size(gslc%vars, 2)))
2227 do i = 1,
size(gslc%vars, 2)
2229 r = gslc%vars(1:3, i) - te
2230 r_new = matmul(m, r)
2231 tempcoords(:, i) = r_new + te
2235 if (normal_ind == 1)
then
2237 else if (normal_ind == 2)
then
2238 dmax = maxval(tempcoords(3, :))
2239 dmin = minval(tempcoords(3, :))
2240 gslc%thickness = (dmax - dmin) / hyp
2241 else if (normal_ind == 3)
then
2242 dmax = maxval(tempcoords(2, :))
2243 dmin = minval(tempcoords(2, :))
2244 gslc%thickness = (dmax - dmin) / hyp
2246 deallocate (tempcoords)
2258 type(
slice),
intent(in) :: slc
2259 integer(kind=intType),
intent(in) :: fileid, nfields
2262 integer(kind=intType) :: i, j
2263 real(kind=realtype) :: tmp, tx, ty, tz
2265 write (fileid,
"(a,a,a)")
"Zone T= """, trim(slc%sliceName),
""""
2268 if (slc%nNodes > 0)
then
2269 write (fileid, *)
"Nodes = ", slc%nNodes,
" Elements= ",
size(slc%conn, 2),
" ZONETYPE=FELINESEG"
2270 write (fileid, *)
"DATAPACKING=POINT"
2272 do i = 1, slc%nNodes
2275 write (fileid,
sci6, advance=
'no') slc%vars(j, i)
2280 tmp = slc%vars(j, i)
2281 write (fileid,
sci6, advance=
'no') (tmp - slc%le(j)) / slc%chord
2286 write (fileid,
sci6, advance=
'no') slc%vars(9 + j, i)
2289 write (fileid,
"(1x)")
2292 do i = 1,
size(slc%conn, 2)
2293 write (fileid,
int5) slc%conn(1, i), slc%conn(2, i)
2297 write (fileid, *)
"Nodes = ", 2,
" Elements= ", 1,
" ZONETYPE=FELINESEG"
2298 write (fileid, *)
"DATAPACKING=POINT"
2301 write (fileid,
sci6, advance=
'no')
zero
2305 write (fileid,
sci6, advance=
'no')
zero
2308 write (fileid,
"(1x)")
2310 write (fileid,
int5) 1, 2
subroutine computenodaltractions(sps)
real(kind=realtype), dimension(:, :, :), pointer xx
integer(kind=inttype) kbegor
integer(kind=inttype), dimension(:), pointer bcfaceid
integer(kind=inttype) ibegor
integer(kind=inttype) nbocos
integer(kind=inttype) jbegor
integer(kind=inttype), dimension(:), pointer bctype
character(len=maxcgnsnamelen), parameter cgnscoorz
character(len=maxcgnsnamelen), parameter cgnscoory
character(len=maxcgnsnamelen), parameter cgnscoorx
integer adflow_comm_world
real(kind=realtype), parameter zero
integer(kind=inttype), parameter imax
integer(kind=inttype), parameter precisiondouble
integer(kind=inttype), parameter kmin
real(kind=realtype), parameter four
real(kind=realtype), parameter pi
integer(kind=inttype), parameter jmax
real(kind=realtype) datasectionmarker
integer(kind=inttype), parameter nfamexchange
integer(kind=inttype), parameter nswalladiabatic
integer(kind=inttype), parameter timespectral
integer(kind=inttype), parameter precisionsingle
real(kind=realtype), parameter one
integer, parameter maxstringlen
real(kind=realtype), parameter half
integer, parameter maxcgnsnamelen
integer(kind=inttype), parameter imin
real(kind=realtype), parameter two
real(kind=realtype) zonemarker
integer(kind=inttype), parameter nswallisothermal
integer(kind=inttype), parameter ibcgroupwalls
integer(kind=inttype), parameter kmax
integer(kind=inttype), parameter jmin
real(kind=realtype) gammainf
subroutine surfsolnames(solNames)
subroutine numberofsurfsolvariables(nSolVar)
subroutine storesurfsolinbuffer(sps, buffer, nn, blockID, faceID, cellRange, solName, viscousSubface, useRindLayer, iBeg, iEnd, jBeg, jEnd)
type(zippermesh), dimension(nfamexchange), target zippermeshes
logical function faminlist(famID, famList)
type(bcgrouptype), dimension(nfamexchange) bcfamgroups
character(len=maxcgnsnamelen), dimension(:), allocatable famnames
type(familyexchange), dimension(:, :), allocatable, target bcfamexchange
subroutine getsurfacesize(sizeNode, sizeCell, famList, n, includeZipper)
subroutine getsurfacefamily(elemFam, ncell, famList, nFamList, includeZipper)
subroutine getsurfacepoints(points, npts, sps_in, famList, nFamList, includeZipper)
subroutine getsurfaceconnectivity(conn, cgnsBlockID, ncell, famList, nFamList, includeZipper)
subroutine addparaslice(sliceName, pt, normal, dir_vec, use_dir, famList, n)
subroutine integrateslice(lSlc, gSlc, nodalValues, nFields, doConnectivity)
integer(kind=inttype), parameter nliftdistvar
integer(kind=inttype), parameter nslicemax
type(slice), dimension(:, :), allocatable paraslices
integer(kind=inttype) nabsslices
character(len=maxstringlen) sci6
type(liftdist), dimension(nliftdistmax), target liftdists
subroutine writeliftdistributions(sps, fileID, nodalValues)
integer(kind=inttype) nliftdists
subroutine writeliftdistributionfile(fileName, nodalValues)
subroutine addliftdistribution(nSegments, normal, normal_ind, distName, famList, n)
subroutine computesurfaceoutputnodaldata(exch, zipper, includeTractions, nodalValues)
logical liftdistinitialized
subroutine initializeliftdistributiondata
integer(kind=inttype), dimension(4, 2) mscon2
subroutine writetecplot(sliceFile, writeSlices, liftFile, writeLift, surfFile, writeSurf, famList, nFamList)
subroutine addabsslice(sliceName, pt, normal, dir_vec, use_dir, famList, n)
subroutine writeslicesfile(fileName, nodalValues)
subroutine destroyslice(slc)
type(slice), dimension(:, :), allocatable absslices
character(len=maxcgnsnamelen), dimension(:), allocatable liftdistname
integer(kind=inttype), parameter nliftdistmax
subroutine writeslice(slc, fileID, nFields)
subroutine createslice(pts, conn, elemFam, slc, pt, normal, dir_vec, use_dir, sliceName, famList)
subroutine writetecplotsurfacefile(fileName, famList)
integer(kind=inttype) nparaslices
integer(kind=inttype), dimension(16, 5) mscon1
subroutine reallocateinteger2(intArray, newSize1, newSize2, oldSize1, oldSize2, alwaysFreeMem)
subroutine setbcpointers(nn, spatialPointers)
subroutine reallocatereal2(realArray, newSize1, newSize2, oldSize1, oldSize2, alwaysFreeMem)
subroutine pointreduce(pts, N, tol, uniquePts, link, nUnique)
subroutine echk(errorcode, file, line)
subroutine setpointers(nn, mm, ll)
subroutine writefloats(adflowRealVals)
subroutine writestring(str)
subroutine writedoubles(adflowRealVals)
subroutine writeintegers(adflowIntegerVals)
subroutine writedouble(adflowRealVal)
subroutine writefloat(adflowRealVal)
subroutine writeinteger(adflowIntegerVal)