sampledSurface.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2011-2016 OpenFOAM Foundation
9  Copyright (C) 2016-2020 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 Class
28  Foam::sampledSurface
29 
30 Group
31  grpUtilitiesFunctionObjects
32 
33 Description
34  An abstract class for surfaces with sampling.
35 
36  The constructors for the derived classes should generally start in a
37  'expired' condition (ie, needsUpdate() == true) and rely on a
38  subsequent call to the update() method to complete the initialization.
39  Delaying the final construction as late as possible allows the
40  construction of surfaces that may depend on intermediate calculation
41  results (eg, iso-surfaces) and also avoids the unnecessary
42  reconstruction of surfaces between sampling intervals.
43 
44  It is the responsibility of the caller to ensure that the surface
45  update() is called before the surface is used. The update() method
46  implementation should do nothing when the surface is already
47  up-to-date.
48 
49  Any sampler is assumed to work for the standard volume field types.
50  Some may also support surface fields.
51 
52  Dictionary entries:
53  \table
54  Property | Description | Required | Default
55  name | Alternative name | no |
56  enabled | Enable/disable the surface? | no | yes
57  interpolate | Sample to nodes instead of faces | no | false
58  invariant | Invariant with geometry change (use with caution!) | no | false
59  \endtable
60 
61 Note
62  The invariant switch is an advanced feature to declare that the surface is
63  unaffected by changes in the general mesh geometry. For example, if sampling
64  on a static patch while some other motion occurs elsewhere. If used improperly,
65  there is a significant possibility for problems (caveat emptor).
66 
67 SourceFiles
68  sampledSurface.C
69  sampledSurfaceTemplates.C
70 
71 \*---------------------------------------------------------------------------*/
72 
73 #ifndef sampledSurface_H
74 #define sampledSurface_H
75 
76 #include "polySurface.H"
77 #include "surfMesh.H"
78 #include "typeInfo.H"
79 #include "runTimeSelectionTables.H"
80 #include "autoPtr.H"
81 #include "polyMesh.H"
82 #include "volFieldsFwd.H"
83 #include "surfaceFieldsFwd.H"
84 #include "surfaceMesh.H"
85 #include "interpolation.H"
86 
87 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
88 
89 namespace Foam
90 {
91 
92 /*---------------------------------------------------------------------------*\
93  Class sampledSurface Declaration
94 \*---------------------------------------------------------------------------*/
95 
96 class sampledSurface
97 :
98  public meshedSurf
99 {
100 public:
101 
102  // Public Static Data
103 
104  //- Class names for surface field types
105  static const wordList surfaceFieldTypes;
106 
107 
108 private:
109 
110  // Private Data
111 
112  //- The name of the sample surface
113  word name_;
114 
115  //- Reference to mesh
116  const polyMesh& mesh_;
117 
118  //- Should surface sampling be enabled?
119  bool enabled_;
120 
121  //- Geometry is invariant (never changes)
122  bool invariant_;
123 
124  //- Interpolate information to the nodes?
125  bool interpolate_;
126 
127  //- Total surface area (demand-driven)
128  mutable scalar area_;
129 
130 
131 protected:
132 
133  // Protected Member Functions
134 
135  //- Loop for sampling volume elements to faces.
136  // The defaultValue is used for invalid (negative) elements
137  template<class Type>
139  (
140  const interpolation<Type>& sampler,
141  const labelUList& elements,
142  const faceList& fcs,
143  const pointField& pts,
144  const Type& defaultValue = Type(Zero)
145  );
146 
147 
148  //- Loop for interpolating volume elements to face points.
149  template<class Type>
151  (
152  const interpolation<Type>& interpolator,
153  const labelUList& elements,
154  const faceList& fcs,
155  const pointField& pts
156  );
157 
158 
159  //- Create cell values by averaging the point values
160  template<class Type>
162  (
164  );
165 
166 
167  //- Additional cleanup when clearing the geometry
168  virtual void clearGeom() const;
169 
170  //- Construct null
171  explicit sampledSurface(const word& name, std::nullptr_t);
172 
173 
174 public:
175 
176  //- Runtime type information
177  TypeName("sampledSurface");
178 
179  //- Declare run-time constructor selection table
181  (
182  autoPtr,
184  word,
185  (
186  const word& name,
187  const polyMesh& mesh,
188  const dictionary& dict
189  ),
190  (name, mesh, dict)
191  );
192 
193 
194  //- PtrList read-construction helper
195  class iNew
196  {
197  //- Reference to the volume mesh
198  const polyMesh& mesh_;
199 
200  public:
201 
202  iNew(const polyMesh& mesh)
203  :
204  mesh_(mesh)
205  {}
206 
208  {
209  word name(is);
210  dictionary dict(is);
211 
212  return sampledSurface::New(name, mesh_, dict);
213  }
214  };
215 
216 
217  //- PtrList read-construction helper that captures dictionaries used
218  //- during creation.
220  {
221  //- Reference to the volume mesh
222  const polyMesh& mesh_;
223 
224  //- Captured (recorded) dictionaries
225  DynamicList<dictionary>& capture_;
226 
227  public:
228 
230  :
231  mesh_(mesh),
232  capture_(capture)
233  {}
234 
236  {
237  word name(is);
238  capture_.append(dictionary(is));
239 
240  return sampledSurface::New(name, mesh_, capture_.last());
241  }
242  };
243 
244 
245  // Constructors
246 
247  //- Construct from name, mesh
249  (
250  const word& name,
251  const polyMesh& mesh,
252  const bool interpolate = false
253  );
254 
255  //- Construct from dictionary
257  (
258  const word& name,
259  const polyMesh& mesh,
260  const dictionary& dict
261  );
262 
263  //- Clone
265  {
267  return nullptr;
268  }
269 
270 
271  // Selectors
272 
273  //- Return a reference to the selected surface
275  (
276  const word& name,
277  const polyMesh& mesh,
278  const dictionary& dict
279  );
280 
281 
282  //- Destructor - calls clearGeom()
283  virtual ~sampledSurface();
284 
285 
286  // Member Functions
287 
288  // Access
289 
290  //- Access to the underlying mesh
291  const polyMesh& mesh() const
292  {
293  return mesh_;
294  }
295 
296  //- Name of surface
297  const word& name() const
298  {
299  return name_;
300  }
301 
302  //- Surface is enabled
303  bool enabled() const
304  {
305  return enabled_;
306  }
307 
308  //- Surface is invariant with geometry change (caution)
309  bool invariant() const
310  {
311  return invariant_;
312  }
313 
314  //- Interpolation to nodes requested for surface
315  bool interpolate() const
316  {
317  return interpolate_;
318  }
319 
320  //- Does the surface need an update?
321  virtual bool needsUpdate() const = 0;
322 
323  //- Mark the surface as needing an update.
324  // May also free up unneeded data.
325  // Return false if surface was already marked as expired.
326  virtual bool expire() = 0;
327 
328  //- Update the surface as required.
329  // Do nothing (and return false) if no update was required
330  virtual bool update() = 0;
331 
332  //- Points of surface
333  virtual const pointField& points() const = 0;
334 
335  //- Faces of surface
336  virtual const faceList& faces() const = 0;
337 
338  //- Face area vectors
339  virtual const vectorField& Sf() const = 0;
340 
341  //- Face area magnitudes
342  virtual const scalarField& magSf() const = 0;
343 
344  //- Face centres
345  virtual const vectorField& Cf() const = 0;
346 
347  //- The total surface area
348  scalar area() const;
349 
350  //- If element ids/order of the original surface are available
351  virtual bool hasFaceIds() const
352  {
353  return false;
354  }
355 
356 
357  // General registry storage (optional)
358 
359  //- Get surface from registry if available.
360  // \param obr The objectRegistry to use
361  // \param lookupName Optional lookup name, use surface name if empty
362  // \return surface or nullptr
364  (
365  const objectRegistry& obr,
366  word lookupName = ""
367  ) const;
368 
369  //- Copy surface into registry.
370  // \param obr The objectRegistry to use
371  // \param lookupName Optional lookup name, use surface name if empty
372  // \return surface or nullptr it surface should not be stored
374  (
376  word lookupName = ""
377  ) const;
378 
379  //- Remove surface from registry.
380  // \param obr The objectRegistry to use
381  // \param lookupName Optional lookup name, use surface name if empty
382  // \return True if surface existed and was removed
384  (
385  objectRegistry& obr,
386  word lookupName = ""
387  ) const;
388 
389  //- Copy/store sampled field onto registered surface (if it exists)
390  template<class Type, class GeoMeshType>
391  bool storeRegistryField
392  (
393  const objectRegistry& obr,
394  const word& fieldName,
395  const dimensionSet& dims,
396  const Field<Type>& values,
397  word lookupName = ""
398  ) const;
399 
400  //- Move/store sampled field onto registered surface (if it exists)
401  template<class Type, class GeoMeshType>
402  bool storeRegistryField
403  (
404  const objectRegistry& obr,
405  const word& fieldName,
406  const dimensionSet& dims,
408  word lookupName = ""
409  ) const;
410 
411 
412  // Specialized surfMesh storage (optional)
413 
414  //- Get surface from registry if available.
415  // \param lookupName Optional lookup name, use surface name if empty
416  // \return surface or nullptr
417  surfMesh* getSurfMesh(word lookupName = "") const;
418 
419  //- Copy surface into registry.
420  // \param lookupName Optional lookup name, use surface name if empty
421  // \return surface or nullptr it surface should not be stored
422  surfMesh* storeSurfMesh(word lookupName = "") const;
423 
424  //- Remove surface from registry.
425  // \param lookupName Optional lookup name, use surface name if empty
426  // \return True if surface existed and was removed
427  bool removeSurfMesh(word lookupName = "") const;
428 
429  //- Copy/store sampled Face field onto surfMesh (if it exists)
430  template<class Type, class GeoMeshType>
431  bool storeSurfMeshField
432  (
433  const word& fieldName,
434  const dimensionSet& dims,
435  const Field<Type>& values,
436  word lookupName = ""
437  ) const;
438 
439  //- Move/store sampled Face field onto surfMesh (if it exists)
440  template<class Type, class GeoMeshType>
441  bool storeSurfMeshField
442  (
443  const word& fieldName,
444  const dimensionSet& dims,
446  word lookupName = ""
447  ) const;
448 
449 
450  // Sample (faces)
451 
452  //- Sample volume field onto surface faces
453  virtual tmp<scalarField> sample
454  (
455  const interpolation<scalar>& sampler
456  ) const = 0;
457 
458  //- Sample volume field onto surface faces
459  virtual tmp<vectorField> sample
460  (
461  const interpolation<vector>& sampler
462  ) const = 0;
463 
464  //- Sample volume field onto surface faces
466  (
467  const interpolation<sphericalTensor>& sampler
468  ) const = 0;
469 
470  //- Sample volume field onto surface faces
472  (
473  const interpolation<symmTensor>& sampler
474  ) const = 0;
475 
476  //- Sample volume field onto surface faces
477  virtual tmp<tensorField> sample
478  (
479  const interpolation<tensor>& sampler
480  ) const = 0;
481 
482 
483  //- Can it sample surface-fields?
484  virtual bool withSurfaceFields() const;
485 
486 
487  //- Sample surface field onto surface
488  virtual tmp<scalarField> sample
489  (
490  const surfaceScalarField& sField
491  ) const;
492 
493  //- Sample surface field onto surface
494  virtual tmp<vectorField> sample
495  (
496  const surfaceVectorField& sField
497  ) const;
498 
499  //- Sample surface field onto surface
501  (
502  const surfaceSphericalTensorField& sField
503  ) const;
504 
505  //- Sample surface field onto surface
507  (
508  const surfaceSymmTensorField& sField
509  ) const;
510 
511  //- Sample surface field onto surface
512  virtual tmp<tensorField> sample
513  (
514  const surfaceTensorField& sField
515  ) const;
516 
517 
518  // Interpolate (points)
519 
520  //- Interpolate volume field onto surface points
522  (
523  const interpolation<scalar>& interpolator
524  ) const = 0;
525 
526  //- Interpolate volume field onto surface points
528  (
529  const interpolation<vector>& interpolator
530  ) const = 0;
531 
532  //- Interpolate volume field onto surface points
534  (
535  const interpolation<sphericalTensor>& interpolator
536  ) const = 0;
537 
538  //- Interpolate volume field onto surface points
540  (
541  const interpolation<symmTensor>& interpolator
542  ) const = 0;
543 
544  //- Interpolate volume field onto surface points
546  (
547  const interpolation<tensor>& interpolator
548  ) const = 0;
549 
550 
551  // Edit
552 
553  //- Rename
554  virtual void rename(const word& newName)
555  {
556  name_ = newName;
557  }
558 
559 
560  // Write
561 
562  //- Print information
563  virtual void print(Ostream& os) const;
564 };
565 
566 
567 // Global Operators
568 
569 //- Ostream operator
570 Ostream& operator<<(Ostream& os, const sampledSurface& s);
571 
572 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
573 
574 } // End namespace Foam
575 
576 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
577 
578 #ifdef NoRepository
579  #include "sampledSurfaceTemplates.C"
580 #endif
581 
582 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
583 
584 #endif
585 
586 // ************************************************************************* //
Foam::sampledSurface::getRegistrySurface
polySurface * getRegistrySurface(const objectRegistry &obr, word lookupName="") const
Get surface from registry if available.
Definition: sampledSurfaceRegister.C:36
volFieldsFwd.H
Foam::sampledSurface::iNewCapture::iNewCapture
iNewCapture(const polyMesh &mesh, DynamicList< dictionary > &capture)
Definition: sampledSurface.H:253
Foam::sampledSurface::New
static autoPtr< sampledSurface > New(const word &name, const polyMesh &mesh, const dictionary &dict)
Return a reference to the selected surface.
Definition: sampledSurface.C:64
Foam::sampledSurface::iNewCapture::operator()
autoPtr< sampledSurface > operator()(Istream &is) const
Definition: sampledSurface.H:259
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
s
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Definition: gmvOutputSpray.H:25
Foam::sampledSurface::faces
virtual const faceList & faces() const =0
Faces of surface.
typeInfo.H
polySurface.H
Foam::sampledSurface::sampleOnFaces
static tmp< Field< Type > > sampleOnFaces(const interpolation< Type > &sampler, const labelUList &elements, const faceList &fcs, const pointField &pts, const Type &defaultValue=Type(Zero))
Loop for sampling volume elements to faces.
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:61
Foam::Zero
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
Foam::DynamicList
A 1D vector of objects of type <T> that resizes itself as necessary to accept the new objects.
Definition: DynamicList.H:55
Foam::HashTableOps::values
List< T > values(const HashTable< T, Key, Hash > &tbl, const bool doSort=false)
List of values from HashTable, optionally sorted.
Definition: HashOps.H:149
Foam::sampledSurface::declareRunTimeSelectionTable
declareRunTimeSelectionTable(autoPtr, sampledSurface, word,(const word &name, const polyMesh &mesh, const dictionary &dict),(name, mesh, dict))
Declare run-time constructor selection table.
Foam::sampledSurface::hasFaceIds
virtual bool hasFaceIds() const
If element ids/order of the original surface are available.
Definition: sampledSurface.H:375
Foam::sampledSurface::removeRegistrySurface
bool removeRegistrySurface(objectRegistry &obr, word lookupName="") const
Remove surface from registry.
Definition: sampledSurfaceRegister.C:76
Foam::sampledSurface::area
scalar area() const
The total surface area.
Definition: sampledSurface.C:147
Foam::meshedSurf
Abstract definition of a meshed surface defined by faces and points.
Definition: meshedSurf.H:49
Foam::surfMesh
A surface mesh consisting of general polygon faces that has IO capabilities and a registry for storin...
Definition: surfMesh.H:63
interpolation.H
Foam::sampledSurface::surfaceFieldTypes
static const wordList surfaceFieldTypes
Class names for surface field types.
Definition: sampledSurface.H:129
Foam::dimensionSet
Dimension set for the base types.
Definition: dimensionSet.H:65
Foam::sampledSurface::enabled
bool enabled() const
Surface is enabled.
Definition: sampledSurface.H:327
polyMesh.H
Foam::sampledSurface::pointAverage
static tmp< GeometricField< Type, fvPatchField, volMesh > > pointAverage(const GeometricField< Type, pointPatchField, pointMesh > &pfld)
Create cell values by averaging the point values.
Foam::sampledSurface::magSf
virtual const scalarField & magSf() const =0
Face area magnitudes.
Foam::polyMesh
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:77
Foam::sampledSurface::sample
virtual tmp< scalarField > sample(const interpolation< scalar > &sampler) const =0
Sample volume field onto surface faces.
Foam::sampledSurface::expire
virtual bool expire()=0
Mark the surface as needing an update.
Foam::wordList
List< word > wordList
A List of words.
Definition: fileName.H:59
Foam::objectRegistry
Registry of regIOobjects.
Definition: objectRegistry.H:60
Foam::operator<<
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
Definition: boundaryPatch.C:83
NotImplemented
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition: error.H:445
Foam::polySurface
A surface mesh consisting of general polygon faces and capable of holding fields.
Definition: polySurface.H:67
Foam::sampledSurface::points
virtual const pointField & points() const =0
Points of surface.
Foam::sampledSurface::invariant
bool invariant() const
Surface is invariant with geometry change (caution)
Definition: sampledSurface.H:333
Foam::Field< vector >
Foam::Istream
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:61
Foam::sampledSurface::rename
virtual void rename(const word &newName)
Rename.
Definition: sampledSurface.H:578
Foam::DynamicList::append
DynamicList< T, SizeMin > & append(const T &val)
Append an element to the end of this list.
Definition: DynamicListI.H:474
Foam::sampledSurface::iNew::operator()
autoPtr< sampledSurface > operator()(Istream &is) const
Definition: sampledSurface.H:231
Foam::sampledSurface::iNewCapture
Definition: sampledSurface.H:243
Foam::sampledSurface::storeRegistryField
bool storeRegistryField(const objectRegistry &obr, const word &fieldName, const dimensionSet &dims, const Field< Type > &values, word lookupName="") const
Copy/store sampled field onto registered surface (if it exists)
Definition: sampledSurfaceTemplates.C:182
Foam::sampledSurface::clone
autoPtr< sampledSurface > clone() const
Clone.
Definition: sampledSurface.H:288
Foam::sampledSurface
An abstract class for surfaces with sampling.
Definition: sampledSurface.H:120
Foam::sampledSurface::iNew::iNew
iNew(const polyMesh &mesh)
Definition: sampledSurface.H:226
Foam::interpolation
Abstract base class for interpolation.
Definition: mappedPatchFieldBase.H:96
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:121
surfaceMesh.H
surfMesh.H
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::sampledSurface::Sf
virtual const vectorField & Sf() const =0
Face area vectors.
Foam::sampledSurface::storeRegistrySurface
polySurface * storeRegistrySurface(objectRegistry &obr, word lookupName="") const
Copy surface into registry.
Definition: sampledSurfaceRegister.C:51
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
Foam::sampledSurface::TypeName
TypeName("sampledSurface")
Runtime type information.
Foam::sampledSurface::sampleOnPoints
static tmp< Field< Type > > sampleOnPoints(const interpolation< Type > &interpolator, const labelUList &elements, const faceList &fcs, const pointField &pts)
Loop for interpolating volume elements to face points.
Foam::sampledSurface::withSurfaceFields
virtual bool withSurfaceFields() const
Can it sample surface-fields?
Definition: sampledSurface.C:158
runTimeSelectionTables.H
Macros to ease declaration of run-time selection tables.
Foam::sampledSurface::needsUpdate
virtual bool needsUpdate() const =0
Does the surface need an update?
Foam::List< word >
Foam::sampledSurface::removeSurfMesh
bool removeSurfMesh(word lookupName="") const
Remove surface from registry.
Definition: sampledSurfaceRegister.C:120
Foam::sampledSurface::iNew
PtrList read-construction helper.
Definition: sampledSurface.H:219
Foam::sampledSurface::name
const word & name() const
Name of surface.
Definition: sampledSurface.H:321
Foam::UList< label >
Foam::sampledSurface::~sampledSurface
virtual ~sampledSurface()
Destructor - calls clearGeom()
Definition: sampledSurface.C:139
surfaceFieldsFwd.H
Foam::sampledSurface::getSurfMesh
surfMesh * getSurfMesh(word lookupName="") const
Get surface from registry if available.
Definition: sampledSurfaceRegister.C:86
Foam::sampledSurface::clearGeom
virtual void clearGeom() const
Additional cleanup when clearing the geometry.
Definition: sampledSurface.C:55
Foam::sampledSurface::print
virtual void print(Ostream &os) const
Print information.
Definition: sampledSurface.C:214
Foam::sampledSurface::mesh
const polyMesh & mesh() const
Access to the underlying mesh.
Definition: sampledSurface.H:315
Foam::sampledSurface::update
virtual bool update()=0
Update the surface as required.
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
sampledSurfaceTemplates.C
Foam::GeometricField
Generic GeometricField class.
Definition: areaFieldsFwd.H:53
Foam::sampledSurface::interpolate
bool interpolate() const
Interpolation to nodes requested for surface.
Definition: sampledSurface.H:339
Foam::sampledSurface::sampledSurface
sampledSurface(const word &name, std::nullptr_t)
Construct null.
Definition: sampledSurface.C:94
Foam::sampledSurface::Cf
virtual const vectorField & Cf() const =0
Face centres.
Foam::sampledSurface::storeSurfMeshField
bool storeSurfMeshField(const word &fieldName, const dimensionSet &dims, const Field< Type > &values, word lookupName="") const
Copy/store sampled Face field onto surfMesh (if it exists)
Definition: sampledSurfaceTemplates.C:230
autoPtr.H
Foam::sampledSurface::storeSurfMesh
surfMesh * storeSurfMesh(word lookupName="") const
Copy surface into registry.
Definition: sampledSurfaceRegister.C:97