123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- close all ; clc;
- % Donnees de la colonne etudiee dans les exercices de cours
- % Colonne
- % avec h=100 , E = 1000 , S=1 , mg = 6, maillage : 3 elements de degre 1
- %
- % 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
- % barre_compar : comparaison avec la solution analytique
- %
- % Initialisation des variables globales
- % 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
- global nddln nnod nddlt nelt nnode ndim ncld
- global Coord Connec Typel Nprop Prop Ncl Vcl F
- disp(' ');
- disp('Structure etudiee : Colonne traitee en exercice de cours N 8');
- disp('==================');
- % definition du maillage
- h = 100; % definition des coordonnees des noeuds
- Coord=[0 ; h ; 3*h ; 6*h ];
- [nnod,ndim]=size(Coord);
- nddln=1; nddlt=nddln*nnod;
-
- Connec=[ 1 , 2 ; ... % definition de la matrice de connectivite
- 2 , 3 ; ...
- 3 , 4 ];
- [nelt,nnode]=size(Connec);
- % definition du modele EF : type des elements
- Typel = 'barre_ke'; % definition du type des elements
- for i=1:nelt
- Typel = char('barre_ke',Typel);
- end
- % definition des caracteristiques elementaires (ES fx)
- Nprop=[1;1;1]; % pour chaque element Ne de la propriete
- Prop =[1000 -0.01]; % tableau des valeurs de ES fx
- % definition des CL en deplacement
- CL=[ 1 , 1 ]; ... % Ne du noeud, type (1 ddl impose, 0 ddl libre)
- Ncl=zeros(1,nddlt);ncld=0;
- Vcl=zeros(1,nddlt); % Valeurs des deplacements imposes
- 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
- Charg=[ 4 0 ]; % Ne du noeud , Fx
- F=zeros(nddlt,1); % vecteur sollicitation
- 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
- % trace du maillage pour validation des donnees
- plotstr
- reponse = '';
- %%reponse = input('Voulez-vous continuer? O/N [O]: ','s');
- if isempty(reponse) | reponse =='O'
- %clc; echo on
- % echo off
- 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
- reponse = input('Voulez-vous comparer avec la solution analytique? O/N [O]: ','s');
- if isempty(reponse) | reponse =='O'
- feval('barre_compar',U); %----- comparaison avec la solution analytique
- end
- return
- else
- disp(' ');disp('---------------- arret du calcul----------------');
- clear all
- end
|