Sequence of Masses, Springs and Dampers
Harald Kammerer
Introduction
Considered is a series of one dimensional masses, springs and dampers, fixed at one end and loaded by a force impact at the other end.
First we have to do some initialisation
> |
libname := libname, "C:/mylib/StructuralMechanics/StructuralMechanics.lib": |
> |
with(LinearAlgebra):with(plots):with(plottools):with(StringTools): |
> |
with(StructuralMechanics): |
System
First the nodes are defined. At every position where a mass shall be located there must be a node defined. Here we consider a system with 10 masses.
> |
NODE:=[seq([i],i=0..nou)]; |
All dampers have the same damping resistance.
> |
for i from 1 by 1 to nou do RX[i]:=0.3 od: |
And all springs have the same stiffness
> |
for i from 1 by 1 to nou do CX[i]:=1. od: |
Between all nodes there are each a damper and a spring
> |
DAMPER:=[seq([i,i+1],i=1..nou)]; |
> |
SPRING:=[seq([i,i+1],i=1..nou)]; |
The first node of the structure is fixed
At every node is the same mass.
> |
NODEMASS:=[seq([i,[1.]],i=2..nou+1)]; |
At last we define the the load. The force is defined in all degrees of freedom at the last node.
> |
FORCE:=[[nou+1,[1,0,0,0,0,0]]]; |
Here the motion is considerd while the time span Tmax.
And we use ndt time steps.
This yields for the time step
We define the force at the discrete time steps. At the first time step the force is 1 in the direction of the load FORCE which is defined above. At all other times the force is 0.
> |
for i from 2 by 1 to ndt do Force[i]:=0.0 od: |
For control the time history of this discrete values is shown.
> |
plot([seq([(i-1)*dt,Force[i]],i=1..ndt)],style=point); |
To use the routine Newmark in this package the load at every time step has to be written as a vector. This vector is defined by use of the automatic set parameter FQ. This works when the dynamic load is identical in its properties like the load defined in the input parameter FORCE. This works only if the routine Systemmatrices() has run.
System Matrices
We have all information to calculate the matricies which describe the system.
Now the parameter LOAD can be defined. This is used to run the routine Newmark for the numerical integration of the equation of motion.
> |
FQtime:=Vector[column](evalm(FQ)): |
The vectors of the force for all timesteps are combined to a list.
> |
LOAD:=[seq(ScalarMultiply(FQtime,Force[i]),i=1..ndt)]: |
Additional we need to define the initial conditions of the motion of the structure. We assume that all displacements, velocities and accelerations are 0 at the beginning.
> |
a0:=Vector(ndof):v0:=Vector(ndof):s0:=Vector(ndof): |
This routine redefines the parameter NODE, SUPPORT and NODEMASS. So we have a look on this:
Visualize the System
We will have first a look on the sstructure with the springs, the dampers, the node masses.
> |
structurplot("SPRING","DAMPER","NODEMASS","FORCE"); |
Between node 2 and node 3 there is a spring and a damper. We see only one of both. Which one depends on random. In node 1 all rotations and all translations are fixed. This is shown by the yellow cylinders in each axis direction. At node 2 and 3 the directions orthogonal to the systems main axis are also totally fixed. In the systems main direction the translation is free but the rotation around this axis is fixed. This is shown by the blue colored cylinders.
We have one more look on the system, but now we show the node numbers (green), the spring numbers (red) and the damper numbers (blue).
Eigenvalues and Eigenvectors
As first part of the solution we calculate the eigenmodes.
> |
eigensolution(MM2,DM2,KM2): |
The eigensolution is written in the field EVUD. The first 2*ndof entries are the sets of triples of the values of
- the eigenfrequencies of the undamped system,
- the eigenfrequencies of the damped system and
- the degree of the damping.
For supercritical damped systems the eigenfrequency of the damped system is 0 and the degree of damping is 1
Here we have a look on the eigenfrequencies of the damped system and the corresponding degree of damping.
> |
for i from 1 by 1 to 2*ndof do EVUD[i][2],EVUD[i][3] od; |
These are twice so many sets like the system has degrees of freedom. The value ndof is calculated in the routine Systemmatrices.
Entry 2*n+1 of EVUD is the matrix of the eigenvectors sorted according the absolute value of the corresponding eigenvalues.
The eigenform according to every eigenvalue for damped systems can be visualized by use of the function eigenfomD. This function can be used to print the values of the eigenmode, to plot the eigenmode in different form or to animate it. Here we animate the first eigenmode.
> |
eigenformD(1,10,ANIMATEFORM); |
Deformation Under Dynamic Load
Here we want to set the main point of view onto the deformation under dynamic load. To calculate this the routine Newmark is used.
> |
Newmark(s0,v0,a0,ndt,dt,KM2,DM2,MM2,LOAD): |
The solution is animated by the routine showmotion with the parameter start_id, end_id, step and optional factor. Here we show the motion from the first until the last discrete time step with the step 3. The factor is choosen to 10.
> |
showmotion(1,ndt,3,10); |