MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Automating a finite element procedure

  • To: mathgroup at smc.vnet.net
  • Subject: [mg108112] Automating a finite element procedure
  • From: Kamil <meetkamil at gmail.com>
  • Date: Mon, 8 Mar 2010 06:16:57 -0500 (EST)

Hello all,

I have this function in Mathematica:
BeamElement[EI_, {x1_, x2_}] := Module[{L = x2 - x1, ke, kt},
   ke = {{(12*EI)/L^3, (6*EI)/L^2, -((12*EI)/L^3), (6*EI)/
       L^2}, {(6*EI)/L^2, (4*EI)/L, -((6*EI)/L^2), (2*EI)/
       L}, {-((12*EI)/L^3), -((6*EI)/L^2), (12*EI)/
       L^3, -((6*EI)/L^2)}, {(6*EI)/L^2, (2*EI)/
       L, -((6*EI)/L^2), (4*EI)/L}};
   kt = {{6/(5 L), 1/10, -(6/(5 L)), 1/10}, {1/10, (2 L)/
      15, -(1/10), -(L/30)}, {-(6/(5 L)), -(1/10), 6/(
      5 L), -(1/10)}, {1/10, -(L/30), -(1/10), (2 L)/15}}; {ke, kt}
   ];

I have called the above function with the following and it worked
well:
{k[1], kt[1]} = BeamElement[EI, nodes[[{1, 2}]]];
{k[2], kt[2]} = BeamElement[EI, nodes[[{2, 3}]]];
{k[3], kt[3]} = BeamElement[EI, nodes[[{3, 4}]]];
lm[1] = {1, 2, 3, 4};
lm[2] = {3, 4, 5, 6};
lm[3] = {5, 6, 7, 8};
K = Table[0, {8}, {8}];
R = Table[0, {8}, {8}];
Do[K[[lm[i], lm[i]]] += ke[i]; R[[lm[i], lm[i]]] += kt[i], {i, 1, 3}];

Now; I tried to automate it using this procedure and it is not
working:

Do[{ke[i], kt[i]} =
   BucklingLinElement[EI, nodes[[{(i - 1) + 1, (i - 1) + 2}]]], {i, 1,
    3}];
K = Table[0, {8}, {8}]; (R = Table[0, {8}, {8}]) // MatrixForm;
Do[lm[i] = {(2 i - 1), (2 i - 1) + 1, (2 i - 1) + 2, (2 i - 1) + 3};
  K[[lm[i], lm[i]]] += ke[i]; R[[lm[i], lm[i]]] += kt[i], {i, 1, 3}];

I would be grateful to know where the wrong is. Thank you.



  • Prev by Date: Re: Forcing mathematica to output a certain form
  • Next by Date: Re: Modification of Variable in NDSolve
  • Previous by thread: Re: Why can't Mathematica tell when something is algebraically zero?
  • Next by thread: Re: Automating a finite element procedure