Line data Source code
1 : // rbOOmit: An implementation of the Certified Reduced Basis method. 2 : // Copyright (C) 2009, 2010 David J. Knezevic 3 : 4 : // This file is part of rbOOmit. 5 : 6 : // rbOOmit is free software; you can redistribute it and/or 7 : // modify it under the terms of the GNU Lesser General Public 8 : // License as published by the Free Software Foundation; either 9 : // version 2.1 of the License, or (at your option) any later version. 10 : 11 : // rbOOmit is distributed in the hope that it will be useful, 12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 : // Lesser General Public License for more details. 15 : 16 : // You should have received a copy of the GNU Lesser General Public 17 : // License along with this library; if not, write to the Free Software 18 : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 : 20 : #ifndef LIBMESH_RB_EIM_THETA_H 21 : #define LIBMESH_RB_EIM_THETA_H 22 : 23 : // rbOOmit includes 24 : #include "libmesh/rb_theta.h" 25 : 26 : // C++ includes 27 : 28 : namespace libMesh 29 : { 30 : 31 : class RBParameters; 32 : class RBEIMEvaluation; 33 : 34 : /** 35 : * This class provides functionality required to define an RBTheta 36 : * object that arises from an "Empirical Interpolation Method" (EIM) 37 : * approximation. 38 : * 39 : * \author David J. Knezevic 40 : * \date 2011 41 : */ 42 : class RBEIMTheta : public RBTheta 43 : { 44 : public: 45 : 46 : /** 47 : * Constructor. 48 : */ 49 : RBEIMTheta(RBEIMEvaluation & rb_eim_eval_in, unsigned int index_in); 50 : 51 : /** 52 : * Special functions. 53 : * This class contains a reference, so it can't be default 54 : * copy/move-assigned. 55 : */ 56 : RBEIMTheta (RBEIMTheta &&) = default; 57 : RBEIMTheta (const RBEIMTheta &) = default; 58 : RBEIMTheta & operator= (const RBEIMTheta &) = delete; 59 : RBEIMTheta & operator= (RBEIMTheta &&) = delete; 60 0 : ~RBEIMTheta() = default; 61 : 62 : /** 63 : * Evaluate this RBEIMTheta object at the parameter \p mu. 64 : * This entails solving the RB EIM approximation and picking 65 : * out the appropriate coefficient. 66 : */ 67 : virtual Number evaluate(const RBParameters & mu) override; 68 : 69 : /** 70 : * Evaluate this RBEIMTheta at all parameters in \p mus. 71 : */ 72 : virtual std::vector<Number> evaluate_vec(const std::vector<RBParameters> & mus) override; 73 : 74 : /** 75 : * The RBEIMEvaluation object that this RBEIMTheta is based on. 76 : */ 77 : RBEIMEvaluation & rb_eim_eval; 78 : 79 : /** 80 : * The index of the RB_solution vector that we pick out 81 : * from rb_eim_eval to provide the value of the evaluation. 82 : */ 83 : unsigned int index; 84 : }; 85 : 86 : } 87 : 88 : #endif // LIBMESH_RB_EIM_THETA_H