您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ DMGetCoordinateDM函数代码示例

51自学网 2021-06-01 20:22:40
  C++
这篇教程C++ DMGetCoordinateDM函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中DMGetCoordinateDM函数的典型用法代码示例。如果您正苦于以下问题:C++ DMGetCoordinateDM函数的具体用法?C++ DMGetCoordinateDM怎么用?C++ DMGetCoordinateDM使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了DMGetCoordinateDM函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: DMView_DA_VTK

PetscErrorCode DMView_DA_VTK(DM da, PetscViewer viewer){  PetscInt       dim, dof, M = 0, N = 0, P = 0;  PetscErrorCode ierr;  PetscFunctionBegin;  ierr = DMDAGetInfo(da, &dim, &M, &N, &P, NULL, NULL, NULL, &dof, NULL, NULL, NULL, NULL, NULL);CHKERRQ(ierr);  if (!da->coordinates) SETERRQ(PetscObjectComm((PetscObject)da),PETSC_ERR_SUP, "VTK output requires DMDA coordinates.");  /* Write Header */  ierr = PetscViewerASCIIPrintf(viewer,"# vtk DataFile Version 2.0/n");CHKERRQ(ierr);  ierr = PetscViewerASCIIPrintf(viewer,"Structured Mesh Example/n");CHKERRQ(ierr);  ierr = PetscViewerASCIIPrintf(viewer,"ASCII/n");CHKERRQ(ierr);  ierr = PetscViewerASCIIPrintf(viewer,"DATASET STRUCTURED_GRID/n");CHKERRQ(ierr);  ierr = PetscViewerASCIIPrintf(viewer,"DIMENSIONS %d %d %d/n", M, N, P);CHKERRQ(ierr);  ierr = PetscViewerASCIIPrintf(viewer,"POINTS %d double/n", M*N*P);CHKERRQ(ierr);  if (da->coordinates) {    DM  dac;    Vec natural;    ierr = DMGetCoordinateDM(da, &dac);CHKERRQ(ierr);    ierr = DMDACreateNaturalVector(dac, &natural);CHKERRQ(ierr);    ierr = PetscObjectSetOptionsPrefix((PetscObject) natural, "coor_");CHKERRQ(ierr);    ierr = DMDAGlobalToNaturalBegin(dac, da->coordinates, INSERT_VALUES, natural);CHKERRQ(ierr);    ierr = DMDAGlobalToNaturalEnd(dac, da->coordinates, INSERT_VALUES, natural);CHKERRQ(ierr);    ierr = PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_VTK_COORDS);CHKERRQ(ierr);    ierr = VecView(natural, viewer);CHKERRQ(ierr);    ierr = PetscViewerPopFormat(viewer);CHKERRQ(ierr);    ierr = VecDestroy(&natural);CHKERRQ(ierr);  }  PetscFunctionReturn(0);}
开发者ID:PeiLiu90,项目名称:petsc,代码行数:31,


示例2: FormPsiAndInitialGuess

PetscErrorCode FormPsiAndInitialGuess(DM da,Vec U0,PetscBool feasible){  ObsCtx         *user;  PetscErrorCode ierr;  PetscInt       i,j,Mx,My,xs,ys,xm,ym;  DM             coordDA;  Vec            coordinates;  DMDACoor2d     **coords;  PetscReal      **psi, **u0, **uexact,                 x, y, r,                 afree = 0.69797, A = 0.68026, B = 0.47152, pi = 3.1415926;  PetscFunctionBeginUser;  ierr = DMGetApplicationContext(da,&user);CHKERRQ(ierr);  ierr = DMDAGetInfo(da,PETSC_IGNORE,&Mx,&My,PETSC_IGNORE,PETSC_IGNORE,                     PETSC_IGNORE,PETSC_IGNORE,PETSC_IGNORE,PETSC_IGNORE,                     PETSC_IGNORE,PETSC_IGNORE,PETSC_IGNORE,PETSC_IGNORE);  ierr = DMDAGetCorners(da,&xs,&ys,PETSC_NULL,&xm,&ym,PETSC_NULL);CHKERRQ(ierr);  ierr = DMGetCoordinateDM(da, &coordDA);CHKERRQ(ierr);  ierr = DMGetCoordinates(da, &coordinates);CHKERRQ(ierr);  ierr = DMDAVecGetArray(coordDA, coordinates, &coords);CHKERRQ(ierr);  ierr = DMDAVecGetArray(da, user->psi, &psi);CHKERRQ(ierr);  ierr = DMDAVecGetArray(da, U0, &u0);CHKERRQ(ierr);  ierr = DMDAVecGetArray(da, user->uexact, &uexact);CHKERRQ(ierr);  for (j=ys; j<ys+ym; j++) {    for (i=xs; i<xs+xm; i++) {      x = coords[j][i].x;      y = coords[j][i].y;      r = sqrt(x * x + y * y);      if (r <= 1.0) {        psi[j][i] = sqrt(1.0 - r * r);      } else {        psi[j][i] = -1.0;      }      if (r <= afree) {        uexact[j][i] = psi[j][i];  /* on the obstacle */      } else {        uexact[j][i] = - A * log(r) + B;   /* solves the laplace eqn */      }      if (feasible) {        if (i == 0 || j == 0 || i == Mx-1 || j == My-1) {          u0[j][i] = uexact[j][i];        } else {          /* initial guess is admissible: it is above the obstacle */          u0[j][i] = uexact[j][i] + cos(pi * x / 4) * cos(pi * y / 4);        }      } else {        u0[j][i] = 0.;      }    }  }  ierr = DMDAVecRestoreArray(da, user->psi, &psi);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(da, U0, &u0);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(da, user->uexact, &uexact);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(coordDA, coordinates, &coords);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:60,


示例3: FormCoordinates

PetscErrorCode FormCoordinates(DM da,AppCtx *user){  PetscErrorCode ierr;  Vec            coords;  DM             cda;  PetscInt       mx,my,mz;  PetscInt       i,j,k,xs,ys,zs,xm,ym,zm;  CoordField     ***x;  PetscFunctionBegin;  ierr = DMGetCoordinateDM(da,&cda);CHKERRQ(ierr);  ierr = DMCreateGlobalVector(cda,&coords);CHKERRQ(ierr);  ierr = DMDAGetInfo(da,0,&mx,&my,&mz,0,0,0,0,0,0,0,0,0);CHKERRQ(ierr);  ierr = DMDAGetCorners(da,&xs,&ys,&zs,&xm,&ym,&zm);CHKERRQ(ierr);  ierr = DMDAVecGetArray(da,coords,&x);CHKERRQ(ierr);  for (k=zs; k<zs+zm; k++) {    for (j=ys; j<ys+ym; j++) {      for (i=xs; i<xs+xm; i++) {        PetscReal cx = ((PetscReal)i) / (((PetscReal)(mx-1)));        PetscReal cy = ((PetscReal)j) / (((PetscReal)(my-1)));        PetscReal cz = ((PetscReal)k) / (((PetscReal)(mz-1)));        PetscReal rad = user->rad + cy*user->height;        PetscReal ang = (cx - 0.5)*user->arc;        x[k][j][i][0] = rad*PetscSinReal(ang);        x[k][j][i][1] = rad*PetscCosReal(ang) - (user->rad + 0.5*user->height)*PetscCosReal(-0.5*user->arc);        x[k][j][i][2] = user->width*(cz - 0.5);      }    }  }  ierr = DMDAVecRestoreArray(da,coords,&x);CHKERRQ(ierr);  ierr = DMSetCoordinates(da,coords);CHKERRQ(ierr);  ierr = VecDestroy(&coords);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:34,


示例4: DMDAComputeCellGeometryFEM

PetscErrorCode DMDAComputeCellGeometryFEM(DM dm, PetscInt cell, PetscQuadrature quad, PetscReal v0[], PetscReal J[], PetscReal invJ[], PetscReal detJ[]){  DM               cdm;  Vec              coordinates;  const PetscReal *quadPoints;  PetscScalar     *vertices = NULL;  PetscInt         numQuadPoints, csize, dim, d, q;  PetscErrorCode   ierr;  PetscFunctionBegin;  PetscValidHeaderSpecific(dm, DM_CLASSID, 1);  ierr = DMDAGetInfo(dm, &dim, 0,0,0,0,0,0,0,0,0,0,0,0);CHKERRQ(ierr);  ierr = DMGetCoordinatesLocal(dm, &coordinates);CHKERRQ(ierr);  ierr = DMGetCoordinateDM(dm, &cdm);CHKERRQ(ierr);  ierr = DMDAVecGetClosure(cdm, NULL, coordinates, cell, &csize, &vertices);CHKERRQ(ierr);  for (d = 0; d < dim; ++d) v0[d] = PetscRealPart(vertices[d]);  switch (dim) {  case 2:    ierr = PetscQuadratureGetData(quad, NULL, &numQuadPoints, &quadPoints, NULL);CHKERRQ(ierr);    for (q = 0; q < numQuadPoints; ++q) {      ierr = DMDAComputeCellGeometry_2D(dm, vertices, &quadPoints[q*dim], J, invJ, detJ);CHKERRQ(ierr);    }    break;  default:    SETERRQ1(PetscObjectComm((PetscObject) dm), PETSC_ERR_SUP, "Dimension %d not supported", dim);  }  ierr = DMDAVecRestoreClosure(cdm, NULL, coordinates, cell, &csize, &vertices);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:PeiLiu90,项目名称:petsc,代码行数:29,


示例5: SetCoordinates3d

PetscErrorCode SetCoordinates3d(DM da){  PetscErrorCode ierr;  PetscInt       i,j,mstart,m,nstart,n,pstart,p,k;  Vec            gc,global;  DMDACoor3d     ***coors;  DM             cda;  PetscFunctionBeginUser;  ierr = DMDASetUniformCoordinates(da,0.0,1.0,0.0,1.0,0.0,1.0);CHKERRQ(ierr);  ierr = DMGetCoordinateDM(da,&cda);CHKERRQ(ierr);  ierr = DMGetCoordinatesLocal(da,&gc);CHKERRQ(ierr);  ierr = DMDAVecGetArray(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMDAGetCorners(cda,&mstart,&nstart,&pstart,&m,&n,&p);CHKERRQ(ierr);  for (i=mstart; i<mstart+m; i++) {    for (j=nstart; j<nstart+n; j++) {      for (k=pstart; k<pstart+p; k++) {        if (i % 2) {          coors[k][j][i].x = coors[k][j][i-1].x + .1*(coors[k][j][i+1].x - coors[k][j][i-1].x);        }        if (j % 2) {          coors[k][j][i].y = coors[k][j-1][i].y + .3*(coors[k][j+1][i].y - coors[k][j-1][i].y);        }        if (k % 2) {          coors[k][j][i].z = coors[k-1][j][i].z + .4*(coors[k+1][j][i].z - coors[k-1][j][i].z);        }      }    }  }  ierr = DMDAVecRestoreArray(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMGetCoordinates(da,&global);CHKERRQ(ierr);  ierr = DMLocalToGlobalBegin(cda,gc,INSERT_VALUES,global);CHKERRQ(ierr);  ierr = DMLocalToGlobalEnd(cda,gc,INSERT_VALUES,global);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:ZJLi2013,项目名称:petsc,代码行数:35,


示例6: SetCoordinates1d

PetscErrorCode SetCoordinates1d(DM da){  PetscErrorCode ierr;  PetscInt       i,start,m;  Vec            gc,global;  PetscScalar    *coors;  DM             cda;  PetscFunctionBeginUser;  ierr = DMDASetUniformCoordinates(da,0.0,1.0,0.0,1.0,0.0,1.0);CHKERRQ(ierr);  ierr = DMGetCoordinateDM(da,&cda);CHKERRQ(ierr);  ierr = DMGetCoordinatesLocal(da,&gc);CHKERRQ(ierr);  ierr = DMDAVecGetArray(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMDAGetCorners(cda,&start,0,0,&m,0,0);CHKERRQ(ierr);  for (i=start; i<start+m; i++) {    if (i % 2) {      coors[i] = coors[i-1] + .1*(coors[i+1] - coors[i-1]);    }  }  ierr = DMDAVecRestoreArray(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMGetCoordinates(da,&global);CHKERRQ(ierr);  ierr = DMLocalToGlobalBegin(cda,gc,INSERT_VALUES,global);CHKERRQ(ierr);  ierr = DMLocalToGlobalEnd(cda,gc,INSERT_VALUES,global);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:ZJLi2013,项目名称:petsc,代码行数:25,


示例7: DADefineXLinearField2D

PetscErrorCode DADefineXLinearField2D(DM da,Vec field){  PetscErrorCode ierr;  PetscInt       i,j;  PetscInt       sx,nx,sy,ny;  Vec            Gcoords;  DMDACoor2d     **XX;  PetscScalar    **FF;  DM             cda;  PetscFunctionBeginUser;  ierr = DMGetCoordinateDM(da,&cda);CHKERRQ(ierr);  ierr = DMGetCoordinates(da,&Gcoords);CHKERRQ(ierr);  ierr = DMDAVecGetArray(cda,Gcoords,&XX);CHKERRQ(ierr);  ierr = DMDAVecGetArray(da,field,&FF);CHKERRQ(ierr);  ierr = DMDAGetCorners(da,&sx,&sy,0,&nx,&ny,0);CHKERRQ(ierr);  for (i=sx; i<sx+nx; i++) {    for (j=sy; j<sy+ny; j++ ) {      FF[j][i] = 10.0 + 3.0 * XX[j][i].x + 5.5 * XX[j][i].y + 8.003 * XX[j][i].x * XX[j][i].y;    }  }  ierr = DMDAVecRestoreArray(da,field,&FF);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(cda,Gcoords,&XX);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:30,


示例8: ini_bou

PetscErrorCode ini_bou(Vec X,AppCtx* user){  PetscErrorCode ierr;  DM             cda;  DMDACoor2d     **coors;  PetscScalar    **p;  Vec            gc;  PetscInt       M,N,I,J;  PetscMPIInt    rank;  PetscFunctionBeginUser;  ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr);  ierr = DMDAGetInfo(user->da,NULL,&M,&N,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);  user->dx = (user->xmax - user->xmin)/(M-1); user->dy = (user->ymax - user->ymin)/(N-1);  ierr = DMGetCoordinateDM(user->da,&cda);CHKERRQ(ierr);  ierr = DMGetCoordinates(user->da,&gc);CHKERRQ(ierr);  ierr = DMDAVecGetArrayRead(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMDAVecGetArray(user->da,X,&p);CHKERRQ(ierr);  /* Point mass at (mux,muy) */  ierr = PetscPrintf(PETSC_COMM_WORLD,"Original user->mux = %f, user->muy = %f/n",user->mux,user->muy);CHKERRQ(ierr);  ierr = DMDAGetLogicalCoordinate(user->da,user->mux,user->muy,0.0,&I,&J,NULL,&user->mux,&user->muy,NULL);CHKERRQ(ierr);  user->PM_min = user->Pmax*PetscSinScalar(user->mux);  ierr = PetscPrintf(PETSC_COMM_WORLD,"Corrected user->mux = %f, user->muy = %f user->PM_min = %f,user->dx = %f/n",user->mux,user->muy,user->PM_min,user->dx);CHKERRQ(ierr);  if (I > -1 && J > -1) {    p[J][I] = 1.0;  }  ierr = DMDAVecRestoreArrayRead(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(user->da,X,&p);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:fengyuqi,项目名称:petsc,代码行数:32,


示例9: SetCoordinates2d

PetscErrorCode SetCoordinates2d(DM da){  PetscErrorCode ierr;  PetscInt       i,j,mstart,m,nstart,n;  Vec            local,global;  DMDACoor2d     **coors,**coorslocal;  DM             cda;  PetscFunctionBeginUser;  ierr = DMDASetUniformCoordinates(da,0.0,1.0,0.0,1.0,0.0,1.0);CHKERRQ(ierr);  ierr = DMGetCoordinateDM(da,&cda);CHKERRQ(ierr);  ierr = DMGetCoordinates(da,&global);CHKERRQ(ierr);  ierr = DMGetCoordinatesLocal(da,&local);CHKERRQ(ierr);  ierr = DMDAVecGetArray(cda,global,&coors);CHKERRQ(ierr);  ierr = DMDAVecGetArrayRead(cda,local,&coorslocal);CHKERRQ(ierr);  ierr = DMDAGetCorners(cda,&mstart,&nstart,0,&m,&n,0);CHKERRQ(ierr);  for (i=mstart; i<mstart+m; i++) {    for (j=nstart; j<nstart+n; j++) {      if (i % 2) {        coors[j][i].x = coorslocal[j][i-1].x + .1*(coorslocal[j][i+1].x - coorslocal[j][i-1].x);      }      if (j % 2) {        coors[j][i].y = coorslocal[j-1][i].y + .3*(coorslocal[j+1][i].y - coorslocal[j-1][i].y);      }    }  }  ierr = DMDAVecRestoreArray(cda,global,&coors);CHKERRQ(ierr);  ierr = DMDAVecRestoreArrayRead(cda,local,&coorslocal);CHKERRQ(ierr);  ierr = DMGlobalToLocalBegin(cda,global,INSERT_VALUES,local);CHKERRQ(ierr);  ierr = DMGlobalToLocalEnd(cda,global,INSERT_VALUES,local);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:000Justin000,项目名称:ATPESC,代码行数:33,


示例10: FormExactSolution2

/*  FormExactSolution2 - Forms initial approximation.  Input Parameters:  da - The DM  user - user-defined application context  Output Parameter:  X - vector */PetscErrorCode FormExactSolution2(DM da, AppCtx *user, Vec U){  DM             coordDA;  Vec            coordinates;  DMDACoor2d   **coords;  PetscScalar  **u;  PetscReal      x, y;  PetscInt       xs, ys, xm, ym, i, j;  PetscErrorCode ierr;  PetscFunctionBeginUser;  ierr = DMDAGetCorners(da, &xs, &ys, NULL, &xm, &ym, NULL);CHKERRQ(ierr);  ierr = DMGetCoordinateDM(da, &coordDA);CHKERRQ(ierr);  ierr = DMGetCoordinates(da, &coordinates);CHKERRQ(ierr);  ierr = DMDAVecGetArray(coordDA, coordinates, &coords);CHKERRQ(ierr);  ierr = DMDAVecGetArray(da, U, &u);CHKERRQ(ierr);  for (j = ys; j < ys+ym; ++j) {    for (i = xs; i < xs+xm; ++i) {      x = PetscRealPart(coords[j][i].x);      y = PetscRealPart(coords[j][i].y);      u[j][i] = PetscSinReal(PETSC_PI*x)*PetscSinReal(PETSC_PI*y);    }  }  ierr = DMDAVecRestoreArray(da, U, &u);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(coordDA, coordinates, &coords);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:pombredanne,项目名称:petsc,代码行数:37,


示例11: FormPsiAndExactSoln

PetscErrorCode FormPsiAndExactSoln(DM da) {  ObsCtx         *user;  PetscErrorCode ierr;  DMDALocalInfo  info;  PetscInt       i,j;  DM             coordDA;  Vec            coordinates;  DMDACoor2d     **coords;  PetscReal      **psi, **uexact, r;  const PetscReal afree = 0.69797, A = 0.68026, B = 0.47152;  PetscFunctionBeginUser;  ierr = DMGetApplicationContext(da,&user);CHKERRQ(ierr);  ierr = DMDAGetLocalInfo(da,&info); CHKERRQ(ierr);  ierr = DMGetCoordinateDM(da, &coordDA);CHKERRQ(ierr);  ierr = DMGetCoordinates(da, &coordinates);CHKERRQ(ierr);  ierr = DMDAVecGetArray(coordDA, coordinates, &coords);CHKERRQ(ierr);  ierr = DMDAVecGetArray(da, user->psi, &psi);CHKERRQ(ierr);  ierr = DMDAVecGetArray(da, user->uexact, &uexact);CHKERRQ(ierr);  for (j=info.ys; j<info.ys+info.ym; j++) {    for (i=info.xs; i<info.xs+info.xm; i++) {      r = PetscSqrtReal(pow(coords[j][i].x,2) + pow(coords[j][i].y,2));      if (r <= 1.0) psi[j][i] = PetscSqrtReal(1.0 - r * r);      else psi[j][i] = -1.0;      if (r <= afree) uexact[j][i] = psi[j][i];  /* on the obstacle */      else uexact[j][i] = - A * PetscLogReal(r) + B;   /* solves the laplace eqn */    }  }  ierr = DMDAVecRestoreArray(da, user->psi, &psi);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(da, user->uexact, &uexact);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(coordDA, coordinates, &coords);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:haubentaucher,项目名称:petsc,代码行数:35,


示例12: OpForcing

PetscErrorCode OpForcing(Op op,DM dm,Vec F) {  PetscErrorCode ierr;  Vec X,Floc;  DM dmx;  const PetscScalar *x;  PetscScalar *f;  const PetscReal *B,*D,*w3;  PetscReal L[3];  PetscInt nelem,ne = op->ne,P,Q,P3,Q3;  PetscFunctionBegin;  ierr = PetscLogEventBegin(OP_Forcing,dm,F,0,0);CHKERRQ(ierr);  ierr = DMFEGetTensorEval(dm,&P,&Q,&B,&D,NULL,NULL,&w3);CHKERRQ(ierr);  P3 = P*P*P;  Q3 = Q*Q*Q;  ierr = DMFEGetUniformCoordinates(dm,L);CHKERRQ(ierr);  ierr = DMGetLocalVector(dm,&Floc);CHKERRQ(ierr);  ierr = DMGetCoordinateDM(dm,&dmx);CHKERRQ(ierr);  ierr = DMGetCoordinatesLocal(dm,&X);CHKERRQ(ierr);  ierr = DMFEGetNumElements(dm,&nelem);CHKERRQ(ierr);  ierr = VecGetArrayRead(X,&x);CHKERRQ(ierr);  ierr = VecZeroEntries(Floc);CHKERRQ(ierr);  ierr = VecGetArray(Floc,&f);CHKERRQ(ierr);  for (PetscInt e=0; e<nelem; e+=ne) {    PetscScalar fe[op->dof*P3*ne]_align,fq[op->dof][Q3][ne]_align,xe[3*P3*ne]_align,xq[3][Q3][ne]_align,dx[3][3][Q3][ne]_align,wdxdet[Q3][ne]_align;    ierr = DMFEExtractElements(dmx,x,e,ne,xe);CHKERRQ(ierr);    ierr = PetscMemzero(xq,sizeof xq);CHKERRQ(ierr);    ierr = TensorContract(op->Tensor3,B,B,B,TENSOR_EVAL,xe,xq[0][0]);CHKERRQ(ierr);    ierr = PetscMemzero(dx,sizeof dx);CHKERRQ(ierr);    ierr = TensorContract(op->Tensor3,D,B,B,TENSOR_EVAL,xe,dx[0][0][0]);CHKERRQ(ierr);    ierr = TensorContract(op->Tensor3,B,D,B,TENSOR_EVAL,xe,dx[1][0][0]);CHKERRQ(ierr);    ierr = TensorContract(op->Tensor3,B,B,D,TENSOR_EVAL,xe,dx[2][0][0]);CHKERRQ(ierr);    ierr = PointwiseJacobianInvert(ne,Q*Q*Q,w3,dx,wdxdet);CHKERRQ(ierr);    for (PetscInt i=0; i<Q3; i++) {      for (PetscInt l=0; l<ne; l++) {        PetscReal xx[] = {xq[0][i][l],xq[1][i][l],xq[2][i][l]};        PetscScalar fql[op->dof];        ierr = (op->PointwiseForcing)(op,xx,L,fql);CHKERRQ(ierr);        for (PetscInt d=0; d<op->dof; d++) fq[d][i][l] = wdxdet[i][l] * fql[d];      }    }    ierr = PetscMemzero(fe,sizeof fe);CHKERRQ(ierr);    ierr = TensorContract(op->TensorDOF,B,B,B,TENSOR_TRANSPOSE,fq[0][0],fe);CHKERRQ(ierr);    ierr = DMFESetElements(dm,f,e,ne,ADD_VALUES,DOMAIN_INTERIOR,fe);CHKERRQ(ierr);  }  ierr = VecRestoreArrayRead(X,&x);CHKERRQ(ierr);  ierr = VecRestoreArray(Floc,&f);CHKERRQ(ierr);  ierr = VecZeroEntries(F);CHKERRQ(ierr);  ierr = DMLocalToGlobalBegin(dm,Floc,ADD_VALUES,F);CHKERRQ(ierr);  ierr = DMLocalToGlobalEnd(dm,Floc,ADD_VALUES,F);CHKERRQ(ierr);  ierr = DMRestoreLocalVector(dm,&Floc);CHKERRQ(ierr);  ierr = PetscLogEventEnd(OP_Forcing,dm,F,0,0);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:shamouda,项目名称:ocr-apps,代码行数:58,


示例13: ini_bou

PetscErrorCode ini_bou(Vec X,AppCtx* user){  PetscErrorCode ierr;  DM             cda;  DMDACoor2d     **coors;  PetscScalar    **p;  Vec            gc;  PetscInt       i,j;  PetscInt       xs,ys,xm,ym,M,N;  PetscScalar    xi,yi;  PetscScalar    sigmax=user->sigmax,sigmay=user->sigmay;  PetscScalar    rho   =user->rho;  PetscScalar    mux   =user->mux,muy=user->muy;  PetscMPIInt    rank;  PetscScalar    sum;  PetscFunctionBeginUser;  ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr);  ierr = DMDAGetInfo(user->da,NULL,&M,&N,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);  user->dx = (user->xmax - user->xmin)/(M-1); user->dy = (user->ymax - user->ymin)/(N-1);  ierr = DMGetCoordinateDM(user->da,&cda);CHKERRQ(ierr);  ierr = DMGetCoordinates(user->da,&gc);CHKERRQ(ierr);  ierr = DMDAVecGetArray(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMDAVecGetArray(user->da,X,&p);CHKERRQ(ierr);  ierr = DMDAGetCorners(cda,&xs,&ys,0,&xm,&ym,0);CHKERRQ(ierr);  /* mux and muy need to be grid points in the x and y-direction otherwise the solution goes unstable     muy is set by choosing the y domain, no. of grid points along y-direction so that muy is a grid point     in the y-direction. We only modify mux here  */  mux = user->mux = coors[0][M/2+10].x; /* For -pi < x < pi, this should be some angle between 0 and pi/2 */  if (user->nonoiseinitial) {    for (i=xs; i < xs+xm; i++) {      for (j=ys; j < ys+ym; j++) {        xi = coors[j][i].x; yi = coors[j][i].y;        if ((xi == mux) && (yi == muy)) {          p[j][i] = 1.0;        }      }    }  } else {    /* Change PM_min accordingly */    user->PM_min = user->Pmax*sin(mux);    for (i=xs; i < xs+xm; i++) {      for (j=ys; j < ys+ym; j++) {        xi = coors[j][i].x; yi = coors[j][i].y;        p[j][i] = (0.5/(PETSC_PI*sigmax*sigmay*PetscSqrtScalar(1.0-rho*rho)))*PetscExpScalar(-0.5/(1-rho*rho)*(PetscPowScalar((xi-mux)/sigmax,2) + PetscPowScalar((yi-muy)/sigmay,2) - 2*rho*(xi-mux)*(yi-muy)/(sigmax*sigmay)));      }    }  }  ierr = DMDAVecRestoreArray(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(user->da,X,&p);CHKERRQ(ierr);  ierr = VecSum(X,&sum);CHKERRQ(ierr);  ierr = VecScale(X,1.0/sum);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:feelpp,项目名称:debian-petsc,代码行数:56,


示例14: DAApplyTrilinearMapping

PetscErrorCode DAApplyTrilinearMapping(DM da){  PetscErrorCode ierr;  PetscInt       i,j,k;  PetscInt       sx,nx,sy,ny,sz,nz;  Vec            Gcoords;  DMDACoor3d     ***XX;  PetscScalar    xx,yy,zz;  DM             cda;  PetscFunctionBeginUser;  ierr = DMDASetUniformCoordinates(da, -1.0,1.0, -1.0,1.0, -1.0,1.0 );CHKERRQ(ierr);  ierr = DMGetCoordinateDM(da,&cda);CHKERRQ(ierr);  ierr = DMGetCoordinates(da,&Gcoords);CHKERRQ(ierr);  ierr = DMDAVecGetArray(cda,Gcoords,&XX);CHKERRQ(ierr);  ierr = DMDAGetCorners(da,&sx,&sy,&sz,&nx,&ny,&nz);CHKERRQ(ierr);  for (i=sx; i<sx+nx; i++) {    for (j=sy; j<sy+ny; j++ ) {      for (k=sz; k<sz+nz; k++ ) {        PetscScalar Ni[8];        PetscScalar xi   = XX[k][j][i].x;        PetscScalar eta  = XX[k][j][i].y;        PetscScalar zeta = XX[k][j][i].z;        PetscScalar xn[] = {0.0,2.0,0.2,3.5,   0.0,2.1,0.23,3.125  };        PetscScalar yn[] = {-1.3,0.0,2.0,4.0,  -1.45,-0.1,2.24,3.79  };        PetscScalar zn[] = {0.0,0.3,-0.1,0.123,  0.956,1.32,1.12,0.798  };        PetscInt    p;        Ni[0] = 0.125*(1.0-xi)*(1.0-eta)*(1.0-zeta);        Ni[1] = 0.125*(1.0+xi)*(1.0-eta)*(1.0-zeta);        Ni[2] = 0.125*(1.0-xi)*(1.0+eta)*(1.0-zeta);        Ni[3] = 0.125*(1.0+xi)*(1.0+eta)*(1.0-zeta);        Ni[4] = 0.125*(1.0-xi)*(1.0-eta)*(1.0+zeta);        Ni[5] = 0.125*(1.0+xi)*(1.0-eta)*(1.0+zeta);        Ni[6] = 0.125*(1.0-xi)*(1.0+eta)*(1.0+zeta);        Ni[7] = 0.125*(1.0+xi)*(1.0+eta)*(1.0+zeta);        xx = yy = zz = 0.0;        for (p=0; p<8; p++ ) {          xx += Ni[p]*xn[p];          yy += Ni[p]*yn[p];          zz += Ni[p]*zn[p];        }        XX[k][j][i].x = xx;        XX[k][j][i].y = yy;        XX[k][j][i].z = zz;      }    }  }  ierr = DMDAVecRestoreArray(cda,Gcoords,&XX);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:55,


示例15: IFunction

PetscErrorCode IFunction(TS ts,PetscReal t,Vec X,Vec Xdot,Vec F,void *ctx){  PetscErrorCode ierr;  AppCtx         *user=(AppCtx*)ctx;  DM             cda;  DMDACoor2d     **coors;  PetscScalar    **p,**f,**pdot;  PetscInt       i,j;  PetscInt       xs,ys,xm,ym,M,N;  Vec            localX,gc,localXdot;  PetscScalar    p_adv1,p_adv2,p_diff;  PetscFunctionBeginUser;  ierr = DMDAGetInfo(user->da,NULL,&M,&N,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);  ierr = DMGetCoordinateDM(user->da,&cda);CHKERRQ(ierr);  ierr = DMDAGetCorners(cda,&xs,&ys,0,&xm,&ym,0);CHKERRQ(ierr);  ierr = DMGetLocalVector(user->da,&localX);CHKERRQ(ierr);  ierr = DMGetLocalVector(user->da,&localXdot);CHKERRQ(ierr);  ierr = DMGlobalToLocalBegin(user->da,X,INSERT_VALUES,localX);CHKERRQ(ierr);  ierr = DMGlobalToLocalEnd(user->da,X,INSERT_VALUES,localX);CHKERRQ(ierr);  ierr = DMGlobalToLocalBegin(user->da,Xdot,INSERT_VALUES,localXdot);CHKERRQ(ierr);  ierr = DMGlobalToLocalEnd(user->da,Xdot,INSERT_VALUES,localXdot);CHKERRQ(ierr);  ierr = DMGetCoordinatesLocal(user->da,&gc);CHKERRQ(ierr);  ierr = DMDAVecGetArrayRead(cda,gc,&coors);CHKERRQ(ierr);  ierr = DMDAVecGetArrayRead(user->da,localX,&p);CHKERRQ(ierr);  ierr = DMDAVecGetArrayRead(user->da,localXdot,&pdot);CHKERRQ(ierr);  ierr = DMDAVecGetArray(user->da,F,&f);CHKERRQ(ierr);  PetscScalar diffuse1,gamma;  gamma = user->D*user->ws/(2*user->H);  diffuse1 = user->lambda*user->lambda*user->q/(user->lambda*gamma+1)*(1.0 - PetscExpScalar(-t*(gamma+1.0)/user->lambda));  user->disper_coe = user->ws*user->ws/(4*user->H*user->H)*diffuse1;  for (i=xs; i < xs+xm; i++) {    for (j=ys; j < ys+ym; j++) {      ierr = adv1(p,coors[j][i].y,i,j,M,&p_adv1,user);CHKERRQ(ierr);      ierr = adv2(p,coors[j][i].x,coors[j][i].y,i,j,N,&p_adv2,user);CHKERRQ(ierr);      ierr = diffuse(p,i,j,t,&p_diff,user);CHKERRQ(ierr);      f[j][i] = -p_adv1 - p_adv2  + p_diff - pdot[j][i];    }  }  ierr = DMDAVecRestoreArrayRead(user->da,localX,&p);CHKERRQ(ierr);  ierr = DMDAVecRestoreArrayRead(user->da,localX,&pdot);CHKERRQ(ierr);  ierr = DMRestoreLocalVector(user->da,&localX);CHKERRQ(ierr);  ierr = DMRestoreLocalVector(user->da,&localXdot);CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(user->da,F,&f);CHKERRQ(ierr);  ierr = DMDAVecRestoreArrayRead(cda,gc,&coors);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:fengyuqi,项目名称:petsc,代码行数:54,


示例16: DMStagSetUniformCoordinatesExplicit_1d

PETSC_INTERN PetscErrorCode DMStagSetUniformCoordinatesExplicit_1d(DM dm,PetscReal xmin,PetscReal xmax){  PetscErrorCode ierr;  DM_Stag        *stagCoord;  DM             dmCoord;  Vec            coordLocal,coord;  PetscReal      h,min;  PetscScalar    **arr;  PetscInt       ind,start,n,nExtra,s;  PetscInt       ileft,ielement;  PetscFunctionBegin;  ierr = DMGetCoordinateDM(dm, &dmCoord);CHKERRQ(ierr);  stagCoord = (DM_Stag*) dmCoord->data;  for (s=0; s<2; ++s) {    if (stagCoord->dof[s] !=0 && stagCoord->dof[s] != 1) SETERRQ2(PetscObjectComm((PetscObject)dm),PETSC_ERR_PLIB,"Coordinate DM in 1 dimensions must have 0 or 1 dof on each stratum, but stratum %d has %d dof",s,stagCoord->dof[s]);  }  ierr = DMGetLocalVector(dmCoord,&coordLocal);CHKERRQ(ierr);  ierr = DMStagVecGetArrayDOF(dmCoord,coordLocal,&arr);CHKERRQ(ierr);  if (stagCoord->dof[0]) {    ierr = DMStagGetLocationSlot(dmCoord,DMSTAG_LEFT,0,&ileft);CHKERRQ(ierr);  }  if (stagCoord->dof[1]) {    ierr = DMStagGetLocationSlot(dmCoord,DMSTAG_ELEMENT,0,&ielement);CHKERRQ(ierr);  }  ierr = DMStagGetCorners(dmCoord,&start,NULL,NULL,&n,NULL,NULL,&nExtra,NULL,NULL);CHKERRQ(ierr);  min = xmin;  h = (xmax-xmin)/stagCoord->N[0];  for(ind=start; ind<start + n + nExtra; ++ind) {    if (stagCoord->dof[0]) {      const PetscReal off = 0.0;        arr[ind][ileft] = min + ((PetscReal)ind + off) * h;    }    if (stagCoord->dof[1]) {      const PetscReal off = 0.5;        arr[ind][ielement] = min + ((PetscReal)ind + off) * h;    }  }  ierr = DMStagVecRestoreArrayDOF(dmCoord,coordLocal,&arr);CHKERRQ(ierr);  ierr = DMCreateGlobalVector(dmCoord,&coord);CHKERRQ(ierr);  ierr = DMLocalToGlobalBegin(dmCoord,coordLocal,INSERT_VALUES,coord);CHKERRQ(ierr);  ierr = DMLocalToGlobalEnd(dmCoord,coordLocal,INSERT_VALUES,coord);CHKERRQ(ierr);  ierr = DMSetCoordinates(dm,coord);CHKERRQ(ierr);  ierr = PetscLogObjectParent((PetscObject)dm,(PetscObject)coord);CHKERRQ(ierr);  ierr = VecDestroy(&coord);CHKERRQ(ierr);  ierr = DMRestoreLocalVector(dmCoord,&coordLocal);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:51,


示例17: IJacobian

PetscErrorCode IJacobian(TS ts,PetscReal t,Vec X,Vec Xdot,PetscReal a,Mat *J,Mat *Jpre,MatStructure *flg,void *ctx){  PetscErrorCode ierr;  AppCtx         *user=(AppCtx*)ctx;  DM             cda;  DMDACoor2d     **coors;  PetscInt       i,j;  PetscInt       xs,ys,xm,ym,M,N;  Vec            gc;  PetscScalar    val[5],xi,yi;  MatStencil     row,col[5];  PetscScalar    c1,c3,c5,c1pos,c1neg,c3pos,c3neg;  PetscFunctionBeginUser;  *flg = SAME_NONZERO_PATTERN;  ierr = DMDAGetInfo(user->da,NULL,&M,&N,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);  ierr = DMGetCoordinateDM(user->da,&cda);CHKERRQ(ierr);  ierr = DMDAGetCorners(cda,&xs,&ys,0,&xm,&ym,0);CHKERRQ(ierr);  ierr = DMGetCoordinatesLocal(user->da,&gc);CHKERRQ(ierr);  ierr = DMDAVecGetArray(cda,gc,&coors);CHKERRQ(ierr);  for (i=xs; i < xs+xm; i++) {    for (j=ys; j < ys+ym; j++) {      PetscInt nc = 0;      xi = coors[j][i].x; yi = coors[j][i].y;      row.i = i; row.j = j;      c1        = (yi-user->ws)/user->dx;      c1pos    = PetscMax(c1,0);      c1neg    = PetscMin(c1,0);      c3        = (user->ws/(2.0*user->H))*(user->PM_min - user->Pmax*sin(xi))/user->dy;      c3pos    = PetscMax(c3,0);      c3neg    = PetscMin(c3,0);      c5        = (PetscPowScalar((user->lambda*user->ws)/(2*user->H),2)*user->q*(1.0-PetscExpScalar(-t/user->lambda)))/(user->dy*user->dy);      col[nc].i = i-1; col[nc].j = j;   val[nc++] = c1pos;      col[nc].i = i+1; col[nc].j = j;   val[nc++] = -c1neg;      col[nc].i = i;   col[nc].j = j-1; val[nc++] = c3pos + c5;      col[nc].i = i;   col[nc].j = j+1; val[nc++] = -c3neg + c5;      col[nc].i = i;   col[nc].j = j;   val[nc++] = -c1pos + c1neg -c3pos + c3neg -2*c5 -a;      ierr = MatSetValuesStencil(*Jpre,1,&row,nc,col,val,INSERT_VALUES);CHKERRQ(ierr);    }  }  ierr = DMDAVecRestoreArray(cda,gc,&coors);CHKERRQ(ierr);  ierr =  MatAssemblyBegin(*Jpre,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);  ierr = MatAssemblyEnd(*Jpre,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);  if (*J != *Jpre) {    ierr = MatAssemblyBegin(*J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);    ierr = MatAssemblyEnd(*J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);  }  PetscFunctionReturn(0);}
开发者ID:feelpp,项目名称:debian-petsc,代码行数:51,


示例18: coordinate

/*@C   DMDAGetLogicalCoordinate - Returns a the i,j,k logical coordinate for the closest mesh point to a x,y,z point in the coordinates of the DMDA   Collective on DMDA   Input Parameters:+  da - the distributed array-  x,y,z - the physical coordinates   Output Parameters:+   II, JJ, KK - the logical coordinate (-1 on processes that do not contain that point)-   X, Y, Z, - (optional) the coordinates of the located grid point   Level: advanced   Notes:   All processors that share the DMDA must call this with the same coordinate value.keywords: distributed array, get, processor subset@*/PetscErrorCode  DMDAGetLogicalCoordinate(DM da,PetscScalar x,PetscScalar y,PetscScalar z,PetscInt *II,PetscInt *JJ,PetscInt *KK,PetscScalar *X,PetscScalar *Y,PetscScalar *Z){  DM_DA          *dd = (DM_DA*)da->data;  PetscErrorCode ierr;  Vec            coors;  DM             dacoors;  DMDACoor2d     **c;  PetscInt       i,j,xs,xm,ys,ym;  PetscReal      d,D = PETSC_MAX_REAL,Dv;  PetscMPIInt    rank,root;  PetscFunctionBegin;  if (dd->dim == 1) SETERRQ(PetscObjectComm((PetscObject)da),PETSC_ERR_SUP,"Cannot get point from 1d DMDA");  if (dd->dim == 3) SETERRQ(PetscObjectComm((PetscObject)da),PETSC_ERR_SUP,"Cannot get point from 3d DMDA");  *II = -1;  *JJ = -1;  ierr = DMGetCoordinateDM(da,&dacoors);CHKERRQ(ierr);  ierr = DMDAGetCorners(dacoors,&xs,&ys,NULL,&xm,&ym,NULL);CHKERRQ(ierr);  ierr = DMGetCoordinates(da,&coors);CHKERRQ(ierr);  ierr = DMDAVecGetArray(dacoors,coors,&c);CHKERRQ(ierr);  for (j=ys; j<ys+ym; j++) {    for (i=xs; i<xs+xm; i++) {      d = PetscSqrtReal(PetscRealPart( (c[j][i].x - x)*(c[j][i].x - x) + (c[j][i].y - y)*(c[j][i].y - y) ));      if (d < D) {        D   = d;        *II = i;        *JJ = j;      }    }  }  ierr = MPI_Allreduce(&D,&Dv,1,MPIU_REAL,MPI_MIN,PetscObjectComm((PetscObject)da));CHKERRQ(ierr);  if (D != Dv) {    *II  = -1;    *JJ  = -1;    rank = 0;  } else {    *X = c[*JJ][*II].x;    *Y = c[*JJ][*II].y;    ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)da),&rank);CHKERRQ(ierr);    rank++;  }  ierr = MPI_Allreduce(&rank,&root,1,MPI_INT,MPI_SUM,PetscObjectComm((PetscObject)da));CHKERRQ(ierr);  root--;  ierr = MPI_Bcast(X,1,MPIU_SCALAR,root,PetscObjectComm((PetscObject)da));CHKERRQ(ierr);  ierr = MPI_Bcast(Y,1,MPIU_SCALAR,root,PetscObjectComm((PetscObject)da));CHKERRQ(ierr);  ierr = DMDAVecRestoreArray(dacoors,coors,&c);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:feelpp,项目名称:debian-petsc,代码行数:70,


示例19: FormFunctionLocalMMS2

/* FormFunctionLocalMMS2 - Evaluates nonlinear function, F(x) on local process patch */PetscErrorCode FormFunctionLocalMMS2(DMDALocalInfo *info,PetscScalar **vx,PetscScalar **f,AppCtx *user){  PetscErrorCode ierr;  PetscInt       i,j;  PetscReal      lambda,hx,hy,hxdhy,hydhx;  PetscScalar    u,ue,uw,un,us,uxx,uyy;  PetscReal      x,y;  DM             coordDA;  Vec            coordinates;  DMDACoor2d   **coords;  PetscFunctionBeginUser;  lambda = user->param;  hx     = 1.0/(PetscReal)(info->mx-1);  hy     = 1.0/(PetscReal)(info->my-1);  hxdhy  = hx/hy;  hydhx  = hy/hx;  /* Extract coordinates */  ierr = DMGetCoordinateDM(info->da, &coordDA);CHKERRQ(ierr);  ierr = DMGetCoordinates(info->da, &coordinates);CHKERRQ(ierr);  ierr = DMDAVecGetArray(coordDA, coordinates, &coords);CHKERRQ(ierr);  /* Compute function over the locally owned part of the grid */  for (j=info->ys; j<info->ys+info->ym; j++) {    for (i=info->xs; i<info->xs+info->xm; i++) {      if (i == 0 || j == 0 || i == info->mx-1 || j == info->my-1) {        f[j][i] = 2.0*(hydhx+hxdhy)*vx[j][i];      } else {        x  = PetscRealPart(coords[j][i].x);        y  = PetscRealPart(coords[j][i].y);        u  = vx[j][i];        uw = vx[j][i-1];        ue = vx[j][i+1];        un = vx[j-1][i];        us = vx[j+1][i];        if (i-1 == 0) uw = 0.;        if (i+1 == info->mx-1) ue = 0.;        if (j-1 == 0) un = 0.;        if (j+1 == info->my-1) us = 0.;        uxx     = (2.0*u - uw - ue)*hydhx;        uyy     = (2.0*u - un - us)*hxdhy;        f[j][i] = uxx + uyy - hx*hy*(lambda*PetscExpScalar(u) + 2*PetscSqr(PETSC_PI)*PetscSinReal(PETSC_PI*x)*PetscSinReal(PETSC_PI*y) - lambda*exp(PetscSinReal(PETSC_PI*x)*PetscSinReal(PETSC_PI*y)));      }    }  }  ierr = DMDAVecRestoreArray(coordDA, coordinates, &coords);CHKERRQ(ierr);  ierr = PetscLogFlops(11.0*info->ym*info->xm);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:pombredanne,项目名称:petsc,代码行数:51,


示例20: ini_bou

PetscErrorCode ini_bou(Vec X,AppCtx* user){    PetscErrorCode ierr;    DM             cda;    DMDACoor2d     **coors;    PetscScalar    **p;    Vec            gc;    PetscInt       i,j;    PetscInt       xs,ys,xm,ym,M,N;    PetscScalar    xi,yi;    PetscScalar    sigmax=user->sigmax,sigmay=user->sigmay;    PetscScalar    rho   =user->rho;    PetscScalar    mux   =user->mux,muy=user->muy;    PetscMPIInt    rank;    PetscFunctionBeginUser;    ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);    CHKERRQ(ierr);    ierr = DMDAGetInfo(user->da,NULL,&M,&N,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);    user->dx = (user->xmax - user->xmin)/(M-1);    user->dy = (user->ymax - user->ymin)/(N-1);    ierr = DMGetCoordinateDM(user->da,&cda);    CHKERRQ(ierr);    ierr = DMGetCoordinates(user->da,&gc);    CHKERRQ(ierr);    ierr = DMDAVecGetArray(cda,gc,&coors);    CHKERRQ(ierr);    ierr = DMDAVecGetArray(user->da,X,&p);    CHKERRQ(ierr);    ierr = DMDAGetCorners(cda,&xs,&ys,0,&xm,&ym,0);    CHKERRQ(ierr);    for (i=xs; i < xs+xm; i++) {        for (j=ys; j < ys+ym; j++) {            xi = coors[j][i].x;            yi = coors[j][i].y;            if (i == 0 || j == 0 || i == M-1 || j == N-1) p[j][i] = 0.0;            else p[j][i] = (0.5/(PETSC_PI*sigmax*sigmay*PetscSqrtScalar(1.0-rho*rho)))*PetscExpScalar(-0.5/(1-rho*rho)*(PetscPowScalar((xi-mux)/sigmax,2) + PetscPowScalar((yi-muy)/sigmay,2) - 2*rho*(xi-mux)*(yi-muy)/(sigmax*sigmay)));        }    }    /*  p[N/2+N%2][M/2+M%2] = 1/(user->dx*user->dy); */    ierr = DMDAVecRestoreArray(cda,gc,&coors);    CHKERRQ(ierr);    ierr = DMDAVecRestoreArray(user->da,X,&p);    CHKERRQ(ierr);    PetscFunctionReturn(0);}
开发者ID:ZJLi2013,项目名称:petsc,代码行数:47,



注:本文中的DMGetCoordinateDM函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ DMGetLocalVector函数代码示例
C++ DMESG函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。