code 33302; procedure FEM LAG SKEW(X, Y, N, Q, R, F, ORDER, E); value N, ORDER; integer N, ORDER; real procedure Q, R, F; array X, Y, E; begin integer L, L1; real XL1, XL, H, A12, A21, B1, B2, TAU1, TAU2, CH, TL, G, YL, PP, E1, E2, E3, E4, E5, E6; array T, SUPER, SUB, CHI, GI[0:N-1]; procedure ELEMENT MAT VEC EVALUATION 1; begin own real Q2, R2, F2; real Q1, R1, F1, H2, S12; if L=1 then begin Q2:= Q(XL1); R2:= R(XL1); F2:= F(XL1) end; H2:= H/2; S12:= - 1/H; Q1:= Q2; Q2:= Q(XL); R1:= R2; R2:= R(XL); F1:= F2; F2:= F(XL); B1:= H2*F1; B2:= H2*F2; TAU1:= H2*R1; TAU2:= H2*R2; A12:= S12 + Q1/2; A21:= S12 - Q2/2 end ELEMENT MAT VEC EV.; procedure ELEMENT MAT VEC EVALUATION 2; begin own real Q3, R3, F3; real Q1, Q2, R1, R2, F1, F2, S12, S13, S22, X2, H6, H15, C12, C32, A13, A31, A22, A23, A32, B3, TAU3; if L=1 then begin Q3:= Q(XL1); R3:= R(XL1); F3:= F(XL1) end; X2:= (XL1 + XL)/2; H6:= H/6; H15:= H/1.5; Q1:= Q3; Q2:= Q(X2); Q3:= Q(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; S12:= - 1/H/0.375; S13:= - S12/8; S22:= - 2*S12; A12:= S12 + Q1/1.5; A13:= S13 - Q1/6; A21:= S12 - Q2/1.5; A23:= S12 + Q2/1.5; A22:= S22 + TAU2; A31:= S13 + Q3/6; A32:= S12 - Q3/1.5; comment STATIC CONDENSATION; C12:= - A12/A22; C32:= - A32/A22; A12:= A13 + C12*A23; A21:= A31 + C32*A21; 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 own real Q4, R4, F4; real Q1, Q2, Q3, R1, R2, R3, F1, F2, F3, S12, S13, S14, S22, S23, X2, X3, H12, H24, DET, C12, C13, C42, C43, A13, A14, A22, A23, A24, A31, A32, A33, A34, A41, A42, A43, B3, B4, TAU3, TAU4; if L=1 then begin Q4:= Q(XL1); R4:= R(XL1); F4:= F(XL1) end; X2:= XL1 + 0.27639320225*H; X3:= XL - X2 + XL1; H12:= H/12; H24:= H/2.4; Q1:= Q4; Q2:= Q(X2); Q3:= Q(X3); Q4:= Q(XL); R1:= R4; R2:= R(X2); R3:= R(X3); R4:= R(XL); F1:= F4; F2:= F(X2); F3:= F(X3); F4:= F(XL); S12:= -4.8784183052080/H; S13:= 0.7117516385414/H; S14:= -.16666666666667/H; S23:= 25*S14; S22:= -2*S23; 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:= S12 + 0.67418082864578*Q1; A13:= S13 - 0.25751416197912*Q1; A14:= S14 + Q1/12; A21:= S12 - 0.67418082864578*Q2; A22:= S22 + TAU2; A23:= S23 + 0.93169499062490*Q2; A24:= S13 - 0.25751416197912*Q2; A31:= S13 + 0.25751416197912*Q3; A32:= S23 - 0.93169499062490*Q3; A33:= S22 + TAU3; A34:= S12 + 0.67418082864578*Q3; A41:= S14 - Q4/12; A42:= S13 + 0.25751416197912*Q4; A43:= S12 - 0.67418082864578*Q4; comment STATIC CONDENSATION; DET:= A22*A33 - A23*A32; C12:= (A13*A32 - A12*A33)/DET; C13:= (A12*A23 - A13*A22)/DET; C42:= (A32*A43 - A42*A33)/DET; C43:= (A42*A23 - A43*A22)/DET; TAU1:= TAU1 + C12*TAU2 + C13*TAU3 ; TAU2:= TAU4 + C42*TAU2 + C43*TAU3; A12:= A14 + C12*A24 + C13*A34; A21:= A41 + C42*A21 + C43*A31; 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; A12:= 0 end else if L=1 and E2 ^= 0 then begin TAU1:= TAU1 - E1/E2; B1:= B1 - E3/E2 end else if L=N and E5 = 0 then begin TAU2:= 1; A21:= 0; B2:= E6/E4; end else if L=N and E5 ^= 0 then begin TAU2:= TAU2 + E4/E5; B2:= B2 + E6/E5 end B.C.1; procedure FORWARD BABUSKA; if L=1 then begin CHI[0]:= CH:= TL:= TAU1; T[0]:= TL; GI[0]:= G:= YL:= B1; Y[0]:= YL; SUB[0]:= A21; SUPER[0]:= A12; PP:= A21/(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]:= A21; SUPER[L1]:= A12; PP:= A21/(CH - A12); CH:= TAU2 - CH*PP; G:= B2 - G*PP; T[L1]:= TL + TAU1; TL:= TAU2; Y[L1]:= YL + B1; YL:= B2 end FORWARD BABUSKA; procedure BACKWARD BABUSKA; begin PP:= YL; Y[N]:= G/CH; G:= PP; CH:= TL; L:= N; for L:= L - 1 while L >= 0 do begin PP:= SUPER[L]/(CH - SUB[L]); 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 BABUSKA; L:= 0; XL:= X[0]; E1:= E[1]; E2:= E[2]; E3:= E[3]; E4:= E[4]; E5:= E[5]; E6:= E[6]; comment ELEMENTWISE ASSEMBLAGE OF MATRIX AND VECTOR COMBINED WITH FORWARD BABUSKA SUBSTITUTION; for L:= L + 1 while L <= N do begin XL1:= XL; L1:= L - 1; 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 BABUSKA end; BACKWARD BABUSKA; end FEM LAGR; eop