surfaceWriter.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-2012 OpenFOAM Foundation
9  Copyright (C) 2015-2021 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 Namespace
28  Foam::surfaceWriters
29 
30 Description
31  Namespace for surface writers
32 
33 Class
34  Foam::surfaceWriter
35 
36 Description
37  Base class for surface writers.
38 
39  The surfaceWriter interface is rather large since we need a writer that
40  can either be initially defined without a surface association
41  and have that added at a later stage, or be defined with a surface
42  association.
43 
44  \verbatim
45  formatOptions
46  {
47  someFormat // Eg, ensight, vtk, etc
48  {
49  verbose true;
50  }
51  }
52  \endverbatim
53 
54  Format options:
55  \table
56  Property | Description | Required | Default
57  verbose | Additional output verbosity | no | no
58  \endtable
59 
60 Note
61  For surface formats that require geometry in a separate file,
62  it is the responsibility of the implementation (not the caller)
63  to ensure that this occurs.
64 
65 SourceFiles
66  surfaceWriter.C
67  surfaceWriterI.H
68 
69 \*---------------------------------------------------------------------------*/
70 
71 #ifndef surfaceWriter_H
72 #define surfaceWriter_H
73 
74 #include <functional>
75 #include "typeInfo.H"
76 #include "autoPtr.H"
77 #include "tmp.H"
78 #include "Field.H"
79 #include "fileName.H"
80 #include "instant.H"
81 #include "mergedSurf.H"
82 #include "meshedSurfRef.H"
83 #include "InfoProxy.H"
84 #include "runTimeSelectionTables.H"
85 
86 // Deprecated methods
87 // #define Foam_surfaceWriter_directAccess
88 
89 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
90 
91 namespace Foam
92 {
93 
94 // Forward Declarations
95 class Time;
96 class surfaceWriter;
97 
98 Ostream& operator<<(Ostream& os, const InfoProxy<surfaceWriter>& ip);
99 
100 
101 /*---------------------------------------------------------------------------*\
102  Class surfaceWriter Declaration
103 \*---------------------------------------------------------------------------*/
104 
105 class surfaceWriter
106 {
107 protected:
108 
109  // Static Data Members
110 
111  //- Placeholder
112  static const meshedSurf::emptySurface emptySurface_;
113 
114 
115  // Protected Data
116 
117  //- Reference to a surface
118  std::reference_wrapper<const meshedSurf> surf_;
119 
120  //- Reference to raw surface components
122 
123  //- Use raw surface components instead of surface reference
124  bool useComponents_;
125 
126  //- The topology/surface is up-to-date?
127  mutable bool upToDate_;
128 
129  //- Track if geometry has been written since the last open
130  mutable bool wroteGeom_;
131 
132  //- Writing in parallel (via master)
133  bool parallel_;
134 
135  //- Insert additional time sub-directory in the output path
137 
138  //- Is point vs cell data
140 
141  //- Additional output verbosity
142  bool verbose_;
143 
144  //- The number of fields
145  label nFields_;
146 
147  //- Dimension for merging
148  scalar mergeDim_;
149 
150  //- Merging information and the resulting merged surface (parallel)
152 
153  //- The current time value/name
155 
156  //- The full output directory and file (surface) name
158 
159 
160  // Protected Member Functions
161 
162  //- Verify that the outputPath_ has been set or FatalError
163  bool checkOpen() const;
164 
165  //- Merge surfaces if they are not already upToDate (parallel)
166  //- or simply mark the surface as being up-to-date
167  virtual bool merge() const;
168 
169  //- Merge surfaces (if not upToDate) and return merged or
170  //- the regular surface
171  const meshedSurf& surface() const;
172 
173 
174  //- Gather (merge) fields with renumbering and shrinking for point data
175  template<class Type>
177 
178 #undef declareSurfaceWriterMergeMethod
179 #define declareSurfaceWriterMergeMethod(Type) \
180  tmp<Field<Type>> mergeField(const Field<Type>& fld) const;
181 
188 
189  #undef declareSurfaceWriterMergeMethod
190 
191  //- Dummy templated write operation
192  template<class Type>
193  fileName writeTemplate
194  (
195  const word& fieldName,
196  const Field<Type>& localValues
197  )
198  {
199  if (!wroteGeom_)
200  {
201  return this->write();
202  }
204  }
205 
206 
207 public:
208 
209  // Public Data
210 
211  //- The default merge dimension (1e-8)
212  static scalar defaultMergeDim;
213 
214 
215  //- Runtime type information
216  TypeName("surfaceWriter");
217 
218 
219  // Declare run-time constructor selection table
221  (
222  autoPtr,
224  word,
225  (),
226  ()
227  );
228 
230  (
231  autoPtr,
233  wordDict,
234  (
235  const dictionary& writeOpts
236  ),
237  (writeOpts)
238  );
239 
240 
241  // Selectors
242 
243  //- True if New is likely to succeed for this writeType
244  static bool supportedType(const word& writeType);
245 
246  //- Return a reference to the selected surfaceWriter
247  static autoPtr<surfaceWriter> New(const word& writeType);
248 
249  //- Return a reference to the selected surfaceWriter
250  // Select with extra write option
252  (
253  const word& writeType,
254  const dictionary& writeOptions
255  );
256 
257 
258  // Constructors
259 
260  //- Default construct
261  surfaceWriter();
262 
263  //- Default construct with specified options
264  explicit surfaceWriter(const dictionary& options);
265 
266  //- Construct from components
267  explicit surfaceWriter
268  (
269  const meshedSurf& surf,
270  bool parallel = Pstream::parRun(),
271  const dictionary& options = dictionary()
272  );
273 
274  //- Construct from components
276  (
277  const pointField& points,
278  const faceList& faces,
279  bool parallel = Pstream::parRun(),
280  const dictionary& options = dictionary()
281  );
282 
283 
284  //- Destructor. Calls close()
285  virtual ~surfaceWriter();
286 
287 
288  // Member Functions
289 
290  // Capability
291 
292  //- The writer is enabled. If the writer is not enabled, it may be
293  //- possible for the caller to skip various preparatory operations.
294  // This method is primarily useful for the null writer
295  virtual bool enabled() const
296  {
297  return true;
298  }
299 
300  //- True if the surface format requires geometry in a separate file.
301  virtual bool separateGeometry() const
302  {
303  return false;
304  }
305 
306  //- True if the writer format uses faceIds as part of its output.
307  // Element ids are used by various CAE formats
308  // (abaqus, nastran, starcd, ...)
309  virtual bool usesFaceIds() const
310  {
311  return false;
312  }
313 
314 
315  // Bookkeeping
316 
317  //- Does the writer need an update (eg, lagging behind surface changes)
318  virtual bool needsUpdate() const;
319 
320  //- Geometry or fields written since the last open?
321  virtual bool wroteData() const;
322 
323  //- Mark that surface changed and the writer will need an update,
324  //- and set nFields = 0.
325  // May also free up unneeded data.
326  // Return false if it was previously already expired.
327  virtual bool expire();
328 
329  //- Close any open output, remove association with a surface and
330  //- expire the writer. The parallel flag remains untouched.
331  virtual void clear();
332 
333 
334  // Surface association
335 
336  //- Change association with a surface, expire the writer
337  //- with defined parallel/serial treatment
338  virtual void setSurface
339  (
340  const meshedSurf& surf,
341  bool parallel
342  );
343 
344  //- Change association with a surface, expire the writer
345  //- with defined parallel/serial treatment
346  virtual void setSurface
347  (
348  const pointField& points,
349  const faceList& faces,
350  bool parallel
351  );
352 
353  //- Change association with a surface, expire the writer
354  //- with the current parallel/serial treatment
355  virtual void setSurface
356  (
357  const meshedSurf& surf
358  );
359 
360  //- Change association with a surface, expire the writer
361  //- with the current parallel/serial treatment
362  virtual void setSurface
363  (
364  const pointField& points,
365  const faceList& faces
366  );
367 
368 
369  // Queries, Access
370 
371  //- Writer is associated with a surface
372  bool hasSurface() const;
373 
374  //- The surface to write is empty if the global number of faces is zero
375  bool empty() const;
376 
377  //- The global number of faces for the associated surface
378  label size() const;
379 
380  //- The number of expected output fields.
381  // Currently only used by the legacy VTK format.
382  inline label nFields() const;
383 
384  //- Set the number of expected output fields
385  // Currently only used by the legacy VTK format.
386  // \return old value
387  inline label nFields(const label n);
388 
389  //- Are the field data to be treated as point data?
390  inline bool isPointData() const;
391 
392  //- Set handling of field data to face/point data
393  // \return old value
394  inline bool isPointData(const bool on);
395 
396  //- Should a time directory be spliced into the output path?
397  inline bool useTimeDir() const;
398 
399  //- Enable/disable use of spliced output path
400  // \return old value
401  inline bool useTimeDir(const bool on);
402 
403  //- Get output verbosity
404  inline bool verbose() const;
405 
406  //- Enable/disable verbose output
407  // \return old value
408  inline bool verbose(const bool on);
409 
410  //- The current value of the point merge dimension (metre)
411  inline scalar mergeDim() const;
412 
413  //- Change the point merge dimension (metre)
414  // \return old value
415  inline scalar mergeDim(const scalar dist);
416 
417 
418  // Time
419 
420  //- True if there is a known time
421  inline bool hasTime() const;
422 
423  //- The current time value/name
424  inline const word& timeName() const;
425 
426  //- The current time value/name
427  inline scalar timeValue() const;
428 
429 
430  //- Set the current time
431  void setTime(const instant& inst);
432 
433  //- Set current time from timeValue, auto generating the name
434  void setTime(scalar timeValue);
435 
436  //- Set current time from timeValue and timeName
437  void setTime(scalar timeValue, const word& timeName);
438 
439  //- Clear the current time
440  void unsetTime();
441 
442 
443  //- Begin a time-step
444  virtual void beginTime(const Time& t);
445 
446  //- Begin a time-step
447  virtual void beginTime(const instant& inst);
448 
449  //- End a time-step
450  virtual void endTime();
451 
452 
453  // Output
454 
455  //- Open for output on specified path, using existing surface
456  virtual void open(const fileName& outputPath);
457 
458  //- Open from components
459  virtual void open
460  (
461  const pointField& points,
462  const faceList& faces,
463  const fileName& outputPath,
464  bool parallel
465  );
466 
467  //- Open from components
468  virtual void open
469  (
470  const meshedSurf& surf,
471  const fileName& outputPath,
472  bool parallel
473  );
474 
475  //- Open from components, with the current parallel/serial treatment
476  virtual void open
477  (
478  const pointField& points,
479  const faceList& faces,
480  const fileName& outputPath
481  );
482 
483  //- Open from components, with the current parallel/serial treatment
484  virtual void open
485  (
486  const meshedSurf& surf,
487  const fileName& outputPath
488  );
489 
490  //- Finish output, performing any necessary cleanup
491  virtual void close();
492 
493 
494  // Write
495 
496  //- Write separate surface geometry to file.
497  virtual fileName write() = 0;
498 
499 
500 #undef declareSurfaceWriterWriteMethod
501 #define declareSurfaceWriterWriteMethod(Type) \
502  \
503  virtual fileName write \
504  ( \
505  const word& fieldName, \
506  const Field<Type>& values \
507  ) = 0
508 
515 
516 
517 #undef declareSurfaceWriterWriteMethod
518 #define declareSurfaceWriterWriteMethod(Type) \
519  \
520  \
521  virtual fileName write \
522  ( \
523  const word& fieldName, \
524  const Field<Type>& values \
525  ) // override
526 
527 
528  // Other IO
529 
530  //- Return info proxy.
531  virtual InfoProxy<surfaceWriter> info() const
532  {
533  return *this;
534  }
535 
536  //- Output info proxy
537  friend Ostream& operator<<
538  (
539  Ostream& os,
541  );
542 
543 
544  // Housekeeping
545 
546  #ifdef Foam_surfaceWriter_directAccess
547 
548  //- Access number of expected output fields.
549  label& nFields() { return nFields_; }
550 
551  //- Access handling of face/point data
552  bool& isPointData() { return isPointData_; }
553 
554  //- Access handling of spliced output path
555  bool& useTimeDir() { return useTimeDir_; }
556 
557  //- Access output verbosity
558  bool& verbose() { return verbose_; }
559 
560  //- Access value of the point merge dimension
561  scalar& mergeDim() { return mergeDim_; }
562 
563  #endif
564 };
565 
566 
567 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
568 
569 } // End namespace Foam
570 
571 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
572 
573 #include "surfaceWriterI.H"
574 
575 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
576 
577 #endif
578 
579 // ************************************************************************* //
Foam::pointField
vectorField pointField
pointField is a vectorField.
Definition: pointFieldFwd.H:44
Foam::Tensor< scalar >
Foam::sphericalTensor
SphericalTensor< scalar > sphericalTensor
SphericalTensor of scalars, i.e. SphericalTensor<scalar>.
Definition: sphericalTensor.H:54
Foam::SymmTensor< scalar >
Foam::Time
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:73
Foam::surfaceWriter::timeValue
scalar timeValue() const
The current time value/name.
Definition: surfaceWriterI.H:112
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::surfaceWriter::write
virtual fileName write()=0
Write separate surface geometry to file.
Foam::InfoProxy
A helper class for outputting values to Ostream.
Definition: InfoProxy.H:47
Foam::surfaceWriter
Base class for surface writers.
Definition: surfaceWriter.H:114
Foam::fileName
A class for handling file names.
Definition: fileName.H:73
Foam::surfaceWriter::mergeDim
scalar mergeDim() const
The current value of the point merge dimension (metre)
Definition: surfaceWriterI.H:86
Foam::surfaceWriter::TypeName
TypeName("surfaceWriter")
Runtime type information.
typeInfo.H
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:61
InfoProxy.H
Foam::surfaceWriter::defaultMergeDim
static scalar defaultMergeDim
The default merge dimension (1e-8)
Definition: surfaceWriter.H:221
Foam::surfaceWriter::unsetTime
void unsetTime()
Clear the current time.
Definition: surfaceWriter.C:225
Foam::surfaceWriter::merge
virtual bool merge() const
Definition: surfaceWriter.C:446
Foam::surfaceWriter::setSurface
virtual void setSurface(const meshedSurf &surf, bool parallel)
Definition: surfaceWriter.C:327
Foam::surfaceWriter::useTimeDir
bool useTimeDir() const
Should a time directory be spliced into the output path?
Definition: surfaceWriterI.H:58
Foam::surfaceWriter::setTime
void setTime(const instant &inst)
Set the current time.
Definition: surfaceWriter.C:206
Foam::surfaceWriter::clear
virtual void clear()
Definition: surfaceWriter.C:316
Foam::surfaceWriter::useComponents_
bool useComponents_
Use raw surface components instead of surface reference.
Definition: surfaceWriter.H:133
Foam::surfaceWriter::useTimeDir_
bool useTimeDir_
Insert additional time sub-directory in the output path.
Definition: surfaceWriter.H:145
Foam::surfaceWriter::surface
const meshedSurf & surface() const
Definition: surfaceWriter.C:472
Foam::meshedSurf
Abstract definition of a meshed surface defined by faces and points.
Definition: meshedSurf.H:49
Foam::surfaceWriter::hasTime
bool hasTime() const
True if there is a known time.
Definition: surfaceWriterI.H:100
instant.H
Foam::surfaceWriter::size
label size() const
The global number of faces for the associated surface.
Definition: surfaceWriter.C:420
mergedSurf.H
Foam::surfaceWriter::emptySurface_
static const meshedSurf::emptySurface emptySurface_
Placeholder.
Definition: surfaceWriter.H:121
Foam::meshedSurfRef
Implements a meshed surface by referencing existing faces and points.
Definition: meshedSurfRef.H:48
Foam::surfaceWriter::writeTemplate
fileName writeTemplate(const word &fieldName, const Field< Type > &localValues)
Dummy templated write operation.
Definition: surfaceWriter.H:203
Foam::surfaceWriter::timeName
const word & timeName() const
The current time value/name.
Definition: surfaceWriterI.H:106
Foam::surfaceWriter::empty
bool empty() const
The surface to write is empty if the global number of faces is zero.
Definition: surfaceWriter.C:407
Foam::surfaceWriter::isPointData
bool isPointData() const
Are the field data to be treated as point data?
Definition: surfaceWriterI.H:44
declareSurfaceWriterMergeMethod
#define declareSurfaceWriterMergeMethod(Type)
Definition: surfaceWriter.H:188
Foam::operator<<
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
Definition: boundaryPatch.C:83
n
label n
Definition: TABSMDCalcMethod2.H:31
Foam::surfaceWriter::verbose
bool verbose() const
Get output verbosity.
Definition: surfaceWriterI.H:72
Foam::surfaceWriter::endTime
virtual void endTime()
End a time-step.
Definition: surfaceWriter.C:244
Foam::surfaceWriter::upToDate_
bool upToDate_
The topology/surface is up-to-date?
Definition: surfaceWriter.H:136
Foam::surfaceWriter::beginTime
virtual void beginTime(const Time &t)
Begin a time-step.
Definition: surfaceWriter.C:232
Foam::Field
Generic templated field type.
Definition: Field.H:63
Foam::surfaceWriter::nFields_
label nFields_
The number of fields.
Definition: surfaceWriter.H:154
Foam::mergedSurf
Simple class to manage surface merging information.
Definition: mergedSurf.H:52
Foam::surfaceWriter::surf_
std::reference_wrapper< const meshedSurf > surf_
Reference to a surface.
Definition: surfaceWriter.H:127
meshedSurfRef.H
Field.H
fileName.H
Foam::surfaceWriter::parallel_
bool parallel_
Writing in parallel (via master)
Definition: surfaceWriter.H:142
Foam::surfaceWriter::mergeDim_
scalar mergeDim_
Dimension for merging.
Definition: surfaceWriter.H:157
Foam::surfaceWriter::checkOpen
bool checkOpen() const
Verify that the outputPath_ has been set or FatalError.
Definition: surfaceWriter.C:433
Foam::surfaceWriter::surfaceWriter
surfaceWriter()
Default construct.
Definition: surfaceWriter.C:140
Foam::surfaceWriter::needsUpdate
virtual bool needsUpdate() const
Does the writer need an update (eg, lagging behind surface changes)
Definition: surfaceWriter.C:374
Foam::symmTensor
SymmTensor< scalar > symmTensor
SymmTensor of scalars, i.e. SymmTensor<scalar>.
Definition: symmTensor.H:59
fld
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;for(const word &name :lagrangianScalarNames){ IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Definition: gmvOutputLagrangian.H:23
Foam::surfaceWriter::outputPath_
fileName outputPath_
The full output directory and file (surface) name.
Definition: surfaceWriter.H:166
Foam::surfaceWriter::wroteData
virtual bool wroteData() const
Geometry or fields written since the last open?
Definition: surfaceWriter.C:380
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
os
OBJstream os(runTime.globalPath()/outputName)
Foam::surfaceWriter::expire
virtual bool expire()
Definition: surfaceWriter.C:386
Foam::surfaceWriter::info
virtual InfoProxy< surfaceWriter > info() const
Return info proxy.
Definition: surfaceWriter.H:540
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::surfaceWriter::enabled
virtual bool enabled() const
Definition: surfaceWriter.H:304
Foam::vector
Vector< scalar > vector
A scalar version of the templated Vector.
Definition: vector.H:51
Foam::surfaceWriter::isPointData_
bool isPointData_
Is point vs cell data.
Definition: surfaceWriter.H:148
Foam::SphericalTensor< scalar >
Foam::fileName::null
static const fileName null
An empty fileName.
Definition: fileName.H:101
Foam::surfaceWriter::separateGeometry
virtual bool separateGeometry() const
True if the surface format requires geometry in a separate file.
Definition: surfaceWriter.H:310
Foam::meshedSurf::emptySurface
A concrete meshedSurf class without faces, points, etc.
Definition: meshedSurf.H:95
Foam::surfaceWriter::declareRunTimeSelectionTable
declareRunTimeSelectionTable(autoPtr, surfaceWriter, word,(),())
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
tmp.H
Foam::surfaceWriter::currTime_
instant currTime_
The current time value/name.
Definition: surfaceWriter.H:163
runTimeSelectionTables.H
Macros to ease declaration of run-time selection tables.
Foam::faceList
List< face > faceList
A List of faces.
Definition: faceListFwd.H:47
Foam::surfaceWriter::New
static autoPtr< surfaceWriter > New(const word &writeType)
Return a reference to the selected surfaceWriter.
Definition: surfaceWriter.C:64
Foam::Vector< scalar >
Foam::UPstream::parRun
static bool & parRun() noexcept
Test if this a parallel run.
Definition: UPstream.H:433
Foam::List< face >
Foam::surfaceWriter::surfComp_
meshedSurfRef surfComp_
Reference to raw surface components.
Definition: surfaceWriter.H:130
surfaceWriterI.H
points
const pointField & points
Definition: gmvOutputHeader.H:1
Foam::surfaceWriter::usesFaceIds
virtual bool usesFaceIds() const
True if the writer format uses faceIds as part of its output.
Definition: surfaceWriter.H:318
Foam::surfaceWriter::~surfaceWriter
virtual ~surfaceWriter()
Destructor. Calls close()
Definition: surfaceWriter.C:198
Foam::surfaceWriter::hasSurface
bool hasSurface() const
Writer is associated with a surface.
Definition: surfaceWriter.C:401
Foam::surfaceWriter::nFields
label nFields() const
The number of expected output fields.
Definition: surfaceWriterI.H:30
Foam::instant
An instant of time. Contains the time value and name.
Definition: instant.H:52
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
Foam::surfaceWriter::wroteGeom_
bool wroteGeom_
Track if geometry has been written since the last open.
Definition: surfaceWriter.H:139
Foam::surfaceWriter::mergeFieldTemplate
tmp< Field< Type > > mergeFieldTemplate(const Field< Type > &fld) const
Gather (merge) fields with renumbering and shrinking for point data.
Foam::surfaceWriter::verbose_
bool verbose_
Additional output verbosity.
Definition: surfaceWriter.H:151
Foam::surfaceWriter::close
virtual void close()
Finish output, performing any necessary cleanup.
Definition: surfaceWriter.C:309
declareSurfaceWriterWriteMethod
#define declareSurfaceWriterWriteMethod(Type)
Definition: surfaceWriter.H:527
Foam::tensor
Tensor< scalar > tensor
Tensor of scalars, i.e. Tensor<scalar>.
Definition: symmTensor.H:61
Foam::surfaceWriter::supportedType
static bool supportedType(const word &writeType)
True if New is likely to succeed for this writeType.
Definition: surfaceWriter.C:52
Foam::surfaceWriter::open
virtual void open(const fileName &outputPath)
Open for output on specified path, using existing surface.
Definition: surfaceWriter.C:250
Foam::surfaceWriter::merged_
mergedSurf merged_
Merging information and the resulting merged surface (parallel)
Definition: surfaceWriter.H:160
autoPtr.H