[petsc-users] Periodic BC with AMR
Mark Adams
mfadams at lbl.gov
Wed Jun 9 14:23:14 CDT 2021
Matt is the expert (and he is busy today) but I use:
ierr = DMLocalizeCoordinates(dm);CHKERRQ(ierr); /* needed for periodic */
On Wed, Jun 9, 2021 at 1:26 AM Daniil Svyatsky <dasvyat at gmail.com> wrote:
>
> Dear petsc developers and users,
>
> I'm trying to set up a periodic BC on a mesh obtained by AMR technique.
> I have a problem accessing the real coordinates of nodes on the periodic
> boundary.
>
> First, I generated a box mesh and apply periodic BC:
>
> bc_cond[0] = DM_BOUNDARY_PERIODIC;
>
> bc_cond[1] = DM_BOUNDARY_PERIODIC;
>
> bc_cond[2] = DM_BOUNDARY_PERIODIC;
>
>
> DMPlexCreateBoxMesh(PETSC_COMM_WORLD, dim, PETSC_FALSE,
>
> num_faces, lower_cor, top_cor, bc_cond,
> interpolate, &(dm));
>
> DM baseParallel;
>
> PetscPartitioner part;
>
>
> ierr = DMPlexGetPartitioner(dm,&part);CHKERRQ(ierr);
>
> ierr = PetscPartitionerSetFromOptions(part);CHKERRQ(ierr);
>
> ierr = DMPlexDistribute(dm,0,NULL,&baseParallel);CHKERRQ(ierr);
>
> if (baseParallel) {
>
> ierr = DMDestroy(&(dm));CHKERRQ(ierr);
>
> dm = baseParallel;
>
> }
>
>
>
> After this step I can access coordinates of boundary nodes correctly.
> Then I applied AMR on this mesh:
>
> DM preForest, postForest;
>
> DMLabel adaptLabel = NULL;
>
>
> ierr = DMCreate(PETSC_COMM_SELF, &preForest);CHKERRQ(ierr);
>
> ierr = DMSetType(preForest,(dim == 2) ? DMP4EST :
> DMP8EST);CHKERRQ(ierr);
>
> ierr = DMForestSetBaseDM(preForest,env->dstruct->dm);CHKERRQ(ierr);
>
> ierr = DMForestSetMinimumRefinement(preForest,0);CHKERRQ(ierr);
>
> ierr = DMForestSetInitialRefinement(preForest,0);CHKERRQ(ierr);
>
> ierr = DMSetFromOptions(preForest);CHKERRQ(ierr);
>
> ierr = DMSetUp(preForest);CHKERRQ(ierr);
>
>
> ierr = CreateAdaptivityLabel(env,preForest,&adaptLabel);CHKERRQ(ierr);
>
> ierr = DMForestTemplate(preForest,PETSC_COMM_SELF,
> &postForest);CHKERRQ(ierr);
>
> ierr =
> DMForestSetAdaptivityLabel(postForest,adaptLabel);CHKERRQ(ierr);
>
> ierr = DMLabelDestroy(&adaptLabel);CHKERRQ(ierr);
>
> ierr = DMSetUp(postForest);CHKERRQ(ierr);
>
>
> DM dmConv;
>
> ierr = DMConvert(postForest,DMPLEX,&dmConv);CHKERRQ(ierr);
>
>
>
> if (dmConv){
>
> DMDestroy(&dm);
>
> dm = dmConv;
>
> }
>
> In my example, boundary cells were also refined. After AMR I have a
> problem accessing the coordinates of nodes.
> To access node coordinates I do the following:
>
> DMGetCoordinatesLocal(dm, &coordinates);
>
> DMGetCoordinateDM(dm, &cdm);
>
> DMGetSection(cdm, &cs);
>
>
> for (cell = cStart; cell < cEnd; ++cell) {
>
> PetscInt numFaces;
>
> const PetscInt *faces;
>
> ierr = DMPlexGetConeSize(dm, cell, &numFaces);
>
> ierr = DMPlexGetCone(dm, cell, &faces);
>
> for (int f = 0; f<numFaces; f++){
>
> temp_f = NULL;
>
> DMPlexVecGetClosure(dm, cs, coordinates, faces[f], &fsize, &temp_f);
>
> for (p=0; p<fsize;p+=dim){
>
> DMLocalizeCoordinate(dm, temp_f+p, PETSC_FALSE, coord_p)
>
> }
>
> }
>
> }
>
>
> coord_p has wrong coordinates either I used PETSC_TRUE or PETSC_FALSE
> in DMLocalizeCoordinate.
>
> What am I doing wrong? I'm using petsc-3.14.1 version.
> Thank you for your help in advance.
>
> Best regards,
> Daniil Svyatsky.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210609/992ff328/attachment.html>
More information about the petsc-users
mailing list