diff --git a/MaterialLib/SolidModels/KelvinVector-impl.h b/MaterialLib/SolidModels/KelvinVector-impl.h
index eafe29cdf5f18acf36465572934204f163838abf..182533b27d991e679abea7812ae326c24ab21834 100644
--- a/MaterialLib/SolidModels/KelvinVector-impl.h
+++ b/MaterialLib/SolidModels/KelvinVector-impl.h
@@ -15,8 +15,8 @@ template <int KelvinVectorSize>
 double Invariants<KelvinVectorSize>::equivalentStress(
     Eigen::Matrix<double, KelvinVectorSize, 1> const& deviatoric_v)
 {
-    assert(std::abs(trace(deviatoric_v)) <
-           std::numeric_limits<double>::epsilon() * 100);
+    assert(std::abs(trace(deviatoric_v)) <=
+           1e-16 * std::abs(deviatoric_v.squaredNorm()));
     return std::sqrt(3 * J2(deviatoric_v));
 }
 
@@ -24,8 +24,8 @@ template <int KelvinVectorSize>
 double Invariants<KelvinVectorSize>::J2(
     Eigen::Matrix<double, KelvinVectorSize, 1> const& deviatoric_v)
 {
-    assert(std::abs(trace(deviatoric_v)) <
-           std::numeric_limits<double>::epsilon() * 100);
+    assert(std::abs(trace(deviatoric_v)) <=
+           1e-16 * std::abs(deviatoric_v.squaredNorm()));
     return 0.5 * deviatoric_v.transpose() * deviatoric_v;
 }
 
@@ -35,8 +35,8 @@ template <int KelvinVectorSize>
 double Invariants<KelvinVectorSize>::J3(
     Eigen::Matrix<double, KelvinVectorSize, 1> const& deviatoric_v)
 {
-    assert(std::abs(trace(deviatoric_v)) <
-           std::numeric_limits<double>::epsilon() * 100);
+    assert(std::abs(trace(deviatoric_v)) <=
+           1e-16 * std::abs(deviatoric_v.squaredNorm()));
     return determinant(deviatoric_v);
 }