ENH: mapFields FO - read schemes and cache mapped fields by default. See #1390

This commit is contained in:
Andrew Heather
2019-08-05 09:48:25 +01:00
parent ef9bb4ae16
commit 492c30c34e
2 changed files with 40 additions and 22 deletions

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2016 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2016-2019 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -66,10 +66,12 @@ void Foam::functionObjects::mapFields::createInterpolation
(
mapRegionName,
meshTarget.time().constant(),
meshTarget.time()
meshTarget.time(),
IOobject::MUST_READ
)
)
);
const fvMesh& mapRegion = mapRegionPtr_();
const word mapMethodName(dict.get<word>("mapMethod"));
if (!meshToMesh::interpolationMethodNames_.found(mapMethodName))
@ -161,13 +163,17 @@ Foam::functionObjects::mapFields::mapFields
bool Foam::functionObjects::mapFields::read(const dictionary& dict)
{
fvMeshFunctionObject::read(dict);
if (fvMeshFunctionObject::read(dict))
{
dict.readEntry("fields", fieldNames_);
createInterpolation(dict);
return true;
}
return false;
}
bool Foam::functionObjects::mapFields::execute()
{

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2016-2019 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -123,29 +123,41 @@ bool Foam::functionObjects::mapFields::writeFieldType() const
wordList fieldNames(this->mesh_.names(VolFieldType::typeName));
labelList selected = findStrings(fieldNames_, fieldNames);
forAll(selected, i)
for (const label fieldi : selected)
{
const word& fieldName = fieldNames[selected[i]];
const word& fieldName = fieldNames[fieldi];
const VolFieldType& field = lookupObject<VolFieldType>(fieldName);
Log << " " << fieldName;
IOobject mapRegionIO
if (!mapRegion.foundObject<VolFieldType>(fieldName))
{
VolFieldType* tmappedField =
new VolFieldType
(
IOobject
(
fieldName,
time_.timeName(),
mapRegion
mapRegion,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mapRegion,
dimensioned<Type>(field.dimensions(), Zero)
);
tmp<VolFieldType> tfieldMapRegion(interpPtr_->mapTgtToSrc(field));
tmappedField->store();
}
Log << ": interpolated";
VolFieldType& mappedField =
mapRegion.lookupObjectRef<VolFieldType>(fieldName);
VolFieldType fieldMapRegion(mapRegionIO, tfieldMapRegion);
mappedField = interpPtr_->mapTgtToSrc(field);
evaluateConstraintTypes(fieldMapRegion);
Log << " " << fieldName << ": interpolated";
fieldMapRegion.write();
evaluateConstraintTypes(mappedField);
mappedField.write();
Log << " and written" << nl;
}