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->TreatAsRankZero())
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)
143  {
144  if (m_f->m_data.size() == 0)
145  {
146  // currently load all field (possibly could read data from
147  // expansion list but it is re-arranged in expansion)
148 
149  const SpatialDomains::ExpansionMap &expansions =
150  m_f->m_graph->GetExpansions();
151 
152  // if Range has been speficied it is possible to have a
153  // partition which is empty so check this and return if
154  // no elements present.
155 
156  if(!expansions.size())
157  {
158  return;
159  }
160 
161  m_f->m_exp.resize(1);
162 
163  Array<OneD,int> ElementGIDs(expansions.size());
164  SpatialDomains::ExpansionMap::const_iterator expIt;
165 
166  i = 0;
167  for (expIt = expansions.begin(); expIt != expansions.end(); ++expIt)
168  {
169  ElementGIDs[i++] = expIt->second->m_geomShPtr->GetGlobalID();
170  }
171 
172  m_f->m_fielddef.clear();
173  m_f->m_data.clear();
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  ElementGIDs);
180  }
181  }
182  else // load all data.
183  {
184  m_f->m_fld->Import(m_f->m_inputfiles[fldending][0],
185  m_f->m_fielddef,
186  m_f->m_data,
187  m_f->m_fieldMetaDataMap);
188  }
189 
190 
191  // if m_exp defined presume we want to load all field into expansions
192  if(m_f->m_exp.size())
193  {
194  int nfields,nstrips;
195 
196  m_f->m_session->LoadParameter("Strip_Z",nstrips,1);
197 
198  if(vm.count("useSessionVariables"))
199  {
200  nfields = m_f->m_session->GetVariables().size();
201  }
202  else
203  {
204  nfields = m_f->m_fielddef[0]->m_fields.size();
205  }
206 
207 
208  m_f->m_exp.resize(nfields*nstrips);
209 
210  vector<string> vars = m_f->m_session->GetVariables();
211 
212 
213  // declare other fields;
214  for (int s = 0; s < nstrips; ++s) //homogeneous strip varient
215  {
216  for (i = 0; i < nfields; ++i)
217  {
218  if(i < vars.size())
219  {
220  // check to see if field already defined
221  if(!m_f->m_exp[s*nfields+i])
222  {
223  m_f->m_exp[s*nfields+i] = m_f->AppendExpList(
224  m_f->m_fielddef[0]->m_numHomogeneousDir,
225  vars[i]);
226  }
227  }
228  else
229  {
230  if(vars.size())
231  {
232  m_f->m_exp[s*nfields+i] =
233  m_f->AppendExpList(
234  m_f->m_fielddef[0]->m_numHomogeneousDir,
235  vars[0]);
236  }
237  else
238  {
239  m_f->m_exp[s*nfields+i] =
240  m_f->AppendExpList(
241  m_f->m_fielddef[0]->m_numHomogeneousDir);
242  }
243  }
244  }
245  }
246 
247  // Extract data to coeffs and bwd transform
248  for(int s = 0; s < nstrips; ++s) //homogeneous strip varient
249  {
250  for (j = 0; j < nfields; ++j)
251  {
252  for (i = 0; i < m_f->m_data.size()/nstrips; ++i)
253  {
254  m_f->m_exp[s*nfields+j]->
255  ExtractDataToCoeffs(m_f->m_fielddef[i*nstrips+s],
256  m_f->m_data[i*nstrips+s],
257  m_f->m_fielddef[i*nstrips+s]
258  ->m_fields[j],
259  m_f->m_exp[s*nfields+j]->UpdateCoeffs());
260  }
261  m_f->m_exp[s*nfields+j]->BwdTrans(m_f->m_exp[s*nfields+j]->GetCoeffs(),
262  m_f->m_exp[s*nfields+j]->UpdatePhys());
263  }
264  }
265 
266  // reset output field in case Import loaded elements that are not
267  // in the expansion (because of range option of partitioning)
268  std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef
269  = m_f->m_exp[0]->GetFieldDefinitions();
270  std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
271 
272  for (j = 0; j < nfields; ++j)
273  {
274  for (i = 0; i < FieldDef.size(); ++i)
275  {
276  FieldDef[i]->m_fields.push_back(m_f->m_fielddef[0]->m_fields[j]);
277  m_f->m_exp[j]->AppendFieldData(FieldDef[i], FieldData[i]);
278  }
279  }
280  m_f->m_fielddef = FieldDef;
281  m_f->m_data = FieldData;
282  }
283 }
#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.