Nektar++
Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
Nektar::Utilities::InputFld Class Reference

#include <InputFld.h>

Inheritance diagram for Nektar::Utilities::InputFld:
Inheritance graph
[legend]
Collaboration diagram for Nektar::Utilities::InputFld:
Collaboration graph
[legend]

Public Member Functions

 InputFld (FieldSharedPtr f)
 Set up InputFld object. More...
 
virtual ~InputFld ()
 
virtual void Process (po::variables_map &vm)
 
- Public Member Functions inherited from Nektar::Utilities::InputModule
 InputModule (FieldSharedPtr p_m)
 
void AddFile (string fileType, string fileName)
 
 InputModule (MeshSharedPtr p_m)
 
void OpenStream ()
 Open a file for input. More...
 
- Public Member Functions inherited from Nektar::Utilities::Module
 Module (FieldSharedPtr p_f)
 
void RegisterConfig (string key, string value)
 Register a configuration option with a module. More...
 
void PrintConfig ()
 Print out all configuration options for a module. More...
 
void SetDefaults ()
 Sets default configuration options for those which have not been set. More...
 
bool GetRequireEquiSpaced (void)
 
void SetRequireEquiSpaced (bool pVal)
 
void EvaluateTriFieldAtEquiSpacedPts (LocalRegions::ExpansionSharedPtr &exp, const Array< OneD, const NekDouble > &infield, Array< OneD, NekDouble > &outfield)
 
 Module (MeshSharedPtr p_m)
 
virtual void Process ()=0
 
void RegisterConfig (string key, string value)
 
void PrintConfig ()
 
void SetDefaults ()
 
MeshSharedPtr GetMesh ()
 
virtual void ProcessVertices ()
 Extract element vertices. More...
 

Static Public Member Functions

static ModuleSharedPtr create (FieldSharedPtr f)
 Creates an instance of this class. More...
 

Static Public Attributes

static ModuleKey m_className []
 ModuleKey for class. More...
 

Additional Inherited Members

- Protected Member Functions inherited from Nektar::Utilities::InputModule
void PrintSummary ()
 Print summary of elements. More...
 
void PrintSummary ()
 Print summary of elements. More...
 
- Protected Member Functions inherited from Nektar::Utilities::Module
 Module ()
 
virtual void ProcessEdges (bool ReprocessEdges=true)
 Extract element edges. More...
 
virtual void ProcessFaces (bool ReprocessFaces=true)
 Extract element faces. More...
 
virtual void ProcessElements ()
 Generate element IDs. More...
 
virtual void ProcessComposites ()
 Generate composites. More...
 
void ReorderPrisms (PerMap &perFaces)
 Reorder node IDs so that prisms and tetrahedra are aligned correctly. More...
 
void PrismLines (int prism, PerMap &perFaces, set< int > &prismsDone, vector< ElementSharedPtr > &line)
 
- Protected Attributes inherited from Nektar::Utilities::InputModule
set< string > m_allowedFiles
 
std::ifstream m_mshFile
 Input stream. More...
 
- Protected Attributes inherited from Nektar::Utilities::Module
FieldSharedPtr m_f
 Field object. More...
 
map< string, ConfigOptionm_config
 List of configuration values. More...
 
bool m_requireEquiSpaced
 
MeshSharedPtr m_mesh
 Mesh object. More...
 

Detailed Description

Converter for Fld files.

Definition at line 49 of file InputFld.h.

Constructor & Destructor Documentation

Nektar::Utilities::InputFld::InputFld ( FieldSharedPtr  f)

Set up InputFld object.

Definition at line 71 of file InputFld.cpp.

References Nektar::Utilities::InputModule::m_allowedFiles.

71  : InputModule(f)
72 {
73  m_allowedFiles.insert("fld");
74  m_allowedFiles.insert("chk");
75  m_allowedFiles.insert("rst");
76  m_allowedFiles.insert("bse");
77 }
Nektar::Utilities::InputFld::~InputFld ( )
virtual

Definition at line 83 of file InputFld.cpp.

84 {
85 }

Member Function Documentation

static ModuleSharedPtr Nektar::Utilities::InputFld::create ( FieldSharedPtr  f)
inlinestatic

Creates an instance of this class.

Definition at line 57 of file InputFld.h.

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

58  {
60  }
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
void Nektar::Utilities::InputFld::Process ( po::variables_map &  vm)
virtual

Implements Nektar::Utilities::Module.

Definition at line 91 of file InputFld.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::LibUtilities::NekFactory< tKey, tBase, >::CreateInstance(), Nektar::LibUtilities::GetCommFactory(), and Nektar::Utilities::Module::m_f.

92 {
93  if(m_f->m_verbose)
94  {
95  cout << "Processing input fld file" << endl;
96  }
97 
98  int i,j;
99  string fldending;
100  //Determine appropriate field input
101  if(m_f->m_inputfiles.count("fld") != 0)
102  {
103  fldending = "fld";
104  }
105  else if(m_f->m_inputfiles.count("chk") != 0)
106  {
107  fldending = "chk";
108  }
109  else if (m_f->m_inputfiles.count("rst") != 0)
110  {
111  fldending = "rst";
112  }
113  else if (m_f->m_inputfiles.count("bse") != 0)
114  {
115  fldending = "bse";
116  }
117  else
118  {
119  ASSERTL0(false,"no input file found");
120  }
121 
122  if(!m_f->m_fld)
123  {
124  if(m_f->m_session)
125  {
127  ::AllocateSharedPtr(m_f->m_session->GetComm());
128  }
129  else // serial communicator
130  {
134  }
135  }
136 
137 
138  if(m_f->m_graph) // all for restricted expansion defintion when loading field
139  {
140  // currently load all field (possibly could read data from expansion list
141  // but it is re-arranged in expansion)
142 
143  const SpatialDomains::ExpansionMap &expansions = m_f->m_graph->GetExpansions();
144 
145  // if Range has been speficied it is possible to have a
146  // partition which is empty so ccheck this and return if
147  // no elements present.
148  if(!expansions.size())
149  {
150  return;
151  }
152 
153  m_f->m_exp.resize(1);
154 
155  Array<OneD,int> ElementGIDs(expansions.size());
156  SpatialDomains::ExpansionMap::const_iterator expIt;
157 
158  i = 0;
159  for (expIt = expansions.begin(); expIt != expansions.end(); ++expIt)
160  {
161  ElementGIDs[i++] = expIt->second->m_geomShPtr->GetGlobalID();
162  }
163 
164  m_f->m_fielddef.clear();
165  m_f->m_data.clear();
166 
167  m_f->m_fld->Import(m_f->m_inputfiles[fldending][0],
168  m_f->m_fielddef,
169  m_f->m_data,
170  m_f->m_fieldMetaDataMap,
171  ElementGIDs);
172  }
173  else // load all data.
174  {
175  m_f->m_fld->Import(m_f->m_inputfiles[fldending][0],
176  m_f->m_fielddef,
177  m_f->m_data,
178  m_f->m_fieldMetaDataMap);
179  }
180 
181 
182  // if m_exp defined presume we want to load all field into expansions
183  if(m_f->m_exp.size())
184  {
185  int nfields,nstrips;
186 
187  m_f->m_session->LoadParameter("Strip_Z",nstrips,1);
188 
189  if(vm.count("useSessionVariables"))
190  {
191  nfields = m_f->m_session->GetVariables().size();
192  }
193  else
194  {
195  nfields = m_f->m_fielddef[0]->m_fields.size();
196  }
197 
198 
199  m_f->m_exp.resize(nfields*nstrips);
200 
201  vector<string> vars = m_f->m_session->GetVariables();
202 
203  // declare other fields;
204  for (int s = 0; s < nstrips; ++s) //homogeneous strip varient
205  {
206  for (i = 0; i < nfields; ++i)
207  {
208  if(i < vars.size())
209  {
210  m_f->m_exp[s*nfields+i] = m_f->AppendExpList(
211  m_f->m_fielddef[0]->m_numHomogeneousDir,
212  vars[i]);
213  }
214  else
215  {
216  if(vars.size())
217  {
218  m_f->m_exp[s*nfields+i] =
219  m_f->AppendExpList(
220  m_f->m_fielddef[0]->m_numHomogeneousDir,
221  vars[0]);
222  }
223  else
224  {
225  m_f->m_exp[s*nfields+i] =
226  m_f->AppendExpList(
227  m_f->m_fielddef[0]->m_numHomogeneousDir);
228  }
229  }
230  }
231  }
232 
233  for(int s = 0; s < nstrips; ++s) //homogeneous strip varient
234  {
235  for (j = 0; j < nfields; ++j)
236  {
237  for (i = 0; i < m_f->m_data.size()/nstrips; ++i)
238  {
239  m_f->m_exp[s*nfields+j]->
240  ExtractDataToCoeffs(m_f->m_fielddef[i*nstrips+s],
241  m_f->m_data[i*nstrips+s],
242  m_f->m_fielddef[i*nstrips+s]
243  ->m_fields[j],
244  m_f->m_exp[s*nfields+j]->UpdateCoeffs());
245  }
246  m_f->m_exp[s*nfields+j]->BwdTrans(m_f->m_exp[s*nfields+j]->GetCoeffs(),
247  m_f->m_exp[s*nfields+j]->UpdatePhys());
248  }
249  }
250 
251  // if range is defined reset up output field in case or
252  // reducing fld definition
253  if(vm.count("range"))
254  {
255  std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef
256  = m_f->m_exp[0]->GetFieldDefinitions();
257  std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
258 
259  for (j = 0; j < nfields; ++j)
260  {
261  for (i = 0; i < FieldDef.size(); ++i)
262  {
263  FieldDef[i]->m_fields.push_back(m_f->m_fielddef[0]->m_fields[j]);
264  m_f->m_exp[j]->AppendFieldData(FieldDef[i], FieldData[i]);
265  }
266  }
267  m_f->m_fielddef = FieldDef;
268  m_f->m_data = FieldData;
269  }
270  }
271 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:161
tBaseSharedPtr CreateInstance(tKey idKey BOOST_PP_COMMA_IF(MAX_PARAM) BOOST_PP_ENUM_BINARY_PARAMS(MAX_PARAM, tParam, x))
Create an instance of the class referred to by idKey.
Definition: NekFactory.hpp:162
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
CommFactory & GetCommFactory()
Definition: Comm.cpp:64
FieldSharedPtr m_f
Field object.
boost::shared_ptr< Comm > CommSharedPtr
Pointer to a Communicator object.
Definition: Comm.h:53
std::map< int, ExpansionShPtr > ExpansionMap
Definition: MeshGraph.h:171

Member Data Documentation

ModuleKey Nektar::Utilities::InputFld::m_className
static
Initial value:

ModuleKey for class.

Definition at line 62 of file InputFld.h.