Requesting a tracer in OpenSees
Moderators: silvia, selimgunay, Moderators
-
- Posts: 65
- Joined: Mon Oct 04, 2010 6:24 pm
- Location: Colombia
Requesting a tracer in OpenSees
Dear Frank. It would be very useful if a tracer is implemented in OpenSees. By a tracer I am meaning a recorder-like to trace some parameters (i.e. the last committed data, LCD) as the analysis progresses to perform some operations in real time. For example, a few days ago I posted a thread on how to trace the most outer compression fiber of a section to determine its nominal moment. The idea of the script is to trace the strain of such compression fiber till it is less than -0.003. When the analysis reaches this point, it should stop and then be able to get the nominal moment from the output data which in this case is the last committed time (since the analysis is using a displacement control in dof-3 and a reference moment of 1). To fit my needs, I was thinking of building two commands. One of them would be responsible of defining the tracer and the other one to let us get the last committed data at any time. I mean,
To build a node tracer (behaves more like a node recorder):
tracer $tracerTag -type Node <-time> -node $nodeTag -dof ($dof1 $dof2 ...) $respType
To build an element tracer (behaves more like an element recorder):
tracer $tracerTag -type Element <-time> -ele $eleTag $arg1 $arg2 ...
To get the last committed data from $tracerTag:
getLCD $tracerTag
In context,
-----------------------------------
# Basic Units: [Length] = [m], and [Force] = [kN].
wipe
model basic -ndm 2 -ndf 3
node 1 0. 0.
node 2 0. 0.
fix 1 1 1 1
fix 2 0 1 0
uniaxialMaterial Steel01 1420 420000. 200.e6 0.01
uniaxialMaterial Concrete04 2070 -70000. -0.00211 -0.00422 [expr 5.e6*sqrt(70.)]
section Fiber 101 {
patch quad 2070 120 1 0.600 0.600 -0.600 0.600 -0.600 -0.600 0.600 -0.600
layer straight 1420 2 [expr 11*387.e-6] 0.533 0.000 -0.533 0.000
layer straight 1420 9 [expr 2*387.e-6] 0.426 0.000 -0.426 0.000
}
element zeroLengthSection 12 1 2 101
set axialLoad -32000.; # Probable axial load (1.00D + 0.25L).
pattern Plain 10 Linear {load 2 $axialLoad 0. 0.}
constraints Plain
numberer Plain
system BandGeneral
test NormDispIncr 1.e-8 25
set algorithmByDefault ModifiedNewton
algorithm $algorithmByDefault
integrator LoadControl 0.10
analysis Static
analyze 10
loadConst -time 0.
pattern Plain 20 Linear {load 2 0. 0. 1.}
integrator DisplacementControl 2 3 0.0001
tracer 100 -type Element -time -ele 12 section fiber 100. 0. 2070 stressStrain; # 3 columns: time-stress-strain
tracer 101 -type Element -time -ele 12 section fiber -100. 0. 1420 stressStrain; # 3 columns: time-stress-strain
set ok 0
while {$ok==0} {
set ok [analyze 1]
if {$ok != 0} {
algorithm Newton
set ok [analyze 1]
algorithm $algorithmByDefault
}
if {$ok != 0} {
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm $algorithmByDefault
}
if {$ok != 0} {
algorithm Broyden 8
set ok [analyze 1]
algorithm $algorithmByDefault
}
set epsc [lindex [getLCD 100] 2]; # getting concrete strain from third column.
if {$epsc <= -0.003} {
set epss [lindex [getLCD 101] 2]; # getting steel strain from third column.
set Mn [lindex [getLCD 100] 0]; # getting nominal moment from first column.
break
}
}
if {$epsc <= -0.003} {
if {$epss <= 0.002} {
set phi 0.65
} elseif {$epss >= 0.005} {
set phi 0.90
} else {
set phi [expr 83.333*($epss-0.002)+0.65]
}
puts "Ppr = $axialLoad"
puts "epsc = $epsc"
puts "epss = $epss"
puts "Mn = $Mn"
puts "phi = $phi"
puts "phiMn = [expr $phi*$Mn]"
} else {
puts "OpenSees got convergence problems."
}
-----------------------------------
Please, let me know if this concept is relevant enough to meet the future OpenSees goals...
Thank you.
To build a node tracer (behaves more like a node recorder):
tracer $tracerTag -type Node <-time> -node $nodeTag -dof ($dof1 $dof2 ...) $respType
To build an element tracer (behaves more like an element recorder):
tracer $tracerTag -type Element <-time> -ele $eleTag $arg1 $arg2 ...
To get the last committed data from $tracerTag:
getLCD $tracerTag
In context,
-----------------------------------
# Basic Units: [Length] = [m], and [Force] = [kN].
wipe
model basic -ndm 2 -ndf 3
node 1 0. 0.
node 2 0. 0.
fix 1 1 1 1
fix 2 0 1 0
uniaxialMaterial Steel01 1420 420000. 200.e6 0.01
uniaxialMaterial Concrete04 2070 -70000. -0.00211 -0.00422 [expr 5.e6*sqrt(70.)]
section Fiber 101 {
patch quad 2070 120 1 0.600 0.600 -0.600 0.600 -0.600 -0.600 0.600 -0.600
layer straight 1420 2 [expr 11*387.e-6] 0.533 0.000 -0.533 0.000
layer straight 1420 9 [expr 2*387.e-6] 0.426 0.000 -0.426 0.000
}
element zeroLengthSection 12 1 2 101
set axialLoad -32000.; # Probable axial load (1.00D + 0.25L).
pattern Plain 10 Linear {load 2 $axialLoad 0. 0.}
constraints Plain
numberer Plain
system BandGeneral
test NormDispIncr 1.e-8 25
set algorithmByDefault ModifiedNewton
algorithm $algorithmByDefault
integrator LoadControl 0.10
analysis Static
analyze 10
loadConst -time 0.
pattern Plain 20 Linear {load 2 0. 0. 1.}
integrator DisplacementControl 2 3 0.0001
tracer 100 -type Element -time -ele 12 section fiber 100. 0. 2070 stressStrain; # 3 columns: time-stress-strain
tracer 101 -type Element -time -ele 12 section fiber -100. 0. 1420 stressStrain; # 3 columns: time-stress-strain
set ok 0
while {$ok==0} {
set ok [analyze 1]
if {$ok != 0} {
algorithm Newton
set ok [analyze 1]
algorithm $algorithmByDefault
}
if {$ok != 0} {
algorithm NewtonLineSearch 0.8
set ok [analyze 1]
algorithm $algorithmByDefault
}
if {$ok != 0} {
algorithm Broyden 8
set ok [analyze 1]
algorithm $algorithmByDefault
}
set epsc [lindex [getLCD 100] 2]; # getting concrete strain from third column.
if {$epsc <= -0.003} {
set epss [lindex [getLCD 101] 2]; # getting steel strain from third column.
set Mn [lindex [getLCD 100] 0]; # getting nominal moment from first column.
break
}
}
if {$epsc <= -0.003} {
if {$epss <= 0.002} {
set phi 0.65
} elseif {$epss >= 0.005} {
set phi 0.90
} else {
set phi [expr 83.333*($epss-0.002)+0.65]
}
puts "Ppr = $axialLoad"
puts "epsc = $epsc"
puts "epss = $epss"
puts "Mn = $Mn"
puts "phi = $phi"
puts "phiMn = [expr $phi*$Mn]"
} else {
puts "OpenSees got convergence problems."
}
-----------------------------------
Please, let me know if this concept is relevant enough to meet the future OpenSees goals...
Thank you.
Re: Requesting a tracer in OpenSees
you can use eleResponse now .. tracer objects as you describe would be more efficient.
Re: Requesting a tracer in OpenSees
can you post a link to the example .. you can of course do this with the eleResponse command .. an alternative would be to use the existing recorder command and add a new handler (place where recorder output goes) that the user could query from the script.
-
- Posts: 65
- Joined: Mon Oct 04, 2010 6:24 pm
- Location: Colombia
Re: Requesting a tracer in OpenSees
Dear Frank McKenna,
Thank you very much to stay tuned in this subject. Should I assume you are working in the implementation of this feature currently? As of your request, there is not such a link. The example I propose here for this feature is explained above (first post). The another example that I reference externally was solved nicely using eleResponse command, though.
"an alternative would be to use the existing recorder command and add a new handler (place where recorder output goes) that the user could query from the script.". Would you explain me in more detail that another alternative? Perhaps, by giving me an example?
Thank you.
Thank you very much to stay tuned in this subject. Should I assume you are working in the implementation of this feature currently? As of your request, there is not such a link. The example I propose here for this feature is explained above (first post). The another example that I reference externally was solved nicely using eleResponse command, though.
"an alternative would be to use the existing recorder command and add a new handler (place where recorder output goes) that the user could query from the script.". Would you explain me in more detail that another alternative? Perhaps, by giving me an example?
Thank you.
Re: Requesting a tracer in OpenSees
i am not working on it .. i have added it to my list .. there are other things that are missing from the code that there is no work around for .. for this, there is the workaround using eleResponse .. and you could make look it like you have in the script using tcl procedures.
-
- Posts: 122
- Joined: Tue Oct 28, 2008 4:01 am
Re: Requesting a tracer in OpenSees
oleviuqserh wrote:
> Dear Frank. It would be very useful if a tracer is implemented in OpenSees. By a
> tracer I am meaning a recorder-like to trace some parameters (i.e. the last committed
> data, LCD) as the analysis progresses to perform some operations in real time. For
> example, a few days ago I posted a thread on how to trace the most outer compression
> fiber of a section to determine its nominal moment. The idea of the script is to
> trace the strain of such compression fiber till it is less than -0.003. When the
> analysis reaches this point, it should stop and then be able to get the nominal
> moment from the output data which in this case is the last committed time (since the
> analysis is using a displacement control in dof-3 and a reference moment of 1). To
> fit my needs, I was thinking of building two commands. One of them would be
> responsible of defining the tracer and the other one to let us get the last committed
> data at any time. I mean,
>
> To build a node tracer (behaves more like a node recorder):
> tracer $tracerTag -type Node <-time> -node $nodeTag -dof ($dof1 $dof2 ...)
> $respType
>
> To build an element tracer (behaves more like an element recorder):
> tracer $tracerTag -type Element <-time> -ele $eleTag $arg1 $arg2 ...
>
> To get the last committed data from $tracerTag:
> getLCD $tracerTag
>
>
> In context,
>
> -----------------------------------
> # Basic Units: [Length] = [m], and [Force] = [kN].
>
> wipe
>
> model basic -ndm 2 -ndf 3
>
> node 1 0. 0.
> node 2 0. 0.
>
> fix 1 1 1 1
> fix 2 0 1 0
>
> uniaxialMaterial Steel01 1420 420000. 200.e6 0.01
> uniaxialMaterial Concrete04 2070 -70000. -0.00211 -0.00422 [expr 5.e6*sqrt(70.)]
>
> section Fiber 101 {
> patch quad 2070 120 1 0.600 0.600 -0.600 0.600 -0.600 -0.600 0.600 -0.600
>
> layer straight 1420 2 [expr 11*387.e-6] 0.533 0.000 -0.533 0.000
> layer straight 1420 9 [expr 2*387.e-6] 0.426 0.000 -0.426 0.000
> }
>
> element zeroLengthSection 12 1 2 101
>
> set axialLoad -32000.; # Probable axial load (1.00D + 0.25L).
>
> pattern Plain 10 Linear {load 2 $axialLoad 0. 0.}
>
> constraints Plain
> numberer Plain
> system BandGeneral
> test NormDispIncr 1.e-8 25
> set algorithmByDefault ModifiedNewton
> algorithm $algorithmByDefault
> integrator LoadControl 0.10
> analysis Static
>
> analyze 10
> loadConst -time 0.
>
> pattern Plain 20 Linear {load 2 0. 0. 1.}
>
> integrator DisplacementControl 2 3 0.0001
>
> tracer 100 -type Element -time -ele 12 section fiber 100. 0. 2070 stressStrain; # 3
> columns: time-stress-strain
> tracer 101 -type Element -time -ele 12 section fiber -100. 0. 1420 stressStrain; # 3
> columns: time-stress-strain
>
> set ok 0
> while {$ok==0} {
> set ok [analyze 1]
>
> if {$ok != 0} {
> algorithm Newton
> set ok [analyze 1]
> algorithm $algorithmByDefault
> }
>
> if {$ok != 0} {
> algorithm NewtonLineSearch 0.8
> set ok [analyze 1]
> algorithm $algorithmByDefault
> }
>
> if {$ok != 0} {
> algorithm Broyden 8
> set ok [analyze 1]
> algorithm $algorithmByDefault
> }
>
> set epsc [lindex [getLCD 100] 2]; # getting concrete strain from third column.
>
> if {$epsc <= -0.003} {
> set epss [lindex [getLCD 101] 2]; # getting steel strain from third column.
> set Mn [lindex [getLCD 100] 0]; # getting nominal moment from first column.
>
> break
> }
> }
>
> if {$epsc <= -0.003} {
> if {$epss <= 0.002} {
> set phi 0.65
> } elseif {$epss >= 0.005} {
> set phi 0.90
> } else {
> set phi [expr 83.333*($epss-0.002)+0.65]
> }
>
> puts "Ppr = $axialLoad"
> puts "epsc = $epsc"
> puts "epss = $epss"
> puts "Mn = $Mn"
> puts "phi = $phi"
> puts "phiMn = [expr $phi*$Mn]"
> } else {
> puts "OpenSees got convergence problems."
> }
> -----------------------------------
>
>
>
> Please, let me know if this concept is relevant enough to meet the future OpenSees
> goals...
>
> Thank you.
It is just a concept or idea that you wanna be implemented in OpenSees in future, right?
You didn't code it into the handler in OpenSees, did you?
I used to post-process the data and find the exact time I needed in the problem and calculate
the outcome by hand, obviously your idea is much handy.
Thanks.
> Dear Frank. It would be very useful if a tracer is implemented in OpenSees. By a
> tracer I am meaning a recorder-like to trace some parameters (i.e. the last committed
> data, LCD) as the analysis progresses to perform some operations in real time. For
> example, a few days ago I posted a thread on how to trace the most outer compression
> fiber of a section to determine its nominal moment. The idea of the script is to
> trace the strain of such compression fiber till it is less than -0.003. When the
> analysis reaches this point, it should stop and then be able to get the nominal
> moment from the output data which in this case is the last committed time (since the
> analysis is using a displacement control in dof-3 and a reference moment of 1). To
> fit my needs, I was thinking of building two commands. One of them would be
> responsible of defining the tracer and the other one to let us get the last committed
> data at any time. I mean,
>
> To build a node tracer (behaves more like a node recorder):
> tracer $tracerTag -type Node <-time> -node $nodeTag -dof ($dof1 $dof2 ...)
> $respType
>
> To build an element tracer (behaves more like an element recorder):
> tracer $tracerTag -type Element <-time> -ele $eleTag $arg1 $arg2 ...
>
> To get the last committed data from $tracerTag:
> getLCD $tracerTag
>
>
> In context,
>
> -----------------------------------
> # Basic Units: [Length] = [m], and [Force] = [kN].
>
> wipe
>
> model basic -ndm 2 -ndf 3
>
> node 1 0. 0.
> node 2 0. 0.
>
> fix 1 1 1 1
> fix 2 0 1 0
>
> uniaxialMaterial Steel01 1420 420000. 200.e6 0.01
> uniaxialMaterial Concrete04 2070 -70000. -0.00211 -0.00422 [expr 5.e6*sqrt(70.)]
>
> section Fiber 101 {
> patch quad 2070 120 1 0.600 0.600 -0.600 0.600 -0.600 -0.600 0.600 -0.600
>
> layer straight 1420 2 [expr 11*387.e-6] 0.533 0.000 -0.533 0.000
> layer straight 1420 9 [expr 2*387.e-6] 0.426 0.000 -0.426 0.000
> }
>
> element zeroLengthSection 12 1 2 101
>
> set axialLoad -32000.; # Probable axial load (1.00D + 0.25L).
>
> pattern Plain 10 Linear {load 2 $axialLoad 0. 0.}
>
> constraints Plain
> numberer Plain
> system BandGeneral
> test NormDispIncr 1.e-8 25
> set algorithmByDefault ModifiedNewton
> algorithm $algorithmByDefault
> integrator LoadControl 0.10
> analysis Static
>
> analyze 10
> loadConst -time 0.
>
> pattern Plain 20 Linear {load 2 0. 0. 1.}
>
> integrator DisplacementControl 2 3 0.0001
>
> tracer 100 -type Element -time -ele 12 section fiber 100. 0. 2070 stressStrain; # 3
> columns: time-stress-strain
> tracer 101 -type Element -time -ele 12 section fiber -100. 0. 1420 stressStrain; # 3
> columns: time-stress-strain
>
> set ok 0
> while {$ok==0} {
> set ok [analyze 1]
>
> if {$ok != 0} {
> algorithm Newton
> set ok [analyze 1]
> algorithm $algorithmByDefault
> }
>
> if {$ok != 0} {
> algorithm NewtonLineSearch 0.8
> set ok [analyze 1]
> algorithm $algorithmByDefault
> }
>
> if {$ok != 0} {
> algorithm Broyden 8
> set ok [analyze 1]
> algorithm $algorithmByDefault
> }
>
> set epsc [lindex [getLCD 100] 2]; # getting concrete strain from third column.
>
> if {$epsc <= -0.003} {
> set epss [lindex [getLCD 101] 2]; # getting steel strain from third column.
> set Mn [lindex [getLCD 100] 0]; # getting nominal moment from first column.
>
> break
> }
> }
>
> if {$epsc <= -0.003} {
> if {$epss <= 0.002} {
> set phi 0.65
> } elseif {$epss >= 0.005} {
> set phi 0.90
> } else {
> set phi [expr 83.333*($epss-0.002)+0.65]
> }
>
> puts "Ppr = $axialLoad"
> puts "epsc = $epsc"
> puts "epss = $epss"
> puts "Mn = $Mn"
> puts "phi = $phi"
> puts "phiMn = [expr $phi*$Mn]"
> } else {
> puts "OpenSees got convergence problems."
> }
> -----------------------------------
>
>
>
> Please, let me know if this concept is relevant enough to meet the future OpenSees
> goals...
>
> Thank you.
It is just a concept or idea that you wanna be implemented in OpenSees in future, right?
You didn't code it into the handler in OpenSees, did you?
I used to post-process the data and find the exact time I needed in the problem and calculate
the outcome by hand, obviously your idea is much handy.
Thanks.
-
- Posts: 65
- Joined: Mon Oct 04, 2010 6:24 pm
- Location: Colombia
Re: Requesting a tracer in OpenSees
wuhaoshrek,
Since I am not an OpenSees developer, this feature should be taken as a concept. However, as Frank explains above, a workaround with eleResponse command may solve the problem.
Since I am not an OpenSees developer, this feature should be taken as a concept. However, as Frank explains above, a workaround with eleResponse command may solve the problem.