| 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++){ |