• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

PHAL_SaveNodalField_Def.hpp

Go to the documentation of this file.
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 #include <fstream>
00008 #include "Teuchos_TestForException.hpp"
00009 #include "Adapt_NodalDataBlock.hpp"
00010 
00011 template<typename EvalT, typename Traits>
00012 PHAL::SaveNodalFieldBase<EvalT, Traits>::
00013 SaveNodalFieldBase(Teuchos::ParameterList& p,
00014       const Teuchos::RCP<Albany::Layouts>& dl)
00015 {
00016 
00017   Teuchos::RCP<Teuchos::ParameterList> paramsFromProblem =
00018     p.get< Teuchos::RCP<Teuchos::ParameterList> >("Parameters From Problem");
00019 
00021   this->pStateMgr = p.get< Albany::StateManager* >("State Manager Ptr");
00022 
00023   // Get the field names to store the data in (if set)
00024   if(paramsFromProblem != Teuchos::null){
00025     xName = paramsFromProblem->get<std::string>("x Field Name", "");
00026     xdotName = paramsFromProblem->get<std::string>("xdot Field Name", "");
00027     xdotdotName = paramsFromProblem->get<std::string>("xdotdot Field Name", "");
00028   }
00029 
00030   if(this->xName.length() > 0){
00031 
00032 //    savexdot_operation = Teuchos::rcp(new PHX::Tag<ScalarT>(xdotName, dl->dummy));
00033 //    savexdot_operation = Teuchos::rcp(new PHX::Tag<ScalarT>(xdotName, dl->node_node_vector));
00034 //    this->addEvaluatedField(*savexdot_operation);
00035     this->pStateMgr->registerStateVariable(this->xName,
00036         dl->node_node_vector,
00037         dl->dummy,
00038         "all",
00039         "scalar",
00040         0.0,
00041         false,
00042         true);
00043 
00044   }
00045   if(this->xdotName.length() > 0){
00046 
00047 //    savexdot_operation = Teuchos::rcp(new PHX::Tag<ScalarT>(xdotName, dl->dummy));
00048 //    savexdot_operation = Teuchos::rcp(new PHX::Tag<ScalarT>(xdotName, dl->node_node_vector));
00049 //    this->addEvaluatedField(*savexdot_operation);
00050     this->pStateMgr->registerStateVariable(this->xdotName,
00051         dl->node_node_vector,
00052         dl->dummy,
00053         "all",
00054         "scalar",
00055         0.0,
00056         false,
00057         true);
00058 
00059   }
00060   if(this->xdotdotName.length() > 0){
00061 
00062 //    savexdotdot_operation = Teuchos::rcp(new PHX::Tag<ScalarT>(xdotdotName, dl->dummy));
00063 //    savexdotdot_operation = Teuchos::rcp(new PHX::Tag<ScalarT>(xdotdotName, dl->node_node_vector));
00064 //    this->addEvaluatedField(*savexdotdot_operation);
00065    this->pStateMgr->registerStateVariable(this->xdotdotName,
00066         dl->node_node_vector,
00067         dl->dummy,
00068         "all",
00069         "scalar",
00070         0.0,
00071         false,
00072         true);
00073 
00074 
00075   }
00076 
00077 
00078   // Create field tag
00079   nodal_field_tag =
00080     Teuchos::rcp(new PHX::Tag<ScalarT>(className, dl->dummy));
00081 
00082   this->addEvaluatedField(*nodal_field_tag);
00083 
00084 }
00085 
00086 // **********************************************************************
00087 template<typename EvalT, typename Traits>
00088 void PHAL::SaveNodalFieldBase<EvalT, Traits>::
00089 postRegistrationSetup(typename Traits::SetupData d,
00090                       PHX::FieldManager<Traits>& fm)
00091 {
00092 }
00093 
00094 // **********************************************************************
00095 // Specialization: Residual
00096 // **********************************************************************
00097 // **********************************************************************
00098 template<typename Traits>
00099 PHAL::
00100 SaveNodalField<PHAL::AlbanyTraits::Residual, Traits>::
00101 SaveNodalField(Teuchos::ParameterList& p, const Teuchos::RCP<Albany::Layouts>& dl) :
00102   SaveNodalFieldBase<PHAL::AlbanyTraits::Residual, Traits>(p, dl)
00103 {
00104 }
00105 
00106 template<typename Traits>
00107 void PHAL::SaveNodalField<PHAL::AlbanyTraits::Residual, Traits>::
00108 preEvaluate(typename Traits::PreEvalData workset)
00109 {
00110    // do nawthing ...
00111 }
00112 
00113 template<typename Traits>
00114 void PHAL::SaveNodalField<PHAL::AlbanyTraits::Residual, Traits>::
00115 evaluateFields(typename Traits::EvalData workset)
00116 {
00117    // do nawthing ...
00118 }
00119 
00120 template<typename Traits>
00121 void PHAL::SaveNodalField<PHAL::AlbanyTraits::Residual, Traits>::
00122 postEvaluate(typename Traits::PostEvalData workset)
00123 {
00124 
00125   // Here is what we might like to save ...
00126   Teuchos::RCP<const Epetra_Vector> x = workset.x;
00127   Teuchos::RCP<const Epetra_Vector> xdot = workset.xdot;
00128   Teuchos::RCP<const Epetra_Vector> xdotdot = workset.xdotdot;
00129 
00130   // Note: we are in postEvaluate so all PEs call this
00131 
00132   // Get the node data block container
00133   Teuchos::RCP<Adapt::NodalDataBlock> node_data = this->pStateMgr->getStateInfoStruct()->getNodalDataBlock();
00134 
00135   if(this->xName.length() > 0)
00136 
00137     node_data->saveEpetraNodalDataVector(this->xName, x, 0, 3);
00138 
00139   if(this->xdotName.length() > 0)
00140 
00141     node_data->saveEpetraNodalDataVector(this->xdotName, xdot, 0, 3);
00142 
00143   if(this->xdotdotName.length() > 0)
00144 
00145     node_data->saveEpetraNodalDataVector(this->xdotdotName, xdotdot, 0, 3);
00146 
00147 }
00148 

Generated on Wed Mar 26 2014 18:36:42 for Albany: a Trilinos-based PDE code by  doxygen 1.7.1