code 33300;
procedure FEM LAG SYM(X, Y, N, P, R, F, ORDER, E);
value N, ORDER; integer N, ORDER;
real procedure P, R, F;
array X, Y, E;
begin integer L, L1;
real XL1, XL, H, A12, B1, B2, TAU1, TAU2, CH, TL, G, YL, PP,
P1, P2, P3, P4, R1, R2, R3, R4, F1, F2, F3, F4,
E1, E2, E3, E4, E5, E6;
array T, SUB, CHI, GI[0:N-1];
procedure ELEMENT MAT VEC EVALUATION 1;
begin real H2;
if L=1 then
begin P2:= P(XL1); R2:= R(XL1); F2:= F(XL1) end;
P1:= P2; P2:= P(XL); R1:= R2; R2:= R(XL); F1:= F2; F2:= F(XL);
H2:= H/2; B1:= H2*F1; B2:= H2*F2; TAU1:= H2*R1; TAU2:= H2*R2;
A12:= -0.5*(P1 + P2)/H
end ELAN. M.V. EV.;
procedure ELEMENT MAT VEC EVALUATION 2;
begin real X2, H6, H15, B3, TAU3, C12, C32, A13, A22, A23;
if L=1 then
begin P3:= P(XL1); R3:= R(XL1); F3:= F(XL1) end;
X2:= (XL1 + XL)/2; H6:= H/6; H15:= H/1.5;
P1:= P3; P2:= P(X2); P3:= P(XL);
R1:= R3; R2:= R(X2); R3:= R(XL);
F1:= F3; F2:= F(X2); F3:= F(XL);
B1:= H6*F1; B2:= H15*F2; B3:= H6*F3;
TAU1:= H6*R1; TAU2:= H15*R2; TAU3:= H6*R3;
A12:= -(2*P1 + P3/1.5)/H; A13:= (0.5*(P1 + P3) - P2/1.5)/H;
A22:= (P1 + P3)/H/0.375 + TAU2; A23:= -(P1/3 + P3)*2/H;
comment STATIC CONDENSATION;
C12:= - A12/A22; C32:= - A23/A22; A12:= A13 + C32*A12;
B1:= B1 + C12*B2; B2:= B3 + C32*B2;
TAU1:= TAU1 + C12*TAU2; TAU2:= TAU3 + C32*TAU2
end ELEMENT MAT VEC EVALUATION 2;
procedure ELEMENT MAT VEC EVALUATION 3;
begin real X2, X3, H12, H24, DET, C12, C13, C42, C43,
A13, A14, A22, A23, A24, A33, A34, B3, B4, TAU3, TAU4;
if L=1 then
begin P4:= P(XL1); R4:= R(XL1); F4:= F(XL1) end;
X2:= XL1 + 0.27639320225*H; X3:= XL - X2 + XL1;
H12:= H/12; H24:= H/2.4;
P1:= P4; P2:= P(X2); P3:= P(X3); P4:= P(XL);
R1:= R4; R2:= R(X2); R3:= R(X3); R4:= R(XL);
F1:= F4; F2:= F(X2); F3:= F(X3); F4:= F(XL);
B1:= H12*F1; B2:= H24*F2; B3:= H24*F3; B4:= H12*F4;
TAU1:= H12*R1; TAU2:= H24*R2; TAU3:= H24*R3; TAU4:= H12*R4;
A12:= -(+ 4.04508497187450*P1
+ 0.57581917135425*P3
+ 0.25751416197911*P4)/H;
A13:= (+ 1.5450849718747*P1
- 1.5075141619791*P2
+ 0.6741808286458*P4)/H;
A14:= ((P2 + P3)/2.4 - (P1 + P4)/2)/H;
A22:= (5.454237476562*P1 + P3/.48 +.79576252343762*P4)/H + TAU2;
A23:= - (P1 + P4)/(H*0.48);
A24:= (+ 0.67418082864575*P1
- 1.50751416197910*P3
+ 1.54508497187470*P4)/H;
A33:= (.7957625234376*P1 + P2/.48 + 5.454237476562*P4)/H + TAU3;
A34:= -(+ 0.25751416197911*P1
+ 0.57581917135418*P2
+ 4.0450849718747*P4)/H;
comment STATIC CONDENSATION;
DET:= A22*A33 - A23*A23;
C12:= (A13*A23 - A12*A33)/DET;
C13:= (A12*A23 - A13*A22)/DET;
C42:= (A23*A34 - A24*A33)/DET;
C43:= (A24*A23 - A34*A22)/DET;
TAU1:= TAU1 + C12*TAU2 + C13*TAU3;
TAU2:= TAU4 + C42*TAU2 + C43*TAU3;
A12:= A14 + C42*A12 + C43*A13;
B1:= B1 + C12*B2 + C13*B3;
B2:= B4 + C42*B2 + C43*B3
end ELEMENT MAT VEC EVALUATION 3;
procedure BOUNDARY CONDITIONS;
if L=1 and E2 = 0 then
begin TAU1:= 1; B1:= E3/E1;B2:= B2 - A12*B1;
TAU2:= TAU2 - A12; A12:= 0 end
else if L=1 and E2 ^= 0 then
begin real AUX; AUX:= P1/E2; TAU1:= TAU1 - AUX*E1 ;
B1:= B1 - E3*AUX
end else if L=N and E5 = 0 then
begin TAU2:= 1; B2:= E6/E4;
B1:= B1 - A12*B2; TAU1:= TAU1 - A12; A12:= 0
end else if L=N and E5 ^= 0 then
begin real AUX; AUX:= P2/E5;
TAU2:= TAU2 + AUX*E4; B2:= B2 + AUX*E6
end B.C.1;
procedure FORWARD BABUSHKA;
if L=1 then
begin CHI[0]:= CH:= TL:= TAU1; T[0]:= TL;
GI[0]:= G:= YL:= B1; Y[0]:= YL;
SUB[0]:= A12; PP:= A12/(CH - A12);
CH:= TAU2 - CH*PP; G:= B2 - G*PP; TL:= TAU2; YL:= B2
end else
begin CHI[L1]:= CH:= CH + TAU1;
GI[L1]:= G:= G + B1;
SUB[L1]:= A12; PP:= A12/(CH - A12);
CH:= TAU2 - CH*PP; G:= B2 - G*PP;
T[L1]:= TL + TAU1; TL:= TAU2;
Y[L1]:= YL + B1; YL:= B2
end FORWARD BABUSHKA 1;
procedure BACKWARD BABUSHKA;
begin PP:= YL; Y[N]:= G/CH;
G:= PP; CH:= TL; L:= N;
for L:= L - 1 while L >= 0 do
begin PP:= SUB[L]; PP:= PP/(CH - PP);
TL:= T[L]; CH:= TL - CH*PP;
YL:= Y[L]; G:= YL - G*PP;
Y[L]:=(GI[L] + G - YL)/(CHI[L] + CH - TL)
end
end BACKWARD BABUSHKA;
L:= 0; XL:= X[0];
E1:= E[1]; E2:= E[2]; E3:= E[3]; E4:= E[4]; E5:= E[5]; E6:= E[6];
for L:= L + 1 while L <= N do
begin L1:= L - 1; XL1:= XL; XL:= X[L]; H:= XL - XL1;
if ORDER = 2 then ELEMENT MAT VEC EVALUATION 1 else
if ORDER = 4 then ELEMENT MAT VEC EVALUATION 2 else
ELEMENT MAT VEC EVALUATION 3;
if L=1 or L=N then BOUNDARY CONDITIONS;
FORWARD BABUSHKA
end;
BACKWARD BABUSHKA;
end FEM LAG SYM;
eop