Nektar++
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Private Member Functions | List of all members
Nektar::FieldUtils::ProcessIsoContour Class Reference

This processing module extracts an isocontour. More...

#include <ProcessIsoContour.h>

Inheritance diagram for Nektar::FieldUtils::ProcessIsoContour:
[legend]

Public Member Functions

 ProcessIsoContour (FieldSharedPtr f)
 
virtual ~ProcessIsoContour ()
 
virtual void Process (po::variables_map &vm)
 Write mesh to output file. More...
 
virtual std::string GetModuleName ()
 
virtual std::string GetModuleDescription ()
 
virtual ModulePriority GetModulePriority ()
 
- Public Member Functions inherited from Nektar::FieldUtils::ProcessModule
 ProcessModule ()
 
 ProcessModule (FieldSharedPtr p_f)
 
- Public Member Functions inherited from Nektar::FieldUtils::Module
FIELD_UTILS_EXPORT Module (FieldSharedPtr p_f)
 
FIELD_UTILS_EXPORT void RegisterConfig (std::string key, std::string value="")
 Register a configuration option with a module. More...
 
FIELD_UTILS_EXPORT void PrintConfig ()
 Print out all configuration options for a module. More...
 
FIELD_UTILS_EXPORT void SetDefaults ()
 Sets default configuration options for those which have not been set. More...
 
FIELD_UTILS_EXPORT void EvaluateTriFieldAtEquiSpacedPts (LocalRegions::ExpansionSharedPtr &exp, const Array< OneD, const NekDouble > &infield, Array< OneD, NekDouble > &outfield)
 

Static Public Member Functions

static std::shared_ptr< Modulecreate (FieldSharedPtr f)
 Creates an instance of this class. More...
 

Static Public Attributes

static ModuleKey className
 

Protected Member Functions

 ProcessIsoContour ()
 
void ResetFieldPts (std::vector< IsoSharedPtr > &iso)
 
void SetupIsoFromFieldPts (std::vector< IsoSharedPtr > &isovec)
 
- Protected Member Functions inherited from Nektar::FieldUtils::Module
 Module ()
 

Private Member Functions

std::vector< IsoSharedPtrExtractContour (const int fieldid, const NekDouble val)
 

Additional Inherited Members

- Protected Attributes inherited from Nektar::FieldUtils::Module
FieldSharedPtr m_f
 Field object. More...
 
std::map< std::string, ConfigOptionm_config
 List of configuration values. More...
 

Detailed Description

This processing module extracts an isocontour.

Definition at line 226 of file ProcessIsoContour.h.

Constructor & Destructor Documentation

◆ ProcessIsoContour() [1/2]

Nektar::FieldUtils::ProcessIsoContour::ProcessIsoContour ( FieldSharedPtr  f)

Definition at line 69 of file ProcessIsoContour.cpp.

References Nektar::FieldUtils::Module::m_config.

69  :
70  ProcessModule(f)
71 {
72 
73  m_config["fieldstr"] = ConfigOption(false, "NotSet",
74  "string of isocontour to be extracted");
75  m_config["fieldname"] = ConfigOption(false, "isocon",
76  "name for isocontour if fieldstr "
77  "specified, default is isocon");
78 
79  m_config["fieldid"] = ConfigOption(false, "NotSet",
80  "field id to extract");
81 
82  m_config["fieldvalue"] = ConfigOption(false, "NotSet",
83  "field value to extract");
84 
85  m_config["globalcondense"] = ConfigOption(true, "0",
86  "Globally condense contour to unique "
87  "values");
88 
89  m_config["smooth"] = ConfigOption(true, "0",
90  "Smooth isocontour (might require "
91  "globalcondense)");
92 
93  m_config["smoothiter"] = ConfigOption(false, "100",
94  "Number of smoothing cycle, default = "
95  "100");
96 
97  m_config["smoothposdiffusion"] = ConfigOption(false,"0.5",
98  "Postive diffusion coefficient "
99  "(0 < lambda < 1), default = 0.5");
100 
101  m_config["smoothnegdiffusion"] = ConfigOption(false,"0.505",
102  "Negative diffusion coefficient "
103  "(0 < mu < 1), default = 0.505");
104 
105  m_config["removesmallcontour"] = ConfigOption(false,"0",
106  "Remove contours with less than specified number of triangles."
107  "Only valid with GlobalCondense or Smooth options.");
108 
109 
110 }
std::map< std::string, ConfigOption > m_config
List of configuration values.

◆ ~ProcessIsoContour()

Nektar::FieldUtils::ProcessIsoContour::~ProcessIsoContour ( void  )
virtual

Definition at line 112 of file ProcessIsoContour.cpp.

113 {
114 }

◆ ProcessIsoContour() [2/2]

Nektar::FieldUtils::ProcessIsoContour::ProcessIsoContour ( )
inlineprotected

Definition at line 258 of file ProcessIsoContour.h.

258 {};

Member Function Documentation

◆ create()

static std::shared_ptr<Module> Nektar::FieldUtils::ProcessIsoContour::create ( FieldSharedPtr  f)
inlinestatic

Creates an instance of this class.

Definition at line 230 of file ProcessIsoContour.h.

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

231  {
233  }
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.

◆ ExtractContour()

vector< IsoSharedPtr > Nektar::FieldUtils::ProcessIsoContour::ExtractContour ( const int  fieldid,
const NekDouble  val 
)
private

Definition at line 379 of file ProcessIsoContour.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, ASSERTL1, Nektar::LibUtilities::ePtsTetBlock, Nektar::FieldUtils::Module::m_f, Nektar::FieldUtils::ThreeSimilar(), and Nektar::FieldUtils::TwoPairs().

Referenced by Process().

382 {
383  vector<IsoSharedPtr> returnval;
384 
385  int coordim = m_f->m_fieldPts->GetDim();
386  int nfields = m_f->m_fieldPts->GetNFields() + coordim;
387 
388  ASSERTL0(m_f->m_fieldPts->GetPtsType() == LibUtilities::ePtsTetBlock,
389  "This methods is currently only set up for 3D fields");
390  ASSERTL1(coordim + fieldid < nfields,
391  "field id is larger than number contained in FieldPts");
392  Array<OneD, Array<OneD, NekDouble> > fields;
393  m_f->m_fieldPts->GetPts(fields);
394 
395  Array<OneD, NekDouble> c = fields[coordim + fieldid];
396 
397  int i, j, k, ii, jj, kk, r, s, n, counter, boolean;
398  Array<OneD, Array<OneD, NekDouble> > intfields(nfields);
399  intfields[0] = Array<OneD, NekDouble>(5*nfields);
400  for(i = 1; i < nfields; ++i)
401  {
402  intfields[i] = intfields[i-1] + 5;
403  }
404  Array<OneD, NekDouble> cx = intfields[0];
405  Array<OneD, NekDouble> cy = intfields[1];
406  Array<OneD, NekDouble> cz = intfields[2];
407 
408  vector<Array<OneD, int> > ptsConn;
409  m_f->m_fieldPts->GetConnectivity(ptsConn);
410 
411  for(int zone = 0; zone < ptsConn.size(); ++zone)
412  {
413  IsoSharedPtr iso;
414 
415  iso = MemoryManager<Iso>::AllocateSharedPtr(nfields-3);
416 
417  int nelmt = ptsConn[zone].num_elements()
418  /(coordim+1);
419 
420  Array<OneD, int> conn = ptsConn[zone];
421 
422  for (n = 0, i = 0; i < nelmt; ++i)
423  {
424  // check to see if val is between vertex values
425  if(!(((c[conn[i*4]] >val)&&(c[conn[i*4+1]]>val)&&
426  (c[conn[i*4+2]]>val)&&(c[conn[i*4+3]]>val))||
427  ((c[conn[i*4 ]]<val)&&(c[conn[i*4+1]]<val)&&
428  (c[conn[i*4+2]]<val)&&(c[conn[i*4+3]]<val))))
429  {
430 
431  // loop over all edges and interpolate if
432  // contour is between vertex values
433  for (counter = 0, j=0; j<=2; j++)
434  {
435  for (k=j+1; k<=3; k++)
436  {
437  if (((c[conn[i*4+j]]>=val)&&
438  (val>=c[conn[i*4+k]]))||
439  ((c[conn[i*4+j]]<=val)&&
440  (val<=c[conn[i*4+k]])))
441  {
442  // linear interpolation of fields
443  // (and coords).
444  NekDouble cj = c[conn[i*4+j]];
445  NekDouble ck = c[conn[i*4+k]];
446  NekDouble factor = (val-cj)/(ck-cj);
447 
448  if(fabs(cj-ck) > 1e-12)
449  {
450  // interpolate coordinates and fields
451  for(int f = 0; f < nfields; ++f)
452  {
453  if(counter == 5)
454  {
455  ASSERTL0(false,"Counter is 5");
456  }
457  intfields[f][counter] =
458  fields[f][conn[4*i+j]] +
459  factor*(fields[f][conn[4*i+k]] -
460  fields[f][conn[4*i+j]]);
461  }
462  ++counter;
463  }
464  }
465  }
466  }
467 
468  switch(counter)
469  {
470  case 3:
471  n+=1;
472  iso->ResizeFields(3*n);
473 
474  for(j = 0; j < 3; ++j)
475  {
476  iso->SetFields(3*(n-1)+j,intfields,j);
477  }
478  break;
479  case 4:
480  n+=2;
481  iso->ResizeFields(3*n);
482 
483  for(j = 0; j < 3; ++j)
484  {
485  iso->SetFields(3*(n-2)+j,intfields,j);
486  iso->SetFields(3*(n-1)+j,intfields,j+1);
487  }
488  break;
489  case 5:
490  n+=1;
491  iso->ResizeFields(3*n);
492 
493  boolean=0;
494  for (ii=0;ii<=2;ii++)
495  {
496  for (jj=ii+1;jj<=3;jj++)
497  {
498  for (kk=jj+1;kk<=4;kk++)
499  {
500  if((((cx[ii]-cx[jj])==0.0)&&
501  ((cy[ii]-cy[jj])==0.0)&&
502  ((cz[ii]-cz[jj])==0.0))&&
503  (((cx[ii]-cx[kk])==0.0)&&
504  ((cy[ii]-cy[kk])==0.0)&&
505  ((cz[ii]-cz[kk])==0.0)))
506  {
507  boolean+=1;
508  ThreeSimilar (ii,jj,kk,r,s);
509 
510  iso->SetFields(3*(n-1) ,intfields,ii);
511  iso->SetFields(3*(n-1)+1,intfields,r);
512  iso->SetFields(3*(n-1)+2,intfields,s);
513  }
514  else
515  {
516  boolean+=0;
517  }
518  }
519  }
520  }
521 
522  if (boolean==0)
523  {
524  TwoPairs (cx,cy,cz,r);
525 
526  iso->SetFields(3*(n-1) ,intfields,0);
527  iso->SetFields(3*(n-1)+1,intfields,2);
528  iso->SetFields(3*(n-1)+2,intfields,r);
529  }
530  break;
531  }
532  }
533  }
534 
535  if(n)
536  {
537  iso->SetNTris(n);
538 
539  // condense the information in this elemental extraction.
540  iso->Condense();
541 
542  returnval.push_back(iso);
543  }
544  }
545 
546  return returnval;
547 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
void ThreeSimilar(const int i, const int j, const int k, int &pr, int &ps)
void TwoPairs(Array< OneD, NekDouble > &cx, Array< OneD, NekDouble > &cy, Array< OneD, NekDouble > &cz, int &pr)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
double NekDouble
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Definition: ErrorUtil.hpp:250
std::shared_ptr< Iso > IsoSharedPtr
FieldSharedPtr m_f
Field object.

◆ GetModuleDescription()

virtual std::string Nektar::FieldUtils::ProcessIsoContour::GetModuleDescription ( )
inlinevirtual

Reimplemented from Nektar::FieldUtils::Module.

Definition at line 247 of file ProcessIsoContour.h.

248  {
249  return "Extracting contour";
250  }

◆ GetModuleName()

virtual std::string Nektar::FieldUtils::ProcessIsoContour::GetModuleName ( )
inlinevirtual

Implements Nektar::FieldUtils::Module.

Definition at line 242 of file ProcessIsoContour.h.

243  {
244  return "ProcessIsoContour";
245  }

◆ GetModulePriority()

virtual ModulePriority Nektar::FieldUtils::ProcessIsoContour::GetModulePriority ( )
inlinevirtual

Implements Nektar::FieldUtils::Module.

Definition at line 252 of file ProcessIsoContour.h.

References Nektar::FieldUtils::eModifyPts.

253  {
254  return eModifyPts;
255  }

◆ Process()

void Nektar::FieldUtils::ProcessIsoContour::Process ( po::variables_map &  vm)
virtual

Write mesh to output file.

Implements Nektar::FieldUtils::Module.

Definition at line 116 of file ProcessIsoContour.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::LibUtilities::ePtsTetBlock, Nektar::LibUtilities::ePtsTriBlock, ExtractContour(), Nektar::FieldUtils::Module::m_config, Nektar::FieldUtils::Module::m_f, ResetFieldPts(), SetupIsoFromFieldPts(), Nektar::LibUtilities::Timer::Start(), Nektar::LibUtilities::Timer::Stop(), and Nektar::LibUtilities::Timer::TimePerTest().

117 {
118  boost::ignore_unused(vm);
119 
120  bool verbose = (m_f->m_verbose && m_f->m_comm->TreatAsRankZero());
121 
122  vector<IsoSharedPtr> iso;
123 
124  ASSERTL0(m_f->m_fieldPts.get(),
125  "Should have m_fieldPts for IsoContour.");
126 
127  if(m_f->m_fieldPts->GetPtsType() == LibUtilities::ePtsTriBlock)
128  {
129  // assume we have read .dat file to directly input dat file.
130  if(verbose)
131  {
132  cout << "\t Process read iso from Field Pts" << endl;
133  }
134 
136  }
137  else if(m_f->m_fieldPts->GetPtsType() == LibUtilities::ePtsTetBlock)
138  {
139  if(m_config["fieldstr"].m_beenSet)
140  {
141  string fieldName = m_config["fieldname"].as<string>();
142  m_f->m_variables.push_back(fieldName);
143  }
144 
145  if(m_f->m_fieldPts->GetNpoints() == 0)
146  {
147  return;
148  }
149 
150  int fieldid;
151  NekDouble value;
152 
153  if(m_config["fieldstr"].m_beenSet) //generate field of interest
154  {
155  fieldid = m_f->m_fieldPts->GetNFields();
156 
157  Array<OneD, NekDouble> pts(m_f->m_fieldPts->GetNpoints());
158 
159  // evaluate new function
160  LibUtilities::Interpreter strEval;
161  string varstr = "x y z";
162  vector<Array<OneD, const NekDouble> > interpfields;
163 
164  for(int i = 0; i < m_f->m_fieldPts->GetDim(); ++i)
165  {
166  interpfields.push_back(m_f->m_fieldPts->GetPts(i));
167  }
168  for(int i = 0; i < m_f->m_fieldPts->GetNFields(); ++i)
169  {
170  varstr += " " + m_f->m_fieldPts->GetFieldName(i);
171  interpfields.push_back(m_f->m_fieldPts->GetPts(i+3));
172  }
173 
174  int ExprId = -1;
175  std::string str = m_config["fieldstr"].as<string>();
176  ExprId = strEval.DefineFunction(varstr.c_str(), str);
177 
178  strEval.Evaluate(ExprId, interpfields, pts);
179 
180  // set up field name if provided otherwise called "isocon" from default
181  string fieldName = m_config["fieldname"].as<string>();
182 
183  m_f->m_fieldPts->AddField(pts, fieldName);
184  }
185  else
186  {
187  ASSERTL0(m_config["fieldid"].as<string>() != "NotSet", "fieldid must be specified");
188  fieldid = m_config["fieldid"].as<int>();
189  }
190 
191  ASSERTL0(m_config["fieldvalue"].as<string>() != "NotSet", "fieldvalue must be specified");
192  value = m_config["fieldvalue"].as<NekDouble>();
193 
194  iso = ExtractContour(fieldid,value);
195  }
196  else
197  {
198  ASSERTL0(false, "PtsType not supported for isocontour.");
199  }
200 
201  // Process isocontour
202  bool smoothing = m_config["smooth"].as<bool>();
203  bool globalcondense = m_config["globalcondense"].as<bool>();
204  if(globalcondense)
205  {
206  if(verbose)
207  {
208  cout << "\t Process global condense ..." << endl;
209  }
210  int nfields = m_f->m_fieldPts->GetNFields() + m_f->m_fieldPts->GetDim();
212 
213  g_iso->GlobalCondense(iso,verbose);
214 
215 
216  iso.clear();
217  iso.push_back(g_iso);
218  }
219 
220  if(smoothing)
221  {
222  LibUtilities::Timer timersm;
223 
224  if(verbose)
225  {
226  cout << "\t Process Contour smoothing ..." << endl;
227  timersm.Start();
228  }
229 
230  int niter = m_config["smoothiter"].as<int>();
231  NekDouble lambda = m_config["smoothposdiffusion"].as<NekDouble>();
232  NekDouble mu = m_config["smoothnegdiffusion"].as<NekDouble>();
233  for(int i =0 ; i < iso.size(); ++i)
234  {
235  iso[i]->Smooth(niter,lambda,-mu);
236  }
237 
238  if(verbose)
239  {
240  timersm.Stop();
241  NekDouble cpuTime = timersm.TimePerTest(1);
242 
243  stringstream ss;
244  ss << cpuTime << "s";
245  cout << "\t Process smooth CPU Time: " << setw(8) << left
246  << ss.str() << endl;
247  cpuTime = 0.0;
248  }
249  }
250 
251  int mincontour = 0;
252  if((mincontour = m_config["removesmallcontour"].as<int>()))
253  {
254  vector<IsoSharedPtr> new_iso;
255 
256  if(verbose)
257  {
258  cout << "\t Identifying separate regions [." << flush ;
259  }
260  for(int i =0 ; i < iso.size(); ++i)
261  {
262  iso[i]->SeparateRegions(new_iso,mincontour,m_f->m_verbose);
263  }
264 
265  if(verbose)
266  {
267  cout << "]" << endl << flush ;
268  }
269 
270  // reset iso to new_iso;
271  iso = new_iso;
272  }
273 
274  ResetFieldPts(iso);
275 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
std::map< std::string, ConfigOption > m_config
List of configuration values.
void SetupIsoFromFieldPts(std::vector< IsoSharedPtr > &isovec)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
double NekDouble
void ResetFieldPts(std::vector< IsoSharedPtr > &iso)
std::vector< IsoSharedPtr > ExtractContour(const int fieldid, const NekDouble val)
std::shared_ptr< Iso > IsoSharedPtr
FieldSharedPtr m_f
Field object.

◆ ResetFieldPts()

void Nektar::FieldUtils::ProcessIsoContour::ResetFieldPts ( std::vector< IsoSharedPtr > &  iso)
protected

Definition at line 550 of file ProcessIsoContour.cpp.

References Nektar::LibUtilities::ePtsTriBlock, and Nektar::FieldUtils::Module::m_f.

Referenced by Process().

551 {
552  int nfields = m_f->m_fieldPts->GetNFields() + m_f->m_fieldPts->GetDim();
553 
554  // set output to triangle block.
555  m_f->m_fieldPts->SetPtsType(LibUtilities::ePtsTriBlock);
556 
557  Array<OneD, Array<OneD, NekDouble> > newfields(nfields);
558 
559  // count up number of points
560  int npts = 0;
561  for(int i =0; i < iso.size(); ++i)
562  {
563  npts += iso[i]->GetNVert();
564  }
565 
566  // set up coordinate in new field
567  newfields[0] = Array<OneD, NekDouble>(npts);
568  newfields[1] = Array<OneD, NekDouble>(npts);
569  newfields[2] = Array<OneD, NekDouble>(npts);
570 
571  int cnt = 0;
572  for(int i =0; i < iso.size(); ++i)
573  {
574  for(int j = 0; j < iso[i]->GetNVert(); ++j,++cnt)
575  {
576  newfields[0][cnt] = iso[i]->GetX(j);
577  newfields[1][cnt] = iso[i]->GetY(j);
578  newfields[2][cnt] = iso[i]->GetZ(j);
579  }
580  }
581 
582 
583  // set up fields
584  for(int f = 0; f < nfields-3; ++f)
585  {
586  newfields[f+3] = Array<OneD, NekDouble>(npts);
587 
588  cnt = 0;
589  for(int i =0; i < iso.size(); ++i)
590  {
591  for(int j = 0; j < iso[i]->GetNVert(); ++j,++cnt)
592  {
593  newfields[f+3][cnt] = iso[i]->GetFields(f,j);
594  }
595  }
596  }
597 
598  m_f->m_fieldPts->SetPts(newfields);
599 
600  // set up connectivity data.
601  vector<Array<OneD, int> > ptsConn;
602  m_f->m_fieldPts->GetConnectivity(ptsConn);
603  cnt = 0;
604  ptsConn.clear();
605  for(int i =0; i < iso.size(); ++i)
606  {
607  int ntris = iso[i]->GetNTris();
608  Array<OneD, int> conn(ntris*3);
609 
610  for(int j = 0; j < 3*ntris; ++j)
611  {
612  conn[j] = cnt + iso[i]->GetVId(j);
613  }
614  ptsConn.push_back(conn);
615  cnt += iso[i]->GetNVert();
616  }
617  m_f->m_fieldPts->SetConnectivity(ptsConn);
618 }
FieldSharedPtr m_f
Field object.

◆ SetupIsoFromFieldPts()

void Nektar::FieldUtils::ProcessIsoContour::SetupIsoFromFieldPts ( std::vector< IsoSharedPtr > &  isovec)
protected

Definition at line 621 of file ProcessIsoContour.cpp.

References Nektar::MemoryManager< DataType >::AllocateSharedPtr(), ASSERTL0, Nektar::LibUtilities::ePtsTriBlock, and Nektar::FieldUtils::Module::m_f.

Referenced by Process().

622 {
623  ASSERTL0(m_f->m_fieldPts->GetPtsType() == LibUtilities::ePtsTriBlock,
624  "Assume input is from ePtsTriBlock");
625 
626  // get information from PtsField
627  int dim = m_f->m_fieldPts->GetDim();
628  int nfields = m_f->m_fieldPts->GetNFields() + dim;
629  Array<OneD, Array<OneD, NekDouble> > fieldpts;
630  m_f->m_fieldPts->GetPts(fieldpts);
631  vector<Array<OneD, int> > ptsConn;
632  m_f->m_fieldPts->GetConnectivity(ptsConn);
633 
634 
635  int cnt = 0;
636  for(int c = 0; c < ptsConn.size(); ++c)
637  {
638  // set up single iso with all the information from PtsField
640 
641  int nelmt = 0;
642  nelmt = ptsConn[c].num_elements()/3;
643 
644  iso->SetNTris(nelmt);
645  iso->ResizeVId(3*nelmt);
646 
647  // fill in connectivity values.
648  int nvert = 0;
649  for(int i = 0; i < ptsConn[c].num_elements(); ++i)
650  {
651  int cid = ptsConn[c][i]-cnt;
652  iso->SetVId(i,cid);
653  nvert = max(cid,nvert);
654  }
655  nvert++;
656 
657  iso->SetNVert(nvert);
658  iso->ResizeFields(nvert);
659 
660  // fill in points values (including coordinates)
661  for(int i = 0; i < nvert; ++i)
662  {
663  iso->SetFields(i,fieldpts,i+cnt);
664  }
665  cnt += nvert;
666  isovec.push_back(iso);
667  }
668 
669 }
#define ASSERTL0(condition, msg)
Definition: ErrorUtil.hpp:216
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
std::shared_ptr< Iso > IsoSharedPtr
FieldSharedPtr m_f
Field object.

Member Data Documentation

◆ className

ModuleKey Nektar::FieldUtils::ProcessIsoContour::className
static
Initial value:
=
ModuleKey(eProcessModule, "isocontour"),
"Extract an isocontour of fieldid variable and at "
"value fieldvalue, Optionally fieldstr can be "
"specified for a string defiition or smooth for "
"smoothing")

Definition at line 234 of file ProcessIsoContour.h.