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 68 of file InputFld.cpp.

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

68  : InputModule(f)
69 {
70  m_allowedFiles.insert("fld");
71  m_allowedFiles.insert("chk");
72  m_allowedFiles.insert("rst");
73 }
Nektar::Utilities::InputFld::~InputFld ( )
virtual

Definition at line 79 of file InputFld.cpp.

80 {
81 }

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 87 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.

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