3.1.9.32. ASDAbsorbingBoundary Element (2D and 3D)
- element ASDAbsorbingBoundary2D $tag $n1 $n2 $n3 $n4 $G $v $rho $thickness $btype <-fx $tsxTag> <-fy $tsyTag>
- element ASDAbsorbingBoundary3D $tag $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $G $v $rho $btype <-fx $tsxTag> <-fy $tsyTag> <-fz $tszTag>
Argument |
Type |
Description |
---|---|---|
$tag |
integer |
unique integer tag identifying element object. |
$n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 |
4 (or 8) integer |
the 4 (or 8) nodes defining the element. |
$G |
float |
the shear modulus. |
$v |
float |
the Poisson’s ratio. |
$rho |
float |
the mass density. |
$thickness |
float |
the thickness in 2D problems. |
$btype |
string |
a string defining the boundary type. See Note 2 |
-fx |
string |
optional flag. if provided, the user should provide the velocity time-series along the X direction. |
$tsxTag |
integer |
optional, mandatory if -fx is provided. the tag of the time-series along the X direction. |
-fy |
string |
optional flag. if provided, the user should provide the velocity time-series along the Y direction. |
$tsyTag |
integer |
optional, mandatory if -fy is provided. the tag of the time-series along the Y direction. |
-fz |
string |
optional flag. if provided, the user should provide the velocity time-series along the Z direction. |
$tszTag |
integer |
optional, mandatory if -fz is provided. the tag of the time-series along the Z direction. |
3.1.9.32.1. Theory
F: The Free-Field element, required to compute the free-field solution in parallel with the main model.
D: The Lysmer-Kuhlemeyer dashpots, required to absorb outgoing waves.
T: The boundary tractions transferred from the Free-Field to the Soil domain, required to impose the free-field solution to the boundaries of the main model.
3.1.9.32.2. Usage Notes
Note 1
The element should have the standard node-numbering to ensure a proper positive jacobian.
Note 2
The behavior of the element changes based on the side of the model it belongs to. The $btype argument defines the boundary type of the element. It is a string made of a combination of characters. Each character describes a side of the model:
B = Bottom
L = Left
R = Right
F = Front (only for 3D problems)
K = Back (only for 3D problems)
Note 3
Warning
The boundary elements should be an extrusion of the sides of the main model along their outward normal vector.
The vertical sides of the main model should have an outward normal vector that points either along the global (positive or negative) X direction or along the global (positive or negative) Y vector.
The bottom side of the main model should have an outward normal vector that points in the negative global Z direction.
In 3D models the sides L (left),R (right),F (front) and K (back) may have some natural distortion due to the topography. This is supported by the boundary element, but when the distortion along the Z direction is too large, the results can slightly deteriorate.
Example
Tcl Code
# ===================================================
# User parameters
# ===================================================
# material parameters
set E 3000000000.0
set poiss 0.3
set rho 2100.0
set thickness 1.0
set G [expr $E/(2.0*(1.0+$poiss))]
# domain size
set Lx 260.0
set Ly 140.0
# mesh size
set hx 10.0
set hy 1.0
# time increment
set dt 0.001
# predominant frequency of the Ricker Wavelet
set freq 10.0
# total duration of the dynamic analysis
set duration 1.0
# builder
model Basic -ndm 2 -ndf 2
# time series
# we want to apply a Ricker Wavelet with predominant frequency = 10 Hz.
# It should be applied as velocity
set pi [expr acos(-1.0)]
set wl [expr sqrt(3.0/2.0)/$pi/$freq*10.0]
set ndiv [expr int($wl/$dt)]
set dt [expr $wl/$ndiv.0]
set ts_vals {}
for {set i 0} {$i < $ndiv} {incr i} {
set ix [expr $i.0*$dt-$wl/2.0]
set iy [expr $ix*exp(-$pi*$pi*$freq*$freq*$ix*$ix)]
lappend ts_vals $iy
}
set tsX 1
timeSeries Path $tsX -dt $dt -values $ts_vals -factor 9.806
# material
set matTag 1
nDMaterial ElasticIsotropic $matTag $E $poiss $rho
# Define nodes on a regular grid with sizes hx-hy.
# For a more clear visualization we set the size of the absorbing elements larger.
# (note: the size of this element does not influence the results. The only constraint is that it
# should have a non-zero size!)
set ndivx [expr int($Lx/$hx) + 2]; # add 2 layers of absorbing elements (left and right)
set ndivy [expr int($Ly/$hy) + 1]; # add 1 layer of absorbing elements (bottom)
set abs_h [expr $hx*2.0]
for {set j 0} {$j <= $ndivy} {incr j} {
if {$j == 0} {set y [expr -$abs_h]} else {set y [expr ($j-1) * $hy]}
for {set i 0} {$i <= [expr $ndivx]} {incr i} {
if {$i == 0} {set x [expr -$abs_h]} elseif {$i == [expr $ndivx]} {set x [expr $Lx+$abs_h]} else {set x [expr ($i-1) * $hx]}
node [expr $j*($ndivx+1)+$i+1] [expr $x-$Lx/2.0] $y
}
}
# Define elements.
# Save absorbing elements tags in a list
set abs_elements {}
for {set j 0} {$j < $ndivy} {incr j} {
# Yflag
if {$j == 0} {set Yflag "B"} else {set Yflag ""}
for {set i 0} {$i < [expr $ndivx]} {incr i} {
# Tags
set Etag [expr $j*($ndivx)+$i+1]
set N1 [expr $j*($ndivx+1)+$i+1]
set N2 [expr $N1+1]
set N4 [expr ($j+1)*($ndivx+1)+$i+1]
set N3 [expr $N4+1]
# Xflag
if {$i == 0} {set Xflag "L"} elseif {$i == [expr $ndivx-1]} {set Xflag "R"} else {set Xflag ""}
set btype "$Xflag$Yflag"
if {$btype != ""} {
# absorbing element
lappend abs_elements $Etag
if {$Yflag != ""} {
# bottom element
element ASDAbsorbingBoundary2D $Etag $N1 $N2 $N3 $N4 $G $poiss $rho $thickness $btype -fx $tsX
} else {
# vertical element
element ASDAbsorbingBoundary2D $Etag $N1 $N2 $N3 $N4 $G $poiss $rho $thickness $btype
}
} else {
# soil element
element quad $Etag $N1 $N2 $N3 $N4 $thickness PlaneStrain $matTag 0.0 0.0 0.0 [expr -9.806*$rho]
}
}
}
# Static analysis (or quasti static)
# The absorbing boundaries now are in STAGE 0, so they act as constraints
constraints Transformation
numberer RCM
system UmfPack
test NormUnbalance 0.0001 10 1
algorithm Newton
integrator LoadControl 1.0
analysis Static
set ok [analyze 1]
if {$ok != 0} {
error "Gravity analysis failed"
}
loadConst -time 0.0
wipeAnalysis
# update absorbing elements to STAGE 1 (absorbing)
setParameter -val 1 -ele {*}$abs_elements stage
# recorders
set soil_base [expr 1*($ndivx+1)+int($ndivx/2)+1]
set soil_top [expr $ndivy*($ndivx+1)+int($ndivx/2)+1]
recorder Node -file "soil_base.txt" -time -node $soil_base -dof 1 accel
recorder Node -file "soil_top.txt" -time -node $soil_top -dof 1 accel
# Dynamic analysis
# The absorbing boundaries now are in STAGE 0, so they act as constraints
constraints Transformation
numberer RCM
system UmfPack
test NormUnbalance 0.0001 10 1
algorithm Newton
integrator TRBDF2
analysis Transient
set nsteps [expr int($duration/$dt)]
set dt [expr $duration/$nsteps.0]
set ok [analyze $nsteps $dt]
if {$ok != 0} {
error "Dynamic analysis failed"
}
Code Developed by: Massimo Petracca at ASDEA Software, Italy.