5.2 Acciai da smaltatura
5.3.1 Acciaio Interstitial free al Ti laminato a caldo
L’acciao analizzato nel seguente paragrafo è un acciaio interstitial free al Ti. Tale acciaio è
destinato ad operazioni di profondo stampaggio e successivo ciclo di smaltatura. Ѐ caratterizzato da una tensione di snervamento e da una tensione ultima a rottura pari rispettivamente a 190MPa e 350/370MPa. Per quanto riguarda la composizione chimica del materiale la concentrazione di C è molto bassa, dell’ordine del 0,0015 – 0,0050%, mentre la concentrazione massima di Ti non supera l’0.3 %. Le lavorazioni a cui l’acciaio è stato sottoposto sono: laminazione a caldo, laminazione a freddo e successiva ricottura.
Anche in questo caso la prova di permeazione è stata condotta a temperatura ambiente su un
provino dello spessore di 0.5 mm con una concentrazione imposta pari a 𝐶0 = 8 ∗ 1023 𝑎𝑡𝑜𝑚𝑖 𝑚⁄ 3.
L’errore assoluto medio, calcolato dal confronto dei dati sperimentali e dei valori della curva rappresentativa del loro andamento medio è pari a 9.2 ∗ 10−4 𝑎𝑡𝑜𝑚𝑖 𝑚⁄ 2𝑠.
I parametri di trappola identificati al fine di riprodurre nel miglior modo possibile la curva sperimentale sono: 𝑁𝑟 = 8 ∗ 1025 𝑎𝑡𝑜𝑚𝑖 𝑚3 𝑘𝑟 = 2.3 ∗ 10−26 𝑚3 𝑎𝑡𝑜𝑚𝑖∗𝑠
60 𝑝 = 0.034 1 𝑠 𝑁𝑖 = 4 ∗ 1024 𝑎𝑡𝑜𝑚𝑖 𝑚3 𝑘𝑖 = 5 ∗ 10−24 𝑚3 𝑎𝑡𝑜𝑚𝑖∗𝑠
L’esito della simulazione e il confronto con la relativa curva sperimentale sono riportati in figura 5.15.
figura 5. 15. Curve di flusso, acciaio “Interstitial free” al Ti
Il numero di trappole reversibili abbastanza elevato è conseguenza del processo di deformazione a freddo a cui il materiale è stato sottoposto. Il valore di energia di legame relativo è pari a 31.4 𝑘𝐽 𝑚𝑜𝑙⁄ . Il valore del rateo di cattura delle trappole irreversibili identificato è indice dell’elevata energia di legame che caratterizza questo tipo di trappole, costituite da una fitta rete di
microprecipitati di Ti. Come visibile in figura 5.15 il modello non riesce a riprodurre con precisione la curva sperimentale. Ciò può essere spiegato dalla presenza di varie tipologie di trappola a diversa energia. Bisogna sempre considerare che i parametri di 𝑘𝑟 e di 𝑝 inseriti sono rappresentativi di un valore medio delle energie di legame delle diverse trappole reversibili presenti, da quelle a debole energia di legame (12-18 𝑘𝐽 𝑚𝑜𝑙⁄ ), a poche a più elevata energia degli atomi sostituzionali di Ti (27-32 𝑘𝐽 𝑚𝑜𝑙⁄ ) fino a quelle di maggiore energia come dislocazioni, bordi di grano e microvuoti
61
ottenibili con le procedure di deformazione (38-41 𝑘𝐽 𝑚𝑜𝑙⁄ ) [12]. Inoltre rimane da approfondire il comportamento delle trappole irreversibili ad elevata energia di legame che in questi acciai rispetto ai casi precedenti riveste particolare importanza.
5.3.1 Acciaio Interstitial free al Ti laminato a caldo
Il terzo acciaio esaminato è sempre un acciaio interstitial free al Ti che ha subito in questo caso solo il processo di laminazione a caldo. Lo spessore del campione analizzato è di 1.5 mm. L’errore assoluto medio, calcolato dal confronto dei dati sperimentali e dei valori della curva rappresentativa del loro andamento medio è pari a 2.7 ∗ 10−5 𝑎𝑡𝑜𝑚𝑖 𝑚⁄ 2𝑠.
I parametri di trappola identificati al fine di riprodurre nel miglior modo possibile la curva sperimentale sono: 𝑁𝑟 = 1.2 ∗ 1024 𝑎𝑡𝑜𝑚𝑖 𝑚3 𝑘𝑟 = 1.2 ∗ 10−27 𝑚3 𝑎𝑡𝑜𝑚𝑖∗𝑠 𝑝 = 0.034 1/𝑠 𝑁𝑖 = 1.45 ∗ 1023 𝑎𝑡𝑜𝑚𝑖 𝑚3 𝑘𝑖 = 9 ∗ 10−24 𝑚3 𝑎𝑡𝑜𝑚𝑖∗𝑠.
In questo secondo caso il minor numero di trappole reversibili e il valore del relativo rateo di cattura (al quale è associata un’energia pari a 24 𝑘𝐽 𝑚𝑜𝑙⁄ ) sono rappresentativi del diverso processo di deformazione subito dal materiale rispetto al caso precedente. La categoria degli acciai Interstitial free infatti sono caratterizzati da un basso numero di trappole reversibili se si escludono quelle introdotte dal processo di laminazione a freddo. Il valore del rateo di cattura 𝑘𝑖 è indice dell’elevata
energia di legame che caratterizza le trappole irreversibili, costituite in questo caso da una rete di microprecipitati di Ti. In figura 5.16 è possibile vedere l’esito della simulazione. Anche in questo caso la curva del modello non riesce a riprodurre fedelmente la curva sperimentale; come già spiegato nel paragrafo precedente i parametri di trappola identificati sono rappresentativi di un valore medio di energia delle trappole presenti.
62
figura 5. 16. Curve di flusso, acciaio “Interstitial free” al Ti laminato a caldo
63
Conclusioni
Nell’ottica di studiare il fenomeno della diffusione dell’idrogeno negli acciai è stato analizzato il codice Helios2N che permette di riprodurre la curva di flusso di idrogeno tipica di una prova di permeazione.
Il modello fisico preso a riferimento nella stesura del codice è quello di Turnbull che a sua volta ha ripreso le equazioni della diffusione dell’idrogeno di McNabb e Foster.
Il codice è scritto in linguaggio Matlab.
Dopo una descrizione delle configurazioni disponibili e un’analisi parametrica, sono state analizzate delle curve di permeazione ottenute in laboratorio, partendo da indicazioni sperimentali e dai dati presenti in letteratura.
Il primo acciaio esaminato è l’acciaio usibor 1500 da stampaggio a caldo. Dello stesso acciaio sono state analizzate più curve sperimentali relative a diverse concentrazioni. Dal confronto con le curve sperimentali a maggior concentrazione sono stati ricavati un numero di trappole reversibili e della loro energia di legame pari rispettivamente a 𝑁𝑟 = 3.7 ∗ 1024
𝑎𝑡𝑜𝑚𝑖
𝑚3 e 42 𝑘𝐽 𝑚𝑜𝑙⁄ . Tali valori dei
parametri di trappola sono stati successivamente utilizzati nel riprodurre le curve sperimentali a più bassa concentrazione. Mentre la combinazione dei parametri di trappola trovati riesce a riprodurre con buona approssimazione le curve sperimentali a concentrazioni maggiori, nel caso di basse concentrazioni le curve sperimentali risultano traslate verso destra (sull’asse dei tempi) rispetto alle relative curve del modello. Questo effetto può presumibilmente essere dovuto all’azione di
riduzione da parte dell’idrogeno atomico degli ossidi presenti sulla superficie del provino, prima di essere assorbito. Tale fenomeno infatti avviene più lentamente in presenza di basse concentrazioni di idrogeno corrispondenti all’utilizzo di soluzioni neutre. Sarebbe utile condurre un’analisi
sistematica su campioni dello stesso acciaio per verificare l’effettiva incidenza di questo fenomeno superficiale sull’esito della prova nel caso di basse concentrazioni. Potrebbe inoltre essere
necessario introdurre nel modello ulteriori parametri che tengano conto di tale fenomeno. Sempre dello stesso acciaio sono state analizzate una curva di prima e seconda permeazione. Il modello riproduce esattamente la curva sperimentale relativa alla seconda permeazione mentre non riesce a riprodurre esattamente la prima curva di permeazione: anche in questo caso tale risultato potrebbe dipendere da fenomeni superficiali analoghi al caso precedente che non si verificano nella seconda permeazione.
64
Il secondo acciaio analizzato è un acciaio al carbonio (sottoposto a ricottura “open coil”) da medio stampaggio e successiva operazione di smaltatura. Il numero di trappole reversibili e l’energia di legame ricavati, sono pari rispettivamente a 7.8 ∗ 1025 𝑎𝑡𝑜𝑚𝑖
𝑚3 e 38.9 𝑘𝐽 𝑚𝑜𝑙⁄ .
Successivamente è stata analizzata la curva di permeazione di un acciaio “interstitial free” al Ti da profondo stampaggio e successiva operazione di smaltatura. Sono stati ricavati in questo caso un numero di trappole reversibili pari a 𝑁𝑟 = 8 ∗ 1025 𝑎𝑡𝑜𝑚𝑖
𝑚3 e un’energia di legame pari a
31.4 𝑘𝐽 𝑚𝑜𝑙⁄ .
Infine l’ultimo acciaio esaminato è sempre un acciaio “interstitial free” al Ti analogo al precedente. In questo caso il campione analizzato è stato soltanto laminato a caldo. Il minor numero di trappole reversibili e dell’energia di legame associata, pari rispettivamente a 𝑁𝑟 = 1.2 ∗ 1024 𝑎𝑡𝑜𝑚𝑖
𝑚3 e a
24 𝑘𝐽 𝑚𝑜𝑙⁄ , testimoniano il diverso processo di lavorazione subito rispetto al caso precedente. L’effetto delle trappole irreversibili, in questo caso più marcato, è legato alla presenza di microprecipitati di Ti.
I confronti con dati sperimentali hanno dato esiti favorevoli, soprattutto per quanto riguarda l’acciaio usibor 1500.
Maggiori difficoltà sono state riscontrate nell’analisi degli acciai da smaltatura. Bisogna considerare che i parametri di trappola del modello si riferiscono ad un valore medio dell’energia di legame e difficilmente riescono quindi a riprodurre gli effetti delle singole tipologie di trappola. Si potrebbe pensare come sviluppo futuro di dotare il programma di ulteriori gradi di libertà, in modo da poter riprodurre l’effetto di trappole differenti da quelle a più bassa e media energia, a quelle a più elevata energia. Sarebbe utile inoltre approfondire il comportamento delle trappole irreversibili, nonchè il legame che esiste tra il rateo di cattura delle trappole irreversibili e l’energia di legame ad esso associata.
65
Bibliografia
[1] L.S. Darken, R.P. Smith, Corrosion, 1949, Vol.5 pp. 1-11.
[2] A. McNabb and P.K. Foster, A new analisys of the diffusion of hydrogen in iron and ferritic steels. Metallurgical Transactions AIME 227 (1963), 618-627.
[3] R.A. Oriani, Acta metal. 18, 147 (1970). [4] M. Iino, Acta metal. 30, 367 (1982).
[5] J. B. Leblond and D. Dubois, Acta metal. 31, 1459 (1983).
[6] A. Turnbull, M.W. Carrol and D.H. Ferris, Sis of hydrogen diffusion and trapping % chromium martensitic stainless steel, Acta metal., 1989, vol.37, 2039.
[7] E. Beghini, Sviluppo di un modello fisico matematico della diffusione dell’idrogeno nell’acciaio [8] G. Lavorini, Metodi innovativi per lo studio della permeazione dell’idrogeno: effetto delle dislocazioni come siti trappola per l’idrogeno stesso
[9] M. Nagumo, Fundamentals of Hydrogen Embrittlement, 2016. [10] K. Kiuchi and R. B. McLellan, Acta metal. 31, 961 (1983).
[11] G. W. Recktenwald, Finite-Difference Approximations to the Heat Equation
[12] P. De Gregorio, A. Buonpane, R. Valentini, Studio della smaltabilità di acciai da profondo stampaggio laminate a caldo (1996)
66
Ringraziamenti
Desidero ringraziare il collega Simone Girolimini con il quale per primo ho intrapreso questo studio e il collega Carlo Alberto Rossi per la sua disponibilità dimostrata nel proseguo di questo lavoro. Si ringrazia infine il collega Giulio Vaglini per aver messo a disposizione i risultati sperimentali analizzati in questo elaborato.
67
Appendici
In questa sezione sono raccolti i codici scritti in linguaggio matlab delle versioni del programma:
Helios2N;
Helios2E;
Helios2D;
Helios4.
Appendice A
Di seguito è riportato il codice Helios2N.
clc, close all, clear all
% programma per la diffusione dell'idrogeno in transitorio % accetta una concentrazione a sx costante
% %
% --- Costanti fisiche (valori in SI) ---
R=8.314; % costante dei gas
Q=5.69e3; % energia iniziale idrogeno
D0=7.23e-8; % diffusività nel ferro (m*2/s) %Numero di test da effettuare
fid1 = fopen('TEST.txt'); Ntest = fscanf(fid1,'%g', 1)'; fclose(fid1);
for k=1:Ntest(1) % indice del file_k.txt
% --- Richiamo dei dati in ingresso
% --- Parametri del materiale in prova ---
fid2 = fopen([num2str(k) '/DATI_' num2str(k) '.txt']); iii=0;
while 1
iii=iii+1;
tline = fgetl(fid2);
Md(iii,1)=str2double(strtok(tline));
if ~ischar(tline), break, end end
fclose(fid2);
Temp = Md(1); % Temperatura (K)
Nr = Md(2); % Concentrazione trappole reversibili Nr(atomi/m^3) val tipico 3e24 1e23< < 1e26
Ni = Md(3); % Concentrazione trappole irreversibili Ni (atomi/m^3) val tipico Nr/100
kr = Md(4); % Rateo cattura reversibili kr (m^3/sec) val tipico min 3e-25 max 35e-25
ki = Md(5); % Rateo cattura irreversibili ki (m^3/sec) val tipico 5e-25
68
% --- ---
D=D0*exp(-Q/(R*Temp)); % Diffusività del ferro alla temperatura di prova %
% --- Dati del provino e di stampa %
fid3 = fopen([num2str(k) '/PS_' num2str(k) '.txt']); iii=0;
while 1
iii=iii+1;
tline = fgetl(fid3);
SP(iii,1)=str2double(strtok(tline));
if ~ischar(tline), break, end end
fclose(fid3);
L = SP(1); %spessore della lamiera in metri
tmax = SP(2); %tempo massimo di elaborazione (sec.)
Dx_p = SP(3); % passo spaziale di stampa in m per i prifili
Dt_p = SP(4); % % passo temporale di stampa dei profili(sec)
Dt_p2 = SP(5); %passo temporale per la stampa delle funzioni del tempo (sec) dipico 1
% --- %
NDt=ceil(Dt_p/Dt_p2);
Dt_p=NDt*Dt_p2; % il passo di stampa è aggiustato in modo che sia multiplo intero del passo di stmapa dei profili
% %
% --- Condizioni iniziali e al contorno --- % In questa prima versione le condizioni al contorno sono semplicemente: % concentrazione costante C0 a sinistra e C2 a destra
%
fid4 = fopen([num2str(k) '/CC_' num2str(k) '.txt']); iii=0;
while 1
iii=iii+1;
tline = fgetl(fid4);
BC(iii,1)=str2double(strtok(tline));
if ~ischar(tline), break, end end
fclose(fid4);
C0=BC(1); %Concentrazione sulla parete sinistra
C2=BC(2); %Concentrazione sulla parete destra
% --- %
69
% --- % parte 1: set up della mesh
% --- %
% Numero di suddivisioni spaziali della mesh %
fatR=Nr*kr; %fattore che determina la convergenza
Ne=100; %numero di elementi interni al dominio (valore consigliato 100)
if fatR>70
dif=fatR-70;
Ne=ceil(100+0.66*dif-0.0008*dif^2);
ttt1='Il numero di suddivisioni è stato portato a: '; ttt2=num2str(Ne);
ttt3=[ttt1 ttt2]; display(ttt3)
end
Netot=Ne+2; % Numero di elementi più i due fittizi alle estremità
dx=L/Ne; % dimensione del nodo di mesh
dt=0.5*(0.5*(dx^2) /D); %passo temporale di calcolo 1/2 del passo minimo di converg.
Nt_p=ceil(Dt_p2/dt); % numero di passi di calcolo nell'intervallo di stampa dei profili
dt=Dt_p2/Nt_p; % correzione del passo di calcolo per avere multipli interi
Nt=tmax/dt+1; %numero di passi temporali di calcolo compreso il passo 0
Ntprint=ceil(Nt/Nt_p); %numero di passi temporali di stampa dei profili
Nt_p2=ceil(tmax/Dt_p2)+1; %numero di istanti temporali per il calcolo dei flussi
Nx_p=ceil(L/Dx_p); % numero di posizioni di stampa in x
Lpmax=(Nx_p)*Dx_p; if Lpmax<L Nx_p=Nx_p+1; Lpmax=(Nx_p)*Dx_p; end Nx_p=Nx_p+1;
Nint=Ne+1; % numero di interfacce
xe=linspace(-dx/2,L+dx/2,Netot)'; % posizioni dei centri dei nodi
xi=linspace(0,L,Nint)'; % posizione delle interfacce
xp=linspace(0,Lpmax,Nx_p)'; % posizione delle ascisse di stampa % ---
% Parte 2: normalizzazione % ---
Cnorm=max(C0,C2); %fattore normalizzante sulla concentrazione
if Cnorm<=0 Cnorm=1; end fat=L^2/D; phi=Nr/Cnorm; chi=Ni/Cnorm; mu=p*fat; ni=kr*Cnorm*fat; K=ki*Cnorm*fat;
dX=dx/L; % passo adimensionale spaziale
dtau=dt/fat; % passo adimensionale tempolare
%Definizione della lunghezza della colonna dei tempi per la stampa delle %matrici
valore=mod(tmax,Dt_p);
70 Ntempistampa=(tmax/Dt_p)+1; else Ntempistampa=ceil(tmax/Dt_p); end % --- % Parte 3: soluzione % --- % inizializzazione
U=zeros(Netot,2); %concentrazione idrogeno diffusibile nei nodi /Cnorm
V=zeros(Netot,2); %concentrazione idrogeno intrappolato reversibilmente /Cnorm
W=zeros(Netot,2); %concentrazione idrogeno intrappolato irreversibilmente /Cnorm
Uprn=zeros(Nx_p,Ntempistampa); %Come U per la stampa
Vprn=zeros(Nx_p,Ntempistampa); %V
Wprn=zeros(Nx_p,Ntempistampa); %W % UprnTH=zeros(Nx_p,Ntprint); % erfc
tp=linspace(0,tmax,Ntprint); %tempi di stampa (flusso??)
tp2=linspace(0,tmax,Nt_p2); %tempi per iprofili
J0p=linspace(0,0,Nt_p2)'; J2p=linspace(0,0,Nt_p2)';
% normalizzazione e fattori adimensionalizzanti
U(1,1)=2*C0/Cnorm; U(Netot,1)=2*C2/Cnorm; fat1=dtau/dX^2; fat2=dtau*phi*ni; fat3=dtau*phi*mu; fat4=dtau*chi*K;
It=1; %inizializza l'indice per la stampa temporale dei profili
It2=1; %inizializza l'indice per la formazione delle funzioni temporali
for it=1:Nt-1;
itc=it+1; %tempo corrente (it è il tempo precedente)
time=itc*dt;
res1=mod(time,Dt_p); res2=mod(time,Dt_p2); if res1==0
IstampaProf=1; %indice per la stampa dei profili
display(time)
else
IstampaProf=0; end
71
IstampaSeq=1; %indice per la memorizzazione dei valori
else IstampaSeq=0; end if itc>1
% adatta la concentrazione dei nodi fittizi
% in modo che la concentrazione sui
% contorni siano C0 e C2
U(1,2)=2*C0/Cnorm-U(2,1);
U(Netot,2)= 2*C2/Cnorm-U(Netot,1); end
% condizioni per i nodi di estremità con derivata temporale in avanti
V(1,2)=V(1,1)+dtau*(ni*U(1,1)*(1-V(1,1))-mu*V(1,1)); V(Netot,2)=V(Netot,1)+dtau*(ni*U(Netot,1)*(1-V(Netot,1))-mu*V(Netot,1)); if V(1,2) > 1 V(1,2) = 1; elseif V(1,2) <0 V(1,2) = 0; end if V(Netot,2) > 1 V(Netot,2) = 1; elseif V(Netot,2) <0 V(Netot,2) = 0; end % V(1,2)=trun(V(1,2)); % V(Netot,2)=trun(V(Netot,2)); W(1,2)=W(1,1)+dtau*K*U(1,1)*(1-W(1,1)); W(Netot,2)=W(Netot,1)+dtau*K*U(Netot,1)*(1-W(Netot,1)); if W(1,2) > 1 W(1,2) = 1; elseif W(1,2) <0 W(1,2) = 0; end if W(Netot,2) > 1 W(Netot,2) = 1; elseif W(Netot,2) <0 W(Netot,2) = 0; end % W(1,2)=trun(W(1,2)); % W(Netot,2)=trun(W(Netot,2));
% per i nodi interni al dominio
% trova la soluzione con la derivata temporale in avanti
for ie=2:Netot-1;
U(ie,2)=U(ie,1)+fat1*(U(ie-1,1)-2*U(ie,1)+U(ie+1,1))... -fat2*U(ie,1)*(1-V(ie,1))+fat3*V(ie,1)...
72 -fat4*U(ie,1)*(1-W(ie,1)); V(ie,2)=V(ie,1)+dtau*(ni*U(ie,1)*(1-V(ie,1))-mu*V(ie,1)); % V(ie,2)=trun(V(ie,2)); if V(ie,2) > 1 V(ie,2) = 1; elseif V(ie,2) <0 V(ie,2) = 0; end W(ie,2)=W(ie,1)+dtau*K*U(ie,1)*(1-W(ie,1)); % W(ie,2)=trun(W(ie,2)); if W(ie,2) > 1 W(ie,2) = 1; elseif W(ie,2) <0 W(ie,2) = 0; end end
% crea le matrici per la stampa
if IstampaProf==1 It=It+1; Utemp=U(:,2); Vtemp=V(:,2); Wtemp=W(:,2); Uprn(:,It)=interp1(xe,Utemp,xp); % mappa U Vprn(:,It)=interp1(xe,Vtemp,xp); % mappa V Wprn(:,It)=interp1(xe,Wtemp,xp); % mappa W end if IstampaSeq==1 It2=It2+1; % J0p(It2)=(U(2,itc)-U(3,itc))/dX; J2p(It2)=(U(Ne-3,2)-U(Ne-2,2))/dX; end
U(:,1)=U(:,2); % Aggiorna i valori al nuovo passo
V(:,1)=V(:,2); W(:,1)=W(:,2); end % % % ---
% Parte 4: Spampa e plotta le soluzioni % ---
% %
%definizione vettore tempi stampa
73
UprnT=Uprn'; %traspone la matrice per il grafico
VprnT=Vprn'; WprnT=Wprn';
UprnTC=zeros(Ntempistampa+1,Nx_p+1); % matrice per la stampa dei risultati
UprnTC(2:end,2:end)=UprnT; UprnTC(2:end,1)=tstampa; UprnTC(1,2:end)=xp';
%save('U_outC.txt','UprnTC','-ascii')
J2pp=J2p*(C0/L)*D; %flusso in corrispondenza della parete di uscita [atomi/m^2s]
% Esportazione su file .txt della matrice delle concentrazioni
fid5 = fopen([num2str(k) '/MATRICEU_' num2str(k) '.txt'],'w');
for i=1:Ntempistampa+1
fprintf(fid5,'%1.4e\t',UprnTC(i,:)); fprintf(fid5,'\n');
end
fclose(fid5);
%---
VprnTC=zeros(Ntempistampa+1,Nx_p+1); % matrice per la stampa dei risultati- trappole reversibili
VprnTC(2:end,2:end)=VprnT; VprnTC(2:end,1)=tstampa; VprnTC(1,2:end)=xp';
% Esportazione su file .txt della matrice delle concentrazioni di trappole reversibili
fid6 = fopen([num2str(k) '/MATRICEV_' num2str(k) '.txt'],'w');
for i=1:Ntempistampa+1
fprintf(fid6,'%1.4e\t',VprnTC(i,:)); fprintf(fid6,'\n');
end
fclose(fid6);
%---
WprnTC=zeros(Ntempistampa+1,Nx_p+1); % matrice per la stampa dei risultati- trappole irreversibili
WprnTC(2:end,2:end)=WprnT; WprnTC(2:end,1)=tstampa; WprnTC(1,2:end)=xp';
% Esportazione su file .txt della matrice delle concentrazioni di trappole irreversibili
fid7 = fopen([num2str(k) '/MATRICEW_' num2str(k) '.txt'],'w');
for i=1:Ntempistampa+1
fprintf(fid7,'%1.4e\t',WprnTC(i,:)); fprintf(fid7,'\n');
end
fclose(fid7);
%---
%Esportazione su file.txt del flusso in corrispondenza della parete di %uscita
74
fid8 = fopen([num2str(k) '/FLUSSOpareteuscita_' num2str(k) '.txt'],'w'); fprintf(fid8,'%1.4e\n',J2pp);
fclose(fid8);
%---
figure(k) subplot(2,2,1) hold all, grid on
for It=1:Ntempistampa; plot(xp,UprnT(It,:))
end
ylabel('U/C0'),xlabel('x [m]')
title('Concentrazione di idrogeno lungo la lastra') grid on
subplot(2,2,2) hold all, grid on
for It=1:Ntempistampa; plot(xp,VprnT(It,:))
end
ylabel('V'), xlabel('x [m]')
title('Frazione di trappole reversibili occupate') grid on
subplot(2,2,3) hold all, grid on
for It=1:Ntempistampa; plot(xp,WprnT(It,:))
end
ylabel('W'), xlabel('x [m]')
title('Frazione di trappole irreversibili occupate') grid on
subplot(2,2,4) hold all, grid on % plot(tp,J0p)
plot(tp,J2pp)
ylabel('J parete di uscita [atomi/m^2s]'),xlabel('t [s]')
title('Flusso di idrogeno in corrispondenza della parete di uscita')
end
Appendice B
Di seguito è riportato il codice della versione Helios2E del programma.
clc, close all, clear all
% programma per la diffusione dell'idrogeno in transitorio
% accetta una concentrazione a sx costante e la parte adiabatica a dx %
%
% --- Costanti fisiche (valori in SI) ---
R=8.314; % costante dei gas
Q=5.69e3; % energia iniziale idrogeno
75
%Numero di test da effettuare
fid1 = fopen('TEST.txt'); Ntest = fscanf(fid1,'%g', 1)'; fclose(fid1);
for k=1:Ntest(1) % indice del file_k.txt % --- Richiamo dei dati in ingresso
% --- Parametri del materiale in prova ---
fid2 = fopen([num2str(k) '/DATI_' num2str(k) '.txt']); iii=0;
while 1
iii=iii+1;
tline = fgetl(fid2);
Md(iii,1)=str2double(strtok(tline));
if ~ischar(tline), break, end end
fclose(fid2);
Temp = Md(1); % Temperatura (K)
Nr = Md(2); % Concentrazione trappole reversibili Nr(atomi/m^3) val tipico 3e24 1e23< < 1e26
Ni = Md(3); % Concentrazione trappole irreversibili Ni (atomi/m^3) val tipico Nr/100
kr = Md(4); % Rateo cattura reversibili kr (m^3/sec) val tipico min 3e-25 max 35e-25
ki = Md(5); % Rateo cattura irreversibili ki (m^3/sec) val tipico 5e-25
p = Md(6); % Rateo di rilascio p (1/sec) val tipico 0.03
% --- ---
D=D0*exp(-Q/(R*Temp)); % Diffusività del ferro alla temperatura di prova %
% --- Dati del provino e di stampa %
fid3 = fopen([num2str(k) '/PS_' num2str(k) '.txt']); iii=0;
while 1
iii=iii+1;
tline = fgetl(fid3);
SP(iii,1)=str2double(strtok(tline));
if ~ischar(tline), break, end
end
fclose(fid3);
L = SP(1); %spessore della lamiera in metri
tmax = SP(2); %tempo massimo di elaborazione (sec.)
Dx_p = SP(3); % passo spaziale di stampa in m per i prifili
Dt_p = SP(4); % % passo temporale di stampa dei profili(sec)
Dt_p2 = SP(5); %passo temporale per la stampa delle funzioni del tempo (sec) dipico 1
% --- %
76
Dt_p=NDt*Dt_p2; % il passo di stampa è aggiustato in modo che sia multiplo intero del passo di stmapa dei profili
% %
% --- Condizioni iniziali e al contorno --- % In questa prima versione le condizioni al contorno sono semplicemente: % concentrazione costante C0 a sinistra e C2 a destra
%
fid4 = fopen([num2str(k) '/CC2E_' num2str(k) '.txt']); if fid4 == -1
disp(' file CC2E.txt non presente nella cartella 1 '); disp(' cambiare file input condizioni al contorno '); disp(' oppure ');
disp(' cambiare programma Helios '); break end iii=0; while 1 iii=iii+1; tline = fgetl(fid4); BC(iii,1)=str2double(strtok(tline));
if ~ischar(tline), break, end end
fclose(fid4);
C0=BC(1); %Concentrazione sulla parete sinistra
% --- %
%
% --- % parte 1: set up della mesh
% --- %
% Numero di suddivisioni spaziali della mesh %
fatR=Nr*kr; %fattore che determina la convergenza
Ne=100; %numero di elementi interni al dominio (valore consigliato 100)
if fatR>70
dif=fatR-70;
Ne=ceil(100+0.66*dif-0.0008*dif^2);
ttt1='Il numero di suddivisioni è stato portato a: '; ttt2=num2str(Ne);
ttt3=[ttt1 ttt2]; display(ttt3)
end
Netot=Ne+2; % Numero di elementi più i due fittizi alle estremità
dx=L/Ne; % dimensione del nodo di mesh
dt=0.5*(0.5*(dx^2) /D); %passo temporale di calcolo 1/2 del passo minimo di converg.
Nt_p=ceil(Dt_p2/dt); % numero di passi di calcolo nell'intervallo di stampa dei profili
77
dt=Dt_p2/Nt_p; % correzione del passo di calcolo per avere multipli interi
Nt=tmax/dt+1; %numero di passi temporali di calcolo compreso il passo 0
Ntprint=ceil(Nt/Nt_p); %numero di passi temporali di stampa dei profili
Nt_p2=ceil(tmax/Dt_p2)+1; %numero di istanti temporali per il calcolo dei flussi
Nx_p=ceil(L/Dx_p); % numero di posizioni di stampa in x
Lpmax=(Nx_p)*Dx_p; if Lpmax<L Nx_p=Nx_p+1; Lpmax=(Nx_p)*Dx_p; end Nx_p=Nx_p+1;
Nint=Ne+1; % numero di interfacce
xe=linspace(-dx/2,L+dx/2,Netot)'; % posizioni dei centri dei nodi
xi=linspace(0,L,Nint)'; % posizione delle interfacce
xp=linspace(0,Lpmax,Nx_p)'; % posizione delle ascisse di stampa % ---
% Parte 2: normalizzazione % ---
Cnorm=C0; %fattore normalizzante sulla concentrazione
if Cnorm<=0 Cnorm=1; end fat=L^2/D; phi=Nr/Cnorm; chi=Ni/Cnorm; mu=p*fat; ni=kr*Cnorm*fat; K=ki*Cnorm*fat;
dX=dx/L; % passo adimensionale spaziale
dtau=dt/fat; % passo adimensionale tempolare
%Definizione della lunghezza della colonna dei tempi per la stampa delle %matrici valore=mod(tmax,Dt_p); if valore==0 Ntempistampa=(tmax/Dt_p)+1; else Ntempistampa=ceil(tmax/Dt_p); end % --- % Parte 3: soluzione % --- % inizializzazione
U=zeros(Netot,2); %concentrazione idrogeno diffusibile nei nodi /Cnorm
V=zeros(Netot,2); %concentrazione idrogeno intrappolato reversibilmente /Cnorm
W=zeros(Netot,2); %concentrazione idrogeno intrappolato irreversibilmente /Cnorm
Uprn=zeros(Nx_p,Ntempistampa); %Come U per la stampa
Vprn=zeros(Nx_p,Ntempistampa); %V
Wprn=zeros(Nx_p,Ntempistampa); %W % UprnTH=zeros(Nx_p,Ntprint); % erfc
78
tp=linspace(0,tmax,Ntprint); %tempi di stampa
tp2=linspace(0,tmax,Nt_p2); %tempi per iprofili
J0p=linspace(0,0,Nt_p2)'; U2=linspace(0,0,Nt_p2)';
% normalizzazione e fattori adimensionalizzanti
U(1,1)=2*C0/Cnorm;
fat1=dtau/dX^2; fat2=dtau*phi*ni; fat3=dtau*phi*mu; fat4=dtau*chi*K;
It=1; %inizializza l'indice per la stampa temporale dei profili
It2=1; %inizializza l'indice per la formazione delle funzioni temporali
for it=1:Nt-1
itc=it+1; %tempo corrente (it è il tempo precedente)
time=itc*dt;
res1=mod(time,Dt_p); res2=mod(time,Dt_p2); if res1==0
IstampaProf=1; %indice per la stampa dei profili
display(time)
else
IstampaProf=0; end
if res2==0
IstampaSeq=1; %indice per la memorizzazione dei valori
else IstampaSeq=0; end if itc>1
% adatta la concentrazione dei nodi fittizi
% in modo che la concentrazione sui
% contorni siano C0 e C2
U(1,2)=2*C0/Cnorm-U(2,1);
U(Netot,2)= U(Netot-1,1); end
% condizioni per i nodi di estremità con derivata temporale in avanti
V(1,2)=V(1,1)+dtau*(ni*U(1,1)*(1-V(1,1))-mu*V(1,1)); V(Netot,2)=V(Netot,1)+dtau*(ni*U(Netot,1)*(1-V(Netot,1))-mu*V(Netot,1)); if V(1,2) > 1 V(1,2) = 1; elseif V(1,2) <0 V(1,2) = 0; end
79 if V(Netot,2) > 1 V(Netot,2) = 1; elseif V(Netot,2) <0 V(Netot,2) = 0; end % V(1,2)=trun(V(1,2)); % V(Netot,2)=trun(V(Netot,2)); W(1,2)=W(1,1)+dtau*K*U(1,1)*(1-W(1,1)); W(Netot,2)=W(Netot,1)+dtau*K*U(Netot,1)*(1-W(Netot,1)); if W(1,2) > 1 W(1,2) = 1; elseif W(1,2) <0 W(1,2) = 0; end if W(Netot,2) > 1 W(Netot,2) = 1; elseif W(Netot,2) <0 W(Netot,2) = 0; end % W(1,2)=trun(W(1,2)); % W(Netot,2)=trun(W(Netot,2));
% per i nodi interni al dominio
% trova la soluzione con la derivata temporale in avanti
for ie=2:Netot-1; U(ie,2)=U(ie,1)+fat1*(U(ie-1,1)-2*U(ie,1)+U(ie+1,1))... -fat2*U(ie,1)*(1-V(ie,1))+fat3*V(ie,1)... -fat4*U(ie,1)*(1-W(ie,1)); V(ie,2)=V(ie,1)+dtau*(ni*U(ie,1)*(1-V(ie,1))-mu*V(ie,1)); % V(ie,2)=trun(V(ie,2)); if V(ie,2) > 1 V(ie,2) = 1; elseif V(ie,2) <0 V(ie,2) = 0; end W(ie,2)=W(ie,1)+dtau*K*U(ie,1)*(1-W(ie,1)); % W(ie,2)=trun(W(ie,2)); if W(ie,2) > 1 W(ie,2) = 1; elseif W(ie,2) <0 W(ie,2) = 0; end end
U(Netot,2)=U(Netot-1,2); %annulla il flusso diffusibile
80 if IstampaProf==1 It=It+1; Utemp=U(:,2); Vtemp=V(:,2); Wtemp=W(:,2); Uprn(:,It)=interp1(xe,Utemp,xp); % mappa U Vprn(:,It)=interp1(xe,Vtemp,xp); % mappa V Wprn(:,It)=interp1(xe,Wtemp,xp); % mappa W end if IstampaSeq==1 It2=It2+1; % J0p(It2)=(U(2,itc)-U(3,itc))/dX; U2(It2)=U(Ne-2,2); end
U(:,1)=U(:,2); % Aggiorna i valori al nuovo passo
V(:,1)=V(:,2); W(:,1)=W(:,2); end % % % ---
% Parte 4: Spampa e plotta le soluzioni % ---
% %
%definizione vettore tempi stampa
tstampa=0:Dt_p:tmax;
UprnT=Uprn'; %traspone la matrice per il grafico
VprnT=Vprn'; WprnT=Wprn';
UprnTC=zeros(Ntempistampa+1,Nx_p+1); % matrice per la stampa dei risultati
UprnTC(2:end,2:end)=UprnT; UprnTC(2:end,1)=tstampa; UprnTC(1,2:end)=xp';
%save('U_outC.txt','UprnTC','-ascii') % --- TXT ---
% Esportazione su file .txt della matrice delle concentrazioni
fid5 = fopen([num2str(k) '/MATRICEU_' num2str(k) '.txt'],'w');
for i=1:Ntempistampa+1
fprintf(fid5,'%1.4e\t',UprnTC(i,:)); fprintf(fid5,'\n');
end
fclose(fid5);
%---
VprnTC=zeros(Ntempistampa+1,Nx_p+1); % matrice per la stampa dei risultati- trappole reversibili
VprnTC(2:end,2:end)=VprnT; VprnTC(2:end,1)=tstampa;
81
VprnTC(1,2:end)=xp';
% Esportazione su file .txt della matrice delle concentrazioni di trappole reversibili
fid6 = fopen([num2str(k) '/MATRICEV_' num2str(k) '.txt'],'w');
for i=1:Ntempistampa+1
fprintf(fid6,'%1.4e\t',VprnTC(i,:)); fprintf(fid6,'\n');
end
fclose(fid6);
%---
WprnTC=zeros(Ntempistampa+1,Nx_p+1); % matrice per la stampa dei risultati- trappole irreversibili
WprnTC(2:end,2:end)=WprnT; WprnTC(2:end,1)=tstampa; WprnTC(1,2:end)=xp';
% Esportazione su file .txt della matrice delle concentrazioni di trappole irreversibili
fid7 = fopen([num2str(k) '/MATRICEW_' num2str(k) '.txt'],'w');
for i=1:Ntempistampa+1
fprintf(fid7,'%1.4e\t',WprnTC(i,:)); fprintf(fid7,'\n');
end
fclose(fid7);
%---
%Esportazione su file.txt della concentrazione di idrogeno in