NLContext nlNewContext(void) { __NLContext* result = __NL_NEW(__NLContext); result->state = __NL_STATE_INITIAL; result->matrix_vector_prod = __nlMatrixVectorProd_default; result->nb_rhs = 1; nlMakeCurrent(result); return result; }
NLContext nlNewContext(void) { __NLContext* result = __NL_NEW(__NLContext); result->state = __NL_STATE_INITIAL; result->right_hand_side = 0.0; result->matrix_vector_prod = __nlMatrixVectorProd_default; nlMakeCurrent(result); return result; }
static void __nlBeginMatrix() { NLuint i; NLuint m = 0, n = 0; NLenum storage = __NL_ROWS; __NLContext *context = __nlCurrentContext; __nlTransition(__NL_STATE_SYSTEM, __NL_STATE_MATRIX); if (!context->solve_again) { for(i=0; i<context->nb_variables; i++) { if(context->variable[i].locked) { context->variable[i].index = ~0; context->variable[i].a = __NL_NEW(__NLRowColumn); __nlRowColumnConstruct(context->variable[i].a); } else context->variable[i].index = n++; } m = (context->nb_rows == 0)? n: context->nb_rows; context->m = m; context->n = n; __nlSparseMatrixConstruct(&context->M, m, n, storage); context->alloc_M = NL_TRUE; context->b = __NL_NEW_ARRAY(NLfloat, m*context->nb_rhs); context->alloc_b = NL_TRUE; context->x = __NL_NEW_ARRAY(NLfloat, n*context->nb_rhs); context->alloc_x = NL_TRUE; } else { /* need to recompute b only, A is not constructed anymore */ __NL_CLEAR_ARRAY(NLfloat, context->b, context->m*context->nb_rhs); } __nlVariablesToVector(); }