ENH: allow wordHashSet filter for IOobjectList::names

- simplifies usage.
  Support syncPar check on names() to detect inconsistencies.

- simplify readFields, ReadFields and other routines by using these
  new methods.
This commit is contained in:
Mark Olesen
2018-07-26 14:56:52 +02:00
parent a8ef5610d0
commit 02ad76df4f
51 changed files with 1434 additions and 1397 deletions

View File

@ -298,10 +298,10 @@ void rewriteField
label nChanged = 0;
forAllConstIter(HashTable<word>, thisNames, iter)
forAllConstIters(thisNames, iter)
{
const word& patchName = iter.key();
const word& newName = iter();
const word& newName = iter.object();
Info<< "Looking for entry for patch " << patchName << endl;
@ -376,13 +376,13 @@ void rewriteFields
const HashTable<word>& nbrNames
)
{
forAll(fieldNames, i)
for (const word& fieldName : fieldNames)
{
rewriteField
(
isTestRun,
runTime,
fieldNames[i],
fieldName,
thisNames,
nbrNames
);

View File

@ -51,7 +51,7 @@ void MapConsistentVolFields
IOobjectList fields = objects.lookupClass(fieldType::typeName);
forAllIter(IOobjectList, fields, fieldIter)
forAllConstIters(fields, fieldIter)
{
Info<< " interpolating " << fieldIter()->name()
<< endl;

View File

@ -60,7 +60,7 @@ void MapLagrangianFields
{
IOobjectList fields = objects.lookupClass(IOField<Type>::typeName);
forAllIter(IOobjectList, fields, fieldIter)
forAllConstIters(fields, fieldIter)
{
Info<< " mapping lagrangian field "
<< fieldIter()->name() << endl;
@ -98,7 +98,7 @@ void MapLagrangianFields
IOobjectList fieldFields =
objects.lookupClass(IOField<Field<Type>>::typeName);
forAllIter(IOobjectList, fieldFields, fieldIter)
forAllConstIters(fieldFields, fieldIter)
{
Info<< " mapping lagrangian fieldField "
<< fieldIter()->name() << endl;
@ -137,7 +137,7 @@ void MapLagrangianFields
IOobjectList fieldFields =
objects.lookupClass(CompactIOField<Field<Type>, Type>::typeName);
forAllIter(IOobjectList, fieldFields, fieldIter)
forAllConstIters(fieldFields, fieldIter)
{
Info<< " mapping lagrangian fieldField "
<< fieldIter()->name() << endl;

View File

@ -51,7 +51,7 @@ void MapVolFields
IOobjectList fields = objects.lookupClass(fieldType::typeName);
forAllIter(IOobjectList, fields, fieldIter)
forAllConstIters(fields, fieldIter)
{
IOobject fieldTargetIOobject
(

View File

@ -39,7 +39,7 @@ void UnMapped(const IOobjectList& objects)
{
IOobjectList fields = objects.lookupClass(Type::typeName);
forAllConstIter(IOobjectList, fields, fieldIter)
forAllConstIters(fields, fieldIter)
{
mvBak(fieldIter()->objectPath(), "unmapped");
}

View File

@ -58,7 +58,7 @@ void MapLagrangianFields
{
IOobjectList fields = objects.lookupClass(IOField<Type>::typeName);
forAllIter(IOobjectList, fields, fieldIter)
forAllConstIters(fields, fieldIter)
{
const word& fieldName = fieldIter()->name();
@ -97,7 +97,7 @@ void MapLagrangianFields
IOobjectList fieldFields =
objects.lookupClass(IOField<Field<Type>>::typeName);
forAllIter(IOobjectList, fieldFields, fieldIter)
forAllConstIters(fieldFields, fieldIter)
{
const word& fieldName = fieldIter()->name();
@ -149,7 +149,7 @@ void MapLagrangianFields
IOobjectList fieldFields =
objects.lookupClass(CompactIOField<Field<Type>, Type>::typeName);
forAllIter(IOobjectList, fieldFields, fieldIter)
forAllConstIters(fieldFields, fieldIter)
{
const word& fieldName = fieldIter()->name();

View File

@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2018 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -131,52 +131,56 @@ void MapVolFields
const fvMesh& meshSource = static_cast<const fvMesh&>(interp.srcRegion());
const fvMesh& meshTarget = static_cast<const fvMesh&>(interp.tgtRegion());
IOobjectList fields = objects.lookupClass(fieldType::typeName);
// Available fields, sorted order
const wordList fieldNames =
(
selectedFields.empty()
? objects.sortedNames(fieldType::typeName)
: objects.sortedNames(fieldType::typeName, selectedFields)
);
forAllIter(IOobjectList, fields, fieldIter)
for (const word& fieldName : fieldNames)
{
const word& fieldName = fieldIter()->name();
const fieldType fieldSource(*(objects[fieldName]), meshSource);
if (selectedFields.empty() || selectedFields.found(fieldName))
IOobject targetIO
(
fieldName,
meshTarget.time().timeName(),
meshTarget,
IOobject::MUST_READ
);
if (targetIO.typeHeaderOk<fieldType>(true))
{
const fieldType fieldSource(*fieldIter(), meshSource);
Info<< " interpolating onto existing field "
<< fieldName << endl;
IOobject targetIO
fieldType fieldTarget(targetIO, meshTarget);
interp.mapSrcToTgt(fieldSource, cop, fieldTarget);
evaluateConstraintTypes(fieldTarget);
fieldTarget.write();
}
else
{
Info<< " creating new field "
<< fieldName << endl;
targetIO.readOpt() = IOobject::NO_READ;
tmp<fieldType> tfieldTarget
(
fieldName,
meshTarget.time().timeName(),
meshTarget,
IOobject::MUST_READ
interp.mapSrcToTgt(fieldSource, cop)
);
if (targetIO.typeHeaderOk<fieldType>(true))
{
Info<< " interpolating onto existing field "
<< fieldName << endl;
fieldType fieldTarget(targetIO, meshTarget);
fieldType fieldTarget(targetIO, tfieldTarget);
interp.mapSrcToTgt(fieldSource, cop, fieldTarget);
evaluateConstraintTypes(fieldTarget);
evaluateConstraintTypes(fieldTarget);
fieldTarget.write();
}
else
{
Info<< " creating new field "
<< fieldName << endl;
targetIO.readOpt() = IOobject::NO_READ;
tmp<fieldType>
tfieldTarget(interp.mapSrcToTgt(fieldSource, cop));
fieldType fieldTarget(targetIO, tfieldTarget);
evaluateConstraintTypes(fieldTarget);
fieldTarget.write();
}
fieldTarget.write();
}
}
}

View File

@ -39,7 +39,7 @@ void UnMapped(const IOobjectList& objects)
{
IOobjectList fields = objects.lookupClass(Type::typeName);
forAllConstIter(IOobjectList, fields, fieldIter)
forAllConstIters(fields, fieldIter)
{
mvBak(fieldIter()->objectPath(), "unmapped");
}