本文整理汇总了C++中VecSetRandom函数的典型用法代码示例。如果您正苦于以下问题:C++ VecSetRandom函数的具体用法?C++ VecSetRandom怎么用?C++ VecSetRandom使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了VecSetRandom函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetRandomVectors
PetscErrorCode SetRandomVectors(AppCtx *user)
{
PetscErrorCode ierr;
PetscInt i,n,count=0;
PetscScalar *w1,*w2,*Pv_p,*eta_p;
PetscFunctionBeginUser;
ierr = VecSetRandom(user->work1,NULL);CHKERRQ(ierr);
ierr = VecSetRandom(user->work2,NULL);CHKERRQ(ierr);
ierr = VecGetArray(user->work1,&w1);CHKERRQ(ierr);
ierr = VecGetArray(user->work2,&w2);CHKERRQ(ierr);
ierr = VecGetArray(user->Pv,&Pv_p);CHKERRQ(ierr);
ierr = VecGetArray(user->eta,&eta_p);CHKERRQ(ierr);
ierr = VecGetLocalSize(user->work1,&n);CHKERRQ(ierr);
for (i=0; i<n; i++) {
if (eta_p[i]>=0.8 || w1[i]>user->P_casc) Pv_p[i]=0;
else {
Pv_p[i]=w2[i]*user->VG;
count =count+1;
}
}
ierr = VecCopy(user->Pv,user->Pi);CHKERRQ(ierr);
ierr = VecScale(user->Pi,0.9);CHKERRQ(ierr);
ierr = VecPointwiseMult(user->Piv,user->Pi,user->Pv);CHKERRQ(ierr);
ierr = VecRestoreArray(user->work1,&w1);CHKERRQ(ierr);
ierr = VecRestoreArray(user->work2,&w2);CHKERRQ(ierr);
ierr = VecRestoreArray(user->Pv,&Pv_p);CHKERRQ(ierr);
ierr = VecRestoreArray(user->eta,&eta_p);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例2: 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;
}
示例3: MatMultAddEqual
/*@
MatMultAddEqual - 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 MatMultAddEqual(Mat A,Mat B,PetscInt n,PetscBool *flg)
{
PetscErrorCode ierr;
Vec x,y,s1,s2;
PetscRandom rctx;
PetscReal r1,r2,tol=1.e-10;
PetscInt am,an,bm,bn,k;
PetscScalar none = -1.0;
PetscFunctionBegin;
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);
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);
ierr = VecDuplicate(s1,&y);CHKERRQ(ierr);
*flg = PETSC_TRUE;
for (k=0; k<n; k++) {
ierr = VecSetRandom(x,rctx);CHKERRQ(ierr);
ierr = VecSetRandom(y,rctx);CHKERRQ(ierr);
ierr = MatMultAdd(A,x,y,s1);CHKERRQ(ierr);
ierr = MatMultAdd(B,x,y,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 MatMultAdd() %G\n",k,r1);CHKERRQ(ierr);
break;
}
}
ierr = PetscRandomDestroy(&rctx);CHKERRQ(ierr);
ierr = VecDestroy(&x);CHKERRQ(ierr);
ierr = VecDestroy(&y);CHKERRQ(ierr);
ierr = VecDestroy(&s1);CHKERRQ(ierr);
ierr = VecDestroy(&s2);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例4: SNESNEWTONLSCheckLocalMin_Private
static PetscErrorCode SNESNEWTONLSCheckLocalMin_Private(SNES snes,Mat A,Vec F,PetscReal fnorm,PetscBool *ismin)
{
PetscReal a1;
PetscErrorCode ierr;
PetscBool hastranspose;
Vec W;
PetscFunctionBegin;
*ismin = PETSC_FALSE;
ierr = MatHasOperation(A,MATOP_MULT_TRANSPOSE,&hastranspose);CHKERRQ(ierr);
ierr = VecDuplicate(F,&W);CHKERRQ(ierr);
if (hastranspose) {
/* Compute || J^T F|| */
ierr = MatMultTranspose(A,F,W);CHKERRQ(ierr);
ierr = VecNorm(W,NORM_2,&a1);CHKERRQ(ierr);
ierr = PetscInfo1(snes,"|| J^T F|| %14.12e near zero implies found a local minimum\n",(double)(a1/fnorm));CHKERRQ(ierr);
if (a1/fnorm < 1.e-4) *ismin = PETSC_TRUE;
} else {
Vec work;
PetscScalar result;
PetscReal wnorm;
ierr = VecSetRandom(W,NULL);CHKERRQ(ierr);
ierr = VecNorm(W,NORM_2,&wnorm);CHKERRQ(ierr);
ierr = VecDuplicate(W,&work);CHKERRQ(ierr);
ierr = MatMult(A,W,work);CHKERRQ(ierr);
ierr = VecDot(F,work,&result);CHKERRQ(ierr);
ierr = VecDestroy(&work);CHKERRQ(ierr);
a1 = PetscAbsScalar(result)/(fnorm*wnorm);
ierr = PetscInfo1(snes,"(F^T J random)/(|| F ||*||random|| %14.12e near zero implies found a local minimum\n",(double)a1);CHKERRQ(ierr);
if (a1 < 1.e-4) *ismin = PETSC_TRUE;
}
ierr = VecDestroy(&W);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例5: computeMaxEigVal
PetscErrorCode computeMaxEigVal(Mat A, PetscInt its, PetscScalar *eig)
{
PetscErrorCode ierr;
PetscRandom rctx; /* random number generator context */
Vec x0, x, x_1, tmp;
PetscScalar lambda_its, lambda_its_1;
PetscInt i;
PetscFunctionBeginUser;
ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rctx);CHKERRQ(ierr);
ierr = PetscRandomSetFromOptions(rctx);CHKERRQ(ierr);
ierr = MatGetVecs(A, &x_1, &x);CHKERRQ(ierr);
ierr = VecSetRandom(x, rctx);CHKERRQ(ierr);
ierr = VecDuplicate(x, &x0);CHKERRQ(ierr);
ierr = VecCopy(x, x0);CHKERRQ(ierr);
ierr = MatMult(A, x, x_1);CHKERRQ(ierr);
for (i=0; i<its; i++) {
tmp = x; x = x_1; x_1 = tmp;
ierr = MatMult(A, x, x_1);CHKERRQ(ierr);
}
ierr = VecDot(x0, x, &lambda_its);CHKERRQ(ierr);
ierr = VecDot(x0, x_1, &lambda_its_1);CHKERRQ(ierr);
*eig = lambda_its_1/lambda_its;
ierr = VecDestroy(&x0);CHKERRQ(ierr);
ierr = VecDestroy(&x);CHKERRQ(ierr);
ierr = VecDestroy(&x_1);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例6: SetInitialGuess
PetscErrorCode SetInitialGuess(Vec X,AppCtx* user)
{
PetscErrorCode ierr;
PetscScalar *x,*u;
PetscInt n,i;
Vec rand;
PetscFunctionBegin;
/* u = -0.4 + 0.05*rand(N,1)*(rand(N,1) - 0.5) */
ierr = VecDuplicate(user->u,&rand);
ierr = VecSetRandom(rand,PETSC_NULL);
ierr = VecCopy(rand,user->u);
ierr = VecShift(rand,-0.5);CHKERRQ(ierr);
ierr = VecPointwiseMult(user->u,user->u,rand);CHKERRQ(ierr);
ierr = VecDestroy(&rand);CHKERRQ(ierr);
ierr = VecScale(user->u,0.05);CHKERRQ(ierr);
ierr = VecShift(user->u,-0.4);CHKERRQ(ierr);
ierr = VecGetLocalSize(X,&n);CHKERRQ(ierr);
ierr = VecGetArray(X,&x);CHKERRQ(ierr);
ierr = VecGetArray(user->u,&u);CHKERRQ(ierr);
/* Set initial guess, only set value for 2nd dof */
for(i=0;i<n/2;i++) {
x[2*i+1] = u[i];
}
ierr = VecRestoreArray(X,&x);CHKERRQ(ierr);
ierr = VecRestoreArray(user->u,&u);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例7: generateVectorRandom
PetscErrorCode generateVectorRandom(int size, Vec * v){
PetscErrorCode ierr;
ierr=PetscPrintf(PETSC_COMM_WORLD,"Generating Vector \n");CHKERRQ(ierr);
ierr=generateVector(size,v);CHKERRQ(ierr);
ierr=VecSetRandom(*v,PETSC_NULL);CHKERRQ(ierr);
PetscPrintf(PETSC_COMM_WORLD,"Generated Random Vector of size : %d\n",size);
return 0;
}
示例8: 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;
}
示例9: 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);
}
示例10: PCApply_Noise
PetscErrorCode PCApply_Noise(PC pc,Vec xin,Vec xout)
{
PetscErrorCode ierr;
PCNoise_Ctx *ctx;
PetscReal nrmin, nrmnoise;
PetscFunctionBeginUser;
ierr = PCShellGetContext(pc,(void**)&ctx);CHKERRQ(ierr);
/* xout is ||xin|| * ctx->eta* f, where f is a pseudorandom unit vector
(Note that this should always be combined additively with another PC) */
ierr = VecSetRandom(xout,ctx->random);CHKERRQ(ierr);
ierr = VecNorm(xin,NORM_2,&nrmin);CHKERRQ(ierr);
ierr = VecNorm(xout,NORM_2,&nrmnoise);CHKERRQ(ierr);
ierr = VecScale(xout,ctx->eta*(nrmin/nrmnoise));CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例11: 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);
}
示例12: WindSpeeds
/* Computes the wind speed using Weibull distribution */
PetscErrorCode WindSpeeds(AppCtx *user)
{
PetscErrorCode ierr;
PetscScalar *x,*t,avg_dev,sum;
PetscInt i;
PetscFunctionBegin;
user->cw = 5;
user->kw = 2; /* Rayleigh distribution */
user->nsamples = 2000;
user->Tw = 0.2;
ierr = PetscOptionsBegin(PETSC_COMM_WORLD,PETSC_NULL,"Wind Speed Options","");CHKERRQ(ierr);
{
ierr = PetscOptionsReal("-cw","","",user->cw,&user->cw,PETSC_NULL);CHKERRQ(ierr);
ierr = PetscOptionsReal("-kw","","",user->kw,&user->kw,PETSC_NULL);CHKERRQ(ierr);
ierr = PetscOptionsReal("-nsamples","","",user->nsamples,&user->nsamples,PETSC_NULL);CHKERRQ(ierr);
ierr = PetscOptionsReal("-Tw","","",user->Tw,&user->Tw,PETSC_NULL);CHKERRQ(ierr);
}
ierr = PetscOptionsEnd();CHKERRQ(ierr);
ierr = VecCreate(PETSC_COMM_WORLD,&user->wind_data);CHKERRQ(ierr);
ierr = VecSetSizes(user->wind_data,PETSC_DECIDE,user->nsamples);CHKERRQ(ierr);
ierr = VecSetFromOptions(user->wind_data);CHKERRQ(ierr);
ierr = VecDuplicate(user->wind_data,&user->t_wind);CHKERRQ(ierr);
ierr = VecGetArray(user->t_wind,&t);CHKERRQ(ierr);
for(i=0;i < user->nsamples;i++) t[i] = (i+1)*tmax/user->nsamples;
ierr = VecRestoreArray(user->t_wind,&t);CHKERRQ(ierr);
/* Wind speed deviation = (-log(rand)/cw)^(1/kw) */
ierr = VecSetRandom(user->wind_data,PETSC_NULL);CHKERRQ(ierr);
ierr = VecLog(user->wind_data);CHKERRQ(ierr);
ierr = VecScale(user->wind_data,-1/user->cw);CHKERRQ(ierr);
ierr = VecGetArray(user->wind_data,&x);CHKERRQ(ierr);
for(i=0;i < user->nsamples;i++) {
x[i] = PetscPowScalar(x[i],(1/user->kw));
}
ierr = VecRestoreArray(user->wind_data,&x);CHKERRQ(ierr);
ierr = VecSum(user->wind_data,&sum);CHKERRQ(ierr);
avg_dev = sum/user->nsamples;
/* Wind speed (t) = (1 + wind speed deviation(t) - avg_dev)*average wind speed */
ierr = VecShift(user->wind_data,(1-avg_dev));CHKERRQ(ierr);
ierr = VecScale(user->wind_data,vwa);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例13: VecSetRandom_MultiVec
PetscErrorCode VecSetRandom_MultiVec(Vec x, PetscRandom rctx)
{
#if !defined(NDEBUG)
TBOX_ASSERT(x);
#endif
Vec_MultiVec* mx = static_cast<Vec_MultiVec*>(x->data);
#if !defined(NDEBUG)
TBOX_ASSERT(mx);
#endif
PetscErrorCode ierr;
for (PetscInt k = 0; k < mx->n; ++k)
{
ierr = VecSetRandom(mx->array[k], rctx);
CHKERRQ(ierr);
}
ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(x));
CHKERRQ(ierr);
PetscFunctionReturn(0);
} // VecSetRandom_MultiVec
示例14: 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);
}
示例15: 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);
}