double Standard_model_convergence_tester<Two_scale>::max_rel_diff() const
{
   const StandardModel<Two_scale>& ol = get_last_iteration_model();
   const StandardModel<Two_scale>& ne = get_current_iteration_model();

   return ne.max_rel_diff(ol);
}
double lowNE6SSM_convergence_tester<Two_scale>::max_rel_diff() const
{
   const lowNE6SSM<Two_scale>* ol = get_last_iteration_model();
   const lowNE6SSM<Two_scale>* ne = get_model();

   double diff[81] = { 0 };

   diff[0] = MaxRelDiff(OLD1(MGlu),NEW1(MGlu));
   diff[1] = MaxRelDiff(OLD1(MChaP),NEW1(MChaP));
   diff[2] = MaxRelDiff(OLD1(MVZp),NEW1(MVZp));
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 3] = MaxRelDiff(OLD(MSd,i),NEW(MSd,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 9] = MaxRelDiff(OLD(MSv,i),NEW(MSv,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 12] = MaxRelDiff(OLD(MSu,i),NEW(MSu,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 18] = MaxRelDiff(OLD(MSe,i),NEW(MSe,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 24] = MaxRelDiff(OLD(MSDX,i),NEW(MSDX,i));
   }
   for (unsigned i = 0; i < 5; ++i) {
      diff[i + 30] = MaxRelDiff(OLD(Mhh,i),NEW(Mhh,i));
   }
   for (unsigned i = 2; i < 5; ++i) {
      diff[i + 35] = MaxRelDiff(OLD(MAh,i),NEW(MAh,i));
   }
   for (unsigned i = 1; i < 2; ++i) {
      diff[i + 40] = MaxRelDiff(OLD(MHpm,i),NEW(MHpm,i));
   }
   for (unsigned i = 0; i < 8; ++i) {
      diff[i + 42] = MaxRelDiff(OLD(MChi,i),NEW(MChi,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 50] = MaxRelDiff(OLD(MCha,i),NEW(MCha,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 52] = MaxRelDiff(OLD(MFDX,i),NEW(MFDX,i));
   }
   for (unsigned i = 0; i < 7; ++i) {
      diff[i + 55] = MaxRelDiff(OLD(MSHI0,i),NEW(MSHI0,i));
   }
   for (unsigned i = 0; i < 4; ++i) {
      diff[i + 62] = MaxRelDiff(OLD(MSHIPM,i),NEW(MSHIPM,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 66] = MaxRelDiff(OLD(MChaI,i),NEW(MChaI,i));
   }
   for (unsigned i = 0; i < 7; ++i) {
      diff[i + 68] = MaxRelDiff(OLD(MChiI,i),NEW(MChiI,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 75] = MaxRelDiff(OLD(MSHp0,i),NEW(MSHp0,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 77] = MaxRelDiff(OLD(MSHpp,i),NEW(MSHpp,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 79] = MaxRelDiff(OLD(MChiP,i),NEW(MChiP,i));
   }

   return *std::max_element(diff, diff + 81);

}
double SoftsusyNMSSM_convergence_tester::max_rel_diff() const
{
   return sumTol(get_model(), get_last_iteration_model());
}
double E6SSM_convergence_tester<Two_scale>::max_rel_diff() const
{
   const E6SSM<Two_scale>* ol = get_last_iteration_model();
   const E6SSM<Two_scale>* ne = get_model();

   double diff[73] = { 0 };

   diff[0] = MaxRelDiff(OLD1(MGlu),NEW1(MGlu));
   diff[1] = MaxRelDiff(OLD1(MChaP),NEW1(MChaP));
   diff[2] = MaxRelDiff(OLD1(MVZp),NEW1(MVZp));
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 3] = MaxRelDiff(OLD(MSd,i),NEW(MSd,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 9] = MaxRelDiff(OLD(MSv,i),NEW(MSv,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 12] = MaxRelDiff(OLD(MSu,i),NEW(MSu,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 18] = MaxRelDiff(OLD(MSe,i),NEW(MSe,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 24] = MaxRelDiff(OLD(MSDX,i),NEW(MSDX,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 30] = MaxRelDiff(OLD(Mhh,i),NEW(Mhh,i));
   }
   for (unsigned i = 2; i < 3; ++i) {
      diff[i + 33] = MaxRelDiff(OLD(MAh,i),NEW(MAh,i));
   }
   for (unsigned i = 1; i < 2; ++i) {
      diff[i + 36] = MaxRelDiff(OLD(MHpm,i),NEW(MHpm,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 38] = MaxRelDiff(OLD(MChi,i),NEW(MChi,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 44] = MaxRelDiff(OLD(MCha,i),NEW(MCha,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 46] = MaxRelDiff(OLD(MFDX,i),NEW(MFDX,i));
   }
   for (unsigned i = 0; i < 4; ++i) {
      diff[i + 49] = MaxRelDiff(OLD(MSHI0,i),NEW(MSHI0,i));
   }
   for (unsigned i = 0; i < 4; ++i) {
      diff[i + 53] = MaxRelDiff(OLD(MSHIp,i),NEW(MSHIp,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 57] = MaxRelDiff(OLD(MChaI,i),NEW(MChaI,i));
   }
   for (unsigned i = 0; i < 4; ++i) {
      diff[i + 59] = MaxRelDiff(OLD(MChiI,i),NEW(MChiI,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 63] = MaxRelDiff(OLD(MSSI0,i),NEW(MSSI0,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 65] = MaxRelDiff(OLD(MFSI,i),NEW(MFSI,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 67] = MaxRelDiff(OLD(MSHp0,i),NEW(MSHp0,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 69] = MaxRelDiff(OLD(MSHpp,i),NEW(MSHpp,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 71] = MaxRelDiff(OLD(MChiP,i),NEW(MChiP,i));
   }

   return *std::max_element(diff, diff + 73);

}