geodynamics / pylith

PyLith is a finite element code for the solution of dynamic and quasi-static tectonic deformation problems.
Other
154 stars 98 forks source link

DMSNESCheckDiscretization() doesn't work for solution with Lagrange multiplier field #92

Closed baagaard-usgs closed 4 years ago

baagaard-usgs commented 5 years ago

PETSc branch: knepley/pylith PyLith branch: baagaard/feature-integrator-interface

DMSNESCheckDiscretization() fails in DMProjectLocal_Generic_Plex() at line 477 when it is trying to get the discretization information for the Lagrange multiplier field.

The prob retrieved using DMGetDS() (which is dm->probs[0]) correctly has

Nf == 2`
prob->disc = { non-NULL pointer (displacement), NULL (Lagrange multiplier)}

It tries to use the NULL value at prob->disc[1] for field 1 (Lagrange multiplier field).

We have a separate DS for the Lagrange multiplier field stored in dm->probs[1].

Test case

cd mmstests/faults
make check
baagaard-usgs commented 5 years ago

Ditto for residual check.

baagaard-usgs commented 5 years ago

This is the error and stack trace I get for the discretization failure.I get the same stack for the residual check, which we would really like. Isn't there someway we can get these checks to work for the case of a Lagrange multiplier field?

[0]PETSC ERROR: Null argument, when expecting valid pointer
[0]PETSC ERROR: Null Object: Parameter # 1
[0]PETSC ERROR: See https://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
[0]PETSC ERROR: Petsc Development GIT revision: v3.11.2-824-g5f7a1134a9  GIT Date: 2019-05-30 08:47:24 -0400
[0]PETSC ERROR: /scratch/brad/build/cig/gcc-7.3.0/pylith-develop/mmstests/faults/.libs/test_faultkin on a arch-gcc-7.3.0_debug named arling by brad Fri May 31 14:45:33 2019
[0]PETSC ERROR: Configure options --PETSC_ARCH=arch-gcc-7.3.0_debug --with-debugging=1 --with-clanguage=c --with-mpi-compilers=1 --with-shared-libraries=1 --with-64-bit-points=1 --with-large-file-io=1 --CC=mpicc --CXX=mpicxx --FC= --F77= LDFLAGS= --with-blaslapack-lib="-L/usr/lib/atlas-base -llapack_atlas -llapack -latlas -lblas" --with-lgrind=0 --with-c2html=0 --with-chaco=1 --download-chaco=1 --download-parmetis=1 --download-metis=1 --with-ml=1 --download-ml=1 --download-superlu --with-hdf5=1 --with-zlib=1 --with-hdf5-dir=/tools/common/hdf5-1.10.2/gcc-7.3.0 --download-triangle --with-fc=0
[0]PETSC ERROR: #1 PetscObjectGetClassId() line 26 in /tools/common/petsc-dev/src/sys/objects/gcookie.c
[0]PETSC ERROR: #2 PetscDSSetUp() line 366 in /tools/common/petsc-dev/src/dm/dt/interface/dtds.c
[0]PETSC ERROR: #3 PetscDSGetComponents() line 2485 in /tools/common/petsc-dev/src/dm/dt/interface/dtds.c
[0]PETSC ERROR: #4 DMProjectLocal_Generic_Plex() line 544 in /tools/common/petsc-dev/src/dm/impls/plex/plexproject.c
[0]PETSC ERROR: #5 DMProjectFunctionLocal_Plex() line 776 in /tools/common/petsc-dev/src/dm/impls/plex/plexproject.c
[0]PETSC ERROR: #6 DMProjectFunctionLocal() line 7532 in /tools/common/petsc-dev/src/dm/interface/dm.c
[0]PETSC ERROR: #7 DMProjectFunction() line 7489 in /tools/common/petsc-dev/src/dm/interface/dm.c
[0]PETSC ERROR: #8 DMSNESCheckDiscretization() line 2744 in /tools/common/petsc-dev/src/snes/utils/dmplexsnes.c
knepley commented 5 years ago

I think you are correct that I might have misinterpreted the error. However, even if we fix this error, the residual will not really be right because it will only calculate over the normals cells by default. You have to force it to loop over hybrid cells right now. We need to think through what we actually want here.

baagaard-usgs commented 4 years ago

We need to check this again and update the error message now that we should have the DS use for faults correct.

baagaard-usgs commented 4 years ago

The stack trace is still the same. I problem appears to be in setting up the solution field and the kernels for the exact solution.

I suspect that the kernels for the exact solution for the Lagrange multiplier subfield are not being set correctly (it is using the DS from the solution field domain mesh in tests/mmstests/faults/TestFaultKin2D_RigidBlockStatic.cc). We should first check that the solution field discretization is correct, in particular the Lagrange multiplier subfield.