Esempio n. 1
0
void exp_real_array(const real_array_t * a, modelica_integer n, real_array_t* dest)
{
    modelica_integer i;

    /* Assert n>=0 */
    /* Assert a matrix */
    /* Assert square matrix */

    if (n==0) {
        identity_real_array(a->dim_size[0],dest);
    } else {
        if (n==1) {
            clone_real_array_spec(a,dest);
            copy_real_array_data(a,dest);
        } else {
            real_array_t* tmp = 0;
            clone_real_array_spec(a,tmp);
            copy_real_array_data(a,tmp);
            for (i = 1; i < n; ++i) {
                mul_real_matrix_product(a,tmp,dest);
                copy_real_array_data(dest,tmp);
            }
        }
    }
}
Esempio n. 2
0
void exp_real_array(const real_array_t * a, modelica_integer n, real_array_t* dest)
{
    /* Assert n>=0 */
    omc_assert_macro(n >= 0);
    /* Assert that a is a two dimensional square array */
    omc_assert_macro((a->ndims == 2) && (a->dim_size[0] == a->dim_size[1]));
    /* Assert that dest is a two dimensional square array with the same size as a */
    omc_assert_macro((dest->ndims == 2) && (dest->dim_size[0] == dest->dim_size[1]) && (a->dim_size[0] == dest->dim_size[0]));

    if(n==0) {
        identity_real_array(a->dim_size[0],dest);
    } else {
        if(n==1) {
            clone_real_array_spec(a,dest);
            copy_real_array_data(*a,dest);
        } else if (n==2) {
            clone_real_array_spec(a,dest);
            mul_real_matrix_product(a,a,dest);
        } else {
            modelica_integer i;

            real_array_t tmp;
            real_array_t * b;
            real_array_t * c;

            /* prepare temporary array */
            clone_real_array_spec(a,&tmp);
            clone_real_array_spec(a,dest);

            if ((n&1) != 0) {
              b = &tmp;
              c = dest;
            } else {
              b = dest;
              c = &tmp;
            }
            mul_real_matrix_product(a,a,b);
            for( i = 2; i < n; ++i) {
                real_array_t * x;

                mul_real_matrix_product(a,b,c);

                /* exchange b and c */
                x = b;
                b = c;
                c = x;
            }
            /* result is already in dest */
        }
    }
}
Esempio n. 3
0
void identity_alloc_real_array(int n,real_array_t* dest)
{
    alloc_real_array(dest,2,n,n);
    identity_real_array(n,dest);
}