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