# # RBniCS 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 RBniCS. If not, see <http://www.gnu.org/licenses/>. # from rbnics.utils.decorators import ReductionMethodFor from rbnics.problems.elliptic_optimal_control.elliptic_optimal_control_problem import EllipticOptimalControlProblem from rbnics.reduction_methods.base import DifferentialProblemReductionMethod, LinearRBReduction from rbnics.reduction_methods.elliptic_optimal_control.elliptic_optimal_control_reduction_method import EllipticOptimalControlReductionMethod EllipticOptimalControlRBReduction_Base = LinearRBReduction( EllipticOptimalControlReductionMethod(DifferentialProblemReductionMethod)) @ReductionMethodFor(EllipticOptimalControlProblem, "ReducedBasis") class EllipticOptimalControlRBReduction(EllipticOptimalControlRBReduction_Base ): def update_basis_matrix(self, snapshot): # Aggregate snapshots components related to state and adjoint for component_to in ("y", "p"): for component_from in ("y", "p"): new_basis_function = self.GS[component_to].apply( snapshot, self.reduced_problem.basis_functions[component_to] [self.reduced_problem.N_bc[component_to]:], component={component_from: component_to}) self.reduced_problem.basis_functions.enrich(
# Copyright (C) 2015-2021 by the RBniCS authors # # This file is part of RBniCS. # # SPDX-License-Identifier: LGPL-3.0-or-later from rbnics.backends import GramSchmidt from rbnics.utils.decorators import ReductionMethodFor from rbnics.problems.stokes.stokes_problem import StokesProblem from rbnics.reduction_methods.base import DifferentialProblemReductionMethod, LinearRBReduction from rbnics.reduction_methods.stokes.stokes_reduction_method import StokesReductionMethod StokesRBReduction_Base = LinearRBReduction(StokesReductionMethod(DifferentialProblemReductionMethod)) @ReductionMethodFor(StokesProblem, "ReducedBasis") class StokesRBReduction(StokesRBReduction_Base): # Initialize data structures required for the offline phase: overridden version because supremizer GS # is different from a standard component def _init_offline(self): # We cannot use the standard initialization provided by RBReduction because # supremizer GS requires a custom initialization. We thus duplicate here part of its code # Call parent of parent (!) to initialize inner product and reduced problem output = StokesRBReduction_Base._init_offline(self) # Declare a new GS for each basis component self.GS = dict() for component in ("u", "p"): inner_product = self.truth_problem.inner_product[component][0]
# Copyright (C) 2015-2019 by the RBniCS authors # # This file is part of RBniCS. # # RBniCS 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. # # RBniCS 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 RBniCS. If not, see <http://www.gnu.org/licenses/>. # from rbnics.problems.elliptic.elliptic_problem import EllipticProblem from rbnics.reduction_methods.base import DifferentialProblemReductionMethod, LinearRBReduction from rbnics.reduction_methods.elliptic.elliptic_reduction_method import EllipticReductionMethod from rbnics.utils.decorators import ReductionMethodFor EllipticRBReduction_Base = LinearRBReduction(EllipticReductionMethod(DifferentialProblemReductionMethod)) # Base class containing the interface of the RB method # for elliptic problems @ReductionMethodFor(EllipticProblem, "ReducedBasis") class EllipticRBReduction(EllipticRBReduction_Base): pass