Both essential and natural BCs are added (using PetscDSAddBoundary_UW) in the setup_discretisation method defined in petsc_generic_snes_solvers.pyx. In turn, the setup_discretisation method is called in build (or rebuild_after_mesh_update) function. This build function is then called in the solve functions defined in the generic solvers. However, setup_discretisation is also called in the solve of the child classes (e.g. SNES_AdvectionDiffusion). This results to duplicate addition of the essential and natural BCs.
Both essential and natural BCs are added (using
PetscDSAddBoundary_UW
) in thesetup_discretisation
method defined in petsc_generic_snes_solvers.pyx. In turn, thesetup_discretisation
method is called inbuild
(orrebuild_after_mesh_update
) function. Thisbuild
function is then called in thesolve
functions defined in the generic solvers. However,setup_discretisation
is also called in thesolve
of the child classes (e.g. SNES_AdvectionDiffusion). This results to duplicate addition of the essential and natural BCs.Is this okay?