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 00007 #ifndef QCAD_COUPLEDPSOBSERVER_HPP 00008 #define QCAD_COUPLEDPSOBSERVER_HPP 00009 00010 #include "Epetra_Vector.h" 00011 #include "NOX_Epetra_Observer.H" 00012 #include "Piro_ProviderBase.hpp" 00013 #include "Teuchos_RCP.hpp" 00014 #include "Teuchos_ParameterList.hpp" 00015 #include "QCAD_CoupledPoissonSchrodinger.hpp" 00016 00017 namespace QCAD { 00018 00019 00021 class CoupledPS_NOXObserver : public NOX::Epetra::Observer 00022 { 00023 public: 00024 CoupledPS_NOXObserver (const Teuchos::RCP<CoupledPoissonSchrodinger> &psModel); 00025 ~CoupledPS_NOXObserver () { }; 00026 00028 void observeSolution( const Epetra_Vector& solution); 00029 00031 void observeSolution( const Epetra_Vector& solution, double time_or_param_val); 00032 00033 private: 00034 Teuchos::RCP<CoupledPoissonSchrodinger> psModel_; 00035 }; 00036 00037 00038 00039 00041 class CoupledPS_NOXObserverFactory { 00042 public: 00043 explicit CoupledPS_NOXObserverFactory(const Teuchos::RCP<CoupledPoissonSchrodinger> &psModel); 00044 Teuchos::RCP<NOX::Epetra::Observer> createInstance(); 00045 00046 private: 00047 Teuchos::RCP<CoupledPoissonSchrodinger> psModel_; 00048 }; 00049 00050 00051 00052 00054 class CoupledPS_NOXObserverConstructor : public Piro::ProviderBase<NOX::Epetra::Observer> { 00055 public: 00056 explicit CoupledPS_NOXObserverConstructor(const Teuchos::RCP<CoupledPoissonSchrodinger> &psModel) : 00057 factory_(psModel), 00058 instance_(Teuchos::null) 00059 {} 00060 00061 virtual Teuchos::RCP<NOX::Epetra::Observer> getInstance( 00062 const Teuchos::RCP<Teuchos::ParameterList> ¶ms); 00063 00064 private: 00065 CoupledPS_NOXObserverFactory factory_; 00066 Teuchos::RCP<NOX::Epetra::Observer> instance_; 00067 }; 00068 00069 00070 00071 } // namespace QCAD 00072 00073 #endif 00074