コード例 #1
0
ファイル: interfacesf.c プロジェクト: toeb/adolc
/*--------------------------------------------------------------------------*/
fint fov_reverse_(fint* ftag,
                  fint* fm,
                  fint* fn,
                  fint* fq,
                  fdouble* fu,
                  fdouble* fz) {
    int rc=-1;
    int tag=*ftag, m=*fm, n=*fn, q=*fq;
    double** U = myalloc2(q,m);
    double** Z = myalloc2(q,n);
    spread2(q,m,fu,U);
    rc=fov_reverse(tag,m,n,q,U,Z);
    pack2(q,n,Z,fz);
    free((char*)*Z);
    free((char*)Z);
    free((char*)*U);
    free((char*)U);
    return rc;
}
コード例 #2
0
ファイル: taylor.c プロジェクト: cttedwards/FLaspm
int jac_solv( unsigned short tag, int n, double* x, double* b,
              unsigned short sparse, unsigned short mode ) {
    static double **J;
    static double **I;
    static double *y;
    static double *xold;
    static int* ri;
    static int* ci;
    static int nax,tagold,modeold,cgd;
    int i,j;
    int rc = 3;

    if ((n != nax) || (tag != tagold)) {
        if (nax) {
            free(*J);
            free(J);
            free(*I);
            free(I);
            free(xold);
            free(ri);
            free(ci);
            free(y);
        }
        J = myalloc2(n,n);
        I = myalloc2(n,n);
        y = myalloc1(n);

        xold = myalloc1(n);
        ri = (int*)malloc(n*sizeof(int));
        ci = (int*)malloc(n*sizeof(int));
        for (i=0; i<n; i++) {
            xold[i] = 0;
            for (j=0;j<n;j++)
                I[i][j]=(i==j)?1.0:0.0;
        }
        cgd = 1;
        modeold = 0;
        nax = n;
        tagold = tag;
    }
    if (cgd == 0)
        for (i=0; i<n; i++)
            if (x[i] != xold[i])
                cgd = 1;
    if (cgd == 1)
        for (i=0; i<n; i++)
            xold[i] = x[i];
    switch(mode) {
    case 0:
        MINDEC(rc,zos_forward(tag,n,n,1,x,y));
        MINDEC(rc,fov_reverse(tag,n,n,n,I,J));
        break;
    case 1:
        if ((modeold == 0) || (cgd == 1)) {
            MINDEC(rc,zos_forward(tag,n,n,1,x,y));
            MINDEC(rc,fov_reverse(tag,n,n,n,I,J));
        }
        if (LUFactorization(J,n,ri,ci) < 0)
            return -3;
        modeold = 1;
        break;
    case 2:
        if ((modeold < 1) || (cgd == 1)) {
            MINDEC(rc,zos_forward(tag,n,n,1,x,y));
            MINDEC(rc,fov_reverse(tag,n,n,n,I,J));
            if (LUFactorization(J,n,ri,ci) < 0)
                return -3;
        }
        GauszSolve(J,n,ri,ci,b);
        modeold = 2;
        break;
    }
    cgd = 0;
    return rc;
}