documentatie program diagrame
DESCRIPTION
Trasare diagrame eforturi FortranTRANSCRIPT
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