[cig-commits] commit: Added proper grid-spacing info to user context on all levels
Mercurial
hg at geodynamics.org
Thu May 29 11:26:21 PDT 2008
changeset: 126:b68f2b824135
user: Marc Spiegelman <mspieg at ldeo.columbia.edu>
date: Sun Mar 16 22:44:05 2008 -0400
files: src/SolitaryWave2DSL.c
description:
Added proper grid-spacing info to user context on all levels
M src/SolitaryWave2DSL.c
diff -r 52c28b2751ed -r b68f2b824135 src/SolitaryWave2DSL.c
--- a/src/SolitaryWave2DSL.c Sun Mar 16 14:39:01 2008 -0400
+++ b/src/SolitaryWave2DSL.c Sun Mar 16 22:44:05 2008 -0400
@@ -52,7 +52,7 @@ int main(int argc,char **argv)
DMMG *dmmg; /* multilevel grid structure */
AppCtx userInit, *user; /* user-defined work contexts, userInit is for initializing parameters */
Parameter *param;
- GridInfo grid;
+ GridInfo grid, *gridLevels;
TStepCtx tsCtx;
MPI_Comm comm;
PetscErrorCode ierr;
@@ -104,10 +104,19 @@ int main(int argc,char **argv)
ierr = DASetFieldName(DMMGGetDA(dmmg),0,"C");CHKERRQ(ierr);
ierr = DASetFieldName(DMMGGetDA(dmmg),1,"phi");CHKERRQ(ierr);
- /* store fine grid information calculated from the da ancalculate courant scaled velocity */
+ /* store fine grid information calculated from the da and calculate courant scaled velocity */
ierr = DAGetInfo(DMMGGetDA(dmmg),0,&grid.niFine,&grid.njFine,0,0,0,0,0,PETSC_NULL,PETSC_NULL,PETSC_NULL);CHKERRQ(ierr);
- grid.dx = param->width / (PetscReal) grid.niFine;
- grid.dz = param->height / (PetscReal) grid.njFine;
+ /* set correct grid spacing depending on periodicity of boundary conditions */
+ if ( param->xBoundaryFlag == 0 ) {
+ grid.dx = param->width / (PetscReal) grid.niFine;
+ } else {
+ grid.dx = param->width / (PetscReal) (grid.niFine - 1);
+ }
+ if ( param->zBoundaryFlag == 0 ) {
+ grid.dz = param->height / (PetscReal) grid.njFine;
+ } else {
+ grid.dz = param->height / (PetscReal) (grid.njFine -1);
+ }
tsCtx.W0Scaled = param->W0/grid.dz;
/* create DA for characteristics solve (stencil width =2) */
@@ -118,18 +127,21 @@ int main(int argc,char **argv)
Create user context, set problem data, create vector data structures on all grids
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
ierr = PetscMalloc(param->mgLevels*sizeof(AppCtx),&user);CHKERRQ(ierr);
+ ierr = PetscMalloc(param->mgLevels*sizeof(GridInfo),&gridLevels);CHKERRQ(ierr);
/* just create extra vectors for fineLevel */
i=fineLevel;
ierr = DACreateGlobalVector(grid.daC, &(user[i].Xold));CHKERRQ(ierr);
ierr = VecDuplicate(user[i].Xold,&(user[i].Xstar));CHKERRQ(ierr);
ierr = VecDuplicate(user[i].Xold,&(user[i].Velocity));CHKERRQ(ierr);
ierr = VecDuplicate(dmmg[i]->x, &(user[i].func));CHKERRQ(ierr);
- for (i=0; i< param->mgLevels; i++) {
+ for (i=fineLevel; i>= 0 ; i--) {
user[i].bag = userInit.bag;
- user[i].grid = userInit.grid;
- if ( i > 0 ) {
- user[i].grid.dx = 2*user[i-1].grid.dx;
- user[i].grid.dz = 2*user[i-1].grid.dz;
+ user[i].tsCtx = userInit.tsCtx;
+ ierr = PetscMemcpy(&gridLevels[i],&grid,sizeof(GridInfo));
+ user[i].grid = &gridLevels[i];
+ if ( i < fineLevel ) {
+ user[i].grid->dx = 2*user[i+1].grid->dx;
+ user[i].grid->dz = 2*user[i+1].grid->dz;
}
dmmg[i]->user = &user[i];
}
More information about the cig-commits
mailing list