c2ival(ASL_fgh *asl, int i, real *X, fint *nerror) #endif { Jmp_buf err_jmp0; expr *e; int ij; real f; if (nerror && *nerror >= 0) { err_jmp = &err_jmp0; ij = setjmp(err_jmp0.jb); if (*nerror = ij) return 0.; } want_deriv = want_derivs; errno = 0; /* in case f77 set errno opening files */ if (!asl->i.x_known) x2_check_ASL(asl,X); if (!asl->i.ncxval) asl->i.ncxval = (int*)M1zapalloc(nclcon*sizeof(int)); if (!(x0kind & ASL_have_concom)) { if (comb < combc) comeval(asl, comb, combc); if (comc1) com1eval(asl, 0, comc1); x0kind |= ASL_have_concom; } asl->i.ncxval[i] = asl->i.nxval; co_index = i; e = con_de[i].e; f = (*e->op)(e C_ASL); err_jmp = 0; return f; }
real obj2val_ASL(ASL *a, int i, real *X, fint *nerror) { ASL_fgh *asl; Jmp_buf err_jmp0; cde *d; expr *e1; int ij, j1, kv, *vmi; ograd *gr, **gr0; real f, *vscale; NNOBJ_chk(a, i, "obj2val"); asl = (ASL_fgh*)a; if (nerror && *nerror >= 0) { err_jmp = &err_jmp0; ij = setjmp(err_jmp0.jb); if ((*nerror = ij)) { f = 0.; goto done; } } want_deriv = want_derivs; errno = 0; /* in case f77 set errno opening files */ x2_check(X); if (!asl->i.noxval) asl->i.noxval = (int*)M1zapalloc(n_obj*sizeof(int)); co_index = -(i + 1); if (!(x0kind & ASL_have_objcom)) { if (ncom0 > combc) comeval(asl, combc, ncom0); x0kind |= ASL_have_objcom; } d = obj_de + i; if (d->n_com1) com1eval(asl, d->com11, d->n_com1); gr0 = Ograd + i; e1 = d->e; f = (*e1->op)(e1 C_ASL); asl->i.noxval[i] = asl->i.nxval; kv = 0; vmi = 0; if ((vscale = asl->i.vscale)) kv = 2; if (asl->i.vmap) { vmi = get_vminv_ASL(a); ++kv; } gr = *gr0; switch(kv) { case 3: for(; gr; gr = gr->next) { j1 = vmi[gr->varno]; f += X[j1] * vscale[j1] * gr->coef; } break; case 2: for(; gr; gr = gr->next) { j1 = gr->varno; f += X[j1] * vscale[j1] * gr->coef; } break; case 1: for(; gr; gr = gr->next) f += X[vmi[gr->varno]] * gr->coef; break; case 0: for(; gr; gr = gr->next) f += X[gr->varno] * gr->coef; } done: err_jmp = 0; return f; }