3.1.6.15. Series3D Material Wrapper

This command is used to construct a Series3D material object. It is a wrapper that imposes an iso-stress condition to an arbitrary number of previously-defined 3D nDMaterial objects

3.1.6.15.1. Theory

This model imposes a minimal kinematic constraint on the sub-materials such that the macro-scopic strain tensor \(\varepsilon_{m}\) (i.e. the strain tensor of the wrapper Series3D material) is equal to the volumetric average of the micro-scopic strain tensors \(\varepsilon_{i}\) (i.e. the strain tensors of each sub-material)

(3.1.6.1)\[\varepsilon_{m} = \frac{1}{V} \int_{V} \varepsilon_{i} \,dV\]

The above equation can be rewritten as a weighted sum

(3.1.6.2)\[\varepsilon_{m} = \sum_{i=1}^{n} \varepsilon_{i}w_{i}\]

where the weight \(w_{i}\) is the volume fraction of the ith sub-material. Imposing the constraint in (3.1.6.2) is equivalent to impose forces on each sub-material proportional to each material’s volume fraction:

(3.1.6.3)\[F = C\begin{bmatrix} w_1 & w_2 & ... & w_n \end{bmatrix}\]

But the force acting on each volume fraction (with its own sub-material) is

(3.1.6.4)\[F_i = V\sigma_iw_i\]

therefore, the following equality can be written

(3.1.6.5)\[F = C\begin{bmatrix} w_1 & w_2 & ... & w_n \end{bmatrix} = V\begin{bmatrix} \sigma_1w_1 & \sigma_2w_2 & ... & \sigma_nw_n \end{bmatrix}\]

which shows that (3.1.6.2) actually imposes an iso-stress condition on each sum-material

(3.1.6.6)\[\frac{C}{V} = \sigma_m = \sigma_1 = \sigma_2 = ... = \sigma_n\]
nDMaterial Series3D $matTag    $tag1 $tag2 ... $tagN   <-weights $w1 $w2 ... $wN> <-maxIter $maxIter> <-relTol $relTol> <-absTol $absTol> <-verbose>

Argument

Type

Description

$matTag

integer

unique tag identifying this series material wrapper

$tag1 $tag2 … $tagN

N integer

unique tags identifying previously defined nD materials

$w1 $w2 … $wN

N float

weight factors, optional. If not defined, they will be assumed all equal to 1

-maxIter

string

string keyword to specify a user-defined maximum number of iterations

$maxIter

integer

maximum number of iterations to impose the iso-stress condition, optional, default = 10

-relTol

string

string keyword to specify a user-defined relative stress tolerance for the iso-stress condition

$relTol

float

relative stress tolerance for the iso-stress condition, optional, default = 1.0e-4

-absTol

string

string keyword to specify a user-defined absolute stress tolerance for the iso-stress condition

$absTol

float

absolute stress tolerance for the iso-stress condition, optional, default = 1.0e-8

-verbose

string

string keyword to activate print of debug information

3.1.6.15.2. Usage Notes

Limitations

  • The only material formulation for the Series3D material object is “ThreeDimensional”.

  • The only material formulation allowed for the sub-material objects is “ThreeDimensional”.

Responses

  • All responses available for the nDMaterial object: stress (or stresses), strain (or strains), tangent (or Tangent), TempAndElong.

  • material $matId … : use the material keyword followed by the 1-based index of the sub-material (and followed by the desired response) to forward the request to the matId sub-material.

  • homogenized … : use the homogenized keyword followed by the desired response to forward the request to all sub-materials, and to compute its weighted average.

Example 1 - Simple Linear Validation

A simple example to validate the Series3D material. First material is twice as stiff as the second one. All weights are assumed equal to 1.
The expected results are:
  • equal stress

  • additive strain

  • strain in the soft material twice as large as the strain in the stiff material

  1. Tcl Code

# the 2D model
wipe
model basic -ndm 2 -ndf 2

# 2 young's moduli
set E1 30000.0
set E2 [expr $E1*0.5]

# 2 elastic materials
nDMaterial ElasticIsotropic 1 $E1 0.2
nDMaterial ElasticIsotropic 2 $E2 0.2

# the Series3D wrapper using all weights = 1
nDMaterial Series3D 3   1 2

# a triangle
node 1 0 0
node 2 1 0
node 3 0 1
nDMaterial PlaneStress 100 3
element tri31 1   1 2 3   1.0 "PlaneStress" 100

# fixity
fix 1   1 1
fix 2   0 1
fix 3   1 0

# a simple ramp
timeSeries Linear 1

# imposed macroscopic strain in XX component
set em 0.01
pattern Plain 1 1 {
  sp 2 1   $em
}

# solve
constraints Transformation
numberer Plain
system FullGeneral
test NormDispIncr 1.0e-6 10 0
algorithm Newton
integrator LoadControl 1.0
analysis Static
analyze 1

# check responses
puts "Checking responses"
set Sm [expr [lindex [eleResponse 1 material 1 stress] 0]]
set S1 [expr [lindex [eleResponse 1 material 1 material 1 stress] 0]]
set S2 [expr [lindex [eleResponse 1 material 1 material 2 stress] 0]]
set SmHom [expr [lindex [eleResponse 1 material 1 homogenized stress] 0]]
puts "Sm = S1 = S2 = SmHom -> [format {%6.3f = %6.3f = %6.3f = %6.3f} $Sm $S1 $S2 $SmHom] (stresses are equal)"
set Em [expr [lindex [eleResponse 1 material 1 strain] 0]]
set E1 [expr [lindex [eleResponse 1 material 1 material 1 strain] 0]]
set E2 [expr [lindex [eleResponse 1 material 1 material 2 strain] 0]]
puts "Em = E1 + E2 -> [format {%6.5f = %6.5f + %6.5f} $Em $E1 $E2] (strains are additive since w1=w2=1)"

Code Developed by: Massimo Petracca at ASDEA Software, Italy.