diff --git a/applications/utilities/mesh/manipulation/checkMesh/writeFields.C b/applications/utilities/mesh/manipulation/checkMesh/writeFields.C index f58db28de7db08ab8921444f77a4c54d3ce5d861..dfc825a817b84f53c0efffe1a34dcbf3ec14f1cd 100644 --- a/applications/utilities/mesh/manipulation/checkMesh/writeFields.C +++ b/applications/utilities/mesh/manipulation/checkMesh/writeFields.C @@ -616,6 +616,17 @@ void Foam::writeFields } if (selectedFields.found("faceZone")) { + // Determine for each face the zone index (scalar for ease of + // manipulation) + scalarField zoneID(mesh.nFaces(), -1); + const faceZoneMesh& czs = mesh.faceZones(); + for (const auto& zone : czs) + { + UIndirectList<scalar>(zoneID, zone) = zone.index(); + } + + + // Split into internal and boundary values surfaceScalarField faceZone ( IOobject @@ -632,10 +643,13 @@ void Foam::writeFields calculatedFvsPatchScalarField::typeName ); - const faceZoneMesh& czs = mesh.faceZones(); - for (const auto& zone : czs) + faceZone.primitiveFieldRef() = + SubField<scalar>(zoneID, mesh.nInternalFaces()); + surfaceScalarField::Boundary& bfld = faceZone.boundaryFieldRef(); + for (auto& pfld : bfld) { - UIndirectList<scalar>(faceZone, zone) = zone.index(); + const fvPatch& fvp = pfld.patch(); + pfld == SubField<scalar>(zoneID, fvp.size(), fvp.start()); } //faceZone.correctBoundaryConditions();