43 #ifndef USER_APP_NOX_OBSERVER_WRITE_TO_EXODUS_HPP
44 #define USER_APP_NOX_OBSERVER_WRITE_TO_EXODUS_HPP
46 #include "NOX_Abstract_PrePostOperator.H"
49 #include "Panzer_config.hpp"
57 #include "Thyra_ProductVectorBase.hpp"
58 #include "Thyra_DefaultProductVector.hpp"
59 #include "Thyra_SpmdVectorBase.hpp"
60 #include "Thyra_ProductVectorSpaceBase.hpp"
63 #include "Teuchos_dyn_cast.hpp"
65 #include "Piro_NOXSolver.hpp"
85 std::vector<std::string> eBlocks;
121 ae_inargs.
alpha = 0.0;
122 ae_inargs.
beta = 1.0;
146 const Thyra::SpmdVectorBase<double> & spmdSrc =
151 spmdSrc.getLocalData(Teuchos::ptrFromRef(srcData));
152 os <<
"Local Size = " << srcData.
size() << std::endl;
153 for (
int i=0; i < srcData.size(); ++i) {
154 os <<
" " << srcData[i] << std::endl;
164 using Teuchos::rcpFromPtr;
165 using Teuchos::rcp_dynamic_cast;
167 const RCP<Thyra::ProductVectorBase<double> > prodDest =
168 Thyra::castOrCreateNonconstProductVectorBase(rcpFromPtr(dest));
170 const Thyra::SpmdVectorBase<double> & spmdSrc =
175 spmdSrc.getLocalData(Teuchos::ptrFromRef(srcData));
178 const int numBlocks = prodDest->productSpace()->numBlocks();
179 for (
int b = 0; b < numBlocks; ++b) {
180 const RCP<Thyra::VectorBase<double> > destBlk = prodDest->getNonconstVectorBlock(b);
183 const RCP<Thyra::SpmdVectorBase<double> > spmdBlk =
184 rcp_dynamic_cast<Thyra::SpmdVectorBase<double> >(destBlk,
true);
186 spmdBlk->getNonconstLocalData(Teuchos::ptrFromRef(destData));
189 for (
int i=0; i < destData.size(); ++i) {
190 destData[i] = srcData[i+
offset];
192 offset += destData.
size();
Teuchos::RCP< panzer_stk_classic::STK_Interface > m_mesh
bool evaluate_transient_terms
void runPreSolve(const NOX::Solver::Generic &solver)
void runPreIterate(const NOX::Solver::Generic &solver)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
T_To & dyn_cast(T_From &from)
Teuchos::RCP< panzer::LinearObjContainer > ghostedContainer_
Teuchos::RCP< panzer::LinearObjContainer > container_
Teuchos::RCP< const panzer::LinearObjFactory< panzer::Traits > > m_lof
Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > m_dof_manager
void copyFlatThyraIntoBlockedThyra(const Thyra::VectorBase< double > &src, const Teuchos::Ptr< Thyra::VectorBase< double > > &dest) const
Copy a flat vector into a product vector.
void getElementBlockNames(std::vector< std::string > &names) const
Teuchos::RCP< panzer::ResponseLibrary< panzer::Traits > > m_response_library
void writeToScreen(std::ostream &os, const Thyra::VectorBase< double > &src)
void runPostSolve(const NOX::Solver::Generic &solver)
void runPostIterate(const NOX::Solver::Generic &solver)
Teuchos::RCP< panzer_stk_classic::STK_Interface > mesh
void writeToExodus(const std::string &filename)
#define TEUCHOS_ASSERT(assertion_test)
NOXObserver_WriteToExodus(const Teuchos::RCP< panzer_stk_classic::STK_Interface > &mesh, const Teuchos::RCP< const panzer::UniqueGlobalIndexerBase > &dof_manager, const Teuchos::RCP< const panzer::LinearObjFactory< panzer::Traits > > &lof, const Teuchos::RCP< panzer::ResponseLibrary< panzer::Traits > > &response_library)
virtual Teuchos::RCP< ::Thyra::VectorBase< double > > getThyraRCPVector()