www.cemf.ir
fieldSelector.hpp
Go to the documentation of this file.
1 
2 #ifndef __fieldSelector_hpp__
3 #define __fieldSelector_hpp__
4 
5 #include "pStructSelector.hpp"
6 #include "pointFields.hpp"
7 #include "Time.hpp"
8 
9 namespace pFlow
10 {
11 
12 template<typename T>
13 inline
14 Vector<T> selectedFieldVals(const pStructSelector& selector, const word& name)
15 {
16  using FieldType = pointField_D<T>;
17 
18  if(selector.selectedPoints().empty() )
19  {
20  return Vector<T>("selected-"+name);
21  }
22 
23  if(!selector.pStruct().time().lookupObjectName(name))
24  {
26  "Field "<< name << " does not exist in time repository"<<endl;
27  fatalExit;
28  }
29 
30  if(
31  selector.pStruct().time().lookupObjectTypeName(name) !=
32  FieldType::TYPENAME())
33  {
35  "Type of field "<< name << " in time repository does not match with"<<
36  FieldType::TYPENAME()<<endl;
37  fatalExit;
38  }
39 
40  const FieldType& field = selector.pStruct().time().lookupObject<FieldType>(name);
41 
42  auto fieldH = field.hostView();
43  const auto& selected = selector.selectedPoints();
44  Vector<T> selectedField(
45  "selected-"+name,
46  selected.size(),
47  selected.size(),
48  RESERVE());
49 
50  for(uint32 i=0; i<selected.size(); i++)
51  {
52  selectedField[i] = fieldH[selected[i]];
53  }
54 
55  return selectedField;
56 }
57 
58 } // pFlow
59 
60 #endif //__fieldSelector_hpp__
pFlow::pStructSelector::selectedPoints
virtual const uint32Vector & selectedPoints() const =0
fatalExit
#define fatalExit
Fatal exit.
Definition: error.hpp:98
pFlow::pointStructure::time
Time & time() override
Definition: pointStructure.hpp:128
pFlow::repository::lookupObject
T & lookupObject(const word &name)
return a ref to the underlaying data in the object
Definition: repositoryTemplates.cpp:40
pFlow::uint32
unsigned int uint32
Definition: builtinTypes.hpp:56
pFlow::repository::lookupObjectName
bool lookupObjectName(const word &nm) const
Definition: repository.cpp:157
pFlow::word
std::string word
Definition: builtinTypes.hpp:64
pointFields.hpp
pFlow::repository::lookupObjectTypeName
word lookupObjectTypeName(const word &nm) const
Definition: repository.cpp:163
pFlow::endl
iOstream & endl(iOstream &os)
Add newline and flush stream.
Definition: iOstream.hpp:341
pFlow
Definition: demGeometry.hpp:27
pStructSelector.hpp
RESERVE
Definition: Vector.hpp:40
pFlow::pointField
Definition: pointField.hpp:33
fatalErrorInFunction
#define fatalErrorInFunction
Report a fatal error and function name and exit the application.
Definition: error.hpp:77
pFlow::pStructSelector::pStruct
const pointStructure & pStruct() const
Definition: pStructSelector.cpp:45
Time.hpp
pFlow::Vector::empty
bool empty() const
If vector is empty.
Definition: Vector.hpp:277
pFlow::pStructSelector
Definition: pStructSelector.hpp:36
pFlow::Vector
Definition: Vector.hpp:48
pFlow::selectedFieldVals
Vector< T > selectedFieldVals(const pStructSelector &selector, const word &name)
Definition: fieldSelector.hpp:14