Step 3: Shear Displacement and Tractions#
In Step 3 we replace the Dirichlet (displacement) boundary conditions on the +y and -y boundaries with equivalent Neumann (traction) boundary conditions. In order to maintain symmetry and prevent rigid body motion, we constrain both the x and y displacements on the +x and -x boundaries. The solution matches that in Step 2. Fig. 43 shows the boundary conditions on the domain.
Features
Tetrahedral cells
pylith.meshio.MeshIOPetsc
pylith.problems.TimeDependent
pylith.materials.Elasticity
pylith.materials.IsotropicLinearElasticity
spatialdata.spatialdb.UniformDB
pylith.meshio.OutputSolnBoundary
pylith.meshio.DataWriterHDF5
Static simulation
ILU preconditioner
pylith.bc.DirichletTimeDependent
pylith.bc.NeumannTimeDependent
spatialdata.spatialdb.SimpleDB
spatialdata.spatialdb.ZeroDB
Simulation parameters#
The parameters specific to this example are in step03_sheardisptract.cfg
.
The primary change from Step 2 is the use of Neumann (traction) boundary conditions in pylith.problem.bc
.
The tractions are uniform on each of the two boundaries, so we use a UniformDB
.
In PyLith the direction of the tangential tractions in 2D is defined by the cross product of the +z direction and the outward normal on the boundary.
On the +y boundary a positive tangential traction is in the -x direction, and on the -y boundary a positive tangential traction is in the +x direction.
We want tractions in the opposite direction as shown by the arrows in Fig. 43, so we apply negative tangential tractions.
$ pylith step03_sheardisptract.cfg
# The output should look something like the following.
>> /software/unix/py39-venv/pylith-debug/lib/python3.9/site-packages/pylith/meshio/MeshIOObj.py:44:read
-- meshiopetsc(info)
-- Reading finite-element mesh
>> /src/cig/pylith/libsrc/pylith/meshio/MeshIO.cc:94:void pylith::meshio::MeshIO::read(topology::Mesh *)
-- meshiopetsc(info)
-- Component 'reader': Domain bounding box:
(-6000, 6000)
(-6000, 6000)
(-9000, 0)
# -- many lines omitted --
>> /software/baagaard/py38-venv/pylith-debug/lib/python3.8/site-packages/pylith/problems/TimeDependent.py:139:run
-- timedependent(info)
-- Solving problem.
0 TS dt 0.01 time 0.
0 SNES Function norm 2.854246293576e-02
Linear solve converged due to CONVERGED_ATOL iterations 1
1 SNES Function norm 2.511862662012e-17
Nonlinear solve converged due to CONVERGED_FNORM_ABS iterations 1
1 TS dt 0.01 time 0.01
>> /software/baagaard/py38-venv/pylith-debug/lib/python3.8/site-packages/pylith/problems/Problem.py:201:finalize
-- timedependent(info)
-- Finalizing problem.
The output written to the terminal is nearly identical to what we saw for Step 2. The linear solve did require only 7 iteration to converge.
Visualizing the results#
In Fig. 44 we use ParaView to visualize the x displacement field using the viz/plot_dispwarp.py
Python script.
As in Step 2 we override the default name of the simulation file with the name of the current simulation before running the viz/plot_dispwarp.py
Python script.
>>> SIM = "step03_sheardisptract"