1 |
- function [U,R] = statiqueUR
% Calcul, assemblage et resolution d'un probleme statique KU = F
% la resolution apres elimination des CL (ligne - colonne)
%================================================================
% appel : [U,R] = statiqueUR
% en sortie valeurs nodale du champ inconnu (deplacements)
% et des flux inconnus (reactions)
%
% H.Oudin
% Vos commentaires pour ameliorer ce script seront bienvenus.
% mailto : herve.oudin@ec-nantes.fr
%================================================================
global nddln nddlt nelt nnode ncld
global Connec Typel Ncl Vcl F
t0=cputime; %----- initialisation du temps de calcul
K=zeros(nddlt); %----- initialisation de la matrice rigidite
Fg=zeros(nddlt,1); %----- initialisation du vecteur force generalisee
Kr=zeros(ncld,nddlt);R=zeros(ncld,1);
for iel=1:nelt %----- boucle sur les elements
[Ke,Fe] = feval(Typel(iel,:),iel);
loce=[]; %----- localisation des ddl de l'element
for i=1:nnode
if Connec(iel,i) > 0
loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]];
end
end;
K(loce,loce)=K(loce,loce) + Ke; %----- assemblage
Fg(loce)=Fg(loce) + Fe;
end
F = F + Fg; %----- vecteur du chargement
ir=0;
for i=1:nddlt %----- prise en compte des conditions aux limites
if ( Ncl(i) == 1 ) %----- valeurs imposes dans F
F = F - K(:,i)*Vcl(i); ir=ir+1;
end
end
for i=nddlt:-1:1
if ( Ncl(i) == 1 )
Kr(ir,:) = K(i,:); %----- pour le calcul des reactions
Kr(:,i) = []; R(ir,1) = -F(i); ir = ir-1;
K(i,:) = []; K(:,i) = []; %----- supression ligne colonne dans K
F(i)=[]; %----- supression ligne dans F
end
end
%disp(K);disp(F);
Sol = K\ F; %----- resolution
%disp(Sol);
ir=0;
for i=1:nddlt %----- on replace les valeurs imposees
if ( Ncl(i) == 1 ) U(i,1) = Vcl(i);
else ir=ir+1; U(i,1)=Sol(ir);
end
end
R(:,1) = R(:,1) + Kr*Sol; %----- calcul des reactions (ddl imposes)
ir=nddlt-ir; %----- on etend a l'ensemble des ddl
for i=nddlt:-1:1
if ( Ncl(i) == 0 ) R(i,1) = 0;
else R(i,1)=R(ir,1);ir=ir-1;
end
end
|