%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %File: pf3d_multi_aniso.m % %Purpose: 3-dimensional Multi Phase Field model (Steinbach 1996) % solving Ginzburg-Landau (or Cahn-Hillard) equation % by finite difference method % Anisotropic surface energy (cubic symmetry) % % Wei Cai (caiwei@stanford.edu) % Seunghwa Ryu (shryu@stanford.edu) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 3D multi phase field model with isotropic surface energy if(~exist('N_grid')) N_grid = [50 50 50]; end if(~exist('model_param')) % h M23 M31 M12 U23 U31 U12 E23 E31 E12 u1 u2 u3 % Msv Mvl Mls Usv Uvl Uls Esv Evl Els ul us uv surface energy anisotropy model_param = [3 0.4 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 1.8 0 0 0 1.0 0.6993 -3.6595 -1.7384]; end N_phases = model_param(1); % 1: liquid, 2: solid, 3: vapor h = model_param(2); % grid size M = zeros(N_phases,N_phases); % M_ik is mobility of interface i-k U = zeros(N_phases,N_phases); % energy parameter of interface i-k vareps = zeros(N_phases,N_phases); % energy parameter of interface i-k M(2,3) = model_param(3); M(3,2) = model_param(3); M(3,1) = model_param(4); M(1,3) = model_param(4); M(1,2) = model_param(5); M(2,1) = model_param(5); U(2,3) = model_param(6); U(3,2) = model_param(6); U(3,1) = model_param(7); U(1,3) = model_param(7); U(1,2) = model_param(8); U(2,1) = model_param(8); vareps(2,3) = model_param(9); vareps(3,2) = model_param(9); vareps(3,1) = model_param(10); vareps(1,3) = model_param(10); vareps(1,2) = model_param(11); vareps(2,1) = model_param(11); mu = model_param(12:14); % chemical potential of phases m = zeros(N_phases,N_phases); % chemical potential difference between phases eps0 = model_param(15); % these modify Esv (implemented) and/or Els (not implemented) eps1 = model_param(16); % energy parameters eps2 = model_param(17); % energy parameters eps3 = model_param(18); % energy parameters for i=1:3, for k=1:3, m(i,k) = mu(i) - mu(k); end; end if(~exist('Niter')) Niter = 1000; % total number of simulation steps end if(~exist('dt')) dt = 5e-3; % time step end if(~exist('equation_type')) equation_type = 0; %0: Ginzburg-Landau, 1: Cahn-Hillard end if(~exist('plotfreq')) plotfreq = 50; end if(~exist('printfreq')) printfreq = 50; end if(~exist('solid_shape')) solid_shape = [1 1 1]; %sphere %solid_shape = [0 1 1]; %cylinder end if(~exist('solid_radius')) solid_radius = 0.25; end cell_size = N_grid * h; x = [0:N_grid(1)-1] * h; y = [0:N_grid(2)-1] * h; z = [0:N_grid(3)-1] * h; Fdata = zeros(Niter,1); Gdata = zeros(Niter,1); if(~exist('phi')) phi{1} = zeros(N_grid); phi{2} = zeros(N_grid); phi{3} = zeros(N_grid); for i1=1:N_grid(1), for i2=1:N_grid, for i3=1:N_grid, if (i1-N_grid(1)/2)^2*solid_shape(1) ... +(i2-N_grid(2)/2)^2*solid_shape(2) ... +(i3-N_grid(3)/2)^2*solid_shape(3) < (N_grid(1)*solid_radius)^2 phi{2}(i1,i2,i3) = 1.0; end end, end, end for i1=1:N_grid(1), for i2=1:N_grid, for i3=1:N_grid, if (i3