8 useObjective, frozenTurb, level, useTurbOnly, useCoarseMats)
46 #include <petsc/finclude/petsc.h>
54 logical,
intent(in) :: useAD, usePC, useTranspose, useObjective, frozenTurb
55 logical,
intent(in),
optional :: useTurbOnly, useCoarseMats
56 integer(kind=intType),
intent(in) :: level
59 integer(kind=intType) :: ierr, nn, sps, sps2, i, j, k, l, ll, ii, jj, kk
60 integer(kind=intType) :: nColor, iColor, jColor, irow, icol, fmDim, frow
61 integer(kind=intType) :: nTransfer, nState, lStart, lEnd, tmp, icount, cols(8), nCol
62 integer(kind=intType) :: n_stencil, i_stencil, m, iFringe, fInd, lvl, orderturbsave
63 integer(kind=intType),
dimension(:, :),
pointer :: stencil
64 real(kind=alwaysrealtype) :: delta_x, one_over_dx
65 real(kind=realtype) :: weights(8), acousticscalesave
66 real(kind=realtype),
dimension(:, :),
allocatable :: blk
67 integer(kind=intType),
dimension(2:10) :: coarseRows
68 integer(kind=intType),
dimension(8, 2:10) :: coarseCols
69 integer(kind=intType) :: iBeg, iEnd, jBeg, jEnd, mm, colInd
70 logical :: resetToRANS, turbOnly, flowRes, turbRes, buildCoarseMats
74 if (
present(useturbonly))
then
75 turbonly = useturbonly
78 buildcoarsemats = .false.
79 if (
present(usecoarsemats))
then
80 buildcoarsemats = usecoarsemats
109 allocate (blk(nstate, nstate))
113 call whalo2(1_inttype, 1_inttype,
nw, .true., .true., .true.)
131 call matzeroentries(matrix, ierr)
132 call echk(ierr, __file__, __line__)
148 if (
iblank(i, j, k) /= 1)
then
149 irow = flowdoms(nn, level, sps)%globalCell(i, j, k)
153 if (buildcoarsemats)
then
156 coarsecols(1, lvl + 1) = coarserows(lvl + 1)
214 delta_x = 1e-9_realtype
215 one_over_dx = one / delta_x
219 resettorans = .false.
220 if (frozenturb .and.
equations == ransequations)
then
247 flowdoms(nn, level, sps)%dw_deriv(2:
il, 2:
jl, 2:
kl, 1:
nw, 1:
nw), &
248 flowdoms(nn, level, sps)%wtmp(0:
ib, 0:
jb, 0:
kb, 1:
nw), &
249 flowdoms(nn, level, sps)%dwtmp(0:
ib, 0:
jb, 0:
kb, 1:
nw), &
250 flowdoms(nn, level, sps)%dwtmp2(0:
ib, 0:
jb, 0:
kb, 1:
nw), &
252 call echk(ierr, __file__, __line__)
255 allocate (flowdoms(nn, level, sps)%color(0:
ib, 0:
jb, 0:
kb), stat=ierr)
256 call echk(ierr, __file__, __line__)
269 if (.not. usead)
then
274 domainloopad:
do nn = 1, ndom
319 colorloop:
do icolor = 1, ncolor
321 flowdoms(nn, 1, sps2)%dw_deriv(:, :, :, :, :) = zero
325 stateloop:
do l = lstart, lend
329 if (.not. usead)
then
334 flowdoms(nn, level, sps2)%w(i, j, k, ll) = &
335 flowdoms(nn, 1, sps2)%wtmp(i, j, k, ll)
355 if (flowdoms(nn, 1, 1)%color(i, j, k) == icolor)
then
356 flowdomsd(nn, 1, sps)%w(i, j, k, l) = one
365 if (flowdoms(nn, 1, 1)%color(i, j, k) == icolor)
then
366 w(i, j, k, l) =
w(i, j, k, l) + delta_x
378 print *,
'Forward AD routines are not complexified'
382 call block_res_state(nn, sps, useflowres=flowres, useturbres=turbres)
396 flowdoms(nn, 1, sps2)%dw_deriv(i, j, k, ll, l) = &
399 if (sps2 == sps)
then
404 flowdoms(nn, 1, sps2)%dw_deriv(i, j, k, ll, l) = &
406 (flowdoms(nn, 1, sps2)%dw(i, j, k, ll) - &
407 flowdoms(nn, 1, sps2)%dwtmp(i, j, k, ll))
414 flowdoms(nn, 1, sps2)%dw_deriv(i, j, k, ll, l) = &
416 flowdoms(nn, 1, sps2)%dw(i, j, k, ll) - &
417 flowdoms(nn, 1, sps2)%dwtmp2(i, j, k, ll))
433 colblank:
if (flowdoms(nn, level, sps)%iblank(i, j, k) == 1 .or. &
434 flowdoms(nn, level, sps)%iBlank(i, j, k) == -1)
then
440 if (flowdoms(nn, level, sps)%iblank(i, j, k) == 1)
then
441 cols(1) = flowdoms(nn, level, sps)%globalCell(i, j, k)
444 if (buildcoarsemats)
then
452 cols(m) = flowdoms(nn, level, sps)%gInd(m, i, j, k)
454 if (buildcoarsemats)
then
456 coarsecols(m, lvl + 1) = &
463 call fractoweights(flowdoms(nn, level, sps)%fringes(find)%donorFrac, &
468 colorcheck:
if (flowdoms(nn, 1, 1)%color(i, j, k) == icolor)
then
476 stencilloop:
do i_stencil = 1, n_stencil
477 ii = stencil(i_stencil, 1)
478 jj = stencil(i_stencil, 2)
479 kk = stencil(i_stencil, 3)
484 onblock:
if (i + ii >= 2 .and. i + ii <=
il .and. &
485 j + jj >= 2 .and. j + jj <=
jl .and. &
486 k + kk >= 2 .and. k + kk <=
kl)
then
488 irow = flowdoms(nn, level, sps)%globalCell( &
489 i + ii, j + jj, k + kk)
491 if (buildcoarsemats)
then
493 coarserows(lvl + 1) = &
498 rowblank:
if (flowdoms(nn, level, sps)% &
499 iblank(i + ii, j + jj, k + kk) == 1)
then
501 centercell:
if (ii == 0 .and. jj == 0 .and. kk == 0)
then
506 blk = flowdoms(nn, 1, sps)%dw_deriv(i + ii, &
515 irow = flowdoms(nn, level, sps2)% &
518 blk = flowdoms(nn, 1, sps2)% &
521 lstart:lend, lstart:lend)
527 blk = flowdoms(nn, 1, sps)%dw_deriv(i + ii, j + jj, k + kk, &
528 lstart:lend, lstart:lend)
544 call matassemblybegin(matrix, mat_final_assembly, ierr)
545 call echk(ierr, __file__, __line__)
547 if (buildcoarsemats)
then
549 call matassemblybegin(a(lvl), mat_final_assembly, ierr)
550 call echk(ierr, __file__, __line__)
558 if (.not. usead)
then
565 flowdoms(nn, 1, sps)%dw_deriv, &
566 flowdoms(nn, 1, sps)%wTmp, &
567 flowdoms(nn, 1, sps)%dwTmp, &
568 flowdoms(nn, 1, sps)%dwTmp2)
570 deallocate (flowdoms(nn, 1, 1)%color)
585 if (resettorans)
then
592 call matassemblyend(matrix, mat_final_assembly, ierr)
593 call echk(ierr, __file__, __line__)
595 if (buildcoarsemats)
then
597 call matassemblyend(a(lvl), mat_final_assembly, ierr)
598 call echk(ierr, __file__, __line__)
602 call matsetoption(matrix, mat_new_nonzero_locations, petsc_false, ierr)
603 call echk(ierr, __file__, __line__)
620 real(kind=realtype),
dimension(nState, nState) :: blk
623 integer(kind=intType) :: i, j, tmp, iRowSet, iColSet
633 if (.not. blk(i, j) == zero)
then
641 print *,
'Bad Block:', blk
642 print *,
'irow:', irow
643 print *,
'icol', cols(1:ncol)
645 print *,
'ijk:', i, j, k
646 call echk(1, __file__, __line__)
650 if (.not. zeroflag)
then
652 if (usetranspose)
then
654 call matsetvaluesblocked(matrix, 1, cols(1), 1, irow, blk, &
656 call echk(ierr, __file__, __line__)
658 call matsetvaluesblocked(matrix, 1, irow, 1, cols(1), blk, &
660 call echk(ierr, __file__, __line__)
663 if (usetranspose)
then
666 if (cols(m) >= 0)
then
667 call matsetvaluesblocked(matrix, 1, cols(m), 1, irow, blk * weights(m), &
669 call echk(ierr, __file__, __line__)
674 if (cols(m) >= 0)
then
675 call matsetvaluesblocked(matrix, 1, irow, 1, cols(m), blk * weights(m), &
677 call echk(ierr, __file__, __line__)
684 if (buildcoarsemats)
then
687 if (usetranspose)
then
689 call matsetvaluesblocked(a(lvl), 1, coarsecols(1, lvl), 1, coarserows(lvl), &
690 blk, add_values, ierr)
692 call matsetvaluesblocked(a(lvl), 1, coarserows(lvl), 1, coarsecols(1, lvl), &
693 blk, add_values, ierr)
699 if (coarsecols(m, lvl) >= 0)
then
700 if (usetranspose)
then
702 call matsetvaluesblocked(a(lvl), 1, coarsecols(m, lvl), 1, coarserows(lvl), &
703 blk * weights(m), add_values, ierr)
705 call matsetvaluesblocked(a(lvl), 1, coarserows(lvl), 1, coarsecols(m, lvl), &
706 blk * weights(m), add_values, ierr)
721 use blockpointers,
only: ndom,
il,
jl,
kl,
ie,
je,
ke,
ib,
jb,
kb,
bcdata, &
736 integer(kind=intType) :: level
739 integer(kind=intType) :: sps, ierr, i, j, k, l, mm, nn
740 integer(kind=intType) :: iBeg, jBeg, iStop, jStop, isizemax, jsizemax
741 integer(kind=intType) :: inBeg, jnBeg, inStop, jnStop
742 integer(kind=intType) :: massShape(2), max_face_size
743 integer(kind=intType) :: iBoco, nDataset, iData, nDirichlet, iDirichlet, nArray
748 call echk(ierr, __file__, __line__)
758 call echk(ierr, __file__, __line__)
765 call vecduplicate(xsurfvec(1, sps), xsurfvecd(sps), ierr)
766 call echk(ierr, __file__, __line__)
774 if (.not.
associated(
flowdoms(nn, 1, sps)%d2wall))
then
776 call echk(ierr, __file__, __line__)
834 call echk(ierr, __file__, __line__)
838 call echk(ierr, __file__, __line__)
843 bocoloop:
do mm = 1,
nbocos
854 flowdomsd(nn, level, sps)%BCData(mm)%norm(ibeg:istop, jbeg:jstop, 3), &
855 flowdomsd(nn, level, sps)%BCData(mm)%rface(ibeg:istop, jbeg:jstop), &
856 flowdomsd(nn, level, sps)%BCData(mm)%Fp(inbeg + 1:instop, jnbeg + 1:jnstop, 3), &
857 flowdomsd(nn, level, sps)%BCData(mm)%Fv(inbeg + 1:instop, jnbeg + 1:jnstop, 3), &
858 flowdomsd(nn, level, sps)%BCData(mm)%Tp(inbeg:instop, jnbeg:jnstop, 3), &
859 flowdomsd(nn, level, sps)%BCData(mm)%Tv(inbeg:instop, jnbeg:jnstop, 3), &
860 flowdomsd(nn, level, sps)%BCData(mm)%F(inbeg:instop, jnbeg:jnstop, 3), &
861 flowdomsd(nn, level, sps)%BCData(mm)%T(inbeg:instop, jnbeg:jnstop, 3), &
862 flowdomsd(nn, level, sps)%BCData(mm)%area(inbeg + 1:instop, jnbeg + 1:jnstop), &
863 flowdomsd(nn, level, sps)%BCData(mm)%uSlip(ibeg:istop, jbeg:jstop, 3), &
864 flowdomsd(nn, level, sps)%BCData(mm)%TNS_Wall(ibeg:istop, jbeg:jstop), &
865 flowdomsd(nn, level, sps)%BCData(mm)%ptInlet(ibeg:istop, jbeg:jstop), &
866 flowdomsd(nn, level, sps)%BCData(mm)%htInlet(ibeg:istop, jbeg:jstop), &
867 flowdomsd(nn, level, sps)%BCData(mm)%ttInlet(ibeg:istop, jbeg:jstop), &
868 flowdomsd(nn, level, sps)%BCData(mm)%turbInlet(ibeg:istop, jbeg:jstop,
nt1:
nt2), &
869 flowdomsd(nn, level, sps)%BCData(mm)%ps(ibeg:istop, jbeg:jstop), stat=ierr)
871 call echk(ierr, __file__, __line__)
880 flowdomsd(nn, level, sps)%viscSubface(mm)%tau(ibeg:istop, jbeg:jstop, 6), &
881 flowdomsd(nn, level, sps)%viscSubface(mm)%q(ibeg:istop, jbeg:jstop, 6), &
883 call echk(ierr, __file__, __line__)
894 if (
associated(
cgnsdoms(nn)%bocoInfo(iboco)%dataSet))
then
895 ndataset =
size(
cgnsdoms(nn)%bocoInfo(iboco)%dataSet)
896 allocate (
cgnsdomsd(nn)%bocoInfo(iboco)%dataSet(ndataset))
898 do idata = 1, ndataset
899 if (
associated(
cgnsdoms(nn)%bocoInfo(iboco)%dataSet(idata)%dirichletArrays))
then
900 ndirichlet =
size(
cgnsdoms(nn)%bocoInfo(iboco)%dataSet(idata)%dirichletArrays)
901 allocate (
cgnsdomsd(nn)%bocoInfo(iboco)%dataSet(idata)%dirichletArrays(ndirichlet))
903 do idirichlet = 1, ndirichlet
904 narray =
size(
cgnsdoms(nn)%bocoInfo(iboco)%dataSet(idata) &
905 %dirichletArrays(idirichlet)%dataArr)
906 allocate (
cgnsdomsd(nn)%bocoInfo(iboco)% &
907 dataset(idata)%dirichletArrays(idirichlet)%dataArr(narray))
908 cgnsdomsd(nn)%bocoInfo(iboco)%dataSet(idata)% &
909 dirichletarrays(idirichlet)%dataArr(narray) =
zero
936 integer(kind=intType) :: nn, level, sps
939 integer(kind=intType) :: mm, i, iDom
940 integer(kind=intType) :: iBoco, iData, iDirichlet
997 bocoloop:
do mm = 1,
flowdoms(nn, level, sps)%nBocos
1014 viscbocoloop:
do mm = 1,
flowdoms(nn, level, sps)%nViscBocos
1060 do iboco = 1,
cgnsdoms(idom)%nBocos
1061 if (
associated(
cgnsdoms(idom)%bocoInfo(iboco)%dataSet))
then
1062 do idata = 1,
size(
cgnsdoms(idom)%bocoInfo(iboco)%dataSet)
1063 if (
associated(
cgnsdoms(idom)%bocoInfo(iboco)%dataSet(idata)%dirichletArrays))
then
1064 do idirichlet = 1, &
1065 size(
cgnsdoms(idom)%bocoInfo(iboco)%dataSet(idata)%dirichletArrays)
1066 cgnsdomsd(idom)%bocoInfo(iboco)%dataSet(idata)%dirichletArrays(idirichlet)%dataArr(:) &
1097 integer(kind=intType),
intent(in) :: nn, level
1100 integer(kind=intTYpe),
intent(out) :: nColor
1103 integer(kind=intType) :: i, j, k
1111 flowdoms(nn, level, 1)%color(i, j, k) = &
1112 mod(i + 5 * j + 4 * k, 7) + 1
1129 integer(kind=intType),
intent(in) :: nn, level
1132 integer(kind=intTYpe),
intent(out) :: nColor
1135 integer(kind=intType) :: i, j, k
1143 flowdoms(nn, level, 1)%color(i, j, k) = &
1144 mod(i + 3 * j + 4 * k, 13) + 1
1161 integer(kind=intType),
intent(in) :: nn, level
1164 integer(kind=intTYpe),
intent(out) :: nColor
1167 integer(kind=intType) :: i, j, k
1175 flowdoms(nn, level, 1)%color(i, j, k) = &
1176 mod(i + 19 * j + 11 * k, 35) + 1
1198 integer(kind=intType),
intent(in) :: nn, level
1201 integer(kind=intTYpe),
intent(out) :: nColor
1204 integer(kind=intType) :: i, j, k, modi, modj, modk
1216 flowdoms(nn, level, 1)%color(i, j, k) = modi + 3 * modj + 9 * modk + 1
1234 integer(kind=intType),
intent(in) :: nn, level
1237 integer(kind=intTYpe),
intent(out) :: nColor
1240 integer(kind=intType) :: i, j, k, modi, modj, modk
1252 flowdoms(nn, level, 1)%color(i, j, k) = modi + 5 * modj + 25 * modk + 1
1269 integer(kind=intType),
intent(in) :: nn, level
1272 integer(kind=intTYpe),
intent(out) :: nColor
1275 integer(kind=intType) :: i, j, k
1286 flowdoms(nn, level, 1)%color(i, j, k) = i + j * (
ib + 1) + k * ((
ib + 1) * (
jb + 1)) + 1
1291 ncolor = (
ib + 1) * (
jb + 1) * (
kb + 1)
1294 subroutine mymatcreate(matrix, blockSize, m, n, nnzDiagonal, nnzOffDiag, &
1304 #include <petsc/finclude/petsc.h>
1309 integer(kind=intType),
intent(in) :: blockSize, m, n
1310 integer(kind=intType),
intent(in),
dimension(*) :: nnzDiagonal, nnzOffDiag
1311 character(len=*) :: file
1312 integer(kind=intType) :: ierr, line
1315 m, n, petsc_determine, petsc_determine, &
1316 0, nnzdiagonal, 0, nnzoffdiag, matrix, ierr)
1321 call echk(ierr, file, line)
1332 call matsetoption(matrix, mat_row_oriented, petsc_false, ierr)
1333 call echk(ierr, __file__, __line__)
1335 call matsetoption(matrix, mat_new_nonzero_allocation_err, petsc_false, ierr)
1336 call echk(ierr, __file__, __line__)
1360 real(kind=realtype),
pointer,
dimension(:, :) :: myksp
1361 integer(kind=intType) :: n, dummy, ierr
1362 real(kind=realtype) :: rnorm
1367 if (
myid == 0)
write (*,
"(I4, 1X, A, 1X, ES16.10)") n,
'KSP Residual norm', rnorm
1375 globalPCType, ASMOverlap, globalPreConIts, localPCType, &
1376 localMatrixOrdering, localFillLevel, localPreConIts)
1407 #include <petsc/finclude/petsc.h>
1413 character(len=*),
intent(in) :: kspObjectType, preConSide
1414 character(len=*),
intent(in) :: globalPCType, localPCType
1415 character(len=*),
intent(in) :: localMatrixOrdering
1416 integer(kind=intType),
intent(in) :: ASMOverlap, localFillLevel, gmresRestart
1417 integer(kind=intType),
intent(in) :: globalPreConIts, localPreConIts
1420 pc master_pc, globalpc, subpc
1421 ksp master_pc_ksp, subksp
1422 integer(kind=intType) :: nlocal, first, ierr
1425 call kspsetfromoptions(kspobject, ierr)
1426 call echk(ierr, __file__, __line__)
1429 call kspsettype(kspobject, kspobjecttype, ierr)
1430 call echk(ierr, __file__, __line__)
1433 call kspgmressetrestart(kspobject, gmresrestart, ierr)
1434 call echk(ierr, __file__, __line__)
1438 case (
'modified_gram_schmidt')
1440 call kspgmressetorthogonalization(kspobject, kspgmresmodifiedgramschmidtorthogonalization, ierr)
1441 case (
'cgs_never_refine')
1443 call kspgmressetcgsrefinementtype(kspobject, ksp_gmres_cgs_refine_never, ierr)
1444 case (
'cgs_refine_if_needed')
1446 call kspgmressetcgsrefinementtype(kspobject, ksp_gmres_cgs_refine_ifneeded, ierr)
1447 case (
'cgs_always_refine')
1449 call kspgmressetcgsrefinementtype(kspobject, ksp_gmres_cgs_refine_always, ierr)
1451 call echk(ierr, __file__, __line__)
1454 if (trim(preconside) ==
'right')
then
1455 call kspsetpcside(kspobject, pc_right, ierr)
1457 call kspsetpcside(kspobject, pc_left, ierr)
1459 call echk(ierr, __file__, __line__)
1461 if (trim(kspobjecttype) ==
'richardson')
then
1462 call kspsetpcside(kspobject, pc_left, ierr)
1463 call echk(ierr, __file__, __line__)
1468 if (globalpreconits > 1)
then
1470 call kspgetpc(kspobject, master_pc, ierr)
1471 call echk(ierr, __file__, __line__)
1475 call pcsettype(master_pc,
'ksp', ierr)
1476 call echk(ierr, __file__, __line__)
1479 call pckspgetksp(master_pc, master_pc_ksp, ierr)
1480 call echk(ierr, __file__, __line__)
1485 call kspsettype(master_pc_ksp,
'richardson', ierr)
1486 call echk(ierr, __file__, __line__)
1489 call kspsetnormtype(master_pc_ksp, ksp_norm_none, ierr)
1490 call echk(ierr, __file__, __line__)
1494 call kspsettolerances(master_pc_ksp, petsc_default_real, &
1495 petsc_default_real, petsc_default_real, &
1496 globalpreconits, ierr)
1497 call echk(ierr, __file__, __line__)
1501 call kspgetpc(master_pc_ksp, globalpc, ierr)
1502 call echk(ierr, __file__, __line__)
1505 call kspgetpc(kspobject, globalpc, ierr)
1506 call echk(ierr, __file__, __line__)
1510 call pcsettype(globalpc,
'asm', ierr)
1511 call echk(ierr, __file__, __line__)
1514 call pcasmsetoverlap(globalpc, asmoverlap, ierr)
1515 call echk(ierr, __file__, __line__)
1518 call kspsetup(kspobject, ierr)
1519 call echk(ierr, __file__, __line__)
1522 call pcasmgetsubksp(globalpc, nlocal, first, subksp, ierr)
1523 call echk(ierr, __file__, __line__)
1527 if (localpreconits > 1)
then
1529 call kspsettype(subksp,
'richardson', ierr)
1530 call echk(ierr, __file__, __line__)
1533 call kspsettolerances(subksp, petsc_default_real, petsc_default_real, petsc_default_real, &
1534 localpreconits, ierr)
1535 call echk(ierr, __file__, __line__)
1538 call kspsetnormtype(subksp, ksp_norm_none, ierr)
1539 call echk(ierr, __file__, __line__)
1542 call kspsettype(subksp,
'preonly', ierr)
1543 call echk(ierr, __file__, __line__)
1547 call kspgetpc(subksp, subpc, ierr)
1548 call echk(ierr, __file__, __line__)
1551 call pcsettype(subpc, localpctype, ierr)
1552 call echk(ierr, __file__, __line__)
1555 call pcfactorsetmatorderingtype(subpc, localmatrixordering, ierr)
1556 call echk(ierr, __file__, __line__)
1559 call pcfactorsetlevels(subpc, localfilllevel, ierr)
1560 call echk(ierr, __file__, __line__)
1565 ASMOverlap, outerPreconIts, localMatrixOrdering, fillLevel, localPreConIts, &
1566 ASMOverlapCoarse, fillLevelCoarse, localPreConItsCoarse)
1574 #include <petsc/finclude/petsc.h>
1580 character(len=*),
intent(in) :: kspObjectType, preConSide, localMatrixOrdering
1581 integer(kind=intType),
intent(in) :: ASMOverlap, fillLevel, gmresRestart, outerPreconIts, localPreConIts
1582 integer(kind=intType),
intent(in) :: ASMOverlapCoarse, fillLevelCoarse, localPreConItsCoarse
1586 integer(kind=intType) :: ierr
1588 call kspsettype(kspobject, kspobjecttype, ierr)
1589 call echk(ierr, __file__, __line__)
1592 if (trim(preconside) ==
'right')
then
1593 call kspsetpcside(kspobject, pc_right, ierr)
1595 call kspsetpcside(kspobject, pc_left, ierr)
1597 call echk(ierr, __file__, __line__)
1599 call kspgmressetrestart(kspobject, gmresrestart, ierr)
1600 call echk(ierr, __file__, __line__)
1604 case (
'modified_gram_schmidt')
1606 call kspgmressetorthogonalization(kspobject, kspgmresmodifiedgramschmidtorthogonalization, ierr)
1607 case (
'cgs_never_refine')
1609 call kspgmressetcgsrefinementtype(kspobject, ksp_gmres_cgs_refine_never, ierr)
1610 case (
'cgs_refine_if_needed')
1612 call kspgmressetcgsrefinementtype(kspobject, ksp_gmres_cgs_refine_ifneeded, ierr)
1613 case (
'cgs_always_refine')
1615 call kspgmressetcgsrefinementtype(kspobject, ksp_gmres_cgs_refine_always, ierr)
1617 call echk(ierr, __file__, __line__)
1619 call kspgetpc(kspobject, shellpc, ierr)
1620 call echk(ierr, __file__, __line__)
1622 call pcsettype(shellpc, pcshell, ierr)
1623 call echk(ierr, __file__, __line__)
1626 call echk(ierr, __file__, __line__)
1629 call echk(ierr, __file__, __line__)
1632 call echk(ierr, __file__, __line__)
1655 integer(kind=intType) :: ierr
1660 call matdestroy(drdwt, ierr)
1661 call echk(ierr, __file__, __line__)
1664 call matdestroy(drdwpret, ierr)
1665 call echk(ierr, __file__, __line__)
1668 call kspdestroy(adjointksp, ierr)
1669 call echk(ierr, __file__, __line__)
1687 call initpetscwrap()
1699 call petscfinalize(petscierr)
1726 #include <petsc/finclude/petsc.h>
1731 integer(kind=intType),
intent(in) :: wSize
1732 integer(kind=intType),
intent(in) :: N_stencil
1733 integer(kind=intType),
intent(in) :: stencil(N_stencil, 3)
1734 integer(kind=intType),
intent(out) :: onProc(wSize), offProc(wSize)
1735 integer(kind=intType),
intent(in) :: level
1736 logical,
intent(in) :: transposed
1739 integer(kind=intType) :: nn, i, j, k, sps, ii, jj, kk, iii, jjj, kkk, n, m, gc
1740 integer(kind=intType) :: iRowStart, iRowEnd, ierr, fInd
1741 integer(kind=intType),
dimension((N_stencil - 1)*8 + 1) :: cellBuffer, dummy
1744 real(kind=realtype),
pointer :: tmppointer(:)
1747 call echk(ierr, __file__, __line__)
1758 irowstart = flowdoms(1, 1, 1)%globalCell(2, 2, 2)
1777 blankedtest:
if (
iblank(i, j, k) == 1)
then
1784 do jj = 1, n_stencil
1787 iii = stencil(jj, 1) + i
1788 jjj = stencil(jj, 2) + j
1789 kkk = stencil(jj, 3) + k
1796 if (
iblank(iii, jjj, kkk) == 1)
then
1804 else if (
iblank(iii, jjj, kkk) == -1)
then
1810 gc =
gind(kk, iii, jjj, kkk)
1830 call unique(cellbuffer, n, m, dummy)
1836 if (.not. transposed)
then
1843 if (gc >= irowstart .and. gc <= irowend)
then
1844 onproc(ii) = onproc(ii) + 1
1846 offproc(ii) = offproc(ii) + 1
1861 if (gc >= irowstart .and. gc <= irowend)
then
1864 onproc(gc - irowstart + 1) = onproc(gc - irowstart + 1) + 1
1868 call vecsetvalue(offprocvec, gc, real(1), add_values, ierr)
1869 call echk(ierr, __file__, __line__)
1876 onproc(ii) = onproc(ii) + 1
1886 call vecassemblybegin(offprocvec, ierr)
1887 call echk(ierr, __file__, __line__)
1889 call vecassemblyend(offprocvec, ierr)
1890 call echk(ierr, __file__, __line__)
1892 if (transposed)
then
1894 call vecgetarrayf90(offprocvec, tmppointer, ierr)
1895 call echk(ierr, __file__, __line__)
1897 offproc(i) = int(tmppointer(i) +
half)
1900 call vecrestorearrayf90(offprocvec, tmppointer, ierr)
1901 call echk(ierr, __file__, __line__)
1905 call vecdestroy(offprocvec, ierr)
1906 call echk(ierr, __file__, __line__)
1913 use blockpointers,
only:
ib,
jb,
kb,
il,
jl,
kl,
ie,
je,
ke,
shocksensor, &
1922 integer(kind=intType) :: nn, level, sps, i, j, k
1985 integer(kind=intType) :: level
1987 integer(kind=intType) :: i, j, k, l, nn, sps
2000 flowdoms(nn, 1, sps)%wtmp(i, j, k, l) =
w(i, j, k, l)
2001 flowdoms(nn, 1, sps)%dwtmp(i, j, k, l) =
dw(i, j, k, l)
2016 flowdoms(nn, 1, sps)%dwtmp2(i, j, k, l) = &
2036 integer(kind=intType) :: level
2039 integer(kind=intType) :: i, j, k, l, nn, sps
2040 real(kind=realtype) :: sepsensor, cavitation, axismoment
2050 w(i, j, k, l) = flowdoms(nn, 1, sps)%wtmp(i, j, k, l)
2051 dw(i, j, k, l) = flowdoms(nn, 1, sps)%dwtmp(i, j, k, l)
2066 use blockpointers,
only: flowdoms,
ib,
jb,
kb,
ie,
je,
ke,
ib,
jb,
ke, &
2075 integer(kind=intType) :: nLevels
2078 nlevels = ubound(flowdoms, 2)
logical function onblock(i, j, k)
type(actuatorregiontype), dimension(nactuatorregionsmax), target actuatorregionsd
integer(kind=inttype) nactuatorregions
logical adjointpetscvarsallocated
subroutine setupstandardmultigrid(kspObject, kspObjectType, gmresRestart, preConSide, ASMOverlap, outerPreconIts, localMatrixOrdering, fillLevel, localPreConIts, ASMOverlapCoarse, fillLevelCoarse, localPreConItsCoarse)
subroutine initializepetsc
subroutine setup_3x3x3_coloring(nn, level, nColor)
subroutine mymatcreate(matrix, blockSize, m, n, nnzDiagonal, nnzOffDiag, file, line)
subroutine mykspmonitor(myKsp, n, rnorm, dummy, ierr)
subroutine zeroadseeds(nn, level, sps)
subroutine resetfdreference(level)
subroutine setup_bf_coloring(nn, level, nColor)
subroutine destroypetscvars
subroutine setup_drdw_visc_coloring(nn, level, nColor)
subroutine setupstateresidualmatrix(matrix, useAD, usePC, useTranspose, useObjective, frozenTurb, level, useTurbOnly, useCoarseMats)
subroutine statepreallocation(onProc, offProc, wSize, stencil, N_stencil, level, transposed)
subroutine allocderivativevalues(level)
subroutine setupstandardksp(kspObject, kspObjectType, gmresRestart, preConSide, globalPCType, ASMOverlap, globalPreConIts, localPCType, localMatrixOrdering, localFillLevel, localPreConIts)
subroutine referenceshocksensor
subroutine setfdreference(level)
subroutine setup_5x5x5_coloring(nn, level, nColor)
subroutine setup_drdw_euler_coloring(nn, level, nColor)
subroutine setup_pc_coloring(nn, level, nColor)
logical derivvarsallocated
type(arr3int4), dimension(:, :), allocatable, target coarseindices
integer(kind=inttype) amgouterits
integer(kind=inttype) amglevels
type(arr4int4), dimension(:, :), allocatable, target coarseoversetindices
subroutine setupshellpc(pc, ierr)
integer(kind=inttype) amgfilllevelfine
integer(kind=inttype) amglocalpreconitsfine
integer(kind=inttype) amglocalpreconitscoarse
subroutine applyshellpc(pc, x, y, ierr)
integer(kind=inttype) amgasmoverlapcoarse
character(len=maxstringlen) amgmatrixordering
integer(kind=inttype) amgasmoverlapfine
integer(kind=inttype) amgfilllevelcoarse
subroutine destroyshellpc(pc, ierr)
type(blocktype), dimension(:, :, :), allocatable, target flowdomsd
type(blocktype), dimension(:, :, :), allocatable, target flowdoms
type(fringetype), dimension(:), pointer fringes
real(kind=realtype), dimension(:, :, :), pointer gamma
integer(kind=inttype) nviscbocos
real(kind=realtype), dimension(:, :, :), pointer p
integer(kind=inttype), dimension(:, :, :, :), pointer fringeptr
real(kind=realtype), dimension(:, :, :, :), pointer w
integer(kind=inttype), dimension(:, :, :), pointer iblank
integer(kind=inttype), dimension(:, :, :), pointer globalcell
integer(kind=inttype) nbocos
real(kind=realtype), dimension(:, :, :), pointer volref
real(kind=realtype), dimension(:, :, :, :), pointer dw
real(kind=realtype), dimension(:, :, :), pointer shocksensor
integer(kind=inttype), dimension(:, :, :, :), pointer gind
type(cgnsblockinfotype), dimension(:), allocatable cgnsdoms
type(cgnsblockinfotype), dimension(:), allocatable cgnsdomsd
integer(kind=inttype) cgnsndom
type(internalcommtype), dimension(:, :), allocatable, target internaloverset
type(commtype), dimension(:, :), allocatable, target commpatternoverset
integer adflow_comm_world
real(kind=realtype), parameter zero
integer(kind=inttype), parameter eulerequations
real(kind=realtype), parameter half
integer(kind=inttype), parameter dissmatrix
integer(kind=inttype), parameter ransequations
integer(kind=inttype) isize3ofdrfsfacek
integer(kind=inttype) isize2ofdrfdw
integer(kind=inttype) isize4ofdrfw
integer(kind=inttype) isize4ofdrfdvt
integer(kind=inttype) isize4ofdrfbmtk1
integer(kind=inttype) isize1ofdrfradi
integer(kind=inttype) isize3ofdrfbmtj1
integer(kind=inttype) isize1ofdrfviscsubface
integer(kind=inttype) isize1ofdrfdrfbcdata_cavitation
integer(kind=inttype) isize2ofdrfradk
integer(kind=inttype) isize2ofdrfbvtk1
integer(kind=inttype) isize3ofdrfdw
integer(kind=inttype) isize1ofdrfgamma
integer(kind=inttype) isize4ofdrfbmti2
integer(kind=inttype) isize2ofdrfvol
integer(kind=inttype) isize2ofdrfsfacej
integer(kind=inttype) isize2ofdrfdrfbcdata_rface
integer(kind=inttype) isize3ofdrfbvti1
integer(kind=inttype) isize1ofdrfdvt
integer(kind=inttype) isize3ofdrfgamma
integer(kind=inttype) isize1ofdrfbmti1
integer(kind=inttype) isize1ofdu1
integer(kind=inttype) isize2ofdrfdrfbcdata_oarea
integer(kind=inttype) isize1ofdrfbvtk2
integer(kind=inttype) isize2ofdrfradj
integer(kind=inttype) isize1ofdrfsi
integer(kind=inttype) isize2ofdrfsfacei
integer(kind=inttype) isize2ofdrfrev
integer(kind=inttype) isize3ofdrfsfacei
integer(kind=inttype) isize3ofdrfdtl
integer(kind=inttype) isize1ofdrfbmtk2
integer(kind=inttype) isize1ofdrfflowdoms_vol
integer(kind=inttype) isize2ofdrfsi
integer(kind=inttype) isize1ofdrfdrfbcdata_norm
integer(kind=inttype) isize2ofdrfs
integer(kind=inttype) isize1ofv
integer(kind=inttype) isize3ofdrfdrfbcdata_oarea
integer(kind=inttype) isize2ofdrfflowdoms_x
integer(kind=inttype) isize4ofdrfs
integer(kind=inttype) isize1ofdrfx
integer(kind=inttype) isize2ofdrfdrfbcdata_sepsensorksarea
integer(kind=inttype) isize1ofdu3
integer(kind=inttype) isize3ofdrfflowdoms_w
integer(kind=inttype) isize1ofdrfdrfviscsubface_tau
integer(kind=inttype) isize2ofdrfsj
integer(kind=inttype) isize2ofdrfdrfviscsubface_tau
integer(kind=inttype) isize3ofdrfradj
integer(kind=inttype) isize3ofdrfdrfbcdata_fv
integer(kind=inttype) isize4ofdrfbmti1
integer(kind=inttype) isize1ofrho
integer(kind=inttype) isize1ofdrfprod
integer(kind=inttype) isize1ofdrfsk
integer(kind=inttype) isize1ofdrfw
integer(kind=inttype) isize2ofdrfsfacek
integer(kind=inttype) isize2ofdrfdrfbcdata_cavitation
integer(kind=inttype) isize3ofdrfbmtk1
integer(kind=inttype) isize1ofdrfsj
integer(kind=inttype) isize1ofdrfdrfbcdata_fp
integer(kind=inttype) isize1offlux
integer(kind=inttype) isize1ofdrfflowdoms_bcdata
integer(kind=inttype) isize1ofdrfradj
integer(kind=inttype) isize1ofdu2
integer(kind=inttype) isize3ofdrfradk
integer(kind=inttype) isize1ofdrfsfacej
integer(kind=inttype) isize3ofdrfbvtk2
integer(kind=inttype) isize3ofdrfdrfbcdata_fp
integer(kind=inttype) isize2ofdrfvort
integer(kind=inttype) isize3ofdrfbmtj2
integer(kind=inttype) isize3ofdrfdrfviscsubface_tau
integer(kind=inttype) isize1ofdrfdrfbcdata_sepsensorksarea
integer(kind=inttype) isize1ofw
integer(kind=inttype) isize3ofdrfp
integer(kind=inttype) isize1ofdrfdrfbcdata_sepsensorks
integer(kind=inttype) isize1ofdrfflowdoms
integer(kind=inttype) isize1ofdrfbvti2
integer(kind=inttype) isize1ofdrfdtl
integer(kind=inttype) isize2ofdrfbmtj2
integer(kind=inttype) isize2ofdrfprod
integer(kind=inttype) isize3ofdrfrlv
integer(kind=inttype) isize1ofdrfdrfbcdata_m
integer(kind=inttype) isize1ofdrfdrfbcdata_sepsensor
integer(kind=inttype) isize4ofdrfflowdoms_x
integer(kind=inttype) isize1ofdrfvort
integer(kind=inttype) isize2ofdrfflowdoms
integer(kind=inttype) isize3ofdrfvol
integer(kind=inttype) isize4ofdrffw
integer(kind=inttype) isize3ofdrfflowdoms_x
integer(kind=inttype) isize1ofdrfs
integer(kind=inttype) isize3ofdrfbvtk1
integer(kind=inttype) isize1ofdrfsfacei
integer(kind=inttype) isize2ofdrfbvti2
integer(kind=inttype) isize2ofdrffw
integer(kind=inttype) isize3ofdrfflowdoms_vol
integer(kind=inttype) isize1ofdrfbvti1
integer(kind=inttype) isize3ofdrfbvti2
integer(kind=inttype) isize2ofdrfbmtk1
integer(kind=inttype) isize1ofright
integer(kind=inttype) isize2ofdrfbmtj1
integer(kind=inttype) isize4ofdrfsj
integer(kind=inttype) isize1ofdrffw
integer(kind=inttype) isize3ofdrfflowdoms
integer(kind=inttype) isize3ofdrfsfacej
integer(kind=inttype) isize4ofdrfdw
integer(kind=inttype) isize3ofdrfw
integer(kind=inttype) isize4ofdrfx
integer(kind=inttype) isize2ofdrfdvt
integer(kind=inttype) isize4ofdrfflowdoms_w
integer(kind=inttype) isize2ofdrfflowdoms_vol
integer(kind=inttype) isize2ofdrfdrfbcdata_m
integer(kind=inttype) isize1ofdrfdrfbcdata_oarea
integer(kind=inttype) isize2ofdrfbmtk2
integer(kind=inttype) isize1ofp
integer(kind=inttype) isize1ofdrfdrfbcdata_rface
integer(kind=inttype) isize2ofdrfflowdoms_w
integer(kind=inttype) isize1ofdrfp
integer(kind=inttype) isize1ofdrfbcdata
integer(kind=inttype) isize1ofdrfsfacek
integer(kind=inttype) isize2ofdrfbvti1
integer(kind=inttype) isize1ofdrfdrfbcdata_axismoment
integer(kind=inttype) isize1ofdrfdw
integer(kind=inttype) isize2ofdrfdrfbcdata_axismoment
integer(kind=inttype) isize3ofdrfx
integer(kind=inttype) isize2ofdrfdrfbcdata_fp
integer(kind=inttype) isize1ofdrfrlv
integer(kind=inttype) isize2ofdrfdrfbcdata_sepsensor
integer(kind=inttype) isize4ofdrfsi
integer(kind=inttype) isize2ofdrfw
integer(kind=inttype) isize4ofdrfbmtj1
integer(kind=inttype) isize1ofk
integer(kind=inttype) isize2ofdrfdrfbcdata_sepsensorks
integer(kind=inttype) isize1ofdrfflowdoms_dw
integer(kind=inttype) isize2ofdrfflowdoms_dw
integer(kind=inttype) isize1ofdrfdrfbcdata_fv
integer(kind=inttype) isize2ofdrfsk
integer(kind=inttype) isize3ofdrfdrfbcdata_m
integer(kind=inttype) isize1ofdrfbmti2
integer(kind=inttype) isize2ofdrfradi
integer(kind=inttype) isize3ofdrfbmti1
integer(kind=inttype) isize1ofdrfrev
integer(kind=inttype) isize1ofu
integer(kind=inttype) isize3ofdrfsk
integer(kind=inttype) isize3ofdrfdvt
integer(kind=inttype) isize1ofleft
integer(kind=inttype) isize3ofdrfradi
integer(kind=inttype) isize2ofdrfp
integer(kind=inttype) isize2ofdrfdrfbcdata_norm
integer(kind=inttype) isize3ofdrfbmtk2
integer(kind=inttype) isize1ofdrfbmtk1
integer(kind=inttype) isize3ofdrfrev
integer(kind=inttype) isize3ofdrfsj
integer(kind=inttype) isize2ofdrfx
integer(kind=inttype) isize1ofdrfflowdoms_w
integer(kind=inttype) isize3ofdrfflowdoms_dw
integer(kind=inttype) isize1ofdrfbvtk1
integer(kind=inttype) isize3ofdrfvort
integer(kind=inttype) isize1ofdrfbmtj1
integer(kind=inttype) isize4ofdrfbmtj2
integer(kind=inttype) isize4ofdrfbmtk2
integer(kind=inttype) isize3ofdrfsi
integer(kind=inttype) isize1ofdrfflowdoms_x
integer(kind=inttype) isize2ofdrfdrfbcdata_fv
integer(kind=inttype) isize3ofdrfprod
integer(kind=inttype) isize2ofdrfdtl
integer(kind=inttype) isize3ofdrffw
integer(kind=inttype) isize3ofdrfbmti2
integer(kind=inttype) isize2ofdrfbmti1
integer(kind=inttype) isize2ofdrfbmti2
integer(kind=inttype) isize1ofdrfradk
integer(kind=inttype) isize4ofdrfsk
integer(kind=inttype) isize1ofdrfbmtj2
integer(kind=inttype) isize2ofdrfbvtk2
integer(kind=inttype) isize2ofdrfrlv
integer(kind=inttype) isize1ofetot
integer(kind=inttype) isize2ofdrfgamma
integer(kind=inttype) isize1ofdrfvol
integer(kind=inttype) isize4ofdrfflowdoms_dw
integer(kind=inttype) isize3ofdrfdrfbcdata_norm
integer(kind=inttype) isize3ofdrfs
real(kind=realtype), dimension(:), allocatable winfd
real(kind=realtype) rhoinfd
integer(kind=inttype) nt1
real(kind=realtype) muinfd
real(kind=realtype) pinfcorrd
real(kind=realtype) trefd
real(kind=realtype) uinfd
real(kind=realtype) rgasd
real(kind=realtype) hrefd
real(kind=realtype) pinfdimd
real(kind=realtype) prefd
real(kind=realtype) tinfdimd
integer(kind=inttype) nwf
real(kind=realtype) gammainfd
real(kind=realtype), dimension(:), allocatable winf
real(kind=realtype) urefd
real(kind=realtype) rhoinfdimd
real(kind=realtype) pinfd
real(kind=realtype) murefd
real(kind=realtype) rhorefd
integer(kind=inttype) nt2
real(kind=realtype) timerefd
subroutine whalo2(level, start, end, commPressure, commGamma, commViscous)
integer(kind=inttype) currentlevel
integer(kind=inttype) groundlevel
integer(kind=inttype) rkstage
subroutine block_res_state(nn, sps, useFlowRes, useTurbRes)
subroutine block_res_state_d(nn, sps)
subroutine master(useSpatial, famLists, funcValues, forces, bcDataNames, bcDataValues, bcDataFamLists)
subroutine fractoweights(frac, weights)
subroutine initres_block(varStart, varEnd, nn, sps)
subroutine unique(arr, nn, n_unique, inverse)
integer(kind=inttype), parameter n_visc_drdw
integer(kind=inttype), dimension(7, 3), target euler_pc_stencil
integer(kind=inttype), dimension(13, 3), target euler_drdw_stencil
integer(kind=inttype), parameter n_euler_drdw
integer(kind=inttype), parameter n_euler_pc
integer(kind=inttype), dimension(27, 3), target visc_pc_stencil
integer(kind=inttype), dimension(33, 3), target visc_drdw_stencil
integer(kind=inttype), parameter n_visc_pc
integer(kind=inttype), dimension(:), allocatable fullfamlist
subroutine setpointers_d(nn, level, sps)
subroutine getdirangle(freeStreamAxis, liftAxis, liftIndex, alpha, beta)
subroutine echk(errorcode, file, line)
subroutine setpointers(nn, mm, ll)