forked from julesghub/underworld3-old
-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Hi @knepley,
I've noticed that createSubDM() in petsc4py seems to return an incorrect IS. Could it be that I'm misunderstanding how createSubDM() is intended to work? Would you mind taking a look and helping us out? Thank you!
Here is the script:
import underworld3 as uw
import sympy as sp
mesh = uw.meshing.UnstructuredSimplexBox(cellSize=1.)
x, y = mesh.X
u = uw.discretisation.MeshVariable(r"mathbf{u}", mesh, mesh.dim, vtype=uw.VarType.VECTOR, degree=2)
p = uw.discretisation.MeshVariable(r"mathbf{p}", mesh, 1, vtype=uw.VarType.SCALAR, degree=1, continuous=False)
t = uw.discretisation.MeshVariable(r"mathbf{t}", mesh, 1, vtype=uw.VarType.SCALAR, degree=1, continuous=False)
stokes = uw.systems.Stokes(mesh, velocityField=u, pressureField=p)
stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel
stokes.constitutive_model.Parameters.shear_viscosity_0 = 1
stokes.petsc_options["snes_monitor"] = None
stokes.petsc_options["ksp_monitor"] = None
stokes.bodyforce = 1.0e6 * sp.Matrix([0, x])
stokes.add_dirichlet_bc((0.0, 0.0), "Bottom")
stokes.add_dirichlet_bc((0.0, 0.0), "Top")
stokes.add_dirichlet_bc((0.0, sp.oo), "Left")
stokes.add_dirichlet_bc((0.0, sp.oo), "Right")
stokes.solve()Here is the output from the section view:
stokes.dm.getLocalSection().view()PetscSection Object: 1 MPI process
type not yet set
2 fields
field 0 "velocity" with 2 components
Process 0:
( 0) dof 0 offset 0
( 1) dof 0 offset 3
( 2) dof 0 offset 6
( 3) dof 0 offset 9
( 4) dof 2 offset 12 constrained 0 1
( 5) dof 2 offset 14 constrained 0 1
( 6) dof 2 offset 16 constrained 0 1
( 7) dof 2 offset 18 constrained 0 1
( 8) dof 2 offset 20
( 9) dof 2 offset 22 constrained 0 1
( 10) dof 2 offset 24
( 11) dof 2 offset 26
( 12) dof 2 offset 28 constrained 0
( 13) dof 2 offset 30
( 14) dof 2 offset 32 constrained 0
( 15) dof 2 offset 34
( 16) dof 2 offset 36 constrained 0 1
field 1 "pressure" with 1 components
Process 0:
( 0) dof 3 offset 0
( 1) dof 3 offset 3
( 2) dof 3 offset 6
( 3) dof 3 offset 9
( 4) dof 0 offset 14
( 5) dof 0 offset 16
( 6) dof 0 offset 18
( 7) dof 0 offset 20
( 8) dof 0 offset 22
( 9) dof 0 offset 24
( 10) dof 0 offset 26
( 11) dof 0 offset 28
( 12) dof 0 offset 30
( 13) dof 0 offset 32
( 14) dof 0 offset 34
( 15) dof 0 offset 36
( 16) dof 0 offset 38
PetscSectionSym Object: 1 MPI process
type: label
Label 'depth'
Symmetry for stratum value 0 (0 dofs per point): no symmetries
Symmetry for stratum value 1 (0 dofs per point): no symmetries
Symmetry for stratum value 2 (3 dofs per point):
Orientation range: [-3, 3)
Symmetry for stratum value -1 (0 dofs per point): no symmetries
I got following IS for the pressure field, which is correct and I can crosscheck from the petsc section info:
stokes.dm.createSubDM(1)[0].arrayarray([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int32)
For the velocity field, I got this:
stokes.dm.createSubDM(0)[0].arrayarray([12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], dtype=int32)
Isn't the above line supposed to return following IS?
array([12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], dtype=int32)
Metadata
Metadata
Assignees
Labels
No labels