JSBeams project

Tool for numerical solution of beam structures in JavaScript

Examples (and tests at the same time)

One beam with continuous load

ex01.png

/*
Simple example with one beam and continuous load. The beam cen either be modeled as clamped-clamped (with 6 degrees of freedom) with rotation of right-hand node as unknown, or as clamped-hinge beam with (with the help of static condensation) only 5 degress of freedom. The end displacement and end forces (both in local coordinate system) are computed regardless the type of the beam and results are of course the same
*/

var node1 = JSBeams.Node.create(0,0,0);
var node2 = JSBeams.Node.create(2,0,0);
var ea = 3600;
var ei = 48.0;
var fz = 10;

var dofs1 = [0,1,2,3,4,5];
var params1 = {dofs:dofs1,ea:ea,ei:ei,fzloc:fz};
var beam1 = JSBeams.Beam2d.create(node1,node2,params1);
var p1 = [0,1,2,3,4];
var u1 = [5];
var solver1 = JSBeams.LinearStaticSolver.create([beam1],u1,p1);
solver1.update();

var dofs2 = [0,1,2,3,4];
var params2 = {dofs:dofs2,ea:ea,ei:ei,fzloc:fz,type:JSBeams.CH};
var beam2 = JSBeams.Beam2d.create(node1,node2,params2);
var p2 = [0,1,2,3,4];
var u2 = [];
var solver2 = JSBeams.LinearStaticSolver.create([beam2],u2,p2);
solver2.update();

var dspl = JSMatrix.Vector.create([0, 0, 0, 0, 0, 3.47222222e-02]);
if (beam1.dspl.sub(dspl).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (ex01)'); }
if (beam2.dspl.sub(dspl).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (ex01)'); }

var load = JSMatrix.Vector.create([0, -12.5, 5, 0, -7.5, 0]);
if (beam1.load.sub(load).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (ex01)'); }
if (beam2.load.sub(load).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (ex01)'); }
if (noFail) { alert('ex01 passed'); }

One beam with temperature load

ex02.png

/*
Simple example with one beam and temperature load. The beam cen either be modeled as clamped-clamped (with 6 degrees of freedom) with rotation of right-hand node as unknown, or as clamped-hinge beam with (with the help of static condensation) only 5 degress of freedom. The end displacement and end forces (both in local coordinate system) are computed regardless the type of the beam and results are of course the same
*/

var node1 = JSBeams.Node.create(0,0,0);
var node2 = JSBeams.Node.create(2,0,0);
var ea = 3600;
var ei = 48.0;
var fz = 10;

var dofs1 = [0,1,2,3,4,5];
var params1 = {dofs:dofs1,ea:ea,ei:ei,dT:30,dTh:-50};
var beam1 = JSBeams.Beam2d.create(node1,node2,params1);
var p1 = [0,1,2,3,4];
var u1 = [5];
var solver1 = JSBeams.LinearStaticSolver.create([beam1],u1,p1);
solver1.update();

var dofs2 = [0,1,2,3,4];
var params2 = {dofs:dofs2,ea:ea,ei:ei,dT:30,dTh:-50,type:JSBeams.CH};
var beam2 = JSBeams.Beam2d.create(node1,node2,params2);
var p2 = [0,1,2,3,4];
var u2 = [];
var solver2 = JSBeams.LinearStaticSolver.create([beam2],u2,p2);
solver2.update();

var dspl = JSMatrix.Vector.create([0, 0, 0, 0, 0, -0.0003]);
if (beam1.dspl.sub(dspl).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (ex02)'); }
if (beam2.dspl.sub(dspl).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (ex02)'); }

var load = JSMatrix.Vector.create([1.296, 2.16e-02, -4.32e-02, -1.296, -2.16e-02, 0]);
if (beam1.load.sub(load).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (ex02)'); }
if (beam2.load.sub(load).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (ex02)'); }
if (noFail) { alert('ex02 passed'); }


Complex static example (slightly modified example from OOFEM documentation)

exOofem.png

var node1 = JSBeams.Node.create(0, 0,0);
var node2 = JSBeams.Node.create(2.4,0,0);
var node3 = JSBeams.Node.create(3.8,0,0);
var node4 = JSBeams.Node.create(5.8,0,1.5);
var node5 = JSBeams.Node.create(7.8,0,3);
var node6 = JSBeams.Node.create(2.4,0,3);

var ei = 30e6*0.0039366;
var ea = 30e6*0.162;
var dTh = -20/0.54;

var beam1 = JSBeams.Beam2d.create(node1,node2,
{ea:ea,ei:ei,dofs:[0,1,2,3,4],type:JSBeams.HC,dT:30,dTh:dTh,alpha:12e-6,fzloc:10});
var beam2 = JSBeams.Beam2d.create(node2,node3,
{ea:ea,ei:ei,dofs:[2,3,4,5,6],type:JSBeams.CH,dT:30,dTh:dTh,alpha:12e-6});
var beam3 = JSBeams.Beam2d.create(node3,node4,{ea:ea,ei:ei,dofs:[5,6,7,8,9],type:JSBeams.HC});
var beam4 = JSBeams.Beam2d.create(node4,node5,{ea:ea,ei:ei,dofs:[7,8,9,10,11],type:JSBeams.CH});
var beam5 = JSBeams.Beam2d.create(node6,node2,{ea:ea,ei:ei,dofs:[12,13,14,2,3],type:JSBeams.CH});

var beams = [beam1,beam2,beam3,beam4,beam5];
var nDofs = 15;
var p = [1,11,12,13,14];
var u = [0,2,3,4,5,6,7,8,9,10];
var dspl = JSMatrix.Vector.Zeros(nDofs)
dspl.set(14,-6e-3);
var nodalLoad = JSMatrix.Vector.Zeros(nDofs)
nodalLoad[7] = -18.;
nodalLoad[8] = 24.;
var solver = JSBeams.LinearStaticSolver.create(beams,u,p,dspl,nodalLoad,true);
solver.update();

var solverDspl = JSMatrix.Vector.create([1.57642579e-02, 0, 1.66282579e-02, 1.25385802e-05, -5.39573847e-04, 1.71270727e-02, 1.24415867e-03, 1.71894823e-02, 1.15130083e-03, 3.09303556e-04, 1.80457241e-02, 0, 0, 0, -0.006]);
if (solver.dspl.sub(solverDspl).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (exOofem)'); }

var beam4dspl = JSMatrix.Vector.create([1.4442e-02, -9.3926e-03, 3.0930e-04, 1.4437e-02, -1.0827e-02, 7.0622e-04]);
if (beam4.dspl.sub(beam4dspl).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (exOofem)'); }

var beam4load = JSMatrix.Vector.create([1.1250e+01, 1.5000e+01, -3.7500e+01, -1.1250e+01, -1.5000e+01, 0]);
if (beam4.load.sub(beam4load).norm() > 1e-6) { noFail=false; alert('TESTS FAILED! (exOofem)'); }

if (noFail) { alert('exOofem passed'); }


Cross section example

exCs.png

var n1 = JSBeams.Node.create(0, -0.1, 1.8);
var n2 = JSBeams.Node.create(0, -0.3, 2.9);
var n3 = JSBeams.Node.create(0, -1.3, 3.4);
var n4 = JSBeams.Node.create(0, -2.9, 2.2);
var n5 = JSBeams.Node.create(0, -1.9, 1.7);
var n6 = JSBeams.Node.create(0, -1.7, 0.6);
var nodes = [n1,n2,n3,n4,n5,n6];
var cs = JSBeams.CrossSection.create(nodes);
cs.update();

if (cs.a - 4.0 > 1e-6) { noFail=false; alert('TESTS FAILED! (exCs)'); }
if (cs.cy - (-1.3) > 1e-6) { noFail=false; alert('TESTS FAILED! (exCs)'); }
if (cs.cz - 2.15 > 1e-6) { noFail=false; alert('TESTS FAILED! (exCs)'); }
if (cs.beta - Math.atan(3/4)-Math.PI/2 > 1e-6) { noFail=false; alert('TESTS FAILED! (exCs)'); }
if (cs.i2 - 16/12 > 1e-6) { noFail=false; alert('TESTS FAILED! (exCs)'); }

if (noFail) { alert('exCs passed'); }

Contact: e-mail
Last update: 22th August 2011
© 2011 - 2022   Jan Stránský
All rights reserved
Valid XHTML 1.1
Valid CSS