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_MOROBSERVERFACTORY_HPP 00007 #define MOR_MOROBSERVERFACTORY_HPP 00008 00009 #include "NOX_Epetra_Observer.H" 00010 #include "Rythmos_IntegrationObserverBase.hpp" 00011 00012 #include "Teuchos_RCP.hpp" 00013 #include "Teuchos_ParameterList.hpp" 00014 00015 #include "Epetra_Map.h" 00016 00017 namespace MOR { 00018 00019 class ReducedSpaceFactory; 00020 00021 class ObserverFactory { 00022 public: 00023 ObserverFactory( 00024 const Teuchos::RCP<ReducedSpaceFactory> &spaceFactory, 00025 const Teuchos::RCP<Teuchos::ParameterList> &parentParams); 00026 00027 Teuchos::RCP<NOX::Epetra::Observer> create(const Teuchos::RCP<NOX::Epetra::Observer> &child); 00028 Teuchos::RCP<Rythmos::IntegrationObserverBase<double> > create(const Teuchos::RCP<Rythmos::IntegrationObserverBase<double> > &child); 00029 00030 private: 00031 bool collectSnapshots() const; 00032 bool computeProjectionError() const; 00033 bool useReducedOrderModel() const; 00034 bool observeGeneralizedCoordinates() const; 00035 00036 Teuchos::RCP<Teuchos::ParameterList> getSnapParameters() const; 00037 Teuchos::RCP<Teuchos::ParameterList> getErrorParameters() const; 00038 Teuchos::RCP<Teuchos::ParameterList> getReducedOrderModelParameters() const; 00039 Teuchos::RCP<Teuchos::ParameterList> getGeneralizedCoordinatesParameters() const; 00040 00041 Teuchos::RCP<ReducedSpaceFactory> spaceFactory_; 00042 Teuchos::RCP<Teuchos::ParameterList> params_; 00043 00044 // Disallow copy & assignment 00045 ObserverFactory(const ObserverFactory &); 00046 ObserverFactory &operator=(const ObserverFactory &); 00047 }; 00048 00049 } // namespace MOR 00050 00051 #endif /* MOR_MOROBSERVERFACTORY_HPP */