Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include <vector>
00008 #include <string>
00009
00010 #include "Teuchos_TestForException.hpp"
00011 #include "Phalanx_DataLayout.hpp"
00012
00013 namespace PHAL {
00014
00015
00016 template<typename EvalT, typename Traits>
00017 GatherAuxData<EvalT,Traits>::
00018 GatherAuxData(const Teuchos::ParameterList& p,
00019 const Teuchos::RCP<Albany::Layouts>& dl)
00020 {
00021
00022
00023 std::string field_name = p.get<std::string>("Field Name");
00024 auxDataIndex = p.get<int>("Aux Data Vector Index");
00025
00026 PHX::MDField<ScalarT,Cell,Node> f(field_name ,dl->node_scalar);
00027 vector_data = f;
00028 this->addEvaluatedField(vector_data);
00029
00030 char buf[200];
00031 sprintf(buf, "Gather Aux Data %d to %s", (int)auxDataIndex, field_name.c_str());
00032 this->setName(buf + PHX::TypeString<EvalT>::value);
00033 }
00034
00035
00036 template<typename EvalT, typename Traits>
00037 void GatherAuxData<EvalT,Traits>::
00038 postRegistrationSetup(typename Traits::SetupData d,
00039 PHX::FieldManager<Traits>& fm)
00040 {
00041 this->utils.setFieldData(vector_data,fm);
00042 numNodes = vector_data.dimension(1);
00043 }
00044
00045
00046
00047 template<typename EvalT, typename Traits>
00048 void GatherAuxData<EvalT,Traits>::
00049 evaluateFields(typename Traits::EvalData workset)
00050 {
00051 const Epetra_Vector& v = *((*(workset.auxDataPtr))(auxDataIndex));
00052
00053 for (std::size_t cell=0; cell < workset.numCells; ++cell ) {
00054 const Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> >& nodeID = workset.wsElNodeEqID[cell];
00055
00056 for(std::size_t node =0; node < this->numNodes; ++node) {
00057 int offsetIntoVec = nodeID[node][0];
00058 this->vector_data(cell,node) = v[offsetIntoVec];
00059 }
00060 }
00061
00062 }
00063
00064
00065
00066 }