problema fortran

8
Universitatea Tehnică”Gheorghe Asachi”din Iaşi Facultatea de Construcţii şi Instalaţii LUCRAREA NR.3 Calculul grinzii simplu rezemate

Upload: clopotel-paul-gabriel

Post on 21-Oct-2015

27 views

Category:

Documents


0 download

DESCRIPTION

grinda fortran diagrame de moment si forta taietoare

TRANSCRIPT

Page 1: Problema Fortran

Universitatea Tehnică”Gheorghe Asachi”din Iaşi

Facultatea de Construcţii şi Instalaţii

LUCRAREA NR.3 Calculul grinzii simplu rezemate

Page 2: Problema Fortran

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)

Page 3: Problema Fortran

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 *

Page 4: Problema Fortran

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

Page 5: Problema Fortran

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

Page 6: Problema Fortran

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

Page 7: Problema Fortran

Figura 1

Figura 2

Figura 4: Diagrama de forţă tăietoare

Page 8: Problema Fortran

Figura 5: Diagrama de moment încovoietor