problema fortran

Post on 21-Oct-2015

29 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

grinda fortran diagrame de moment si forta taietoare

TRANSCRIPT

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

top related