int main(int argc, char **args) { PetscErrorCode ierr; MPI_Comm comm = MPI_COMM_SELF; ierr = PetscInitialize(&argc, &args, (char*)0, help); CHKERRQ(ierr); KSP ksp; KSPCreate(comm, &ksp); WaveFunc wave_func; WaveFuncCreate(comm, &wave_func); FEMInf fem; FEMInfCreate(comm, &fem); PetscViewer viewer= PETSC_VIEWER_STDOUT_SELF; ViewerFunc view_func; ViewerFuncCreate(comm, &view_func); PetscViewerFormat format; ierr = PetscOptionsBegin(comm, "", "eig_one.c options", "none"); ierr = WaveFuncSetFromOptions(wave_func); CHKERRQ(ierr); ierr = FEMInfSetFromOptions(fem); CHKERRQ(ierr); // ierr = PotSetFromOptions(pot); CHKERRQ(ierr); ierr = ViewerFuncSetFromOptions(view_func); CHKERRQ(ierr); ierr = PetscOptionsGetViewer(comm, NULL, "-viewer", &viewer, &format, NULL); PetscOptionsEnd(); Vec c; FEMInfCreateVec(fem, 1, &c); ierr = FEMInfFit(fem, wave_func, ksp, c); CHKERRQ(ierr); ierr = FEMInfViewFunc(fem, c, view_func); CHKERRQ(ierr); ierr = PFView(wave_func, viewer); CHKERRQ(ierr); ierr = FEMInfView(fem, viewer); CHKERRQ(ierr); ierr = ViewerFuncView(view_func, viewer); CHKERRQ(ierr); ierr = PetscFinalize(); CHKERRQ(ierr); return 0; }
PetscErrorCode ProductView(void *ctx, PetscViewer v) { PetscErrorCode ierr; Product *self = (Product*)ctx; PetscViewerASCIIPrintf(v, "type: Product of PF object\n"); PetscViewerASCIIPrintf(v, "# of PF: %d\n", self->num); for(int i = 0; i < self->num; i++) { PetscViewerASCIIPrintf(v, "No %d:\n", i); ierr = PFView(self->pfs[i], v); CHKERRQ(ierr); } return 0; }
PetscErrorCode CombinationView(void *ctx, PetscViewer v) { PetscErrorCode ierr; Combination *self = (Combination*)ctx; PetscViewerASCIIPrintf(v, "type: Combination of PF object\n"); PetscViewerASCIIPrintf(v, "# of PF: %d\n", self->num); for(int i = 0; i < self->num; i++) { PetscViewerASCIIPrintf(v, "No %d:\n", i); ierr = PFView(self->pfs[i], v); CHKERRQ(ierr); } return 0; }
/*@C PFDestroy - Destroys PF context that was created with PFCreate(). Collective on PF Input Parameter: . pf - the function context Level: beginner .keywords: PF, destroy .seealso: PFCreate(), PFSet(), PFSetType() @*/ PetscErrorCode PFDestroy(PF *pf) { PetscErrorCode ierr; PetscBool flg = PETSC_FALSE; PetscFunctionBegin; if (!*pf) PetscFunctionReturn(0); PetscValidHeaderSpecific((*pf),PF_CLASSID,1); if (--((PetscObject)(*pf))->refct > 0) PetscFunctionReturn(0); ierr = PetscOptionsGetBool(((PetscObject)(*pf))->prefix,"-pf_view",&flg,PETSC_NULL);CHKERRQ(ierr); if (flg) { PetscViewer viewer; ierr = PetscViewerASCIIGetStdout(((PetscObject)(*pf))->comm,&viewer);CHKERRQ(ierr); ierr = PFView((*pf),viewer);CHKERRQ(ierr); } /* if memory was published with AMS then destroy it */ ierr = PetscObjectDepublish((*pf));CHKERRQ(ierr); if ((*pf)->ops->destroy) {ierr = (*(*pf)->ops->destroy)((*pf)->data);CHKERRQ(ierr);} ierr = PetscHeaderDestroy(pf);CHKERRQ(ierr); PetscFunctionReturn(0); }
void PETSC_STDCALL pfview_(PF pf,PetscViewer viewer, int *__ierr ){ *__ierr = PFView( (PF)PetscToPointer((pf) ), (PetscViewer)PetscToPointer((viewer) )); }
int main(int argc, char **args) { PetscErrorCode ierr; ierr = SlepcInitialize(&argc, &args, (char*)0, help); CHKERRQ(ierr); MPI_Comm comm = PETSC_COMM_SELF; PetscBool find; PetscViewer v = PETSC_VIEWER_STDOUT_SELF; PetscPrintf(comm, "\n"); PetscPrintf(comm, ">>>> fit_oce1 program >>>>\n"); PetscPrintf(comm, "Fit L=0 radial function in OCE1\n"); OCE1 oce; Pot pot; KSP ksp; Vec c; char path_out[100]; PetscViewerFormat format; PetscBool set; // -- create -- PrintTimeStamp(comm, "Init", NULL); ierr = OCE1Create(comm, &oce); CHKERRQ(ierr); ierr = PotCreate(comm, &pot); CHKERRQ(ierr); ierr = KSPCreate(comm, &ksp); CHKERRQ(ierr); // -- read options -- PrintTimeStamp(comm, "Set", NULL); PetscOptionsBegin(comm, "", "fit_oce1.c options", "none"); ierr = OCE1SetFromOptions(oce); CHKERRQ(ierr); ierr = PotSetFromOptions2(pot, "v_", &find); CHKERRQ(ierr); ierr = PetscOptionsGetString(NULL, NULL, "-out", path_out, 100, &set); CHKERRQ(ierr); CHKERRQ(ierr); ierr = PetscOptionsEnd(); CHKERRQ(ierr); // -- input error -- if(pot == NULL) { SETERRQ(comm, 1, "-v_pot option is necessary"); } // -- print in -- PrintTimeStamp(comm, "PrintIn", NULL); ierr = PetscPrintf(comm, "OCE1: "); CHKERRQ(ierr); ierr = OCE1View(oce, v); CHKERRQ(ierr); ierr = PetscPrintf(comm, "POT: "); CHKERRQ(ierr); ierr = PFView(pot, v); CHKERRQ(ierr); ierr = PetscPrintf(comm, "out: %s\n", path_out); // -- calculation -- PrintTimeStamp(comm, "Calc", NULL); ierr = OCE1CreateVec(oce, &c); CHKERRQ(ierr); ierr = OCE1Fit(oce, pot, 0, ksp, c); CHKERRQ(ierr); // -- write -- PetscViewer v_out; ierr = PetscViewerBinaryOpen(comm, path_out, FILE_MODE_WRITE, &v_out); CHKERRQ(ierr); ierr = VecView(c, v_out); CHKERRQ(ierr); PetscViewerDestroy(&v_out); PetscPrintf(comm, "<<<< fit_oce1 program <<<<\n\n"); // -- finalize -- OCE1Destroy(&oce); PFDestroy(&pot); KSPDestroy(&ksp); VecDestroy(&c); SlepcFinalize(); return 0; }