void nlCoefficient(NLuint index, NLfloat value) { __NLVariable* v; unsigned int zero= 0; __nlCheckState(__NL_STATE_ROW); __nl_range_assert((float)index, (float)zero, (float)(__nlCurrentContext->nb_variables - 1)); v = &(__nlCurrentContext->variable[index]); if(v->locked) __nlRowColumnAppend(&(__nlCurrentContext->al), 0, value*v->value); else __nlRowColumnAppend(&(__nlCurrentContext->af), v->index, value); }
void nlMatrixAdd(NLuint row, NLuint col, NLfloat value) { __NLContext *context = __nlCurrentContext; __nlCheckState(__NL_STATE_MATRIX); if(context->solve_again) return; if (!context->least_squares && context->variable[row].locked); else if (context->variable[col].locked) { if(!context->least_squares) row = context->variable[row].index; __nlRowColumnAppend(context->variable[col].a, row, value); } else { __NLSparseMatrix* M = &context->M; if(!context->least_squares) row = context->variable[row].index; col = context->variable[col].index; __nl_range_assert(row, 0, context->m - 1); __nl_range_assert(col, 0, context->n - 1); __nlSparseMatrixAdd(M, row, col, value); } }