close all ; clc; % Script de calcul statique du treillis traite le TP1 % % Fonctions utilisees % statiqueUR : calcul de la reponse statique [U,R] % plotstr : trace du maillage avec ne noeuds et elements % plotdef : trace de la deformee % resultante : calcul de la resultante en x, y, z d'un vecteur nodal % barre_stress : calcul de la contrainte dans un element barre % % Initialisation des variables globales pour un treillis % nddln : nb de ddl par noeud % nnod : nb de noeuds % nddlt : nb de ddl total(=ndln*nnod) % nelt : nb d'elements % nnode : nb de noeuds par element (2) % ndim : dimension du probleme (1D,2D ou 3D) % ncld : nb de conditions de champ impose (dirichlet) % % Coord(nnod,ndim): coordonnees des noeuds % Connec(nelt,2) : connectivites des elements % Typel(nelt) : Type des elements (barre_ke) % Nprop(nelt) : Ne de caracteristique pour chaque element % Prop(nprop,ncar): Tableau des caracteristiques mecaniques (ES, f) % Ncl(1,nddlt) : vaut 1 si le ddl est impose (deplacements imposes) % Vcl(1,nddlt) : valeur du deplacement impose % F (nddlt,1) : vecteur des charges nodales donnees % % L'objectif de scripts de donnees est d'initialiser ses variables globales, % avant de lancer les calculs et d'exploiter les resultats (post-traitement). % global nddln nnod nddlt nelt nnode ndim ncld global Coord Connec Typel Nprop Prop Ncl Vcl F disp(' '); disp('Structure etudiee : treillis traite dans TP1'); disp('Travail de Jovian'); disp('Unites : mm, MPa, kN'); % 1N / mm^2 = 1MPa disp('=================='); % Definition du maillage (X, Y) Coord = [ 0 , 0 ; ... 500 , 0 ; ... 300 , -150 ]; % Nombre de noeuds (3) et dimension du problème (3D) [nnod, ndim] = size(Coord); % Deux degrés de libertés par noeud : u (deplacement selon x) et v (selon y) nddln = 2; % Nb de ddl total nddlt = nddln * nnod; % Definition de la matrice de connectivite i , j Connec=[ 1 , 2 ; ... 1 , 3 ; ... 2 , 3 ]; [nelt, nnode] = size(Connec); % Definition du modele EF : type des elements Typel = 'barre_ke'; for i = 1 : nelt Typel = char('barre_ke', Typel); end % Definition des caracteristiques mecaniques elementaires (ES fx fy) E = 210000 %MPa S1 = 4900 %mm^2 S2 = 2500 %mm^2 Nprop = [1; 2; 2]; % Tableau : ES fx fy Prop = [ E*S2 0 0; ... E*S1 0 0]; % definition des CL en deplacement % Ne du noeud, type sur u et v (1 ddl impose ,0 ddl libre) CL = [ 1 , 0 , 1 ; ... 2 , 1 , 1 ]; Ncl = zeros(1, nddlt); ncld = 0; Vcl = zeros(1, nddlt); % Valeurs des deplacements imposes %Vcl(2)=1; % à utiliser pour imposer une valeur non nulle sur un ddl i for i = 1 : size(CL, 1) for j = 1 : nddln if CL(i, 1+j) == 1 Ncl(1, (CL(i,1)-1) * nddln + j) = 1; ncld = ncld + 1; end end end % Definition des charges nodales (Ne du noeud , Fx , Fy) Charg = [ 3 0 -950000 ]; % Vecteur sollicitation F = zeros(nddlt, 1); for iclf = 1:size(Charg, 1) noeud = Charg(iclf,1); for i = 1 : nddln F((noeud-1)*nddln+i)=F((noeud-1)*nddln+i) + Charg(iclf,i+1); end end [Fx, Fy, Fz] = feval('resultante', F); % Resultante des charges nodales disp('Les variables globales sont initialisees'); disp('Fin de lecture des donnees'); % Trace du maillage pour validation des donnees plotstr reponse = input('Voulez-vous continuer? O/N [O]: ','s'); if isempty(reponse) | reponse =='O' U = zeros(nddlt, 1); R = zeros(nddlt, 1); [U(:, 1), R(:, 1)] = statiqueUR; % Resolution du probleme % Format d'impression des vecteurs form =' %8.3e %8.3e %8.3e '; format = [form(1:8*nddln),' \n']; disp(' ');disp('------- deplacements nodaux sur (x,y,z) ----------'); fprintf(format,U) plotdef(U) % Post-traitement disp(' ');disp('------- Efforts aux appuis ----------'); fprintf(format,R(:,1)); [Rx,Ry,Rz] = feval('resultante', R); % Resultantes et reactions disp(' '); fprintf('La resultante des charges nodales en (x,y,z) est : %8.3e %8.3e %8.3e \n',Fx,Fy,Fz); fprintf('La resultante des charges reparties en (x,y,z) est : %8.3e %8.3e %8.3e \n',-Rx-Fx,-Ry-Fy,-Rz-Fz); fprintf('La resultante des efforts aux appuis en (x,y,z) est : %8.3e %8.3e %8.3e \n',Rx,Ry,Rz); disp(' ');disp('------- Contraintes sur les elements ----------'); for iel=1:nelt %----- boucle sur les elements loce=[]; for i=1:nnode loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]];end Ue=U(loce); Ne = feval('barre_stress',iel,Ue); fprintf('Dans l''element %3i l''effort normal est %8.3e\n',iel,Ne) end clear all return else disp(' ');disp('---------------- arret du calcul----------------'); clear all end