Appendice D
Sorgente del programma FORTRAN TWCC
C
C Il programma TWCC permette di calcolare il carico di inizio frattura ed il carico di instabilità.
C Inoltre, può essere utilizzato per determinare il valore della componente elastica e di
C quella plastica dell'integrale J, per determinare l'incremento della lunghezza della fessura durante
C il processo di frattura e per calcolare il carico di collasso della tubazione. C
C Sono necessari i seguenti dati di input: C a) proprietà meccaniche del materiale;
C b) proprietà di tenacità alla frattura del materiale; C c) geometria della tubazione;
C d) lunghezza della fessura passante;
C e) tensione flessionale alla fibra esterna della sezione della tubazione. C
C Sulla tubazione agiscono i seguenti carichi:
C - carico di trazione generato dalla pressione interna (questo carico è mantenuto costante
C durante l'accrescimento della fessura);
C - carico di flessione (questo carico è incrementato per raggiungere la C condizione di inizio frattura e di instabilità).
C
C Nel programma sono implementati i seguenti modelli analitici:
C 1) modello di Lacire per il calcolo della componente elastica dell'integrale J; C 2) modello ERS per il calcolo della componente plastica dell'integrale J. C program TWCC implicit none real pigreco,a0,acricca,deltaa,Rm,M,P,t,sigmay,E,J,Dout,LDC,Rout real Min,Jin,a,b,JIc,Ja,Jb,CalcJ,err,Minizio,deltacarico,JR,Rin,Sm real Mcrescita,deltaa1,C,m1,Mcritico,acricca1,fatspes,fatfles
real Pressione,y,teff,I0,sigmab,Minizio1,Mcollasso,Msse,Beta real sigmacoll,sigmau integer i,inc,Inl,Ins,l,s,PROVA,spess,Indspes,inspes,geom,ingeom integer indgeom,rilevabile,max,inril,tenmax,indfles,Indspes1 integer max1,tenmax1,incmax,ingeom1 character nomefile*6 C
C Acquisizione da file esterno delle proprietà del materiale C
print *,'Introdurre la sigla identificativa del materiale:' read *,nomefile
open (unit=10,file=nomefile//'.dat') read (10,*)
read (10,*) E
C print *, 'Modulo di Young (N/mm2):',E read (10,*) sigmay
C print *, 'Tensione di snervamento (N/mm2):',sigmay read (10,*) sigmau
C print *, 'Tensione di rottura (N/mm2):',sigmau read (10,*) JIc
C print *, 'Tenacità di inizio frattura (N/mm) :',JIc read (10,*) C C print *, 'Coefficiente C:',C read (10,*) m1 C print *, 'Coefficiente m :',m1 close (unit=10) C Indspes=2 ingeom=2 max=2 tenmax=2 Indspes1=Indspes ingeom1=ingeom max1=max
tenmax1=tenmax incmax=1
C
open (unit=20,file='RisLDC'//nomefile//'.dat') write (20,*) 'Risultati materiale'//nomefile
write (20,*) ' ' write (20,72)
72 format ('Dout(mm) teff(mm) LDC(mm) Lcr(mm) + Mappl(N-mm) Mcoll(N-mm) Min(N-mm) Mcr(N-mm) + Msse(N-mm)') do 101,spess=1,1 open (unit=11,file='Indicespessore.dat') do 501,inspes=1,(Indspes-1) read (11,*) 501 continue read (11,*) fatspes close (unit=11) Indspes=Indspes+1 do 1,geom=1,4 open (unit=12,file='geom.dat') do 5,indgeom=1,(ingeom-1) read (12,*) 5 continue read (12,*) Dout close (unit=12) ingeom=ingeom+1 do 2,rilevabile=1,5 open (unit=13,file='LDC'//nomefile//'.dat') do 3,inril=1,(max-1) read (13,*) 3 continue read (13,*) LDC close (unit=13) max=max+4
open (unit=14,file='tensfles.dat') do 4,indfles=1,(tenmax-1) read (14,*) 4 continue read (14,*) fatfles close (unit=14) tenmax=tenmax+1 C
C Acquisizione da tastiera delle proprietà del materiale C
C print *, 'Introdurre geometria tubazione' C print *, 'Diametro esterno (mm):'
C read *, Dout
C print *, 'Spessore (mm):'
C read *, t
C
C print *, 'Introdurre geometria fessura'
C print *, 'Lunghezza rilevabile della fessura (mm):'
C read *, LDC
C
C print *, 'Introdurre carico'
C print *, 'Intensità carico di flessione (N-mm):'
C read *, M C pigreco=3.141592654 deltaa=0 err=0.001 Sm=(2./3.)*sigmay C
C Elaborazione dati di input C
Pressione=17.2
a0=LDC/2 Rout=Dout/2 t=(Pressione*Rout)/(Sm+(0.4*Pressione)) teff=t*fatspes Rin=Rout-teff Rm=(Rout+Rin)/2 I0=(pigreco/64.)*(Dout**4-(2*Rin)**4) sigmab=Sm*fatfles P=0.5*Sm*(pigreco*(Rout**2-Rin**2)) M=(I0/Rout)*sigmab
C Calcolo valore integrale J C
J=CalcJ(E,sigmay,a0,deltaa,Rm,teff,P,M) C
C Calcolo estremo superiore ed inferiore carico inizio frattura C Min=0 inc=10000 a=0 b=0 do 10, i=1,10000000 Jin=CalcJ(E,sigmay,a0,deltaa,Rm,teff,P,Min) if ((Jin-JIc).LE.0) then a=Min Min=Min+inc else b=Min goto 20 endif 10 continue C
C Calcolo del carico di inizio frattura con subroutine Bisezione C
+ Rm,teff,P,JIc) C
C Calcolo momento flettente critico C Minizio1=Minizio deltaa=0.01 deltacarico=33300000 acricca=a0 Inl=1 Ins=1 PROVA=1 do 300, l=Inl,3000 Mcrescita=Minizio1+deltacarico do 100, s=Ins,10000 deltaa1=acricca-a0 if ((CalcJ(E,sigmay,a0,deltaa1,Rm,teff,P, + Mcrescita)-JR(JIc,C,m1,deltaa1)).GT.0) then acricca=acricca+deltaa else Minizio1=Mcrescita PROVA=PROVA+1 acricca=acricca-deltaa acricca1=acricca go to 300 endif 100 continue deltacarico=deltacarico/10 if (deltacarico.GE.1) then deltaa=deltaa/10 acricca=acricca1 go to 300 else go to 400 end if
300 continue
400 Mcritico=Minizio1
C Calcolo del carico di collasso al momento in cui la fessura raggiunge l'instabilità; C si tratta di una valutazione conservativa,dato che il carico di collasso diminuisce C all'aumentare della dimensione della fessura.
C sigmacoll=(sigmay+sigmau)/2. Beta=(1./2.)*(acricca/Rm)+P/(4*Rm*teff*sigmacoll) Mcollasso=4*sigmacoll*(Rm**2)*teff*(cos(Beta)-(1./2.)* + sin(acricca/Rm)) Msse=(Mcritico/(2**0.5))-M write (20,73) Dout,teff,LDC,2*acricca,M,Mcollasso,Minizio, + Mcritico,Msse 73 format (F8.2,2X,F8.2,7X,F8.2,5X,F8.2,7X,E9.4,7X,E9.4,7X,E9.4, + 7X,E9.4,7X,E11.4) 2 continue max=max1+incmax incmax=incmax+1 tenmax=tenmax1 1 continue 101 continue close (unit=10) close (unit=20) stop end C
C Funzione CalcJ per il calcolo del valore dell'integrale J C
REAL FUNCTION CalcJ(Es,sigmays,a0s,deltaas,Rms,ts,Ps,Ms) real Es,sigmays,pigrecos,a0s,deltaas,Rms,ts,Ps,Ms
real Ft,KIt,Jelt,Fb,KIb,Jelb,Jel,denJs,fatcar,Pl,Ml,fatgam,gamma real Por,Mor,Morc,Lr,csi,At,Bt,Ct,Dt,Et,Ab,Bb,Cb,Db,Eb C
C Calcolo del carico di riferimento ottimizzato C pigrecos=3.141592654 fatcar=(a0s+deltaas)/Rms Pl=2*Rms*ts*sigmays*(pigrecos-fatcar-2*asin((0.5)*sin(fatcar))) Ml=4*(Rms**2)*ts*sigmays*(cos((0.5)*fatcar)-(0.5)*sin(fatcar)) fatgam=(a0s+deltaas)/(pigrecos*Rms) gamma=0.82+0.75*fatgam+0.42*fatgam**2 Por=gamma*Pl Mor=gamma*Ml Morc=Mor*(1-(Ps/Por)**2) Lr=Ms/Morc C
C Calcolo fattore geometrico per Stress Intensity Factor C if ((fatgam.GT.0).AND.(fatgam.LT.0.611)) then if (((Rms/ts).GT.1.5).OR.((Rms/ts).LT.80.5)) then csi=log10(ts/Rms) At=1 Bt=-1.040-3.1831*csi-4.83*(csi**2)-2.369*(csi**3) Ct=16.71+23.10*csi+50.82*(csi**2)+18.02*(csi**3) Dt=-25.85-12.05*csi-87.24*(csi**2)-30.39*(csi**3) Et=24.70-54.18*csi+18.09*(csi**2)+6.745*(csi**3) Ab=0.65133-0.5774*csi-0.3427*(csi**2)-0.0681*(csi**3) Bb=1.879+4.795*(csi)+2.343*(csi**2)-0.6197*(csi**3) Cb=-9.779-38.14*csi-6.611*(csi**2)+3.972*(csi**3) Db=34.56+129.9*csi+50.55*(csi**2)+3.374*(csi**3) Eb=-30.82-147.6*csi-78.38*(csi**2)-15.54*(csi**3) C
C Calcolo componente elastica Jel per trazione per stato piano di tensione C
Ft=At+Bt*(fatgam)+Ct*(fatgam**2)+Dt*(fatgam**3)+Et*(fatgam**4) KIt=(Ps/(2*pigrecos*Rms*ts))*((pigrecos*(a0s+deltaas))**0.5)*Ft Jelt=(KIt**2)/Es
C
C Calcolo componente elastica Jel per flessione per stato piano di tensione C Fb=(1+ts/(2*Rms))*(Ab+Bb*(fatgam)+Cb*(fatgam**2)+Db*(fatgam**3)+ +Eb*(fatgam**4)) KIb=(Ms/(pigrecos*(Rms**2)*ts))*((pigrecos*(a0s+deltaas))**0.5)*Fb Jelb=(KIb**2)/Es else
print *,'Rapporto Rm/t nel calcolo del fattore geometrico +fuori range'
endif else
print *,'Rapporto teta/pigreco nel calcolo del fattore +geometrico fuori range'
endif C
C Calcolo componente totale Jel C Jel=Jelt+Jelb C C Calcolo integrale J C denJs=(1-0.14*((Lr)**2))*(0.3+0.7*((2.7182818)**(-0.65*(Lr**6)))) CalcJ=((1/denJs)**2)*Jel return end C
C Subroutine per il calcolo degli zeri con il metodo di bisezione C SUBROUTINE Bisezione(xl,xr,errb,radice,Eb,sigmayb,a0b,deltaab,Rmb, +tb,Pb,JIcb) real xl,xr,errb,radice,Eb,sigmayb,a0b,deltaab,Rmb,tb,Pb,JIcb real xm real CalcJ
integer i do 50, i=1,10000 xm=(xl+xr)/2
if ((xm-xl).LE.errb) goto 60 C
C Scelta dell'intervallo di bisezione C if ((CalcJ(Eb,sigmayb,a0b,deltaab,Rmb,tb,Pb,xl)-JIcb)*(CalcJ(Eb, + sigmayb,a0b,deltaab,Rmb,tb,Pb,xm)-JIcb).LE.0) then xr=xm else xl=xm endif 50 continue 60 radice=xm return end C
C Definizione della funzione per il calcolo di JR C
real function JR(JIcr,Cr,mr,deltaa1r) real JIcr,Cr,mr,deltaa1r JR=JIcr+Cr*(deltaa1r)**mr return