本文整理汇总了C++中PetscRandomDestroy函数的典型用法代码示例。如果您正苦于以下问题:C++ PetscRandomDestroy函数的具体用法?C++ PetscRandomDestroy怎么用?C++ PetscRandomDestroy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PetscRandomDestroy函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: TestSetup
PetscErrorCode TestSetup(DMLabel label, AppCtx *user)
{
PetscRandom r;
PetscInt n = (PetscInt) (user->fill*(user->pEnd - user->pStart)), i;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscRandomCreate(PETSC_COMM_SELF, &r);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr);/* -random_type <> */
ierr = PetscRandomSetInterval(r, user->pStart, user->pEnd);CHKERRQ(ierr);
ierr = PetscRandomSetSeed(r, 123456789L);CHKERRQ(ierr);
ierr = PetscRandomSeed(r);CHKERRQ(ierr);
user->size = 0;
for(i = 0; i < n; ++i) {
PetscReal p;
PetscInt val;
ierr = PetscRandomGetValueReal(r, &p);CHKERRQ(ierr);
ierr = DMLabelGetValue(label, (PetscInt) p, &val);CHKERRQ(ierr);
if (val < 0) {
++user->size;
ierr = DMLabelSetValue(label, (PetscInt) p, i % user->numStrata);CHKERRQ(ierr);
}
}
ierr = PetscRandomDestroy(&r);CHKERRQ(ierr);
ierr = DMLabelCreateIndex(label, user->pStart, user->pEnd);CHKERRQ(ierr);
ierr = PetscPrintf(PETSC_COMM_SELF, "Created label with chart [%D, %D) and set %D values\n", user->pStart, user->pEnd, user->size);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:29,代码来源:ex6.c
示例2: ComputeRHSMatrix
PetscErrorCode ComputeRHSMatrix(PetscInt m,PetscInt nrhs,Mat* C)
{
PetscErrorCode ierr;
PetscRandom rand;
Mat RHS;
PetscScalar *array,rval;
PetscInt i,k;
PetscFunctionBegin;
ierr = MatCreate(PETSC_COMM_WORLD,&RHS);CHKERRQ(ierr);
ierr = MatSetSizes(RHS,m,PETSC_DECIDE,PETSC_DECIDE,nrhs);CHKERRQ(ierr);
ierr = MatSetType(RHS,MATSEQDENSE);CHKERRQ(ierr);
ierr = MatSetUp(RHS);CHKERRQ(ierr);
ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rand);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rand);CHKERRQ(ierr);
ierr = MatDenseGetArray(RHS,&array);CHKERRQ(ierr);
for (i=0; i<m; i++){
ierr = PetscRandomGetValue(rand,&rval);CHKERRQ(ierr);
array[i] = rval;
}
if (nrhs > 1){
for (k=1; k<nrhs; k++){
for (i=0; i<m; i++){
array[m*k+i] = array[i];
}
}
}
ierr = MatDenseRestoreArray(RHS,&array);CHKERRQ(ierr);
ierr = MatAssemblyBegin(RHS,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(RHS,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
*C = RHS;
ierr = PetscRandomDestroy(&rand);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:35,代码来源:ex129.c
示例3: main
int main(int argc,char **argv) {
Mat A,B,As;
const PetscInt *ai,*aj;
PetscInt i,j,k,nz,n,asi[]={0,2,3,4,6,7};
PetscInt asj[]={0,4,1,2,3,4,4};
PetscScalar asa[7],*aa;
PetscRandom rctx;
PetscErrorCode ierr;
PetscMPIInt size;
PetscBool flg;
PetscInitialize(&argc,&argv,(char *)0,help);
ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr);
if (size != 1) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"This is a uniprocessor example only!");
/* Create a aij matrix for checking */
ierr = MatCreateSeqAIJ(PETSC_COMM_SELF,5,5,2,PETSC_NULL,&A);CHKERRQ(ierr);
ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rctx);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rctx);CHKERRQ(ierr);
k = 0;
for (i=0; i<5; i++) {
nz = asi[i+1] - asi[i]; /* length of i_th row of A */
for (j=0; j<nz; j++){
ierr = PetscRandomGetValue(rctx,&asa[k]);CHKERRQ(ierr);
ierr = MatSetValues(A,1,&i,1,&asj[k],&asa[k],INSERT_VALUES);CHKERRQ(ierr);
ierr = MatSetValues(A,1,&i,1,&asj[k],&asa[k],INSERT_VALUES);CHKERRQ(ierr);
if (i != asj[k]){ /* insert symmetric entry */
ierr = MatSetValues(A,1,&asj[k],1,&i,&asa[k],INSERT_VALUES);CHKERRQ(ierr);
}
k++;
}
}
ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
/* Create a baij matrix using MatCreateSeqBAIJWithArrays() */
ierr = MatGetRowIJ(A,0,PETSC_FALSE,PETSC_FALSE,&n,&ai,&aj,&flg);CHKERRQ(ierr);
ierr = MatSeqAIJGetArray(A,&aa);CHKERRQ(ierr);
/* WARNING: This sharing is dangerous if either A or B is later assembled */
ierr = MatCreateSeqBAIJWithArrays(PETSC_COMM_SELF,1,5,5,(PetscInt*)ai,(PetscInt*)aj,aa,&B);CHKERRQ(ierr);
ierr = MatSeqAIJRestoreArray(A,&aa);CHKERRQ(ierr);
ierr = MatRestoreRowIJ(A,0,PETSC_FALSE,PETSC_FALSE,&n,&ai,&aj,&flg);CHKERRQ(ierr);
ierr = MatMultEqual(A,B,10,&flg);CHKERRQ(ierr);
if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_NOTSAMETYPE,"MatMult(A,B) are NOT equal");
/* Create a sbaij matrix using MatCreateSeqSBAIJWithArrays() */
ierr = MatCreateSeqSBAIJWithArrays(PETSC_COMM_SELF,1,5,5,asi,asj,asa,&As);CHKERRQ(ierr);
ierr = MatMultEqual(A,As,10,&flg);CHKERRQ(ierr);
if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_NOTSAMETYPE,"MatMult(A,As) are NOT equal");
/* Free spaces */
ierr = PetscRandomDestroy(&rctx);CHKERRQ(ierr);
ierr = MatDestroy(&A);CHKERRQ(ierr);
ierr = MatDestroy(&B);CHKERRQ(ierr);
ierr = MatDestroy(&As);CHKERRQ(ierr);
ierr = PetscFinalize();
return(0);
}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:59,代码来源:ex108.c
示例4: main
int main(int argc, char **argv)
{
PetscErrorCode ierr;
Vec *V,t;
PetscInt i,j,reps,n=15,k=6;
PetscRandom rctx;
PetscScalar *val_dot,*val_mdot,*tval_dot,*tval_mdot;
ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;
ierr = PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL);CHKERRQ(ierr);
ierr = PetscOptionsGetInt(NULL,NULL,"-k",&k,NULL);CHKERRQ(ierr);
ierr = PetscPrintf(PETSC_COMM_WORLD,"Test with %D random vectors of length %D",k,n);CHKERRQ(ierr);
ierr = PetscPrintf(PETSC_COMM_WORLD,"\n",k,n);CHKERRQ(ierr);
ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rctx);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rctx);CHKERRQ(ierr);
ierr = VecCreate(PETSC_COMM_WORLD,&t);CHKERRQ(ierr);
ierr = VecSetSizes(t,n,PETSC_DECIDE);CHKERRQ(ierr);
ierr = VecSetFromOptions(t);CHKERRQ(ierr);
ierr = VecDuplicateVecs(t,k,&V);CHKERRQ(ierr);
ierr = VecSetRandom(t,rctx);CHKERRQ(ierr);
ierr = PetscMalloc1(k,&val_dot);CHKERRQ(ierr);
ierr = PetscMalloc1(k,&val_mdot);CHKERRQ(ierr);
ierr = PetscMalloc1(k,&tval_dot);CHKERRQ(ierr);
ierr = PetscMalloc1(k,&tval_mdot);CHKERRQ(ierr);
for (i=0; i<k; i++) { ierr = VecSetRandom(V[i],rctx);CHKERRQ(ierr); }
for (reps=0; reps<20; reps++) {
for (i=1; i<k; i++) {
ierr = VecMDot(t,i,V,val_mdot);CHKERRQ(ierr);
ierr = VecMTDot(t,i,V,tval_mdot);CHKERRQ(ierr);
for (j=0;j<i;j++) {
ierr = VecDot(t,V[j],&val_dot[j]);CHKERRQ(ierr);
ierr = VecTDot(t,V[j],&tval_dot[j]);CHKERRQ(ierr);
}
/* Check result */
for (j=0;j<i;j++) {
if (PetscAbsScalar(val_mdot[j] - val_dot[j])/PetscAbsScalar(val_dot[j]) > 1e-5) {
ierr = PetscPrintf(PETSC_COMM_WORLD, "[TEST FAILED] i=%D, j=%D, val_mdot[j]=%g, val_dot[j]=%g\n",i,j,(double)PetscAbsScalar(val_mdot[j]), (double)PetscAbsScalar(val_dot[j]));CHKERRQ(ierr);
break;
}
if (PetscAbsScalar(tval_mdot[j] - tval_dot[j])/PetscAbsScalar(tval_dot[j]) > 1e-5) {
ierr = PetscPrintf(PETSC_COMM_WORLD, "[TEST FAILED] i=%D, j=%D, tval_mdot[j]=%g, tval_dot[j]=%g\n",i,j,(double)PetscAbsScalar(tval_mdot[j]), (double)PetscAbsScalar(tval_dot[j]));CHKERRQ(ierr);
break;
}
}
}
}
ierr = PetscPrintf(PETSC_COMM_WORLD,"Test completed successfully!\n",k,n);CHKERRQ(ierr);
ierr = PetscFree(val_dot);CHKERRQ(ierr);
ierr = PetscFree(val_mdot);CHKERRQ(ierr);
ierr = PetscFree(tval_dot);CHKERRQ(ierr);
ierr = PetscFree(tval_mdot);CHKERRQ(ierr);
ierr = VecDestroyVecs(k,&V);CHKERRQ(ierr);
ierr = VecDestroy(&t);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&rctx);CHKERRQ(ierr);
ierr = PetscFinalize();
return ierr;
}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:57,代码来源:ex43.c
示例5: MatMultEqual
/*@
MatMultEqual - Compares matrix-vector products of two matrices.
Collective on Mat
Input Parameters:
+ A - the first matrix
- B - the second matrix
- n - number of random vectors to be tested
Output Parameter:
. flg - PETSC_TRUE if the products are equal; PETSC_FALSE otherwise.
Level: intermediate
Concepts: matrices^equality between
@*/
PetscErrorCode MatMultEqual(Mat A,Mat B,PetscInt n,PetscBool *flg)
{
PetscErrorCode ierr;
Vec x,s1,s2;
PetscRandom rctx;
PetscReal r1,r2,tol=1.e-10;
PetscInt am,an,bm,bn,k;
PetscScalar none = -1.0;
PetscFunctionBegin;
PetscValidHeaderSpecific(A,MAT_CLASSID,1);
PetscValidHeaderSpecific(B,MAT_CLASSID,2);
ierr = MatGetLocalSize(A,&am,&an);CHKERRQ(ierr);
ierr = MatGetLocalSize(B,&bm,&bn);CHKERRQ(ierr);
if (am != bm || an != bn) SETERRQ4(PETSC_COMM_SELF,PETSC_ERR_ARG_SIZ,"Mat A,Mat B: local dim %D %D %D %D",am,bm,an,bn);
PetscCheckSameComm(A,1,B,2);
#if defined(PETSC_USE_REAL_SINGLE)
tol = 1.e-5;
#endif
ierr = PetscRandomCreate(((PetscObject)A)->comm,&rctx);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rctx);CHKERRQ(ierr);
ierr = VecCreate(((PetscObject)A)->comm,&x);CHKERRQ(ierr);
ierr = VecSetSizes(x,an,PETSC_DECIDE);CHKERRQ(ierr);
ierr = VecSetFromOptions(x);CHKERRQ(ierr);
ierr = VecCreate(((PetscObject)A)->comm,&s1);CHKERRQ(ierr);
ierr = VecSetSizes(s1,am,PETSC_DECIDE);CHKERRQ(ierr);
ierr = VecSetFromOptions(s1);CHKERRQ(ierr);
ierr = VecDuplicate(s1,&s2);CHKERRQ(ierr);
*flg = PETSC_TRUE;
for (k=0; k<n; k++) {
ierr = VecSetRandom(x,rctx);CHKERRQ(ierr);
ierr = MatMult(A,x,s1);CHKERRQ(ierr);
ierr = MatMult(B,x,s2);CHKERRQ(ierr);
ierr = VecNorm(s2,NORM_INFINITY,&r2);CHKERRQ(ierr);
if (r2 < tol){
ierr = VecNorm(s1,NORM_INFINITY,&r1);CHKERRQ(ierr);
} else {
ierr = VecAXPY(s2,none,s1);CHKERRQ(ierr);
ierr = VecNorm(s2,NORM_INFINITY,&r1);CHKERRQ(ierr);
r1 /= r2;
}
if (r1 > tol) {
*flg = PETSC_FALSE;
ierr = PetscInfo2(A,"Error: %D-th MatMult() %G\n",k,r1);CHKERRQ(ierr);
break;
}
}
ierr = PetscRandomDestroy(&rctx);CHKERRQ(ierr);
ierr = VecDestroy(&x);CHKERRQ(ierr);
ierr = VecDestroy(&s1);CHKERRQ(ierr);
ierr = VecDestroy(&s2);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:Kun-Qu,项目名称:petsc,代码行数:73,代码来源:multequal.c
示例6: main
int main(int argc,char **argv)
{
PetscLogDouble x,y;
double value;
void *arr[1000],*dummy;
int i,rand1[1000],rand2[1000];
PetscErrorCode ierr;
PetscRandom r;
PetscBool flg;
ierr = PetscInitialize(&argc,&argv,0,0);if (ierr) return ierr;
ierr = PetscRandomCreate(PETSC_COMM_SELF,&r);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(r);CHKERRQ(ierr);
for (i=0; i<1000; i++) {
ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
rand1[i] = (int)(value* 144327);
ierr = PetscRandomGetValue(r,&value);CHKERRQ(ierr);
rand2[i] = (int)(value* 144327);
}
/* Take care of paging effects */
ierr = PetscMalloc1(100,&dummy);CHKERRQ(ierr);
ierr = PetscFree(dummy);CHKERRQ(ierr);
ierr = PetscTime(&x);CHKERRQ(ierr);
/* Do all mallocs */
for (i=0; i< 1000; i++) {
ierr = PetscMalloc1(rand1[i],&arr[i]);CHKERRQ(ierr);
}
ierr = PetscTime(&x);CHKERRQ(ierr);
/* Do some frees */
for (i=0; i< 1000; i+=2) {
ierr = PetscFree(arr[i]);CHKERRQ(ierr);
}
/* Do some mallocs */
for (i=0; i< 1000; i+=2) {
ierr = PetscMalloc1(rand2[i],&arr[i]);CHKERRQ(ierr);
}
ierr = PetscTime(&y);CHKERRQ(ierr);
for (i=0; i< 1000; i++) {
ierr = PetscFree(arr[i]);CHKERRQ(ierr);
}
fprintf(stdout,"%-15s : %e sec, with options : ","PetscMalloc",(y-x)/500.0);
ierr = PetscOptionsHasName(NULL,"-malloc",&flg);CHKERRQ(ierr);
if (flg) fprintf(stdout,"-malloc ");
fprintf(stdout,"\n");
ierr = PetscRandomDestroy(&r);CHKERRQ(ierr);
ierr = PetscFinalize();
return ierr;
}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:56,代码来源:PetscMalloc.c
示例7: KSPSetFromOptions_Chebyshev
PetscErrorCode KSPSetFromOptions_Chebyshev(KSP ksp)
{
KSP_Chebyshev *cheb = (KSP_Chebyshev*)ksp->data;
PetscErrorCode ierr;
PetscInt two = 2,four = 4;
PetscReal tform[4] = {PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE};
PetscBool flg;
PetscFunctionBegin;
ierr = PetscOptionsHead("KSP Chebyshev Options");CHKERRQ(ierr);
ierr = PetscOptionsInt("-ksp_chebyshev_eststeps","Number of est steps in Chebyshev","",cheb->eststeps,&cheb->eststeps,NULL);CHKERRQ(ierr);
ierr = PetscOptionsRealArray("-ksp_chebyshev_eigenvalues","extreme eigenvalues","KSPChebyshevSetEigenvalues",&cheb->emin,&two,0);CHKERRQ(ierr);
ierr = PetscOptionsRealArray("-ksp_chebyshev_estimate_eigenvalues","estimate eigenvalues using a Krylov method, then use this transform for Chebyshev eigenvalue bounds","KSPChebyshevSetEstimateEigenvalues",tform,&four,&flg);CHKERRQ(ierr);
if (flg) {
switch (four) {
case 0:
ierr = KSPChebyshevSetEstimateEigenvalues(ksp,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE);CHKERRQ(ierr);
break;
case 2: /* Base everything on the max eigenvalues */
ierr = KSPChebyshevSetEstimateEigenvalues(ksp,PETSC_DECIDE,tform[0],PETSC_DECIDE,tform[1]);CHKERRQ(ierr);
break;
case 4: /* Use the full 2x2 linear transformation */
ierr = KSPChebyshevSetEstimateEigenvalues(ksp,tform[0],tform[1],tform[2],tform[3]);CHKERRQ(ierr);
break;
default: SETERRQ(PetscObjectComm((PetscObject)ksp),PETSC_ERR_ARG_INCOMP,"Must specify either 0, 2, or 4 parameters for eigenvalue estimation");
}
}
if (cheb->kspest) {
PetscBool estrand = PETSC_FALSE;
ierr = PetscOptionsBool("-ksp_chebyshev_estimate_eigenvalues_random","Use Random right hand side for eigenvalue estimation","KSPChebyshevEstEigSetRandom",estrand,&estrand,NULL);CHKERRQ(ierr);
if (estrand) {
PetscRandom random;
ierr = PetscRandomCreate(PetscObjectComm((PetscObject)ksp),&random);CHKERRQ(ierr);
ierr = PetscObjectSetOptionsPrefix((PetscObject)random,((PetscObject)ksp)->prefix);CHKERRQ(ierr);
ierr = PetscObjectAppendOptionsPrefix((PetscObject)random,"ksp_chebyshev_estimate_eigenvalues_");CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(random);CHKERRQ(ierr);
ierr = KSPChebyshevEstEigSetRandom(ksp,random);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&random);CHKERRQ(ierr);
}
}
if (cheb->kspest) {
/* Mask the PC so that PCSetFromOptions does not do anything */
ierr = KSPSetPC(cheb->kspest,cheb->pcnone);CHKERRQ(ierr);
ierr = KSPSetOptionsPrefix(cheb->kspest,((PetscObject)ksp)->prefix);CHKERRQ(ierr);
ierr = KSPAppendOptionsPrefix(cheb->kspest,"est_");CHKERRQ(ierr);
if (!((PetscObject)cheb->kspest)->type_name) {
ierr = KSPSetType(cheb->kspest,KSPGMRES);CHKERRQ(ierr);
}
ierr = KSPSetFromOptions(cheb->kspest);CHKERRQ(ierr);
ierr = KSPSetPC(cheb->kspest,ksp->pc);CHKERRQ(ierr);
}
ierr = PetscOptionsTail();CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:OpenCMISS-Dependencies,项目名称:petsc,代码行数:56,代码来源:cheby.c
示例8: PCDestroy_Noise
PetscErrorCode PCDestroy_Noise(PC pc)
{
PetscErrorCode ierr;
PCNoise_Ctx *ctx;
PetscFunctionBeginUser;
ierr = PCShellGetContext(pc,(void**)&ctx);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&ctx->random);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:pombredanne,项目名称:petsc,代码行数:10,代码来源:ex60.c
示例9: MSA_InitialPoint
/*
MSA_InitialPoint - Calculates the initial guess in one of three ways.
Input Parameters:
. user - user-defined application context
. X - vector for initial guess
Output Parameters:
. X - newly computed initial guess
*/
static int MSA_InitialPoint(AppCtx * user, Vec X)
{
int info;
PetscInt start2=-1,i,j;
PetscReal start1=0;
PetscTruth flg1,flg2;
info = PetscOptionsGetReal(PETSC_NULL,"-start",&start1,&flg1); CHKERRQ(info);
info = PetscOptionsGetInt(PETSC_NULL,"-random",&start2,&flg2); CHKERRQ(info);
if (flg1){ /* The zero vector is reasonable */
info = VecSet(X, start1); CHKERRQ(info);
} else if (flg2 && start2>0){ /* Try a random start between -0.5 and 0.5 */
PetscRandom rctx; PetscScalar np5=-0.5;
info = PetscRandomCreate(PETSC_COMM_WORLD,&rctx);
CHKERRQ(info);
for (i=0; i<start2; i++){
info = VecSetRandom(X, rctx); CHKERRQ(info);
}
info = PetscRandomDestroy(rctx); CHKERRQ(info);
info = VecShift(X, np5); CHKERRQ(info);
} else { /* Take an average of the boundary conditions */
PetscInt xs,xm,ys,ym;
PetscInt mx=user->mx,my=user->my;
PetscScalar **x;
/* Get local mesh boundaries */
info = DAGetCorners(user->da,&xs,&ys,PETSC_NULL,&xm,&ym,PETSC_NULL); CHKERRQ(info);
/* Get pointers to vector data */
info = DAVecGetArray(user->da,X,(void**)&x);
/* Perform local computations */
for (j=ys; j<ys+ym; j++){
for (i=xs; i< xs+xm; i++){
x[j][i] = ( ((j+1)*user->bottom[i-xs+1]+(my-j+1)*user->top[i-xs+1])/(my+2)+
((i+1)*user->left[j-ys+1]+(mx-i+1)*user->right[j-ys+1])/(mx+2))/2.0;
}
}
/* Restore vectors */
info = DAVecRestoreArray(user->da,X,(void**)&x); CHKERRQ(info);
info = PetscLogFlops(9*xm*ym); CHKERRQ(info);
}
return 0;
}
开发者ID:fuentesdt,项目名称:tao-1.10.1-p3,代码行数:64,代码来源:minsurf2.c
示例10: KSPChebyshevEstEigSetRandom_Chebyshev
static PetscErrorCode KSPChebyshevEstEigSetRandom_Chebyshev(KSP ksp,PetscRandom random)
{
KSP_Chebyshev *cheb = (KSP_Chebyshev*)ksp->data;
PetscErrorCode ierr;
PetscFunctionBegin;
if (random) {ierr = PetscObjectReference((PetscObject)random);CHKERRQ(ierr);}
ierr = PetscRandomDestroy(&cheb->random);CHKERRQ(ierr);
cheb->random = random;
PetscFunctionReturn(0);
}
开发者ID:pombredanne,项目名称:petsc,代码行数:11,代码来源:cheby.c
示例11: TSMonitorSPEigCtxCreate
/*@C
TSMonitorSPEigCtxDestroy - Destroys a scatter plot context that was created with TSMonitorSPEigCtxCreate().
Collective on TSMonitorSPEigCtx
Input Parameter:
. ctx - the monitor context
Level: intermediate
.keywords: TS, monitor, line graph, destroy
.seealso: TSMonitorSPEigCtxCreate(), TSMonitorSet(), TSMonitorSPEig();
@*/
PetscErrorCode TSMonitorSPEigCtxDestroy(TSMonitorSPEigCtx *ctx)
{
PetscDraw draw;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscDrawSPGetDraw((*ctx)->drawsp,&draw);CHKERRQ(ierr);
ierr = PetscDrawDestroy(&draw);CHKERRQ(ierr);
ierr = PetscDrawSPDestroy(&(*ctx)->drawsp);CHKERRQ(ierr);
ierr = KSPDestroy(&(*ctx)->ksp);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&(*ctx)->rand);CHKERRQ(ierr);
ierr = PetscFree(*ctx);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:00liujj,项目名称:petsc,代码行数:28,代码来源:tseig.c
示例12: main
int main(int argc,char **argv)
{
PetscErrorCode ierr;
PetscRandom rand1,rand2;
/*
Every PETSc routine should begin with the PetscInitialize() routine.
argc, argv - These command line arguments are taken to extract the options
supplied to PETSc and options supplied to MPI.
help - When PETSc executable is invoked with the option -help,
it prints the various options that can be applied at
runtime. The user can use the "help" variable place
additional help messages in this printout.
*/
ierr = PetscInitialize(&argc,&argv,(char *)0,help);CHKERRQ(ierr);
ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rand1);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rand1);CHKERRQ(ierr);
ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rand2);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rand2);CHKERRQ(ierr);
#if defined(PETSC_USE_SERVER)
ierr = PetscPrintf(PETSC_COMM_WORLD,"Starting up PetscWebServe()\n");CHKERRQ(ierr);
ierr = PetscWebServe(PETSC_COMM_WORLD,PETSC_DEFAULT);CHKERRQ(ierr);
while (1) {;}
#endif
ierr = PetscRandomDestroy(&rand1);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&rand2);CHKERRQ(ierr);
/*
Always call PetscFinalize() before exiting a program. This routine
- finalizes the PETSc libraries as well as MPI
- provides summary and diagnostic information if certain runtime
options are chosen (e.g., -log_summary). See PetscFinalize()
manpage for more information.
*/
ierr = PetscFinalize();
return 0;
}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:36,代码来源:ex7.c
示例13: KSPDestroy_Chebyshev
static PetscErrorCode KSPDestroy_Chebyshev(KSP ksp)
{
KSP_Chebyshev *cheb = (KSP_Chebyshev*)ksp->data;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = KSPDestroy(&cheb->kspest);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&cheb->random);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPChebyshevSetEigenvalues_C",NULL);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPChebyshevEstEigSet_C",NULL);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPChebyshevEstEigSetRandom_C",NULL);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)ksp,"KSPChebyshevEstEigGetKSP_C",NULL);CHKERRQ(ierr);
ierr = KSPDestroyDefault(ksp);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:pombredanne,项目名称:petsc,代码行数:15,代码来源:cheby.c
示例14: PetscRandomCreate
void PetscVector::randomize( double alpha, double beta, double * /* ix */ )
{
int ierr;
PetscRandom rctx;
ierr = PetscRandomCreate(PETSC_COMM_WORLD,RANDOM_DEFAULT,&rctx);
assert(ierr == 0);
ierr = PetscRandomSetInterval(rctx, alpha, beta );
assert(ierr == 0);
ierr = VecSetRandom(pv, rctx);
assert(ierr == 0);
ierr = PetscRandomDestroy(rctx);
assert(ierr == 0);
}
开发者ID:qiakeyufeiniao,项目名称:PIPS,代码行数:15,代码来源:PetscVector.C
示例15: FormInitialState
PetscErrorCode FormInitialState(Vec X, AppCtx* user)
{
PetscErrorCode ierr;
PetscRandom R;
PetscFunctionBegin;
ierr = PetscRandomCreate(PETSC_COMM_WORLD, &R);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(R);CHKERRQ(ierr);
ierr = PetscRandomSetInterval(R, 0., 10.);CHKERRQ(ierr);
/*
* Initialize the state vector
*/
ierr = VecSetRandom(X, R);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&R);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:wgapl,项目名称:petsc,代码行数:17,代码来源:ex42.c
示例16: main
int main(int argc,char **argv)
{
PetscInt i,n = 1000,*values;
int event;
PetscRandom rand;
PetscReal value;
PetscErrorCode ierr;
PetscBool values_view=PETSC_FALSE;
PetscMPIInt rank;
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 = PetscOptionsGetBool(NULL,0,"-values_view",&values_view,NULL);CHKERRQ(ierr);
ierr = PetscRandomCreate(PETSC_COMM_SELF,&rand);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rand);CHKERRQ(ierr);
ierr = PetscMalloc1(n,&values);CHKERRQ(ierr);
for (i=0; i<n; i++) {
ierr = PetscRandomGetValueReal(rand,&value);CHKERRQ(ierr);
values[i] = (PetscInt)(n*value + 2.0);
}
ierr = PetscSortInt(n,values);CHKERRQ(ierr);
ierr = PetscLogEventRegister("Sort",0,&event);CHKERRQ(ierr);
ierr = PetscLogEventBegin(event,0,0,0,0);CHKERRQ(ierr);
for (i=0; i<n; i++) {
ierr = PetscRandomGetValueReal(rand,&value);CHKERRQ(ierr);
values[i] = (PetscInt)(n*value + 2.0);
}
ierr = PetscSortInt(n,values);CHKERRQ(ierr);
ierr = PetscLogEventEnd(event,0,0,0,0);CHKERRQ(ierr);
for (i=1; i<n; i++) {
if (values[i] < values[i-1]) SETERRQ(PETSC_COMM_SELF,1,"Values not sorted");
if (values_view && !rank) {ierr = PetscPrintf(PETSC_COMM_SELF,"%D %D\n",i,values[i]);CHKERRQ(ierr);}
}
ierr = PetscFree(values);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&rand);CHKERRQ(ierr);
ierr = PetscFinalize();
return ierr;
}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:45,代码来源:ex12.c
示例17: EPSCreate
/*@C
EPSDestroy - Destroys the EPS context.
Collective on EPS
Input Parameter:
. eps - eigensolver context obtained from EPSCreate()
Level: beginner
.seealso: EPSCreate(), EPSSetUp(), EPSSolve()
@*/
PetscErrorCode EPSDestroy(EPS *eps)
{
PetscErrorCode ierr;
PetscFunctionBegin;
if (!*eps) PetscFunctionReturn(0);
PetscValidHeaderSpecific(*eps,EPS_CLASSID,1);
if (--((PetscObject)(*eps))->refct > 0) {
*eps = 0;
PetscFunctionReturn(0);
}
ierr = EPSReset(*eps);
CHKERRQ(ierr);
if ((*eps)->ops->destroy) {
ierr = (*(*eps)->ops->destroy)(*eps);
CHKERRQ(ierr);
}
ierr = STDestroy(&(*eps)->st);
CHKERRQ(ierr);
ierr = RGDestroy(&(*eps)->rg);
CHKERRQ(ierr);
ierr = DSDestroy(&(*eps)->ds);
CHKERRQ(ierr);
ierr = PetscRandomDestroy(&(*eps)->rand);
CHKERRQ(ierr);
ierr = PetscFree((*eps)->sc);
CHKERRQ(ierr);
/* just in case the initial vectors have not been used */
ierr = SlepcBasisDestroy_Private(&(*eps)->nds,&(*eps)->defl);
CHKERRQ(ierr);
ierr = SlepcBasisDestroy_Private(&(*eps)->nini,&(*eps)->IS);
CHKERRQ(ierr);
if ((*eps)->convergeddestroy) {
ierr = (*(*eps)->convergeddestroy)((*eps)->convergedctx);
CHKERRQ(ierr);
}
ierr = EPSMonitorCancel(*eps);
CHKERRQ(ierr);
ierr = PetscHeaderDestroy(eps);
CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:chrispbradley,项目名称:slepc,代码行数:54,代码来源:epsbasic.c
示例18: SNESDiffParameterCreate_More
PetscErrorCode SNESDiffParameterCreate_More(SNES snes,Vec x,void **outneP)
{
DIFFPAR_MORE *neP;
Vec w;
PetscRandom rctx; /* random number generator context */
PetscErrorCode ierr;
PetscBool flg;
char noise_file[PETSC_MAX_PATH_LEN];
PetscFunctionBegin;
ierr = PetscNewLog(snes,&neP);CHKERRQ(ierr);
neP->function_count = 0;
neP->fnoise_min = 1.0e-20;
neP->hopt_min = 1.0e-8;
neP->h_first_try = 1.0e-3;
neP->fnoise_resets = 0;
neP->hopt_resets = 0;
/* Create work vectors */
ierr = VecDuplicateVecs(x,3,&neP->workv);CHKERRQ(ierr);
w = neP->workv[0];
/* Set components of vector w to random numbers */
ierr = PetscRandomCreate(PetscObjectComm((PetscObject)snes),&rctx);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rctx);CHKERRQ(ierr);
ierr = VecSetRandom(w,rctx);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&rctx);CHKERRQ(ierr);
/* Open output file */
ierr = PetscOptionsGetString(((PetscObject)snes)->prefix,"-snes_mf_noise_file",noise_file,PETSC_MAX_PATH_LEN,&flg);CHKERRQ(ierr);
if (flg) neP->fp = fopen(noise_file,"w");
else neP->fp = fopen("noise.out","w");
if (!neP->fp) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_FILE_OPEN,"Cannot open file");
ierr = PetscInfo(snes,"Creating Jorge's differencing parameter context\n");CHKERRQ(ierr);
*outneP = neP;
PetscFunctionReturn(0);
}
开发者ID:00liujj,项目名称:petsc,代码行数:39,代码来源:snesnoise.c
示例19: Ensure
Ensure(FFT, i_transform_is_inverse_of_transform)
{
Vec v;
PetscInt dim = 5;
DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,dim,2,1,NULL,&da);
DMCreateGlobalVector(da, &v);
PetscRandom rdm;
PetscRandomCreate(PETSC_COMM_WORLD, &rdm);
PetscRandomSetFromOptions(rdm);
VecSetRandom(v, rdm);
PetscRandomDestroy(&rdm);
Vec vIn;
VecDuplicate(v, &vIn);
VecCopy(v, vIn);
scFftCreate(da, &fft);
Vec x, y, z;
scFftCreateVecsFFTW(fft, &x, &y, &z);
int component = 0;
scFftTransform(fft, v, component, y);
scFftITransform(fft, v, component, y);
VecAXPY(v, -dim, vIn);
PetscReal error;
VecStrideNorm(v, component, NORM_INFINITY, &error);
assert_that(error < 1.0e-6, is_true);
VecDestroy(&x);
VecDestroy(&y);
VecDestroy(&z);
VecDestroy(&v);
VecDestroy(&vIn);
scFftDestroy(&fft);
DMDestroy(&da);
}
开发者ID:ocramz,项目名称:SuperContinuum,代码行数:38,代码来源:test_FFT.c
示例20: main
int main(int argc,char **argv)
{
DM da; /* distributed array */
Vec x,b,u; /* approx solution, RHS, exact solution */
Mat A; /* linear system matrix */
KSP ksp; /* linear solver context */
PetscRandom rctx; /* random number generator context */
PetscReal norm; /* norm of solution error */
PetscInt i,j,its;
PetscErrorCode ierr;
PetscBool flg = PETSC_FALSE;
PetscLogStage stage;
DMDALocalInfo info;
ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr);
/*
Create distributed array to handle parallel distribution.
The problem size will default to 8 by 7, but this can be
changed using -da_grid_x M -da_grid_y N
*/
ierr = DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,-8,-7,PETSC_DECIDE,PETSC_DECIDE,1,1,NULL,NULL,&da);CHKERRQ(ierr);
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Compute the matrix and right-hand-side vector that define
the linear system, Ax = b.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/*
Create parallel matrix preallocated according to the DMDA, format AIJ by default.
To use symmetric storage, run with -dm_mat_type sbaij -mat_ignore_lower_triangular
*/
ierr = DMSetMatType(da,MATAIJ);CHKERRQ(ierr);
ierr = DMCreateMatrix(da,&A);CHKERRQ(ierr);
/*
Set matrix elements for the 2-D, five-point stencil in parallel.
- Each processor needs to insert only elements that it owns
locally (but any non-local elements will be sent to the
appropriate processor during matrix assembly).
- Rows and columns are specified by the stencil
- Entries are normalized for a domain [0,1]x[0,1]
*/
ierr = PetscLogStageRegister("Assembly", &stage);CHKERRQ(ierr);
ierr = PetscLogStagePush(stage);CHKERRQ(ierr);
ierr = DMDAGetLocalInfo(da,&info);CHKERRQ(ierr);
for (j=info.ys; j<info.ys+info.ym; j++) {
for (i=info.xs; i<info.xs+info.xm; i++) {
PetscReal hx = 1./info.mx,hy = 1./info.my;
MatStencil row = {0},col[5] = {{0}};
PetscScalar v[5];
PetscInt ncols = 0;
row.j = j; row.i = i;
col[ncols].j = j; col[ncols].i = i; v[ncols++] = 2*(hx/hy + hy/hx);
/* boundaries */
if (i>0) {col[ncols].j = j; col[ncols].i = i-1; v[ncols++] = -hy/hx;}
if (i<info.mx-1) {col[ncols].j = j; col[ncols].i = i+1; v[ncols++] = -hy/hx;}
if (j>0) {col[ncols].j = j-1; col[ncols].i = i; v[ncols++] = -hx/hy;}
if (j<info.my-1) {col[ncols].j = j+1; col[ncols].i = i; v[ncols++] = -hx/hy;}
ierr = MatSetValuesStencil(A,1,&row,ncols,col,v,INSERT_VALUES);CHKERRQ(ierr);
}
}
/*
Assemble matrix, using the 2-step process:
MatAssemblyBegin(), MatAssemblyEnd()
Computations can be done while messages are in transition
by placing code between these two statements.
*/
ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = PetscLogStagePop();CHKERRQ(ierr);
/*
Create parallel vectors compatible with the DMDA.
*/
ierr = DMCreateGlobalVector(da,&u);CHKERRQ(ierr);
ierr = VecDuplicate(u,&b);CHKERRQ(ierr);
ierr = VecDuplicate(u,&x);CHKERRQ(ierr);
/*
Set exact solution; then compute right-hand-side vector.
By default we use an exact solution of a vector with all
elements of 1.0; Alternatively, using the runtime option
-random_sol forms a solution vector with random components.
*/
ierr = PetscOptionsGetBool(NULL,"-random_exact_sol",&flg,NULL);CHKERRQ(ierr);
if (flg) {
ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rctx);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rctx);CHKERRQ(ierr);
ierr = VecSetRandom(u,rctx);CHKERRQ(ierr);
ierr = PetscRandomDestroy(&rctx);CHKERRQ(ierr);
} else {
ierr = VecSet(u,1.);CHKERRQ(ierr);
}
ierr = MatMult(A,u,b);CHKERRQ(ierr);
/*
View the exact solution vector if desired
*/
flg = PETSC_FALSE;
//.........这里部分代码省略.........
开发者ID:00liujj,项目名称:petsc,代码行数:101,代码来源:ex46.c
注:本文中的PetscRandomDestroy函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论