00001
00002
00003
00004
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
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
00033
00034
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
00048
00049
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
00063
00064
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
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
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
00111 }
00112
00113 template<typename Traits>
00114 void PHAL::SaveNodalField<PHAL::AlbanyTraits::Residual, Traits>::
00115 evaluateFields(typename Traits::EvalData workset)
00116 {
00117
00118 }
00119
00120 template<typename Traits>
00121 void PHAL::SaveNodalField<PHAL::AlbanyTraits::Residual, Traits>::
00122 postEvaluate(typename Traits::PostEvalData workset)
00123 {
00124
00125
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
00131
00132
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