Thank you very much Dr. Frank~
The problem has been solved.
Actually I first tried to reduce the time step to an extremely small degree. However, convergence cannot be achieved until I increase the nodal mass in rotational direction to a certain degree.
Although the convergence problem of the typical example presented above has been solved, the result of some models in which large number of DOF exist always disperses no matter how small time step is.
Can you give me some suggestions for this?
Thank you very much!
Search found 93 matches
- Wed Nov 23, 2016 1:12 am
- Forum: OpenSees.exe Users
- Topic: Problem when using central difference method
- Replies: 3
- Views: 4224
- Tue Nov 08, 2016 2:01 am
- Forum: OpenSees.exe Users
- Topic: Problem when using central difference method
- Replies: 3
- Views: 4224
Problem when using central difference method
Hello, I tried to analyze an elastic cantilever beam by using central difference method but got very weird results (deformation increases to unreasonably large level). But I can get good results if newmark method was applied using the same code. THANK YOU VERY MUCH in advance if you can help me.
# ---- source code ------------------------------------------------------------------
wipe; # clear memory of all past model definitions
file mkdir Data; # create data directory
model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm=#dimension, ndf=#dofs
# define GEOMETRY -------------------------------------------------------------
set LCol 3000; # column length
set Weight 6000000000.; # superstructure weight
# calculated parameters
set PCol $Weight; # nodal dead-load weight per column
set g 9806; # g.
set Mass [expr $PCol/$g]; # nodal mass
# nodal coordinates:
node 1 0 0; # node#, X, Y
node 2 0 $LCol
# Single point constraints -- Boundary Conditions
fix 1 1 1 1; # node DX DY RZ
# nodal masses:
mass 2 $Mass $Mass 1e-9; # node#, Mx My Mz, Mass=Weight/g, neglect rotational inertia at nodes
# Define ELEMENTS & SECTIONS -------------------------------------------------------------
# MATERIAL parameters
set ColTransfTag 1; # associate a tag to column transformation
geomTransf Linear $ColTransfTag ;
element elasticBeamColumn 1 1 2 250000 30000 62500000000 $ColTransfTag;
recorder Drift -file Drift.txt -time -iNode 1 -jNode 2 -dof 1 -perpDirn 2 ; # lateral drift
# define GRAVITY -------------------------------------------------------------
pattern Plain 1 Linear {
#load 2 0 -$PCol 0
load 2 [expr 0.1*$PCol] 0 0
}
system ProfileSPD
integrator LoadControl 1.0 1 1.0 10.0
test EnergyIncr 1.0e-12 10 0
algorithm Newton
numberer RCM
constraints Plain
analysis Static
# Perform the analysis
analyze 10
# ---------------------------------------
# Create and Perform the dynamic analysis
# ---------------------------------------
# Remove the static analysis & reset the time to 0.0
wipeAnalysis
setTime 0.0
# Now remove the loads and let the beam vibrate
remove loadPattern 1
# Create the transient analysis
algorithm Linear
numberer RCM
constraints Plain
integrator CentralDifferenceNoDamping
system Diagonal
analysis Transient
analyze 10000 0.025
# ------ Part of results -----------------------------------------------------------------------------------
1 0.96
2 1.92
3 2.88
4 3.84
5 4.8
6 5.76
7 6.72
8 7.68
9 8.64
10 9.6
0.025 9.59796
0.05 9.07433
0.075 8.1178e+017
0.1 -1.26841e+036
0.125 1.98189e+054
0.15 -3.0967e+072
0.175 4.83859e+090
0.2 -7.56029e+108
0.225 1.1813e+127
0.25 -1.84577e+145
0.275 2.88402e+163
0.3 -4.50628e+181
0.325 7.04107e+199
0.35 -1.10017e+218
0.375 1.71901e+236
0.4 -2.68596e+254
0.425 4.1968e+272
0.45 -6.55751e+290
0.475 1.#INF
0.5 -1.#IND
0.525 -1.#IND
0.55 -1.#IND
0.575 -1.#IND
0.6 -1.#IND
0.625 -1.#IND
0.65 -1.#IND
0.675 -1.#IND
0.7 -1.#IND
0.725 -1.#IND
0.75 -1.#IND
0.775 -1.#IND
0.8 -1.#IND
0.825 -1.#IND
0.85 -1.#IND
0.875 -1.#IND
0.9 -1.#IND
0.925 -1.#IND
0.95 -1.#IND
0.975 -1.#IND
# ---- source code ------------------------------------------------------------------
wipe; # clear memory of all past model definitions
file mkdir Data; # create data directory
model BasicBuilder -ndm 2 -ndf 3; # Define the model builder, ndm=#dimension, ndf=#dofs
# define GEOMETRY -------------------------------------------------------------
set LCol 3000; # column length
set Weight 6000000000.; # superstructure weight
# calculated parameters
set PCol $Weight; # nodal dead-load weight per column
set g 9806; # g.
set Mass [expr $PCol/$g]; # nodal mass
# nodal coordinates:
node 1 0 0; # node#, X, Y
node 2 0 $LCol
# Single point constraints -- Boundary Conditions
fix 1 1 1 1; # node DX DY RZ
# nodal masses:
mass 2 $Mass $Mass 1e-9; # node#, Mx My Mz, Mass=Weight/g, neglect rotational inertia at nodes
# Define ELEMENTS & SECTIONS -------------------------------------------------------------
# MATERIAL parameters
set ColTransfTag 1; # associate a tag to column transformation
geomTransf Linear $ColTransfTag ;
element elasticBeamColumn 1 1 2 250000 30000 62500000000 $ColTransfTag;
recorder Drift -file Drift.txt -time -iNode 1 -jNode 2 -dof 1 -perpDirn 2 ; # lateral drift
# define GRAVITY -------------------------------------------------------------
pattern Plain 1 Linear {
#load 2 0 -$PCol 0
load 2 [expr 0.1*$PCol] 0 0
}
system ProfileSPD
integrator LoadControl 1.0 1 1.0 10.0
test EnergyIncr 1.0e-12 10 0
algorithm Newton
numberer RCM
constraints Plain
analysis Static
# Perform the analysis
analyze 10
# ---------------------------------------
# Create and Perform the dynamic analysis
# ---------------------------------------
# Remove the static analysis & reset the time to 0.0
wipeAnalysis
setTime 0.0
# Now remove the loads and let the beam vibrate
remove loadPattern 1
# Create the transient analysis
algorithm Linear
numberer RCM
constraints Plain
integrator CentralDifferenceNoDamping
system Diagonal
analysis Transient
analyze 10000 0.025
# ------ Part of results -----------------------------------------------------------------------------------
1 0.96
2 1.92
3 2.88
4 3.84
5 4.8
6 5.76
7 6.72
8 7.68
9 8.64
10 9.6
0.025 9.59796
0.05 9.07433
0.075 8.1178e+017
0.1 -1.26841e+036
0.125 1.98189e+054
0.15 -3.0967e+072
0.175 4.83859e+090
0.2 -7.56029e+108
0.225 1.1813e+127
0.25 -1.84577e+145
0.275 2.88402e+163
0.3 -4.50628e+181
0.325 7.04107e+199
0.35 -1.10017e+218
0.375 1.71901e+236
0.4 -2.68596e+254
0.425 4.1968e+272
0.45 -6.55751e+290
0.475 1.#INF
0.5 -1.#IND
0.525 -1.#IND
0.55 -1.#IND
0.575 -1.#IND
0.6 -1.#IND
0.625 -1.#IND
0.65 -1.#IND
0.675 -1.#IND
0.7 -1.#IND
0.725 -1.#IND
0.75 -1.#IND
0.775 -1.#IND
0.8 -1.#IND
0.825 -1.#IND
0.85 -1.#IND
0.875 -1.#IND
0.9 -1.#IND
0.925 -1.#IND
0.95 -1.#IND
0.975 -1.#IND
- Sat Jan 26, 2013 2:49 am
- Forum: Framework
- Topic: about the stiffness matrix
- Replies: 5
- Views: 6949
Re: about the stiffness matrix
Thank you for your reply Frank! But the only two DOFs for the 2D zerolength element are both rotational DOFs, I think there's actually a way to tell the system which DOF it means. There are some other elements such as Joint2D element which does not follow the "x y Rz" or "x y z Rx Ry Rz" DOF rule either.
- Tue Jan 08, 2013 12:50 am
- Forum: Framework
- Topic: Question about new recorder
- Replies: 0
- Views: 2629
Question about new recorder
Hello, I made a new element and I tried to make a new recorder to record something that cannot be done by the exsiting recorders.
I browse the OpenSees developer folder and found SumElementForcesRecorder.cpp which is a demonstration of new recorder. The essential part of the recorder seems to be "const Vector &force = theElements[0]->getResistingForce();" which gets resisting force vectors which corresponds to the number of DOFs. However in my case, I have many internal elements which are far more than the DOFs. So I tried to make a new public method which is able to obtain forces of every internal elements and I tried "const Vector &force = theElements[0]->getInternalNodalForce();"
##################################################
class MyElement : public Element
{
public:
const Vector &getInternalNodalForce(void);
...........
}
##################################################
######### And I add it to the Element.h too #########################################
class Element : public DomainComponent
{
public:
...............
virtual const Vector &getInternalNodalForce(void) =0;
..................
}
##################################################
It was successfulled compiled but "getInternalNodalForce()" cannot be invoked in "const Vector &force = theElements[0]->getInternalNodalForce();"
Can you tell me how I can make it work?
THANK YOU VERY MUCH in advance!
I browse the OpenSees developer folder and found SumElementForcesRecorder.cpp which is a demonstration of new recorder. The essential part of the recorder seems to be "const Vector &force = theElements[0]->getResistingForce();" which gets resisting force vectors which corresponds to the number of DOFs. However in my case, I have many internal elements which are far more than the DOFs. So I tried to make a new public method which is able to obtain forces of every internal elements and I tried "const Vector &force = theElements[0]->getInternalNodalForce();"
##################################################
class MyElement : public Element
{
public:
const Vector &getInternalNodalForce(void);
...........
}
##################################################
######### And I add it to the Element.h too #########################################
class Element : public DomainComponent
{
public:
...............
virtual const Vector &getInternalNodalForce(void) =0;
..................
}
##################################################
It was successfulled compiled but "getInternalNodalForce()" cannot be invoked in "const Vector &force = theElements[0]->getInternalNodalForce();"
Can you tell me how I can make it work?
THANK YOU VERY MUCH in advance!
- Mon Jan 07, 2013 9:15 pm
- Forum: Framework
- Topic: about the stiffness matrix
- Replies: 5
- Views: 6949
Re: about the stiffness matrix
Thank you for your reply Frank! I was doing the same as what you said. I made the output matrix be 6x6 and constrained the translational DOFs of node 2 in OpenSees input TCL script (using "fix 2 1 1 0" command). It worked fined but I actually need to build a much more complex model with many external nodes but with only translational or rotional DOFs relevant. So I actually need to constrain a large number of DOFs in TCL script manually, which is annoying and easy to make mistake.
I found that some elements such as 2D zerolength element outputs 2x2 stiffness matrix instead of outputing 6x6 matrix, but I can't figure out how it tells the system which 2DOFs it means. If I can do the same thing, my work can really be much easier and more reliable.
Thank you Frank!
I found that some elements such as 2D zerolength element outputs 2x2 stiffness matrix instead of outputing 6x6 matrix, but I can't figure out how it tells the system which 2DOFs it means. If I can do the same thing, my work can really be much easier and more reliable.
Thank you Frank!
- Fri Jan 04, 2013 5:18 am
- Forum: Framework
- Topic: about the stiffness matrix
- Replies: 5
- Views: 6949
about the stiffness matrix
Hello, I am trying to make a new 2D element which containes 2 nodes and has 4 degrees of freedom (2 translational DOFs and 1 rotational DOF for the first node and 1 rotational DOF for the second). Therefore the stiffness matrix of the element is 4 by 4. But how can I tell global stiffness integrator that the first 3*3 matrix within the 4*4 stiffness matrix are for the first node and the rest of it is for the second node?
Thank you very much in advance!
Thank you very much in advance!
- Wed Dec 12, 2012 4:12 am
- Forum: Framework
- Topic: Problem in OpenSeesDeveloper
- Replies: 0
- Views: 2678
Problem in OpenSeesDeveloper
Dear fmk:
I tried to add new material "elasticPPCPP" in OpenSeesDeveloper package. I followed "WindowsInstructions.txt" exactly and successfully compiled the dll. However, when I ran "example1.tcl", The prompt windows shows "ElasticPPcpp unaxial material - Written by fmk UC Berkeley Copyright 2008 - Use at your Own Peril" and stoped there with an windows error. I also tried "Truss2D" element, it successfully compiled with a dll but as I ran the "example1.tcl", a window popped up with the following prompt:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Debug Error!
Program: C:.....OpenSees.exe
Module: D:.....Truss2D.dll
File:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Is it because the version of OpenSeesDeveloper package is too old and it is not compatable with the latest OpenSees? I am using "OpenSees 2.4.0", Visual Stadio 2010.
Thank you very much in advance!
I tried to add new material "elasticPPCPP" in OpenSeesDeveloper package. I followed "WindowsInstructions.txt" exactly and successfully compiled the dll. However, when I ran "example1.tcl", The prompt windows shows "ElasticPPcpp unaxial material - Written by fmk UC Berkeley Copyright 2008 - Use at your Own Peril" and stoped there with an windows error. I also tried "Truss2D" element, it successfully compiled with a dll but as I ran the "example1.tcl", a window popped up with the following prompt:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Debug Error!
Program: C:.....OpenSees.exe
Module: D:.....Truss2D.dll
File:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Is it because the version of OpenSeesDeveloper package is too old and it is not compatable with the latest OpenSees? I am using "OpenSees 2.4.0", Visual Stadio 2010.
Thank you very much in advance!
- Sat May 26, 2012 9:35 pm
- Forum: Framework
- Topic: Question about commitState()
- Replies: 1
- Views: 2906
Question about commitState()
Hello, I have a question about commitState(). As you can see in the code below, "theMaterial" points to "commitState()", but what class does this "commitState()" belong to and why the name of class does not need to be stated? Thank you in advance!
------------------------------------------------
Truss2D::commitState()
{
return theMaterial->commitState();
}
------------------------------------------------
Truss2D::commitState()
{
return theMaterial->commitState();
}
- Tue May 22, 2012 10:38 pm
- Forum: Framework
- Topic: question about parentheses and square brackets
- Replies: 4
- Views: 5821
question about parentheses and square brackets
I have a question about the usage of parentheses and square brackets in OpenSees's code. The following code is a small section from the OpenSees source code, I guess the both "connectedExternalNodes(0)" and "theNodes[0]" means the first cell of "connectedExternalNodes" and "theNodes" array respectively. But why the former uses parentheses while the latter uses square brackets? The lower code is another similar example with the same question. Thank you very much in advance!
#####################################
// Set connected external node IDs
connectedExternalNodes(0) = nd1;
connectedExternalNodes(1) = nd2;
theNodes[0] = 0;
theNodes[1] = 0;
#####################################
q(0) += q0[0];
q(1) += q0[1];
q(2) += q0[2];
#######################################
#####################################
// Set connected external node IDs
connectedExternalNodes(0) = nd1;
connectedExternalNodes(1) = nd2;
theNodes[0] = 0;
theNodes[1] = 0;
#####################################
q(0) += q0[0];
q(1) += q0[1];
q(2) += q0[2];
#######################################
- Sat Mar 03, 2012 1:22 am
- Forum: OpenSees.exe Users
- Topic: FB element section level convergence problem
- Replies: 1
- Views: 2587
FB element section level convergence problem
Hello, I made flexibility based fiber beam-column element program but it was found hard to converge in section level. I set the convergence criteria as the ratio of (absolute sum of risidual section force) to the (absolute sum of the section force applied at the first step of state determination iteration) smaller than 1e-8.
I want to know exactly how OpenSees set the section level convergence criteria, THANK YOU VERY MUCH in advance!
I want to know exactly how OpenSees set the section level convergence criteria, THANK YOU VERY MUCH in advance!
- Tue Dec 27, 2011 10:01 pm
- Forum: OpenSees.exe Users
- Topic: Displacement control problem
- Replies: 0
- Views: 2091
Displacement control problem
Hello, I have a question on displacement control algorithm. According to some iteration based displacement control algorithms, they seem to be indepentent from newton raphson or newton iteration method. But in Opensees, using displacement control with newton raphson or newton method takes different calculation time. So it means using newton raphson or newton method does effect the process. Can the dear moderator explain why and how this happens?
Thank you very much in advance!
Thank you very much in advance!
- Mon Dec 19, 2011 9:06 pm
- Forum: OpenSees.exe Users
- Topic: Displacement control
- Replies: 0
- Views: 2032
Displacement control
hello, I was trying to find out the displacement contorl theory and I found the following link in OpenSees site:
http://opensees.berkeley.edu/wiki/index ... nt_Control
However, the explanation of the theory seems to be too short. Can anyone tell me the reference in which more detailed information can be found.
THANK YOU VERY MUCH in advance!
http://opensees.berkeley.edu/wiki/index ... nt_Control
However, the explanation of the theory seems to be too short. Can anyone tell me the reference in which more detailed information can be found.
THANK YOU VERY MUCH in advance!
- Fri Aug 19, 2011 5:18 am
- Forum: OpenSees.exe Users
- Topic: Displacement control method used in OpenSees
- Replies: 10
- Views: 10587
Re: Displacement control method used in OpenSees
Vesna, thank you for your quick reply!
I meant when performing a pushover analysis, the pushover curve will go up and might reaches peak and then goes down (negative slope), how does OpenSees calculate when the pushover curve goes into negative slope?
Thank you again for your help!
I meant when performing a pushover analysis, the pushover curve will go up and might reaches peak and then goes down (negative slope), how does OpenSees calculate when the pushover curve goes into negative slope?
Thank you again for your help!
- Wed Aug 17, 2011 7:19 pm
- Forum: OpenSees.exe Users
- Topic: Displacement control method used in OpenSees
- Replies: 10
- Views: 10587
Re: Displacement control method used in OpenSees
Thank you for your quick reply vesna!
Actually I know exactly what to do in OpenSees, just what I want to know is the theory, can you tell me which theory OpenSees uses for
1. Displacement control method
2. derivation of nonlinearBeamColumn
3. Negative post yield treatment
THANK YOU AGAIN!
Actually I know exactly what to do in OpenSees, just what I want to know is the theory, can you tell me which theory OpenSees uses for
1. Displacement control method
2. derivation of nonlinearBeamColumn
3. Negative post yield treatment
THANK YOU AGAIN!
- Wed Aug 17, 2011 9:39 am
- Forum: OpenSees.exe Users
- Topic: Displacement control method used in OpenSees
- Replies: 10
- Views: 10587
Displacement control method used in OpenSees
Hello, I want to konw the detailed principle of displacement control based pushover of a nonlinearBeamColumn, and I know that there are some different technique to treat negative post yield behavior and different displacement control methods, please tell me or give me some references showing which method OpenSees is using.
The principles I need to know
1. Displacement control method used in OpenSees
2. derivation of nonlinearBeamColumn
3. Negative post yield treatment used in OpenSees
THANK YOU VERY MUCH in advance!
The principles I need to know
1. Displacement control method used in OpenSees
2. derivation of nonlinearBeamColumn
3. Negative post yield treatment used in OpenSees
THANK YOU VERY MUCH in advance!