A linear displacement field can be expressed by
\begin{equation} u(x,y,z) = a_1 x + a_2 y + a_3 z, \quad v(x,y,z) = b_1 x + b_2 y + b_3 z, \quad w(x,y,z) = c_1 x + x_2 y + c_3 z \end{equation}where $u,v,w$ are displacments in the directions $x,y,z$
Consider the set of boundary conditions
\begin{equation} u(0,0,0) = 0, \quad v(0,0,0) = 0, \quad w(0,0,0) = 0,\quad u(0,y,0) = 0, \quad w(x,0,0) = 0, \quad w(0,y,0) = 0 \end{equation}The displacement field can now be expressed by the engineering strains as:
\begin{equation} u(x,y,z) = \varepsilon_x x + \gamma_{xz} z, \quad v(x,y,z) = \gamma_{xy} x + \varepsilon_y y + \gamma_{yz} z, \quad w(x,y,z) = \varepsilon_z z \end{equation}Figure-1 illustrates the nodal displacements imposed on a single 8-nodes linear hex elemement for three non-zero strain components.
Figure-1: Nodal displacements of a single 8-nodes linear hex element
A single element has dimensions 1x1x1. The imposed non-zero strain components for the following example are $\varepsilon_x = 0.01$ and $\gamma_{xy}=0.02$
Figure-2: Deformation, scaled x20
An Abaqus python script for the model is listed below:
from abaqus import *
from abaqusConstants import *
import mesh
import regionToolset
def linearDF(modelName, ex=0.0, ey=0.0, ez=0.0, exy=0.0, exz=0.0, eyz=0.0):
mod = mdb.Model(name=modelName, modelType=STANDARD_EXPLICIT)
p = mod.Part(name='Part-1', dimensionality=THREE_D, type=DEFORMABLE_BODY)
n1 = p.Node(coordinates=(0.0, 0.0, 0.0))
n2 = p.Node(coordinates=(1.0, 0.0, 0.0))
n3 = p.Node(coordinates=(1.0, 1.0, 0.0))
n4 = p.Node(coordinates=(0.0, 1.0, 0.0))
n5 = p.Node(coordinates=(0.0, 0.0, 1.0))
n6 = p.Node(coordinates=(1.0, 0.0, 1.0))
n7 = p.Node(coordinates=(1.0, 1.0, 1.0))
n8 = p.Node(coordinates=(0.0, 1.0, 1.0))
p.Element(nodes=(n1,n2,n3,n4,n5,n6,n7,n8), elemShape=HEX8)
elemType1 = mesh.ElemType(elemCode=C3D8R, elemLibrary=STANDARD,
kinematicSplit=AVERAGE_STRAIN, secondOrderAccuracy=OFF,
hourglassControl=DEFAULT, distortionControl=DEFAULT)
elems = (p.elements[0:1],)
p.setElementType(regions=elems, elemTypes=(elemType1, ))
mod.Material(name='Material-1')
mod.materials['Material-1'].Elastic(table=((1000.0, 0.3), ))
mod.HomogeneousSolidSection(name='Section-1', material='Material-1')
region = p.Set(elements=elems, name='Set-1')
p.SectionAssignment(region=region, sectionName='Section-1')
a = mod.rootAssembly
a.DatumCsysByDefault(CARTESIAN)
a.Instance(name='Part-1-1', part=p, dependent=ON)
mod.StaticStep(name='Step-1', previous='Initial')
nodes = a.instances['Part-1-1'].nodes
regions=[regionToolset.Region(nodes=nodes[i:i+1]) for i in range(0,8)]
mod.DisplacementBC(name='BC-1', createStepName='Step-1', region=regions[0], u1=0.0, u2=0.0, u3=0.0)
mod.DisplacementBC(name='BC-2', createStepName='Step-1', region=regions[1], u1=ex, u2=exy, u3=0.0)
mod.DisplacementBC(name='BC-3', createStepName='Step-1', region=regions[2], u1=ex, u2=exy+ey, u3=0.0)
mod.DisplacementBC(name='BC-4', createStepName='Step-1', region=regions[3], u1=0.0, u2=ey, u3=0.0)
mod.DisplacementBC(name='BC-5', createStepName='Step-1', region=regions[4], u1=exz, u2 = eyz, u3=ez)
mod.DisplacementBC(name='BC-6', createStepName='Step-1', region=regions[5], u1=ex+exz, u2=exy+eyz, u3=ez)
mod.DisplacementBC(name='BC-7', createStepName='Step-1', region=regions[6], u1=ex+exz, u2=exy+ey+eyz, u3=ez)
mod.DisplacementBC(name='BC-8', createStepName='Step-1', region=regions[7], u1=exz, u2=ey+eyz, u3=ez)
mdb.Job(model=modelName, name=modelName)
mdb.jobs[modelName].submit(consistencyChecking=OFF)
linearDF(modelName = 'LDF-1', ex=0.01, exy=0.02)