View Issue Details

IDProjectCategoryView StatusLast Update
0001817OpenFOAM[All Projects] Bugpublic2015-08-07 15:54
ReporterwyldckatAssigned Tohenry 
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
PlatformGNU/LinuxOSUbuntuOS Version12.04
Product Versiondev 
Fixed in Version 
Summary0001817: Building with 64-bit labels triggers error messages in blockMeshMergeFast.C
DescriptionThe error messages should be self-explanatory ;)

    blockMesh/blockMeshMergeFast.C: In function ‘void Foam::genFaceFaceRotMap()’:
    blockMesh/blockMeshMergeFast.C:78:31: error: call of overloaded ‘mag(int&)’ is ambiguous
    ...
    blockMesh/blockMeshMergeFast.C: In function ‘Foam::label Foam::mapij(int, Foam::label, Foam::label)’:
    blockMesh/blockMeshMergeFast.C:200:34: error: call of overloaded ‘mag(const int&)’ is ambiguous
    ...
    blockMesh/blockMeshMergeFast.C: In member function ‘void Foam::blockMesh::calcMergeInfoFast()’:
    blockMesh/blockMeshMergeFast.C:408:40: error: call of overloaded ‘mag(int&)’ is ambiguous
    ...
    blockMesh/blockMeshMergeFast.C:409:40: error: call of overloaded ‘mag(int&)’ is ambiguous

Attached is the updated file "blockMeshMergeFast.C" for the path "src/mesh/blockMesh/blockMesh/", as well as a patch for visual inspection here on the bug tracker.
TagsNo tags attached.

Activities

wyldckat

2015-08-07 14:35

updater  

blockMeshMergeFast.C (16,226 bytes)

wyldckat

2015-08-07 14:36

updater  

blockMeshMergeFast.C.a15ee7de5e09.patch (4,496 bytes)
diff --git a/src/mesh/blockMesh/blockMesh/blockMeshMergeFast.C b/src/mesh/blockMesh/blockMesh/blockMeshMergeFast.C
index d6d2a2d..ba93f1f 100644
--- a/src/mesh/blockMesh/blockMesh/blockMeshMergeFast.C
+++ b/src/mesh/blockMesh/blockMesh/blockMeshMergeFast.C
@@ -42,7 +42,7 @@ namespace Foam
 // );
 
 // Face-edge directions
-static const int faceEdgeDirs[6][4] =
+static const label faceEdgeDirs[6][4] =
 {
     {2, 1, -2, -1},
     {1, 2, -1, -2},
@@ -53,24 +53,24 @@ static const int faceEdgeDirs[6][4] =
 };
 
 // The face-face-rotation direction correspondence map
-static Pair<int> faceFaceRotMap[6][6][4];
+static Pair<label> faceFaceRotMap[6][6][4];
 
 // Generate the face-face-rotation direction correspondence map
 void genFaceFaceRotMap()
 {
-    for(int facePi=0; facePi<6; facePi++)
+    for(label facePi=0; facePi<6; facePi++)
     {
-        for(int faceNi=0; faceNi<6; faceNi++)
+        for(label faceNi=0; faceNi<6; faceNi++)
         {
-            for(int rot=0; rot<4; rot++)
+            for(label rot=0; rot<4; rot++)
             {
-                Pair<int>& map = faceFaceRotMap[facePi][faceNi][rot];
+                Pair<label>& map = faceFaceRotMap[facePi][faceNi][rot];
 
-                for(int Pp=0; Pp<2; Pp++)
+                for(label Pp=0; Pp<2; Pp++)
                 {
-                    int Pdir = faceEdgeDirs[facePi][Pp];
-                    int Np = (3 - Pp + rot)%4;
-                    int Ndir = faceEdgeDirs[faceNi][Np];
+                    label Pdir = faceEdgeDirs[facePi][Pp];
+                    label Np = (3 - Pp + rot)%4;
+                    label Ndir = faceEdgeDirs[faceNi][Np];
                     map[Pdir-1] = -Ndir;
                 }
 
@@ -86,7 +86,7 @@ void genFaceFaceRotMap()
 }
 
 // Return the direction map for the merge-faces
-Pair<int> faceMap
+Pair<label> faceMap
 (
     const label facePi,
     const face& faceP,
@@ -95,7 +95,7 @@ Pair<int> faceMap
 )
 {
     // Search for the point on faceN corresponding to the 0-point on faceP
-    for(int rot=0; rot<4; rot++)
+    for(label rot=0; rot<4; rot++)
     {
         if (faceN[rot] == faceP[0])
         {
@@ -111,7 +111,7 @@ Pair<int> faceMap
         << faceP << " and " << faceN
         << exit(FatalError);
 
-    return Pair<int>(0, 0);
+    return Pair<label>(0, 0);
 }
 
 // Set the block and face indices for all the merge faces
@@ -161,7 +161,7 @@ Pair<label> faceNij(const label facei, const block& block)
 {
     Pair<label> fnij;
 
-    int i = facei/2;
+    label i = facei/2;
 
     if (i == 0)
     {
@@ -183,7 +183,7 @@ Pair<label> faceNij(const label facei, const block& block)
 }
 
 // Sign the index corresponding to the map
-inline label signIndex(const int map, const label i)
+inline label signIndex(const label map, const label i)
 {
     return map < 0 ? -i-1 : i;
 }
@@ -195,7 +195,7 @@ inline label unsignIndex(const label i, const label ni)
 }
 
 // Return the mapped index
-inline label mapij(const int map, const label i, const label j)
+inline label mapij(const label map, const label i, const label j)
 {
     return signIndex(map, mag(map) == 1 ? i : j);
 }
@@ -203,7 +203,7 @@ inline label mapij(const int map, const label i, const label j)
 // Return the face point index
 inline label facePoint
 (
-    const int facei,
+    const label facei,
     const block& block,
     const label i,
     const label j
@@ -248,7 +248,7 @@ inline label facePointN
 // Return the neighbour face point from the mapped indices
 inline label facePointN
 (
-    const int facei,
+    const label facei,
     const block& block,
     const label i,
     const label j
@@ -276,8 +276,8 @@ inline label facePointN
 // Return the neighbour face point using the map
 inline label facePointN
 (
-    const int facei,
-    const Pair<int>& fmap,
+    const label facei,
+    const Pair<label>& fmap,
     const block& block,
     const label i,
     const label j
@@ -377,7 +377,7 @@ void Foam::blockMesh::calcMergeInfoFast()
         label blockNi = mergeBlockN[topoFacei].first();
         label blockNfacei = mergeBlockN[topoFacei].second();
 
-        Pair<int> fmap
+        Pair<label> fmap
         (
             faceMap
             (
@@ -504,7 +504,7 @@ void Foam::blockMesh::calcMergeInfoFast()
             label blockNi = mergeBlockN[topoFacei].first();
             label blockNfacei = mergeBlockN[topoFacei].second();
 
-            Pair<int> fmap
+            Pair<label> fmap
             (
                 faceMap
                 (

henry

2015-08-07 14:56

manager   ~0005205

Thanks for the bug-report. I am testing 64bit label support now.

I chose int rather than label for the addressing in blockMeshMergeFast.C specifically because 64bit addressing is not need for looping from 0 to 6. The ambiguity in mag is simply because mag is currently defined for label rather than int32_t and int64_t; I will rectify this.

henry

2015-08-07 15:54

manager   ~0005207

Resolved by commit 44e7fc454df95f529aeff77b11d0d6a2d1669bb0

Issue History

Date Modified Username Field Change
2015-08-07 14:35 wyldckat New Issue
2015-08-07 14:35 wyldckat File Added: blockMeshMergeFast.C
2015-08-07 14:36 wyldckat File Added: blockMeshMergeFast.C.a15ee7de5e09.patch
2015-08-07 14:56 henry Note Added: 0005205
2015-08-07 15:54 henry Note Added: 0005207
2015-08-07 15:54 henry Status new => resolved
2015-08-07 15:54 henry Resolution open => fixed
2015-08-07 15:54 henry Assigned To => henry