SSPquad Element: Difference between revisions

From OpenSeesWiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 50: Line 50:


----
----
<source lang="tcl">
#########################################################
#                 #
# Coarse-mesh cantilever beam analysis.  The beam is    #
# modeled with only 4 elements and uses anti-symmetry.  #
# #
# ---> Basic units used are kN and meters #
# #
#########################################################
wipe
model BasicBuilder -ndm 2 -ndf 2
# beam dimensions
set L 24.0
set D 3.0
# define number and size of elements
set nElemX 4
set nElemY 1
set nElemT [expr $nElemX*$nElemY]
set sElemX [expr $L/$nElemX]
set sElemY [expr $D/$nElemY]
set nNodeX [expr $nElemX + 1]
set nNodeY [expr $nElemY + 1]
set nNodeT [expr $nNodeX*$nNodeY]
# create the nodes
set nid  1
set count 0.0
for {set j 1} {$j <= $nNodeY} {incr j 1} {
for {set i 1} {$i <= $nNodeX} {incr i 1} {
node $nid [expr 0.0 + $count*$sElemX] [expr ($j-1)*$sElemY]
set nid  [expr $nid + 1]
set count [expr $count + 1]
}
set count 0.0
}
# boundary conditions
fix 1  1 1
fix [expr $nElemY*$nNodeX+1]  1 0
for {set k 2} {$k <= $nNodeX} {incr k 1} {
fix $k 1 0
}
# define material
set matID 1
set E    20000
set nu    0.25
nDMaterial ElasticIsotropic $matID $E $nu
# create elements
set thick 1.0
set b1 0.0
set b2 0.0
set count 1
for {set j 1} {$j <= $nNodeY} {incr j 1} {
for {set i 1} {$i <= $nNodeX} {incr i 1} {
if {($i < $nNodeX) && ($j < $nNodeY)} {
set nI [expr $i+($j-1)*$nNodeX]
set nJ [expr $i+($j-1)*$nNodeX+1]
set nK [expr $i+$j*$nNodeX+1]
set nL [expr $i+$j*$nNodeX]
element SSPquad $count  $nI $nJ $nK $nL $matID "PlaneStrain" $thick $b1 $b2
set count [expr $count+1]
}
}
}
# create recorders
set step 0.1
recorder Node -time -file results/d1p1m1.out -dT $step -nodeRange 1 $nNodeT -dof 1 2 disp
recorder Element -eleRange 1 $nElemT -time -file results/s1p1m1.out  -dT $step  stress
recorder Element -eleRange 1 $nElemT -time -file results/e1p1m1.out  -dT $step  strain
# create loading
set P -300.0;
pattern Plain 3 {Series -time {0 10 15} -values {0 1 1} -factor 1} {
load $nNodeT  0.0 [expr 0.15625*$P]
load $nNodeX  0.0 [expr 0.34375*$P]
load [expr $nNodeX+1]  0.0 [expr -0.15625*$P]
}
# create analysis
integrator LoadControl 0.1
numberer RCM
system SparseGeneral
constraints Transformation
test NormDispIncr 1e-5 40 1
algorithm Newton
analysis Static
analyze 105
wipe
</source>

Revision as of 18:42, 18 November 2011




This command is used to construct a SSPquad element object.

element SSPquad $eleTag $iNode $jNode $kNode $lNode $matTag $type $thick <$b1 $b2>


$eleTag unique integer tag identifying element object
$iNode $jNode $kNode $lNode the four nodes defining the element, input in counterclockwise order
$matTag unique integer tag associated with previously-defined nDMaterial object
$type string to relay material behavior to the element, can be either "PlaneStrain" or "PlaneStress"
$thick thickness of the element in out-of-plane direction
$b1 $b2 constant body forces in x- and y-directions, respectively (optional, default = 0.0)




The SSPquad element is a four-node quadrilateral element using physically stabilized single-point integration (SSP --> Stabilized Single Point). The stabilization incorporates an assumed strain field in which the volumetric dilation and the shear strain associated with the the hourglass modes are zero, resulting in an element which is free from volumetric and shear locking. The elimination of shear locking results in greater coarse mesh accuracy in bending dominated problems, and the elimination of volumetric locking improves accuracy in nearly-incompressible problems. Analysis times are generally faster than corresponding full integration elements.

NOTES:

  1. Valid queries to the SSPquad element when creating an ElementalRecorder object correspond to those for the nDMaterial object assigned to the element (e.g., 'stress', 'strain'). Material response is recorded at the single integration point located in the center of the element.
  2. The SSPquad element was designed with intentions of duplicating the functionality of the Quad Element. If an example is found where the SSPquad element cannot do something that works for the Quad Element, e.g., material updating, please contact the developers listed below so the bug can be fixed.

EXAMPLES:

SSPquad element definition with element tag 1, nodes 1, 2, 3, and 4, material tag 1, plane strain conditions, unit thickness, horizontal body force of zero, and vertical body force of -10.0

element SSPquad 1  1 2 3 4  1 "PlaneStrain" 1.0 0.0 -10.0

Elemental recorders for stress and strain when using the SSPquad element (note the difference from the Quad Element)

recorder Element -eleRange 1 $numElem -time -file stress.out  stress
recorder Element -eleRange 1 $numElem -time -file strain.out  strain



Code Developed by: Chris McGann, Pedro Arduino, & Peter Mackenzie-Helnwein, at the University of Washington


#########################################################
#					                #
# Coarse-mesh cantilever beam analysis.  The beam is    #
# modeled with only 4 elements and uses anti-symmetry.  #
#							#
# ---> Basic units used are kN and meters		#
#							#
#########################################################

wipe

model BasicBuilder -ndm 2 -ndf 2

# beam dimensions
set L 24.0
set D 3.0

# define number and size of elements 
set nElemX 4
set nElemY 1
set nElemT [expr $nElemX*$nElemY]
set sElemX [expr $L/$nElemX]
set sElemY [expr $D/$nElemY]

set nNodeX [expr $nElemX + 1]
set nNodeY [expr $nElemY + 1]
set nNodeT [expr $nNodeX*$nNodeY]

# create the nodes
set nid   1
set count 0.0
for {set j 1} {$j <= $nNodeY} {incr j 1} {
	for {set i 1} {$i <= $nNodeX} {incr i 1} {
		node $nid [expr 0.0 + $count*$sElemX] [expr ($j-1)*$sElemY]
		set nid   [expr $nid + 1]
		set count [expr $count + 1]
	}
	set count 0.0
}

# boundary conditions
fix 1   1 1
fix [expr $nElemY*$nNodeX+1]   1 0
for {set k 2} {$k <= $nNodeX} {incr k 1} {
	fix $k 1 0
}

# define material
set matID 1
set E     20000
set nu    0.25
nDMaterial ElasticIsotropic $matID $E $nu

# create elements
set thick 1.0
set b1 0.0
set b2 0.0
set count 1
for {set j 1} {$j <= $nNodeY} {incr j 1} {
	for {set i 1} {$i <= $nNodeX} {incr i 1} {
		if {($i < $nNodeX) && ($j < $nNodeY)} {
			set nI [expr $i+($j-1)*$nNodeX]
			set nJ [expr $i+($j-1)*$nNodeX+1]
			set nK [expr $i+$j*$nNodeX+1]
			set nL [expr $i+$j*$nNodeX]
			element SSPquad $count  $nI $nJ $nK $nL $matID "PlaneStrain" $thick $b1 $b2

			set count [expr $count+1]
		}
	}
}

# create recorders
set step 0.1

recorder Node -time -file results/d1p1m1.out -dT $step -nodeRange 1 $nNodeT -dof 1 2 disp
recorder Element -eleRange 1 $nElemT -time -file results/s1p1m1.out  -dT $step  stress
recorder Element -eleRange 1 $nElemT -time -file results/e1p1m1.out  -dT $step  strain

# create loading
set P -300.0;

pattern Plain 3 {Series -time {0 10 15} -values {0 1 1} -factor 1} { 
	load $nNodeT   0.0 [expr 0.15625*$P]
	load $nNodeX   0.0 [expr 0.34375*$P]

	load [expr $nNodeX+1]   0.0 [expr -0.15625*$P]
}

# create analysis

integrator LoadControl 0.1
numberer RCM
system SparseGeneral
constraints Transformation
test NormDispIncr 1e-5 40 1
algorithm Newton
analysis Static

analyze 105

wipe