| 29 | 
  | 
#define FF_EAM  2 | 
| 30 | 
  | 
 | 
| 31 | 
  | 
using namespace std; | 
| 32 | 
+ | 
 | 
| 33 | 
+ | 
/** | 
| 34 | 
+ | 
 * Check whether dividend is divisble by divisor or not | 
| 35 | 
+ | 
 */ | 
| 36 | 
+ | 
bool isDivisible(double dividend, double divisor){ | 
| 37 | 
+ | 
  double tolerance = 0.000001; | 
| 38 | 
+ | 
  double quotient; | 
| 39 | 
+ | 
  double diff; | 
| 40 | 
+ | 
  int intQuotient; | 
| 41 | 
+ | 
   | 
| 42 | 
+ | 
  quotient = dividend / divisor; | 
| 43 | 
+ | 
 | 
| 44 | 
+ | 
  if (quotient < 0) | 
| 45 | 
+ | 
    quotient = -quotient; | 
| 46 | 
+ | 
 | 
| 47 | 
+ | 
  intQuotient = int (quotient + tolerance); | 
| 48 | 
+ | 
 | 
| 49 | 
+ | 
  diff = fabs(fabs(dividend) - intQuotient  * fabs(divisor)); | 
| 50 | 
+ | 
 | 
| 51 | 
+ | 
  if (diff <= tolerance) | 
| 52 | 
+ | 
    return true; | 
| 53 | 
+ | 
  else | 
| 54 | 
+ | 
    return false;   | 
| 55 | 
+ | 
} | 
| 56 | 
  | 
 | 
| 57 | 
  | 
SimSetup::SimSetup(){ | 
| 58 | 
  | 
   | 
| 691 | 
  | 
    simError(); | 
| 692 | 
  | 
  } | 
| 693 | 
  | 
 | 
| 694 | 
+ | 
  //check whether sample time, status time, thermal time and reset time are divisble by dt | 
| 695 | 
+ | 
  if (!isDivisible(globals->getSampleTime(), globals->getDt())){ | 
| 696 | 
+ | 
    sprintf(painCave.errMsg, | 
| 697 | 
+ | 
              "Sample time is not divisible by dt \n"); | 
| 698 | 
+ | 
    painCave.isFatal = 0; | 
| 699 | 
+ | 
    simError();     | 
| 700 | 
+ | 
  } | 
| 701 | 
+ | 
 | 
| 702 | 
+ | 
  if (globals->haveStatusTime() && !isDivisible(globals->getSampleTime(), globals->getDt())){ | 
| 703 | 
+ | 
    sprintf(painCave.errMsg, | 
| 704 | 
+ | 
              "Status time is not divisible by dt\n"); | 
| 705 | 
+ | 
    painCave.isFatal = 0; | 
| 706 | 
+ | 
    simError();     | 
| 707 | 
+ | 
  } | 
| 708 | 
+ | 
 | 
| 709 | 
+ | 
  if (globals->haveThermalTime() && !isDivisible(globals->getThermalTime(), globals->getDt())){ | 
| 710 | 
+ | 
    sprintf(painCave.errMsg, | 
| 711 | 
+ | 
              "Thermal time is not divisible by dt\n"); | 
| 712 | 
+ | 
    painCave.isFatal = 0; | 
| 713 | 
+ | 
    simError();     | 
| 714 | 
+ | 
  }   | 
| 715 | 
+ | 
 | 
| 716 | 
+ | 
  if (globals->haveResetTime() && !isDivisible(globals->getResetTime(), globals->getDt())){ | 
| 717 | 
+ | 
    sprintf(painCave.errMsg, | 
| 718 | 
+ | 
              "Reset time is not divisible by dt\n"); | 
| 719 | 
+ | 
    painCave.isFatal = 0; | 
| 720 | 
+ | 
    simError();     | 
| 721 | 
+ | 
  }  | 
| 722 | 
+ | 
 | 
| 723 | 
  | 
  // set the status, sample, and thermal kick times | 
| 724 | 
  | 
 | 
| 725 | 
  | 
  for (i = 0; i < nInfo; i++){ |