Sunteți pe pagina 1din 13

Universitatea Tehnic Gh.

Asachi Iai Facultatea de Construcii si Instalaii Specializarea : Ingineria Cldirilor

PROGRAMARE AVANSAT PENTRU PROIECTARE I CERCETARE N CONSTRUCII LUCRAREA NR. 3

Masterand : Olteanu Marius

Iai, 2011 2012

DIAGRAME DE EFORTURI PENTRU O GRIND DAT

1. Enunul problemei

S se traseze diagramele de momente ncovoietoare i de fore tietoare pentru urmtoarea grind :

2. Analiza problemei
Date de intrare: a ,b, c, d ,e, f, g, h, M1, q1, q2,P1, M2 Date de ieire:diagrame de eforturi Calculul deschiderii grinzii: L=a+b+c+d + e + f+ g + h Calculul reaciunilor:

Verificarea reaciunilor:

VA+VB+q2*f-q1*d-p1

Olteanu Marius

Page 2

Eforturile secionale Funcia for taietoare:

Funcia for taietoare:

Olteanu Marius

Page 3

3. Programarea problemei
Problema a fost rezolvat folosind limbajul Fortran 90 sub implementarea Intel versiunea 11.0.061 in mediul de programare Microsoft Visual Studio 2008.

program grind use iflogm implicit none include 'resource.fd' type (dialog)fint logical lret external dateint, calcul integer rtr,ce,de real a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2 common a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2,idi integer idi lret=dlginit(fer,fint) lret=dlgsetsub(fint,aa,dateint) lret=dlgsetsub(fint,bb,dateint) lret=dlgsetsub(fint,cc,dateint) lret=dlgsetsub(fint,dd,dateint) lret=dlgsetsub(fint,ee,dateint) lret=dlgsetsub(fint,ff,dateint) lret=dlgsetsub(fint,gg,dateint) lret=dlgsetsub(fint,hh,dateint) lret=dlgsetsub(fint,mm1,dateint) lret=dlgsetsub(fint,pp1,dateint) lret=dlgsetsub(fint,qq1,dateint) lret=dlgsetsub(fint,mm2,dateint) lret=dlgsetsub(fint,qq2,dateint) lret=dlgsetsub(fint,tras,calcul) lret=dlgmodal(fint) read * end program grind subroutine dateint(fint,ce,de) use iflogm implicit none include 'resource.fd' type (dialog)fint logical lret character*20 text character*1 ch integer ce,de,eret,idi real a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2 common a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2,idi idi=1 lret=dlgget(fint,aa,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) a

Olteanu Marius

Page 4

if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(a >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti a') return endif lret=dlgget(fint,bb,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) b if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(b >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti b') return endif lret=dlgget(fint,cc,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) c if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(c >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti c') return endif lret=dlgget(fint,dd,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) d if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(d >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti d') return endif lret=dlgget(fint,ee,text)

Olteanu Marius

Page 5

if(text/='') then read (text,*) ch read (text,*,iostat=eret) e if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(e >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti e') return endif lret=dlgget(fint,ff,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) f if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(f >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti f') return endif lret=dlgget(fint,gg,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) g if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(g >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti g') return endif lret=dlgget(fint,hh,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) h if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(h >0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti h') return

Olteanu Marius

Page 6

endif lret=dlgget(fint,mm1,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) m1 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(m 1>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti M1') return endif lret=dlgget(fint,pp1,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) p1 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(p 1>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti P1') return endif lret=dlgget(fint,qq1,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) q1 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(q 1>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti q1') return endif lret=dlgget(fint,mm2,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) m2 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(m 2>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif

Olteanu Marius

Page 7

else lret=dlgset(fint,msj,'Introduceti return endif

M2')

lret=dlgget(fint,qq2,text) if(text/='') then read (text,*) ch read (text,*,iostat=eret) q2 if((eret==0).and.(ch/='f').and.(ch/='F').and.(ch/='t').and.(ch/='T').and.(q 2>0)) then lret=dlgset(fint,msj,'') else lret=dlgset(fint,msj,'eroare la datele de intrare') return endif else lret=dlgset(fint,msj,'Introduceti q2') return endif idi=0 lret=dlgset(fint,msj,'Datele de intrare sunt corecte.') write(*,*) end subroutine subroutine calcul(fint,ce,de) use iflogm use avobjmod use avfrt implicit none include 'resource.fd' type (dialog)fint logical lret character*20 text character*1 ch integer ce,de,eret,idi,i,st,vid,hroot,hg real a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2,verif,L common a,b,c,d,e,f,g,h,m1,p1,q1,m2,q2,idi parameter nrint=1000 real xx(nrint+1),Tx(nrint+1),Mx(nrint+1),VA,VB if(idi==0) then !date de intrare corecte lret=dlgset(fint,msj,'trasare posibila') write (*,*) 'trasare posibila' L=a+b+c+d+e+f+g+h write(*,*) 'L=',L VA=1/L*(q1*d*(d/2+e+f+g+h)-q2*f*(f/2+g+h)+p1*h-m1+m2) VB=1/L*(p1*(L-h)-q2*f*(L-f/2-g-h)+q1*d*(a+b+c+d/2)+m1-m2) verif=VA+VB+q2*f-q1*d-p1 write(*,*) 'verif=',verif write(text,*)VA lret=dlgset(fint,vva,text) write(text,*)VB lret=dlgset(fint,vvb,text) write(text,*)verif lret=dlgset(fint,verificare,text) xx(1)=0. Tx(1)=VA mx(1)=0. xx(nrint+1)=L

Olteanu Marius

Page 8

Tx(nrint+1)=-VB Mx(nrint+1)=0. do i=2,nrint xx(i)=xx(i-1)+L/nrint if (xx(i)<a) then !write(*,*) 'intervalul 1' Tx(i)=VA Mx(i)=VA*xx(i) elseif (xx(i)<(a+b)) then !write(*,*) 'intervalul 2' Tx(i)=VA Mx(i)=VA*xx(i)+m1 elseif (xx(i)<(a+b+c)) then !write(*,*) 'intervalul 3' Tx(i)=VA Mx(i)=VA*xx(i)+m1-m2 elseif (xx(i)<(a+b+c+d)) then !write(*,*) 'intervalul 4' Tx(i)=VA-q1*(xx(i)-a-b-c) Mx(i)=VA*xx(i)+m1-m2-q1*(xx(i)-a-b-c)**2/2 elseif (xx(i)<(a+b+c+d+e)) then !write(*,*) 'intervalul 5' Tx(i)=VA-q1*d Mx(i)=VA*xx(i)+m1-m2-q1*d*(xx(i)-a-b-c-d/2) elseif (xx(i)<(a+b+c+d+e+f)) then !write(*,*) 'intervalul 6' Tx(i)= VA-q1*d+q2*(xx(i)-(a+b+c+d+e)) Mx(i)=VA*xx(i)+m1-m2-q1*d*(xx(i)-a-b-c-d/2)+q2*((xx(i)-(a+b+c+d+e))**2)/2 elseif (xx(i)<(a+b+c+d+e+f+g)) then !write(*,*) 'intervalul 7' Tx(i)=VA-q1*d+q2*f Mx(i)=VA*xx(i)+m1-m2-q1*d*(xx(i)-a-b-c-d/2)+q2*f*(xx(i)-(a+b+c+d+e+f/2)) else !write(*,*) 'intervalul 8' Tx(i)=VA-q1*d+q2*f-p1 Mx(i)=VA*xx(i)+m1-m2-q1*d*(xx(i)-a-b-c-d/2)+q2*f*(xx(i)-(a+b+c+d+e+f/2))p1*(xx(i)-(L-h)) end if Mx(i)=-Mx(i) enddo call avstartwatch(loc(xx),1,shape(xx),av_real4,'xx',st) call avstartwatch(loc(Tx),1,shape(Tx),av_real4,'Tx',st) call avstartwatch(loc(Mx),1,shape(Mx),av_real4,'Mx',st) call avnewviewer(vid) hroot=avgetobject('/') call avcreategraph2dobj(avgraphs(hroot),'diagft|plot:xyplot,xsource:/xx,ysource: /Tx',hg) call avcreategraph2dobj(avgraphs(hroot),'diagm|plot:xyplot,xsource:/xx,ysource:/ Mx',hg) call avvisible(vid,1,st) else !eroare la datele de intrare lret=dlgset(fint,msj,'trasare imposibila') write (*,*) 'trasare imposibila' end if end subroutine

Olteanu Marius

Page 9

4. Exemplu de calcul

Fig 1.1

Olteanu Marius

Page 10

Fig. 1.2

Fig. 1.3
Olteanu Marius Page 11

Fig. 1.4 : Trasarea diagramei de for tietoare

Fig. 1.5 : Trasarea diagramei de moment ncovoietor


Olteanu Marius Page 12

Se observ faptul c pentru valori negative ale dimensiunilor grinzii nu se pot trasa diagrame. Valabil acest lucru i pentru introducerea de la tastatur a caracterelor.

5. Concluzii i recomandri
Diagramele pot fi trasate doar cu ajutorul programelor Microsoft Visual Studio sub compilatorul Fortran ,iar trasarea propriu zis se realizeaz cu ajutorul programului Intel Array Viewer.

Olteanu Marius

Page 13

S-ar putea să vă placă și