# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# @author Paul Dechamps
# @date 2024
# Test the blaster adjoint implementation.
# Imports.
importnumpyasnp
fromfwk.wutilsimportparseargs
importfwk
fromfwk.testingimport*
fromfwk.coloringimportccolors
importfwk
fromfwk.testingimport*
fromfwk.coloringimportccolors
importnumpyasnp
importos
frommatplotlibimportpyplotasplt
fromblast.api.blaster_apiimportinit_blaster
importblast.utilsasviscUtils
defcfgInviscid(nthrds,verb):
importos.path
# Parameters
return{
# Options
'scenario':'aerodynamic',
'task':'optimization',
'Threads':nthrds,# number of threads
'Verb':verb,# verbosity
# Model (geometry or mesh)
'File':os.path.dirname(os.path.abspath(__file__))+'/../models/dart/n0012.geo',# Input file containing the model
'Pars':{'xLgt':50,'yLgt':50,'msF':10,'msTe':0.01,'msLe':0.01},# parameters for input file model
'Dim':2,# problem dimension
'Format':'gmsh',# save format (vtk or gmsh)
# Markers
'Fluid':'field',# name of physical group containing the fluid
'Farfield':['upstream','farfield','downstream'],# LIST of names of physical groups containing the farfield boundaries (upstream/downstream should be first/last element)
'Wing':'airfoil',# LIST of names of physical groups containing the lifting surface boundary
'Wake':'wake',# LIST of names of physical group containing the wake
'WakeTip':'wakeTip',# LIST of names of physical group containing the edge of the wake
'Te':'te',# LIST of names of physical group containing the trailing edge
'dbc':False,
'Upstream':'upstream',
# Freestream
'M_inf':0.2,# freestream Mach number
'AoA':2.,# freestream angle of attack
# Geometry
'S_ref':1.,# reference surface length
'c_ref':1.,# reference chord length
'x_ref':.25,# reference point for moment computation (x)
'y_ref':0.0,# reference point for moment computation (y)
'z_ref':0.0,# reference point for moment computation (z)
# Numerical
'LSolver':'SparseLu',# inner solver (Pardiso, MUMPS or GMRES)
'G_fill':2,# fill-in factor for GMRES preconditioner
'G_tol':1e-5,# tolerance for GMRES
'G_restart':50,# restart for GMRES
'Rel_tol':1e-6,# relative tolerance on solver residual
'Abs_tol':1e-8,# absolute tolerance on solver residual
'Max_it':20,# solver maximum number of iterations
}
defcfgBlast(verb):
return{
'Re':1e6,# Freestream Reynolds number
'Minf':0.2,# Freestream Mach number (used for the computation of the time step only)
'CFL0':1,# Inital CFL number of the calculation
'Verb':verb,# Verbosity level of the solver
'couplIter':100,# Maximum number of iterations
'couplTol':1e-2,# Tolerance of the VII methodology
'iterPrint':20,# int, number of iterations between outputs
'resetInv':True,# bool, flag to reset the inviscid calculation at every iteration.
'sections':[0],# List of sections for boundary layer calculation
'xtrF':[-1,-1],# Forced transition location
'interpolator':'Matching',# Interpolator for the coupling