diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C
index c7d4b1bd05547a89d9a88fd20c65d78d811de989..70c9afd550a5340444964765311729cace23546f 100644
--- a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C
+++ b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C
@@ -82,15 +82,18 @@ void Foam::primitiveMesh::makeCellCentresAndVols
 {
     typedef Vector<solveScalar> solveVector;
 
+    // Clear the fields for accumulation. Note1: we're doing this before
+    // any precision conversion since this might complain about illegal numbers.
+    // Note2: zero is a special value which is perfectly converted into zero
+    //        in the new precision
+    cellCtrs_s = Zero;
+    cellVols_s = 0.0;
+
     PrecisionAdaptor<solveVector, vector> tcellCtrs(cellCtrs_s);
     Field<solveVector>& cellCtrs = tcellCtrs.ref();
     PrecisionAdaptor<solveScalar, scalar> tcellVols(cellVols_s);
     Field<solveScalar>& cellVols = tcellVols.ref();
 
-    // Clear the fields for accumulation
-    cellCtrs = Zero;
-    cellVols = 0.0;
-
     const labelList& own = faceOwner();
     const labelList& nei = faceNeighbour();