diff --git a/src/ODE/ODESolvers/seulex/seulex.C b/src/ODE/ODESolvers/seulex/seulex.C
index f91a55557e5c959040245a744c1bc520c25797de..b07a9f4988296ec16b2bf8a8e86049ded244117f 100644
--- a/src/ODE/ODESolvers/seulex/seulex.C
+++ b/src/ODE/ODESolvers/seulex/seulex.C
@@ -38,7 +38,7 @@ namespace Foam
         seulex::stepFactor1_ = 0.6,
         seulex::stepFactor2_ = 0.93,
         seulex::stepFactor3_ = 0.1,
-        seulex::stepFactor4_ = 4.0,
+        seulex::stepFactor4_ = 4,
         seulex::stepFactor5_ = 0.5,
         seulex::kFactor1_ = 0.7,
         seulex::kFactor2_ = 0.9;
@@ -50,11 +50,11 @@ namespace Foam
 Foam::seulex::seulex(const ODESystem& ode, const dictionary& dict)
 :
     ODESolver(ode, dict),
-    jacRedo_(min(1.0e-4, min(relTol_))),
+    jacRedo_(min(1e-4, min(relTol_))),
     nSeq_(iMaxx_),
     cpu_(iMaxx_),
     coeff_(iMaxx_, iMaxx_),
-    theta_(2.0*jacRedo_),
+    theta_(2*jacRedo_),
     table_(kMaxx_, n_),
     dfdx_(n_),
     dfdy_(n_),
@@ -70,7 +70,7 @@ Foam::seulex::seulex(const ODESystem& ode, const dictionary& dict)
     dydx_(n_)
 {
     // The CPU time factors for the major parts of the algorithm
-    const scalar cpuFunc = 1.0, cpuJac = 5.0, cpuLU = 1.0, cpuSolve = 1.0;
+    const scalar cpuFunc = 1, cpuJac = 5, cpuLU = 1, cpuSolve = 1;
 
     nSeq_[0] = 2;
     nSeq_[1] = 3;
@@ -92,7 +92,7 @@ Foam::seulex::seulex(const ODESystem& ode, const dictionary& dict)
         for (int l=0; l<k; l++)
         {
             scalar ratio = scalar(nSeq_[k])/nSeq_[l];
-            coeff_(k, l) = 1.0/(ratio - 1.0);
+            coeff_(k, l) = 1/(ratio - 1);
         }
     }
 }
@@ -120,7 +120,7 @@ bool Foam::seulex::seul
             a_(i, j) = -dfdy_(i, j);
         }
 
-        a_(i, i) += 1.0/dx;
+        a_(i, i) += 1/dx;
     }
 
     LUDecompose(a_, pivotIndices_);
@@ -138,7 +138,7 @@ bool Foam::seulex::seul
 
         if (nn == 1 && k<=1)
         {
-            scalar dy1 = 0.0;
+            scalar dy1 = 0;
             for (label i=0; i<n_; i++)
             {
                 dy1 += sqr(dy_[i]/scale[i]);
@@ -153,15 +153,23 @@ bool Foam::seulex::seul
 
             LUBacksubstitute(a_, pivotIndices_, dy_);
 
-            scalar dy2 = 0.0;
+            const scalar denom = min(1, dy1 + SMALL);
+            scalar dy2 = 0;
             for (label i=0; i<n_; i++)
             {
+                // Test of dy_[i] to avoid overflow
+                if (mag(dy_[i]) > scale[i]*denom)
+                {
+                    theta_ = 1;
+                    return false;
+                }
+
                 dy2 += sqr(dy_[i]/scale[i]);
             }
             dy2 = sqrt(dy2);
-            theta_ = dy2/min(1.0, dy1 + SMALL);
+            theta_ = dy2/denom;
 
-            if (theta_ > 1.0)
+            if (theta_ > 1)
             {
                 return false;
             }
@@ -217,7 +225,7 @@ void Foam::seulex::solve
 
     if (step.first || step.prevReject)
     {
-        theta_ = 2.0*jacRedo_;
+        theta_ = 2*jacRedo_;
     }
 
     if (step.first)
@@ -284,36 +292,36 @@ void Foam::seulex::solve
             if (k != 0)
             {
                 extrapolate(k, table_, y);
-                scalar err = 0.0;
+                scalar err = 0;
                 forAll(scale_, i)
                 {
                     scale_[i] = absTol_[i] + relTol_[i]*mag(y0_[i]);
                     err += sqr((y[i] - table_(0, i))/scale_[i]);
                 }
                 err = sqrt(err/n_);
-                if (err > 1.0/SMALL || (k > 1 && err >= errOld))
+                if (err > 1/SMALL || (k > 1 && err >= errOld))
                 {
                     step.reject = true;
                     dxNew = mag(dx)*stepFactor5_;
                     break;
                 }
                 errOld = min(4*err, 1);
-                scalar expo = 1.0/(k + 1);
+                scalar expo = 1/(k + 1);
                 scalar facmin = pow(stepFactor3_, expo);
                 scalar fac;
-                if (err == 0.0)
+                if (err == 0)
                 {
-                    fac = 1.0/facmin;
+                    fac = 1/facmin;
                 }
                 else
                 {
                     fac = stepFactor2_/pow(err/stepFactor1_, expo);
-                    fac = max(facmin/stepFactor4_, min(1.0/facmin, fac));
+                    fac = max(facmin/stepFactor4_, min(1/facmin, fac));
                 }
                 dxOpt_[k] = mag(dx*fac);
                 temp_[k] = cpu_[k]/dxOpt_[k];
 
-                if ((step.first || step.last) && err <= 1.0)
+                if ((step.first || step.last) && err <= 1)
                 {
                     break;
                 }
@@ -325,11 +333,11 @@ void Foam::seulex::solve
                  && !step.first && !step.last
                 )
                 {
-                    if (err <= 1.0)
+                    if (err <= 1)
                     {
                         break;
                     }
-                    else if (err > nSeq_[kTarg_]*nSeq_[kTarg_ + 1]*4.0)
+                    else if (err > nSeq_[kTarg_]*nSeq_[kTarg_ + 1]*4)
                     {
                         step.reject = true;
                         kTarg_ = k;
@@ -344,11 +352,11 @@ void Foam::seulex::solve
 
                 if (k == kTarg_)
                 {
-                    if (err <= 1.0)
+                    if (err <= 1)
                     {
                         break;
                     }
-                    else if (err > nSeq_[k + 1]*2.0)
+                    else if (err > nSeq_[k + 1]*2)
                     {
                         step.reject = true;
                         if (kTarg_>1 && temp_[k-1] < kFactor1_*temp_[k])
@@ -362,7 +370,7 @@ void Foam::seulex::solve
 
                 if (k == kTarg_+1)
                 {
-                    if (err > 1.0)
+                    if (err > 1)
                     {
                         step.reject = true;
                         if
@@ -384,7 +392,7 @@ void Foam::seulex::solve
             step.prevReject = true;
             if (!jacUpdated)
             {
-                theta_ = 2.0*jacRedo_;
+                theta_ = 2*jacRedo_;
 
                 if (theta_ > jacRedo_ && !jacUpdated)
                 {