0002835182 371..379978-3-319-41196-5/1.pdf371. fig. a.1 a typical voronoi tessellation results for...
TRANSCRIPT
![Page 1: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/1.jpg)
Appendix A
The initial polycrystalline microstructure used
in grain growth simulations in the Case Studies
II, VI, and XII was generated with the program
given below. The number of grains in those
simulations was 25; however, there is no limit
for the number of grains that program can gen-
erate. The program is based on the Voronoi
tessellation of the randomly distributed points
that is equal to the desired number of grains in
the phase-field simulation cell with periodicity.
For the Voronoi tessellation, the program
utilizes the internal function voronoin of
Matlab/Octave.
Since the points are randomly distributed,
each execution produces different grain
microstructures with the same number of points.
Program produces two graphical output files. The
file “Voroni_vertices.out” shows the whole
Voronoi tessellation results and it can be viewed
in gnuplot with the command, plot
“Voroni_vertices.out” w l, as shown in Fig. A.1.
The second graphical output file shows the data
in output file grain_25.inp which is directly used
in the phase-field codes. Again, this graphical
output file can be viewed in gnuplot with the
command, load “final_plot.p”, as shown in
Fig. A.2.
The code and the resulting output files for
Appendix A are included in the downloadable
zip files for Chapters 4, 5, and 6.
Program
voronoi_1.m
This program generates random polycrystalline
microstructure by using Voronoi tessellation for
the phase-field models.
Listing:
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Generation of polycrystal %
3 % grain microstructure %
4 % with Voronoi tessellation %
5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6
7 out¼fopen(’Voroni_vertices.out’,
’w’);
8 out1¼fopen(’plot_1.out’,’w’);
9 out2¼fopen(’final_plot.p’,’w’);
10 out3¼fopen(’original_points.out’,
’w’);
11 out4¼fopen(’cell_1.out’,’w’);
12 out5¼fopen(’grain_25.inp’,’w’);
13
14 %----
15
16 npoin¼25;
17 xmax¼32.0;
18 ymax¼32.0;
19 x0 ¼0.0;
The original version of this chapter was revised. An
erratum to this chapter can be found at DOI 10.1007/
978-3-319-41196-5_9
# Springer International Publishing Switzerland 2017
S.B. Biner, Programming Phase-Field Modeling, DOI 10.1007/978-3-319-41196-5371
![Page 2: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/2.jpg)
Fig. A.1 A typical
Voronoi tessellation results
for the points with their all
nine replicas. The file name
that contains this graphical
result is “Voroni-vertices.out” and the figure is
generated in gnuplot with
the command
plot “Voroni_vertices.out” w l
Fig. A.2 Graphical output of the data that will be used in the phase-field simulations. In the figure, green box is the
simulation cell in the phase-field model. The upper numbers correspond to the grain numbers and the lower ones are the
cell numbers of the Voronoi cells. Blue points correspond to the coordinates of the randomly generated points. The file
name that contains this graphical result is final_plot.p and the figure is generated in gnuplot by using the command
load “final_plot.p”
372 Appendix A
![Page 3: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/3.jpg)
20 y0 ¼0.0;
21 extra ¼ 2.0;
22
23 %---------------------–
24 % generate random points
25 % for voronoi tessellation
26 %------------------------
27
28 rand(’state’,7)
29
30 x ¼xmax*rand(npoin,1);
31 y ¼ymax*rand(npoin,1);
32
33 %-------
34 % Duplicate the points for symmetry:
35 %-------
36
37 for ipoin¼1:npoin
38 jpoin¼npoin+ipoin;
39 x(jpoin)¼x(ipoin);
40 y(jpoin)¼y(ipoin)-ymax;
41 end
42 %---
43 for ipoin¼1:npoin
44 jpoin¼npoin*2+ipoin;
45 x(jpoin)¼x(ipoin)+xmax;
46 y(jpoin)¼y(ipoin)-ymax;
47 end
48 %---
49 for ipoin¼1:npoin
50 jpoin¼npoin*3+ipoin;
51 x(jpoin)¼x(ipoin)+xmax;
52 y(jpoin)¼y(ipoin);
53 end
54 %---
55 for ipoin¼1:npoin
56 jpoin¼npoin*4+ipoin;
57 x(jpoin)¼x(ipoin)+xmax;
58 y(jpoin)¼y(ipoin)+ymax;
59 end
60 %---
61 for ipoin¼1:npoin
62 jpoin¼npoin*5+ipoin;
63 x(jpoin)¼x(ipoin);
64 y(jpoin)¼y(ipoin)+ymax;
65 end
66 %---
67 for ipoin¼1:npoin
68 jpoin¼npoin*6+ipoin;
69 x(jpoin)¼x(ipoin)-xmax;
70 y(jpoin)¼y(ipoin)+ymax;
71 end
72 %---
73 for ipoin¼1:npoin
74 jpoin¼npoin*7+ipoin;
75 x(jpoin)¼x(ipoin)-xmax;
76 y(jpoin)¼y(ipoin);
77 end
78 %---
79 for ipoin¼1:npoin
80 jpoin¼npoin*8+ipoin;
81 x(jpoin)¼x(ipoin)-xmax;
82 y(jpoin)¼y(ipoin)-ymax;
83 end
84
85 %%
86 %%--- Print-out origional random
points:
87 %%
88
89 for i¼1:npoin
90 fprintf(out3,’%4.6e %14.6e\n’,
x(i),y(i));
91 end
92
93 %%
94 %%-- Print the simulation cell
coordinates:
95 %%
96
97 fprintf(out4,’%14.6e %14.6e\n’,
x0,y0);
98 fprintf(out4,’%14.6e %14.6e\n’,
xmax,y0);
99 fprintf(out4,’%14.6e %14.6e\n’,
xmax,ymax);
100 fprintf(out4,’%14.6e %14.6e\n’,
x0,ymax);
101 fprintf(out4,’%14.6e %14.6e\n’,
x0,y0);
102
103 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼104 %--- generate voronoi diagram
105 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼106
107 [c,f] ¼ voronoin([x,y]);
108
109
Appendix A 373
![Page 4: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/4.jpg)
110 %----------------
111 %- rearrange voronoin output
112 %- for their connectivity
113 %---------------–
114
115 nvelem ¼size(f);
116
117 ncount¼0;
118 for i¼1:nvelem
119 flag¼1;
120
121 vnodes ¼f{i,:};
122 nnode¼size(vnodes,2);
123
124 for j¼1:nnode
125 if(vnodes(j) ¼¼ 1)
126 flag¼0;
127 end
128 end
129
130 if(flag ¼¼ 1)
131 ncount ¼ ncount+1;
132 for j¼1:nnode
133 lnods(ncount,j)¼vnodes(j);
134 end
135 end
136
137 end
138
139 %--------------------------------
140 % print voronoi results to file
141 % to be viewed later in Voroni_
vertices.out
142 %--------------------------------
143
144 for i¼1:ncount
145 fprintf(out,’# i %d\n’,i);
146
147 nnode¼size(lnods,2);
148
149 for j¼1:nnode
150 kk ¼ lnods(i,j);
151 if(kk ~¼ 0)
152 fprintf(out,’%14.6e %14.6e\n’,
c(kk, 1),c(kk,2));
153 end
154 end
155 kk ¼ lnods(i,1);
156 fprintf(out,’%14.6e %14.6e\n’,
c(kk,1),c(kk,2));
157
158 fprintf(out,’\n’);
159
160 end
161
162 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼163 % Clip far outside voronoi elements
164 % from the simulation cell
165 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼166
167 nelem¼0;
168 for i¼1:ncount
169 flag¼0;
170 for j¼1:nnode
171 kk ¼ lnods(i,j);
172 if(kk ~¼ 0)
173 if(c(kk,1) >¼ -extra && c(kk,1)
<¼ xmax+ extra)
174 if(c(kk,2) >¼ -extra && c(kk,2)
<¼ ymax+ extra)
175 flag¼1;
176 end
177 end
178 end
179 end %j
180
181 if(flag ¼¼ 1)
182 nelem¼nelem+1;
183 jnode¼0;
184 for j¼1:nnode
185 kk¼lnods(i,j);
186 if(kk ~¼0 )
187 jnode¼jnode+1;
188 lnods2(nelem,jnode) ¼lnods(i,j);
189 end
190 end %j
191
192 nnode2(nelem)¼jnode;
193 end % iflag
194 end %icount
195
196
197 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼198 % Assign grain numbers to
199 % voronoi elements
200 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼201 twopi ¼8.0*atan(1.0);
202 epsilon¼1.0e-4;
203
204 for isector¼1:9
374 Appendix A
![Page 5: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/5.jpg)
205 for ipoin¼1:npoin
206 jpoin¼(isector-1)*npoin+ipoin;
207
208 for ielem¼1:nelem
209 theta¼0.0;
210 nnode¼nnode2(ielem);
211
212 for inode¼1:nnode
213 kk ¼lnods2(ielem,inode);
214
215 xv1¼c(kk,1);
216 yv1¼c(kk,2);
217
218 jnode¼inode+1;
219 if( inode ¼¼ nnode)
220 jnode¼1;
221 end
222
223 jj¼lnods2(ielem,jnode);
224 xv2¼c(jj,1);
225 yv2¼c(jj,2);
226
227 p2x ¼(xv1-x(jpoin));
228 p2y ¼(yv1-y(jpoin));
229
230 p1x ¼(xv2-x(jpoin));
231 p1y ¼(yv2-y(jpoin));
232
233 x1¼sqrt(p1x*p1x+p1y*p1y);
234 x2¼sqrt(p2x*p2x+p2y*p2y);
235
236 if(x1*x2 <¼ epsilon)
237 theta¼twopi;
238 else
239 tx1¼((p1x*p2x+p1y*p2y)/(x1*x2));
240
241 if(abs(tx1) >¼1.0)
242 tx1¼0.9999999999;
243 end
244
245 theta¼theta+acos(tx1);
246
247
248 end
249
250 end %inode
251
252 if(abs(theta-twopi) <¼ epsilon)
253
254 igrain(ielem)¼ipoin;
255
256 end
257
258
259 end % ielem
260
261 end % ipoin
262 end
263
264 %%------------------------
265 %% print out as input file
266 %%------------------------
267
268 [nn1,nn2]¼size(c);
269 nnode¼size(lnods2,2);
270 fprintf(out5,’%5d %5d %5d\n’,
(nn1-1),nnode,nelem);
271
272 for i¼2:nn1
273 fprintf(out5,’ %5d %14.6e
%14.6e\n’, i,c(i,1),c(i,2));
274 end
275
276 for i¼1:nelem
277 fprintf(out5,’%5d’,i);
278 for j¼1:nnode
279 fprintf(out5,’%5d’,lnods2(i,j));
280 end
281 fprintf(out5,’%5d’,igrain(i));
282 fprintf(out5,’\n’);
283 end
284
285 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼286 % graphic output
287 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼288
289
290 for i¼1:nelem
291 fprintf(out1,’# i %d %d\n’,i,
nnode2( i));
292
293 nnode¼size(lnods2,2);
294
295 ncount¼0;
296 xcod ¼0.0;
297 ycod ¼0.0;
298
299 %nnode ¼ nnode2(ielem);
300
301 for j¼1:nnode
302
303 kk ¼ lnods2(i,j);
Appendix A 375
![Page 6: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/6.jpg)
304 fprintf(out1,’# %5d %5d\n’,j,kk);
305
306 if(kk ~¼ 0)
307 fprintf(out1,’%14.6e %14.6e\n’,
c(kk,1),c(kk,2));
308 ncount¼ncount+1;
309 xcod ¼xcod +c(kk,1);
310 ycod ¼ycod +c(kk,2);
311 end
312 end
313 kk ¼ lnods2(i,1);
314 fprintf(out1,’%14.6e %14.6e\n’,
c(kk,1),c(kk,2));
315 fprintf(out1,’\n’);
316
317 xcod ¼xcod/ncount;
318 ycod ¼ycod/ncount;
319
320 fprintf(out2,’set label ’);fprintf
(out2,’"’); fprintf(out2,’%d’,i);
. . .
321 fprintf(out2,’" at’); fprintf
(out2, ’%14.6e , %14.6e\n’,xcod,
ycod);
322 fprintf(out2,’\n’);
323
324 fprintf(out2,’set label ’);
fprintf(out2,’"’); fprintf
(out2,’%d’,igrain(i)); . . .
325 fprintf(out2,’" at’); fprintf
(out2 ,’%14.6e , %14.6e\n’,
xcod+1.5,ycod+1.5);
326 fprintf(out2,’\n’);
327
328 end
329 fprintf(out2, ’plot "plot_1.out"
w l, "cell_1.out" w l,
"original_points.out"\n’);
330
331 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼332
Line numbers:
7–13: Assign unit names for the output files.
7: Output file name for Voronoi tessellation.
8: Intermediate plot file name.
9: Final graphical output file name.
(continued)
10: File name that contains the coordinates of
the randomly generated points.
11: File name that contains the Cartesian
coordinates of the corners of the
simulation cell.
12: Tabulated output file that will be used in
phase-field simulations.
16: Number of grains in the simulation cell.
17: The length of the simulation cell in the
x-direction.
18: The length of the simulation cell in the
y-direction.
19–20: The origin of the coordinate system.
21: A parameter will be used for trimming the
Voronoi tessellation results.
24–32: Randomly generate the x- and y-coordinatesof the points.
34–84: Replicate the points for their nine periodic
images, for generation of periodic
simulation cell in phase-field simulations.
86–92: Output the coordinates of the points to file.
94–101: Output the corner coordinates of the
simulation cell to file.
104–108: Generate Voronoi tessellation by using
Matlab/Octave function voronoin
111–137: Rearrange the voronoin output for the
connectivity list of the Voronoi cells.
140–160: Print out the Voronoi cell data into
graphical output file Voroni-vertices.outfile. This file can be viewed in gnuplot with
command, plot “Voroni_vertices.out” w l.
163–195: Clip the Voronoi cells that are far away
from the simulation cell for efficiency. This
is achieved with the variable name extra in
lines 173 and 174. Too narrow choice for
the value of extra may result in non-periodic
grain structure in final output. On the other
hand, to large value brings an inefficiency.
Since the results of the Voronoi tessellation
results is not known beforehand, it is set to
an optimum value by trial and error as
shown in Fig. A.2.
198–263: Assign grain numbers to the remaining
Voronoi cells with the point in the box
algorithm.
265–283: Print out the coordinates and the
connectivity list of the Voronoi cells that
have the assigned grain numbers to file. This
file is directly used by the phase-field codes
given in Case Studies II, VI, and XII.
286–330: Write the graphical output files, “plot_1.
out” and “final_plot.p” files.
376 Appendix A
![Page 7: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/7.jpg)
Appendix B
The functions given in this section generate the
Green’s tensor in three-dimension. In order to
avoid the exhaustion of the available memory,
in three-dimension, it is generated with two sep-
arate functions. In the main program, the func-
tion green_tensor1_3D.m should be called only
once after establishing FFT coefficients. Then,
the function green_tensor2_3D.m should be
called at every grid points, whenever, the
Green’s tensor is needed.
These functions can be found in the down-
loadable zip file for Chapter 5.
Function
green_tensor1_3D.m
This function evaluates the coefficients that will
be used in the green_tensor2_3D.m. It needs tobe called only once after establishing the FFT
coefficients in the main program.
Variable and array list:
Nx: Number of grid points in the
x-direction.
Ny: Number of grid points in the
y-direction.
Nz: Number of grid points in the
z-direction.
kx(Nx): Fourier coefficients in the
x-direction.
ky(Ny): Fourier coefficients in the
y-direction.
kz(Nz): Fourier coefficients in the
z-direction.
cm11,cm12,cm44:
Elasticity parameters of the matrix
phase.
(continued)
cp11,cp12,cp44: Elasticity parameters of the second
phase.
omeg11(Nx,Ny,Nz):
Coefficient needed for the Green’s
tensor.
omeg22(Nx,Ny,Nz):
Coefficient needed for the Green’s
tensor.
omeg33(Nx,Ny,Nz):
Coefficient needed for the Green’s
tensor.
omeg12(Nx,Ny,Nz):
Coefficient needed for the Green’s
tensor.
omeg23(Nx,Ny,Nz):
Coefficient needed for the Green’s
tensor.
omeg13(Nx,Ny,Nz):
Coefficient needed for the Green’s
tensor.
Listing:
1 function [omeg11,omeg22,omeg33,
omeg12, omeg23,omeg13] ¼green_tensor1_3D(Nx,Ny,Nz, . . .
2 kx,ky,kz, . . .
3 cm11,cm12,cm44, . . .
4 cp11,cp12,cp44)
5 format long;
6
7 c11 ¼ 0.5*(cm11+cp11);
8 c12 ¼ 0.5*(cm12+cp12);
9 c44 ¼ 0.5*(cm44+cm44);
10
11
12
13 chi¼(c11-c12-2.0*c44)/c44;
14
15 for i¼1:Nx
16 for j¼1:Ny
17 for k¼1:Nz
# Springer International Publishing Switzerland 2017
S.B. Biner, Programming Phase-Field Modeling, DOI 10.1007/978-3-319-41196-5377
![Page 8: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/8.jpg)
18
19 rr¼kx(i)^2+ky(j)^2+kz(k)^2;
20
21 d0¼c11*rr^3+chi*(c11+c12)*rr*
(kx(i )^2*ky(j)^2 . . .
22 +ky(j)^2*kz(k)^2+kx(i)^2*
kz(k)^2)+chi^2* . . .
23 (c11+2*c12+c44)*kx(i)^2*ky(j)^2
*kz( k)^2;
24
25 if(rr < 1.0e-8)
26 d0¼1.0
27 end
28
29 omeg11(i,j,k)¼(c44*rr^2+(c11+c12)
*chi*ky(j)^2*kz(k)^2 . . .
30 +(c11-c44)*rr*(ky(j)^2
+kz(k)^2))/(c44*d0);
31
32 omeg22(i,j,k)¼(c44*rr^2+(c11+c12)
*c hi*kz(k)^2*kx(i)^2 . . .
33 +(c11-c44)*rr*(kz(k)^2
+kx(i)^2))/(c44*d0);
34
35 omeg33(i,j,k)¼(c44*rr^2+(c11+c12)
*chi*kx(i)^2*ky(j)^2 . . .
36 +(c11-c44)*rr*(kx(i)^2
+ky(j)^2))/(c44*d0);
37
38 omeg12(i,j,k)¼-(c12+c44)*kx(i)*
ky( j)*(rr+chi*kz(k)^2)/(c44*d0);
39
40 omeg23(i,j,k)¼-(c12+c44)*ky(j)*
kz(k )*(rr+chi*kx(i)^2)/(c44*d0);
41
42 omeg13(i,j,k)¼-(c12+c44)*kx(i)*
kz( k)*(rr+chi*ky(j)^2)/(c44*d0);
43
44 end
45 end
46 end
47
48 end %endfunction
Function
green_tensor2_3D.m
This function evaluates the Green’s tensor. It
needs to be called at every grid points, whenever
the value of Green’s tensor is needed in the main
program.
Variable and array list:
Nx: Number of grid points in the
x-direction.
Ny: Number of grid points in the
y-direction.
Nz: Number of grid points in the
z-direction.
i: Current grid number in the
x-direction.
j: Current grid number in the
y-direction.
k: Current grid number in the
z-direction.
kx(Nx): Fourier coefficients in the
x-direction.
ky(Ny): Fourier coefficients in the
y-direction.
kz(Nz): Fourier coefficients in the
z-direction.
omeg11(Nx,Ny,Nz):
Coefficient needed for the
Green’s tensor.
omeg22(Nx,Ny,Nz):
Coefficient needed for the
Green’s tensor.
omeg33(Nx,Ny,Nz):
Coefficient needed for the
Green’s tensor.
omeg12(Nx,Ny,Nz):
Coefficient needed for the
Green’s tensor.
omeg23(Nx,Ny,Nz):
Coefficient needed for the
Green’s tensor.
omeg13(Nx,Ny,Nz):
Coefficient needed for the
Green’s tensor.
tmatx(3,3,3,3): Green’s tensor.
Listing:
1 function [tmatx] ¼ green_tensor2_3D
(Nx,Ny,Nz,kx,ky,kz, . . .
2 omeg11,omeg22,omeg33, . . .
3 omeg12,omeg23,omeg13, . . .
4 i,j,k)
5 format long;
6
7 gmatx(1,1)¼omeg11(i,j,k);
8 gmatx(1,2)¼omeg12(i,j,k);
9 gmatx(1,3)¼omeg13(i,j,k);
10
11 gmatx(2,1)¼omeg12(i,j,k);
12 gmatx(2,2)¼omeg22(i,j,k);
13 gmatx(2,3)¼omeg23(i,j,k);
14
15 gmatx(3,1)¼omeg13(i,j,k);
378 Appendix B
![Page 9: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/9.jpg)
16 gmatx(3,2)¼omeg23(i,j,k);
17 gmatx(3,3)¼omeg33(i,j,k)
18
19 %-- position vector
20
21 dvect(1)¼xk(i);
22 dvect(2)¼yk(j);
23 dvect(3)¼zk(k);
24
25 %-- Green operator:
26
27 for kk¼1:3
28 for ll¼1:3
29 for ii¼1:3
30 for jj¼1:3
31
32 tmatx(kk,ll,ii,jj)¼ 0.25*(gmatx
(ll,ii)*dvect(jj)*dvect(kk) + . . .
33 gmatx(kk,ii)*dvect(jj)*
dvect(ll) + . . .
34 gmatx(ll,jj)*dvect(ii)*
dvect(kk) + . . .
35 gmatx(kk,jj)*dvect(ii)*
dvect(ll));
36 end
37 end
38 end
39 end
40
41
42 end %endfunction
Appendix B 379
![Page 10: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/10.jpg)
Appendix C
Mesh generation programs are commonly used
in preparation of the input files for the FEM
analysis. There are many freely available
mesh-generating programs such as Gmsh and
also commercial ones requiring licensing such
as Cubit. In this section, a simple, yet very
efficient, self-contained FEM mesh-generating
program is given. The program is the direct
Matlab/Octave implementation of the code
given in [1].
The code produces meshes with triangular,
four- and eight-node isoparametric elements.
The generated input file for the FEM analysis
still needs to be supplemented with the control
parameters, material parameters, and the bound-
ary conditions following the format in
input_fem_pf.m and input_fem_elast.m
functions.
An example input file is annotated, after pro-
gram and function listings, so other input files to
the code can be generated. The code also
produces a graphical output file which can be
viewed in gnuplot with the command, plot
“filename” w l, as shown in Fig. C.1.
The program and the associated functions,
together with the input and output files, can
be found in the downloadable zip file for
Chapter 6.
C.1 Source Codes
Program
fem_mesh_gen.m
This program generates mesh with triangular,
four- and eight-node isoparametric elements on
given geometry.
The program makes calls to the following
functions:
• geom._input.m• gen_mesh4.m
• split.m
• ouput.m
Listing:
1 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼%
2 % %
3 % Fem mesh generator %
4 % %
5 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼%
6
7 global in;
8 global out1;
9 global out2;
10
# Springer International Publishing Switzerland 2017
S.B. Biner, Programming Phase-Field Modeling, DOI 10.1007/978-3-319-41196-5381
![Page 11: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/11.jpg)
11
12 global melem;
13 global mpoin;
14
15 melem¼5000; %maximum number of
elements to be generated
16 mpoin¼5000; %maximum number
of nodes to be generated
17
18 %----------------------------
19 % open input & output files
20 %----------------------------
21
22 in¼fopen(’mesh_hole_1.inp’,’r’);
23 out1¼fopen(’mesh_hole_fem.
inp’,’w’);
24 out2¼fopen(’mesh_hole_1.plt’,
’w’);
25
26 %----------------------------
27 % geometry input
28 %----------------------------
29
30 [nbloc, gpoin, nnode, ndime, gnods,
gmatn, . . .
31 gcord] ¼ geom_input();
32
33 %----------------------------
34 % generate mesh
35 %----------------------------
36 [nelem,npoin,lnods,coord,matno]
¼ gen_mesh4(nbloc, gpoin, nnode,
ndime, . . .
37 gnods, gmatn, gcord, gmatn);
38
39 %----------------------------
40 % generate triangler elements
41 %----------------------------
42
43
44 if(nnode ¼¼ 3)
45 [nelem,lnods,npoin,coord,matno]¼split(nelem,ndime,lnods, . . .
46 npoin,coord,nnode,matno);
47 end
48
49 %---------------------------
50 % output results
51 %---------------------------
Fig. C.1 FEMmesh generated from the input file,mesh_hole_1.inp, with the programmesh_gem_fem.m. The figure is
plotted in gnuplot with the command, plot “mesh_hole_1.plt” wl
382 Appendix C
![Page 12: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/12.jpg)
52 out_put(npoin,nelem,nnode,ndime,
lnods,coord,matno);
53
54 disp(’Done’)
55 disp(’Number of elements
generated: ’);disp(nelem);
56 disp(’Number of nodes generated: ’);
disp(npoin);
57
Function
geom._input.m
This function reads the topologic information
regarding geometry, material information, and
the types of finite elements to be generated.
Listing:
1 function[nbloc, gpoin, nnode, ndime,
gnods, gmatn, . . .
2 gcord] ¼ geom_input()
3
4
5 global in;
6
7 %---------------------------
8 % read the control cards
9 %---------------------------
10
11 gpoin ¼ fscanf(in,’%d’,1);
12 nbloc ¼ fscanf(in,’%d’,1);
13 nnode ¼ fscanf(in,’%d’,1);
14 ndime ¼ fscanf(in,’%d’,1);
15
16 lnode ¼ 8; %number of node per block
17 %---------------------------
18 % read block nodes
19 %---------------------------
20
21 for ibloc¼1:nbloc
22
23 ix ¼ fscanf(in,’%d’,[1,1]);
24 idumy ¼ fscanf(in,’%d %d %d %d %d %d
%d %d’,[8,1]);
25
26 for inode ¼ 1: lnode
27
28 gnods(ix,inode)¼idumy(inode);
29 end
30
31 ix ¼ fscanf(in,’%d’,[1,1]);
32 gmatn(ibloc) ¼ ix;
33 end
34
35 %----------------------------
36 % read coordinates
37 %----------------------------
38
39 gcord ¼ zeros(gpoin,ndime);
40
41 for ignod ¼ 1:gpoin
42
43 ix¼fscanf(in,’%d’,[1,1]);
44 dummy ¼ fscanf(in, ’%lf %lf’, [2,1]);
45
46 for idime ¼1:ndime
47 gcord(ix,idime) ¼ dummy(idime);
48 end
49 end
50
51
52 end %endfunction;
Function
gen_mesh4.m
This function generates the FEM mesh by
subdividing the each block defining the geome-
try. The common nodes at the subdivision
boundaries are eliminated; therefore, there are
no nodes with different node numbers and shar-
ing the identical Cartesian coordinates.
The function makes calls to the following
functions:
• srfq.m
• goto_100.m
Listing:
1 function [nelem,npoin,lnods,coord,
matno] ¼ gen_mesh4(nbloc, gpoin,
nnode, ndime, . . .
2 tnods, gmatn, tcord, tmato)
Appendix C 383
![Page 13: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/13.jpg)
3
4 global in;
5 global melem; % maximum number of
elements to be generated
6 global mpoin; % maximum number of
nodes to be generated
7
8 lnode ¼ 8;
9
10 npont ¼ gpoin;
11
12 mnode ¼ 4;
13 if(nnode ¼¼ 8)
14 mnode¼8;
15 end
16 knode ¼ mnode/4;
17 fnode ¼ knode;
18 %
19 coord ¼ zeros(mpoin,ndime);
20 lnods ¼ zeros(melem,mnode);
21 npoin ¼ 0;
22 nelem ¼ 0;
23
24 iflag¼0;
25 for ibloc ¼ 1:nbloc
26
27 %---------------------------------
28 % read block subdivision data
29 %---------------------------------
30 kbloc ¼ fscanf(in,’%d’,[1,1]);
31 ndivx ¼ fscanf(in,’%d’,[1,1]);
32 ndivy ¼fscanf(in,’%d’,[1,1]);
33
34 weitx ¼ zeros(ndivx+10,1);
35 weity ¼ zeros(ndivy+10,1);
36
37 wx ¼ fscanf(in,’%lf’,[1,1]);
38
39 for idivx¼1:ndivx
40
41 %weitx(idivx)¼fscanf(in,’%lf’,
[1,1]);
42
43 weitx(idivx)¼wx;
44 end
45
46 wy ¼ fscanf(in,’%lf’,[1,1]);
47
48 for idivy¼1:ndivy
49
50 %weity(idivy)¼fscanf(in,’%lf’,
[1,1]);
51
52 weity(idivy)¼wy;
53 end
54
55 %---------------------------------
56 % divide the block into the elements
57 %---------------------------------
58 total ¼ 0.0;
59
60 for idivx¼1:ndivx
61
62 if(weitx(idivx) ¼¼ 0.0)
63 weitx(idivx) ¼1.0;
64 end
65 total ¼ total+weitx(idivx);
66 end
67 xnorm¼2.0/total;
68
69 total ¼ 0.0;
70
71 for idivy¼1:ndivy
72
73 if(weity(idivy) ¼¼ 0.0)
74 weity(idivy) ¼1.0;
75 end
76 total ¼ total+weity(idivy);
77 end
78 ynorm¼2.0/total;
79
80 nxtwo ¼ ndivx*knode+1;
81 nytwo ¼ ndivy*knode+1;
82
83 iasey ¼ 0;
84 etasp ¼-1.0;
85 kwety ¼ 0;
86 konty ¼ -1;
87
88 %---------------------------–
89
90 for iytwo¼1:nytwo %do 160
91
92 iasey ¼ iasey+1;
93 if(nnode ~¼ 8 && iasey ¼¼ 3)
94 iasey ¼2;
95 end
96
97 if(nnode ¼¼ 8 && iasey ¼¼ 4)
98 iasey ¼2;
384 Appendix C
![Page 14: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/14.jpg)
99 end
100
101 iasex¼0;
102 exisp¼-1.0;
103 kwetx¼0;
104 kontx¼-1;
105
106 for ixtwo¼1:nxtwo
107
108 iasex¼iasex+1;
109 if(nnode ~¼8 && iasex ¼¼ 3)
110 iasex¼2;
111 end
112
113 if(nnode ¼¼ 8 && iasex ¼¼ 4)
114 iasex¼2;
115 end
116
117 if(iasex ¼¼ 2 && iasey ¼¼2 &&
nnode ¼¼ 8)
118
119 [kwetx,kontx,exisp] ¼ goto_100
(exisp,xnorm,knode,fnode,kwetx,
kontx,weitx);
120
121 continue
122 end
123
124 npoin ¼ npoin+1;
125
126 [shape] ¼sfrq(exisp,etasp);
127
128 for inode¼1:lnode
129
130 jtemp¼tnods(ibloc,inode);
131 for idime¼1:ndime
132 coord(npoin,idime)¼coord(npoin,
idime)+shape(inode) . . .
133 *tcord(jtemp,idime);
134 end
135 end
136
137 if(knode ¼¼ 1)
138 if(iasex ~¼ 2 || iasey ~¼2)
139
140 [kwetx,kontx,exisp] ¼ goto_100
(exisp,xnorm,knode,fnode,kwetx,
kontx,weitx);
141
142 continue
143 end
144
145
146 nelem¼nelem+1;
147 jpoin¼npoin-nxtwo;
148 lnods(nelem,1)¼jpoin-1;
149 lnods(nelem,2)¼jpoin;
150 lnods(nelem,3)¼npoin;
151 lnods(nelem,4)¼npoin-1;
152 matno(nelem)¼tmato(ibloc);
153
154 [kwetx,kontx,exisp] ¼ goto_100
(exisp,xnorm,knode,fnode,kwetx,
kontx,weitx);
155
156 continue
157 end
158
159 if(knode ¼¼ 2)
160
161 if((iasex ~¼3) || (iasey ~¼3))
162
163 [kwetx,kontx,exisp] ¼ goto_100
(exisp,xnorm,knode,fnode,kwetx,
kontx,weitx);
164
165 continue
166 end
167
168
169 nelem¼nelem+1;
170 ipoin¼npoin-ixtwo-ndivx+
(ixtwo-1)/2;
171 jpoin¼npoin-nxtwo-ndivx-1;
172 lnods(nelem,1)¼jpoin-2;
173 lnods(nelem,2)¼jpoin-1;
174 lnods(nelem,3)¼jpoin;
175 lnods(nelem,4)¼ipoin;
176 lnods(nelem,5)¼npoin;
177 lnods(nelem,6)¼npoin-1;
178 lnods(nelem,7)¼npoin-2;
179 lnods(nelem,8)¼ipoin-1;
180 matno(nelem) ¼tmato(ibloc);
181
182 [kwetx,kontx,exisp] ¼ goto_100
(exisp,xnorm,knode,fnode,kwetx,
kontx,weitx);
183
184
185 end
Appendix C 385
![Page 15: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/15.jpg)
186 end
187
188 if(knode ¼¼ 1)
189 kwety¼kwety+1;
190 etasp ¼etasp+ynorm*weity(kwety)/
fnode;
191 end
192 if(knode ¼¼ 2)
193 if(konty < 0 )
194 kwety¼kwety+1;
195 end
196 konty¼konty*(-1);
197 etasp¼etasp+ynorm*weity(kwety)/
fnode;
198 end
199
200 end
201
202 end
203
204
205 %--------------------------------
206 % eliminate the duplicate nodes
207 % sharing same locations
208 %--------------------------------
209
210 nrepn¼0;
211
212 for ipoin¼1:npoin
213
214 if(nrepn ~¼ 0)
215 for irepn¼1:nrepn
216 iflag¼0;
217 if(ipoin ¼¼ lrepn(irepn))
218 iflag¼1;
219 break
220 end
221 end
222 end
223
224 if(iflag ¼¼ 0)
225 lpoin¼ipoin+1;
226 for jpoin¼lpoin:npoin
227 total¼abs(coord(ipoin,1)
-coord(jpoin,1)) + . . .
228 abs(coord(ipoin,2)-coord
(jpoin,2));
229 if(total > 0.00001)
230 continue
231 end
232
233 nrepn ¼nrepn+1;
234 lrepn(nrepn)¼jpoin;
235 lasoc(nrepn)¼ipoin;
236 %end
237 end
238
239 end
240 end
241
242 if(nrepn ~¼ 0)
243
244 index¼0;
245 for ipoin¼1:npoin
246 for irepn¼1:nrepn
247 iflag¼0;
248 if(lrepn(irepn) ¼¼ ipoin)
249 iflag ¼1;
250 break;
251 end
252 end
253
254 if(iflag ¼¼ 0)
255 continue
256 end
257
258 index¼index+1;
259 lfinn(index)¼lrepn(irepn);
260 lfasc(index)¼lasoc(irepn);
261 end
262
263 for irepn¼1:nrepn
264 lrepn(irepn)¼lfinn(irepn);
265 lasoc(irepn)¼lfasc(irepn);
266 end %do_250
267
268 for irepn¼1:nrepn
269 for ielem¼1:nelem
270 for inode¼1:mnode
271 if(lnods(ielem,inode) ¼¼ lrepn
(irepn))
272 lnods(ielem,inode)¼lasoc(irepn);
273 end
274 end
275 end
276 end
277
278 for ipoin¼1:npoin
279
280 for irepn¼1:nrepn
386 Appendix C
![Page 16: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/16.jpg)
281 iflag¼0;
282 if(ipoin ¼¼ lrepn(irepn))
283 iflag¼1;
284 break;
285 end
286 end
287
288 if(iflag ¼¼ 1)
289 continue;
290 end
291
292
293 if(ipoin < lrepn(1))
294 continue;
295 end
296
297 idiff¼ipoin-nrepn;
298 if(ipoin <¼ lrepn(irepn))
299 for irepn¼1:nrepn
300 krepn¼nrepn-irepn+1;
301 if(ipoin < lrepn(krepn))
302 idiff¼ipoin-krepn+1;
303 end
304 end
305 end
306
307 for idime¼1:ndime
308 coord(idiff,idime)¼coord
(ipoin,idime);
309 end
310
311 end
312
313
314 for ielem¼1:nelem
315 iflag¼0;
316 for inode¼1:mnode
317
318 nposi¼lnods(ielem,inode);
319 for irepn¼1:nrepn
320 iflag¼0;
321 if(nposi ¼¼ lrepn(irepn))
322 iflag¼1;
323 break;
324 end
325 end
326
327 if(iflag ¼¼ 1)
328 continue;
329 end
330
331 if(nposi < lrepn(1))
332 continue;
333 end
334
335 idiff¼nposi-nrepn;
336 if(nposi <¼ lrepn(nrepn))
337 for irepn¼1:nrepn
338 krepn¼nrepn-irepn+1;
339 if(nposi < lrepn(krepn))
340 idiff¼nposi-krepn+1;
341 end
342
343 end
344 end
345
346 lnods(ielem,inode)¼idiff;
347 end
348 end
349 end
350
351 npoin¼npoin-nrepn;
352
353 end %endfunction
354
355 %¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼¼
Function
goto_100.m
This function acts as an equivalent to the goto
statements in the original code.
Listing:
1 function [kwetx,kontx,exisp] ¼goto_100(exisp,xnorm,knode,fnode,
kwetx,kontx,weitx)
2
3 if(knode ¼¼ 1)
4 kwetx ¼ kwetx+1;
5 exisp¼exisp+xnorm*weitx(kwetx)/
fnode;
6 end
7
8
9 if(knode ¼¼ 2)
10 if(kontx < 0)
11 kwetx ¼ kwetx+1;
12 end
Appendix C 387
![Page 17: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/17.jpg)
13
14 kontx¼kontx*(-1);
15 exisp¼exisp+xnorm*weitx(kwetx)/
fnode;
16 end
17
18
19 end %endfunction
Function
sfrq.m
This function evaluates the shape functions of
eight-node isoparametric elements.
Listing:
1 function [shape] ¼ sfrq(s,t)
2
3 ss¼s*s;
4 tt¼t*t;
5 st¼s*t;
6 sst¼s*s*t;
7 stt¼s*t*t;
8
9 shape(1)¼(-1.0+st+ss+tt-sst-stt)/
4.0;
10 shape(2)¼(1.0-t-ss+sst)/2.0;
11 shape(3)¼(-1.0-st+ss+tt-sst+stt)/
4.0;
12 shape(4)¼(1.0+s-tt-stt)/2.0;
13 shape(5)¼(-1.0+st+ss+tt+sst+stt)/
4.0;
14 shape(6)¼(1.0+t-ss-sst)/2.0;
15 shape(7)¼(-1.0-st+ss+tt+sst-stt)/
4.0;
16 shape(8)¼(1.0-s-tt+stt)/2.0;
17
18 end %endfunction
Function
split .m
If the geometry is to be meshed with triangular
isoparametric elements, first four node elements
are generated in function gen_mesh4.m and these
four node elements are divided along their
shortest diagonal forming two triangular
elements in function split. The element connec-
tivity list also updated resulting from this subdi-
vision of four node elements.
Listing:
1 function [nelem,lnods,npoin,coord,
matno]¼split(nelem,ndime,lnods,. . .
2 npoin,coord,nnode,matno)
3
4
5
6 kount¼0;
7 mnode¼4;
8
9 for ielem¼1:nelem
10 notal¼nelem+ielem;
11 matno(notal)¼matno(ielem);
12 for inode¼1:mnode
13 lnods(notal,inode)¼lnods(ielem,
inode);
14 end
15 end
16
17 for ielem¼1:nelem
18 notal¼nelem+ielem;
19 for inode¼1:mnode
20 index¼lnods(notal,inode);
21 ltemp(inode)¼index;
22 for idime¼1:ndime
23 corde(inode,idime)¼coord(index,
idime);
24 end
25 end
26
27 diag1¼sqrt((corde(1,1)-corde
(3,1))^2 +(corde(1,2)- . . .
28 corde(3,2))^2);
29 diag2¼sqrt((corde(2,1)-corde
(4,1))^2 +(corde(2,2)- . . .
30 corde(4,2))^2);
31 difer¼diag1-diag2;
32 if(difer <¼1.0e-9)
33 kount¼kount+1;
34 lnods(kount,1)¼ltemp(1);
35 lnods(kount,2)¼ltemp(2);
36 lnods(kount,3)¼ltemp(3);
37 matno(kount)¼matno(notal);
38 kount¼kount+1;
39 lnods(kount,1)¼ltemp(1);
40 lnods(kount,2)¼ltemp(3);
388 Appendix C
![Page 18: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/18.jpg)
41 lnods(kount,3)¼ltemp(4);
42 matno(kount)¼matno(notal);
43 end
44 if(difer > 1.0e-9)
45 kount¼kount+1;
46 lnods(kount,1)¼ltemp(1);
47 lnods(kount,2)¼ltemp(2);
48 lnods(kount,3)¼ltemp(4);
49 matno(kount)¼matno(notal);
50 kount¼kount+1;
51 lnods(kount,1)¼ltemp(2);
52 lnods(kount,2)¼ltemp(3);
53 lnods(kount,3)¼ltemp(4);
54 matno(kount)¼matno(notal);
55 end
56 end
57 nelem¼nelem*2;
58
59 end %endfunction
Function
output.m
This function outputs the Cartesian coordinates of
the nodes and the element connectivity list to file.
This file needs to be supplemented with the con-
trol parameters, material parameters, and the
boundary conditions following the format in
input_fem_pf.m and input_fem_elast.m functions.
The code also produces a graphical output file
which can be viewed in gnuplot with the com-
mand, plot “filename” w l, as shown in Fig. C.1.
Listing:
1 function out_put(npoin,nelem,nnode,
ndime,lnods,coord,matno)
2
3 global out1;
4 global out2;
5
6
7 %---------------------------------
8 % write to file with the FEM input
file format
9 %---------------------------------
10
11 fprintf(out1,’%5d %5d\n’,npoin,
nele m);
12 for ielem¼1:nelem
13 fprintf(out1,’%5d’,ielem);
14 for inode¼1:nnode
15 fprintf(out1,’%5d’,lnods(ielem,
inode));
16 end
17 fprintf(out1,’%5d’,matno(ielem));
18 fprintf(out1,’\n’);
19 end
20
21 for ipoin¼1:npoin
22 fprintf(out1,’%5d’,ipoin);
23 for idime¼1:ndime
24 fprintf(out1,’%14.6e’,coord(ipoin,
idime));
25 end
26 fprintf(out1,’\n’);
27 end
28
29 %---------------------------------
30 % write to file for the gnuplot
31 %---------------------------------
32
33 for ielem¼1:nelem
34 fprintf(out2,’#element no: %5d\n’,
ielem);
35 for inode¼1:nnode
36 lnode¼lnods(ielem,inode);
37 fprintf(out2,’%14.6e %14.6e\n’,
coord(lnode,1),coord(lnode,2));
38 end
39 lnode¼lnods(ielem,1);
40 fprintf(out2,’%14.6e %14.6e\n’,
coord(lnode,1),coord(lnode,2));
41 fprintf(out2,’\n’);
42 end
43
44
45 end %endfunction
Example Input File
mesh_hole_1.inp
Listing:
1 40 8 4 2
2 1 1 2 3 9 14 13 12 8 1
3 2 3 4 5 10 16 15 14 9 1
4 3 5 6 7 11 18 17 16 10 1
Appendix C 389
![Page 19: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/19.jpg)
5 4 12 13 14 20 25 24 23 19 1
6 5 16 17 18 22 29 28 27 21 1
7 6 23 24 25 31 36 35 34 30 1
8 7 25 26 27 32 38 37 36 31 1
9 8 27 28 29 33 40 39 38 32 1
10 1 0.0 0.0
11 2 1.875 0.0
12 3 3.75 0.0
13 4 5.0 0.0
14 5 6.25 0.0
15 6 8.125 0.0
16 7 10.0 0.0
17 8 0.0 1.875
18 9 3.75 1.875
19 10 6.25 1.875
20 11 10.0 1.875
21 12 0.0 3.75
22 13 1.875 3.75
23 14 3.75 3.75
24 15 5.0 3.75
25 16 6.25 3.75
26 17 8.125 3.75
27 18 10.0 3.75
28 19 0.0 5.0
29 20 3.75 5.0
30 21 6.25 5.0
31 22 10.0 5.0
32 23 0.0 6.25
33 24 1.875 6.25
34 25 3.75 6.25
35 26 5.0 6.25
36 27 6.25 6.25
37 28 8.125 6.25
38 29 10.0 6.25
39 30 0.0 8.125
40 31 3.75 8.125
41 32 6.25 8.125
42 33 10.0 8.125
43 34 0.0 10.0
44 35 1.875 10.0
45 36 3.75 10.0
46 37 5.0 10.0
47 38 6.25 10.0
48 39 8.125 10.0
49 40 10.0 10.0
50 1 24 24
51 1.0 1.0
52 2 16 24
53 1.0 1.0
54 3 24 24
55 1.0 1.0
56 4 24 16
57 1.0 1.0
58 5 24 16
59 1.0 1.0
60 6 24 24
61 1.0 1.0
62 7 16 24
63 1.0 1.0
64 8 24 24
65 1.0 1.0
Line numbers:
1: Number of nodes, number of subdivisions,
element type for generated mesh (three is for
triangular elements, four is four node elements,
and eight is for eight node elements), number
of materials.
2–9: Subdivision number, next eight numbers are for
subdivision connectivity list (subdivisions are
described with eight nodes and their listing is
anti-clock direction), material number for this
subdivision.
10–49: Node number, Cartesian coordinates of
the node.
50: Subdivision number, number of elements in the
x-direction into which the subdivision is to be
divided, number of elements in the y-directioninto which the subdivision is to be divided.
51: Weighting factors for the divisions in the x andy-directions, respectively.
52–65: Lines 50 and 51 are repeated for each
remaining subdivisions.
The tabulated output file, mesh_hole_fem.inp,needs to be supplemented with the control
parameters, material parameters, and the bound-
ary conditions following the format in
input_fem_pf.m and input_fem_elast.m
The graphical output given in Fig. C.1 shows
the resulting FEM mesh with four-node
isoparametric elements.
References
1. Hinton E, Owen DRJ (1979) An introduction
to finite element computations. Pineridge
Press, Swansea, UK
390 Appendix C
![Page 20: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/20.jpg)
Appendix D
In this section, the necessary formulas are
presented for the extension of the three solutions
methodologies developed in the text to three-
dimension.
The reader should be aware of the numbers of
unknowns, hence, the computational effort
required to solve the number of equations increases
substantially in three-dimension. For example, in a
simulation cell discretized with 128 � 128 � 128
grid points in three-dimension, the number of
unknowns are 2097152; whereas, a simulation cell
discretized with 128 � 128 grid points yields only
16384 unknowns in two-dimensions.
For the finite difference and the Fourier spec-
tral methods, the extension to three-dimension is
straightforward and requires little effort. On the
other hand, the similar extension of finite-
element method involves more substantial
changes to the codes, even though the overall
structures of the codes remain the same.
D.1 Extension of Two-DimensionalFinite Difference Methodto Three-Dimension
For three-dimensional stencil, the finite difference
approximation of theLaplace operator∇2 involves
minimum seven points as shown in Fig. D.1.
With these seven points, the Laplace operator
takes the form:
∇2ui, j,k� � ¼ ui�1, j,k � 2ui, j,k þ uiþ1, j,k
Δx2þ ui, j�1,k � 2ui, j,k þ ui, jþ1,k
Δy2
þ ui, j,k�1 � 2ui, j,k þ ui, j,kþ1
Δz2
ðD:1Þ
where Δx, Δy, and Δz are the grid spacing
between two grid points in the x-, y-, and z-directions, respectively. In three-dimension, the
periodicity now should be enforced for the grid
points lying on the six surfaces, rather than the
edges as in two-dimension.
D.2 Extension of Two-DimensionalFourier Spectral Methodto Three-Dimensions
A three-dimensional Fourier spectral phase-
field method is already developed in case
i,j,k i+1,j,k
i-1,j,k i,j+1,k
i,j-1,k
i,j,k+1
i,j,k-1xy
z
Fig. D.1 A schematic node ordering representation for
three-dimensional finite difference grid
# Springer International Publishing Switzerland 2017
S.B. Biner, Programming Phase-Field Modeling, DOI 10.1007/978-3-319-41196-5391
![Page 21: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/21.jpg)
study-XVI with the source codes pfc_3D_v1.m(in longhand format) and pfc_3D_v2.m
(optimized for Matlab/Octave). These two
source codes will provide a template for the
solution of other phase-field models by utilizing
the Fourier spectral method. In addition,
functions for three-dimensional Green’s tensor
are given in Appendix B.
As can be seen from these codes, apart
from preparing Fourier coefficients for three-
dimension, the solution utilizes two build
in functions in Matlab/Octave. These are:
fftn( ) for the forward Fourier transformations
and ifftn( ) for the inverse Fourier
transformations.
D.3 Extension of Two-DimensionalFEM Method to Three-Dimension
Similar to two-dimensional elements (Fig. 6.1),
for three-dimensional eight-node and 20-node
isoparametric elements the local coordinate sys-
tem defined by ζ, η, and ξ is located at the center
of the elements, as shown in Fig. D.2. They take
the values of �1 � ζ � 1, �1 � η � 1, and
�1 � ξ � 1.
Their shape functions must satisfy the
conditions:
XN
eð Þi ζ; η; ξð Þ ¼ 1 ðD:2Þ
and
Neð Þi ζj; ηj; ξj� � ¼ 1 if i ¼ j
0 if i 6¼ j
�ðD:3Þ
For eight-node isoparametric elements the
shape functions meeting these requirements are:
N1 ¼ 1
81� ςð Þ 1� ηð Þ 1� ξð Þ
N2 ¼ 1
81þ ζð Þ 1� ηð Þ 1� ξð Þ
N3 ¼ 1
81þ ζð Þ 1þ ηð Þ 1� ξð Þ
N4 ¼ 1
81� ζð Þ 1þ ηð Þ 1� ξð Þ
N5 ¼ 1
81� ζð Þ 1� ηð Þ 1þ ξð Þ
N6 ¼ 1
81þ ζð Þ 1� ηð Þ 1þ ξð Þ
N7 ¼ 1
81þ ζð Þ 1þ ηð Þ 1þ ξð Þ
N8 ¼ 1
81� ζð Þ 1þ ηð Þ 1þ ξð Þ
ðD:4Þ
The corresponding shape functions for
20-node isoparametric elements for corner
nodes are:
ζ
η
ξ
ζ
η
ξ
1 2
34
5 6
78
1 2
34
5 6
78
9
101112
13 14
15
16
17 18
1920
x
yz
Fig. D.2 Global and local definition of eight-node and 20-node isoparametric elements
392 Appendix D
![Page 22: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/22.jpg)
N1 ¼ �1
81� ζð Þ 1� ηð Þ 1� ξð Þ 2þ ζ þ ηþ ξð Þ
N2 ¼ �1
81þ ζð Þ 1� ηð Þ 1� ξð Þ 2� ζ þ ηþ ξð Þ
N3 ¼ �1
81þ ζð Þ 1þ ηð Þ 1� ξð Þ 2� ζ � ηþ ξð Þ
N4 ¼ �1
81� ζð Þ 1þ ηð Þ 1� ξð Þ 2þ ζ � ηþ ξð Þ
N5 ¼ �1
81� ζð Þ 1� ηð Þ 1þ ξð Þ 2þ ζ þ η� ξð Þ
N6 ¼ �1
81þ ζð Þ 1� ηð Þ 1þ ξð Þ 2� ζ þ η� ζð Þ
N7 ¼ �1
81þ ζð Þ 1þ ηð Þ 1þ ξð Þ 2� ζ � η� ξð Þ
N8 ¼ �1
81� ζð Þ 1þ ηð Þ 1þ ξð Þ 2þ ζ � η� ξð Þ
ðD:5aÞand for mid side nodes are
N9 ¼ 1
41� ζð Þ 1þ ζð Þ 1� ηð Þ 1� ξð Þ N10 ¼ 1
41� ηð Þ 1þ ηð Þ 1þ ζð Þ 1� ξð Þ
N11 ¼ 1
41� ζð Þ 1þ ζð Þ 1þ ηð Þ 1� ξð Þ N12 ¼ 1
41� ηð Þ 1þ ηð Þ 1� ζð Þ 1� ξð Þ
N13 ¼ 1
41� ζð Þ 1þ ζð Þ 1� ηð Þ 1þ ξð Þ N14 ¼ 1
41� ηð Þ 1þ ηð Þ 1þ ζð Þ 1þ ξð Þ
N15 ¼ 1
41� ζð Þ 1þ ζð Þ 1þ ηð Þ 1þ ξð Þ N16 ¼ 1
41� ηð Þ 1þ ηð Þ 1� ζð Þ 1þ ξð Þ
N17 ¼ 1
41� ξð Þ 1þ ξð Þ 1� ζð Þ 1� ηð Þ N18 ¼ 1
41� ξð Þ 1þ ξð Þ 1þ ζð Þ 1� ηð Þ
N19 ¼ 1
41� ξð Þ 1þ ξð Þ 1þ ζð Þ 1þ ηð Þ N20 ¼ 1
41� ξð Þ 1þ ξð Þ 1� ζð Þ 1þ ηð Þ
ðD:5bÞ
Any point (ζ, η, ξ) within an element the x-,
y-, and z-coordinates are again obtained from
isoparametric representation:
x ζ; η; ξð Þ ¼Xni¼1
Neð Þi x
eð Þi
y ζ; η; ξð Þ ¼Xni¼1
Neð Þi y
eð Þi
z ζ; η; ξð Þ ¼Xni¼1
Neð Þi z
eð Þi
ðD:6Þ
where Ni(e)(ζ, η, ζ) are the shape functions of
the element (Eqs. D.4, D.5a and D.5b) and xi(e),
yi(e), zi
(e) are the nodal coordinates in the Car-
tesian coordinate system.
The Cartesian derivative of any function, f,defined over the element follows the similar
expressions (Eqs. 6.2 through 6.6). Thus, in
three-dimension:
f ζ; η; ξð Þ ¼Xni
Neð Þi f
eð Þi ðD:7Þ
Appendix D 393
![Page 23: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/23.jpg)
in which fi(e) is the value of f at node i. Utilizing
the chain rule of differentiation:
∂f∂x
¼ ∂f∂ζ
� ∂ζ∂x
þ ∂f∂η
� ∂η∂x
þ ∂f∂ξ
� ∂ξ∂x
∂f∂y
¼ ∂f∂ζ
� ∂ζ∂y
þ ∂f∂η
� ∂η∂y
þ ∂f∂ξ
� ∂ξ∂y
∂f∂z
¼ ∂f∂ζ
� ∂ζ∂z
þ ∂f∂η
� ∂η∂z
þ ∂f∂ξ
� ∂ξ∂z
ðD:8Þ
where
∂f∂ζ
¼Xni
∂N eð Þi
∂ζ� f eð Þ
i ,∂f∂η
¼Xni
∂N eð Þi
∂η� f eð Þ
i ,∂f∂ξ
¼Xni
∂N eð Þi
∂ξ� f eð Þ
i ðD:9Þ
The terms in Eq. D.8 ∂ξ∂x ,
∂η∂x. . . are obtained,
again, forming Jacobian matrix similar to
Eq. 6.5:
Je ¼
Xni
∂N eð Þi
∂ζ� x eð Þ
i
Xni
∂N eð Þi
∂ζ� y eð Þ
i
Xni
∂N eð Þi
∂ζ� z eð Þ
i
Xni
∂N eð Þi
∂η� x eð Þ
i
Xni
∂N eð Þi
∂η� y eð Þ
i
Xni
∂N eð Þi
∂η� z eð Þ
i
Xni
∂N eð Þi
∂ξ� x eð Þ
i
Xni
∂N eð Þi
∂ζ� y eð Þ
i
Xni
∂N eð Þi
∂ξ� z eð Þ
i
266666666664
377777777775
ðD:10Þ
and inverting it:
Je½ ��1 ¼ 1
detJe
∂ζ∂x
∂η∂x
∂ξ∂x
∂ζ∂y
∂η∂y
∂ξ∂y
∂ζ∂z
∂η∂z
∂ξ∂z
266666664
377777775
ðD:11Þ
where detJe is the determinate of the Jacobian
matrix. Any function f(x, y, z) defined over the
elements can be integrated as:
ðððf x; y; zð Þdxdydz ¼
ð1
�1
ð1
�1
ð1
�1
f ζ; η; ξð ÞdetJedζdη dξ¼ð1
�1
ð1
�1
ð1
1
g ζ; η; ξð Þdζdη dξ ðD:12Þ
394 Appendix D
![Page 24: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/24.jpg)
By utilizing Gauss–Legendre rule similar to
two-dimensional case, Eq. 6.8:
ð1
�1
ð1
�1
ð1
�1
g ζ; η; ξð Þdζdη dξ ¼Xmk
Xmj
Xmi
WiWjWkg ζi; ηj; ξk� � ðD:13Þ
in which Wi, Wj, and Wk are the weight
coefficients and g ζi; ηj; ξk� �
is the value of the
function at the sampling point ζi; ηj; ξk� �
.
For linear elasticity, again Hook’s law
provides the constitutive relationship between
the stresses and strains within the element. Thus,
σ ¼ Dεσ ¼ σ11; σ22; σ33; τ12; τ23; τ13½ �Tε ¼ ε11; ε22; ε33; γ12; γ23; γ13½ �T
ðD:14Þ
in which σ11, σ22, σ33 and ε11, ε22, ε33 are the
normal stress and strain components, respec-
tively, and τ12, τ23, τ13 and γ12, γ23, γ13 are the
shear stresses and strains, respectively.
For isotropic linear elastic material the stress–
strain matrix, D, is:
D ¼ E 1� νð Þ1þ νð Þ 1� 2νð Þ
1ν
1� ν
1
1� ν0 0 0
1ν
1� ν0 0 0
1 0 0 0
1� 2νð Þ2 1� νð Þ 0 0
1� 2νð Þ2 1� νð Þ 0
sym1� 2νð Þ2 1� νð Þ
26666666666666666664
37777777777777777775
ðD:15Þ
in which E is the Young’s modulus and v is the
Poisson’s ratio. If the displacement vector in the
Cartesian coordinates, x-, y-, z-directions is
defined as δ ¼ u; v;w½ �T , then strain terms
appearing in Eq. D.14 are obtained from:
ε11 ¼ ∂u∂x
, ε11 ¼ ∂v∂y
, ε33 ¼ ∂w∂z
γ12 ¼∂u∂y
þ ∂v∂x
, γ23 ¼∂v∂z
þ ∂w∂y
, γ13 ¼∂w∂x
þ ∂u∂z
ðD:16Þ
Appendix D 395
![Page 25: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/25.jpg)
and they can be calculated at the element inte-
gration points as
ε ¼ Bδ eð Þ ¼Xni
Biδi ðD:17Þ
and the strain matrix B takes the form of:
Bi ¼
∂Ni
∂x0 0
0∂Ni
∂y0
0 0∂Ni
∂z∂Ni
∂y∂Ni
∂x0
0∂Ni
∂z∂Ni
∂y
∂Ni
∂z0
∂Ni
∂x
26666666666666666666664
37777777777777777777775
ðD:18Þ
Apart from representation of nodal
coordinates with a three-dimensional array,
the element connectivity list should also follow
the node numbering sequence in Fig. D.2 for
the three-dimensional elements in the input
files.
396 Appendix D
![Page 26: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/26.jpg)
Index
AAdams–Bashforth method, 11
Adams–Moulton method, 11
Al–Cu alloy system, 339
Allen–Cahn equations, 1, 3, 41, 44, 110, 113, 117, 122,
218, 219, 222, 274, 279, 310
Anisotropy (in interfacial energy), 69–71
Applied force vector, 175
BBackward (implicit) Euler method, 11, 174
Basic Linear Algebra Subroutines (BLAS), 13
Bi-crystal
classical PFC model, 355
configuration, 356, 363
constant deformation rate, 362
deformation studies, 362
dislocations, 364
free energy, 361
free energy density, 363
kinetic evolution equation, 361
mechanical properties, 363
microstructure, 362, 363
MPFC, 361
objective, 361
pfc_2D_v2.m, 364
pfc_def_v2.m, 364, 366–368
plastic deformation, 361
precipitation behavior, 160
short-range interactions, 361
strain rate, 362
Brittle fracture, 303
Bulk diffusion, 51, 60, 63
Burger’s vector, 158
CCahn–Hilliard equation, 2, 26, 29, 102, 138,
156, 196, 197, 206, 211, 238, 239, 243, 248, 252
Cahn–Hilliard model, 21
Cahn–Hilliard phase-field equation, 104, 107, 144, 147
CALculation of PHAse Diagrams (CALPHAD), 121
Cancer metastasis, 82
Capacity matrix, 173
Cartesian coordinate system, 170, 174
Cartesian coordinates, 239
Cell motility, 81
Chain rule of differentiation, 170, 173, 174
Chemotaxis, 82
Collocation method, 10
Conductivity matrix, 173
Cottrell atmosphere, 156
Crank–Nicholson method, 11, 174
Cubic anisotropy, 140
Cubic Hermite elements, 197
DDeformation
bi-crystal (see Bi-crystal)morphology, 356
Dendritic-solidification, 2, 69–73, 77
Density functional theory (DFT), 338
Dislocations, 238
dipole, 159
lattice defects, 355
and motions, 361
plastic deformation, 361
polycrystal microstructure, 341
pre-melting at grain boundaries, 339
EEdge dislocation dipole, eigenstrain approach, 157
Eigenstrains, 238, 265, 273, 279
Cr precipitates, 157
dependency of, 138
dislocations, 166
elastic energy, 157
misfit strains, 140
nonzero, 157
position- and composition-dependent, 138
Elastic energy, 273
Elastic inhomogeneities and applied stresses, phase
separation
elastic anisotropy, 144
fft_raft_v1.m program, 144–147
fft_raft_v2.m program, 147–149
Fourier space, 140
green_tensor.m function, 149, 150
grid points with algorithm, 140
# Springer International Publishing Switzerland 2017
S.B. Biner, Programming Phase-Field Modeling, DOI 10.1007/978-3-319-41196-5397
![Page 27: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/27.jpg)
Elastic inhomogeneities and applied stresses, phase
separation (cont.)hard particles, 141, 143
intrinsic stress–strain fields, 138
Kronecker delta function, 140
matrix and precipitation phases, 141
mechanical equilibrium, 138–140
nickel-based supper alloys, 138
objective, 137
phase-field model, 138
phase separation behavior, 140
solve_elasticity_v1.m function, 150–153
solve_elasticity_v2.m function, 153–155
Elasticity matrix, 174
Elastic-plastic behavior, 303, 336
Elastic-strain energy, 159
475 �C embrittlement, 156
Energy barrier, 197, 238, 274, 278, 306
Euler finite difference algorithm, 111
Euler method, 174
Euler time marching scheme, 104
Explicit Euler finite difference algorithm, 112, 114
External loading, 303, 310
FFe–Cu–Mn–Ni alloy
CALculation of PHAse Diagrams, 121
Cu precipitates, 124
Cu-rich phases, 121
Fe_Cu_Mn_Ni_free_energy.m function, 132–137
fft_FeCuNiMn_v1.m program, 125–128
fft_FeCuNiMn_v2.m program, 128–131
Init_FeCuNiMn_micro.m function, 131, 132
kinetic Monte Carlo algorithm, 121
Ni–Mn-rich intermetallic B2 rings, 121
non-conserved phase transformations, 124
objective, 121
phase-field model, 122–123
FEM discretization, 172–173
Finite difference algorithms
backward difference, 17
centered difference, 17
centered second difference, 17
description, 17
disadvantages, 17
five-point stencil, 18
forward difference, 17
one-dimensional transient heat conduction, 19
source codes, 19–21
Finite difference method, 10, 17, 22
Finite element analysis (FEA), 169
Finite element method (FEM), 10, 169, 196, 218
First-order phase transformations, 197, 273
Five-point stencil, 18, 34
Force vector
due to body forces, 175
due to initial internal strains, 175
due to initial internal stresses, 175
Forward (explicit) Euler method, 11, 174
Fourier-spectral method, 340, 343, 346, 348,
351, 355, 364
binary alloy with semi-implicit
Cahn–Hilliard equation, 102, 103
explicit Euler time marching scheme, 104
fft_ch_v1.m program, 104–107
fft_ch_v2.m program, 107–109
numerical implementation, 103
objective, 102
Ostwald ripening process, 103
phase-field model, 102–103
prepare_fft.m function, 109, 110
grain growth with semi-implicit
evolution kinetics with identical simulation
parameters, 112
fft_ca_v1.m program, 113–117
fft_ca_v2.m program, 117–120
free_energ_fft_ca_v1.m function, 120
free_energ_fft_ca_v2.m function, 120, 121
non-conserved Allen–Cahn equation, 110
numerical implementation, 111
objective, 110
phase-field model, 110–111
simulations, 111
one-dimensional transient heat conduction
coarse spatial and temporal discretization, 101
constant thermal conductivity, density and heat
capacity, 99
forward Euler time marching, 100
forward Fourier transform, 99
Fourier space, 99
heat_1d_fft.m program, 100–102
Fracture, 303, 308, 310
Free-energy, 2–5, 70
Free-energy density, 363
FreeMat, 13
Front-tracking method, 36
GGalerkin method, 10
Gauss–Legendre rule, 171, 199
Gibbs energy, 123
Ginzburg–Landau equation, 274
Ginzburg–Landau model, 337
Ginzburg–Landau type, 70
Global stiffness matrix, 220, 240
Gnuplot, 15
Grain boundary
diffusion, 60, 63
dislocations, 356
migration, 51
PFC model, 361
spinodal decomposition, 339
Grain growth, 35–37, 40, 51, 82, 83, 218, 220–222, 237
bicrystal configuration, 356
density field, 355 (see also Fourier-spectral method,
grain growth with semi-implicit)
MD, 355
mechanical and physical properties, 355
398 Index
![Page 28: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/28.jpg)
mutual annihilations in shrinking process, 356
objective, 355
PFC, 355
pfc_2D_v1.m and pfc_2D_v2.m, 356
pfc_poly_v1.m, 355, 356, 358–361
phase-field crystal model, 355
source codes, 356–361
Green’s tensor, 140, 144, 146, 147, 149–151, 153, 161,
163, 164, 166
Green’s theorem, 172
HHeat balance, 171
heat_1d_fft.m program, 100
Hook’s law, 174
IImplicit-Euler time integration, 239
Isoparametric representation, 169, 171
Isothermal phase transformation, 125
JJacobian matrix, 170, 171, 173, 174
KKronecker delta function, 140, 158, 238
LLandau polynomial, 274
Langevin noise, 5
Linear Algebra Package (LAPACK), 13
Linear elasticity, 176
MMartensite, 273
Martensitic transformations, 272, 273, 298, 303
Material-specific properties, 369
Matlab/Octave implementation, 169
Matlab/Octave optimized mode, 243
Matlab programming
features, 13
introduction, 13
linear algebra computations, 13
modular approach, 14
syntax, 14
Metastable body-centered cubic (bcc) phase, 121Method of weighted residual, 9
Microstructures, 1, 3–5
deformation simulation, 364
triangular and stripe phases, 342
Misfit strains, 140, 141, 144, 157, 158
Molecular dynamics (MD)
classical, 355
simulations, 361
Monte Carlo/Potts model, 36, 82
Multi-cellular systems, 81
Multi-component phase-field model, 110, 121
NNano-crystalline materials, 355
Newton–Raphson algorithm, 198, 204, 206, 219
Newton–Raphson equation, 240
Newton–Raphson scheme, 276, 307
Newton–Raphson solution algorithm, 211
Nondimensional parameters, 142
Nucleation, 5
Numerical algorithm, 369
Numerical integration of isoparametric elements,
169–171
OOctave programming, 13, 14
Ostwald ripening process, 23, 103, 199
PParaview, 15
Partial differential equation (PDE)
equation, 9
spatial discretization, 9
Penalty term, 306
Phase separation, 21, 23, 24, 273, 274. See alsoElastic inhomogeneities and applied stresses
microstructure, 104
semi-implicit spectral and explicit Euler finite
difference, 105
Phase-field crystal model (PFC)
adoptive meshing, 340
application, 339
atomistic events, 337
body-centered cubic, 341
classical, 340
codes pfc_2D_v1.m and pfc_2D_v2.m, 356constant (liquid) phase, 338
deformation behavior of bicrystal, 361–363
deformation simulation, 362
elastic strain energy, 338
face-centered cubic, 338
Fourier spectral method, 340
free energy, 337, 338
free energy functional, 340
Ginzburg–Landau theory, 337
grain growth, 355, 356
mutual annihilations in shrinking process, 356
numerical implementation, 340
objective, 339
order parameter, 337
parabolic equation, 340
pfc_2D_v2.m, 346–348
pfc_3D_v1.m, 348–351
pfc_3D_v2.m, 351–353
pfc_def_v2.m, 364–368
pfc_poly_v1.m, 356, 358–361
prepare_fft_3d.m, 353
real Al–Cu alloy system, 339
simulations, 341
Index 399
![Page 29: 0002835182 371..379978-3-319-41196-5/1.pdf371. Fig. A.1 A typical Voronoi tessellation results for the points with their all nine replicas. The file name that contains this graphical](https://reader034.vdocument.in/reader034/viewer/2022052101/603b51b00bcd04704f434c01/html5/thumbnails/29.jpg)
Phase-field crystal model (PFC) (cont.)source code pfc_2D_v1.m, 341, 343–345write_vtk_grid_values_3D.m, 354
Phase-field fracture model, 303
Phase-field method
Allen–Cahn dynamics, 3
dendritic solidification, 2
free energy, 2
Ginzburg–Landau equation, 1
Langevin noise, 5
microstructure, 1
solid–liquid transformations, 3
Steinbach’s models, 4
Tiaden’s model, 3, 4
Phase-field models, 22, 82–83, 124, 197, 219, 237, 238,
273–274, 303–305, 369
Plane-strain, 175, 176, 308
Plane-stress, 174, 183
Polycrystal
microstructure, 341
phase-field crystal model, 355
Polycrystalline microstructure, 113
Principles of virtual work, 174–176
RRadau rule, 171
Read this book on SpringerLink, 15
Readers, 369
Runge–Kutta methods, 11
SScilab, 13
Semi-implicit Fourier spectral method, 112, 114
Shape functions, 169, 170, 172–174, 179, 182, 183, 197,
198, 205, 216, 219, 220, 239, 275, 283, 305
Sharp-interface approach, 1
Simulation-specific properties, 369
Sintering (solid-state), 51–54, 57, 61, 83
Solute drag, 339
Source codes, 176–196
Spectral accuracy, 99
Spectral method, 10
Spherical bicrystal configuration, 356
Spherical grain, time evolution, 112
Spinodal decomposition, 21, 338, 339
Fe–Cr alloy
Burger’s vector, 157
Cottrell atmosphere, 156
dislo_strain.m function, 166, 167
elastic inhomogeneity, 157
engineering materials, 156
FeCr_chem_potent_v1.m function, 167
FeCr_chem_potent_v2.m function, 167, 168
Fe-rich α and Cr-rich α0 phases, 156fft_FeCr_v1.m program, 161–163
ft_FeCr_v2.m program, 164–166
initial concentration field, 160
lattice defects, 156
microstructure, 159
misfit strains, Cr phase, 158
nonzero eigenstrain terms, 157
objective, 156
phase-field model, 156, 157
precipitation behavior, 160
simulations, 159
FEM implementation, 197
numerical implementation, 197–199
objectives, 196
phase-field model, 197
results, 199
Steinbach’s models, 4
Stiffness matrix, 175
Stress-relief mechanism, 238
Stress–strain fields, 239
Strong and weak forms, FEM formulation, 169,
171–174
Surface diffusion, 51, 53, 60, 63
Surface evolver, 36
Surface heat transfer matrix, 173
Surface integral, 172
Syntax of Matlab/Octave, 369
TTau method, 10
Test/weight function, 9
Thermo-Calc, 121
Thin-films, 238, 242, 271
Tiaden’s model, 3, 4
Time evolution, 23
Transient heat conduction, 17, 19, 99, 171
Transient heat transfer, 173–174
Trial function, 9, 10
VVertex dynamics, 36, 82
WWeak form formulation, 172–173, 197, 239, 275, 305
400 Index