Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F60565721
rational_interpolant_pivoted.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, May 1, 03:33
Size
38 KB
Mime Type
text/x-python
Expires
Fri, May 3, 03:33 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
17375742
Attached To
R6746 RationalROMPy
rational_interpolant_pivoted.py
View Options
# Copyright (C) 2018-2020 by the RROMPy authors
#
# This file is part of RROMPy.
#
# RROMPy is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RROMPy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with RROMPy. If not, see <http://www.gnu.org/licenses/>.
#
import
numpy
as
np
from
collections.abc
import
Iterable
from
copy
import
deepcopy
as
copy
from
.generic_pivoted_approximant
import
(
GenericPivotedApproximantBase
,
GenericPivotedApproximantNoMatch
,
GenericPivotedApproximantPolyMatch
,
GenericPivotedApproximantPoleMatch
)
from
.gather_pivoted_approximant
import
gatherPivotedApproximant
from
rrompy.reduction_methods.standard.rational_interpolant
import
(
RationalInterpolant
)
from
rrompy.utilities.base
import
verbosityManager
as
vbMng
from
rrompy.utilities.base.types
import
paramList
from
rrompy.utilities.numerical.hash_derivative
import
nextDerivativeIndices
from
rrompy.utilities.poly_fitting.piecewise_linear
import
sparsekinds
as
sk
from
rrompy.utilities.exception_manager
import
(
RROMPyException
,
RROMPyAssert
,
RROMPyWarning
)
from
rrompy.parameter
import
emptyParameterList
from
rrompy.utilities.parallel
import
(
masterCore
,
poolRank
,
indicesScatter
,
isend
,
recv
)
__all__
=
[
'RationalInterpolantPivotedNoMatch'
,
'RationalInterpolantPivotedPolyMatch'
,
'RationalInterpolantPivotedPoleMatch'
]
class
RationalInterpolantPivotedBase
(
GenericPivotedApproximantBase
,
RationalInterpolant
):
def
__init__
(
self
,
*
args
,
**
kwargs
):
self
.
_preInit
()
self
.
_addParametersToList
(
toBeExcluded
=
[
"polydegreetype"
,
"MAuxiliary"
,
"NAuxiliary"
])
super
()
.
__init__
(
*
args
,
**
kwargs
)
if
self
.
nparPivot
>
1
:
self
.
HFEngine
.
_ignoreResidues
=
1
self
.
_postInit
()
@property
def
MAuxiliary
(
self
):
return
0
@property
def
NAuxiliary
(
self
):
return
0
@property
def
polydegreetype
(
self
):
return
"TENSOR_TOTAL"
@property
def
scaleFactorDer
(
self
):
"""Value of scaleFactorDer."""
if
self
.
_scaleFactorDer
==
"NONE"
:
return
1.
if
self
.
_scaleFactorDer
==
"AUTO"
:
return
self
.
scaleFactorPivot
return
self
.
_scaleFactorDer
@scaleFactorDer.setter
def
scaleFactorDer
(
self
,
scaleFactorDer
):
if
isinstance
(
scaleFactorDer
,
(
str
,)):
scaleFactorDer
=
scaleFactorDer
.
upper
()
elif
isinstance
(
scaleFactorDer
,
Iterable
):
scaleFactorDer
=
list
(
scaleFactorDer
)
self
.
_scaleFactorDer
=
scaleFactorDer
self
.
_approxParameters
[
"scaleFactorDer"
]
=
self
.
_scaleFactorDer
def
_setupInterpolationIndices
(
self
):
"""Setup parameters for polyvander."""
RROMPyAssert
(
self
.
_mode
,
message
=
"Cannot setup interpolation indices."
)
if
(
self
.
_musUniqueCN
is
None
or
len
(
self
.
_reorder
)
!=
len
(
self
.
musPivot
)):
try
:
muPC
=
self
.
trainedModel
.
centerNormalizePivot
(
self
.
musPivot
)
except
:
muPC
=
self
.
trainedModel
.
centerNormalize
(
self
.
musPivot
)
self
.
_musUniqueCN
,
musIdxsTo
,
musIdxs
,
musCount
=
(
muPC
.
unique
(
return_index
=
True
,
return_inverse
=
True
,
return_counts
=
True
))
self
.
_musUnique
=
self
.
musPivot
[
musIdxsTo
]
self
.
_derIdxs
=
[
None
]
*
len
(
self
.
_musUniqueCN
)
self
.
_reorder
=
np
.
empty
(
len
(
musIdxs
),
dtype
=
int
)
filled
=
0
for
j
,
cnt
in
enumerate
(
musCount
):
self
.
_derIdxs
[
j
]
=
nextDerivativeIndices
([],
self
.
nparPivot
,
cnt
)
jIdx
=
np
.
nonzero
(
musIdxs
==
j
)[
0
]
self
.
_reorder
[
jIdx
]
=
np
.
arange
(
filled
,
filled
+
cnt
)
filled
+=
cnt
def
addMarginalSamplePoints
(
self
,
musMarginal
:
paramList
)
->
int
:
"""Add marginal sample points to reduced model."""
RROMPyAssert
(
self
.
_mode
,
message
=
"Cannot add sample points."
)
musMarginal
=
self
.
checkParameterListMarginal
(
musMarginal
)
vbMng
(
self
,
"INIT"
,
"Adding marginal sample point{} at {}."
.
format
(
"s"
*
(
len
(
musMarginal
)
>
1
),
musMarginal
),
5
)
if
(
self
.
SMarginal
>
0
and
hasattr
(
self
,
"polybasisMarginal"
)
and
self
.
polybasisMarginal
in
sk
):
RROMPyWarning
((
"Manually adding new samples with piecewise linear "
"marginal interpolation is dangerous. Sample depth "
"in samplerMarginal must be managed correctly."
))
mus
=
np
.
empty
((
self
.
S
*
len
(
musMarginal
),
self
.
HFEngine
.
npar
),
dtype
=
np
.
complex
)
mus
[:,
self
.
directionPivot
]
=
np
.
tile
(
self
.
musPivot
.
data
,
(
len
(
musMarginal
),
1
))
mus
[:,
self
.
directionMarginal
]
=
np
.
repeat
(
musMarginal
.
data
,
self
.
S
,
axis
=
0
)
self
.
_mus
.
append
(
mus
)
self
.
_musMarginal
.
append
(
musMarginal
)
N0
=
copy
(
self
.
N
)
req
,
is_master
=
[],
masterCore
()
idx
,
sizes
=
indicesScatter
(
len
(
musMarginal
),
return_sizes
=
True
)
_collapsed
=
self
.
trainedModel
.
data
.
_collapsed
pMat
,
Ps
,
Qs
=
None
,
[],
[]
emptyCores
=
np
.
where
(
np
.
array
(
sizes
)
==
0
)[
0
]
if
is_master
else
[]
if
len
(
idx
)
==
0
:
vbMng
(
self
,
"MAIN"
,
"Idling."
,
30
)
if
self
.
storeAllSamples
:
self
.
storeSamples
()
pL
=
recv
(
source
=
0
,
tag
=
poolRank
())
pMat
=
np
.
empty
((
pL
,
0
),
dtype
=
np
.
complex
)
else
:
_scaleFactorOldPivot
=
copy
(
self
.
scaleFactor
)
self
.
scaleFactor
=
self
.
scaleFactorPivot
self
.
_temporaryPivot
=
1
for
i
in
idx
:
musi
=
self
.
mus
[
self
.
S
*
(
i
+
self
.
SMarginal
)
:
self
.
S
*
(
i
+
self
.
SMarginal
+
1
)]
vbMng
(
self
,
"MAIN"
,
"Building marginal model no. {} at {}."
.
format
(
i
+
self
.
SMarginal
+
1
,
self
.
musMarginal
[
i
+
self
.
SMarginal
]),
5
)
vbMng
(
self
,
"INIT"
,
"Starting computation of snapshots."
,
10
)
self
.
samplingEngine
.
resetHistory
()
self
.
samplingEngine
.
iterSample
(
musi
)
vbMng
(
self
,
"DEL"
,
"Done computing snapshots."
,
10
)
self
.
verbosity
-=
5
self
.
samplingEngine
.
verbosity
-=
5
if
self
.
rationalMode
[
-
6
:]
==
"OUTPUT"
:
vbMng
(
self
,
"INIT"
,
"Extracting system output from state."
,
35
)
self
.
samplingEngine
.
samples_output
=
self
.
HFEngine
.
applyC
(
self
.
samplingEngine
.
samples
,
self
.
mus
)
_POD
,
self
.
_POD
=
self
.
POD
,
1
vbMng
(
self
,
"DEL"
,
"Done extracting system output."
,
35
)
self
.
_setupRational
(
self
.
_setupDenominator
())
if
self
.
rationalMode
[
-
6
:]
==
"OUTPUT"
:
self
.
_POD
=
_POD
pMati
=
np
.
empty
((
1
,
0
),
dtype
=
np
.
complex
)
else
:
pMati
=
self
.
samplingEngine
.
projectionMatrix
self
.
verbosity
+=
5
self
.
samplingEngine
.
verbosity
+=
5
if
self
.
storeAllSamples
:
self
.
storeSamples
(
i
+
self
.
SMarginal
)
if
self
.
rationalMode
[
-
6
:]
!=
"OUTPUT"
and
not
self
.
matchState
:
if
self
.
POD
==
1
and
not
(
hasattr
(
self
.
HFEngine
.
C
,
"is_mu_independent"
)
and
self
.
HFEngine
.
C
.
is_mu_independent
in
self
.
_output_lvl
):
raise
RROMPyException
((
"Cannot apply mu-dependent C "
"to orthonormalized samples."
))
vbMng
(
self
,
"INIT"
,
"Extracting system output from state."
,
35
)
pMatiEff
=
None
for
j
,
mu
in
enumerate
(
musi
):
pMij
=
np
.
expand_dims
(
self
.
HFEngine
.
applyC
(
pMati
[:,
j
],
mu
),
-
1
)
if
pMatiEff
is
None
:
pMatiEff
=
np
.
array
(
pMij
)
else
:
pMatiEff
=
np
.
append
(
pMatiEff
,
pMij
,
axis
=
1
)
pMati
=
pMatiEff
vbMng
(
self
,
"DEL"
,
"Done extracting system output."
,
35
)
if
i
==
0
:
for
dest
in
emptyCores
:
req
+=
[
isend
(
len
(
pMati
),
dest
=
dest
,
tag
=
dest
)]
if
not
_collapsed
:
if
pMat
is
None
:
pMat
=
copy
(
pMati
)
else
:
pMat
=
np
.
hstack
((
pMat
,
pMati
))
Ps
+=
[
copy
(
self
.
trainedModel
.
data
.
P
)]
Qs
+=
[
copy
(
self
.
trainedModel
.
data
.
Q
)]
if
_collapsed
and
self
.
rationalMode
[
-
6
:]
!=
"OUTPUT"
:
Ps
[
-
1
]
.
postmultiplyTensorize
(
pMati
.
T
)
# collapse by hand
del
self
.
trainedModel
.
data
.
Q
,
self
.
trainedModel
.
data
.
P
self
.
N
=
N0
del
self
.
_temporaryPivot
self
.
scaleFactor
=
_scaleFactorOldPivot
if
_collapsed
:
pMat
=
pMati
[:,
:
0
]
for
r
in
req
:
r
.
wait
()
pMat
,
Ps
,
Qs
,
_
,
_
=
gatherPivotedApproximant
(
pMat
,
Ps
,
Qs
,
self
.
mus
.
data
,
sizes
,
self
.
polybasis
,
False
)
if
_collapsed
:
self
.
_setupTrainedModel
(
1.
)
Psupp
=
[
0
]
*
len
(
musMarginal
)
else
:
self
.
_setupTrainedModel
(
pMat
,
len
(
self
.
trainedModel
.
data
.
projMat
)
>
0
)
Psupp
=
(
self
.
SMarginal
+
np
.
arange
(
0
,
len
(
musMarginal
)))
*
self
.
S
self
.
_SMarginal
+=
len
(
musMarginal
)
self
.
trainedModel
.
data
.
Qs
+=
Qs
self
.
trainedModel
.
data
.
Ps
+=
Ps
self
.
trainedModel
.
data
.
Psupp
+=
list
(
Psupp
)
self
.
_preliminaryMarginalFinalization
()
self
.
_finalizeMarginalization
()
vbMng
(
self
,
"DEL"
,
"Done adding marginal sample points."
,
5
)
return
0
def
setupApprox
(
self
)
->
int
:
"""Compute rational interpolant."""
if
self
.
checkComputedApprox
():
return
-
1
RROMPyAssert
(
self
.
_mode
,
message
=
"Cannot setup approximant."
)
vbMng
(
self
,
"INIT"
,
"Setting up {}."
.
format
(
self
.
name
()),
5
)
self
.
computeScaleFactor
()
self
.
resetSamples
()
self
.
samplingEngine
.
scaleFactor
=
self
.
scaleFactorDer
self
.
_mus
=
emptyParameterList
()
self
.
_musMarginal
=
emptyParameterList
()
self
.
musPivot
=
self
.
samplerPivot
.
generatePoints
(
self
.
S
)
while
len
(
self
.
musPivot
)
>
self
.
S
:
self
.
musPivot
.
pop
()
musMarginal
=
self
.
samplerMarginal
.
generatePoints
(
self
.
SMarginal
)
while
len
(
musMarginal
)
>
self
.
SMarginal
:
musMarginal
.
pop
()
self
.
_setupTrainedModel
(
np
.
zeros
((
0
,
0
)),
forceNew
=
True
,
collapsed
=
self
.
rationalMode
[
-
6
:]
==
"OUTPUT"
)
self
.
trainedModel
.
data
.
Qs
,
self
.
trainedModel
.
data
.
Ps
=
[],
[]
self
.
trainedModel
.
data
.
Psupp
=
[]
self
.
_SMarginal
=
0
val
=
self
.
addMarginalSamplePoints
(
musMarginal
)
vbMng
(
self
,
"DEL"
,
"Done setting up approximant."
,
5
)
return
val
class
RationalInterpolantPivotedNoMatch
(
RationalInterpolantPivotedBase
,
GenericPivotedApproximantNoMatch
):
"""
ROM pivoted rational interpolant (without matching) computation for
parametric problems.
Args:
HFEngine: HF problem solver.
mu0(optional): Default parameter. Defaults to 0.
directionPivot(optional): Pivot components. Defaults to [0].
approxParameters(optional): Dictionary containing values for main
parameters of approximant. Recognized keys are:
- 'POD': kind of snapshots orthogonalization; allowed values
include 0, 1/2, and 1; defaults to 1, i.e. POD;
- 'scaleFactorDer': scaling factors for derivative computation;
defaults to 'AUTO';
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator;
- 'rationalMode': mode of rational approximation; allowed values
include 'MINIMAL[_STATE]', 'MINIMAL_OUTPUT',
'STANDARD[_STATE]', and 'STANDARD_OUTPUT'; defaults to
'MINIMAL';
- 'polybasis': type of polynomial basis for pivot
interpolation; defaults to 'MONOMIAL';
- 'M': degree of rational interpolant numerator; defaults to
'AUTO', i.e. maximum allowed;
- 'N': degree of rational interpolant denominator; defaults to
'AUTO', i.e. maximum allowed;
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant; defaults to 1;
- 'functionalSolve': strategy for minimization of denominator
functional; allowed values include 'NORM', 'DOMINANT',
'BARYCENTRIC[_NORM]', and 'BARYCENTRIC_AVERAGE' (check pdf in
main folder for explanation); defaults to 'NORM';
- 'interpTol': tolerance for pivot interpolation; defaults to
None;
- 'forceQReal': force denominator to have real coefficients;
defaults to False;
- 'polyTruncateTol': tolerance for truncation of rational terms;
defaults to 0;
- 'QTol': tolerance for robust rational denominator management;
defaults to 0.
Defaults to empty dict.
verbosity(optional): Verbosity level. Defaults to 10.
Attributes:
HFEngine: HF problem solver.
mu0: Default parameter.
directionPivot: Pivot components.
mus: Array of snapshot parameters.
musPivot: Array of pivot snapshot parameters.
musMarginal: Array of marginal snapshot parameters.
approxParameters: Dictionary containing values for main parameters of
approximant. Recognized keys are in parameterList.
parameterListSoft: Recognized keys of soft approximant parameters:
- 'POD': kind of snapshots orthogonalization;
- 'scaleFactorDer': scaling factors for derivative computation;
- 'rationalMode': mode of rational approximation;
- 'polybasis': type of polynomial basis for pivot
interpolation;
- 'M': degree of rational interpolant numerator;
- 'N': degree of rational interpolant denominator;
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant;
- 'functionalSolve': strategy for minimization of denominator
functional;
- 'interpTol': tolerance for pivot interpolation;
- 'forceQReal': force denominator to have real coefficients;
- 'polyTruncateTol': tolerance for truncation of rational terms;
- 'QTol': tolerance for robust rational denominator management.
parameterListCritical: Recognized keys of critical approximant
parameters:
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator.
verbosity: Verbosity level.
POD: Kind of snapshots orthogonalization.
scaleFactorDer: Scaling factors for derivative computation.
S: Total number of pivot samples current approximant relies upon.
samplerPivot: Pivot sample point generator.
SMarginal: Total number of marginal samples current approximant relies
upon.
samplerMarginal: Marginal sample point generator.
rationalMode: Mode of rational approximation.
polybasis: Type of polynomial basis for pivot interpolation.
M: Numerator degree of approximant.
N: Denominator degree of approximant.
radialDirectionalWeightsMarginal: Radial basis weights for marginal
interpolant.
functionalSolve: Strategy for minimization of denominator functional.
interpTol: Tolerance for pivot interpolation.
forceQReal: Force denominator to have real coefficients.
polyTruncateTol: Tolerance for truncation of rational terms.
QTol: Tolerance for robust rational denominator management.
muBounds: list of bounds for pivot parameter values.
muBoundsMarginal: list of bounds for marginal parameter values.
samplingEngine: Sampling engine.
uHF: High fidelity solution(s) with parameter(s) lastSolvedHF as
sampleList.
lastSolvedHF: Parameter(s) corresponding to last computed high fidelity
solution(s) as parameterList.
uApproxReduced: Reduced approximate solution(s) with parameter(s)
lastSolvedApprox as sampleList.
lastSolvedApproxReduced: Parameter(s) corresponding to last computed
reduced approximate solution(s) as parameterList.
uApprox: Approximate solution(s) with parameter(s) lastSolvedApprox as
sampleList.
lastSolvedApprox: Parameter(s) corresponding to last computed
approximate solution(s) as parameterList.
Q: Numpy 1D vector containing complex coefficients of approximant
denominator.
P: Numpy 2D vector whose columns are FE dofs of coefficients of
approximant numerator.
"""
class
RationalInterpolantPivotedPolyMatch
(
RationalInterpolantPivotedBase
,
GenericPivotedApproximantPolyMatch
):
"""
ROM pivoted rational interpolant (with polynomial matching) computation for
parametric problems.
Args:
HFEngine: HF problem solver.
mu0(optional): Default parameter. Defaults to 0.
directionPivot(optional): Pivot components. Defaults to [0].
approxParameters(optional): Dictionary containing values for main
parameters of approximant. Recognized keys are:
- 'POD': kind of snapshots orthogonalization; allowed values
include 0, 1/2, and 1; defaults to 1, i.e. POD;
- 'scaleFactorDer': scaling factors for derivative computation;
defaults to 'AUTO';
- 'matchState': whether to match the system state rather than the
system output; defaults to False;
- 'matchingWeight': weight for matching; defaults to 1;
- 'matchingKind': kind of matching; allowed values include 'ROTATE'
and 'PROJECT'; defaults to 'ROTATE';
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator;
- 'rationalMode': mode of rational approximation; allowed values
include 'MINIMAL[_STATE]', 'MINIMAL_OUTPUT',
'STANDARD[_STATE]', and 'STANDARD_OUTPUT'; defaults to
'MINIMAL';
- 'polybasis': type of polynomial basis for pivot
interpolation; defaults to 'MONOMIAL';
- 'polybasisMarginal': type of polynomial basis for marginal
interpolation; allowed values include 'MONOMIAL_*',
'CHEBYSHEV_*', 'LEGENDRE_*', 'NEARESTNEIGHBOR', and
'PIECEWISE_LINEAR_*'; defaults to 'MONOMIAL';
- 'paramsMarginal': dictionary of parameters for marginal
interpolation; include:
. 'MMarginal': degree of marginal interpolant; defaults to
'AUTO', i.e. maximum allowed; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'nNeighborsMarginal': number of marginal nearest neighbors;
defaults to 1; only for 'NEARESTNEIGHBOR';
. 'polydegreetypeMarginal': type of polynomial degree for
marginal; defaults to 'TOTAL'; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'polyTruncateTolMarginal': tolerance for truncation of
marginal interpolator; defaults to 0;
. 'interpTolMarginal': tolerance for marginal interpolation;
defaults to None; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'radialDirectionalWeightsMarginalAdapt': bounds for adaptive
rescaling of marginal radial basis weights; only for
radial basis.
- 'M': degree of rational interpolant numerator; defaults to
'AUTO', i.e. maximum allowed;
- 'N': degree of rational interpolant denominator; defaults to
'AUTO', i.e. maximum allowed;
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant; defaults to 1;
- 'functionalSolve': strategy for minimization of denominator
functional; allowed values include 'NORM', 'DOMINANT',
'BARYCENTRIC[_NORM]', and 'BARYCENTRIC_AVERAGE' (check pdf in
main folder for explanation); defaults to 'NORM';
- 'interpTol': tolerance for pivot interpolation; defaults to None;
- 'forceQReal': force denominator to have real coefficients;
defaults to False;
- 'polyTruncateTol': tolerance for truncation of rational terms;
defaults to 0;
- 'QTol': tolerance for robust rational denominator management;
defaults to 0.
Defaults to empty dict.
verbosity(optional): Verbosity level. Defaults to 10.
Attributes:
HFEngine: HF problem solver.
mu0: Default parameter.
directionPivot: Pivot components.
mus: Array of snapshot parameters.
musPivot: Array of pivot snapshot parameters.
musMarginal: Array of marginal snapshot parameters.
approxParameters: Dictionary containing values for main parameters of
approximant. Recognized keys are in parameterList.
parameterListSoft: Recognized keys of soft approximant parameters:
- 'POD': kind of snapshots orthogonalization;
- 'scaleFactorDer': scaling factors for derivative computation;
- 'matchState': whether to match the system state rather than the
system output;
- 'matchingWeight': weight for matching;
- 'matchingKind': kind of matching;
- 'rationalMode': mode of rational approximation;
- 'polybasis': type of polynomial basis for pivot interpolation;
- 'polybasisMarginal': type of polynomial basis for marginal
interpolation;
- 'paramsMarginal': dictionary of parameters for marginal
interpolation; include:
. 'MMarginal': degree of marginal interpolant;
. 'nNeighborsMarginal': number of marginal nearest neighbors;
. 'polydegreetypeMarginal': type of polynomial degree for
marginal;
. 'polyTruncateTolMarginal': tolerance for truncation of
marginal interpolator;
. 'interpTolMarginal': tolerance for marginal interpolation;
. 'radialDirectionalWeightsMarginalAdapt': bounds for adaptive
rescaling of marginal radial basis weights.
- 'M': degree of rational interpolant numerator;
- 'N': degree of rational interpolant denominator;
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant;
- 'functionalSolve': strategy for minimization of denominator
functional;
- 'interpTol': tolerance for pivot interpolation;
- 'forceQReal': force denominator to have real coefficients;
- 'polyTruncateTol': tolerance for truncation of rational terms;
- 'QTol': tolerance for robust rational denominator management.
parameterListCritical: Recognized keys of critical approximant
parameters:
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator.
verbosity: Verbosity level.
POD: Kind of snapshots orthogonalization.
scaleFactorDer: Scaling factors for derivative computation.
matchState: Whether to match the system state rather than the system
output.
matchingWeight: Weight for matching.
matchingKind: Kind of matching.
S: Total number of pivot samples current approximant relies upon.
samplerPivot: Pivot sample point generator.
SMarginal: Total number of marginal samples current approximant relies
upon.
samplerMarginal: Marginal sample point generator.
rationalMode: Mode of rational approximation.
polybasis: Type of polynomial basis for pivot interpolation.
polybasisMarginal: Type of polynomial basis for marginal interpolation.
paramsMarginal: Dictionary of parameters for marginal interpolation.
M: Numerator degree of approximant.
N: Denominator degree of approximant.
radialDirectionalWeightsMarginal: Radial basis weights for marginal
interpolant.
functionalSolve: Strategy for minimization of denominator functional.
interpTol: Tolerance for pivot interpolation.
forceQReal: Force denominator to have real coefficients.
polyTruncateTol: Tolerance for truncation of rational terms.
QTol: Tolerance for robust rational denominator management.
muBounds: list of bounds for pivot parameter values.
muBoundsMarginal: list of bounds for marginal parameter values.
samplingEngine: Sampling engine.
uHF: High fidelity solution(s) with parameter(s) lastSolvedHF as
sampleList.
lastSolvedHF: Parameter(s) corresponding to last computed high fidelity
solution(s) as parameterList.
uApproxReduced: Reduced approximate solution(s) with parameter(s)
lastSolvedApprox as sampleList.
lastSolvedApproxReduced: Parameter(s) corresponding to last computed
reduced approximate solution(s) as parameterList.
uApprox: Approximate solution(s) with parameter(s) lastSolvedApprox as
sampleList.
lastSolvedApprox: Parameter(s) corresponding to last computed
approximate solution(s) as parameterList.
Q: Numpy 1D vector containing complex coefficients of approximant
denominator.
P: Numpy 2D vector whose columns are FE dofs of coefficients of
approximant numerator.
"""
def
setupApprox
(
self
,
*
args
,
**
kwargs
)
->
int
:
if
self
.
checkComputedApprox
():
return
-
1
if
self
.
rationalMode
[
-
6
:]
==
"OUTPUT"
:
self
.
matchState
=
False
self
.
purgeparamsMarginal
()
setupOK
=
super
()
.
setupApprox
(
*
args
,
**
kwargs
)
if
self
.
matchState
:
self
.
_postApplyC
()
return
setupOK
class
RationalInterpolantPivotedPoleMatch
(
RationalInterpolantPivotedBase
,
GenericPivotedApproximantPoleMatch
):
"""
ROM pivoted rational interpolant (with pole matching) computation for
parametric problems.
Args:
HFEngine: HF problem solver.
mu0(optional): Default parameter. Defaults to 0.
directionPivot(optional): Pivot components. Defaults to [0].
approxParameters(optional): Dictionary containing values for main
parameters of approximant. Recognized keys are:
- 'POD': kind of snapshots orthogonalization; allowed values
include 0, 1/2, and 1; defaults to 1, i.e. POD;
- 'scaleFactorDer': scaling factors for derivative computation;
defaults to 'AUTO';
- 'matchState': whether to match the system state rather than the
system output; defaults to False;
- 'matchingWeight': weight for pole matching optimization; defaults
to 1;
- 'matchingShared': required ratio of marginal points to share
resonance; defaults to 1.;
- 'badPoleCorrection': strategy for correction of bad poles;
available values include 'ERASE', 'RATIONAL', and 'POLYNOMIAL';
defaults to 'ERASE';
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator;
- 'rationalMode': mode of rational approximation; allowed values
include 'MINIMAL[_STATE]', 'MINIMAL_OUTPUT',
'STANDARD[_STATE]', and 'STANDARD_OUTPUT'; defaults to
'MINIMAL';
- 'polybasis': type of polynomial basis for pivot
interpolation; defaults to 'MONOMIAL';
- 'polybasisMarginal': type of polynomial basis for marginal
interpolation; allowed values include 'MONOMIAL_*',
'CHEBYSHEV_*', 'LEGENDRE_*', 'NEARESTNEIGHBOR', and
'PIECEWISE_LINEAR_*'; defaults to 'MONOMIAL';
- 'paramsMarginal': dictionary of parameters for marginal
interpolation; include:
. 'MMarginal': degree of marginal interpolant; defaults to
'AUTO', i.e. maximum allowed; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'nNeighborsMarginal': number of marginal nearest neighbors;
defaults to 1; only for 'NEARESTNEIGHBOR';
. 'polydegreetypeMarginal': type of polynomial degree for
marginal; defaults to 'TOTAL'; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'polyTruncateTolMarginal': tolerance for truncation of
marginal interpolator; defaults to 0;
. 'interpTolMarginal': tolerance for marginal interpolation;
defaults to None; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'radialDirectionalWeightsMarginalAdapt': bounds for adaptive
rescaling of marginal radial basis weights; only for
radial basis.
- 'M': degree of rational interpolant numerator; defaults to
'AUTO', i.e. maximum allowed;
- 'N': degree of rational interpolant denominator; defaults to
'AUTO', i.e. maximum allowed;
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant; defaults to 1;
- 'functionalSolve': strategy for minimization of denominator
functional; allowed values include 'NORM', 'DOMINANT',
'BARYCENTRIC[_NORM]', and 'BARYCENTRIC_AVERAGE' (check pdf in
main folder for explanation); defaults to 'NORM';
- 'interpTol': tolerance for pivot interpolation; defaults to None;
- 'forceQReal': force denominator to have real coefficients;
defaults to False;
- 'polyTruncateTol': tolerance for truncation of rational terms;
defaults to 0;
- 'QTol': tolerance for robust rational denominator management;
defaults to 0.
Defaults to empty dict.
verbosity(optional): Verbosity level. Defaults to 10.
Attributes:
HFEngine: HF problem solver.
mu0: Default parameter.
directionPivot: Pivot components.
mus: Array of snapshot parameters.
musPivot: Array of pivot snapshot parameters.
musMarginal: Array of marginal snapshot parameters.
approxParameters: Dictionary containing values for main parameters of
approximant. Recognized keys are in parameterList.
parameterListSoft: Recognized keys of soft approximant parameters:
- 'POD': kind of snapshots orthogonalization;
- 'scaleFactorDer': scaling factors for derivative computation;
- 'matchState': whether to match the system state rather than the
system output;
- 'matchingWeight': weight for pole matching optimization;
- 'matchingShared': required ratio of marginal points to share
resonance;
- 'badPoleCorrection': strategy for correction of bad poles;
- 'rationalMode': mode of rational approximation;
- 'polybasis': type of polynomial basis for pivot
interpolation;
- 'polybasisMarginal': type of polynomial basis for marginal
interpolation;
- 'paramsMarginal': dictionary of parameters for marginal
interpolation; include:
. 'MMarginal': degree of marginal interpolant;
. 'nNeighborsMarginal': number of marginal nearest neighbors;
. 'polydegreetypeMarginal': type of polynomial degree for
marginal;
. 'polyTruncateTolMarginal': tolerance for truncation of
marginal interpolator;
. 'interpTolMarginal': tolerance for marginal interpolation;
. 'radialDirectionalWeightsMarginalAdapt': bounds for adaptive
rescaling of marginal radial basis weights.
- 'M': degree of rational interpolant numerator;
- 'N': degree of rational interpolant denominator;
- 'functionalSolve': strategy for minimization of denominator
functional;
- 'interpTol': tolerance for pivot interpolation;
- 'forceQReal': force denominator to have real coefficients;
- 'polyTruncateTol': tolerance for truncation of rational terms;
- 'QTol': tolerance for robust rational denominator management.
parameterListCritical: Recognized keys of critical approximant
parameters:
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator.
verbosity: Verbosity level.
POD: Kind of snapshots orthogonalization.
scaleFactorDer: Scaling factors for derivative computation.
matchState: Whether to match the system state rather than the system
output.
matchingWeight: Weight for pole matching optimization.
matchingShared: Required ratio of marginal points to share resonance.
badPoleCorrection: Strategy for correction of bad poles.
S: Total number of pivot samples current approximant relies upon.
samplerPivot: Pivot sample point generator.
SMarginal: Total number of marginal samples current approximant relies
upon.
samplerMarginal: Marginal sample point generator.
rationalMode: Mode of rational approximation.
polybasis: Type of polynomial basis for pivot interpolation.
polybasisMarginal: Type of polynomial basis for marginal interpolation.
paramsMarginal: Dictionary of parameters for marginal interpolation.
M: Numerator degree of approximant.
N: Denominator degree of approximant.
radialDirectionalWeightsMarginal: Radial basis weights for marginal
interpolant.
functionalSolve: Strategy for minimization of denominator functional.
interpTol: Tolerance for pivot interpolation.
forceQReal: Force denominator to have real coefficients.
polyTruncateTol: Tolerance for truncation of rational terms.
QTol: Tolerance for robust rational denominator management.
muBounds: list of bounds for pivot parameter values.
muBoundsMarginal: list of bounds for marginal parameter values.
samplingEngine: Sampling engine.
uHF: High fidelity solution(s) with parameter(s) lastSolvedHF as
sampleList.
lastSolvedHF: Parameter(s) corresponding to last computed high fidelity
solution(s) as parameterList.
uApproxReduced: Reduced approximate solution(s) with parameter(s)
lastSolvedApprox as sampleList.
lastSolvedApproxReduced: Parameter(s) corresponding to last computed
reduced approximate solution(s) as parameterList.
uApprox: Approximate solution(s) with parameter(s) lastSolvedApprox as
sampleList.
lastSolvedApprox: Parameter(s) corresponding to last computed
approximate solution(s) as parameterList.
Q: Numpy 1D vector containing complex coefficients of approximant
denominator.
P: Numpy 2D vector whose columns are FE dofs of coefficients of
approximant numerator.
"""
def
setupApprox
(
self
,
*
args
,
**
kwargs
)
->
int
:
if
self
.
checkComputedApprox
():
return
-
1
self
.
purgeparamsMarginal
()
setupOK
=
super
()
.
setupApprox
(
*
args
,
**
kwargs
)
if
self
.
matchState
:
self
.
_postApplyC
()
return
setupOK
Event Timeline
Log In to Comment