Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
604c707
test
marcellorighi Jan 7, 2021
5012617
test
marcellorighi Jan 7, 2021
3929038
test
marcellorighi Jan 7, 2021
1cccbe5
Added ks as input *NOT WORKING*
Jan 11, 2021
8b929fc
Added ks as input
Jan 12, 2021
98e1dc5
Changed turbBC
Jan 12, 2021
3efa795
changed BC for ks=1e-3
Jan 13, 2021
60ab049
added dynamic SA_fact calculation
Jan 13, 2021
e4e89e7
reran tapenade
anilyil Jan 15, 2021
5deba2a
Prevent division by 0 (hack)
Jan 25, 2021
90797b1
Prepare to merge
Feb 5, 2021
8f8ed06
update to adflow 2.3
DavidAnderegg Feb 5, 2021
74cf992
complete merge
Feb 5, 2021
9d5b0c9
try to fix crash
Feb 10, 2021
415ac8a
Removed uncommented code lines
Jul 28, 2021
3eb92ed
Merge branch 'sa-rough' into sa_rough
DavidAnderegg Aug 2, 2021
5d92cd7
removed unused fast_b files and updated gitignore
marcomangano Sep 7, 2021
1278b05
Merge pull request #153 from marcellorighi/sa_rough
sseraj Oct 4, 2021
34512a3
Merge pull request #1 from DavidAnderegg/master
DavidAnderegg Dec 10, 2021
2479065
Renames 'kssa' to better match rest
Dec 13, 2021
9e44763
Merge pull request #2 from DavidAnderegg/master
DavidAnderegg Mar 8, 2022
a557c16
Merge pull request #3 from mdolab/main
DavidAnderegg Mar 25, 2022
b494b0c
Merge pull request #4 from DavidAnderegg/master
DavidAnderegg May 17, 2022
28cdb79
Merge pull request #5 from mdolab/main
DavidAnderegg Jul 12, 2022
f4f8acf
Merge pull request #6 from mdolab/main
DavidAnderegg Aug 10, 2022
89932aa
BC for nu_t should not be modified
Sep 2, 2022
1eb84ab
Ks may be set via CGNS BC now
Sep 13, 2022
c04cace
Add ks BC for implicit treatment
Oct 6, 2022
5d7725b
replace 'kssa' with 'useRoughSA'
Oct 18, 2022
6817ef9
proper implementation on 1 process + tapenade
Oct 20, 2022
de9fd14
multi-proc now possible (+tapenade)
Nov 7, 2022
351e21a
remove unneeded check
Nov 7, 2022
dfa996c
Write volume ks-values for debugging
Nov 7, 2022
538a234
use -1 as failure (0 might be a cellID)
Nov 8, 2022
9db1b97
Adds the ability to set ks via pyADflow
Nov 9, 2022
abba651
Add comments and fix missing allocation
Nov 9, 2022
c4abab5
Merge branch 'mdolab:main' into sa-rough-devel
DavidAnderegg Nov 9, 2022
7c9a285
remove debugging-print
Nov 9, 2022
1b88751
Merge branch 'sa-rough-devel' of github.com:DavidAnderegg/adflow into…
Nov 9, 2022
b4642e5
run tapenade
Nov 9, 2022
d86c058
change for better readability
Nov 9, 2022
81449a4
Add TODO note in BCData
Nov 9, 2022
fc65b41
Merge branch 'mdolab:main' into sa-rough-devel
DavidAnderegg Nov 30, 2022
9b68824
Merge branch 'mdolab:main' into sa-rough-devel
DavidAnderegg Dec 13, 2022
d7856fc
Fix i-j mix-up in rough SA
Dec 15, 2022
fbb67e9
Init ks-values on BC for MG
Dec 16, 2022
bdaeb08
Merge branch 'main' of https://github.com/mdolab/adflow into mdolab-main
Dec 23, 2022
d80feb5
Merge branch 'mdolab-main' into sa-rough-devel
Dec 23, 2022
25d832b
Fix BC-bug for non-SA_rough
Jan 4, 2023
8355385
make SA-rough changes more visibile
Jan 4, 2023
3774ec8
run tapenade
Jan 4, 2023
766fdd1
cleanup + tapenade
Jan 4, 2023
b3df152
Use realtype instead of float (+tapenade)
Jan 11, 2023
3c716c7
use correct wall cluster for overset case
Jan 21, 2023
30123be
Cleanup Comments
Feb 16, 2023
63b0fb6
Add tests
Feb 16, 2023
d8d9f9f
Merge branch 'sa-rough-devel' into master
DavidAnderegg Feb 16, 2023
f85cf2b
Merge pull request #9 from DavidAnderegg/master
DavidAnderegg Feb 16, 2023
b9523ce
rerun tapenade
Feb 16, 2023
e388389
run black
Feb 16, 2023
0d8a7bc
Update docs
Feb 16, 2023
fe1fec1
run flake8
Feb 16, 2023
450485e
run fprettify
Feb 21, 2023
567a97e
run fprettify with mdolab options
Feb 21, 2023
12b66c1
prepare for merge
Feb 21, 2023
a855e42
Merge branch 'mdolab-main' into sa-rough-devel
Feb 21, 2023
d04f838
Merge branch 'main' of https://github.com/mdolab/adflow into mdolab-main
Feb 21, 2023
6559088
Merge branch 'mdolab-main' into sa-rough-devel
Feb 21, 2023
86ab6d3
rerun fprettify + tapenade
Feb 21, 2023
e154b81
rerun black
Feb 21, 2023
2ae3fe6
retrain SA-rough test
Feb 21, 2023
7ca276b
rerun black with version 23.1.0
Feb 21, 2023
b8f5256
Merge branch 'mdolab:main' into sa-rough-devel
DavidAnderegg Feb 24, 2023
5e71588
Merge branch 'main' of https://github.com/mdolab/adflow into mdolab-main
Oct 20, 2023
3b6cb7a
Merge branch 'mdolab-main' into sa-rough-devel
Oct 20, 2023
eb85158
update rought test and retrain
Oct 20, 2023
a784190
get rid of 'fprettify' warning
Oct 20, 2023
156b582
Merge pull request #32 from mdolab/main
DavidAnderegg Mar 6, 2024
b80a442
Merge pull request #34 from mdolab/main
DavidAnderegg Oct 1, 2024
ee2b302
Retrain 'test_functionals' and fix typo in setup
Oct 1, 2024
30c13be
adjust saFact so it is differentiable by tapenade and add test for
Oct 9, 2024
1c76920
partials are wrong, but not crashing
Oct 10, 2024
bd4e3ae
partials even more wrong, but not crashing
Oct 10, 2024
8ec0693
Extend d2wall to include halos and fix sa-rough gradients
Oct 11, 2024
0aa1741
Also train dot product test w -> F
Oct 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ src/build/libadflow-f2pywrappers.f
src/build/libadflowmodule.c
src/build/importTest.py

# unused fast_b routines generated by Tapenade
src/adjoint/outputReverseFast/adjointextra_fast_b.f90
src/adjoint/outputReverseFast/bcdata_fast_b.f90
src/adjoint/outputReverseFast/oversetutilities_fast_b.f90
src/adjoint/outputReverseFast/zipperintegrations_fast_b.f90

# Regression test auxiliary files:
input_files.tar.gz
adflow_input_files.tar.gz
Expand Down
56 changes: 56 additions & 0 deletions adflow/pyADflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,9 @@ def __init__(self, comm=None, options=None, debug=False, dtype="d"):
# Set all internal adflow default options before we set anything from python
self.adflow.inputparamroutines.setdefaultvalues()

# surface-roughness overwrite-dict
self.surfaceRoughness = dict()

defSetupTime = time.time()

# Initialize the inherited AeroSolver
Expand Down Expand Up @@ -1162,6 +1165,50 @@ def setRotationRate(self, rotCenter, rotRate, cgnsBlocks=None):
self.adflow.preprocessingapi.updaterotationrate(rotCenter, rotations, cgnsBlocks)
self._updateVelInfo = True

def setSurfaceRoughness(self, ks, groupName=None):
"""
Sets the equivalent sandgrain roughness on the specified surface family.
It may only be used when the rough SA-variant (useRoughSA = True) is
active.

This function takes precendence over all boundary conditions set in the
mesh.

Parameters:
----------
ks : float
Equivalent sandgrain roughness
groupName : str
Family group to use. Default to all walls if not given (None)
"""

if not self.options["useroughsa"]:
raise Error(
"It is not possible to set a surface roughness value without "
"using the rough SA-variant (useRoughSA = False)"
)

if groupName is None:
groupName = self.allWallsGroup

if groupName in self.surfaceRoughness:
raise Error(
f"The roughness value for surface group '{groupName}' has "
f"allready been set to {self.surfaceRoughness[groupName]}"
)

self.surfaceRoughness[groupName] = ks

def _setSurfaceRoughness(self):
"""
Set the actual roughness values. It must be postponed for as long as
possible. Otherwise it might get overwritten.
"""

for groupName, ks in self.surfaceRoughness.items():
famList = self._getFamilyList(groupName)
self.adflow.preprocessingapi.updatesurfaceroughness(ks, famList)

def checkPartitioning(self, nprocs):
"""This function determines the potential load balancing for
nprocs. The intent is this function can be run in serial
Expand Down Expand Up @@ -3706,6 +3753,13 @@ def _setAeroProblemData(self, aeroProblem, firstCall=False):
self.adflow.preprocessingapi.updatemetricsalllevels()
self.adflow.preprocessingapi.updategridvelocitiesalllevels()

# overwrite BC surface roughness
if len(self.surfaceRoughness) > 0:
self._setSurfaceRoughness()

# Propagate roughness values through volume
self.adflow.walldistance.updatewallroughness()

def _getBCDataFromAeroProblem(self, AP):
variables = []
dataArray = []
Expand Down Expand Up @@ -5675,6 +5729,7 @@ def _getDefaultOptions():
"useQCR": [bool, False],
"useRotationSA": [bool, False],
"useft2SA": [bool, True],
"useRoughSA": [bool, False],
"eddyVisInfRatio": [float, 0.009],
"useWallFunctions": [bool, False],
"useApproxWallDistance": [bool, True],
Expand Down Expand Up @@ -6070,6 +6125,7 @@ def _getOptionMap(self):
"useqcr": ["physics", "useqcr"],
"userotationsa": ["physics", "userotationsa"],
"useft2sa": ["physics", "useft2sa"],
"useroughsa": ["physics", "useroughsa"],
"eddyvisinfratio": ["physics", "eddyvisinfratio"],
"usewallfunctions": ["physics", "wallfunctions"],
"walldistcutoff": ["physics", "walldistcutoff"],
Expand Down
10 changes: 9 additions & 1 deletion doc/options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,15 @@ useft2SA:
desc: >
Include the ft2 term in the Spalart-Allmaras turbulence model.

useRoughSA:
desc: >
Activates the rough SA variant described `here
<https://turbmodels.larc.nasa.gov/spalart.html#sarough>`__. To use it,
blockettes must be disabled ``useBlockettes: False``. The roughness value on
the boundary may be prescribed like a regular boundary value using the name
``SandGrainRoughness``. Additionally, the ADflow method ``setSurfaceRoughness``
may be used.

eddyVisInfRatio:
desc: >
Free stream value of eddy viscosity.
Expand Down Expand Up @@ -1613,4 +1622,3 @@ meshMaxSkewness:
useSkewnessCheck:
desc: >
When set to true, ADflow computes the `skewness` of each cell and throws an error if it is above ``meshMaxSkewness``. See also ``printBadlySkewedCells``.

10 changes: 9 additions & 1 deletion src/NKSolver/blockette.F90
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ subroutine blocketteRes(useDissApprox, useViscApprox, useUpdateIntermed, useFlow
use initializeFlow, only: referenceState
use section, only: sections, nSections
use iteration, only: rFil, currentLevel
use haloExchange, only: exchangeCoor, whalo2
use haloExchange, only: exchangeCoor, whalo2, exchanged2Wall
use wallDistance, only: updateWallDistancesQuickly
use utils, only: setPointers, EChk
use turbUtils, only: computeEddyViscosity
Expand Down Expand Up @@ -181,12 +181,20 @@ subroutine blocketteRes(useDissApprox, useViscApprox, useUpdateIntermed, useFlow
do nn = 1, nDom
call setPointers(nn, currentLevel, sps)
call xhalo_block()

if (equations == RANSEquations .and. useApproxWallDistance) then
call updateWallDistancesQuickly(nn, 1, sps)
end if
end do
end do

! Now exchange the coordinates (fine level only)
call exchangecoor(1)

if (equations == RANSEquations .and. useApproxWallDistance) then
call exchanged2Wall(1)
end if

do sps = 1, nTimeIntervalsSpectral
! Update overset connectivity if necessary
if (oversetPresent .and. oversetUpdateMode == updateFast) then
Expand Down
24 changes: 12 additions & 12 deletions src/adjoint/Makefile_tapenade
Original file line number Diff line number Diff line change
Expand Up @@ -132,17 +132,17 @@ flowUtils%computeEtotBlock(w, p) > \
\
turbUtils%computeEddyViscosity(w,rlv)>(w,rlv,rev) \
\
BCRoutines%bcSymm1stHalo(ww1, ww2, pp1, pp2, rlv1, rlv2, rev1, rev2, bcData%norm) > \
(ww1, ww2, pp1, pp2, rlv1, rlv2, rev1, rev2, bcData%norm) \
BCRoutines%bcSymm1stHalo(ww1, ww2, pp1, pp2, rlv1, rlv2, rev1, rev2, d2wall1, d2wall2, bcData%norm) > \
(ww1, ww2, pp1, pp2, rlv1, rlv2, rev1, rev2, d2wall1, d2wall2, bcData%norm) \
\
BCRoutines%bcSymm2ndHalo(ww0, ww3, pp0, pp3, rlv0, rlv3, rev0, rev3, bcData%norm) > \
(ww0, ww3, pp0, pp3, rlv0, rlv3, rev0, rev3, bcData%norm) \
BCRoutines%bcSymm2ndHalo(ww0, ww3, pp0, pp3, rlv0, rlv3, rev0, rev3, bd2wall0, d2wall3, cData%norm) > \
(ww0, ww3, pp0, pp3, rlv0, rlv3, rev0, rev3, bd2wall0, d2wall3, bcData%norm) \
\
BCRoutines%bcSymmPolar1stHalo(xx, ww1, ww2, pp1, pp2, rlv1, rlv2, rev1, rev2) > \
(xx, ww1, ww2, pp1, pp2, rlv1, rlv2, rev1, rev2) \
BCRoutines%bcSymmPolar1stHalo(xx, ww1, ww2, pp1, pp2, rlv1, rlv2, rev1, rev2, d2wall1, d2wall2) > \
(xx, ww1, ww2, pp1, pp2, rlv1, rlv2, rev1, rev2, d2wall1, d2wall2) \
\
BCRoutines%bcSymmPolar2ndHalo(xx, ww0, ww3, pp0, pp3, rlv0, rlv3, rev0, rev3) > \
(xx, ww0, ww3, pp0, pp3, rlv0, rlv3, rev0, rev3) \
BCRoutines%bcSymmPolar2ndHalo(xx, ww0, ww3, pp0, pp3, rlv0, rlv3, rev0, rev3, d2wall0, d2wall3) > \
(xx, ww0, ww3, pp0, pp3, rlv0, rlv3, rev0, rev3, d2wall0, d2wall3) \
\
BCRoutines%bcNSWallAdiabatic(ww0, ww1, ww2, pp0, pp1, pp2, pp3, rlv0, rlv1, rlv2, rev0, rev1, rev2, bcData%uSlip) > \
(ww0, ww1, ww2, pp0, pp1, pp2, pp3, rlv0, rlv1, rlv2, rev0, rev1, rev2, bcData%uSlip) \
Expand All @@ -162,11 +162,11 @@ BCRoutines%bcSubsonicInflow(ww0, ww1, ww2, pp0, pp1, pp2, rlv0, rlv1, rlv2, rev0
BCRoutines%bcSubsonicOutflow(ww0, ww1, ww2, pp0, pp1, pp2, rlv0, rlv1, rlv2, rev0, rev1, rev2, bcData%norm, bcData%Ps) > \
(ww0, ww1, ww2, pp0, pp1, pp2, rlv0, rlv1, rlv2, rev0, rev1, rev2, bcData%norm, bcData%Ps) \
\
turbBCRoutines%applyAllTurbBCThisBlock(rev, w, bvtj1, bvtj2, bvtk1, bvtk2, bvti1, bvti2) > \
(rev, w) \
turbBCRoutines%applyAllTurbBCThisBlock(rev, w, bvtj1, bvtj2, bvtk1, bvtk2, bvti1, bvti2, bmti1, bmti2, bmtj1, bmtj2, bmtk1, bmtk2, d2wall) > \
(rev, w, bvtj1, bvtj2, bvtk1, bvtk2, bvti1, bvti2, bmti1, bmti2, bmtj1, bmtj2, bmtk1, bmtk2, d2wall) \
\
turbBCRoutines%bcTurbTreatment(w, rlv, d2wall, winf) > \
(w, rlv, d2wall, winf, bvtj1, bvtj2, bvtk1, bvtk2, bvti1, bvti2) \
turbBCRoutines%bcTurbTreatment(w, rlv, d2wall, winf, bvtj1, bvtj2, bvtk1, bvtk2, bvti1, bvti2, bmti1, bmti2, bmtj1, bmtj2, bmtk1, bmtk2) > \
(w, rlv, d2wall, winf, bvtj1, bvtj2, bvtk1, bvtk2, bvti1, bvti2, bmti1, bmti2, bmtj1, bmtj2, bmtk1, bmtk2) \
\
solverUtils%timeStep_block(w, pInfCorr, rhoInf, si, sj, sk, sFaceI, sFaceJ, sFaceK, p, radi, radj, radk, dtl, rlv, rev, vol) > \
(w, pInfCorr, rhoInf, si, sj, sk, sFaceI, sFaceJ, sFaceK, p, radi, radj, radk, dtl, rlv, rev, vol) \
Expand Down
6 changes: 4 additions & 2 deletions src/adjoint/adjointUtils.F90
Original file line number Diff line number Diff line change
Expand Up @@ -772,8 +772,10 @@ subroutine allocDerivativeValues(level)

! Allocate d2wall if not already done so
if (.not. associated(flowDoms(nn, 1, sps)%d2wall)) then
allocate (flowDoms(nn, 1, sps)%d2wall(2:il, 2:jl, 2:kl))
allocate (flowDoms(nn, 1, sps)%d2wall(0:ib, 0:jb, 0:kb))
call EChk(ierr, __FILE__, __LINE__)

flowDoms(nn, level, sps)%d2Wall = 0.01
end if

! Now allocate all valus that have a differentiable
Expand Down Expand Up @@ -829,7 +831,7 @@ subroutine allocDerivativeValues(level)
flowDomsd(nn, level, sps)%bvtj2(ie, ke, nt1:nt2), &
flowDomsd(nn, level, sps)%bvtk1(ie, je, nt1:nt2), &
flowDomsd(nn, level, sps)%bvtk2(ie, je, nt1:nt2), &
flowDomsd(nn, level, sps)%d2Wall(2:il, 2:jl, 2:kl), &
flowDomsd(nn, level, sps)%d2Wall(0:ib, 0:jb, 0:kb), &
stat=ierr)
call EChk(ierr, __FILE__, __LINE__)

Expand Down
84 changes: 82 additions & 2 deletions src/adjoint/outputForward/BCData_d.f90
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,28 @@ module bcdata_d
subroutine setbcvarnamesisothermalwall()
use cgnsnames
use constants
use inputphysics, only : useroughsa
implicit none
nbcvar = nbcvarisothermalwall
bcvarnames(1) = cgnstemp
if (useroughsa) then
nbcvar = nbcvar + 1
bcvarnames(2) = cgnssandgrainroughness
end if
end subroutine setbcvarnamesisothermalwall

subroutine setbcvarnamesadiabaticwall()
use cgnsnames
use constants
use inputphysics, only : useroughsa
implicit none
nbcvar = nbcvaradiabaticwall
if (useroughsa) then
nbcvar = nbcvar + 1
bcvarnames(1) = cgnssandgrainroughness
end if
end subroutine setbcvarnamesadiabaticwall

subroutine setbcvarnamessubsonicinflow()
use constants
use cgnsnames
Expand Down Expand Up @@ -329,10 +346,10 @@ subroutine unitvectorscylsystem(boco)
end subroutine unitvectorscylsystem

! differentiation of bcdataisothermalwall in forward (tangent) mode (with options i4 dr8 r8):
! variations of useful results: *(*bcdata.tns_wall)
! variations of useful results: *(*bcdata.tns_wall) bcvararray
! with respect to varying inputs: tref bcvararray
! rw status of diff variables: tref:in *(*bcdata.tns_wall):out
! bcvararray:in
! bcvararray:in-out
! plus diff mem management of: bcdata:in *bcdata.tns_wall:in
! ---------------------------------------------------------------
! routines that set the actual bcdata values from the cgns data set
Expand All @@ -350,6 +367,7 @@ subroutine bcdataisothermalwall_d(boco, bcvararray, bcvararrayd, ibeg&
use blockpointers, only : bcfaceid, bcdata, bcdatad, nbkglobal
use utils_d, only : terminate, sitemperature
use flowvarrefstate, only : tref, trefd
use inputphysics, only : useroughsa
use diffsizes
! hint: isize1ofdrfbcdata should be the size of dimension 1 of array *bcdata
implicit none
Expand Down Expand Up @@ -388,6 +406,21 @@ subroutine bcdataisothermalwall_d(boco, bcvararray, bcvararrayd, ibeg&
bcdata(boco)%tns_wall(i, j) = temp0
end do
end do
! set a value of 0 if it was not possible to determine the
! sand grain roughness
if (useroughsa) then
! set a value of 0 if it was not possible to determine the
! sand grain roughness
if (.not.bcvarpresent(1)) then
bcvararrayd(:, :, 2) = 0.0_8
bcvararray(:, :, 2) = zero
end if
do j=jbeg,jend
do i=ibeg,iend
bcdata(boco)%ksns_wall(i, j) = bcvararray(i, j, 2)
end do
end do
end if
end subroutine bcdataisothermalwall_d

! ---------------------------------------------------------------
Expand All @@ -406,6 +439,7 @@ subroutine bcdataisothermalwall(boco, bcvararray, ibeg, iend, jbeg, &
use blockpointers, only : bcfaceid, bcdata, nbkglobal
use utils_d, only : terminate, sitemperature
use flowvarrefstate, only : tref
use inputphysics, only : useroughsa
implicit none
!
! subroutine arguments.
Expand All @@ -431,8 +465,54 @@ subroutine bcdataisothermalwall(boco, bcvararray, ibeg, iend, jbeg, &
& tref
end do
end do
! set a value of 0 if it was not possible to determine the
! sand grain roughness
if (useroughsa) then
! set a value of 0 if it was not possible to determine the
! sand grain roughness
if (.not.bcvarpresent(1)) bcvararray(:, :, 2) = zero
do j=jbeg,jend
do i=ibeg,iend
bcdata(boco)%ksns_wall(i, j) = bcvararray(i, j, 2)
end do
end do
end if
end subroutine bcdataisothermalwall

subroutine bcdataadiabaticwall(boco, bcvararray, ibeg, iend, jbeg, &
& jend)
!
! tries to extract the equivalent sand grain roughness. it sets
! a default value of 0.0
!
use constants
use cgnsnames
use inputphysics, only : useroughsa
use blockpointers, only : bcfaceid, bcdata, nbkglobal
implicit none
!
! subroutine arguments.
!
integer(kind=inttype) :: boco
integer(kind=inttype) :: ibeg, iend, jbeg, jend
real(kind=realtype), dimension(ibeg:iend, jbeg:jend, nbcvarmax) :: &
& bcvararray
!
! local variables.
!
integer(kind=inttype) :: i, j
if (useroughsa) then
! set a value of 0 if it was not possible to determine the
! sand grain roughness
if (.not.bcvarpresent(1)) bcvararray(:, :, 1) = zero
do j=jbeg,jend
do i=ibeg,iend
bcdata(boco)%ksns_wall(i, j) = bcvararray(i, j, 1)
end do
end do
end if
end subroutine bcdataadiabaticwall

! differentiation of bcdatasubsonicinflow in forward (tangent) mode (with options i4 dr8 r8):
! variations of useful results: *(*bcdata.ptinlet) *(*bcdata.ttinlet)
! *(*bcdata.htinlet) *(*bcdata.turbinlet)
Expand Down
Loading