#
# This file is part of RBniCS.
#
# SPDX-License-Identifier: LGPL-3.0-or-later

from math import sqrt
from numpy import isclose
from rbnics.problems.elliptic_optimal_control.elliptic_optimal_control_reduced_problem import (
    EllipticOptimalControlReducedProblem)
from rbnics.backends import product, sum, transpose
from rbnics.utils.decorators import ReducedProblemFor
from rbnics.problems.elliptic_optimal_control.elliptic_optimal_control_problem import EllipticOptimalControlProblem
from rbnics.problems.base import LinearRBReducedProblem, ParametrizedReducedDifferentialProblem
from rbnics.reduction_methods.elliptic_optimal_control import EllipticOptimalControlRBReduction

EllipticOptimalControlRBReducedProblem_Base = LinearRBReducedProblem(
    EllipticOptimalControlReducedProblem(ParametrizedReducedDifferentialProblem))


@ReducedProblemFor(EllipticOptimalControlProblem, EllipticOptimalControlRBReduction)
class EllipticOptimalControlRBReducedProblem(EllipticOptimalControlRBReducedProblem_Base):

    def __init__(self, truth_problem, **kwargs):
        # Call to parent
        EllipticOptimalControlRBReducedProblem_Base.__init__(self, truth_problem, **kwargs)

        # Riesz terms names
        self.riesz_terms = ["a", "a*", "c", "c*", "m", "n", "g", "f"]
        self.error_estimation_terms = [
            ("g", "g"), ("f", "f"),
            ("m", "g"), ("a*", "g"), ("a", "f"), ("c", "f"),
            ("m", "a*"), ("n", "c*"), ("a", "c"), ("m", "m"), ("a*", "a*"),
Example #2
0
# Copyright (C) 2015-2020 by the RBniCS authors
#
# This file is part of RBniCS.
#
# SPDX-License-Identifier: LGPL-3.0-or-later

from math import sqrt
from numpy import isclose
from rbnics.backends import product, sum, transpose
from rbnics.problems.base import LinearRBReducedProblem, ParametrizedReducedDifferentialProblem
from rbnics.problems.elliptic.elliptic_problem import EllipticProblem
from rbnics.problems.elliptic.elliptic_reduced_problem import EllipticReducedProblem
from rbnics.reduction_methods.elliptic import EllipticRBReduction
from rbnics.utils.decorators import ReducedProblemFor

EllipticRBReducedProblem_Base = LinearRBReducedProblem(
    EllipticReducedProblem(ParametrizedReducedDifferentialProblem))


# Base class containing the interface of a projection based ROM
# for elliptic problems.
# The following implementation will be retained if no output is provided in the "s" term
@ReducedProblemFor(EllipticProblem, EllipticRBReduction)
class EllipticRBReducedProblem(EllipticRBReducedProblem_Base):

    # Default initialization of members.
    def __init__(self, truth_problem, **kwargs):
        # Call to parent
        EllipticRBReducedProblem_Base.__init__(self, truth_problem, **kwargs)

        # Skip useless Riesz products
        self.riesz_terms = ["f", "a"]
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with RBniCS. If not, see <http://www.gnu.org/licenses/>.
#

from math import sqrt
from numpy import isclose
from rbnics.problems.stokes.stokes_reduced_problem import StokesReducedProblem
from rbnics.backends import product, sum, transpose
from rbnics.utils.decorators import ReducedProblemFor
from rbnics.problems.stokes.stokes_problem import StokesProblem
from rbnics.problems.base import LinearRBReducedProblem, ParametrizedReducedDifferentialProblem
from rbnics.reduction_methods.stokes import StokesRBReduction

StokesRBReducedProblem_Base = LinearRBReducedProblem(
    StokesReducedProblem(ParametrizedReducedDifferentialProblem))


# Base class containing the interface of a projection based ROM
# for elliptic coercive problems.
@ReducedProblemFor(StokesProblem, StokesRBReduction)
class StokesRBReducedProblem(StokesRBReducedProblem_Base):

    # Default initialization of members.
    def __init__(self, truth_problem, **kwargs):
        # Call to parent
        StokesRBReducedProblem_Base.__init__(self, truth_problem, **kwargs)

        # Skip useless Riesz products
        self.riesz_terms = ["a", "b", "bt", "f", "g"]
        self.error_estimation_terms = [("f", "f"), ("g", "g"), ("a", "f"),