Changeset 13991


Ignore:
Timestamp:
Nov 7, 2019 7:58:59 PM (12 days ago)
Author:
Christian Andersson
Message:

Restructured runtime to handle domain checks. Related to ticket:5868

Location:
branches/dev-cw-2658
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/dev-cw-2658/Compiler/ModelicaCBackEnd/src/jastadd/CCodeGen/CGenerator.jrag

    r13990 r13991  
    321321       
    322322        public void generate(CodeStream genPrinter) {
    323             if (fclass.myOptions().mathematical_domain_checks.getValue()) {
    324                 genPrinter.print("   #define MATHEMATICAL_DOMAIN_CHECKS");
    325             }
    326         }
    327     }
     323            if (fclass.myOptions().mathematical_domain_checks.getValue()) {
     324                genPrinter.print("#define MATHEMATICAL_DOMAIN_CHECKS");
     325            }
     326        }
     327    }
    328328    /**
    329329     * C: macros for C variable aliases
  • branches/dev-cw-2658/Compiler/ModelicaCBackEnd/templates/FMIBase/base.c

    r13908 r13991  
    179179    /* Initialize globals struct */
    180180    (*jmi)->globals = calloc(1, sizeof(jmi_globals_t));
    181 
     181   
     182    /* Log specific runtime information */
     183    jmi_log_node((*jmi)->log, logInfo, "JMIRuntime", MATHEMATICAL_DOMAIN_CHECKS_MSG);
     184   
    182185    return 0;
    183186}
  • branches/dev-cw-2658/Compiler/ModelicaCBackEnd/templates/FMIBase/base.h

    r12878 r13991  
    1313    <http://www.ibm.com/developerworks/library/os-cpl.html/>.
    1414*/
     15
     16$C_defines$
    1517
    1618#include <stdio.h>
  • branches/dev-cw-2658/Python/src/tests_jmodelica/general/test_operators.py

    r13952 r13991  
    2525    @testattr(stddist_full = True)
    2626    def test_domain_checks1(self):
    27         #Test that the compilation is succesful
    2827        SimulationTest.setup_class_base('OperatorTests.mo',
    2928            'OperatorTests.DomainChecks', options={"mathematical_domain_checks":True})
    30 
     29           
     30        model = load_fmu("OperatorTests_DomainChecks.fmu", log_level=6)
     31       
     32        target_msg = "Using mathematical functions with domain checks."
     33        found_msg = False
     34        for msg in model.get_log():
     35            print msg
     36            if target_msg in msg:
     37                found_msg = True
     38                break
     39       
     40        assert found_msg, "Could not find the message '{}' in the log.".format(target_msg)
     41       
    3142    @testattr(stddist_full = True)
    3243    def test_domain_checks2(self):
    33         #Test that the compilation is succesful
    3444        SimulationTest.setup_class_base('OperatorTests.mo',
    3545            'OperatorTests.DomainChecks', options={"mathematical_domain_checks":False})
     46       
     47        model = load_fmu("OperatorTests_DomainChecks.fmu", log_level=6)
     48       
     49        target_msg = "Using mathematical functions without any domain checks, caution is advised."
     50        found_msg = False
     51        for msg in model.get_log():
     52            if target_msg in msg:
     53                found_msg = True
     54                break
     55       
     56        assert found_msg, "Could not find the message '{}' in the log.".format(target_msg)
    3657
    3758class TestHomotopy(SimulationTest):
  • branches/dev-cw-2658/RuntimeLibrary/src/jmi/jmi_math.h

    r13952 r13991  
    4545
    4646/* Macros used together with the domain check option */
    47 #define JMI_DIVIDE_FUNCTION(name, num, den, msg) ((jmi_real_t)(num)/(jmi_real_t)(den))
    48 #define JMI_DIVIDE_EQUATION(jmi, num, den, msg)  ((jmi_real_t)(num)/(jmi_real_t)(den))
    49 #define JMI_EXP_EQUATION(jmi, x, msg)            (exp((jmi_real_t)(x)))
    50 #define JMI_EXP_FUNCTION(name, x, msg)           (exp((jmi_real_t)(x)))
    51 #define JMI_TAN_EQUATION(jmi, x, msg)            (tan((jmi_real_t)(x)))
    52 #define JMI_TAN_FUNCTION(name, x, msg)           (tan((jmi_real_t)(x)))
    53 #define JMI_ATAN_EQUATION(jmi, x, msg)           (atan((jmi_real_t)(x)))
    54 #define JMI_ATAN_FUNCTION(name, x, msg)          (atan((jmi_real_t)(x)))
    55 #define JMI_TANH_EQUATION(jmi, x, msg)           (tanh((jmi_real_t)(x)))
    56 #define JMI_TANH_FUNCTION(name, x, msg)          (tanh((jmi_real_t)(x)))
    57 #define JMI_COS_EQUATION(jmi, x, msg)            (cos((jmi_real_t)(x)))
    58 #define JMI_COS_FUNCTION(name, x, msg)           (cos((jmi_real_t)(x)))
    59 #define JMI_ACOS_EQUATION(jmi, x, msg)           (acos((jmi_real_t)(x)))
    60 #define JMI_ACOS_FUNCTION(name, x, msg)          (acos((jmi_real_t)(x)))
    61 #define JMI_COSH_EQUATION(jmi, x, msg)           (cosh((jmi_real_t)(x)))
    62 #define JMI_COSH_FUNCTION(name, x, msg)          (cosh((jmi_real_t)(x)))
    63 #define JMI_SIN_EQUATION(jmi, x, msg)            (sin((jmi_real_t)(x)))
    64 #define JMI_SIN_FUNCTION(name, x, msg)           (sin((jmi_real_t)(x)))
    65 #define JMI_ASIN_EQUATION(jmi, x, msg)           (asin((jmi_real_t)(x)))
    66 #define JMI_ASIN_FUNCTION(name, x, msg)          (asin((jmi_real_t)(x)))
    67 #define JMI_SINH_EQUATION(jmi, x, msg)           (sinh((jmi_real_t)(x)))
    68 #define JMI_SINH_FUNCTION(name, x, msg)          (sinh((jmi_real_t)(x)))
    69 #define JMI_SQRT_EQUATION(jmi, x, msg)           (sqrt((jmi_real_t)(x)))
    70 #define JMI_SQRT_FUNCTION(name, x, msg)          (sqrt((jmi_real_t)(x)))
    71 #define JMI_LOG_EQUATION(jmi, x, msg)            (log((jmi_real_t)(x)))
    72 #define JMI_LOG_FUNCTION(name, x, msg)           (log((jmi_real_t)(x)))
    73 #define JMI_LOG10_EQUATION(jmi, x, msg)          (log10((jmi_real_t)(x)))
    74 #define JMI_LOG10_FUNCTION(name, x, msg)         (log10((jmi_real_t)(x)))
    75 #define JMI_ATAN2_EQUATION(jmi, x, y, msg)       (atan2((jmi_real_t)(x), (jmi_real_t)(y)))
    76 #define JMI_ATAN2_FUNCTION(name, x, y, msg)      (atan2((jmi_real_t)(x), (jmi_real_t)(y)))
    77 #define JMI_POW_EQUATION(jmi, x, y, msg)         (pow((jmi_real_t)(x), (jmi_real_t)(y)))
    78 #define JMI_POW_FUNCTION(name, x, y, msg)        (pow((jmi_real_t)(x), (jmi_real_t)(y)))
     47#ifdef MATHEMATICAL_DOMAIN_CHECKS
     48    #define MATHEMATICAL_DOMAIN_CHECKS_MSG "Using mathematical functions with domain checks."
     49    #define JMI_ABS_EQUATION(x)   jmi_abs(x)
     50    #define JMI_MAX_EQUATION(x,y) jmi_max(x,y)
     51    #define JMI_MIN_EQUATION(x,y) jmi_min(x,y)
     52    #define JMI_SIGN_EQUATION(x)  jmi_sign(x)
     53    #define JMI_DIVIDE_FUNCTION(name, num, den, msg) jmi_divide_function(name, num, den, msg)
     54    #define JMI_DIVIDE_EQUATION(jmi, num, den, msg)  jmi_divide_equation(jmi,  num, den, msg)
     55    #define JMI_EXP_EQUATION(jmi, x, msg)            jmi_exp_equation(jmi, x, msg)     
     56    #define JMI_EXP_FUNCTION(name, x, msg)           jmi_exp_function(name, x, msg)     
     57    #define JMI_TAN_EQUATION(jmi, x, msg)            jmi_tan_equation(jmi, x, msg)     
     58    #define JMI_TAN_FUNCTION(name, x, msg)           jmi_tan_function(name, x, msg)     
     59    #define JMI_ATAN_EQUATION(jmi, x, msg)           jmi_atan_equation(jmi, x, msg)     
     60    #define JMI_ATAN_FUNCTION(name, x, msg)          jmi_atan_function(name, x, msg)   
     61    #define JMI_TANH_EQUATION(jmi, x, msg)           jmi_tanh_equation(jmi, x, msg)     
     62    #define JMI_TANH_FUNCTION(name, x, msg)          jmi_tanh_function(name, x, msg)   
     63    #define JMI_COS_EQUATION(jmi, x, msg)            jmi_cos_equation(jmi, x, msg)     
     64    #define JMI_COS_FUNCTION(name, x, msg)           jmi_cos_function(name, x, msg)     
     65    #define JMI_ACOS_EQUATION(jmi, x, msg)           jmi_acos_equation(jmi, x, msg)     
     66    #define JMI_ACOS_FUNCTION(name, x, msg)          jmi_acos_function(name, x, msg)   
     67    #define JMI_COSH_EQUATION(jmi, x, msg)           jmi_cosh_equation(jmi, x, msg)     
     68    #define JMI_COSH_FUNCTION(name, x, msg)          jmi_cosh_function(name, x, msg)   
     69    #define JMI_SIN_EQUATION(jmi, x, msg)            jmi_sin_equation(jmi, x, msg)     
     70    #define JMI_SIN_FUNCTION(name, x, msg)           jmi_sin_function(name, x, msg)     
     71    #define JMI_ASIN_EQUATION(jmi, x, msg)           jmi_asin_equation(jmi, x, msg)     
     72    #define JMI_ASIN_FUNCTION(name, x, msg)          jmi_asin_function(name, x, msg)   
     73    #define JMI_SINH_EQUATION(jmi, x, msg)           jmi_sinh_equation(jmi, x, msg)     
     74    #define JMI_SINH_FUNCTION(name, x, msg)          jmi_sinh_function(name, x, msg)   
     75    #define JMI_SQRT_EQUATION(jmi, x, msg)           jmi_sqrt_equation(jmi, x, msg)     
     76    #define JMI_SQRT_FUNCTION(name, x, msg)          jmi_sqrt_function(name, x, msg)   
     77    #define JMI_LOG_EQUATION(jmi, x, msg)            jmi_log_equation(jmi, x, msg)     
     78    #define JMI_LOG_FUNCTION(name, x, msg)           jmi_log_function(name, x, msg)     
     79    #define JMI_LOG10_EQUATION(jmi, x, msg)          jmi_log10_equation(jmi, x, msg)   
     80    #define JMI_LOG10_FUNCTION(name, x, msg)         jmi_log10_function(name, x, msg)   
     81    #define JMI_ATAN2_EQUATION(jmi, x, y, msg)       jmi_atan2_equation(jmi, x, y, msg)
     82    #define JMI_ATAN2_FUNCTION(name, x, y, msg)      jmi_atan2_function(name, x, y, msg)
     83    #define JMI_POW_EQUATION(jmi, x, y, msg)         jmi_pow_equation(jmi, x, y, msg)   
     84    #define JMI_POW_FUNCTION(name, x, y, msg)        jmi_pow_function(name, x, y, msg)
     85#else
     86    #define MATHEMATICAL_DOMAIN_CHECKS_MSG "Using mathematical functions without any domain checks, caution is advised."
     87    #define JMI_ABS_EQUATION(x)   JMI_ABS(x)
     88    #define JMI_MAX_EQUATION(x,y) JMI_MAX(x,y)
     89    #define JMI_MIN_EQUATION(x,y) JMI_MIN(x,y)
     90    #define JMI_SIGN_EQUATION(x)  JMI_SIGN(x)
     91    #define JMI_DIVIDE_FUNCTION(name, num, den, msg) ((jmi_real_t)(num)/(jmi_real_t)(den))
     92    #define JMI_DIVIDE_EQUATION(jmi, num, den, msg)  ((jmi_real_t)(num)/(jmi_real_t)(den))
     93    #define JMI_EXP_EQUATION(jmi, x, msg)            (exp((jmi_real_t)(x)))
     94    #define JMI_EXP_FUNCTION(name, x, msg)           (exp((jmi_real_t)(x)))
     95    #define JMI_TAN_EQUATION(jmi, x, msg)            (tan((jmi_real_t)(x)))
     96    #define JMI_TAN_FUNCTION(name, x, msg)           (tan((jmi_real_t)(x)))
     97    #define JMI_ATAN_EQUATION(jmi, x, msg)           (atan((jmi_real_t)(x)))
     98    #define JMI_ATAN_FUNCTION(name, x, msg)          (atan((jmi_real_t)(x)))
     99    #define JMI_TANH_EQUATION(jmi, x, msg)           (tanh((jmi_real_t)(x)))
     100    #define JMI_TANH_FUNCTION(name, x, msg)          (tanh((jmi_real_t)(x)))
     101    #define JMI_COS_EQUATION(jmi, x, msg)            (cos((jmi_real_t)(x)))
     102    #define JMI_COS_FUNCTION(name, x, msg)           (cos((jmi_real_t)(x)))
     103    #define JMI_ACOS_EQUATION(jmi, x, msg)           (acos((jmi_real_t)(x)))
     104    #define JMI_ACOS_FUNCTION(name, x, msg)          (acos((jmi_real_t)(x)))
     105    #define JMI_COSH_EQUATION(jmi, x, msg)           (cosh((jmi_real_t)(x)))
     106    #define JMI_COSH_FUNCTION(name, x, msg)          (cosh((jmi_real_t)(x)))
     107    #define JMI_SIN_EQUATION(jmi, x, msg)            (sin((jmi_real_t)(x)))
     108    #define JMI_SIN_FUNCTION(name, x, msg)           (sin((jmi_real_t)(x)))
     109    #define JMI_ASIN_EQUATION(jmi, x, msg)           (asin((jmi_real_t)(x)))
     110    #define JMI_ASIN_FUNCTION(name, x, msg)          (asin((jmi_real_t)(x)))
     111    #define JMI_SINH_EQUATION(jmi, x, msg)           (sinh((jmi_real_t)(x)))
     112    #define JMI_SINH_FUNCTION(name, x, msg)          (sinh((jmi_real_t)(x)))
     113    #define JMI_SQRT_EQUATION(jmi, x, msg)           (sqrt((jmi_real_t)(x)))
     114    #define JMI_SQRT_FUNCTION(name, x, msg)          (sqrt((jmi_real_t)(x)))
     115    #define JMI_LOG_EQUATION(jmi, x, msg)            (log((jmi_real_t)(x)))
     116    #define JMI_LOG_FUNCTION(name, x, msg)           (log((jmi_real_t)(x)))
     117    #define JMI_LOG10_EQUATION(jmi, x, msg)          (log10((jmi_real_t)(x)))
     118    #define JMI_LOG10_FUNCTION(name, x, msg)         (log10((jmi_real_t)(x)))
     119    #define JMI_ATAN2_EQUATION(jmi, x, y, msg)       (atan2((jmi_real_t)(x), (jmi_real_t)(y)))
     120    #define JMI_ATAN2_FUNCTION(name, x, y, msg)      (atan2((jmi_real_t)(x), (jmi_real_t)(y)))
     121    #define JMI_POW_EQUATION(jmi, x, y, msg)         (pow((jmi_real_t)(x), (jmi_real_t)(y)))
     122    #define JMI_POW_FUNCTION(name, x, y, msg)        (pow((jmi_real_t)(x), (jmi_real_t)(y)))
     123#endif
    79124
    80125jmi_real_t jmi_pow(jmi_t *jmi, const char func_name[], jmi_real_t x, jmi_real_t y, const char msg[]);
  • branches/dev-cw-2658/RuntimeLibrary/src/jmi/jmi_math_ad.h

    r10859 r13991  
    1717    <http://www.ibm.com/developerworks/library/os-cpl.html/> respectively.
    1818*/
     19
     20#define JMI_AD_DIVIDE_FUNCTION(func_name, x, y, dx, dy, v, d, msg) jmi_ad_divide_function(func_name, x, y, dx, dy, v, d, msg)
     21#define JMI_AD_DIVIDE_EQUATION(jmi, x, y, dx, dy, v, d, msg)       jmi_ad_divide_equation(jmi, x, y, dx, dy, v, d, msg)
     22#define JMI_AD_SQRT_FUNCTION(func_name, x, dx, v, d, msg)          jmi_ad_sqrt_function(func_name, x, dx, v, d, msg)
     23#define JMI_AD_SQRT_EQUATION(jmi, x, dx, v, d, msg)                jmi_ad_sqrt_equation(jmi, x, dx, v, d, msg)
     24#define JMI_AD_ASIN_FUNCTION(func_name, x, dx, v, d, msg)          jmi_ad_asin_function(func_name, x, dx, v, d, msg)
     25#define JMI_AD_ASIN_EQUATION(jmi, x, dx, v, d, msg)                jmi_ad_asin_equation(jmi, x, dx, v, d, msg)
     26#define JMI_AD_ACOS_FUNCTION(func_name, x, dx, v, d, msg)          jmi_ad_acos_function(func_name, x, dx, v, d, msg)
     27#define JMI_AD_ACOS_EQUATION(jmi, x, dx, v, d, msg)                jmi_ad_acos_equation(jmi, x, dx, v, d, msg)
     28#define JMI_AD_ATAN2_FUNCTION(func_name, x, y, dx, dy, v, d, msg)  jmi_ad_atan2_function(func_name, x, y, dx, dy, v, d, msg)
     29#define JMI_AD_ATAN2_EQUATION(jmi, x, y, dx, dy, v, d, msg)        jmi_ad_atan2_equation(jmi, x, y, dx, dy, v, d, msg)
     30#define JMI_AD_POW_FUNCTION(func_name, x, y, dx, dy, v, d, msg)    jmi_ad_pow_function(func_name, x, y, dx, dy, v, d, msg)
     31#define JMI_AD_POW_EQUATION(jmi, x, y, dx, dy, v, d, msg)          jmi_ad_pow_equation(jmi, x, y, dx, dy, v, d, msg)
     32#define JMI_AD_EXP_FUNCTION(func_name, x, dx, v, d, msg)           jmi_ad_exp_function(func_name, x, dx, v, d, msg)
     33#define JMI_AD_EXP_EQUATION(jmi, x, dx, v, d, msg)                 jmi_ad_exp_equation(jmi, x, dx, v, d, msg)
     34#define JMI_AD_LOG_FUNCTION(func_name, x, dx, v, d, msg)           jmi_ad_log_function(func_name, x, dx, v, d, msg)
     35#define JMI_AD_LOG_EQUATION(jmi, x, dx, v, d, msg)                 jmi_ad_log_equation(jmi, x, dx, v, d, msg)
     36#define JMI_AD_LOG10_FUNCTION(func_name, x, dx, v, d, msg)         jmi_ad_log10_function(func_name, x, dx, v, d, msg)
     37#define JMI_AD_LOG10_EQUATION(jmi, x, dx, v, d, msg)               jmi_ad_log10_equation(jmi, x, dx, v, d, msg)
     38#define JMI_AD_SINH_FUNCTION(func_name, x, dx, v, d, msg)          jmi_ad_sinh_function(func_name, x, dx, v, d, msg)
     39#define JMI_AD_SINH_EQUATION(jmi, x, dx, v, d, msg)                jmi_ad_sinh_equation(jmi, x, dx, v, d, msg)
     40#define JMI_AD_COSH_FUNCTION(func_name, x, dx, v, d, msg)          jmi_ad_cosh_function(func_name, x, dx, v, d, msg)
     41#define JMI_AD_COSH_EQUATION(jmi, x, dx, v, d, msg)                jmi_ad_cosh_equation(jmi, x, dx, v, d, msg)
     42#define JMI_AD_TAN_FUNCTION(func_name, x, dx, v, d, msg)           jmi_ad_tan_function(func_name, x, dx, v, d, msg)
     43#define JMI_AD_TAN_EQUATION(jmi, x, dx, v, d, msg)                 jmi_ad_tan_equation(jmi, x, dx, v, d, msg)
     44#define JMI_AD_SIN_FUNCTION(func_name, x, dx, v, d, msg)           jmi_ad_sin_function(func_name, x, dx, v, d, msg)
     45#define JMI_AD_SIN_EQUATION(jmi, x, dx, v, d, msg)                 jmi_ad_sin_equation(jmi, x, dx, v, d, msg)
     46#define JMI_AD_COS_FUNCTION(func_name, x, dx, v, d, msg)           jmi_ad_cos_function(func_name, x, dx, v, d, msg)
     47#define JMI_AD_COS_EQUATION(jmi, x, dx, v, d, msg)                 jmi_ad_cos_equation(jmi, x, dx, v, d, msg)
     48#define JMI_AD_ATAN_FUNCTION(func_name, x, dx, v, d, msg)          jmi_ad_atan_function(func_name, x, dx, v, d, msg)
     49#define JMI_AD_ATAN_EQUATION(jmi, x, dx, v, d, msg)                jmi_ad_atan_equation(jmi, x, dx, v, d, msg)
     50#define JMI_AD_TANH_FUNCTION(func_name, x, dx, v, d, msg)          jmi_ad_tanh_function(func_name, x, dx, v, d, msg)
     51#define JMI_AD_TANH_EQUATION(jmi, x, dx, v, d, msg)                jmi_ad_tanh_equation(jmi, x, dx, v, d, msg)
     52
    1953
    2054void jmi_ad_divide_function(const char func_name[], jmi_real_t x, jmi_real_t y, jmi_real_t dx, jmi_real_t dy, jmi_real_t *v, jmi_real_t *d, const char msg[]);
  • branches/dev-cw-2658/RuntimeLibrary/src/jmi/jmi_me.c

    r12953 r13991  
    3333    retval = jmi_new(&jmi, jmi_callbacks);
    3434    if(retval != 0) {
    35         /* creating jmi struct failed */
     35        /* Creating jmi struct failed */
    3636        jmi_log_node(jmi_->log, logError, "StructCreationFailure","Creating internal struct failed.");
    3737        return retval;
     
    5858    jmi_->resource_location = resource_location;
    5959   
    60     /* set start values*/
     60    /* Set start values*/
    6161    if (jmi_init_eval_independent(jmi) != 0) {
    6262        return -1;
Note: See TracChangeset for help on using the changeset viewer.