123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- 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
|