BUG: inconsistent field ordering in PDRMesh (fixes #1069)
This commit is contained in:
parent
b016b1664e
commit
2ac5df6f93
@ -131,69 +131,69 @@ template<class Type>
|
||||
void subsetVolFields
|
||||
(
|
||||
const fvMeshSubset& subsetter,
|
||||
const IOobjectList& objectsList,
|
||||
const IOobjectList& objects,
|
||||
const label patchi,
|
||||
const Type& exposedValue,
|
||||
const word GeomVolType,
|
||||
PtrList<GeometricField<Type, fvPatchField, volMesh>>& subFields
|
||||
)
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> GeoField;
|
||||
|
||||
const fvMesh& baseMesh = subsetter.baseMesh();
|
||||
|
||||
label i = 0;
|
||||
label nFields = 0;
|
||||
|
||||
forAllConstIter(IOobjectList , objectsList, iter)
|
||||
for (const word& fieldName : objects.sortedNames<GeoField>())
|
||||
{
|
||||
if (iter()->headerClassName() == GeomVolType)
|
||||
const IOobject* ioptr = objects.findObject(fieldName);
|
||||
|
||||
if (!nFields)
|
||||
{
|
||||
const word fieldName = iter()->name();
|
||||
Info<< "Subsetting " << GeoField::typeName << nl;
|
||||
}
|
||||
Info<< " " << fieldName << endl;
|
||||
|
||||
Info<< "Subsetting field " << fieldName << endl;
|
||||
GeoField origField(*ioptr, baseMesh);
|
||||
|
||||
GeometricField<Type, fvPatchField, volMesh> volField
|
||||
(
|
||||
*iter(),
|
||||
baseMesh
|
||||
);
|
||||
subFields.set(nFields, subsetter.interpolate(origField));
|
||||
|
||||
subFields.set(i, subsetter.interpolate(volField));
|
||||
// Explicitly set exposed faces (in patchi) to exposedValue.
|
||||
if (patchi >= 0)
|
||||
{
|
||||
fvPatchField<Type>& fld =
|
||||
subFields[nFields].boundaryFieldRef()[patchi];
|
||||
|
||||
// Explicitly set exposed faces (in patchi) to exposedValue.
|
||||
if (patchi >= 0)
|
||||
const label newStart = fld.patch().patch().start();
|
||||
const label oldPatchi = subsetter.patchMap()[patchi];
|
||||
|
||||
if (oldPatchi == -1)
|
||||
{
|
||||
fvPatchField<Type>& fld =
|
||||
subFields[i++].boundaryFieldRef()[patchi];
|
||||
// New patch. Reset whole value.
|
||||
fld = exposedValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reset faces that originate from different patch
|
||||
// or internal faces.
|
||||
|
||||
label newStart = fld.patch().patch().start();
|
||||
const fvPatchField<Type>& origPfld =
|
||||
origField.boundaryField()[oldPatchi];
|
||||
|
||||
label oldPatchi = subsetter.patchMap()[patchi];
|
||||
const label oldSize = origPfld.size();
|
||||
const label oldStart = origPfld.patch().patch().start();
|
||||
|
||||
if (oldPatchi == -1)
|
||||
forAll(fld, j)
|
||||
{
|
||||
// New patch. Reset whole value.
|
||||
fld = exposedValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reset those faces that originate from different patch
|
||||
// or internal faces.
|
||||
label oldSize = volField.boundaryField()[oldPatchi].size();
|
||||
label oldStart = volField.boundaryField()
|
||||
[
|
||||
oldPatchi
|
||||
].patch().patch().start();
|
||||
const label oldFacei = subsetter.faceMap()[newStart+j];
|
||||
|
||||
forAll(fld, j)
|
||||
if (oldFacei < oldStart || oldFacei >= oldStart+oldSize)
|
||||
{
|
||||
label oldFacei = subsetter.faceMap()[newStart+j];
|
||||
|
||||
if (oldFacei < oldStart || oldFacei >= oldStart+oldSize)
|
||||
{
|
||||
fld[j] = exposedValue;
|
||||
}
|
||||
fld[j] = exposedValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
++nFields;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -203,71 +203,70 @@ template<class Type>
|
||||
void subsetSurfaceFields
|
||||
(
|
||||
const fvMeshSubset& subsetter,
|
||||
const IOobjectList& objectsList,
|
||||
const IOobjectList& objects,
|
||||
const label patchi,
|
||||
const Type& exposedValue,
|
||||
const word GeomSurfType,
|
||||
PtrList<GeometricField<Type, fvsPatchField, surfaceMesh>>& subFields
|
||||
)
|
||||
{
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> GeoField;
|
||||
|
||||
const fvMesh& baseMesh = subsetter.baseMesh();
|
||||
|
||||
label i(0);
|
||||
label nFields = 0;
|
||||
|
||||
forAllConstIter(IOobjectList , objectsList, iter)
|
||||
for (const word& fieldName : objects.sortedNames<GeoField>())
|
||||
{
|
||||
if (iter()->headerClassName() == GeomSurfType)
|
||||
const IOobject* ioptr = objects.findObject(fieldName);
|
||||
|
||||
if (!nFields)
|
||||
{
|
||||
const word& fieldName = iter.key();
|
||||
Info<< "Subsetting " << GeoField::typeName << nl;
|
||||
}
|
||||
Info<< " " << fieldName << endl;
|
||||
|
||||
Info<< "Subsetting field " << fieldName << endl;
|
||||
GeoField origField(*ioptr, baseMesh);
|
||||
|
||||
GeometricField<Type, fvsPatchField, surfaceMesh> volField
|
||||
(
|
||||
*iter(),
|
||||
baseMesh
|
||||
);
|
||||
subFields.set(nFields, subsetter.interpolate(origField));
|
||||
|
||||
subFields.set(i, subsetter.interpolate(volField));
|
||||
// Explicitly set exposed faces (in patchi) to exposedValue.
|
||||
if (patchi >= 0)
|
||||
{
|
||||
fvsPatchField<Type>& fld =
|
||||
subFields[nFields].boundaryFieldRef()[patchi];
|
||||
|
||||
const label newStart = fld.patch().patch().start();
|
||||
const label oldPatchi = subsetter.patchMap()[patchi];
|
||||
|
||||
// Explicitly set exposed faces (in patchi) to exposedValue.
|
||||
if (patchi >= 0)
|
||||
if (oldPatchi == -1)
|
||||
{
|
||||
fvsPatchField<Type>& fld =
|
||||
subFields[i++].boundaryFieldRef()[patchi];
|
||||
// New patch. Reset whole value.
|
||||
fld = exposedValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reset faces that originate from different patch
|
||||
// or internal faces.
|
||||
|
||||
label newStart = fld.patch().patch().start();
|
||||
const fvsPatchField<Type>& origPfld =
|
||||
origField.boundaryField()[oldPatchi];
|
||||
|
||||
label oldPatchi = subsetter.patchMap()[patchi];
|
||||
const label oldSize = origPfld.size();
|
||||
const label oldStart = origPfld.patch().patch().start();
|
||||
|
||||
if (oldPatchi == -1)
|
||||
forAll(fld, j)
|
||||
{
|
||||
// New patch. Reset whole value.
|
||||
fld = exposedValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Reset those faces that originate from different patch
|
||||
// or internal faces.
|
||||
label oldSize = volField.boundaryField()[oldPatchi].size();
|
||||
label oldStart = volField.boundaryField()
|
||||
[
|
||||
oldPatchi
|
||||
].patch().patch().start();
|
||||
const label oldFacei = subsetter.faceMap()[newStart+j];
|
||||
|
||||
forAll(fld, j)
|
||||
if (oldFacei < oldStart || oldFacei >= oldStart+oldSize)
|
||||
{
|
||||
label oldFacei = subsetter.faceMap()[newStart+j];
|
||||
|
||||
if (oldFacei < oldStart || oldFacei >= oldStart+oldSize)
|
||||
{
|
||||
fld[j] = exposedValue;
|
||||
}
|
||||
fld[j] = exposedValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
++nFields;
|
||||
}
|
||||
}
|
||||
|
||||
@ -287,18 +286,11 @@ void initCreatedPatches
|
||||
mesh.objectRegistry::lookupClass<GeoField>()
|
||||
);
|
||||
|
||||
for
|
||||
(
|
||||
typename HashTable<const GeoField*>::
|
||||
iterator fieldIter = fields.begin();
|
||||
fieldIter != fields.end();
|
||||
++fieldIter
|
||||
)
|
||||
forAllIters(fields, fieldIter)
|
||||
{
|
||||
GeoField& field = const_cast<GeoField&>(*fieldIter());
|
||||
|
||||
typename GeoField::Boundary& fieldBf =
|
||||
field.boundaryFieldRef();
|
||||
auto& fieldBf = field.boundaryFieldRef();
|
||||
|
||||
forAll(fieldBf, patchi)
|
||||
{
|
||||
@ -321,7 +313,7 @@ template<class TopoSet>
|
||||
void subsetTopoSets
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const IOobjectList& objectsList,
|
||||
const IOobjectList& objects,
|
||||
const labelList& map,
|
||||
const fvMesh& subMesh,
|
||||
PtrList<TopoSet>& subSets
|
||||
@ -329,12 +321,12 @@ void subsetTopoSets
|
||||
{
|
||||
// Read original sets
|
||||
PtrList<TopoSet> sets;
|
||||
ReadFields<TopoSet>(objectsList, sets);
|
||||
ReadFields<TopoSet>(objects, sets);
|
||||
|
||||
subSets.setSize(sets.size());
|
||||
forAll(sets, i)
|
||||
subSets.resize(sets.size());
|
||||
forAll(sets, seti)
|
||||
{
|
||||
TopoSet& set = sets[i];
|
||||
TopoSet& set = sets[seti];
|
||||
|
||||
Info<< "Subsetting " << set.type() << " " << set.name() << endl;
|
||||
|
||||
@ -356,10 +348,10 @@ void subsetTopoSets
|
||||
|
||||
subSets.set
|
||||
(
|
||||
i,
|
||||
seti,
|
||||
new TopoSet(subMesh, set.name(), nSet, IOobject::AUTO_WRITE)
|
||||
);
|
||||
TopoSet& subSet = subSets[i];
|
||||
TopoSet& subSet = subSets[seti];
|
||||
|
||||
forAll(map, i)
|
||||
{
|
||||
@ -847,7 +839,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
// Read vol fields and subset.
|
||||
|
||||
wordList scalarNames(objects.names(volScalarField::typeName));
|
||||
wordList scalarNames(objects.sortedNames<volScalarField>());
|
||||
PtrList<volScalarField> scalarFlds(scalarNames.size());
|
||||
subsetVolFields
|
||||
(
|
||||
@ -855,11 +847,10 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
scalar(Zero),
|
||||
volScalarField::typeName,
|
||||
scalarFlds
|
||||
);
|
||||
|
||||
wordList vectorNames(objects.names(volVectorField::typeName));
|
||||
wordList vectorNames(objects.sortedNames<volVectorField>());
|
||||
PtrList<volVectorField> vectorFlds(vectorNames.size());
|
||||
subsetVolFields
|
||||
(
|
||||
@ -867,17 +858,16 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
vector(Zero),
|
||||
volVectorField::typeName,
|
||||
vectorFlds
|
||||
);
|
||||
|
||||
wordList sphericalTensorNames
|
||||
wordList sphTensorNames
|
||||
(
|
||||
objects.names(volSphericalTensorField::typeName)
|
||||
objects.sortedNames<volSphericalTensorField>()
|
||||
);
|
||||
PtrList<volSphericalTensorField> sphericalTensorFlds
|
||||
PtrList<volSphericalTensorField> sphTensorFlds
|
||||
(
|
||||
sphericalTensorNames.size()
|
||||
sphTensorNames.size()
|
||||
);
|
||||
subsetVolFields
|
||||
(
|
||||
@ -885,11 +875,10 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
sphericalTensor(Zero),
|
||||
volSphericalTensorField::typeName,
|
||||
sphericalTensorFlds
|
||||
sphTensorFlds
|
||||
);
|
||||
|
||||
wordList symmTensorNames(objects.names(volSymmTensorField::typeName));
|
||||
wordList symmTensorNames(objects.sortedNames<volSymmTensorField>());
|
||||
PtrList<volSymmTensorField> symmTensorFlds(symmTensorNames.size());
|
||||
subsetVolFields
|
||||
(
|
||||
@ -897,11 +886,10 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
symmTensor(Zero),
|
||||
volSymmTensorField::typeName,
|
||||
symmTensorFlds
|
||||
);
|
||||
|
||||
wordList tensorNames(objects.names(volTensorField::typeName));
|
||||
wordList tensorNames(objects.sortedNames<volTensorField>());
|
||||
PtrList<volTensorField> tensorFlds(tensorNames.size());
|
||||
subsetVolFields
|
||||
(
|
||||
@ -909,13 +897,12 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
tensor(Zero),
|
||||
volTensorField::typeName,
|
||||
tensorFlds
|
||||
);
|
||||
|
||||
// Read surface fields and subset.
|
||||
|
||||
wordList surfScalarNames(objects.names(surfaceScalarField::typeName));
|
||||
wordList surfScalarNames(objects.sortedNames<surfaceScalarField>());
|
||||
PtrList<surfaceScalarField> surfScalarFlds(surfScalarNames.size());
|
||||
subsetSurfaceFields
|
||||
(
|
||||
@ -923,11 +910,10 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
scalar(Zero),
|
||||
surfaceScalarField::typeName,
|
||||
surfScalarFlds
|
||||
);
|
||||
|
||||
wordList surfVectorNames(objects.names(surfaceVectorField::typeName));
|
||||
wordList surfVectorNames(objects.sortedNames<surfaceVectorField>());
|
||||
PtrList<surfaceVectorField> surfVectorFlds(surfVectorNames.size());
|
||||
subsetSurfaceFields
|
||||
(
|
||||
@ -935,17 +921,16 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
vector(Zero),
|
||||
surfaceVectorField::typeName,
|
||||
surfVectorFlds
|
||||
);
|
||||
|
||||
wordList surfSphericalTensorNames
|
||||
wordList surfSphTensorNames
|
||||
(
|
||||
objects.names(surfaceSphericalTensorField::typeName)
|
||||
objects.sortedNames<surfaceSphericalTensorField>()
|
||||
);
|
||||
PtrList<surfaceSphericalTensorField> surfSphericalTensorFlds
|
||||
(
|
||||
surfSphericalTensorNames.size()
|
||||
surfSphTensorNames.size()
|
||||
);
|
||||
subsetSurfaceFields
|
||||
(
|
||||
@ -953,13 +938,12 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
sphericalTensor(Zero),
|
||||
surfaceSphericalTensorField::typeName,
|
||||
surfSphericalTensorFlds
|
||||
);
|
||||
|
||||
wordList surfSymmTensorNames
|
||||
(
|
||||
objects.names(surfaceSymmTensorField::typeName)
|
||||
objects.sortedNames<surfaceSymmTensorField>()
|
||||
);
|
||||
|
||||
PtrList<surfaceSymmTensorField> surfSymmTensorFlds
|
||||
@ -973,11 +957,10 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
symmTensor(Zero),
|
||||
surfaceSymmTensorField::typeName,
|
||||
surfSymmTensorFlds
|
||||
);
|
||||
|
||||
wordList surfTensorNames(objects.names(surfaceTensorField::typeName));
|
||||
wordList surfTensorNames(objects.sortedNames<surfaceTensorField>());
|
||||
PtrList<surfaceTensorField> surfTensorFlds(surfTensorNames.size());
|
||||
subsetSurfaceFields
|
||||
(
|
||||
@ -985,7 +968,6 @@ int main(int argc, char *argv[])
|
||||
objects,
|
||||
defaultPatchi,
|
||||
tensor(Zero),
|
||||
surfaceTensorField::typeName,
|
||||
surfTensorFlds
|
||||
);
|
||||
|
||||
@ -1023,7 +1005,6 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!overwrite)
|
||||
{
|
||||
++runTime;
|
||||
@ -1043,10 +1024,10 @@ int main(int argc, char *argv[])
|
||||
vectorFlds[i].rename(vectorNames[i]);
|
||||
vectorFlds[i].writeOpt() = IOobject::AUTO_WRITE;
|
||||
}
|
||||
forAll(sphericalTensorFlds, i)
|
||||
forAll(sphTensorFlds, i)
|
||||
{
|
||||
sphericalTensorFlds[i].rename(sphericalTensorNames[i]);
|
||||
sphericalTensorFlds[i].writeOpt() = IOobject::AUTO_WRITE;
|
||||
sphTensorFlds[i].rename(sphTensorNames[i]);
|
||||
sphTensorFlds[i].writeOpt() = IOobject::AUTO_WRITE;
|
||||
}
|
||||
forAll(symmTensorFlds, i)
|
||||
{
|
||||
@ -1072,7 +1053,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
forAll(surfSphericalTensorFlds, i)
|
||||
{
|
||||
surfSphericalTensorFlds[i].rename(surfSphericalTensorNames[i]);
|
||||
surfSphericalTensorFlds[i].rename(surfSphTensorNames[i]);
|
||||
surfSphericalTensorFlds[i].writeOpt() = IOobject::AUTO_WRITE;
|
||||
}
|
||||
forAll(surfSymmTensorFlds, i)
|
||||
@ -1179,7 +1160,7 @@ int main(int argc, char *argv[])
|
||||
(
|
||||
subsetter.subMesh(),
|
||||
map,
|
||||
0.0
|
||||
Zero
|
||||
);
|
||||
initCreatedPatches<volVectorField>
|
||||
(
|
||||
@ -1210,7 +1191,7 @@ int main(int argc, char *argv[])
|
||||
(
|
||||
subsetter.subMesh(),
|
||||
map,
|
||||
0.0
|
||||
Zero
|
||||
);
|
||||
initCreatedPatches<surfaceVectorField>
|
||||
(
|
||||
|
Loading…
Reference in New Issue
Block a user