Thanks Matt. To clarify, were you referring to the following section in 
DMPlexCreateBoxMesh_Tensor_SFC_Periodicity_Private()?

 

  PetscCall(DMPlexSetIsoperiodicFaceSF(dm, sfper));

 

  PetscScalar t[4][4] = {{0}};

  t[0][0]             = 1;

  t[1][1]             = 1;

  t[2][2]             = 1;

  t[3][3]             = 1;

  for (PetscInt i = 0; i < dim; i++)

    if (periodicity[i] == DM_BOUNDARY_PERIODIC) t[i][3] = upper[i] - lower[i];

  PetscCall(DMPlexSetIsoperiodicFaceTransform(dm, &t[0][0]));

 

In my understanding, DMPlexSetIsoperiodicFaceSF() defines the points where the 
constrains exists. The constrains are specified in t matrix and set by calling 
DMPlexSetIsoperiodicFaceTransform(). Is this correct?

 

Does constraints set by this also apply to non-displacement DoFs? Our 
application is of phase-field fracture in elasticity so we have a scalar DoF on 
each vertices in addition to displacement field. In other words, the section 
has two fields, where displacement field has 2 DoFs and phase-field has 1 DoF.

 

Thanks,

Hongrui

 

From: Matthew Knepley <knep...@gmail.com> 
Sent: Thursday, July 6, 2023 3:34 PM
To: Hongrui Yu <yuhong...@utexas.edu>
Cc: petsc-users@mcs.anl.gov
Subject: Re: [petsc-users] Applying Multi-Point-Constraints with SNES

 

On Thu, Jul 6, 2023 at 3:40 PM Hongrui Yu <yuhong...@utexas.edu 
<mailto:yuhong...@utexas.edu> > wrote:

Hello PETSc users,

 

In our Finite Element application we would like to apply 
Multi-Point-Constraints to some vertices. In these Multi-Point-Constraints we 
force certain DoF in the following nodes to be the same as those in controlling 
nodes. We use DMPlex to store our mesh. I’m wondering what would be a good way 
to implement this together with SNES? Or is there an example that does similar 
thing?

 

There is a simple thing that Jed implemented call "isoperiodicity" in 
plexsfc.c, and you can see

him using it to define a periodic box in

 

  DMPlexCreateBoxMesh_Tensor_SFC_Periodicity_Private()

 

You could use exactly this to define an affine relation between two dofs.

 

Currently both right-hand-side and solution vectors in out application are 
created using DMCreateGlobalVec(). And we tried (unsuccessfully) to modify 
solution within FormRHS or FormJacobian routines but the solution vector seems 
to be read-only (for good reason). Is there a way to tell SNES about these 
constraints? Or perhaps one can somehow create a vector with only a subset of 
the DoFs (the actual “unknowns”)?

 

Doing it as above will eliminate the constrained unknowns from the SNES 
automatically, so this will not be a concern.

 

  Thanks,

 

     Matt

 

Thank you in advance for any help or advice!

 

Hongrui

 




 

-- 

What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

 

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/> 

Reply via email to