fvPatchField, fvsPatchField, pointPatchField: Generalised in-place mapping
The patch field 'autoMap' and 'rmap' functions have been replaced with a
single 'map' function that can used to do any form of in-place
patch-to-patch mapping. The exact form of mapping is now controlled
entirely by the mapper object.
An example 'map' function is shown below:
void nutkRoughWallFunctionFvPatchScalarField::map
(
const fvPatchScalarField& ptf,
const fvPatchFieldMapper& mapper
)
{
nutkWallFunctionFvPatchScalarField::map(ptf, mapper);
const nutkRoughWallFunctionFvPatchScalarField& nrwfpsf =
refCast<const nutkRoughWallFunctionFvPatchScalarField>(ptf);
mapper(Ks_, nrwfpsf.Ks_);
mapper(Cs_, nrwfpsf.Cs_);
}
This single function replaces these two previous functions:
void nutkRoughWallFunctionFvPatchScalarField::autoMap
(
const fvPatchFieldMapper& m
)
{
nutkWallFunctionFvPatchScalarField::autoMap(m);
m(Ks_, Ks_);
m(Cs_, Cs_);
}
void nutkRoughWallFunctionFvPatchScalarField::rmap
(
const fvPatchScalarField& ptf,
const labelList& addr
)
{
nutkWallFunctionFvPatchScalarField::rmap(ptf, addr);
const nutkRoughWallFunctionFvPatchScalarField& nrwfpsf =
refCast<const nutkRoughWallFunctionFvPatchScalarField>(ptf);
Ks_.rmap(nrwfpsf.Ks_, addr);
Cs_.rmap(nrwfpsf.Cs_, addr);
}
Calls to 'autoMap' should be replaced with calls to 'map' with the same
mapper object and the patch field itself provided as the source. Calls
to 'rmap' should be replaced with calls to 'map' by wrapping the
addressing in a 'reverseFvPatchFieldMapper' (or
'reversePointPatchFieldMapper') object.
This change simplifies the creation of new patch fields and hence
improves extensibility. It also provides more options regarding general
mapping strategies between patches. Previously, general abstracted
mapping was only possible in 'autoMap'; i.e., from a patch to itself.
Now, general mapping is possible between different patches.
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -40,7 +40,7 @@ SourceFiles
|
||||
#include "surfaceFields.H"
|
||||
#include "IOobjectList.H"
|
||||
#include "fvPatchFieldMapper.H"
|
||||
#include "setSizeFieldMapper.H"
|
||||
#include "setSizeFvPatchFieldMapper.H"
|
||||
#include "labelIOList.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -93,24 +93,6 @@ class fvFieldReconstructor
|
||||
|
||||
public:
|
||||
|
||||
//- Mapper for sizing only - does not do any actual mapping.
|
||||
class fvPatchFieldReconstructor
|
||||
:
|
||||
public fvPatchFieldMapper,
|
||||
public setSizeFieldMapper
|
||||
{
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct given size
|
||||
fvPatchFieldReconstructor(const label size)
|
||||
:
|
||||
setSizeFieldMapper(size)
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -31,6 +31,7 @@ License
|
||||
#include "emptyFvPatchField.H"
|
||||
#include "emptyFvsPatchField.H"
|
||||
#include "processorCyclicFvPatch.H"
|
||||
#include "reverseFvPatchFieldMapper.H"
|
||||
#include "stringOps.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
@ -183,7 +184,7 @@ Foam::fvFieldReconstructor::reconstructFvVolumeField
|
||||
procField.boundaryField()[procPatchi],
|
||||
completeMesh_.boundary()[completePatchi],
|
||||
DimensionedField<Type, volMesh>::null(),
|
||||
fvPatchFieldReconstructor
|
||||
setSizeFvPatchFieldMapper
|
||||
(
|
||||
completeMesh_.boundary()[completePatchi].size()
|
||||
)
|
||||
@ -191,10 +192,13 @@ Foam::fvFieldReconstructor::reconstructFvVolumeField
|
||||
);
|
||||
}
|
||||
|
||||
patchFields[completePatchi].rmap
|
||||
patchFields[completePatchi].map
|
||||
(
|
||||
procField.boundaryField()[procPatchi],
|
||||
faceProcAddressingBf_[proci][procPatchi] - 1
|
||||
reverseFvPatchFieldMapper
|
||||
(
|
||||
faceProcAddressingBf_[proci][procPatchi] - 1
|
||||
)
|
||||
);
|
||||
}
|
||||
else if (isA<processorCyclicFvPatch>(procPatch))
|
||||
@ -230,10 +234,13 @@ Foam::fvFieldReconstructor::reconstructFvVolumeField
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
patchFields[completePatchi].rmap
|
||||
patchFields[completePatchi].map
|
||||
(
|
||||
procField.boundaryField()[procPatchi],
|
||||
faceProcAddressingBf_[proci][procPatchi] - 1
|
||||
reverseFvPatchFieldMapper
|
||||
(
|
||||
faceProcAddressingBf_[proci][procPatchi] - 1
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -353,7 +360,7 @@ Foam::fvFieldReconstructor::reconstructFvSurfaceField
|
||||
procField.boundaryField()[procPatchi],
|
||||
completeMesh_.boundary()[completePatchi],
|
||||
DimensionedField<Type, surfaceMesh>::null(),
|
||||
fvPatchFieldReconstructor
|
||||
setSizeFvPatchFieldMapper
|
||||
(
|
||||
completeMesh_.boundary()[completePatchi].size()
|
||||
)
|
||||
@ -361,10 +368,13 @@ Foam::fvFieldReconstructor::reconstructFvSurfaceField
|
||||
);
|
||||
}
|
||||
|
||||
patchFields[completePatchi].rmap
|
||||
patchFields[completePatchi].map
|
||||
(
|
||||
procField.boundaryField()[procPatchi],
|
||||
faceProcAddressingBf_[proci][procPatchi] - 1
|
||||
reverseFvPatchFieldMapper
|
||||
(
|
||||
faceProcAddressingBf_[proci][procPatchi] - 1
|
||||
)
|
||||
);
|
||||
}
|
||||
else if (isA<processorCyclicFvPatch>(procPatch))
|
||||
@ -383,10 +393,13 @@ Foam::fvFieldReconstructor::reconstructFvSurfaceField
|
||||
);
|
||||
}
|
||||
|
||||
patchFields[completePatchi].rmap
|
||||
patchFields[completePatchi].map
|
||||
(
|
||||
procField.boundaryField()[procPatchi],
|
||||
faceProcAddressingBf_[proci][procPatchi] - 1
|
||||
reverseFvPatchFieldMapper
|
||||
(
|
||||
faceProcAddressingBf_[proci][procPatchi] - 1
|
||||
)
|
||||
);
|
||||
}
|
||||
else if (isA<processorFvPatch>(procPatch))
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -38,7 +38,7 @@ SourceFiles
|
||||
#include "pointMesh.H"
|
||||
#include "pointFields.H"
|
||||
#include "pointPatchFieldMapper.H"
|
||||
#include "setSizeFieldMapper.H"
|
||||
#include "setSizePointPatchFieldMapper.H"
|
||||
#include "IOobjectList.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -74,24 +74,6 @@ class pointFieldReconstructor
|
||||
|
||||
public:
|
||||
|
||||
//- Mapper for sizing only - does not do any actual mapping.
|
||||
class pointPatchFieldReconstructor
|
||||
:
|
||||
public pointPatchFieldMapper,
|
||||
public setSizeFieldMapper
|
||||
{
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct given size
|
||||
pointPatchFieldReconstructor(const label size)
|
||||
:
|
||||
setSizeFieldMapper(size)
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -25,6 +25,7 @@ License
|
||||
|
||||
#include "pointFieldReconstructor.H"
|
||||
#include "fvMesh.H"
|
||||
#include "reversePointPatchFieldMapper.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
@ -93,14 +94,15 @@ Foam::pointFieldReconstructor::reconstructField(const IOobject& fieldIoObject)
|
||||
{
|
||||
if (!patchFields(curBPatch))
|
||||
{
|
||||
patchFields.set(
|
||||
patchFields.set
|
||||
(
|
||||
curBPatch,
|
||||
pointPatchField<Type>::New
|
||||
(
|
||||
procField.boundaryField()[patchi],
|
||||
completeMesh_.boundary()[curBPatch],
|
||||
DimensionedField<Type, pointMesh>::null(),
|
||||
pointPatchFieldReconstructor
|
||||
setSizePointPatchFieldMapper
|
||||
(
|
||||
completeMesh_.boundary()[curBPatch].size()
|
||||
)
|
||||
@ -108,10 +110,13 @@ Foam::pointFieldReconstructor::reconstructField(const IOobject& fieldIoObject)
|
||||
);
|
||||
}
|
||||
|
||||
patchFields[curBPatch].rmap
|
||||
patchFields[curBPatch].map
|
||||
(
|
||||
procField.boundaryField()[patchi],
|
||||
patchPointAddressing_[proci][patchi]
|
||||
reversePointPatchFieldMapper
|
||||
(
|
||||
patchPointAddressing_[proci][patchi]
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user