00001 //*****************************************************************// 00002 // Albany 2.0: Copyright 2012 Sandia Corporation // 00003 // This Software is released under the BSD license detailed // 00004 // in the file "license.txt" in the top-level Albany directory // 00005 //*****************************************************************// 00006 #ifndef MOR_REDUCEDOPERATORFACTOR_HPP 00007 #define MOR_REDUCEDOPERATORFACTOR_HPP 00008 00009 class Epetra_MultiVector; 00010 class Epetra_Operator; 00011 class Epetra_CrsMatrix; 00012 00013 #include "Teuchos_RCP.hpp" 00014 00015 namespace MOR { 00016 00017 class ReducedOperatorFactory { 00018 public: 00019 ReducedOperatorFactory(); 00020 00021 virtual bool fullJacobianRequired(bool residualRequested, bool jacobianRequested) const = 0; 00022 00023 virtual const Epetra_MultiVector &leftProjection(const Epetra_MultiVector &fullVector, 00024 Epetra_MultiVector &result) const = 0; 00025 00026 virtual Teuchos::RCP<Epetra_CrsMatrix> reducedJacobianNew() = 0; 00027 virtual const Epetra_CrsMatrix &reducedJacobian(Epetra_CrsMatrix &result) const = 0; 00028 00029 virtual void fullJacobianIs(const Epetra_Operator &op) = 0; 00030 00031 virtual ~ReducedOperatorFactory(); 00032 00033 private: 00034 // Disallow copy and assignment 00035 ReducedOperatorFactory(const ReducedOperatorFactory &); 00036 ReducedOperatorFactory &operator=(const ReducedOperatorFactory &); 00037 }; 00038 00039 inline 00040 ReducedOperatorFactory::ReducedOperatorFactory() { 00041 // Nothing to do 00042 } 00043 00044 inline 00045 ReducedOperatorFactory::~ReducedOperatorFactory() { 00046 // Nothing to do 00047 } 00048 00049 } // namespace MOR 00050 00051 #endif /* MOR_REDUCEDOPERATORFACTOR_HPP */