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