documentatie program diagrame

Post on 20-Jan-2016

26 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Trasare diagrame eforturi Fortran

TRANSCRIPT

Universitatea Tehnică ”Gheorghe Asachi” din IașiFacultatea de Construcții și Instalații

Program de master – Inginerie Structuralã

Tema nr.3

ianuarie 2014 – Iași

Portofoliu de programe în limbajul Fortran

1. Calcul și trasare diagrame eforturi

Enunțul problemei

Să se scrie un program în limbajul Fortran care să calculeze și sã traseze diagramele de variație ale momentului încovoietor și forței tãietoare pentru grinda cu rezemarea și încarcarea de mai jos.

Analiza problemei

Date de intrare: intensitãțile încãrcãrilor M1,M2, P1, q1, q2, precum și lungimile segmentelor de barã –a,b,c,d,e,f. Date de ieșire: Graficele de variație moment încovoietor și forțã tãietoare.

Programarea problemei

!program de calcul si trasare diagrame de moment incovoietor si forta taietoare

program tema3 use iflogm implicit none include 'resource.fd' type(dialog)dia integer rtr external callb,trasare rtr=dlginit(fergrin,dia) !initializarea casutei de dialog cu id-ul fergrin rtr=dlgset(dia,texta,'0') !initializarea datelor de intrare cu zero rtr=dlgset(dia,textb,'0') rtr=dlgset(dia,textc,'0') rtr=dlgset(dia,textd,'0') rtr=dlgset(dia,texte,'0') rtr=dlgset(dia,textf,'0') rtr=dlgset(dia,textP1,'0') rtr=dlgset(dia,textq1,'0') rtr=dlgset(dia,textq2,'0') rtr=dlgset(dia,textM1,'0') rtr=dlgset(dia,textM2,'0') rtr=dlgset(dia,msj,'!!!date incorecte')

1

Portofoliu de programe în limbajul Fortran

rtr=dlgsetsub(dia, texta, callb) !atribuie butonului cu id-ul 'texta' apelarea subrutinei callb rtr=dlgsetsub(dia, textb, callb) rtr=dlgsetsub(dia, textc, callb) rtr=dlgsetsub(dia, textd, callb) rtr=dlgsetsub(dia, texte, callb) rtr=dlgsetsub(dia, textf, callb) rtr=dlgsetsub(dia, textP1, callb) rtr=dlgsetsub(dia, textM1, callb) rtr=dlgsetsub(dia, textM2, callb) rtr=dlgsetsub(dia, textq1, callb) rtr=dlgsetsub(dia, textq2, callb) rtr=dlgsetsub(dia,tras,trasare) !atribuie butonului cu id-ul tras apelarea subrutinei trasare rtr=dlgmodal(dia) ! face vizibila casuta de dialog dupa rulare print *, 'final' read*

end program tema3

subroutine callb(dia,vapel,mapel) use iflogm implicit none include 'resource.fd' type(dialog)dia integer rtr,vapel,mapel,er1,er2,er3,er4,er5,er6,er7,er8,er9,er10,er11,erg character*20 caractere real a,b,c,d,e,f,q1,q2,M1,M2,P1,VA,VB,L,verif logical retlog integer ok common a,b,c,d,e,f,q1,q2,P1,VA,VB,L,M1,M2,erg ok=0 !retlog=dlgset(dia,texta, .FALSE., dlg_visible) rtr=dlgget(dia,texta,caractere) read(caractere,1,iostat=er1)a 1 FORMAT(F20.0) rtr=dlgget(dia,textb,caractere) read(caractere,1,iostat=er2)b rtr=dlgget(dia,textc,caractere) read(caractere,1,iostat=er3)c rtr=dlgget(dia,textd,caractere) read(caractere,1,iostat=er4)d rtr=dlgget(dia,texte,caractere)

2

Portofoliu de programe în limbajul Fortran

read(caractere,1,iostat=er5)e rtr=dlgget(dia,textf,caractere) read(caractere,1,iostat=er6)f rtr=dlgget(dia,textP1,caractere) read(caractere,1,iostat=er7)P1 rtr=dlgget(dia,textq1,caractere) read(caractere,1,iostat=er8)q1 rtr=dlgget(dia,textq2,caractere) read(caractere,1,iostat=er9)q2 rtr=dlgget(dia,textM1,caractere) read(caractere,1,iostat=er10)M1 rtr=dlgget(dia,textM2,caractere) read(caractere,1,iostat=er11)M2 write(*,*) 'er1=',er1 write(*,*) 'er2=',er2 write(*,*) 'er3=',er3 write(*,*) 'er4=',er4 write(*,*) 'er5=',er5 write(*,*) 'er6=',er6 write(*,*) 'er7=',er7 write(*,*) 'er8=',er8 write(*,*) 'er9=',er9 write(*,*) 'er10=',er10 write(*,*) 'er11=',er11 write(*,*) 'a=',a write(*,*) 'b=',b write(*,*) 'c=',c write(*,*) 'd=',d write(*,*) 'e=',e write(*,*) 'f=',f if((er1==0).and.(er2==0).and.(er3==0).and.(er4==0).and.(er5==0).and.(er6==0).and.(er7==0).and.(er8==0).and.(er9==0).and.(er10==0).and.(er11==0) & .and.(a>0.).and.(b>0.).and.(c>0.).and.(d>0.).and.(e>0.).and.(f>0.)) then ok=1 endif write(*,*)'ok=',ok if(ok==1) then rtr=dlgset(dia,msj,'date corecte') !calculul reactiunilor L=a+b+c+d+e+f 2 FORMAT(F9.3)!9=3(zecimale)+1(semn)+1(virgula)+4(inainte de virgula) write(caractere,2)L rtr=dlgset(dia,textL,caractere) VA=(M1+M2-P1*(c+d+e+f)+q1*c*(c/2.+d+e+f)+q2*e/2*(2/3.*e+f))/L

3

Portofoliu de programe în limbajul Fortran

write(caractere,2)VA rtr=dlgset(dia,textVA,caractere) VB=(-M1-M2-P1*(a+b)+q1*c*(a+b+c/2.)+q2*e/2.*(a+b+c+d+e/3.))/L write(caractere,2)VB rtr=dlgset(dia,textVB,caractere) verif=VA+VB+P1-q1*c-q2*e/2. write(caractere,*)verif rtr=dlgset(dia,textverif,caractere) erg=0 else rtr=dlgset(dia,textL,'') rtr=dlgset(dia,textVA,'') rtr=dlgset(dia,textVB,'') rtr=dlgset(dia,textverif,'') rtr=dlgset(dia,msj,'Date incorecte') erg=1 endif endsubroutine subroutine trasare() use AvFRT use AvObjMod implicit none real a,b,c,d,e,f,q1,q2,P1,VA,VB,L,M1,M2 integer erg integer, parameter::nr=1000 real V(nr),M(nr),x(nr),px integer i,stat,vid,hroot,hgr1,hgr2 common a,b,c,d,e,f,q1,q2,P1,VA,VB,L,M1,M2,erg if (erg==1) then write(*,*)'Apel trasare imposibil' else write(*,*)'Apel trasare efectuat cu succes' px=L/(nr-4) x(1)=0 V(1)=0 M(1)=0 do i=2,nr-2 x(i)=(i-2)*px write(*,*)'x',i,'=',x(i) if(x(i)<a) then V(i)=VA M(i)=VA*x(i)- M1 elseif (x(i)<(a+b)) then

4

Portofoliu de programe în limbajul Fortran

V(i)=VA M(i)=VA*x(i)-M1-M2 elseif (x(i)<(a+b+c)) then V(i)=VA+P1-q1*(x(i)-a-b) M(i)=VA*x(i)-M1-M2+P1*(x(i)-a-b)-q1*(x(i)-a-b)**2/2. elseif (x(i)<(a+b+c+d)) then V(i)=VA+P1-q1*c M(i)=VA*x(i)-M1-M2+P1*(x(i)-a-b)-q1*c*(x(i)-a-b-c/2) elseif (x(i)<(a+b+c+d+e)) then V(i)=VA+P1-q1*c-(q2+ q2*(a+b+c+d+e-x(i))/e )*(x(i)-a-b-c-d)/2 M(i)=VA*x(i)-M1-M2+P1*(x(i)-a-b)-q1*c*(x(i)-a-b-c/2.)-q2*(a+b+c+d+e-x(i))/e*(x(i)-a-b-c-d)**2/2.-(q2-q2*(a+b+c+d+e-x(i))/e)*(x(i)-a-b-c-d)/2*2/3*(x(i)-a-b-c-d) else V(i)=VA+P1-q1*c-q2*e/2 M(i)=VA*x(i)-M1-M2+P1*(x(i)-a-b)-q1*c*(x(i)-a-b-c/2.)-q2*e/2*(x(i)-a-b-c-d-e/3) endif write(*,*)'V',i,'=',V(i) M(i)=-M(i) enddo x(nr-1)=L V(nr-1)=0 M(nr-1)=0 x(nr)=0 V(nr)=0 M(nr)=0 call avStartWatch(loc(V),1,shape(V),AV_REAL4,"V",stat) call avStartWatch(loc(M),1,shape(M),AV_REAL4,"M",stat) call avStartWatch(loc(x),1,shape(x),AV_REAL4,"x",stat) call avNewViewer(vid) hroot=avGetObject("/") call avCreateGraph2DObj(avGraphs(hroot),"Forta_taietoare|plot:xyplot,xsource:/x,ysource:/V",hgr1) call avCreateGraph2DObj(avGraphs(hroot),"Moment_incovoietor|plot:xyplot,xsource:/x,ysource:/M",hgr2) call avVisible(vid,1,stat) endif end subroutine

Rezultate

5

Portofoliu de programe în limbajul Fortran

S-a rulat programul cu mai multe valori, ca în exemplul de mai jos:

6

Portofoliu de programe în limbajul Fortran

Concluzii / comentariiS-au realizat versiunile Debug și Release, cu dimensiunile 1,07MB, respectiv 672 KB.

7

top related