problema fortran
DESCRIPTION
grinda fortran diagrame de moment si forta taietoareTRANSCRIPT
Universitatea Tehnică”Gheorghe Asachi”din Iaşi
Facultatea de Construcţii şi Instalaţii
LUCRAREA NR.3 Calculul grinzii simplu rezemate
1.Enunţul problemei
Să se traseze diagramele de moment încovoietor şi forţă tăietoare pentru grinda
simplu rezemată din figură.
2.Analiza problemei
a) Date de intrare: a,b,c,d,e,f,q1,q2,P1,P2, M1
b) Date de ieşire: VA,VB ( reacţiunile din reazeme)
Trasarea diagramelor de eforturi
Calculul reacțiunilor
VA=(q1/2.0*c*(2.0/3.0*c+d+e+f)+M1-M2-P1*(c+d+e+f)-q2*d*(d/2.0+e+f))/L
VB=(1.0/2.0*q1*c*(a+b+1.0/3.0*c)-M1+M2-P1*(a+b)-q2*d*(d/2.0+a+b+c))/L
Verificare VA+VB+P1-1.0/2.0*q1*c+q2*d= 0
Calculul eforturilor în fiecare secțiune
px(i)<a
py(i)=VA
pz(i)=VA*px(i)
px(i)<(a+b)
py(i)=VA
pz(i)=VA*px(i)-M1
px(i)<(a+b+c)
py(i)=VA+P1-q1*(px(i)-a-b)+1.0/2.0*q1/c*(px(i)-a-b)**2
pz(i)=VA*px(i)-M1+P1*(px(i)-a-b)-q1/2.0*(px(i)-a-b)**2+1.0/6.0*q1/c*(px(i)-a-
b)**3
px(i)<(a+b+c+d)
py(i)=VA+P1-q1*c/2.0+q2*(px(i)-a-b-c)
pz(i)=VA*px(i)-M1+P1*(px(i)-a-b)-q1*c/2.0*(px(i)-a-b-1.0/3.0*c)+q2/2.0*(px(i)-a-b-
c)**2
px(i)<(a+b+c+d+e)
py(i)=VA+P1-q1*c/2.0+q2*d
pz(i)=VA*px(i)-M1+P1*(px(i)-a-b)-q1*c/2.0*(px(i)-a-b-1.0/3.0*c)+q2*d*(px(i)-a-b-
c-d/2.0)
px(i)<(a+b+c+d+e+f)
py(i)=VA+P1-q1*c/2.0+q2*d
pz(i)=VA*px(i)-M1+P1*(px(i)-a-b)-q1*c/2.0*(px(i)-a-b-1.0/3.0*c)+q2*d*(px(i)-a-b-
c-d/2.0)+M2
3. Programarea problemei
Pentru rezolvarea problemei s-a folosit limbajul Fortran 90 sub implementarea Intel®
versiunea de compilator 11.0.061 iar lucrul cu formatul sursă, compilarea, linkeditarea şi
depanarea programului s-au efectuat în mediul Microsoft® Visual Studio
® versiunea 8.
Programul sursă în limbaj Fortran 90
program grindaSD
! trasare T,M la o grinda simplu rezemata
! varianta 1, dialog minimal
use iflogm
implicit none
include 'resource.fd'
type(dialog) numint
logical rez
character*20 text
real a,b,c,d,e,f,q1,q2,P1,P2,M1,M2,VA,VB,L,verif
integer bapel,ce,eroare
external calb,trasare
common a,b,c,d,e,f,q1,q2,P1,P2,M1,M2,VA,VB,L,verif,eroare
rez=dlginit(fereastra,numint)
rez=dlgsetsub(numint,txta,calb)
rez=dlgsetsub(numint,txtb,calb)
rez=dlgsetsub(numint,txtc,calb)
rez=dlgsetsub(numint,txtd,calb)
rez=dlgsetsub(numint,txte,calb)
rez=dlgsetsub(numint,txtf,calb)
rez=dlgsetsub(numint,txtq1,calb)
rez=dlgsetsub(numint,txtq2,calb)
rez=dlgsetsub(numint,txtP1,calb)
rez=dlgsetsub(numint,txtP2,calb)
rez=dlgsetsub(numint,txtM1,calb)
rez=dlgsetsub(numint,txtM2,calb)
rez=dlgsetsub(numint,btras,trasare)
rez=dlgmodal(numint)
print *, 'Sfarsitul programului'
read *
end program grindaSD
subroutine calb(numint,bapel,ce)
use iflogm
implicit none include 'resource.fd'
type(dialog) numint
integer rez,st1,st2,st3,st4,st5,st6,st7,st8,st9,st10,st11,st12,eroare
character*20 text
real a,b,c,d,e,f,P1,P2,q1,q2,M1,M2,VA,VB,L,verif
integer bapel,ce
common a,b,c,d,e,f,P1,P2,q1,q2,M1,M2,VA,VB,L,eroare
rez=dlgget(numint,txta,text)
read(text,1,iostat=st1) a
1 format(f15.0)
rez=dlgget(numint,txtb,text)
read(text,1,iostat=st2) b
rez=dlgget(numint,txtc,text)
read(text,1,iostat=st3) c
rez=dlgget(numint,txtd,text)
read(text,1,iostat=st4) d
rez=dlgget(numint,txte,text)
read(text,1,iostat=st5) e
rez=dlgget(numint,txtf,text)
read(text,1,iostat=st6) f
rez=dlgget(numint,txtP1,text)
read(text,1,iostat=st7) P1
rez=dlgget(numint,txtP2,text)
read(text,1,iostat=st8) P2
rez=dlgget(numint,txtq1,text)
read(text,1,iostat=st9) q1
rez=dlgget(numint,txtq2,text)
read(text,1,iostat=st10) q2
rez=dlgget(numint,txtM1,text)
read(text,1,iostat=st11) M1
rez=dlgget(numint,txtM2,text)
read(text,1,iostat=st12) M2
if ((st1==0).and.(a>0.).and.(st2==0).and.(b>0.).and.(st3==0).and.(c>0.).and.(st4==0).and.(d>0.)
.and.(st5==0).and.(e>0.).and.(st6==0).and.(f>0.) .and. &
(st7==0).and.(st8==0).and.(st9==0).and.(st10==0).and.(st11==0).and.(st12==0))then
rez=dlgset(numint,txtmesaj,'date corecte')
eroare=0
L=a+b+c+d+e+f
write(text,2)L
2 format(f7.2)
rez=dlgset(numint,txtL,text)
VA=(q1/2.0*c*(2.0/3.0*c+d+e+f)+M1-M2-P1*(c+d+e+f)-q2*d*(d/2.0+e+f))/L
write(text,2)VA
rez=dlgset(numint,txtVA,text)
VB=(1.0/2.0*q1*c*(a+b+1.0/3.0*c)-M1+M2-P1*(a+b)-q2*d*(d/2.0+a+b+c))/L
write(text,2)VB
rez=dlgset(numint,txtVB,text)
verif=VA+VB+P1-1.0/2.0*q1*c+q2*d
write(text,2) verif
rez=dlgset(numint,txtverif,text)
else rez=dlgset(numint,txtmesaj,'Eroare la citire date')
eroare=1
rez=dlgset(numint,txtL,'')
rez=dlgset(numint,txtVA,'')
rez=dlgset(numint,txtVB,'')
rez=dlgset(numint,txtverif,'')
endif end subroutine calb
subroutine trasare()
use AvFRT
use AvObjMod
use iflogm
implicit none include 'resource.fd'
type(dialog) numint
integer rez,eroare
character*20 text
real a,b,c,d,e,f,P1,P2,q1,q2,M1,M2,VA,VB,L,verif
integer bapel,ce
common a,b,c,d,e,f,P1,P2,q1,q2,M1,M2,VA,VB,L,eroare
integer,parameter::imax=30001
real px(imax),py(imax),pL,pz(imax)
integer i,stare,vid,hroot,hg
rez=dlgget(numint,txtmesaj,text)
if(eroare==0)then
write(*,*)('Trasare posibila')
pL=L/(imax-1)
do i=1,imax
px(i)=(i-1)*pL
if(px(i)<a)then
py(i)=VA
pz(i)=VA*px(i)
elseif(px(i)<(a+b))then
py(i)=VA
pz(i)=VA*px(i)-M1
elseif (px(i)<(a+b+c)) then
py(i)=VA+P1-q1*(px(i)-a-b)+1.0/2.0*q1/c*(px(i)-a-b)**2
pz(i)=VA*px(i)-M1+P1*(px(i)-a-b)-q1/2.0*(px(i)-a-b)**2+1.0/6.0*q1/c*(px(i)-a-b)**3
elseif (px(i)<(a+b+c+d))then
py(i)=VA+P1-q1*c/2.0+q2*(px(i)-a-b-c)
pz(i)=VA*px(i)-M1+P1*(px(i)-a-b)-q1*c/2.0*(px(i)-a-b-1.0/3.0*c)+q2/2.0*(px(i)-a-b-
c)**2
elseif (px(i)<(a+b+c+d+e))then
py(i)=VA+P1-q1*c/2.0+q2*d
pz(i)=VA*px(i)-M1+P1*(px(i)-a-b)-q1*c/2.0*(px(i)-a-b-1.0/3.0*c)+q2*d*(px(i)-a-b-c-
d/2.0)
elseif (px(i)<(a+b+c+d+e+f))then
py(i)=VA+P1-q1*c/2.0+q2*d
pz(i)=VA*px(i)-M1+P1*(px(i)-a-b)-q1*c/2.0*(px(i)-a-b-1.0/3.0*c)+q2*d*(px(i)-a-b-c-
d/2.0)+M2
endif
pz(i)=-pz(i)
enddo call AvStartWatch(loc(px),1,shape(px),AV_REAL4,'px',stare)
call AvStartWatch(loc(py),1,shape(py),AV_REAL4,'py',stare)
call AvStartWatch(loc(pz),1,shape(pz),AV_REAL4,'pz',stare)
call AvNewViewer(vid)
hroot=AvGetObject('/')
call AvCreateGraph2DObj(AvGraphs(hroot),'FTaiet|plot:xyplot,xsource:/px,ysource:/py',hg)
call AvCreateGraph2DObj(AvGraphs(hroot),'MIncov|plot:xyplot,xsource:/px,ysource:/pz',hg)
call AvVisible(vid,1,stare)
call AvSaveImage('grafic1.jpg','graph:/FTaiet',1200,1600,72,stare)
call AvSaveImage('grafic2.jpg','graph:/MIcov',1200,1600,72,stare)
else write(*,*)('Trasare imposibila')
endif endsubroutine trasare
4. Rezultate
Figura 1
Figura 2
Figura 4: Diagrama de forţă tăietoare
Figura 5: Diagrama de moment încovoietor