Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
Nektar::FieldUtils::ProcessAddCompositeID Class Reference

This processing module adds a fld with the composite ID. More...

#include <ProcessAddCompositeID.h>

Inheritance diagram for Nektar::FieldUtils::ProcessAddCompositeID:
Inheritance graph
[legend]
Collaboration diagram for Nektar::FieldUtils::ProcessAddCompositeID:
Collaboration graph
[legend]

Public Member Functions

 ProcessAddCompositeID (FieldSharedPtr f)
 
virtual ~ProcessAddCompositeID ()
 
virtual void Process (po::variables_map &vm)
 Write mesh to output file. More...
 
virtual std::string GetModuleName ()
 
- Public Member Functions inherited from Nektar::FieldUtils::ProcessModule
 ProcessModule ()
 
 ProcessModule (FieldSharedPtr p_f)
 
- Public Member Functions inherited from Nektar::FieldUtils::Module
FIELD_UTILS_EXPORT Module (FieldSharedPtr p_f)
 
FIELD_UTILS_EXPORT void RegisterConfig (string key, string value)
 Register a configuration option with a module. More...
 
FIELD_UTILS_EXPORT void PrintConfig ()
 Print out all configuration options for a module. More...
 
FIELD_UTILS_EXPORT void SetDefaults ()
 Sets default configuration options for those which have not been set. More...
 
FIELD_UTILS_EXPORT bool GetRequireEquiSpaced (void)
 
FIELD_UTILS_EXPORT void SetRequireEquiSpaced (bool pVal)
 
FIELD_UTILS_EXPORT void EvaluateTriFieldAtEquiSpacedPts (LocalRegions::ExpansionSharedPtr &exp, const Array< OneD, const NekDouble > &infield, Array< OneD, NekDouble > &outfield)
 

Static Public Member Functions

static boost::shared_ptr< Modulecreate (FieldSharedPtr f)
 Creates an instance of this class. More...
 

Static Public Attributes

static ModuleKey className
 

Additional Inherited Members

- Protected Member Functions inherited from Nektar::FieldUtils::Module
 Module ()
 
- Protected Attributes inherited from Nektar::FieldUtils::Module
FieldSharedPtr m_f
 Field object. More...
 
map< string, ConfigOptionm_config
 List of configuration values. More...
 
bool m_requireEquiSpaced
 

Detailed Description

This processing module adds a fld with the composite ID.

Definition at line 50 of file ProcessAddCompositeID.h.

Constructor & Destructor Documentation

Nektar::FieldUtils::ProcessAddCompositeID::ProcessAddCompositeID ( FieldSharedPtr  f)

Definition at line 58 of file ProcessAddCompositeID.cpp.

Nektar::FieldUtils::ProcessAddCompositeID::~ProcessAddCompositeID ( )
virtual

Definition at line 63 of file ProcessAddCompositeID.cpp.

64 {
65 }

Member Function Documentation

static boost::shared_ptr<Module> Nektar::FieldUtils::ProcessAddCompositeID::create ( FieldSharedPtr  f)
inlinestatic

Creates an instance of this class.

Definition at line 54 of file ProcessAddCompositeID.h.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr().

55  {
57  }
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
virtual std::string Nektar::FieldUtils::ProcessAddCompositeID::GetModuleName ( )
inlinevirtual

Implements Nektar::FieldUtils::Module.

Definition at line 66 of file ProcessAddCompositeID.h.

67  {
68  return "ProcessAddCompositeID";
69  }
void Nektar::FieldUtils::ProcessAddCompositeID::Process ( po::variables_map &  vm)
virtual

Write mesh to output file.

Implements Nektar::FieldUtils::Module.

Definition at line 67 of file ProcessAddCompositeID.cpp.

References Vmath::Fill(), Nektar::StdRegions::find(), Nektar::FieldUtils::Module::m_f, npts, and WARNINGL0.

68 {
69  if (m_f->m_verbose)
70  {
71  if (m_f->m_comm->GetRank() == 0)
72  {
73  cout << "ProcessAddCompositeID: Adding composite ID as a new field"
74  << endl;
75  }
76  }
77 
78  int nfields = 0;
79  int NumHomogeneousDir = 0;
81 
82  if (m_f->m_fielddef.size())
83  {
84  nfields = m_f->m_fielddef[0]->m_fields.size();
85  NumHomogeneousDir = m_f->m_fielddef[0]->m_numHomogeneousDir;
86 
87  m_f->m_exp.resize(nfields + 1);
88  exp = m_f->AppendExpList(NumHomogeneousDir, "Composite ID");
89 
90  m_f->m_exp[nfields] = exp;
91  }
92  else
93  {
94  exp = m_f->m_exp[0];
95  }
96 
97  // Get Composites
99  m_f->m_graph->GetComposites();
100 
102  NekDouble compid=0;
103 
104  // loop over elements
105  for (int n = 0; n < exp->GetNumElmts(); ++n)
106  {
107  LocalRegions::ExpansionSharedPtr elmt = exp->GetExp(n);
108 
109  // loop over composite list and search for geomtry pointer in list
110  for (it = CompositeMap.begin(); it != CompositeMap.end(); ++it)
111  {
112  if (find(it->second->begin(), it->second->end(), elmt->GetGeom()) !=
113  it->second->end())
114  {
115  compid = it->first;
116  break;
117  }
118  }
119 
120  WARNINGL0(it != CompositeMap.end(),
121  "Failed to find composite ID for element: " +
122  boost::lexical_cast<string>(n));
123 
124  // Fill element with the value of the index
125  int npts = elmt->GetTotPoints();
126  Array<OneD, NekDouble> tmp;
127  Vmath::Fill(npts, compid,
128  tmp = exp->UpdatePhys() + exp->GetPhys_Offset(n), 1);
129  }
130 
131  // forward transform
132  exp->FwdTrans_IterPerExp(exp->GetPhys(), exp->UpdateCoeffs());
133 
134  std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef =
135  m_f->m_exp[0]->GetFieldDefinitions();
136  std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
137 
138  // copy in previous fields if they exist.
139  for (int i = 0; i < nfields; ++i)
140  {
141  for (int j = 0; j < FieldDef.size(); ++j)
142  {
143  FieldDef[j]->m_fields.push_back(m_f->m_fielddef[0]->m_fields[i]);
144  m_f->m_exp[i]->AppendFieldData(FieldDef[j], FieldData[j]);
145  }
146  }
147 
148  // append composite id field
149  for (int j = 0; j < FieldDef.size(); ++j)
150  {
151  FieldDef[j]->m_fields.push_back("compositeID");
152  m_f->m_exp[nfields]->AppendFieldData(FieldDef[j], FieldData[j]);
153  }
154 
155  m_f->m_fielddef = FieldDef;
156  m_f->m_data = FieldData;
157 }
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
Definition: Vmath.cpp:46
std::map< int, Composite >::const_iterator CompositeMapConstIter
Definition: MeshGraph.h:117
#define WARNINGL0(condition, msg)
Definition: ErrorUtil.hpp:204
boost::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
static std::string npts
Definition: InputFld.cpp:43
double NekDouble
boost::shared_ptr< Expansion > ExpansionSharedPtr
Definition: Expansion.h:68
std::map< int, Composite > CompositeMap
Definition: MeshGraph.h:115
InputIterator find(InputIterator first, InputIterator last, InputIterator startingpoint, const EqualityComparable &value)
Definition: StdRegions.hpp:316
FieldSharedPtr m_f
Field object.

Member Data Documentation

ModuleKey Nektar::FieldUtils::ProcessAddCompositeID::className
static
Initial value:
=
ModuleKey(eProcessModule, "addcompositeid"),
"Add a field which contains the composite ID of each element")

Definition at line 58 of file ProcessAddCompositeID.h.