documentatie program diagrame

10
Universitatea Tehnică ”Gheorghe Asachi” din Iași Facultatea de Construcții și Instalații Program de master – Inginerie Structuralã Tema nr.3

Upload: stefan-lucian

Post on 20-Jan-2016

26 views

Category:

Documents


0 download

DESCRIPTION

Trasare diagrame eforturi Fortran

TRANSCRIPT

Page 1: Documentatie Program Diagrame

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

Page 2: Documentatie Program Diagrame

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

Page 3: Documentatie Program Diagrame

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

Page 4: Documentatie Program Diagrame

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

Page 5: Documentatie Program Diagrame

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

Page 6: Documentatie Program Diagrame

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

Page 7: Documentatie Program Diagrame

Portofoliu de programe în limbajul Fortran

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

6

Page 8: Documentatie Program Diagrame

Portofoliu de programe în limbajul Fortran

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

7