Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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)
 
virtual std::string GetModuleName ()
 
- 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 (std::string key, std::string value)
 
void PrintConfig ()
 
void SetDefaults ()
 
MeshSharedPtr GetMesh ()
 
virtual void ProcessVertices ()
 Extract element vertices. More...
 
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...
 
virtual void ClearElementLinks ()
 

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 ()
 
void ReorderPrisms (PerMap &perFaces)
 Reorder node IDs so that prisms and tetrahedra are aligned correctly. More...
 
void PrismLines (int prism, PerMap &perFaces, std::set< int > &prismsDone, std::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...
 
std::map< std::string,
ConfigOption
m_config
 List of configuration values. 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.
virtual std::string Nektar::Utilities::InputFld::GetModuleName ( )
inlinevirtual

Implements Nektar::Utilities::Module.

Definition at line 64 of file InputFld.h.

65  {
66  return "InputFld";
67  }
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 
94  if(m_f->m_verbose)
95  {
96  if(m_f->m_comm->GetRank() == 0)
97  {
98  cout << "Processing input fld file" << endl;
99  }
100  }
101 
102  int i,j;
103  string fldending;
104  //Determine appropriate field input
105  if(m_f->m_inputfiles.count("fld") != 0)
106  {
107  fldending = "fld";
108  }
109  else if(m_f->m_inputfiles.count("chk") != 0)
110  {
111  fldending = "chk";
112  }
113  else if (m_f->m_inputfiles.count("rst") != 0)
114  {
115  fldending = "rst";
116  }
117  else if (m_f->m_inputfiles.count("bse") != 0)
118  {
119  fldending = "bse";
120  }
121  else
122  {
123  ASSERTL0(false,"no input file found");
124  }
125 
126  if(!m_f->m_fld)
127  {
128  if(m_f->m_session)
129  {
131  ::AllocateSharedPtr(m_f->m_session->GetComm());
132  }
133  else // serial communicator
134  {
138  }
139  }
140 
141 
142  if(m_f->m_graph) // all for restricted expansion defintion when loading field
143  {
144  // currently load all field (possibly could read data from expansion list
145  // but it is re-arranged in expansion)
146 
147  const SpatialDomains::ExpansionMap &expansions = m_f->m_graph->GetExpansions();
148 
149  // if Range has been speficied it is possible to have a
150  // partition which is empty so check this and return if
151  // no elements present.
152 
153  if(!expansions.size())
154  {
155  return;
156  }
157 
158  m_f->m_exp.resize(1);
159 
160  Array<OneD,int> ElementGIDs(expansions.size());
161  SpatialDomains::ExpansionMap::const_iterator expIt;
162 
163  i = 0;
164  for (expIt = expansions.begin(); expIt != expansions.end(); ++expIt)
165  {
166  ElementGIDs[i++] = expIt->second->m_geomShPtr->GetGlobalID();
167  }
168 
169  m_f->m_fielddef.clear();
170  m_f->m_data.clear();
171 
172  m_f->m_fld->Import(m_f->m_inputfiles[fldending][0],
173  m_f->m_fielddef,
174  m_f->m_data,
175  m_f->m_fieldMetaDataMap,
176  ElementGIDs);
177  }
178  else // load all data.
179  {
180  m_f->m_fld->Import(m_f->m_inputfiles[fldending][0],
181  m_f->m_fielddef,
182  m_f->m_data,
183  m_f->m_fieldMetaDataMap);
184  }
185 
186 
187  // if m_exp defined presume we want to load all field into expansions
188  if(m_f->m_exp.size())
189  {
190  int nfields,nstrips;
191 
192  m_f->m_session->LoadParameter("Strip_Z",nstrips,1);
193 
194  if(vm.count("useSessionVariables"))
195  {
196  nfields = m_f->m_session->GetVariables().size();
197  }
198  else
199  {
200  nfields = m_f->m_fielddef[0]->m_fields.size();
201  }
202 
203 
204  m_f->m_exp.resize(nfields*nstrips);
205 
206  vector<string> vars = m_f->m_session->GetVariables();
207 
208 
209  // declare other fields;
210  for (int s = 0; s < nstrips; ++s) //homogeneous strip varient
211  {
212  for (i = 0; i < nfields; ++i)
213  {
214  if(i < vars.size())
215  {
216  // check to see if field already defined
217  if(!m_f->m_exp[s*nfields+i])
218  {
219  m_f->m_exp[s*nfields+i] = m_f->AppendExpList(
220  m_f->m_fielddef[0]->m_numHomogeneousDir,
221  vars[i]);
222  }
223  }
224  else
225  {
226  if(vars.size())
227  {
228  m_f->m_exp[s*nfields+i] =
229  m_f->AppendExpList(
230  m_f->m_fielddef[0]->m_numHomogeneousDir,
231  vars[0]);
232  }
233  else
234  {
235  m_f->m_exp[s*nfields+i] =
236  m_f->AppendExpList(
237  m_f->m_fielddef[0]->m_numHomogeneousDir);
238  }
239  }
240  }
241  }
242 
243  // Extract data to coeffs and bwd transform
244  for(int s = 0; s < nstrips; ++s) //homogeneous strip varient
245  {
246  for (j = 0; j < nfields; ++j)
247  {
248  for (i = 0; i < m_f->m_data.size()/nstrips; ++i)
249  {
250  m_f->m_exp[s*nfields+j]->
251  ExtractDataToCoeffs(m_f->m_fielddef[i*nstrips+s],
252  m_f->m_data[i*nstrips+s],
253  m_f->m_fielddef[i*nstrips+s]
254  ->m_fields[j],
255  m_f->m_exp[s*nfields+j]->UpdateCoeffs());
256  }
257  m_f->m_exp[s*nfields+j]->BwdTrans(m_f->m_exp[s*nfields+j]->GetCoeffs(),
258  m_f->m_exp[s*nfields+j]->UpdatePhys());
259  }
260  }
261 
262  // reset output field in case Import loaded elements that are not
263  // in the expansion (because of range option of partitioning)
264  std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef
265  = m_f->m_exp[0]->GetFieldDefinitions();
266  std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
267 
268  for (j = 0; j < nfields; ++j)
269  {
270  for (i = 0; i < FieldDef.size(); ++i)
271  {
272  FieldDef[i]->m_fields.push_back(m_f->m_fielddef[0]->m_fields[j]);
273  m_f->m_exp[j]->AppendFieldData(FieldDef[i], FieldData[i]);
274  }
275  }
276  m_f->m_fielddef = FieldDef;
277  m_f->m_data = FieldData;
278  }
279 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:188
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:174

Member Data Documentation

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

ModuleKey for class.

Definition at line 62 of file InputFld.h.