From f466a46775728149b306f82db26214d8c6d18235 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Thu, 9 Jan 2014 16:07:52 +0000 Subject: [PATCH] BUG: fvMeshAdder: use rmap instead of mapping ourselves --- src/dynamicMesh/fvMeshAdder/fvMeshAdder.H | 11 +- .../fvMeshAdder/fvMeshAdderTemplates.C | 114 ++++++------------ 2 files changed, 37 insertions(+), 88 deletions(-) diff --git a/src/dynamicMesh/fvMeshAdder/fvMeshAdder.H b/src/dynamicMesh/fvMeshAdder/fvMeshAdder.H index a5cc39dc041..cc4240c77e7 100644 --- a/src/dynamicMesh/fvMeshAdder/fvMeshAdder.H +++ b/src/dynamicMesh/fvMeshAdder/fvMeshAdder.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -81,15 +81,6 @@ private: const label unmappedIndex ); - //- Map from old to new according to map. Handles map = -1. - template<class Type> - static void map - ( - const Field<Type>&, - const labelList& map, - Field<Type>& - ); - //- Update single volField. template<class Type> static void MapVolField diff --git a/src/dynamicMesh/fvMeshAdder/fvMeshAdderTemplates.C b/src/dynamicMesh/fvMeshAdder/fvMeshAdderTemplates.C index d5afadb9b39..296bb3c513d 100644 --- a/src/dynamicMesh/fvMeshAdder/fvMeshAdderTemplates.C +++ b/src/dynamicMesh/fvMeshAdder/fvMeshAdderTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,26 +30,6 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -template<class Type> -void Foam::fvMeshAdder::map -( - const Field<Type>& oldFld, - const labelList& oldToNew, - Field<Type>& fld -) -{ - forAll(oldFld, cellI) - { - label newCellI = oldToNew[cellI]; - - if (newCellI >= 0 && newCellI < fld.size()) - { - fld[newCellI] = oldFld[cellI]; - } - } -} - - template<class Type> void Foam::fvMeshAdder::MapVolField ( @@ -73,8 +53,8 @@ void Foam::fvMeshAdder::MapVolField intFld.setSize(mesh.nCells()); - map(oldInternalField, meshMap.oldCellMap(), intFld); - map(fldToAdd.internalField(), meshMap.addedCellMap(), intFld); + intFld.rmap(oldInternalField, meshMap.oldCellMap()); + intFld.rmap(fldToAdd.internalField(), meshMap.addedCellMap()); } @@ -156,7 +136,7 @@ void Foam::fvMeshAdder::MapVolField oldPatchSizes[patchI], meshMap.oldFaceMap(), mesh.boundaryMesh()[newPatchI], - 0 // unmapped value + -1 // unmapped value ) ); @@ -218,7 +198,7 @@ void Foam::fvMeshAdder::MapVolField oldPatch.size(), meshMap.addedFaceMap(), newPatch, - 0 // unmapped values + -1 // unmapped values ) ); @@ -241,34 +221,23 @@ void Foam::fvMeshAdder::MapVolField // PatchField will have correct size already. Just slot in // my elements. - // From new patch faces to patch faces on added mesh. This - // time keep unmapped elements -1. - labelList newToAdded - ( - calcPatchMap - ( - oldPatch.start(), - oldPatch.size(), - meshMap.addedFaceMap(), - newPatch, - -1 // unmapped values - ) - ); - - const fvPatchField<Type>& addedFld = - fldToAdd.boundaryField()[patchI]; - - fvPatchField<Type>& newFld = bfld[newPatchI]; - - forAll(newFld, i) + labelList addedToNew(oldPatch.size(), -1); + forAll(addedToNew, i) { - label oldFaceI = newToAdded[i]; - - if (oldFaceI >= 0 && oldFaceI < addedFld.size()) + label addedFaceI = oldPatch.start()+i; + label newFaceI = meshMap.addedFaceMap()[addedFaceI]; + label patchFaceI = newFaceI-newPatch.start(); + if (patchFaceI >= 0 && patchFaceI < newPatch.size()) { - newFld[i] = addedFld[oldFaceI]; + addedToNew[i] = patchFaceI; } } + + bfld[newPatchI].rmap + ( + fldToAdd.boundaryField()[patchI], + addedToNew + ); } } } @@ -375,8 +344,9 @@ void Foam::fvMeshAdder::MapSurfaceField intFld.setSize(mesh.nInternalFaces()); - map(oldField, meshMap.oldFaceMap(), intFld); - map(fldToAdd, meshMap.addedFaceMap(), intFld); + intFld.rmap(oldField, meshMap.oldFaceMap()); + intFld.rmap(fldToAdd, meshMap.addedFaceMap()); + // Faces that were boundary faces but are not anymore. // Use owner value (so lowest numbered cell, i.e. from 'old' not 'added' @@ -474,13 +444,12 @@ void Foam::fvMeshAdder::MapSurfaceField oldPatchSizes[patchI], meshMap.oldFaceMap(), mesh.boundaryMesh()[newPatchI], - 0 // unmapped value + -1 // unmapped value ) ); directFvPatchFieldMapper patchMapper(newToOld); - // Create new patchField with same type as existing one. // Note: // - boundaryField already in new order so access with newPatchI @@ -536,7 +505,7 @@ void Foam::fvMeshAdder::MapSurfaceField oldPatch.size(), meshMap.addedFaceMap(), newPatch, - 0 // unmapped values + -1 // unmapped values ) ); @@ -559,34 +528,23 @@ void Foam::fvMeshAdder::MapSurfaceField // PatchField will have correct size already. Just slot in // my elements. - // From new patch faces to patch faces on added mesh. This - // time keep unmapped elements -1. - labelList newToAdded - ( - calcPatchMap - ( - oldPatch.start(), - oldPatch.size(), - meshMap.addedFaceMap(), - newPatch, - -1 // unmapped values - ) - ); - - const fvsPatchField<Type>& addedFld = - fldToAdd.boundaryField()[patchI]; - - fvsPatchField<Type>& newFld = bfld[newPatchI]; - - forAll(newFld, i) + labelList addedToNew(oldPatch.size(), -1); + forAll(addedToNew, i) { - label oldFaceI = newToAdded[i]; - - if (oldFaceI >= 0 && oldFaceI < addedFld.size()) + label addedFaceI = oldPatch.start()+i; + label newFaceI = meshMap.addedFaceMap()[addedFaceI]; + label patchFaceI = newFaceI-newPatch.start(); + if (patchFaceI >= 0 && patchFaceI < newPatch.size()) { - newFld[i] = addedFld[oldFaceI]; + addedToNew[i] = patchFaceI; } } + + bfld[newPatchI].rmap + ( + fldToAdd.boundaryField()[patchI], + addedToNew + ); } } } -- GitLab