mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: overhaul ensight handling (#1579)
- includes restructuring and simplification of low-level ensight part
handling and refactor of backends to improve code reuse.
foamToEnsight
-------------
* new cellZone support.
This was previously only possible via a separate foamToEnsightParts
utility that was not parallelized.
* support for point fields.
* `-nearCellValue` option (as per foamToVTK)
* data indexing now uses values from the time index.
This is consistent with the ensightWrite function object and
can help with restarts.
* existing ensight directories are removed, unless the -no-overwrite
option is supplied
foamToEnsightParts
------------------
* now redundant and removed.
ensightOutputSurface (new class)
--------------------------------
* a lightweight wrapper for point/face references that is tailored
for the ensightSurfaceWriter. It uses compact face/point information
and is serial only, since this is the format requirements from the
surfaceWriter class.
ensightMesh (revised class)
---------------------------
* now only holds a polyMesh reference, which removes its dependency
on finiteVolume and allows it to be relocated under fileFormats
instead of conversion.
Removed classes: ensightParts, ensighPartFaces, ensightPartCells
- these were used by foamToEnsightParts, but not needed anymore.
This commit is contained in:
committed by
Andrew Heather
parent
c7e8f22baf
commit
a97628121c
@ -5,7 +5,7 @@
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2018 OpenCFD Ltd.
|
||||
Copyright (C) 2018-2020 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -30,15 +30,14 @@ Description
|
||||
Read volume fields from disk and write with ensightMesh
|
||||
|
||||
SourceFiles
|
||||
writeVolFields.H
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef writeVolFields_H
|
||||
#define writeVolFields_H
|
||||
#ifndef ensight_writeVolFields_H
|
||||
#define ensight_writeVolFields_H
|
||||
|
||||
#include "readFields.H"
|
||||
#include "fvMeshSubsetProxy.H"
|
||||
#include "fvMesh.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -50,25 +49,41 @@ bool writeVolField
|
||||
(
|
||||
ensightCase& ensCase,
|
||||
const ensightMesh& ensMesh,
|
||||
const fvMeshSubsetProxy& proxy,
|
||||
const tmp<GeometricField<Type, fvPatchField, volMesh>>& tfield,
|
||||
const bool nodeValues
|
||||
const bool nearCellValue = false
|
||||
)
|
||||
{
|
||||
if (!tfield.valid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (nearCellValue)
|
||||
{
|
||||
auto tzgrad = makeZeroGradientField<Type>(tfield);
|
||||
|
||||
// Recursive call
|
||||
return writeVolField
|
||||
(
|
||||
ensCase,
|
||||
ensMesh,
|
||||
tzgrad,
|
||||
false // No nearCellValue, we already have zero-gradient
|
||||
);
|
||||
}
|
||||
|
||||
const auto& field = tfield();
|
||||
|
||||
autoPtr<ensightFile> os = ensCase.newData<Type>(field.name());
|
||||
// Forced use of node values?
|
||||
const bool nodeValues = ensCase.nodeValues();
|
||||
|
||||
autoPtr<ensightFile> os =
|
||||
ensCase.newData<Type>(field.name(), nodeValues);
|
||||
|
||||
bool wrote = ensightOutput::writeVolField<Type>
|
||||
(
|
||||
os.ref(),
|
||||
field,
|
||||
ensMesh,
|
||||
os.ref(),
|
||||
nodeValues
|
||||
);
|
||||
|
||||
@ -82,13 +97,14 @@ label writeVolFields
|
||||
(
|
||||
ensightCase& ensCase,
|
||||
const ensightMesh& ensMesh,
|
||||
const fvMeshSubsetProxy& proxy,
|
||||
const IOobjectList& objects,
|
||||
const bool nodeValues
|
||||
const bool nearCellValue = false
|
||||
)
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> GeoField;
|
||||
|
||||
const fvMesh& mesh = dynamicCast<const fvMesh>(ensMesh.mesh());
|
||||
|
||||
label count = 0;
|
||||
|
||||
for (const word& fieldName : objects.sortedNames<GeoField>())
|
||||
@ -99,9 +115,8 @@ label writeVolFields
|
||||
(
|
||||
ensCase,
|
||||
ensMesh,
|
||||
proxy,
|
||||
getField<GeoField>(objects.findObject(fieldName), proxy),
|
||||
nodeValues
|
||||
getField<GeoField>(objects.findObject(fieldName), mesh),
|
||||
nearCellValue
|
||||
)
|
||||
)
|
||||
{
|
||||
@ -118,29 +133,28 @@ label writeAllVolFields
|
||||
(
|
||||
ensightCase& ensCase,
|
||||
const ensightMesh& ensMesh,
|
||||
const fvMeshSubsetProxy& proxy,
|
||||
const IOobjectList& objects,
|
||||
const bool nodeValues
|
||||
const bool nearCellValue = false
|
||||
)
|
||||
{
|
||||
#undef foamToEnsight_WRITE_FIELD
|
||||
#define foamToEnsight_WRITE_FIELD(PrimitiveType) \
|
||||
#undef ensight_WRITE_FIELD
|
||||
#define ensight_WRITE_FIELD(PrimitiveType) \
|
||||
writeVolFields<PrimitiveType> \
|
||||
( \
|
||||
ensCase, ensMesh, \
|
||||
proxy, \
|
||||
ensCase, \
|
||||
ensMesh, \
|
||||
objects, \
|
||||
nodeValues \
|
||||
nearCellValue \
|
||||
)
|
||||
|
||||
label count = 0;
|
||||
count += foamToEnsight_WRITE_FIELD(scalar);
|
||||
count += foamToEnsight_WRITE_FIELD(vector);
|
||||
count += foamToEnsight_WRITE_FIELD(sphericalTensor);
|
||||
count += foamToEnsight_WRITE_FIELD(symmTensor);
|
||||
count += foamToEnsight_WRITE_FIELD(tensor);
|
||||
count += ensight_WRITE_FIELD(scalar);
|
||||
count += ensight_WRITE_FIELD(vector);
|
||||
count += ensight_WRITE_FIELD(sphericalTensor);
|
||||
count += ensight_WRITE_FIELD(symmTensor);
|
||||
count += ensight_WRITE_FIELD(tensor);
|
||||
|
||||
#undef foamToEnsight_WRITE_FIELD
|
||||
#undef ensight_WRITE_FIELD
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user