-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFindNSE.m
168 lines (150 loc) · 8.56 KB
/
FindNSE.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
function FindNSE(FSO,FSN,step)
%Original: [NFSS,NFSE] = FindNSE(dFSO,dFSN,step)
%To find step numbers which show solidification starts and ends,
%repectively, for step>=2
%Created 2019-10-20
%Modified for MAGTC3 2020-6-30
%NFSS: record step at which minerals (OL, OPX, CPX, PL, ILM) begins to form
%NFSS=struct('OL',ones(NIY+2,NIX+2,'int16'),...
% 'OPX',ones(NIY+2,NIX+2,'int16'),...
% 'CPX',ones(NIY+2,NIX+2,'int16'),...
% 'PL',ones(NIY+2,NIX+2,'int16'),...
% 'ILM',ones(NIY+2,NIX+2,'int16'));
%NFSE: record step at which no more minerals (OL, OPX, CPX, PL, ILM) to form
% NFSE=struct('OL',ones(NIY+2,NIX+2,'int16'),...
% 'OPX',ones(NIY+2,NIX+2,'int16'),...
% 'CPX',ones(NIY+2,NIX+2,'int16'),...
% 'PL',ones(NIY+2,NIX+2,'int16'),...
% 'ILM',ones(NIY+2,NIX+2,'int16'));
%NOTE: these two variables above are used to cope with inhomogeneous Cu
%distribution in solid
%dFSO: old dFS
%dFSN: new dFS
%FSO: old FS
%FSN: new FS
global NIX
global NIY
global NFSS
global NFSE
errFS=0.0001;
%======================= VERY IMPORTANT NOTE ==============================
%Sometimes, remelting may occur, thus dFS<0.0; and also somtimes during
%solidification process, there is no crystallization for some steps. So,
%the judgement below based on dFS is no better than the one based on FS!
%======================= VERY IMPORTANT NOTE ==============================
%% ================== OLD ALGORITHM dFS ==========================
% for i=1:NIX
% for j=1:NIY
% %Situation One: no solidification yet
% if((dFSO(j,i)<=0.0)&&(dFSN(j,i)<=0.0))
% NFSS(j,i)=step;%solidification start step number should change until real solid shows up
% NFSE(j,i)=step;%solidification end step number should >=NFSS
% end
% %Situation Two: solidification just begins right now
% if((dFSO(j,i)<=0.0)&&(dFSN(j,i)>0.0))
% NFSS(j,i)=step;%solidification start step number should change until real solid shows up
% NFSE(j,i)=step;%solidification end step number should >=NFSS
% end
% %Situation Three: solidification keeps working
% if((dFSO(j,i)>0.0)&&(dFSN(j,i)>0.0))
% %NFSS(j,i)=step;%solidification start step number has been recorded
% NFSE(j,i)=step;%solidification end step number should >=now
% end
% %Situation Four: solidification ends
% if((dFSO(j,i)>0.0)&&(dFSN(j,i)<=0.0))
% %NFSS(j,i)=step;%solidification start step number has been recorded
% NFSE(j,i)=step;%solidification end step number should >=now
% end
%
% end
% end
%% ===================== NEW ALGORITHM FS ========================
for i=1:NIX+2
for j=1:NIY+2
%Situation One: no solidification yet
if((abs(FSO.OL(j,i))<=errFS)&&(abs(FSN.OL(j,i))<=errFS))
NFSS.OL(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.OL(j,i)=step;%solidification end step number should >=NFSS
end
if((abs(FSO.OPX(j,i))<=errFS)&&(abs(FSN.OPX(j,i))<=errFS))
NFSS.OPX(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.OPX(j,i)=step;%solidification end step number should >=NFSS
end
if((abs(FSO.CPX(j,i))<=errFS)&&(abs(FSN.CPX(j,i))<=errFS))
NFSS.CPX(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.CPX(j,i)=step;%solidification end step number should >=NFSS
end
if((abs(FSO.PL(j,i))<=errFS)&&(abs(FSN.PL(j,i))<=errFS))
NFSS.PL(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.PL(j,i)=step;%solidification end step number should >=NFSS
end
if((abs(FSO.ILM(j,i))<=errFS)&&(abs(FSN.ILM(j,i))<=errFS))
NFSS.ILM(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.ILM(j,i)=step;%solidification end step number should >=NFSS
end
%Situation Two: solidification just begins right now
if((abs(FSO.OL(j,i))<=errFS)&&(abs(FSN.OL(j,i))>errFS)&&(abs(FSN.OL(j,i)-1.0)>=errFS))
NFSS.OL(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.OL(j,i)=step;%solidification end step number should >=NFSS
end
if((abs(FSO.OPX(j,i))<=errFS)&&(abs(FSN.OPX(j,i))>errFS)&&(abs(FSN.OPX(j,i)-1.0)>=errFS))
NFSS.OPX(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.OPX(j,i)=step;%solidification end step number should >=NFSS
end
if((abs(FSO.CPX(j,i))<=errFS)&&(abs(FSN.CPX(j,i))>errFS)&&(abs(FSN.CPX(j,i)-1.0)>=errFS))
NFSS.CPX(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.CPX(j,i)=step;%solidification end step number should >=NFSS
end
if((abs(FSO.PL(j,i))<=errFS)&&(abs(FSN.PL(j,i))>errFS)&&(abs(FSN.PL(j,i)-1.0)>=errFS))
NFSS.PL(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.PL(j,i)=step;%solidification end step number should >=NFSS
end
if((abs(FSO.ILM(j,i))<=errFS)&&(abs(FSN.ILM(j,i))>errFS)&&(abs(FSN.ILM(j,i)-1.0)>=errFS))
NFSS.ILM(j,i)=step;%solidification start step number should change until real solid shows up
NFSE.ILM(j,i)=step;%solidification end step number should >=NFSS
end
%Situation Three: solidification keeps working
if((abs(FSO.OL(j,i))>errFS)&&(abs(FSO.OL(j,i)-1.0)>=errFS)&&(abs(FSN.OL(j,i))>errFS)&&(abs(FSN.OL(j,i)-1.0)>=errFS))
%NFSS.OL(j,i)=step;%solidification start step number has been recorded
NFSE.OL(j,i)=step;%solidification end step number should >=now
end
if((abs(FSO.OPX(j,i))>errFS)&&(abs(FSO.OPX(j,i)-1.0)>=errFS)&&(abs(FSN.OPX(j,i))>errFS)&&(abs(FSN.OPX(j,i)-1.0)>=errFS))
%NFSS.OPX(j,i)=step;%solidification start step number has been recorded
NFSE.OPX(j,i)=step;%solidification end step number should >=now
end
if((abs(FSO.CPX(j,i))>errFS)&&(abs(FSO.CPX(j,i)-1.0)>=errFS)&&(abs(FSN.CPX(j,i))>errFS)&&(abs(FSN.CPX(j,i)-1.0)>=errFS))
%NFSS.CPX(j,i)=step;%solidification start step number has been recorded
NFSE.CPX(j,i)=step;%solidification end step number should >=now
end
if((abs(FSO.PL(j,i))>errFS)&&(abs(FSO.PL(j,i)-1.0)>=errFS)&&(abs(FSN.PL(j,i))>errFS)&&(abs(FSN.PL(j,i)-1.0)>=errFS))
%NFSS.PL(j,i)=step;%solidification start step number has been recorded
NFSE.PL(j,i)=step;%solidification end step number should >=now
end
if((abs(FSO.ILM(j,i))>errFS)&&(abs(FSO.ILM(j,i)-1.0)>=errFS)&&(abs(FSN.ILM(j,i))>errFS)&&(abs(FSN.ILM(j,i)-1.0)>=errFS))
%NFSS.ILM(j,i)=step;%solidification start step number has been recorded
NFSE.ILM(j,i)=step;%solidification end step number should >=now
end
%Situation Four: solidification ends
if((abs(FSO.OL(j,i))>errFS)&&(abs(FSO.OL(j,i)-1.0)>=errFS)&&(abs(FSN.OL(j,i)-1.0)<errFS))
%NFSS.OL(j,i)=step;%solidification start step number has been recorded
NFSE.OL(j,i)=step;%solidification end step number should >=now
end
if((abs(FSO.OPX(j,i))>errFS)&&(abs(FSO.OPX(j,i)-1.0)>=errFS)&&(abs(FSN.OPX(j,i)-1.0)<errFS))
%NFSS.OPX(j,i)=step;%solidification start step number has been recorded
NFSE.OPX(j,i)=step;%solidification end step number should >=now
end
if((abs(FSO.CPX(j,i))>errFS)&&(abs(FSO.CPX(j,i)-1.0)>=errFS)&&(abs(FSN.CPX(j,i)-1.0)<errFS))
%NFSS.CPX(j,i)=step;%solidification start step number has been recorded
NFSE.CPX(j,i)=step;%solidification end step number should >=now
end
if((abs(FSO.PL(j,i))>errFS)&&(abs(FSO.PL(j,i)-1.0)>=errFS)&&(abs(FSN.PL(j,i)-1.0)<errFS))
%NFSS.PL(j,i)=step;%solidification start step number has been recorded
NFSE.PL(j,i)=step;%solidification end step number should >=now
end
if((abs(FSO.ILM(j,i))>errFS)&&(abs(FSO.ILM(j,i)-1.0)>=errFS)&&(abs(FSN.ILM(j,i)-1.0)<errFS))
%NFSS.ILM(j,i)=step;%solidification start step number has been recorded
NFSE.ILM(j,i)=step;%solidification end step number should >=now
end
end
end
end