Hello,
I do a transient dynamic analysis using the series load. The result seem to be wrong. The analysis model uses the Example 1. cantilever 2D. After the gravity analysis, the transient analysis code list as follow:
##########################################
rayleigh 0. 0. 0. [expr 2*0.02/pow([eigen 1],0.5)];
# create the analysis
wipeAnalysis;
constraints Plain;
numberer Plain;
system BandGeneral;
test NormDispIncr 1.0e-8 100;
algorithm Newton;
integrator Newmark 0.5 0.25 ;
analysis Transient;
# create load series
set loadlist "0.1 1.0";
set DtAnalysis [expr 0.02]; # time-step Dt
set Nstep [llength $loadlist];
pattern Plain 100 "Series -dt $DtAnalysis -values {$loadlist} -factor 100." {
load 2 1.0 0. 0.;
}
analyze $Nstep $DtAnalysis;
puts "Done!"
#############################################
The displacement result is :
0.02 0 -5.67779e-008 0
0.04 0 -5.67779e-008 0
Notice: -5.67779e-008 is the result of the gravity analysis. The result indicates the series loading does not work even if the factor is large.
When i change the loadlist to "0.1 1.0 2.0"(case 1), the displacement result is:
0.02 0.00191981 -5.67779e-008 -6.666e-006
0.04 0.00764544 -5.67779e-008 -2.65467e-005
0.06 0.0151651 -5.67779e-008 -5.26565e-005
The series loading works.
When i change the loadlist to "0.1 1.0 2.0 2.0"(case 2), the displacement result is:
0.02 0.00191981 -5.67779e-008 -6.666e-006
0.04 0.0114851 -5.67779e-008 -3.98787e-005
0.06 0.030456 -5.67779e-008 -0.00010575
0.08 0.0527827 -5.67779e-008 -0.000183273
As we know, the displacement response should be same between case 1 and case 2 at 0.04s and 0.06s. So, the result is not right.
I do not know the reason of resulting in this odd result. Does anybody know this?
The problem during dynamic history analysis
Moderators: silvia, selimgunay, Moderators
the problem is again roundofff. computers don't work in base 10 and therefore they cannot exactly store certain numbers; they are close to within macheps but not exact. when adding the numbers errors are introduced. the soln is to change DtAnalysis just before the analyze command to something slightly smaller than what you want. if you go larger the last value is ignored.
also you need to change the start of the list if you want to hit the 0.1
[code]
set loadlist {0.0 0.1 1.0 2.0};
set DtAnalysis [expr 0.02]; # time-step Dt
set Nstep [llength $loadlist];
pattern Plain 100 "Series -dt $DtAnalysis -values {$loadlist} -factor 100.0" {
load 2 1.0 0. 0.;
}
#NOW change DtAnalysis before the analyze command:
set DtAnalysis [expr $DtAnalysis-0.0000000001]
analyze $Nstep $DtAnalysis
[/code]
ps. you can see what the load value being applied at the node is if you change the script a bit (it is the unbalanced load in the ouput of the print node)
[code]
for {set i 0} {$i < $Nstep} {incr i 1} {
analyze 1 $DtAnalysis;
print node 2
}
[/code]
also you need to change the start of the list if you want to hit the 0.1
[code]
set loadlist {0.0 0.1 1.0 2.0};
set DtAnalysis [expr 0.02]; # time-step Dt
set Nstep [llength $loadlist];
pattern Plain 100 "Series -dt $DtAnalysis -values {$loadlist} -factor 100.0" {
load 2 1.0 0. 0.;
}
#NOW change DtAnalysis before the analyze command:
set DtAnalysis [expr $DtAnalysis-0.0000000001]
analyze $Nstep $DtAnalysis
[/code]
ps. you can see what the load value being applied at the node is if you change the script a bit (it is the unbalanced load in the ouput of the print node)
[code]
for {set i 0} {$i < $Nstep} {incr i 1} {
analyze 1 $DtAnalysis;
print node 2
}
[/code]