Problem with Rotational spring by using zerolength element
Moderators: silvia, selimgunay, Moderators
Problem with Rotational spring by using zerolength element
hi, I am building a rotational spring to simulate a hinge. I used EPP material for the spring in which k=200 and theta_y=0.005. The model is built as follows.
# units: kip, inch, sec
wipe;
model BasicBuilder -ndm 2 -ndf 3;
node 1 0 0;
node 2 0 0;
fix 1 1 1 1;
set MatTagFlex 1;
uniaxialMaterial ElasticPP $MatTagFlex 200 0.005
proc rotSpring2D {eleID nodeR nodeC matID1} {
element zeroLength $eleID $nodeR $nodeC -mat $matID1 -dir 6
equalDOF $nodeR $nodeC 1 2
}
rotSpring2D 1 1 2 $MatTagFlex;
# Define RECORDERS -------------------------------------------------------------
recorder Node -file DFree.out -time -node 2 -dof 1 2 3 disp;
recorder Element -file FCol.out -time -ele 1 globalForce;
pattern Plain 1 Linear {
load 2 0. 0. 2.;
}
set Tol 1.0e-8;
constraints Transformation 1.0;
numberer Plain;
system BandGeneral;
test NormDispIncr $Tol 6 ;
algorithm Newton;
set Nstep 100;
integrator DisplacementControl 2 3 0.0001;
analysis Static;
analyze $Nstep;
I ran the model with DisplacementControl at the rotational DOF, and let the spring yield. However, the program ceased to work. The error is like this:
[quote]DisplacementControl::newStep() - domainChanged has not been called
StaticAnalysis::analyze() - the Integrator failed at iteration: 0 with domain at
load factor 0
OpenSees > analyze failed, returned: -2 error flag[/quote]
Could anyone find the problem inside the code? Thank you very much.
# units: kip, inch, sec
wipe;
model BasicBuilder -ndm 2 -ndf 3;
node 1 0 0;
node 2 0 0;
fix 1 1 1 1;
set MatTagFlex 1;
uniaxialMaterial ElasticPP $MatTagFlex 200 0.005
proc rotSpring2D {eleID nodeR nodeC matID1} {
element zeroLength $eleID $nodeR $nodeC -mat $matID1 -dir 6
equalDOF $nodeR $nodeC 1 2
}
rotSpring2D 1 1 2 $MatTagFlex;
# Define RECORDERS -------------------------------------------------------------
recorder Node -file DFree.out -time -node 2 -dof 1 2 3 disp;
recorder Element -file FCol.out -time -ele 1 globalForce;
pattern Plain 1 Linear {
load 2 0. 0. 2.;
}
set Tol 1.0e-8;
constraints Transformation 1.0;
numberer Plain;
system BandGeneral;
test NormDispIncr $Tol 6 ;
algorithm Newton;
set Nstep 100;
integrator DisplacementControl 2 3 0.0001;
analysis Static;
analyze $Nstep;
I ran the model with DisplacementControl at the rotational DOF, and let the spring yield. However, the program ceased to work. The error is like this:
[quote]DisplacementControl::newStep() - domainChanged has not been called
StaticAnalysis::analyze() - the Integrator failed at iteration: 0 with domain at
load factor 0
OpenSees > analyze failed, returned: -2 error flag[/quote]
Could anyone find the problem inside the code? Thank you very much.
Lijun
EPP material is the reason for the failure. I changed it to Steel01 and tried LoadControl, and the code works.
Now I get into another question. How do I build a rotational spring in a 3D case? Here is my code.
# units: kip, inch, sec
wipe;
model BasicBuilder -ndm 3 -ndf 6;
node 1 0 0 0;
node 2 0 0 0;
fix 1 1 1 1 1 1 1;
set MatTagFlex 1;
uniaxialMaterial Steel01 $MatTagFlex 1.0 200. 0.0001;
proc rotSpring2D {eleID nodeR nodeC matID1} {
element zeroLength $eleID $nodeR $nodeC -mat $matID1 -dir 5 6
equalDOF $nodeR $nodeC 1 2 3 4
}
rotSpring2D 1 1 2 $MatTagFlex;
# Define RECORDERS -------------------------------------------------------------
recorder Node -file DFree.out -time -node 2 -dof 1 2 3 4 5 6 disp;
recorder Element -file FCol.out -time -ele 1 force;
pattern Plain 1 Linear {
load 2 0. 0. 0. 0. 1.5 0.;
}
set Tol 1.0e-8;
constraints Transformation 1.0;
numberer Plain;
system BandGeneral;
test NormDispIncr $Tol 6 ;
algorithm Newton;
set Nstep 100;
integrator LoadControl 0.01;
analysis Static;
analyze $Nstep;
I hope to build 2 springs in bending axes and equalDOF the other four axes. Seems like that the upper program does not work. Any help will be very appreciated. Thanks.
Now I get into another question. How do I build a rotational spring in a 3D case? Here is my code.
# units: kip, inch, sec
wipe;
model BasicBuilder -ndm 3 -ndf 6;
node 1 0 0 0;
node 2 0 0 0;
fix 1 1 1 1 1 1 1;
set MatTagFlex 1;
uniaxialMaterial Steel01 $MatTagFlex 1.0 200. 0.0001;
proc rotSpring2D {eleID nodeR nodeC matID1} {
element zeroLength $eleID $nodeR $nodeC -mat $matID1 -dir 5 6
equalDOF $nodeR $nodeC 1 2 3 4
}
rotSpring2D 1 1 2 $MatTagFlex;
# Define RECORDERS -------------------------------------------------------------
recorder Node -file DFree.out -time -node 2 -dof 1 2 3 4 5 6 disp;
recorder Element -file FCol.out -time -ele 1 force;
pattern Plain 1 Linear {
load 2 0. 0. 0. 0. 1.5 0.;
}
set Tol 1.0e-8;
constraints Transformation 1.0;
numberer Plain;
system BandGeneral;
test NormDispIncr $Tol 6 ;
algorithm Newton;
set Nstep 100;
integrator LoadControl 0.01;
analysis Static;
analyze $Nstep;
I hope to build 2 springs in bending axes and equalDOF the other four axes. Seems like that the upper program does not work. Any help will be very appreciated. Thanks.
Lijun
Re: Problem with Rotational spring by using zerolength eleme
can we use rotspring2D codes for 3D cases???
Re: Problem with Rotational spring by using zerolength eleme
no, you can not use it as is. modification of the code is needed.
Re: Problem with Rotational spring by using zerolength eleme
how can we modify this code for 3d cases?could you please explain it more?
Re: Problem with Rotational spring by using zerolength eleme
This can be used for 3D:
proc rotSpring3D {eleID nodeR nodeC matID1 $matID2} {
element zeroLength $eleID $nodeR $nodeC -mat $matID1 $matID2 -dir 5 6
equalDOF $nodeR $nodeC 1 2 3 4
}
And this for 2D:
proc rotSpring2D {eleID nodeR nodeC matID1} {
element zeroLength $eleID $nodeR $nodeC -mat $matID1 -dir 6
equalDOF $nodeR $nodeC 1 2
}
proc rotSpring3D {eleID nodeR nodeC matID1 $matID2} {
element zeroLength $eleID $nodeR $nodeC -mat $matID1 $matID2 -dir 5 6
equalDOF $nodeR $nodeC 1 2 3 4
}
And this for 2D:
proc rotSpring2D {eleID nodeR nodeC matID1} {
element zeroLength $eleID $nodeR $nodeC -mat $matID1 -dir 6
equalDOF $nodeR $nodeC 1 2
}