[petsc-users] Newton LS - better results on single processor

zakaryah . zakaryah at gmail.com
Thu Nov 9 10:16:22 CST 2017


Thanks Stefano, I will try what you suggest.

​Matt - my DM is a composite between the redundant field (loading
coefficient, which is included in the Newton solve in Riks' method) and the
displacements, which are represented by a 3D DA with 3 dof.  I am using
finite difference.

Probably my problem comes from confusion over how the composite DM is
organized.  I am using FormFunction()​, and within that I call
DMCompositeGetLocalVectors(), DMCompositeScatter(), DMDAVecGetArray(), and
for the Jacobian, DMCompositeGetLocalISs() and MatGetLocalSubmatrix() to
split J into Jbb, Jbh, Jhb, and Jhh, where b is the loading coefficient,
and h is the displacements).  The values of each submatrix are set using
MatSetValuesLocal().

​I'm most suspicious of the part of the Jacobian routine where I calculate
the rows of Jhb, the columns of Jbh, and the corresponding values.  I take
the DA coordinates and ix,iy,iz, then calculate the row of Jhb as
((((iz-info->gzs)*info->gym
+ (iy-info->gys))*info->gxm + (ix-info->gxs))*info->dof+c), where info is
the DA local info and c is the degree of freedom.  The same calculation is
performed for the column of Jbh.  I suspect that the indexing of the DA
vector is not so simple, but I don't know for a fact that I'm doing this
incorrectly nor how to do this properly.

​Thanks for all the help!​


On Nov 9, 2017 8:44 AM, "Matthew Knepley" <knepley at gmail.com> wrote:

On Thu, Nov 9, 2017 at 12:14 AM, zakaryah . <zakaryah at gmail.com> wrote:

> Well the saga of my problem continues.  As I described previously in an
> epic thread, I'm using the SNES to solve problems involving an elastic
> material on a rectangular grid, subjected to external forces.  In any case,
> I'm occasionally getting poor convergence using Newton's method with line
> search.  In troubleshooting by visualizing the residual, I saw that in data
> sets which had good convergence, the residual was nevertheless
> significantly larger along the boundary between different processors.
> Likewise, in data sets with poor convergence, the residual became very
> large on the boundary between different processors.  The residual is not
> significantly larger on the physical boundary, i.e. the global boundary.
> When I run on a single process, convergence seems to be good on all data
> sets.
>
> Any clues to fix this?
>

It sounds like something is wrong with communication across domains:

 - If this is FEM, it sounds like you are not adding contributions from the
other domain to shared vertices/edges/faces

 - If this is FDM/FVM, maybe the ghosts are not updated

What DM are you using? Are you using the Local assembly functions
(FormFunctionLocal), or just FormFunction()?

  Thanks,

     Matt

-- 
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.caam.rice.edu/~mk51/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20171109/53cf1659/attachment.html>


More information about the petsc-users mailing list