PetscErrorCode VecView_Seq_Draw_LG(Vec xin,PetscViewer v) { PetscDraw draw; PetscBool isnull; PetscDrawLG lg; PetscErrorCode ierr; PetscInt i,c,bs = PetscAbs(xin->map->bs),n = xin->map->n/bs; const PetscScalar *xv; PetscReal *xx,*yy; int colors[] = {PETSC_DRAW_RED}; PetscFunctionBegin; ierr = PetscViewerDrawGetDraw(v,0,&draw);CHKERRQ(ierr); ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); if (isnull) PetscFunctionReturn(0); ierr = PetscMalloc2(n,&xx,n,&yy);CHKERRQ(ierr); ierr = VecGetArrayRead(xin,&xv);CHKERRQ(ierr); for (c=0; c<bs; c++) { ierr = PetscViewerDrawGetDrawLG(v,c,&lg);CHKERRQ(ierr); ierr = PetscDrawLGReset(lg);CHKERRQ(ierr); ierr = PetscDrawLGSetDimension(lg,1);CHKERRQ(ierr); ierr = PetscDrawLGSetColors(lg,colors);CHKERRQ(ierr); for (i=0; i<n; i++) { xx[i] = (PetscReal)i; yy[i] = PetscRealPart(xv[c + i*bs]); } ierr = PetscDrawLGAddPoints(lg,n,&xx,&yy);CHKERRQ(ierr); ierr = PetscDrawLGDraw(lg);CHKERRQ(ierr); ierr = PetscDrawLGSave(lg);CHKERRQ(ierr); } ierr = VecRestoreArrayRead(xin,&xv);CHKERRQ(ierr); ierr = PetscFree2(xx,yy);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode VecView_Seq_Draw_LG(Vec xin,PetscViewer v) { PetscErrorCode ierr; PetscInt i,c,bs = PetscAbs(xin->map->bs),n = xin->map->n/bs; PetscDraw win; PetscReal *xx; PetscDrawLG lg; const PetscScalar *xv; PetscReal *yy; PetscFunctionBegin; ierr = PetscMalloc1(n,&xx);CHKERRQ(ierr); ierr = PetscMalloc1(n,&yy);CHKERRQ(ierr); ierr = VecGetArrayRead(xin,&xv);CHKERRQ(ierr); for (c=0; c<bs; c++) { ierr = PetscViewerDrawGetDrawLG(v,c,&lg);CHKERRQ(ierr); ierr = PetscDrawLGGetDraw(lg,&win);CHKERRQ(ierr); ierr = PetscDrawCheckResizedWindow(win);CHKERRQ(ierr); ierr = PetscDrawLGReset(lg);CHKERRQ(ierr); for (i=0; i<n; i++) { xx[i] = (PetscReal) i; yy[i] = PetscRealPart(xv[c + i*bs]); } ierr = PetscDrawLGAddPoints(lg,n,&xx,&yy);CHKERRQ(ierr); ierr = PetscDrawLGDraw(lg);CHKERRQ(ierr); ierr = PetscDrawSynchronizedFlush(win);CHKERRQ(ierr); } ierr = VecRestoreArrayRead(xin,&xv);CHKERRQ(ierr); ierr = PetscFree(yy);CHKERRQ(ierr); ierr = PetscFree(xx);CHKERRQ(ierr); PetscFunctionReturn(0); }