Esempio n. 1
0
File: npcheck.c Progetto: rolk/ug
INT NS_DIM_PREFIX CheckSymmetryOfMatrix (GRID *theGrid, MATDATA_DESC *A)
{
  MATRIX *m,*mt;
  VECTOR *v,*w;
  DOUBLE *mptr,*mtptr;
  register SHORT i,j,rcomp,ccomp,*mcomp,*mtcomp,vtype,mtype;

  for (v=FIRSTVECTOR(theGrid); v!=NULL; v=SUCCVC(v)) {
    vtype = VTYPE(v);
    for (m=VSTART(v); m!=NULL; m=MNEXT(m)) {
      mt = MADJ(m);
      w = MDEST(m);
      mtype = MTP(vtype,VTYPE(w));
      rcomp = MD_ROWS_IN_MTYPE(A,mtype);
      if (rcomp == 0) continue;
      ccomp = MD_COLS_IN_MTYPE(A,mtype);
      if (ccomp == 0) continue;
      mcomp = MD_MCMPPTR_OF_MTYPE(A,mtype);
      mptr = MVALUEPTR(m,0);
      mtcomp = MD_MCMPPTR_OF_MTYPE(A,MTP(VTYPE(w),vtype));
      mtptr = MVALUEPTR(m,0);
      for (i=0; i<ccomp; i++)
        for (j=0; j<rcomp; j++)
          if (mptr[mcomp[i*rcomp+j]] != mtptr[mtcomp[j*ccomp+i]])
            return(1);
    }
  }

  return(0);
}
Esempio n. 2
0
void build_graph(double *x,VTYPE &y,double (*fun)(double,double*),double x0,double x1,int nx,VTYPE &par)
{
  double dx=(x1-x0)/nx;
#ifdef JACK
  VTYPE xj(nx+1,par.njack);
  y=VTYPE(nx+1,par.njack);
#else
  VTYPE xj(nx+1,par.nboot,par.njack);
  y=VTYPE(nx+1,par.nboot,par.njack);
#endif
  
  for(int i=0;i<=nx;i++) xj.data[i]=x[i]=x0+dx*i;
  
  y=par_single_fun(fun,xj,par);
} 
Esempio n. 3
0
File: npcheck.c Progetto: rolk/ug
static int Gather_VectorFlags (DDD_OBJ obj, void *data)
{
  VECTOR *pv = (VECTOR *)obj;
  INT *idata = (INT *)data;

  idata[0] = VECSKIP(pv);
  idata[1] = VCLASS(pv);
  idata[2] = VNCLASS(pv);
  idata[3] = NEW_DEFECT(pv);
  idata[4] = FINE_GRID_DOF(pv);
  idata[5] = VTYPE(pv);
  idata[6] = VOTYPE(pv);
  idata[7] = VDATATYPE(pv);
  idata[8] = VNEW(pv);
  idata[9] = VECTORSIDE(pv);
  idata[10] = VPART(pv);

  return (0);
}
Esempio n. 4
0
File: nliter.c Progetto: rolk/ug
INT l_nlgs (NP_NLGS *nlgs, NP_NL_ASSEMBLE *ass, GRID *grid, const DOUBLE *damp,
            VECDATA_DESC *x, VECDATA_DESC *v, MATDATA_DESC *M,
            VECDATA_DESC *d)
{
  VECTOR *vec,*w,*first_vec;
  NODE *theNode;
  MULTIGRID *mg;
  INT level;
  INT rtype,ctype,myindex,error;
  register MATRIX *mat;
  register SHORT *tmpptr,*dcomp,*xcomp,*vcomp;
  register SHORT i;
  register SHORT n;
  DEFINE_VD_CMPS(cy);
  DEFINE_MD_CMPS(m);
  DOUBLE r[MAX_SINGLE_VEC_COMP];

  mg = nlgs->smoother.iter.base.mg;
  level = GLEVEL(grid);
  first_vec = FIRSTVECTOR(grid);

  L_VLOOP__CLASS(vec,first_vec,ACTIVE_CLASS)
  {
    rtype = VTYPE(vec);

    /* get node */
    theNode = (NODE*)VOBJECT(vec);

    n     = VD_NCMPS_IN_TYPE(v,rtype);
    if (n == 0) continue;
    dcomp = VD_CMPPTR_OF_TYPE(d,rtype);
    xcomp = VD_CMPPTR_OF_TYPE(x,rtype);
    vcomp = VD_CMPPTR_OF_TYPE(v,rtype);
    myindex = VINDEX(vec);

    /* local Jacobi matrix */
    if ((*ass->NLNAssembleMatrix)(ass,level,level,theNode,x,d,v,M,&error)) {
      error = __LINE__;
      REP_ERR_RETURN(error);
    }

    /* get defect */
    for (i=0; i<n; i++)
      r[i] = VVALUE(vec,dcomp[i]);

    /* rhs */
    for (ctype=0; ctype<=NVECTYPES; ctype++)
      if (MD_ROWS_IN_RT_CT(M,rtype,ctype)>0)
      {
        SET_CMPS_22(cy,v,m,M,rtype,ctype,tmpptr);
        s0 = s1 = 0.0;
        for (mat=MNEXT(VSTART(vec)); mat!=NULL; mat=MNEXT(mat))
          if (((VTYPE(w=MDEST(mat))==ctype) && (VCLASS(w)>=ACTIVE_CLASS)) && (myindex>VINDEX(w)))
            MATMUL_22(s,mat,m,w,cy);
        r[0] -= s0;
        r[1] -= s1;
      }

    /* solve */
    if (MySolveSmallBlock(n,VD_CMPPTR_OF_TYPE(v,rtype),VVALPTR(vec),
                          MD_MCMPPTR_OF_RT_CT(M,rtype,rtype),
                          MVALPTR(VSTART(vec)),r)!=0)
      return (__LINE__);

    /* damp */
    for (i=0; i<n; i++)
      VVALUE(vec,vcomp[i]) *= damp[i];

    /* update solution */
    for (i=0; i<n; i++)
      VVALUE(vec,xcomp[i]) -= VVALUE(vec,vcomp[i]);
  }
Esempio n. 5
0
File: npcheck.c Progetto: rolk/ug
static int Scatter_VectorFlags (DDD_OBJ obj, void *data)
{
  VECTOR *pv = (VECTOR *)obj;
  INT *idata = (INT *)data;

  if (idata[0] != VECSKIP(pv)) {
    printf(PFMT "ERROR:"
           " VECSKIP not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VECSKIP(pv),idata[0]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[1] != VCLASS(pv)) {
    printf(PFMT "ERROR:"
           " VCLASS not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VCLASS(pv),idata[1]);
    ASSERT(0);
  }
  if (idata[2] != VNCLASS(pv)) {
    printf(PFMT "ERROR:"
           " VNCLASS not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VNCLASS(pv),idata[2]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[3] != NEW_DEFECT(pv)) {
    printf(PFMT "ERROR:"
           " NEW_DEFECT not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),NEW_DEFECT(pv),idata[3]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[4] != FINE_GRID_DOF(pv)) {
    printf(PFMT "ERROR:"
           " FINE_GRID_DOF not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),FINE_GRID_DOF(pv),idata[4]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[5] != VTYPE(pv)) {
    printf(PFMT "ERROR:"
           " VTYPE not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VTYPE(pv),idata[5]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[6] != VOTYPE(pv)) {
    printf(PFMT "ERROR:"
           " VOTYPE not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VOTYPE(pv),idata[6]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[7] != VDATATYPE(pv)) {
    printf(PFMT "ERROR:"
           " VDATATYPE not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VDATATYPE(pv),idata[7]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[8] != VNEW(pv)) {
    printf(PFMT "ERROR:"
           " VNEW not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VNEW(pv),idata[8]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[9] != VECTORSIDE(pv)) {
    printf(PFMT "ERROR:"
           " VECTORSIDE not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VECTORSIDE(pv),idata[9]);
    pcheck++;
    ASSERT(0);
  }
  if (idata[10] != VPART(pv)) {
    printf(PFMT "ERROR:"
           " VPART not matches vec="
           VINDEX_FMTX " %d master %d\n",me,
           VINDEX_PRTX(pv),VPART(pv),idata[10]);
    pcheck++;
    ASSERT(0);
  }

  return (0);
}
Esempio n. 6
0
File: npcheck.c Progetto: rolk/ug
static INT CheckVector (GRID *theGrid, VECTOR *v)
{
  FORMAT *theFormat;
  NODE *theNode;
  VECTOR *w;
  INT nerr = 0;

  /* get format */
  theFormat = MGFORMAT(MYMG(theGrid));
  if ((FMT_S_MAT_TP(theFormat,DIAGMATRIXTYPE(VTYPE(v)))>0) && (!GHOST(v))) {
    if (VSTART(v) == NULL) {
      UserWriteF(PFMT "ERROR: no diagonal matrix vec=" VINDEX_FMTX "\n",
                 me,VINDEX_PRTX(v));
      nerr++;
    }
    else if (!MDIAG(VSTART(v))) {
      UserWriteF(PFMT "ERROR: VSTART no diagonal matrix vec="
                 VINDEX_FMTX "\n",
                 me,VINDEX_PRTX(v));
      nerr++;
    }
  }

  /* check flags locally */
  if (NEW_DEFECT(v) != (VCLASS(v)>=2)) {
    UserWriteF(PFMT "ERROR: classes not match vec="
               VINDEX_FMTX " NEW_DEFECT %d VCLASS %d\n",
               me,VINDEX_PRTX(v),NEW_DEFECT(v),VCLASS(v));
    nerr++;
  }
  if (FINE_GRID_DOF(v) != ((VCLASS(v)>=2)&&(VNCLASS(v)<=1))) {
    UserWriteF(PFMT "ERROR: classes not match vec="
               VINDEX_FMTX " FINE_GRID_DOF %d VNCLASS %d VCLASS %d\n",
               me,VINDEX_PRTX(v),FINE_GRID_DOF(v),VNCLASS(v),VCLASS(v));
    nerr++;
  }
  if (FINE_GRID_DOF(v))
    if (FULLREFINELEVEL(MYMG(theGrid)) > GLEVEL(theGrid)) {
      UserWriteF(PFMT "ERROR: FULLREFINELEVEL too large vec="
                 VINDEX_FMTX " FINE_GRID_DOF %d FULLREFINELEVEL %d\n",
                 me,VINDEX_PRTX(v),FINE_GRID_DOF(v),
                 FULLREFINELEVEL(MYMG(theGrid)));
      nerr++;
    }
  if (VOTYPE(v) == NODEVEC) {
    theNode = (NODE *) VOBJECT(v);
    if (theNode == NULL) {
      if (GLEVEL(theGrid) >= 0) {
        UserWriteF(PFMT "ERROR: nodevector has no NODE vec="
                   VINDEX_FMTX " \n",
                   me,VINDEX_PRTX(v));
        nerr++;
      }
    }
    else {
      if (OBJT(theNode) != NDOBJ) {
        UserWriteF(PFMT "ERROR: nodevector has no NODE object vec="
                   VINDEX_FMTX " OBJT %d\n",
                   me,VINDEX_PRTX(v),OBJT(theNode));
        nerr++;
      }
      if (NTYPE(theNode) == CORNER_NODE) {
        theNode = (NODE *)NFATHER(theNode);
        if (theNode != NULL) {
          w = NVECTOR(theNode);
          if (w == NULL) {
            UserWriteF(PFMT "ERROR:"
                       " cornernode vector has no father vec="
                       VINDEX_FMTX "\n",
                       me,VINDEX_PRTX(v));
            nerr++;
          }
          if (VNCLASS(w) != VCLASS(v)) {
            UserWriteF(PFMT "ERROR:"
                       " VCLASS and VNCLASS not matches vec="
                       VINDEX_FMTX " VCLASS %d father vec "
                       VINDEX_FMTX " VNCLASS %d\n",
                       me,VINDEX_PRTX(v),VCLASS(v),
                       VINDEX_PRTX(w),VNCLASS(w));
            nerr++;
          }
        }
      }
    }
  }
  return(nerr);
}