void outer_product_alloc_real_array(real_array_t* v1, real_array_t* v2, real_array_t* dest) { size_t dim1,dim2; omc_assert_macro(base_array_ok(v1)); dim1 = base_array_nr_of_elements(*v1); dim2 = base_array_nr_of_elements(*v2); alloc_real_array(dest,dim1,dim2); outer_product_real_array(v1,v2,dest); }
void array_alloc_real_array(real_array_t* dest, int n, real_array_t* first,...) { int i,j,c,m; va_list ap; real_array_t **elts = (real_array_t**)malloc(sizeof(real_array_t *) * n); assert(elts); /* collect all array ptrs to simplify traversal.*/ va_start(ap,first); elts[0] = first; for (i = 1; i < n; ++i) { elts[i] = va_arg(ap, real_array_t*); } va_end(ap); check_base_array_dim_sizes((const base_array_t **)elts,n); if (first->ndims == 1) { alloc_real_array(dest,2,n,first->dim_size[0]); } else if (first->ndims == 2) { alloc_real_array(dest,3,n,first->dim_size[0],first->dim_size[1]); } else if (first->ndims == 3) { alloc_real_array(dest,4,n,first->dim_size[0],first->dim_size[1], first->dim_size[2]); } else if (first->ndims == 4) { alloc_real_array(dest,5,n,first->dim_size[0],first->dim_size[1], first->dim_size[2],first->dim_size[3]); } else { assert(0 && "Dimension size > 4 not impl. yet"); } for (i = 0, c = 0; i < n; ++i) { m = base_array_nr_of_elements(elts[i]); for (j = 0; j < m; ++j) { real_set(dest, c, real_get(elts[i], j)); c++; } } free(elts); }
void diagonal_alloc_real_array(real_array_t* dest, int ndims, ...) { size_t i; size_t j; va_list ap; alloc_real_array(dest,2,ndims,ndims); for(i = 0; i < (ndims * ndims); ++i) { real_set(dest, i, 0); } va_start(ap,ndims); j = 0; for(i = 0; i < ndims; ++i) { real_set(dest, j, va_arg(ap, modelica_real)); j += ndims+1; } va_end(ap); }
void identity_alloc_real_array(int n,real_array_t* dest) { alloc_real_array(dest,2,n,n); identity_real_array(n,dest); }
void cross_alloc_real_array(const real_array_t * x,const real_array_t * y, real_array_t* dest) { alloc_real_array(dest,1,3); cross_real_array(x,y,dest); }