PetscErrorCode TSTrajectoryGet_Basic(TSTrajectory tj,TS ts,PetscInt stepnum,PetscReal *t) { Vec Sol,*Y; PetscInt Nr,i; PetscViewer viewer; PetscReal timepre; char filename[PETSC_MAX_PATH_LEN]; PetscErrorCode ierr; PetscFunctionBegin; ierr = TSGetTotalSteps(ts,&stepnum);CHKERRQ(ierr); ierr = PetscSNPrintf(filename,sizeof filename,"SA-data/SA-%06d.bin",stepnum);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&viewer);CHKERRQ(ierr); ierr = TSGetSolution(ts,&Sol);CHKERRQ(ierr); ierr = VecLoad(Sol,viewer);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,t,1,NULL,PETSC_REAL);CHKERRQ(ierr); if (stepnum != 0) { ierr = TSGetStages(ts,&Nr,&Y);CHKERRQ(ierr); for (i=0;i<Nr ;i++) { ierr = VecLoad(Y[i],viewer);CHKERRQ(ierr); } ierr = PetscViewerBinaryRead(viewer,&timepre,1,NULL,PETSC_REAL);CHKERRQ(ierr); ierr = TSSetTimeStep(ts,-(*t)+timepre);CHKERRQ(ierr); } ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); PetscFunctionReturn(0); }
int main(int argc,char **argv) { PetscErrorCode ierr; PetscInt M = PETSC_DECIDE,N = PETSC_DECIDE; DM da; Vec global; PetscViewer bviewer; ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; ierr = PetscOptionsGetInt(NULL,NULL,"-M",&M,NULL);CHKERRQ(ierr); ierr = PetscOptionsGetInt(NULL,NULL,"-N",&N,NULL);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"daoutput",FILE_MODE_READ,&bviewer);CHKERRQ(ierr); ierr = DMCreate(PETSC_COMM_WORLD,&da);CHKERRQ(ierr); ierr = DMLoad(da,bviewer);CHKERRQ(ierr); ierr = DMCreateGlobalVector(da,&global);CHKERRQ(ierr); ierr = VecLoad(global,bviewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&bviewer);CHKERRQ(ierr); ierr = VecView(global,PETSC_VIEWER_DRAW_WORLD);CHKERRQ(ierr); /* Free memory */ ierr = VecDestroy(&global);CHKERRQ(ierr); ierr = DMDestroy(&da);CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }
PetscErrorCode MyVecLoad(const char fname[],PetscBool skippheader,PetscBool usempiio,Vec x) { MPI_Comm comm; PetscViewer viewer; PetscBool ismpiio,isskip; PetscErrorCode ierr; PetscFunctionBeginUser; ierr = PetscObjectGetComm((PetscObject)x,&comm);CHKERRQ(ierr); ierr = PetscViewerCreate(comm,&viewer);CHKERRQ(ierr); ierr = PetscViewerSetType(viewer,PETSCVIEWERBINARY);CHKERRQ(ierr); if (skippheader) { ierr = PetscViewerBinarySetSkipHeader(viewer,PETSC_TRUE);CHKERRQ(ierr); } ierr = PetscViewerFileSetMode(viewer,FILE_MODE_READ);CHKERRQ(ierr); if (usempiio) { ierr = PetscViewerBinarySetUseMPIIO(viewer,PETSC_TRUE);CHKERRQ(ierr); } ierr = PetscViewerFileSetName(viewer,fname);CHKERRQ(ierr); ierr = VecLoad(x,viewer);CHKERRQ(ierr); ierr = PetscViewerBinaryGetSkipHeader(viewer,&isskip);CHKERRQ(ierr); if (isskip) { ierr = PetscPrintf(comm,"*** PetscViewer[load] skipping header ***\n");CHKERRQ(ierr); } ierr = PetscViewerBinaryGetUseMPIIO(viewer,&ismpiio);CHKERRQ(ierr); if (ismpiio) { ierr = PetscPrintf(comm,"*** PetscViewer[load] using MPI-IO ***\n");CHKERRQ(ierr); } ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); PetscFunctionReturn(0); }
int main(int argc,char **args) { Vec x; /* exact solution, RHS, temp */ PetscViewer fd; /* viewer */ char file[PETSC_MAX_PATH_LEN]; /* input file name */ char file2[PETSC_MAX_PATH_LEN]; /* input file name */ PetscErrorCode ierr,ierrp; PetscInitialize(&argc,&args,(char *)0,help); ierr = PetscPrintf(PETSC_COMM_WORLD,"initializing...\n");CHKERRQ(ierr); ierr = PetscOptionsGetString(PETSC_NULL,"-f1",file,PETSC_MAX_PATH_LEN-1,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsGetString(PETSC_NULL,"-f2",file2,PETSC_MAX_PATH_LEN-1,PETSC_NULL);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr); ierrp = VecLoad(fd,PETSC_NULL,&x);CHKERRQ(ierr); ierr = PetscViewerDestroy(fd);CHKERRQ(ierr); PetscScalar *a; VecGetArray(x,&a); PetscInt n; VecGetSize(x,&n); std::ofstream f(file2); for (int i=0;i<n;i++) f << a[i] << " "; ierr = VecDestroy(x);CHKERRQ(ierr); ierr = PetscFinalize();CHKERRQ(ierr); return 0; }
int main(int argc,char **args) { Mat A,B; PetscViewer fd; /* viewer */ char file[PETSC_MAX_PATH_LEN]; /* input file name */ PetscErrorCode ierr; PetscBool flg; Vec v; PetscInitialize(&argc,&args,(char *)0,help); /* Determine files from which we read the two linear systems (matrix and right-hand-side vector). */ ierr = PetscOptionsGetString(PETSC_NULL,"-f0",file,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,"Must indicate binary file with the -f0 option"); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatSetType(A,MATSEQAIJ);CHKERRQ(ierr); ierr = MatLoad(A,fd);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&v);CHKERRQ(ierr); ierr = VecLoad(v,fd);CHKERRQ(ierr); ierr = MatView(A,PETSC_VIEWER_STDOUT_SELF);CHKERRQ(ierr); ierr = PadMatrix(A,v,3.0,&B);CHKERRQ(ierr); ierr = MatView(B,PETSC_VIEWER_STDOUT_SELF);CHKERRQ(ierr); ierr = MatDestroy(&B);CHKERRQ(ierr); ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
int main(int argc,char **args) { KSP ksp; /* linear solver context */ Mat A; /* matrix */ Vec x,b; /* approx solution, RHS, exact solution */ PetscViewer fd; /* viewer */ PetscErrorCode ierr; PetscInitialize(&argc,&args,(char *)0,help); fd = PETSC_VIEWER_SOCKET_WORLD; ierr = VecCreate(PETSC_COMM_WORLD,&b);CHKERRQ(ierr); ierr = VecLoad(b,fd);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatLoad(A,fd);CHKERRQ(ierr); ierr = VecDuplicate(b,&x);CHKERRQ(ierr); ierr = KSPCreate(PETSC_COMM_WORLD,&ksp);CHKERRQ(ierr); ierr = KSPSetOperators(ksp,A,A,SAME_NONZERO_PATTERN);CHKERRQ(ierr); ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr); ierr = KSPSetUp(ksp);CHKERRQ(ierr); ierr = KSPSolve(ksp,b,x);CHKERRQ(ierr); ierr = VecView(x,fd);CHKERRQ(ierr); ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = VecDestroy(&b);CHKERRQ(ierr); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = KSPDestroy(&ksp);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
int main(int argc, char **argv) { PetscErrorCode ierr; Vec U,cv,eta; DM da,da2; PetscViewer viewer,view_vtk_cv,view_vtk_eta; char filename[PETSC_MAX_PATH_LEN],cv_filename[PETSC_MAX_PATH_LEN],eta_filename[PETSC_MAX_PATH_LEN]; PetscBool flg,sflg = PETSC_FALSE; PetscInt i,n=10000; PetscInt seed; PetscInitialize(&argc,&argv, (char*)0, help); ierr = PetscOptionsSetValue("-viewer_binary_skip_info","true");CHKERRQ(ierr); ierr = PetscOptionsGetString(PETSC_NULL,"-f",filename,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); if (!flg) { ierr = PetscOptionsGetInt(PETSC_NULL,"-random_seed",&seed,&sflg);CHKERRQ(ierr); if (!sflg) { ierr = PetscStrcpy(filename,"ex61.data");CHKERRQ(ierr); } else { sprintf(filename,"ex61.data.%d",seed); } } ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&viewer);CHKERRQ(ierr); /* Get physics and time parameters */ ierr = DMCreate(PETSC_COMM_WORLD,&da);CHKERRQ(ierr); ierr = DMLoad(da,viewer);CHKERRQ(ierr); ierr = DMCreateGlobalVector(da,&U);CHKERRQ(ierr); ierr = DMDAGetReducedDA(da,1,&da2);CHKERRQ(ierr); ierr = DMCreateGlobalVector(da2,&cv);CHKERRQ(ierr); ierr = DMCreateGlobalVector(da2,&eta);CHKERRQ(ierr); for (i=0; i<n; i++) { /* when this fails it simply means the file is finished */ ierr = VecLoad(U,viewer);CHKERRQ(ierr); ierr = VecStrideGather(U,1,cv,INSERT_VALUES);CHKERRQ(ierr); ierr = VecStrideGather(U,4,eta,INSERT_VALUES);CHKERRQ(ierr); sprintf(cv_filename,"%s_cv_%d.vtk",filename,i); sprintf(eta_filename,"%s_eta_%d.vtk",filename,i); ierr = PetscViewerASCIIOpen(PETSC_COMM_WORLD,cv_filename,&view_vtk_cv);CHKERRQ(ierr); ierr = PetscViewerASCIIOpen(PETSC_COMM_WORLD,eta_filename,&view_vtk_eta);CHKERRQ(ierr); ierr = PetscViewerSetFormat(view_vtk_cv, PETSC_VIEWER_ASCII_VTK);CHKERRQ(ierr); ierr = PetscViewerSetFormat(view_vtk_eta, PETSC_VIEWER_ASCII_VTK);CHKERRQ(ierr); ierr = DMView(da2,view_vtk_cv);CHKERRQ(ierr); ierr = DMView(da2,view_vtk_eta);CHKERRQ(ierr); ierr = VecView(cv,view_vtk_cv);CHKERRQ(ierr); ierr = VecView(eta,view_vtk_eta);CHKERRQ(ierr); ierr = PetscViewerDestroy(&view_vtk_cv);CHKERRQ(ierr); ierr = PetscViewerDestroy(&view_vtk_eta);CHKERRQ(ierr); } ierr = VecDestroy(&U);CHKERRQ(ierr); ierr = VecDestroy(&cv);CHKERRQ(ierr); ierr = VecDestroy(&eta);CHKERRQ(ierr); ierr = DMDestroy(&da);CHKERRQ(ierr); ierr = DMDestroy(&da2);CHKERRQ(ierr); PetscFinalize(); return 0; }
PetscErrorCode loadVec(const char *path, Vec* v, MPI_Comm comm, PetscViewer* fd){ PetscErrorCode err; err = PetscViewerBinaryOpen(comm, path, FILE_MODE_READ, fd); CHKERRQ(err); err = VecCreate(comm, v); CHKERRQ(err); err = VecSetFromOptions(*v); CHKERRQ(err); err = VecLoad(*v, *fd); CHKERRQ(err); err = PetscViewerDestroy(fd); CHKERRQ(err); return err; }
static PetscErrorCode DMLoad_Shell(DM dm,PetscViewer v) { PetscErrorCode ierr; DM_Shell *shell = (DM_Shell*)dm->data; PetscFunctionBegin; ierr = VecCreate(PetscObjectComm((PetscObject)dm),&shell->Xglobal);CHKERRQ(ierr); ierr = VecLoad(shell->Xglobal,v);CHKERRQ(ierr); PetscFunctionReturn(0); }
int main(int argc,char **argv) { SNES snes; /* nonlinear solver context */ Vec r; /* solution, residual vectors */ PetscErrorCode ierr; AppCtx user; /* user-defined work context */ PetscViewer viewer; PetscInitialize(&argc,&argv,(char*)0,help); ierr = PetscViewerBinaryOpen(PETSC_COMM_SELF,"videfinition",FILE_MODE_READ,&viewer);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_SELF,&user.M);CHKERRQ(ierr); ierr = MatLoad(user.M,viewer);CHKERRQ(ierr); ierr = MatDuplicate(user.M,MAT_COPY_VALUES,&user.Jac);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_SELF,&user.q);CHKERRQ(ierr); ierr = VecLoad(user.q,viewer);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_SELF,&user.lb);CHKERRQ(ierr); ierr = VecLoad(user.lb,viewer);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_SELF,&user.ub);CHKERRQ(ierr);ierr = VecLoad(user.ub,viewer);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_SELF,&user.zz);CHKERRQ(ierr);ierr = VecLoad(user.zz,viewer);CHKERRQ(ierr); ierr = VecView(user.zz,PETSC_VIEWER_STDOUT_SELF);CHKERRQ(ierr); /* ierr = VecSet(user.zz,0.01);CHKERRQ(ierr);*/ ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = VecDuplicate(user.q,&r);CHKERRQ(ierr); /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create nonlinear solver context - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ ierr = SNESCreate(PETSC_COMM_WORLD,&snes);CHKERRQ(ierr); ierr = SNESSetFunction(snes,r,FormFunction1,&user);CHKERRQ(ierr); ierr = SNESSetJacobian(snes,user.Jac,user.Jac,FormJacobian1,&user);CHKERRQ(ierr); ierr = SNESVISetVariableBounds(snes,user.lb,user.ub);CHKERRQ(ierr); ierr = SNESSetFromOptions(snes);CHKERRQ(ierr); ierr = SNESSolve(snes,NULL,user.zz);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject)user.zz,"x*");CHKERRQ(ierr); ierr = VecView(user.zz,PETSC_VIEWER_STDOUT_SELF);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject)r,"f(x*)");CHKERRQ(ierr); ierr = FormFunction1(snes,user.zz,r,&user);CHKERRQ(ierr); ierr = VecView(r,PETSC_VIEWER_STDOUT_SELF);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
PetscErrorCode DataLoad(Vec x, char *filename) { PetscErrorCode ierr; PetscViewer dataviewer; PetscFunctionBegin; ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&dataviewer); CHKERRQ(ierr); ierr = VecLoad(x,dataviewer); CHKERRQ(ierr); ierr = PetscViewerDestroy(&dataviewer); CHKERRQ(ierr); PetscFunctionReturn(0); }
void readVec(Vec_dh *bout, char *ft, char *fn, HYPRE_Int ignore) { START_FUNC_DH *bout = NULL; if (fn == NULL) { SET_V_ERROR("passed NULL filename; can't open for reading!"); } if (!strcmp(ft, "csr") || !strcmp(ft, "trip")) { Vec_dhRead(bout, ignore, fn); CHECK_V_ERROR; } else if (!strcmp(ft, "ebin")) { Vec_dhReadBIN(bout, fn); CHECK_V_ERROR; } #ifdef PETSC_MODE else if (!strcmp(ft, "petsc")) { Viewer_DH viewer; HYPRE_Int ierr; Vec bb; ierr = ViewerBinaryOpen_DH(comm_dh, fn, BINARY_WRONLY_DH, &viewer); if (ierr) { SET_V_ERROR("ViewerBinaryOpen failed! [PETSc lib]"); } ierr = VecLoad(viewer, &bb); if (ierr) { SET_V_ERROR("VecLoad failed! [PETSc lib]"); } ierr = ViewerDestroy_DH(viewer); if (ierr) { SET_V_ERROR("ViewerDestroy failed! [PETSc lib]"); } ierr = convertPetscToEuclidVec(bb, bout); if (ierr) { SET_V_ERROR("convertPetscToEuclidVec failed!"); } ierr = VecDestroy(bb); if (ierr) { SET_V_ERROR("VecDestroy failed! [PETSc lib]"); } } #else else if (!strcmp(ft, "petsc")) { hypre_sprintf(msgBuf_dh, "must recompile Euclid using petsc mode!"); SET_V_ERROR(msgBuf_dh); } #endif else { hypre_sprintf(msgBuf_dh, "unknown filetype: -ftin %s", ft); SET_V_ERROR(msgBuf_dh); } END_FUNC_DH }
int main(int argc,char **args) { Mat A; Vec x,b; PetscErrorCode ierr; PetscViewer fd; /* viewer */ char file[PETSC_MAX_PATH_LEN]; /* input file name */ PetscBool flg; PetscInitialize(&argc,&args,(char*)0,help); /* Determine file from which we read the matrix A */ ierr = PetscOptionsGetString(NULL,"-f",file,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,"Must indicate binary file with the -f option"); /* Load matrix A */ ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatLoad(A,fd);CHKERRQ(ierr); flg = PETSC_FALSE; ierr = VecCreate(PETSC_COMM_WORLD,&x);CHKERRQ(ierr); ierr = PetscOptionsGetString(NULL,"-vec",file,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); if (flg) { if (file[0] == '0') { PetscInt m; PetscScalar one = 1.0; ierr = PetscInfo(0,"Using vector of ones for RHS\n");CHKERRQ(ierr); ierr = MatGetLocalSize(A,&m,NULL);CHKERRQ(ierr); ierr = VecSetSizes(x,m,PETSC_DECIDE);CHKERRQ(ierr); ierr = VecSetFromOptions(x);CHKERRQ(ierr); ierr = VecSet(x,one);CHKERRQ(ierr); } } else { ierr = VecLoad(x,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); } ierr = VecDuplicate(x,&b);CHKERRQ(ierr); ierr = MatMult(A,x,b);CHKERRQ(ierr); /* Print (for testing only) */ ierr = MatView(A,0);CHKERRQ(ierr); ierr = VecView(b,0);CHKERRQ(ierr); /* Free data structures */ ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = VecDestroy(&b);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
PetscErrorCode DMLoad_DA(DM da,PetscViewer viewer) { PetscErrorCode ierr; PetscInt dim,m,n,p,dof,swidth; DMDAStencilType stencil; DMDABoundaryType bx,by,bz; PetscInt classid = DM_FILE_CLASSID,subclassid = DMDA_FILE_CLASSID; PetscBool coors; DM dac; Vec c; PetscFunctionBegin; ierr = PetscViewerBinaryRead(viewer,&classid,1,PETSC_INT);CHKERRQ(ierr); if (classid != DM_FILE_CLASSID) SETERRQ(((PetscObject)da)->comm,PETSC_ERR_ARG_WRONG,"Not DM next in file"); ierr = PetscViewerBinaryRead(viewer,&subclassid,1,PETSC_INT);CHKERRQ(ierr); if (subclassid != DMDA_FILE_CLASSID) SETERRQ(((PetscObject)da)->comm,PETSC_ERR_ARG_WRONG,"Not DM DA next in file"); ierr = PetscViewerBinaryRead(viewer,&dim,1,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&m,1,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&n,1,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&p,1,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&dof,1,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&swidth,1,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&bx,1,PETSC_ENUM);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&by,1,PETSC_ENUM);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&bz,1,PETSC_ENUM);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&stencil,1,PETSC_ENUM);CHKERRQ(ierr); ierr = DMDASetDim(da, dim);CHKERRQ(ierr); ierr = DMDASetSizes(da, m,n,p);CHKERRQ(ierr); ierr = DMDASetBoundaryType(da, bx, by, bz);CHKERRQ(ierr); ierr = DMDASetDof(da, dof);CHKERRQ(ierr); ierr = DMDASetStencilType(da, stencil);CHKERRQ(ierr); ierr = DMDASetStencilWidth(da, swidth);CHKERRQ(ierr); ierr = DMSetUp(da);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&coors,1,PETSC_ENUM);CHKERRQ(ierr); if (coors) { ierr = DMDAGetCoordinateDA(da,&dac);CHKERRQ(ierr); ierr = DMCreateGlobalVector(dac,&c);CHKERRQ(ierr); ierr = VecLoad(c,viewer);CHKERRQ(ierr); ierr = DMDASetCoordinates(da,c);CHKERRQ(ierr); ierr = VecDestroy(&c);CHKERRQ(ierr); } PetscFunctionReturn(0); }
PetscErrorCode UMReadNodes(UM *mesh, char *filename) { PetscErrorCode ierr; int twoN; PetscViewer viewer; if (mesh->N > 0) { SETERRQ(PETSC_COMM_WORLD,1,"nodes already created?\n"); } ierr = VecCreate(PETSC_COMM_WORLD,&mesh->loc); CHKERRQ(ierr); ierr = VecSetFromOptions(mesh->loc); CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&viewer); CHKERRQ(ierr); ierr = VecLoad(mesh->loc,viewer); CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer); CHKERRQ(ierr); ierr = VecGetSize(mesh->loc,&twoN); CHKERRQ(ierr); if (twoN % 2 != 0) { SETERRQ1(PETSC_COMM_WORLD,2,"node locations loaded from %s are not N pairs\n",filename); } mesh->N = twoN / 2; return 0; }
-fout <output_file> : file for saving output matrix and vector\n\n"; #include <petscmat.h> #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **args) { PetscErrorCode ierr; PetscBool flg; Vec x; Mat A; char file[256]; PetscViewer fd; PetscInitialize(&argc,&args,(char *)0,help); /* Read matrix and RHS */ ierr = PetscOptionsGetString(PETSC_NULL,"-fin",file,256,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,help); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatSetType(A,MATSEQAIJ);CHKERRQ(ierr); ierr = MatLoad(A,fd);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&x);CHKERRQ(ierr); ierr = VecLoad(x,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); /* Write matrix and vector */ ierr = PetscOptionsGetString(PETSC_NULL,"-fout",file,256,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,help); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_WRITE,&fd);CHKERRQ(ierr); ierr = MatView(A,fd);CHKERRQ(ierr); ierr = VecView(x,fd);CHKERRQ(ierr); /* Free data structures */ ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
int main(int argc,char **args) { Vec b; PetscViewer fd; /* viewer */ PetscErrorCode ierr; PetscInt i; PetscInitialize(&argc,&args,(char *)0,help); fd = PETSC_VIEWER_SOCKET_WORLD; for (i=0;i<1000;i++){ ierr = VecCreate(PETSC_COMM_WORLD,&b);CHKERRQ(ierr); ierr = VecLoad(b,fd);CHKERRQ(ierr); ierr = VecView(b,fd);CHKERRQ(ierr); ierr = VecDestroy(&b);CHKERRQ(ierr); } ierr = PetscFinalize(); return 0; }
PetscErrorCode H2Solve(H2 h2) { PetscErrorCode ierr; EEPS eps; EEPSCreate(h2->comm, &eps); // set operator if(h2->s_is_id) { ierr = EEPSSetOperators(eps, h2->H, NULL); CHKERRQ(ierr); } else { ierr = EEPSSetOperators(eps, h2->H, h2->S); CHKERRQ(ierr); } // set initial space if(h2->eps_old) { PrintTimeStamp(h2->comm, "set init", NULL); EEPSSetInitSpaceFromOther(eps, PETSC_DEFAULT, h2->H, h2->eps_old->eps); } else if(h2->init_view) { PrintTimeStamp(h2->comm, "Read init", NULL); Vec x[1]; MatCreateVecs(h2->H, NULL, &x[0]); ierr = VecLoad(x[0], h2->init_view); CHKERRQ(ierr); ierr = EPSSetInitialSpace(eps->eps, 1, x); ierr = VecDestroy(&x[0]); CHKERRQ(ierr); ierr = PetscViewerDestroy(&h2->init_view); CHKERRQ(ierr); } // set other ierr = EEPSSetTarget(eps, -4.1); CHKERRQ(ierr); ierr = EEPSSetFromOptions(eps); CHKERRQ(ierr); // solve PrintTimeStamp(h2->comm, "solve", NULL); ierr = EEPSSolve(eps); CHKERRQ(ierr); // finalize if(h2->eps_old) { ierr = EEPSDestroy(&h2->eps_old); CHKERRQ(ierr); } h2->eps_old = eps; return 0; }
PetscErrorCode DMLoad_DA(DM da,PetscViewer viewer) { PetscErrorCode ierr; PetscInt dim,m,n,p,dof,swidth; DMDAStencilType stencil; DMBoundaryType bx,by,bz; PetscBool coors; DM dac; Vec c; PetscFunctionBegin; ierr = PetscViewerBinaryRead(viewer,&dim,1,NULL,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&m,1,NULL,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&n,1,NULL,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&p,1,NULL,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&dof,1,NULL,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&swidth,1,NULL,PETSC_INT);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&bx,1,NULL,PETSC_ENUM);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&by,1,NULL,PETSC_ENUM);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&bz,1,NULL,PETSC_ENUM);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&stencil,1,NULL,PETSC_ENUM);CHKERRQ(ierr); ierr = DMSetDimension(da, dim);CHKERRQ(ierr); ierr = DMDASetSizes(da, m,n,p);CHKERRQ(ierr); ierr = DMDASetBoundaryType(da, bx, by, bz);CHKERRQ(ierr); ierr = DMDASetDof(da, dof);CHKERRQ(ierr); ierr = DMDASetStencilType(da, stencil);CHKERRQ(ierr); ierr = DMDASetStencilWidth(da, swidth);CHKERRQ(ierr); ierr = DMSetUp(da);CHKERRQ(ierr); ierr = PetscViewerBinaryRead(viewer,&coors,1,NULL,PETSC_ENUM);CHKERRQ(ierr); if (coors) { ierr = DMGetCoordinateDM(da,&dac);CHKERRQ(ierr); ierr = DMCreateGlobalVector(dac,&c);CHKERRQ(ierr); ierr = VecLoad(c,viewer);CHKERRQ(ierr); ierr = DMSetCoordinates(da,c);CHKERRQ(ierr); ierr = VecDestroy(&c);CHKERRQ(ierr); } PetscFunctionReturn(0); }
int main(int argc,char **args) { Vec b; PetscViewer fd; PetscErrorCode ierr; PetscInt i; PetscInitialize(&argc,&args,(char *)0,help); /* server indicates we WAIT for someone to connect to our socket */ ierr = PetscViewerSocketOpen(PETSC_COMM_WORLD,"server",PETSC_DEFAULT,&fd);CHKERRQ(ierr); ierr = VecCreateMPI(PETSC_COMM_WORLD,10000,PETSC_DECIDE,&b);CHKERRQ(ierr); for (i=0;i<1000;i++){ ierr = VecView(b,fd);CHKERRQ(ierr); ierr = VecDestroy(&b);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&b);CHKERRQ(ierr); ierr = VecLoad(b,fd);CHKERRQ(ierr); } ierr = VecDestroy(&b);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
PetscErrorCode loadVector(char * type_v,Vec * b){ char file[PETSC_MAX_PATH_LEN]; char err[PETSC_MAX_PATH_LEN]; PetscErrorCode ierr; PetscBool flag; PetscViewer fd; PetscInt size; // check if there is a vec file, vector is not mandatory ierr=PetscOptionsGetString(PETSC_NULL,type_v,file,PETSC_MAX_PATH_LEN-1,&flag);CHKERRQ(ierr); if (!flag) { PetscPrintf(PETSC_COMM_WORLD,"Error : %s is not properly set\n",type_v); *b = NULL; }else{ PetscPrintf(PETSC_COMM_WORLD,"Loading Vector : %s\n",file); ierr=PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr=VecLoad(*b,fd);CHKERRQ(ierr); ierr=PetscViewerDestroy(&fd);CHKERRQ(ierr); ierr=VecGetSize(*b,&size);CHKERRQ(ierr); PetscPrintf(PETSC_COMM_WORLD,"Loaded Vector of size : %d\n",size); } return 0; }
PetscErrorCode InitializeProblem(AppCtx *user) { PetscErrorCode ierr; PetscViewer loader; MPI_Comm comm; PetscInt nrows,ncols,i; PetscScalar one=1.0; char filebase[128]; char filename[128]; PetscFunctionBegin; comm = PETSC_COMM_WORLD; ierr = PetscStrncpy(filebase,user->name,128);CHKERRQ(ierr); ierr = PetscStrncat(filebase,"/",1);CHKERRQ(ierr); ierr = PetscStrncpy(filename,filebase,128);CHKERRQ(ierr); ierr = PetscStrncat(filename,"f",3);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(comm,filename,FILE_MODE_READ,&loader);CHKERRQ(ierr); ierr = VecCreate(comm,&user->d);CHKERRQ(ierr); ierr = VecLoad(user->d,loader);CHKERRQ(ierr); ierr = PetscViewerDestroy(&loader);CHKERRQ(ierr); ierr = VecGetSize(user->d,&nrows);CHKERRQ(ierr); ierr = VecSetFromOptions(user->d);CHKERRQ(ierr); user->n = nrows; ierr = PetscStrncpy(filename,filebase,128);CHKERRQ(ierr); ierr = PetscStrncat(filename,"H",3);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(comm,filename,FILE_MODE_READ,&loader);CHKERRQ(ierr); ierr = MatCreate(comm,&user->H);CHKERRQ(ierr); ierr = MatSetSizes(user->H,PETSC_DECIDE,PETSC_DECIDE,nrows,nrows);CHKERRQ(ierr); ierr = MatLoad(user->H,loader);CHKERRQ(ierr); ierr = PetscViewerDestroy(&loader);CHKERRQ(ierr); ierr = MatGetSize(user->H,&nrows,&ncols);CHKERRQ(ierr); if (nrows != user->n) SETERRQ(comm,0,"H: nrows != n\n"); if (ncols != user->n) SETERRQ(comm,0,"H: ncols != n\n"); ierr = MatSetFromOptions(user->H);CHKERRQ(ierr); ierr = PetscStrncpy(filename,filebase,128);CHKERRQ(ierr); ierr = PetscStrncat(filename,"Aeq",3);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(comm,filename,FILE_MODE_READ,&loader); if (ierr) { user->Aeq = NULL; user->me = 0; } else { ierr = MatCreate(comm,&user->Aeq);CHKERRQ(ierr); ierr = MatLoad(user->Aeq,loader);CHKERRQ(ierr); ierr = PetscViewerDestroy(&loader);CHKERRQ(ierr); ierr = MatGetSize(user->Aeq,&nrows,&ncols);CHKERRQ(ierr); if (ncols != user->n) SETERRQ(comm,0,"Aeq ncols != H nrows\n"); ierr = MatSetFromOptions(user->Aeq);CHKERRQ(ierr); user->me = nrows; } ierr = PetscStrncpy(filename,filebase,128);CHKERRQ(ierr); ierr = PetscStrncat(filename,"Beq",3);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(comm,filename,FILE_MODE_READ,&loader);CHKERRQ(ierr); if (ierr) { user->beq = 0; } else { ierr = VecCreate(comm,&user->beq);CHKERRQ(ierr); ierr = VecLoad(user->beq,loader);CHKERRQ(ierr); ierr = PetscViewerDestroy(&loader);CHKERRQ(ierr); ierr = VecGetSize(user->beq,&nrows);CHKERRQ(ierr); if (nrows != user->me) SETERRQ(comm,0,"Aeq nrows != Beq n\n"); ierr = VecSetFromOptions(user->beq);CHKERRQ(ierr); } user->mi = user->n; /* Ain = eye(n,n) */ ierr = MatCreate(comm,&user->Ain);CHKERRQ(ierr); ierr = MatSetType(user->Ain,MATAIJ);CHKERRQ(ierr); ierr = MatSetSizes(user->Ain,PETSC_DECIDE,PETSC_DECIDE,user->mi,user->mi);CHKERRQ(ierr); ierr = MatMPIAIJSetPreallocation(user->Ain,1,NULL,0,NULL);CHKERRQ(ierr); ierr = MatSeqAIJSetPreallocation(user->Ain,1,NULL);CHKERRQ(ierr); for (i=0;i<user->mi;i++) { ierr = MatSetValues(user->Ain,1,&i,1,&i,&one,INSERT_VALUES);CHKERRQ(ierr); } ierr = MatAssemblyBegin(user->Ain,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); ierr = MatAssemblyEnd(user->Ain,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); ierr = MatSetFromOptions(user->Ain);CHKERRQ(ierr); /* bin = [0,0 ... 0]' */ ierr = VecCreate(comm,&user->bin);CHKERRQ(ierr); ierr = VecSetType(user->bin,VECMPI);CHKERRQ(ierr); ierr = VecSetSizes(user->bin,PETSC_DECIDE,user->mi);CHKERRQ(ierr); ierr = VecSet(user->bin,0.0);CHKERRQ(ierr); ierr = VecSetFromOptions(user->bin);CHKERRQ(ierr); user->m = user->me + user->mi; PetscFunctionReturn(0); }
int main(int argc, char **argv) { MPI_Comm comm; DM dm; Vec v, nv, rv, coord; PetscBool test_read = PETSC_FALSE, verbose = PETSC_FALSE, flg; PetscViewer hdf5Viewer; PetscInt dim = 2; PetscInt numFields = 1; PetscInt numBC = 0; PetscInt numComp[1] = {2}; PetscInt numDof[3] = {2, 0, 0}; PetscInt bcFields[1] = {0}; IS bcPoints[1] = {NULL}; PetscSection section; PetscReal norm; PetscErrorCode ierr; ierr = PetscInitialize(&argc, &argv, (char *) 0, help);CHKERRQ(ierr); comm = PETSC_COMM_WORLD; ierr = PetscOptionsBegin(PETSC_COMM_WORLD,"","Test Options","none");CHKERRQ(ierr); ierr = PetscOptionsBool("-test_read","Test reading from the HDF5 file","",PETSC_FALSE,&test_read,NULL);CHKERRQ(ierr); ierr = PetscOptionsBool("-verbose","print the Vecs","",PETSC_FALSE,&verbose,NULL);CHKERRQ(ierr); ierr = PetscOptionsInt("-dim","the dimension of the problem","",2,&dim,NULL);CHKERRQ(ierr); ierr = PetscOptionsEnd(); ierr = DMPlexCreateBoxMesh(comm, dim, PETSC_TRUE, &dm);CHKERRQ(ierr); ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr); numDof[0] = dim; ierr = DMPlexCreateSection(dm, dim, numFields, numComp, numDof, numBC, bcFields, bcPoints, NULL, NULL, §ion);CHKERRQ(ierr); ierr = DMSetDefaultSection(dm, section);CHKERRQ(ierr); ierr = PetscSectionDestroy(§ion);CHKERRQ(ierr); ierr = DMSetUseNatural(dm, PETSC_TRUE);CHKERRQ(ierr); { DM dmDist; ierr = DMPlexDistribute(dm, 0, NULL, &dmDist);CHKERRQ(ierr); if (dmDist) { ierr = DMDestroy(&dm);CHKERRQ(ierr); dm = dmDist; } } ierr = DMCreateGlobalVector(dm, &v);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) v, "V");CHKERRQ(ierr); ierr = DMGetCoordinates(dm, &coord);CHKERRQ(ierr); ierr = VecCopy(coord, v);CHKERRQ(ierr); if (verbose) { PetscInt size, bs; ierr = VecGetSize(v, &size);CHKERRQ(ierr); ierr = VecGetBlockSize(v, &bs);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD, "==== original V in global ordering. size==%d\tblock size=%d\n", size, bs);CHKERRQ(ierr); ierr = VecView(v, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); } ierr = DMCreateGlobalVector(dm, &nv);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) nv, "NV");CHKERRQ(ierr); ierr = DMPlexGlobalToNaturalBegin(dm, v, nv);CHKERRQ(ierr); ierr = DMPlexGlobalToNaturalEnd(dm, v, nv);CHKERRQ(ierr); if (verbose) { PetscInt size, bs; ierr = VecGetSize(nv, &size);CHKERRQ(ierr); ierr = VecGetBlockSize(nv, &bs);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD, "==== V in natural ordering. size==%d\tblock size=%d\n", size, bs);CHKERRQ(ierr); ierr = VecView(nv, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); } ierr = VecViewFromOptions(v, NULL, "-global_vec_view");CHKERRQ(ierr); if (test_read) { ierr = DMCreateGlobalVector(dm, &rv);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) rv, "V");CHKERRQ(ierr); /* Test native read */ ierr = PetscViewerHDF5Open(comm, "V.h5", FILE_MODE_READ, &hdf5Viewer);CHKERRQ(ierr); ierr = PetscViewerPushFormat(hdf5Viewer, PETSC_VIEWER_NATIVE);CHKERRQ(ierr); ierr = VecLoad(rv, hdf5Viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&hdf5Viewer);CHKERRQ(ierr); if (verbose) { PetscInt size, bs; ierr = VecGetSize(rv, &size);CHKERRQ(ierr); ierr = VecGetBlockSize(rv, &bs);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD, "==== Vector from file. size==%d\tblock size=%d\n", size, bs);CHKERRQ(ierr); ierr = VecView(rv, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); } ierr = VecEqual(rv, v, &flg);CHKERRQ(ierr); if (flg) { ierr = PetscPrintf(PETSC_COMM_WORLD, "V and RV are equal\n");CHKERRQ(ierr); } else { ierr = PetscPrintf(PETSC_COMM_WORLD, "V and RV are not equal\n\n");CHKERRQ(ierr); ierr = VecAXPY(rv, -1.0, v);CHKERRQ(ierr); ierr = VecNorm(rv, NORM_INFINITY, &norm);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD, "diff norm is = %g\n", (double) norm);CHKERRQ(ierr); ierr = VecView(rv, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); } /* Test raw read */ ierr = PetscViewerHDF5Open(comm, "V.h5", FILE_MODE_READ, &hdf5Viewer);CHKERRQ(ierr); ierr = VecLoad(rv, hdf5Viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&hdf5Viewer);CHKERRQ(ierr); if (verbose) { PetscInt size, bs; ierr = VecGetSize(rv, &size);CHKERRQ(ierr); ierr = VecGetBlockSize(rv, &bs);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD, "==== Vector from file. size==%d\tblock size=%d\n", size, bs);CHKERRQ(ierr); ierr = VecView(rv, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); } ierr = VecEqual(rv, nv, &flg);CHKERRQ(ierr); if (flg) { ierr = PetscPrintf(PETSC_COMM_WORLD, "NV and RV are equal\n");CHKERRQ(ierr); } else { ierr = PetscPrintf(PETSC_COMM_WORLD, "NV and RV are not equal\n\n");CHKERRQ(ierr); ierr = VecAXPY(rv, -1.0, v);CHKERRQ(ierr); ierr = VecNorm(rv, NORM_INFINITY, &norm);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD, "diff norm is = %g\n", (double) norm);CHKERRQ(ierr); ierr = VecView(rv, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); } ierr = VecDestroy(&rv);CHKERRQ(ierr); } ierr = VecDestroy(&nv);CHKERRQ(ierr); ierr = VecDestroy(&v);CHKERRQ(ierr); ierr = DMDestroy(&dm);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
Example: mpiexec -n <np> ./ex130 -f <matrix binary file> -mat_solver_package 1 -mat_superlu_equil \n\n"; #include <petscmat.h> int main(int argc,char **args) { Mat A,F; Vec u,x,b; PetscErrorCode ierr; PetscMPIInt rank,size; PetscInt m,n,nfact,ipack=0; PetscReal norm,tol=1.e-12,Anorm; IS perm,iperm; MatFactorInfo info; PetscBool flg,testMatSolve=PETSC_TRUE; PetscViewer fd; /* viewer */ char file[PETSC_MAX_PATH_LEN]; /* input file name */ ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank);CHKERRQ(ierr); ierr = MPI_Comm_size(PETSC_COMM_WORLD, &size);CHKERRQ(ierr); /* Determine file from which we read the matrix A */ ierr = PetscOptionsGetString(NULL,NULL,"-f",file,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,"Must indicate binary file with the -f option"); /* Load matrix A */ ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatLoad(A,fd);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&b);CHKERRQ(ierr); ierr = VecLoad(b,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); ierr = MatGetLocalSize(A,&m,&n);CHKERRQ(ierr); if (m != n) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ, "This example is not intended for rectangular matrices (%d, %d)", m, n); ierr = MatNorm(A,NORM_INFINITY,&Anorm);CHKERRQ(ierr); /* Create vectors */ ierr = VecDuplicate(b,&x);CHKERRQ(ierr); ierr = VecDuplicate(x,&u);CHKERRQ(ierr); /* save the true solution */ /* Test LU Factorization */ ierr = MatGetOrdering(A,MATORDERINGNATURAL,&perm,&iperm);CHKERRQ(ierr); ierr = PetscOptionsGetInt(NULL,NULL,"-mat_solver_package",&ipack,NULL);CHKERRQ(ierr); switch (ipack) { case 1: #if defined(PETSC_HAVE_SUPERLU) if (!rank) printf(" SUPERLU LU:\n"); ierr = MatGetFactor(A,MATSOLVERSUPERLU,MAT_FACTOR_LU,&F);CHKERRQ(ierr); break; #endif case 2: #if defined(PETSC_HAVE_MUMPS) if (!rank) printf(" MUMPS LU:\n"); ierr = MatGetFactor(A,MATSOLVERMUMPS,MAT_FACTOR_LU,&F);CHKERRQ(ierr); { /* test mumps options */ PetscInt icntl_7 = 5; ierr = MatMumpsSetIcntl(F,7,icntl_7);CHKERRQ(ierr); } break; #endif default: if (!rank) printf(" PETSC LU:\n"); ierr = MatGetFactor(A,MATSOLVERPETSC,MAT_FACTOR_LU,&F);CHKERRQ(ierr); } info.fill = 5.0; ierr = MatLUFactorSymbolic(F,A,perm,iperm,&info);CHKERRQ(ierr); for (nfact = 0; nfact < 1; nfact++) { if (!rank) printf(" %d-the LU numfactorization \n",nfact); ierr = MatLUFactorNumeric(F,A,&info);CHKERRQ(ierr); /* Test MatSolve() */ if (testMatSolve) { ierr = MatSolve(F,b,x);CHKERRQ(ierr); /* Check the residual */ ierr = MatMult(A,x,u);CHKERRQ(ierr); ierr = VecAXPY(u,-1.0,b);CHKERRQ(ierr); ierr = VecNorm(u,NORM_INFINITY,&norm);CHKERRQ(ierr); if (norm > tol) { if (!rank) { ierr = PetscPrintf(PETSC_COMM_SELF,"MatSolve: rel residual %g/%g = %g, LU numfact %d\n",norm,Anorm,norm/Anorm,nfact);CHKERRQ(ierr); } } } } /* Free data structures */ ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = MatDestroy(&F);CHKERRQ(ierr); ierr = ISDestroy(&perm);CHKERRQ(ierr); ierr = ISDestroy(&iperm);CHKERRQ(ierr); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = VecDestroy(&b);CHKERRQ(ierr); ierr = VecDestroy(&u);CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }
PetscErrorCode iniCalcBC(PetscScalar tc, PetscInt Iterc, PetscScalar tf, PetscInt Iterf, PetscInt numTracers, Vec *v, Vec *bcc, Vec *bcf) { PetscErrorCode ierr; PetscInt itr; PetscViewer fd; PetscBool flg; PetscInt it; PetscScalar myTime; PetscScalar zero = 0.0; /* v[0]=TR1,v[1]=TR2,... */ ierr = VecGetArray(TR,&localTR);CHKERRQ(ierr); for (itr=0; itr<numTracers; itr++) { ierr = VecSet(bcc[itr],zero); CHKERRQ(ierr); ierr = VecSet(bcf[itr],zero); CHKERRQ(ierr); } ierr = VecGetArray(BCc,&localBCc);CHKERRQ(ierr); ierr = VecGetArray(BCf,&localBCf);CHKERRQ(ierr); ierr = PetscOptionsGetInt(PETSC_NULL,"-inert_gas_id",&gasID,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,"Must indicate inert gas tracer ID with the -inert_gas_id option"); ierr = PetscOptionsGetReal(PETSC_NULL,"-biogeochem_deltat",&DeltaT,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,"Must indicate biogeochemical time step in seconds with the -biogeochem_deltat option"); ierr = PetscOptionsHasName(PETSC_NULL,"-periodic_biogeochem_forcing",&periodicBiogeochemForcing);CHKERRQ(ierr); if (periodicBiogeochemForcing) { ierr=PetscPrintf(PETSC_COMM_WORLD,"Periodic biogeochemical forcing specified\n");CHKERRQ(ierr); ierr = iniPeriodicTimer("periodic_biogeochem_", &biogeochemTimer);CHKERRQ(ierr); } /* Grid arrays */ /* Forcing fields */ ierr = VecDuplicate(BCc,&Tss);CHKERRQ(ierr); ierr = VecDuplicate(BCc,&Sss);CHKERRQ(ierr); ierr = VecDuplicate(BCc,&atmosp);CHKERRQ(ierr); if (periodicBiogeochemForcing) { Tssp.firstTime = PETSC_TRUE; Sssp.firstTime = PETSC_TRUE; atmospp.firstTime = PETSC_TRUE; } else { ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"Tss.petsc",FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = VecLoad(Tss,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"Sss.petsc",FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = VecLoad(Sss,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"atmosp.petsc",FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = VecLoad(atmosp,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); } ierr = VecGetArray(Tss,&localTss);CHKERRQ(ierr); ierr = VecGetArray(Sss,&localSss);CHKERRQ(ierr); ierr = VecGetArray(atmosp,&localatmosp);CHKERRQ(ierr); /* ierr = PetscPrintf(PETSC_COMM_WORLD,"Done reading surface T, S, and atmospheric pressure\n");CHKERRQ(ierr); */ ierr = PetscOptionsHasName(PETSC_NULL,"-calc_diagnostics",&calcDiagnostics);CHKERRQ(ierr); if (calcDiagnostics) { /* Read T and S */ ierr = VecDuplicate(TR,&Ts);CHKERRQ(ierr); ierr = VecDuplicate(TR,&Ss);CHKERRQ(ierr); if (periodicBiogeochemForcing) { Tsp.firstTime = PETSC_TRUE; Ssp.firstTime = PETSC_TRUE; ierr = interpPeriodicVector(tc,&Ts,biogeochemTimer.cyclePeriod,biogeochemTimer.numPerPeriod,biogeochemTimer.tdp,&Tsp,"Ts_"); ierr = interpPeriodicVector(tc,&Ss,biogeochemTimer.cyclePeriod,biogeochemTimer.numPerPeriod,biogeochemTimer.tdp,&Ssp,"Ss_"); } else { ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"Ts.petsc",FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = VecLoad(Ts,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"Ss.petsc",FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = VecLoad(Ss,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); } ierr = VecGetArray(Ts,&localTs);CHKERRQ(ierr); ierr = VecGetArray(Ss,&localSs);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Done reading T/S\n");CHKERRQ(ierr); ierr = VecDuplicate(TR,&TReqdiag);CHKERRQ(ierr); ierr = VecSet(TReqdiag,zero);CHKERRQ(ierr); ierr = VecGetArray(TReqdiag,&localTReqdiag);CHKERRQ(ierr); /*Data for diagnostics */ ierr = iniStepTimer("diag_", Iter0, &diagTimer);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Diagnostics will be computed starting at (and including) time step: %d\n", diagTimer.startTimeStep);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Diagnostics will be computed over %d time steps\n", diagTimer.numTimeSteps);CHKERRQ(ierr); ierr = VecDuplicate(TR,&TRsatanomdiag);CHKERRQ(ierr); ierr = VecSet(TRsatanomdiag,zero);CHKERRQ(ierr); ierr = VecGetArray(TRsatanomdiag,&localTRsatanomdiag);CHKERRQ(ierr); ierr = VecDuplicate(TR,&TRsatanomdiagavg);CHKERRQ(ierr); ierr = VecSet(TRsatanomdiagavg,zero);CHKERRQ(ierr); ierr = VecDuplicate(TR,&TReqdiagavg);CHKERRQ(ierr); ierr = VecSet(TReqdiagavg,zero);CHKERRQ(ierr); ierr = VecDuplicate(BCc,&BCdiagavg);CHKERRQ(ierr); ierr = VecSet(BCdiagavg,zero);CHKERRQ(ierr); // diagCount=0; } /* Initialize biogeochem model */ if (periodicBiogeochemForcing) { ierr = interpPeriodicVector(tc,&Tss,biogeochemTimer.cyclePeriod,biogeochemTimer.numPerPeriod,biogeochemTimer.tdp,&Tssp,"Tss_"); ierr = interpPeriodicVector(tc,&Sss,biogeochemTimer.cyclePeriod,biogeochemTimer.numPerPeriod,biogeochemTimer.tdp,&Sssp,"Sss_"); ierr = interpPeriodicVector(tc,&atmosp,biogeochemTimer.cyclePeriod,biogeochemTimer.numPerPeriod,biogeochemTimer.tdp,&atmospp,"atmosp_"); } myTime = DeltaT*Iterc; /* Iter should start at 0 */ inert_gas_bc_(&lBCSize,&Iterc,&myTime,&localTss[0],&localSss[0], &localatmosp[0],&gasID, &localBCc[0]); if (periodicBiogeochemForcing) { ierr = interpPeriodicVector(tf,&Tss,biogeochemTimer.cyclePeriod,biogeochemTimer.numPerPeriod,biogeochemTimer.tdp,&Tssp,"Tss_"); ierr = interpPeriodicVector(tf,&Sss,biogeochemTimer.cyclePeriod,biogeochemTimer.numPerPeriod,biogeochemTimer.tdp,&Sssp,"Sss_"); ierr = interpPeriodicVector(tf,&atmosp,biogeochemTimer.cyclePeriod,biogeochemTimer.numPerPeriod,biogeochemTimer.tdp,&atmospp,"atmosp_"); } myTime = DeltaT*Iterf; /* Iter should start at 0 */ inert_gas_bc_(&lBCSize,&Iterf,&myTime,&localTss[0],&localSss[0], &localatmosp[0],&gasID, &localBCf[0]); return 0; }
int main(int argc,char **args) { Mat A,F; PetscViewer fd; /* viewer */ char file[PETSC_MAX_PATH_LEN]; /* input file name */ PetscErrorCode ierr; PetscBool flg; Vec x,y,w; MatFactorInfo iluinfo; IS perm; PetscInt m; PetscReal norm; PetscInitialize(&argc,&args,(char*)0,help); /* Determine file from which we read the matrix */ ierr = PetscOptionsGetString(NULL,"-f",file,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,"Must indicate binary file with the -f option"); /* Open binary file. Note that we use FILE_MODE_READ to indicate reading from this file. */ ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr); /* Load the matrix; then destroy the viewer. */ ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatSetType(A,MATSEQBAIJ);CHKERRQ(ierr); ierr = MatLoad(A,fd);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&x);CHKERRQ(ierr); ierr = VecLoad(x,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); ierr = VecDuplicate(x,&y);CHKERRQ(ierr); ierr = VecDuplicate(x,&w);CHKERRQ(ierr); ierr = MatGetFactor(A,"petsc",MAT_FACTOR_ILU,&F);CHKERRQ(ierr); iluinfo.fill = 1.0; ierr = MatGetSize(A,&m,0);CHKERRQ(ierr); ierr = ISCreateStride(PETSC_COMM_WORLD,m,0,1,&perm);CHKERRQ(ierr); ierr = MatLUFactorSymbolic(F,A,perm,perm,&iluinfo);CHKERRQ(ierr); ierr = MatLUFactorNumeric(F,A,&iluinfo);CHKERRQ(ierr); ierr = MatSolveTranspose(F,x,y);CHKERRQ(ierr); F->ops->solvetranspose = MatSolveTranspose_SeqBAIJ_N; ierr = MatSolveTranspose(F,x,w);CHKERRQ(ierr); /* VecView(w,0);VecView(y,0); */ ierr = VecAXPY(w,-1.0,y);CHKERRQ(ierr); ierr = VecNorm(w,NORM_2,&norm);CHKERRQ(ierr); if (norm) { ierr = PetscPrintf(PETSC_COMM_SELF,"Norm of difference is nonzero %g\n",norm);CHKERRQ(ierr); } ierr = ISDestroy(&perm);CHKERRQ(ierr); ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = MatDestroy(&F);CHKERRQ(ierr); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = VecDestroy(&y);CHKERRQ(ierr); ierr = VecDestroy(&w);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
int main(int argc,char **argv) { Vec x1, x2, y1, y2, y3, y4; PetscViewer viewer; PetscMPIInt rank; PetscInt i, nlocal, n = 6; PetscScalar *array; PetscBool equal; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscInitialize(&argc, &argv, (char*) 0, help);if (ierr) return ierr; ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank);CHKERRQ(ierr); ierr = PetscOptionsGetInt(NULL,NULL, "-n", &n, NULL);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD, &x1);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) x1, "TestVec");CHKERRQ(ierr); ierr = VecSetSizes(x1, PETSC_DECIDE, n);CHKERRQ(ierr); ierr = VecSetFromOptions(x1);CHKERRQ(ierr); /* initialize x1 */ ierr = VecGetLocalSize(x1, &nlocal);CHKERRQ(ierr); ierr = VecGetArray(x1, &array);CHKERRQ(ierr); for (i = 0; i < nlocal; i++) array[i] = rank + 1; ierr = VecRestoreArray(x1, &array);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD, &x2);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) x2, "TestVec2");CHKERRQ(ierr); ierr = VecSetSizes(x2, PETSC_DECIDE, n);CHKERRQ(ierr); ierr = VecSetBlockSize(x2, 2);CHKERRQ(ierr); ierr = VecSetFromOptions(x2);CHKERRQ(ierr); /* initialize x2 */ ierr = VecGetLocalSize(x2, &nlocal);CHKERRQ(ierr); ierr = VecGetArray(x2, &array);CHKERRQ(ierr); for (i = 0; i < nlocal; i++) array[i] = rank + 1; ierr = VecRestoreArray(x2, &array);CHKERRQ(ierr); ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD, "ex19.h5", FILE_MODE_WRITE, &viewer);CHKERRQ(ierr); ierr = VecView(x1, viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5PushGroup(viewer, "/testBlockSize");CHKERRQ(ierr); ierr = VecView(x2, viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5PushGroup(viewer, "/testTimestep");CHKERRQ(ierr); ierr = PetscViewerHDF5SetTimestep(viewer, 0);CHKERRQ(ierr); ierr = VecView(x2, viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5SetTimestep(viewer, 1);CHKERRQ(ierr); ierr = VecView(x2, viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5PopGroup(viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5PopGroup(viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD, &y1);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) y1, "TestVec");CHKERRQ(ierr); ierr = VecSetSizes(y1, PETSC_DECIDE, n);CHKERRQ(ierr); ierr = VecSetFromOptions(y1);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&y2);CHKERRQ(ierr); ierr = VecSetBlockSize(y2, 2);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) y2, "TestVec2");CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&y3);CHKERRQ(ierr); ierr = VecSetBlockSize(y3, 2);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) y3, "TestVec2");CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&y4);CHKERRQ(ierr); ierr = VecSetBlockSize(y4, 2);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) y4, "TestVec2");CHKERRQ(ierr); ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD, "ex19.h5", FILE_MODE_READ, &viewer);CHKERRQ(ierr); ierr = VecLoad(y1, viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5PushGroup(viewer, "/testBlockSize");CHKERRQ(ierr); ierr = VecLoad(y2, viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5PushGroup(viewer, "/testTimestep");CHKERRQ(ierr); ierr = PetscViewerHDF5SetTimestep(viewer, 0);CHKERRQ(ierr); ierr = VecLoad(y3, viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5SetTimestep(viewer, 1);CHKERRQ(ierr); ierr = VecLoad(y4, viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5PopGroup(viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5PopGroup(viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = VecEqual(x1, y1, &equal);CHKERRQ(ierr); if (!equal) { ierr = VecView(x1, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); ierr = VecView(y1, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB, "Error in HDF5 viewer"); } ierr = VecEqual(x2, y2, &equal);CHKERRQ(ierr); if (!equal) { ierr = VecView(x2, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); ierr = VecView(y2, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB, "Error in HDF5 viewer"); } ierr = VecDestroy(&x1);CHKERRQ(ierr); ierr = VecDestroy(&x2);CHKERRQ(ierr); ierr = VecDestroy(&y1);CHKERRQ(ierr); ierr = VecDestroy(&y2);CHKERRQ(ierr); ierr = VecDestroy(&y3);CHKERRQ(ierr); ierr = VecDestroy(&y4);CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }
bool TestAltivecOps() { std::cout << "\nTesting Altivec operations...\n\n"; if (HasAltivec() == false) { std::cout << "\nAltivec not available, skipping test." << std::endl; return true; } // These tests may seem superflous, but we really want to test the // Altivec/POWER4 implementation. That does not happen when POWER7 // or POWER8 is available because we use POWER7's unaligned loads // and stores with POWER8's AES, SHA, etc. These tests enage // Altivec/POWER4 without POWER7, like on an old PowerMac. //********** Unaligned loads and stores **********// bool pass1=true; CRYPTOPP_ALIGN_DATA(16) byte dest[20], src[20] = {23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4}; const byte st1[16] = {22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7}; const byte st2[16] = {21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6}; const byte st3[16] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5}; VecStore(VecLoad(src), dest); pass1 = (0 == std::memcmp(src, dest, 16)) && pass1; CRYPTOPP_ASSERT(pass1); VecStore(VecLoad(src+1), dest+1); pass1 = (0 == std::memcmp(st1, dest+1, 16)) && pass1; CRYPTOPP_ASSERT(pass1); VecStore(VecLoad(src+2), dest+2); pass1 = (0 == std::memcmp(st2, dest+2, 16)) && pass1; CRYPTOPP_ASSERT(pass1); VecStore(VecLoad(src+3), dest+3); pass1 = (0 == std::memcmp(st3, dest+3, 16)) && pass1; CRYPTOPP_ASSERT(pass1); VecStoreBE(VecLoadBE(src), dest); pass1 = (0 == std::memcmp(src, dest, 16)) && pass1; CRYPTOPP_ASSERT(pass1); VecStoreBE(VecLoadBE(src+1), dest+1); pass1 = (0 == std::memcmp(st1, dest+1, 16)) && pass1; CRYPTOPP_ASSERT(pass1); VecStoreBE(VecLoadBE(src+2), dest+2); pass1 = (0 == std::memcmp(st2, dest+2, 16)) && pass1; CRYPTOPP_ASSERT(pass1); VecStoreBE(VecLoadBE(src+3), dest+3); pass1 = (0 == std::memcmp(st3, dest+3, 16)) && pass1; CRYPTOPP_ASSERT(pass1); #if (CRYPTOPP_LITTLE_ENDIAN) VecStore(VecLoadBE(src), dest); pass1 = (0 != std::memcmp(src, dest, 16)) && pass1; CRYPTOPP_ASSERT(pass1); VecStoreBE(VecLoad(src), dest); pass1 = (0 != std::memcmp(src, dest, 16)) && pass1; CRYPTOPP_ASSERT(pass1); #endif if (!pass1) std::cout << "FAILED:"; else std::cout << "passed:"; std::cout << " Altivec loads and stores" << std::endl; //********** Shifts **********// bool pass2=true; uint8x16_p val = {0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff}; pass2 = (VecEqual(val, VecShiftLeftOctet<0>(val))) && pass2; CRYPTOPP_ASSERT(pass2); pass2 = (VecEqual(val, VecShiftRightOctet<0>(val))) && pass2; CRYPTOPP_ASSERT(pass2); uint8x16_p lsh1 = {0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0x00}; uint8x16_p rsh1 = {0x00,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff}; pass2 = (VecEqual(lsh1, VecShiftLeftOctet<1>(val))) && pass2; CRYPTOPP_ASSERT(pass2); pass2 = (VecEqual(rsh1, VecShiftRightOctet<1>(val))) && pass2; CRYPTOPP_ASSERT(pass2); uint8x16_p lsh15 = {0xff,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00}; uint8x16_p rsh15 = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xff}; pass2 = (VecEqual(lsh15, VecShiftLeftOctet<15>(val))) && pass2; CRYPTOPP_ASSERT(pass2); pass2 = (VecEqual(rsh15, VecShiftRightOctet<15>(val))) && pass2; CRYPTOPP_ASSERT(pass2); uint8x16_p lsh16 = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00}; uint8x16_p rsh16 = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00}; pass2 = (VecEqual(lsh16, VecShiftLeftOctet<16>(val))) && pass2; CRYPTOPP_ASSERT(pass2); pass2 = (VecEqual(rsh16, VecShiftRightOctet<16>(val))) && pass2; CRYPTOPP_ASSERT(pass2); if (!pass2) std::cout << "FAILED:"; else std::cout << "passed:"; std::cout << " Altivec left and right shifts" << std::endl; //********** Extraction **********// bool pass3=true; const byte bex1[] = {0x1f,0x1e,0x1d,0x1c, 0x1b,0x1a,0x19,0x18, 0x17,0x16,0x15,0x14, 0x13,0x12,0x11,0x10}; const byte bex2[] = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x17,0x16,0x15,0x14, 0x13,0x12,0x11,0x10}; const byte bex3[] = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x1f,0x1e,0x1d,0x1c, 0x1b,0x1a,0x19,0x18}; const uint8x16_p ex1 = (uint8x16_p)VecLoad(bex1); const uint8x16_p ex2 = (uint8x16_p)VecLoad(bex2); const uint8x16_p ex3 = (uint8x16_p)VecLoad(bex3); pass3 = VecEqual(ex2, VecGetLow(ex1)) && pass3; CRYPTOPP_ASSERT(pass3); pass3 = VecEqual(ex3, VecGetHigh(ex1)) && pass3; CRYPTOPP_ASSERT(pass3); uint8x16_p ex4 = VecShiftRightOctet<8>(VecShiftLeftOctet<8>(ex1)); pass3 = VecEqual(ex4, VecGetLow(ex1)) && pass3; CRYPTOPP_ASSERT(pass3); uint8x16_p ex5 = VecShiftRightOctet<8>(ex1); pass3 = VecEqual(ex5, VecGetHigh(ex1)) && pass3; CRYPTOPP_ASSERT(pass3); if (!pass3) std::cout << "FAILED:"; else std::cout << "passed:"; std::cout << " Altivec vector extraction" << std::endl; return pass1 && pass2 && pass3; }
Example: mpiexec -n <np> ./ex168 -f <matrix binary file> \n\n"; #include <petscmat.h> int main(int argc,char **args) { Mat A,F; Vec u,x,b; PetscErrorCode ierr; PetscMPIInt rank,size; PetscInt m,n,nfact; PetscReal norm,tol=1.e-12,Anorm; IS perm,iperm; MatFactorInfo info; PetscBool flg,testMatSolve=PETSC_TRUE; PetscViewer fd; /* viewer */ char file[PETSC_MAX_PATH_LEN]; /* input file name */ ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank);CHKERRQ(ierr); ierr = MPI_Comm_size(PETSC_COMM_WORLD, &size);CHKERRQ(ierr); /* Determine file from which we read the matrix A */ ierr = PetscOptionsGetString(NULL,NULL,"-f",file,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_WORLD,1,"Must indicate binary file with the -f option"); /* Load matrix A */ ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,file,FILE_MODE_READ,&fd);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatLoad(A,fd);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD,&b);CHKERRQ(ierr); ierr = VecLoad(b,fd);CHKERRQ(ierr); ierr = PetscViewerDestroy(&fd);CHKERRQ(ierr); ierr = MatGetLocalSize(A,&m,&n);CHKERRQ(ierr); if (m != n) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ, "This example is not intended for rectangular matrices (%d, %d)", m, n); ierr = MatNorm(A,NORM_INFINITY,&Anorm);CHKERRQ(ierr); /* Create vectors */ ierr = VecDuplicate(b,&x);CHKERRQ(ierr); ierr = VecDuplicate(x,&u);CHKERRQ(ierr); /* save the true solution */ /* Test Cholesky Factorization */ ierr = MatGetOrdering(A,MATORDERINGNATURAL,&perm,&iperm);CHKERRQ(ierr); if (!rank) printf(" Clique Cholesky:\n"); ierr = MatGetFactor(A,MATSOLVERCLIQUE,MAT_FACTOR_CHOLESKY,&F);CHKERRQ(ierr); info.fill = 5.0; ierr = MatCholeskyFactorSymbolic(F,A,perm,&info);CHKERRQ(ierr); for (nfact = 0; nfact < 1; nfact++) { if (!rank) printf(" %d-the Cholesky numfactorization \n",nfact); ierr = MatCholeskyFactorNumeric(F,A,&info);CHKERRQ(ierr); /* Test MatSolve() */ if (testMatSolve && nfact == 2) { ierr = MatSolve(F,b,x);CHKERRQ(ierr); /* Check the residual */ ierr = MatMult(A,x,u);CHKERRQ(ierr); ierr = VecAXPY(u,-1.0,b);CHKERRQ(ierr); ierr = VecNorm(u,NORM_INFINITY,&norm);CHKERRQ(ierr); /* if (norm > tol) { */ if (!rank) { ierr = PetscPrintf(PETSC_COMM_SELF,"MatSolve: rel residual %g/%g = %g, LU numfact %d\n",norm,Anorm,norm/Anorm,nfact);CHKERRQ(ierr); } /*} */ } } /* Free data structures */ ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = MatDestroy(&F);CHKERRQ(ierr); ierr = ISDestroy(&perm);CHKERRQ(ierr); ierr = ISDestroy(&iperm);CHKERRQ(ierr); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = VecDestroy(&b);CHKERRQ(ierr); ierr = VecDestroy(&u);CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }
int main(int argc,char **argv) { PetscErrorCode ierr; DM da2D; PetscInt i,j,ixs, ixm, iys, iym;; PetscViewer H5viewer; PetscScalar xm = -1.0, xp=1.0; PetscScalar ym = -1.0, yp=1.0; PetscScalar value = 1.0,dx,dy; PetscInt Nx = 40, Ny=40; Vec gauss,input; PetscScalar **gauss_ptr; PetscReal norm; const char *vecname; dx=(xp-xm)/(Nx-1); dy=(yp-ym)/(Ny-1); /* Initialize the Petsc context */ ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; ierr = DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,Nx,Ny,PETSC_DECIDE,PETSC_DECIDE,1,1,NULL,NULL,&da2D);CHKERRQ(ierr); ierr = DMSetFromOptions(da2D);CHKERRQ(ierr); ierr = DMSetUp(da2D);CHKERRQ(ierr); /* Set the coordinates */ ierr = DMDASetUniformCoordinates(da2D, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0);CHKERRQ(ierr); /* Declare gauss as a DMDA component */ ierr = DMCreateGlobalVector(da2D,&gauss);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject) gauss, "pressure");CHKERRQ(ierr); /* Initialize vector gauss with a constant value (=1) */ ierr = VecSet(gauss,value);CHKERRQ(ierr); /* Get the coordinates of the corners for each process */ ierr = DMDAGetCorners(da2D, &ixs, &iys, 0, &ixm, &iym, 0);CHKERRQ(ierr); /* Build the gaussian profile (exp(-x^2-y^2)) */ ierr = DMDAVecGetArray(da2D,gauss,&gauss_ptr);CHKERRQ(ierr); for (j=iys; j<iys+iym; j++) { for (i=ixs; i<ixs+ixm; i++) { gauss_ptr[j][i]=PetscExpScalar(-(xm+i*dx)*(xm+i*dx)-(ym+j*dy)*(ym+j*dy)); } } ierr = DMDAVecRestoreArray(da2D,gauss,&gauss_ptr);CHKERRQ(ierr); /* Create the HDF5 viewer */ ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"gauss.h5",FILE_MODE_WRITE,&H5viewer);CHKERRQ(ierr); ierr = PetscViewerSetFromOptions(H5viewer);CHKERRQ(ierr); /* Write the H5 file */ ierr = VecView(gauss,H5viewer);CHKERRQ(ierr); /* Close the viewer */ ierr = PetscViewerDestroy(&H5viewer);CHKERRQ(ierr); ierr = VecDuplicate(gauss,&input);CHKERRQ(ierr); ierr = PetscObjectGetName((PetscObject)gauss,&vecname);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject)input,vecname);CHKERRQ(ierr); /* Create the HDF5 viewer for reading */ ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"gauss.h5",FILE_MODE_READ,&H5viewer);CHKERRQ(ierr); ierr = PetscViewerSetFromOptions(H5viewer);CHKERRQ(ierr); ierr = VecLoad(input,H5viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&H5viewer);CHKERRQ(ierr); ierr = VecAXPY(input,-1.0,gauss);CHKERRQ(ierr); ierr = VecNorm(input,NORM_2,&norm);CHKERRQ(ierr); if (norm > 1.e-6) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Vec read in does not match vector written out"); ierr = VecDestroy(&input);CHKERRQ(ierr); ierr = VecDestroy(&gauss);CHKERRQ(ierr); ierr = DMDestroy(&da2D);CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }