Pfm fd pot may23

25
3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 1 of 25 %% PFM - potential on top / bottom, stress on top, displ on bottom % finite difference % last updated: Apr 14, 2012 % e = elasticity % p = electrical, polarization % m = magnetic, magnetization close all clear all hello = 0 tic %% other constants I = sqrt(-1); %% computational dimension dim = 16; dim1 = dim; dim2 = dim; dim3 = dim; %% physical dimension LL = 1; Lx = LL; Ly = LL; Lz = LL/100; h2 = Lz; h1 = 0; x3top = Lz; x3bot = 0; dz = Lz / (dim3-1); h = dz; x3 = zeros(1,dim3); for k = 1:dim3

description

 

Transcript of Pfm fd pot may23

Page 1: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 1 of 25

%% PFM - potential on top / bottom, stress on top, displ on bottom% finite difference% last updated: Apr 14, 2012 % e = elasticity% p = electrical, polarization% m = magnetic, magnetization close allclear all hello = 0tic %% other constantsI = sqrt(-1); %% computational dimensiondim = 16;dim1 = dim;dim2 = dim;dim3 = dim; %% physical dimension LL = 1;Lx = LL;Ly = LL;Lz = LL/100; h2 = Lz;h1 = 0; x3top = Lz;x3bot = 0; dz = Lz / (dim3-1); h = dz; x3 = zeros(1,dim3);for k = 1:dim3

Page 2: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 2 of 25

x3(k) = x3bot + (k-1)*dz;end x1 = zeros(1,dim3);x2 = zeros(1,dim3);for i = 1:dim1 x1(i) = (i-1) * Lx / (dim1-1);endfor j = 1:dim2 x2(j) = (j-1) * Ly / (dim2-1);end %% Fourier coordinates kx = zeros(1,dim1);ky = zeros(1,dim2);kz = zeros(1,dim3); for i = 1:dim1/2 kx(i) = pi * 2 * (i-1) / Lx;endfor i = dim1/2+1:dim1 kx(i) = pi * 2 * ( i - dim1 - 1 ) / Lx;end for i = 1:dim2/2 ky(i) = pi * 2 * (i-1) / Ly;endfor i = dim2/2+1:dim2 ky(i) = pi * 2 * ( i - dim2 - 1 ) / Ly;end for i = 1:dim3/2 kz(i) = pi * 2 * (i-1) / Lz;endfor i = dim3/2+1:dim3 kz(i) = pi * 2 * ( i - dim3 - 1 ) / Lz;end %% base for Maxwell's eqnkappa = 8.854187817620 * 10^-12;zeta2 = zeros(dim1,dim2);for i = 1:dim1 for j = 1:dim2

Page 3: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 3 of 25

zeta2(i,j) = kx(i)^2 + ky(j)^2; endend %% instantaneous polarization = P* = sum( lambda_i * P_i ) Px = zeros(dim1,dim2,dim3);Py = zeros(dim1,dim2,dim3);Pz = zeros(dim1,dim2,dim3); F2_Px = zeros(dim1,dim2,dim3);F2_Py = zeros(dim1,dim2,dim3);F2_Pz = zeros(dim1,dim2,dim3); for k = 1:dim3 F2_Px(:,:,k) = fft2( Px(:,:,k) ); F2_Py(:,:,k) = fft2( Py(:,:,k) ); F2_Pz(:,:,k) = fft2( Pz(:,:,k) );end %% z-derivative of 2D-FFT of Pzdz_F2_Pz = zeros(dim1,dim2,dim3);for i = 1:dim1 for j = 1:dim2 dz_F2_Pz(i,j,1) = ( -3 * F2_Pz(i,j,1) + 4 * F2_Pz(i,j,2) - F2_Pz(i,j,3) ) / 2 / dz; for k = 2:dim3-1 dz_F2_Pz(i,j,k) = ( F2_Pz(i,j,k+1) - F2_Pz(i,j,k-1) ) / 2 / dz; end dz_F2_Pz(i,j,dim3) = ( 3 * F2_Pz(i,j,dim3) - 4 * F2_Pz(i,j,dim3-1) + F2_Pz(i,j,dim3-2) ) / 2 / dz; endend %% rhs of PDE = ...maxwell_rhs = zeros(dim1,dim2,dim3);for i = 1:dim1 for j = 1:dim2 for k = 1:dim3 maxwell_rhs(i,j,k) = 1 / kappa * ( I * kx(i) * F2_Px(i,j,k) + I * ky(j) * F2_Py(j) + dz_F2_Pz(i,j,k) ); end endend

Page 4: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 4 of 25

%% Matrix for Maxwell and inverse mat_p_A = zeros(dim1,dim2,dim3-2,dim3-2);for i = 1:dim1 for j = 1:dim2 for k = 1:dim3-2 mat_p_A(i,j,k,k) = 2 + dz^2 * zeta2(i,j); end for k = 1:dim3-3 mat_p_A(i,j,k,k+1) = -1; end for k = 2:dim3-2 mat_p_A(i,j,k,k-1) = -1; end endend mat_p_invA = zeros(dim1,dim2,dim3-2,dim3-2);for i = 1:dim1 for j = 1:dim2 mat_p_invA(i,j,:,:) = inv( squeeze( mat_p_A(i,j,:,:) ) ); endend % %% optional: check inverse% for i = 1:dim1% for j = 1:dim2% check_A_invA = norm( squeeze( mat_p_A(i,j,:,:) ) * squeeze( mat_p_invA(i,j,:,:) ) - eye(dim3), 2)% end% end % for i = 1:dim1% for j = 1:dim2% i% j% lu( squeeze( mat_p_A(i,j,:,:) ) )% pause% end% end %% BC: Electric loading on top & bottom BC_p_top_pot = zeros(dim1,dim2);BC_p_bot_pot = zeros(dim1,dim2);

Page 5: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 5 of 25

BC_p_voltage = -20;BC_p_len_x = 10;BC_p_len_y = 10;% for i = 1:dim1% for j = 1:dim2% BC_p_top_pot(i,j) = BC_p_voltage * max( 0, 1 - ((i-dim1/2)/BC_p_len_x)^2 - ((j-dim2/2)/BC_p_len_y)^2 );% end% endBC_p_top_pot(dim1/2,dim2/2) = BC_p_voltage; F2_BC_p_top_pot = fft2( BC_p_top_pot );F2_BC_p_bot_pot = fft2( BC_p_bot_pot ); %% Matrix for Maxwell: RHS & soln mat_p_b = zeros(dim1,dim2,dim3-2);for i = 1:dim1 for j = 1:dim2 for k = 1:dim3-2 mat_p_b(i,j,k) = - dz^2 * maxwell_rhs(i,j,k+1); end endend mat_p_b(:,:,1) = mat_p_b(:,:,1) + F2_BC_p_bot_pot(:,:);mat_p_b(:,:,dim3-2) = mat_p_b(:,:,dim3-2) + F2_BC_p_top_pot(:,:); % for k = 1:dim3-2% k% squeeze( mat_p_b(:,:,k) )% pause% end %% SOLVE --> 2D-FFT( potential )F2_p_pot = zeros(dim1,dim2,dim3); F2_p_pot(:,:,1) = F2_BC_p_bot_pot(:,:);for i = 1:dim1 for j = 1:dim2 for k = 2:dim3-1 temp = 0; for comp = 1:dim3-2

Page 6: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 6 of 25

temp = temp + mat_p_invA(i,j,k-1,comp) * mat_p_b(i,j,comp); end F2_p_pot(i,j,k) = temp; end endendF2_p_pot(:,:,dim3) = F2_BC_p_top_pot(:,:); %% F2(potential) -> potentialp_pot = zeros(dim1,dim2,dim3); p_pot(:,:,1) = BC_p_bot_pot;for k = 2:dim3-1 p_pot(:,:,k) = real( ifft2( F2_p_pot(:,:,k) ) );endp_pot(:,:,dim3) = BC_p_top_pot; %% electric field F2_p_Efield_x = zeros(dim1,dim2,dim3);F2_p_Efield_y = zeros(dim1,dim2,dim3);F2_p_Efield_z = zeros(dim1,dim2,dim3); p_Efield_x = zeros(dim1,dim2,dim3);p_Efield_y = zeros(dim1,dim2,dim3);p_Efield_z = zeros(dim1,dim2,dim3); for i = 1:dim1 for j = 1:dim2 for k = 1:dim3 F2_p_Efield_x(i,j,k) = -I * kx(i) * F2_p_pot(i,j,k); F2_p_Efield_y(i,j,k) = -I * ky(j) * F2_p_pot(i,j,k); end endend for k = 1:dim3 p_Efield_x(:,:,k) = real( ifft2( F2_p_Efield_x(:,:,k) ) ); p_Efield_y(:,:,k) = real( ifft2( F2_p_Efield_y(:,:,k) ) );end %% E-field (z)for i = 1:dim1

Page 7: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 7 of 25

for j = 1:dim2 p_Efield_z(i,j,1) = -( -3 * p_pot(i,j,1) + 4 * p_pot(i,j,2) - p_pot(i,j,3) ) / 2 / dz; for k = 2:dim3-1 p_Efield_z(i,j,k) = -( p_pot(i,j,k+1) - p_pot(i,j,k-1) ) / 2 / dz; end p_Efield_z(i,j,dim3) = -( 3 * p_pot(i,j,dim3) - 4 * p_pot(i,j,dim3-1) + p_pot(i,j,dim3-2) ) / 2 / dz; endend %% May 23: F2( E_field_z )for k = 1:dim3 F2_p_Efield_z(:,:,k) = fft2( p_Efield_z(:,:,k) );end %% FILE: potential and electric field (3D)fid = fopen('E_all.dat', 'w');fprintf( fid, 'variables = x, y, z, Elec_Pot, Elec_field_x, Elec_field_y, Elec_field_z \n' );fprintf( fid, 'zone \t I= %d \t J= %d \t K= %d \t F=point \n', dim1, dim2, dim3 );for k = 1:dim3 for j = 1:dim2 for i = 1:dim1 %fprintf( fid, ' %d, %d, %d, %16.10f \n ', i, j, k, strain(i,j,k,3) ); %fprintf( fid, ' %d \t %d \t %d \t %16.10f \n ', i, j, k, w(i,j,k) ); fprintf( fid, ' %d, %d, %d, %16.10f, %16.10f, %16.10f, %16.10f \n ', i, j, k, p_pot(i,j,k), p_Efield_x(i,j,k), p_Efield_y(i,j,k), p_Efield_z(i,j,k) ); end endendfclose(fid); %% piezo-electric constitutive: strain* = D * Efield %% ZnOd13 = -5.43 * 10^-12;d23 = -5.43 * 10^-12;d33 = 11.37 * 10^-12;d42 = -11.34 * 10^-12;d51 = -11.34 * 10^-12; % %% ZnO

Page 8: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 8 of 25

% d13 = -5.43;% d23 = -5.43;% d33 = 11.37;% d42 = -11.34;% d51 = -11.34; % %%% test: assume% for i = 1:dim1% for j = 1:dim2% for k = 1:dim3% p_Efield_x(i,j,k) = cos(k);% end% end% end% for k = 1:dim3 % F2_p_Efield_x(:,:,k) = fft2( p_Efield_x(:,:,k) );% end %% eigen-strains & 2D FFT & dz of 2D FFT e_strain_11 = zeros( dim1, dim2, dim3 );e_strain_22 = zeros( dim1, dim2, dim3 );e_strain_33 = zeros( dim1, dim2, dim3 );e_strain_23 = zeros( dim1, dim2, dim3 );e_strain_13 = zeros( dim1, dim2, dim3 );e_strain_12 = zeros( dim1, dim2, dim3 ); for i = 1:dim1 for j = 1:dim2 for k = 1:dim3 e_strain_11(i,j,k) = d13 * p_Efield_z(i,j,k); e_strain_22(i,j,k) = d23 * p_Efield_z(i,j,k); e_strain_33(i,j,k) = d33 * p_Efield_z(i,j,k); e_strain_23(i,j,k) = d42 * p_Efield_y(i,j,k); e_strain_13(i,j,k) = d51 * p_Efield_x(i,j,k); e_strain_12(i,j,k) = 0; end endend %%%%% route 1 F2_e_strain_11 = zeros( dim1, dim2, dim3 );F2_e_strain_22 = zeros( dim1, dim2, dim3 );F2_e_strain_33 = zeros( dim1, dim2, dim3 );F2_e_strain_23 = zeros( dim1, dim2, dim3 );F2_e_strain_13 = zeros( dim1, dim2, dim3 );

Page 9: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 9 of 25

F2_e_strain_12 = zeros( dim1, dim2, dim3 ); for i = 1:dim1 for j = 1:dim2 for k = 1:dim3 F2_e_strain_11(i,j,k) = d13 * F2_p_Efield_z(i,j,k); F2_e_strain_22(i,j,k) = d23 * F2_p_Efield_z(i,j,k); F2_e_strain_33(i,j,k) = d33 * F2_p_Efield_z(i,j,k); F2_e_strain_23(i,j,k) = d42 * F2_p_Efield_y(i,j,k); F2_e_strain_13(i,j,k) = d51 * F2_p_Efield_x(i,j,k); F2_e_strain_12(i,j,k) = 0; end endend % %%%%% route 2% % FF2_e_strain_11 = zeros( dim1, dim2, dim3 );% FF2_e_strain_22 = zeros( dim1, dim2, dim3 );% FF2_e_strain_33 = zeros( dim1, dim2, dim3 );% FF2_e_strain_23 = zeros( dim1, dim2, dim3 );% FF2_e_strain_13 = zeros( dim1, dim2, dim3 );% FF2_e_strain_12 = zeros( dim1, dim2, dim3 );% % % for k = 1:dim3 % FF2_e_strain_11(:,:,k) = fft2( e_strain_11(:,:,k) );% FF2_e_strain_22(:,:,k) = fft2( e_strain_22(:,:,k) );% FF2_e_strain_33(:,:,k) = fft2( e_strain_33(:,:,k) );% FF2_e_strain_23(:,:,k) = fft2( e_strain_23(:,:,k) );% FF2_e_strain_13(:,:,k) = fft2( e_strain_13(:,:,k) );% FF2_e_strain_12(:,:,k) = fft2( e_strain_12(:,:,k) );% end% % % % %%%%% comparing two routes% % err_11 = sum( sum( sum( abs( F2_e_strain_11 - FF2_e_strain_11 ) )))% err_22 = sum( sum( sum( abs( F2_e_strain_22 - FF2_e_strain_22 ) )))% err_33 = sum( sum( sum( abs( F2_e_strain_33 - FF2_e_strain_33 ) )))% err_23 = sum( sum( sum( abs( F2_e_strain_23 - FF2_e_strain_23 ) )))% err_13 = sum( sum( sum( abs( F2_e_strain_13 - FF2_e_strain_13 ) )))% err_12 = sum( sum( sum( abs( F2_e_strain_12 - FF2_e_strain_12 ) )))% pause

Page 10: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 10 of 25

% z-derivative of e_strain% only the first 5 components are needed dz_F2_e_strain_11 = zeros( dim1, dim2, dim3 );dz_F2_e_strain_22 = zeros( dim1, dim2, dim3 );dz_F2_e_strain_33 = zeros( dim1, dim2, dim3 );dz_F2_e_strain_23 = zeros( dim1, dim2, dim3 );dz_F2_e_strain_13 = zeros( dim1, dim2, dim3 ); for i = 1:dim1 for j = 1:dim2 dz_F2_e_strain_11(i,j,1) = ( -3 * F2_e_strain_11(i,j,1) + 4 * F2_e_strain_11(i,j,2) - F2_e_strain_11(i,j,3) ) / 2 / h; dz_F2_e_strain_22(i,j,1) = ( -3 * F2_e_strain_22(i,j,1) + 4 * F2_e_strain_22(i,j,2) - F2_e_strain_22(i,j,3) ) / 2 / h; dz_F2_e_strain_33(i,j,1) = ( -3 * F2_e_strain_33(i,j,1) + 4 * F2_e_strain_33(i,j,2) - F2_e_strain_33(i,j,3) ) / 2 / h; dz_F2_e_strain_23(i,j,1) = ( -3 * F2_e_strain_23(i,j,1) + 4 * F2_e_strain_23(i,j,2) - F2_e_strain_23(i,j,3) ) / 2 / h; dz_F2_e_strain_13(i,j,1) = ( -3 * F2_e_strain_13(i,j,1) + 4 * F2_e_strain_13(i,j,2) - F2_e_strain_13(i,j,3) ) / 2 / h; for k = 2:dim3-1 dz_F2_e_strain_11(i,j,k) = ( F2_e_strain_11(i,j,k+1) - F2_e_strain_11(i,j,k-1) ) / 2 / h; dz_F2_e_strain_22(i,j,k) = ( F2_e_strain_22(i,j,k+1) - F2_e_strain_22(i,j,k-1) ) / 2 / h; dz_F2_e_strain_33(i,j,k) = ( F2_e_strain_33(i,j,k+1) - F2_e_strain_33(i,j,k-1) ) / 2 / h; dz_F2_e_strain_23(i,j,k) = ( F2_e_strain_23(i,j,k+1) - F2_e_strain_23(i,j,k-1) ) / 2 / h; dz_F2_e_strain_13(i,j,k) = ( F2_e_strain_13(i,j,k+1) - F2_e_strain_13(i,j,k-1) ) / 2 / h; end dz_F2_e_strain_11(i,j,dim3) = ( 3 * F2_e_strain_11(i,j,dim3) - 4 * F2_e_strain_11(i,j,dim3-1) + F2_e_strain_11(i,j,dim3-2) ) / 2 / h; dz_F2_e_strain_22(i,j,dim3) = ( 3 * F2_e_strain_22(i,j,dim3) - 4 * F2_e_strain_22(i,j,dim3-1) + F2_e_strain_22(i,j,dim3-2) ) / 2 / h; dz_F2_e_strain_33(i,j,dim3) = ( 3 * F2_e_strain_33(i,j,dim3) - 4 * F2_e_strain_33(i,j,dim3-1) + F2_e_strain_33(i,j,dim3-2) ) / 2 / h; dz_F2_e_strain_23(i,j,dim3) = ( 3 * F2_e_strain_23(i,j,dim3) - 4 * F2_e_strain_23(i,j,dim3-1) + F2_e_strain_23(i,j,dim3-2) ) / 2 / h; dz_F2_e_strain_13(i,j,dim3) = ( 3 * F2_e_strain_13(i,j,dim3) - 4 * F2_e_strain_13(i,j,dim3-1) + F2_e_strain_13(i,j,dim3-2) ) / 2 / h; endend

Page 11: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 11 of 25

%% material - elastic constants % c1 = 80 * (10^9);% c2 = 30 * (10^9);% c3 = 20 * (10^9); c1 = 80 * (10^1);c2 = 30 * (10^1);c3 = 20 * (10^1); C = [ c1, c3, c3, 0, 0, 0; c3, c1, c3, 0, 0, 0; c3, c3, c1, 0, 0, 0; 0, 0, 0, c2, 0, 0; 0, 0, 0, 0, c2, 0; 0, 0, 0, 0, 0, c2 ]; mu = c2;vu = c3 / (c1+c3);cc = c3 / c1; %% assembly big matrix = block tridiagonal (General Case) % 64 * 64 * 64 = 165 s% 128 * 128 * 32 = 87 s %e_A = zeros(dim1,dim2,dim3*3,dim3*3);%e_A = zeros(dim3*3,dim3*3);%e_invA = zeros(dim1,dim2,dim3*3,dim3*3); mat_a = zeros(3,3);mat_b = zeros(3,3);mat_c = zeros(dim1,dim2,3,3); mat_d = zeros(3,3);mat_e = zeros(3,3);mat_f = zeros(3,3); mat_L = zeros(dim1,dim2,3*dim3,3);mat_U = zeros(3,3);mat_invU = zeros(dim1,dim2,3*dim3,3);mat_M = zeros(dim1,dim2,3,3);

Page 12: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 12 of 25

A1 = zeros(dim1,dim2);A2 = zeros(dim1,dim2);A3 = zeros(dim1,dim2); B1 = zeros(dim1,dim2);B2 = zeros(dim1,dim2);B3 = zeros(dim1,dim2); C1 = zeros(dim1,dim2);C2 = zeros(dim1,dim2);C3 = zeros(dim1,dim2); A7 = zeros(dim1,dim2);A8 = zeros(dim1,dim2);A9 = zeros(dim1,dim2); B7 = zeros(dim1,dim2);B8 = zeros(dim1,dim2);B9 = zeros(dim1,dim2); C7 = zeros(dim1,dim2);C8 = zeros(dim1,dim2);C9 = zeros(dim1,dim2); temp33a = zeros(3,3);temp33b = zeros(3,3);temp33c = zeros(3,3); for i = 1:dim1 for j = 1:dim2 A1(i,j) = 2 * c2; A2(i,j) = 0; A3(i,j) = - h * ( c2 + c3 ) * I * kx(i); A4 = - 2 * h^2 * ( c1 * kx(i)^2 + c2 * ky(j)^2 ) - 4 * c2 ; A5 = - 2 * h^2 * ( c2 + c3 ) * kx(i) * ky(j); A6 = 0; A7(i,j) = 2 * c2; A8(i,j) = 0; A9(i,j) = h * ( c2 + c3 ) * I * kx(i); B1(i,j) = 0; B2(i,j) = 2 * c2; B3(i,j) = - h * ( c2 + c3 ) * I * ky(j); B4 = - 2 * h^2 * ( c2 + c3 ) * kx(i) * ky(j);

Page 13: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 13 of 25

B5 = - 2 * h^2 * ( c2 * kx(i)^2 + c1 * ky(j)^2 ) - 4 * c2; B6 = 0; B7(i,j) = 0; B8(i,j) = 2 * c2; B9(i,j) = h * ( c2 + c3 ) * I * ky(j); C1(i,j) = - h * ( c2 + c3 ) * I * kx(i); C2(i,j) = - h * ( c2 + c3 ) * I * ky(j); C3(i,j) = 2 * c1; C4 = 0; C5 = 0; C6 = - 2 * h^2 * c2 * ( kx(i)^2 + ky(j)^2 ) - 4 * c1; C7(i,j) = h * ( c2 + c3 ) * I * kx(i); C8(i,j) = h * ( c2 + c3 ) * I * ky(j); C9(i,j) = 2 * c1; % bottom rows D1 = 2 * h * I * kx(i); D2 = 2 * h * I * ky(j); D3 = 2 * h * c3 / c1 * I * kx(i); D4 = 2 * h * c3 / c1 * I * ky(j); % input: sub-dia mat_a = [ A1(i,j), A2(i,j), A3(i,j); B1(i,j), B2(i,j), B3(i,j); C1(i,j), C2(i,j), C3(i,j) ]; % inout: diagonal mat_b = [ A4, A5, A6; B4, B5, B6; C4, C5, C6 ]; % input: sup-dia mat_c(i,j,:,:) = [ A7(i,j), A8(i,j), A9(i,j); B7(i,j), B8(i,j), B9(i,j); C7(i,j), C8(i,j), C9(i,j) ]; % input: D, E, F mat_d = [ -1, 0, 0; 0, -1, 0; 0, 0, -1]; mat_e = [ 0, 0, D1; 0, 0, D2; D3, D4, 0 ];

Page 14: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 14 of 25

mat_f = [ 1, 0, 0; 0, 1, 0; 0, 0, 1]; % first round: i = 1 mat_L(i,j,1:3,:) = 0; mat_U = mat_b; mat_invU(i,j,3*dim3-2:3*dim3,:) = inv( mat_U ); % second round to second last round: i = 2 ~ dim3-1 for k = 2:dim3-1 % mat_L(i,j,3*k-2:3*k,:) = mat_a * squeeze( mat_invU(i,j,3*dim3-3*k+4:3*dim3-3*k+6,:) );% mat_U = mat_b - squeeze( mat_L(i,j,3*k-2:3*k,:) ) * squeeze( mat_c(i,j,:,:) );% mat_invU(i,j,3*dim3-3*k+1:3*dim3-3*k+3,:) = inv( mat_U ); temp33a(:,:) = mat_invU(i,j,3*dim3-3*k+4:3*dim3-3*k+6,:); mat_L(i,j,3*k-2:3*k,:) = mat_a * temp33a(:,:); temp33b(:,:) = mat_L(i,j,3*k-2:3*k,:); temp33c(:,:) = mat_c(i,j,:,:); mat_U = mat_b - temp33b * temp33c; mat_invU(i,j,3*dim3-3*k+1:3*dim3-3*k+3,:) = inv( mat_U ); end % last round: i = dim3 k = dim3; mat_M(i,j,:,:) = mat_d * squeeze( mat_invU(i,j,7:9,:) ); mat_L(i,j,3*k-2:3*k,:) = ( mat_e - squeeze( mat_M(i,j,:,:) ) * squeeze( mat_c(i,j,:,:) ) ) * squeeze( mat_invU(i,j,4:6,:) ); mat_U = mat_f - squeeze( mat_L(i,j,3*k-2:3*k,:) ) * squeeze( mat_c(i,j,:,:) ); mat_invU(i,j,1:3,:) = inv( mat_U ); endend toc

Page 15: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 15 of 25

%% define mechanical BC: top traction_1 = zeros(dim1,dim2);traction_2 = zeros(dim1,dim2);traction_3 = zeros(dim1,dim2); % F2_traction_1 = zeros(dim1,dim2);% F2_traction_2 = zeros(dim1,dim2);% F2_traction_3 = zeros(dim1,dim2); % traction_30 = -c1;% traction_len_x = 2;% traction_len_y = 2; % for i = 1:dim1% for j = 1:dim2% traction_3(i,j) = traction_30 * max( 0, 1 - ((i-dim1/2)/traction_len_x)^2 - ((j-dim2/2)/traction_len_y)^2 );% end% end %traction_3(dim1/2,dim2/2) = -c1 / 10000; F2_traction_1 = fft2( traction_1 );F2_traction_2 = fft2( traction_2 );F2_traction_3 = fft2( traction_3 ); %% define mechanical BC: bottom base_displ_1 = zeros(dim1,dim2);base_displ_2 = zeros(dim1,dim2);base_displ_3 = zeros(dim1,dim2); % F2_base_displ_1 = zeros(dim1,dim2);% F2_base_displ_2 = zeros(dim1,dim2);% F2_base_displ_3 = zeros(dim1,dim2); F2_base_displ_1 = fft2( base_displ_1 );F2_base_displ_2 = fft2( base_displ_2 );F2_base_displ_3 = fft2( base_displ_3 ); %% elasity: right hand side of Au = f e_rhs = zeros(dim1,dim2,3*dim3);

Page 16: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 16 of 25

for i = 1:dim1 for j = 1:dim2 for k = 2:dim3 RHS_f ... = c1 * F2_e_strain_11(i,j,k) * I * kx(i) ... + c3 * F2_e_strain_22(i,j,k) * I * kx(i) ... + c3 * F2_e_strain_33(i,j,k) * I * kx(i) ... + c2 * F2_e_strain_12(i,j,k) * I * ky(j) ... + c2 * dz_F2_e_strain_13(i,j,k); RHS_g ... = c2 * F2_e_strain_12(i,j,k) * I * kx(i) ... + c3 * F2_e_strain_11(i,j,k) * I * ky(j) ... + c1 * F2_e_strain_22(i,j,k) * I * ky(j) ... + c3 * F2_e_strain_33(i,j,k) * I * ky(j) ... + c2 * dz_F2_e_strain_23(i,j,k); RHS_k ... = c2 * F2_e_strain_13(i,j,k) * I * kx(i) ... + c2 * F2_e_strain_23(i,j,k) * I * ky(j) ... + c3 * dz_F2_e_strain_11(i,j,k)... + c3 * dz_F2_e_strain_22(i,j,k)... + c1 * dz_F2_e_strain_33(i,j,k); % assembly to vector e_rhs(i,j,(k-2)*3+1) = 2 * h^2 * RHS_f; e_rhs(i,j,(k-2)*3+2) = 2 * h^2 * RHS_g; e_rhs(i,j,(k-2)*3+3) = 2 * h^2 * RHS_k; end endend % update first three rows (displacements) for i = 1:dim1 for j = 1:dim2 e_rhs(i,j,1) = e_rhs(i,j,1) - A1(i,j) * F2_base_displ_1(i,j) - A2(i,j) * F2_base_displ_2(i,j) - A3(i,j) * F2_base_displ_3(i,j); e_rhs(i,j,2) = e_rhs(i,j,2) - B1(i,j) * F2_base_displ_1(i,j) - B2(i,j) * F2_base_displ_2(i,j) - B3(i,j) * F2_base_displ_3(i,j); e_rhs(i,j,3) = e_rhs(i,j,3) - C1(i,j) * F2_base_displ_1(i,j) - C2(i,j) * F2_base_displ_2(i,j) - C3(i,j) * F2_base_displ_3(i,j);

Page 17: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 17 of 25

endend % update last three rows (tractions): for i = 1:dim1 for j = 1:dim2 e_rhs(i,j,3*dim3-2) = 2 * h / c2 * F2_traction_1(i,j) + 2 * h * F2_e_strain_13(i,j,dim3); e_rhs(i,j,3*dim3-1) = 2 * h / c2 * F2_traction_2(i,j) + 2 * h * F2_e_strain_23(i,j,dim3); e_rhs(i,j,3*dim3-0) = 2 * h / c1 * F2_traction_3(i,j) + 2 * h * F2_e_strain_33(i,j,dim3) + 2 * h * c3 / c1 * ( F2_e_strain_11(i,j,dim3) + F2_e_strain_22(i,j,dim3) ); endend toc fprintf( 'Au = f --> u \n' )tic %% Elasity: solution Au = f F2_displ_1 = zeros(dim1,dim2,dim3+1);F2_displ_2 = zeros(dim1,dim2,dim3+1);F2_displ_3 = zeros(dim1,dim2,dim3+1); temp_uuu = zeros( 3*dim3, 1 );temp_vvv = zeros( 3*dim3, 1 ); temp3a = zeros(3,1);temp3b = zeros(3,1);temp3c = zeros(3,1); uuu = zeros(dim1,dim2,3*dim3);vvv = zeros(dim1,dim2,3*dim3); tic for i = 1:dim1 for j = 1:dim2

Page 18: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 18 of 25

% forwards substitution temp_vvv(1:3) = e_rhs(i,j,1:3); for k = 2:dim3 %temp_vvv(3*k-2:3*k) = squeeze( e_rhs(i,j,3*k-2:3*k) ) - squeeze( mat_L(i,j,3*k-2:3*k,:) ) * temp_vvv(3*k-5:3*k-3); temp3a(:) = e_rhs(i,j,3*k-2:3*k); temp33a(:,:) = mat_L(i,j,3*k-2:3*k,:); temp_vvv(3*k-2:3*k) = temp3a - temp33a * temp_vvv(3*k-5:3*k-3); end k = dim3; temp33b(:,:) = mat_M(i,j,:,:); temp_vvv(3*k-2:3*k) = temp_vvv(3*k-2:3*k) - temp33b * temp_vvv(3*k-8:3*k-6); % backwards substitution k = dim3; temp_uuu(3*k-2:3*k) = squeeze( mat_invU(i,j,1:3,:)) * temp_vvv(3*k-2:3*k); for k = dim3-1:-1:1 %temp_uuu(3*k-2:3*k) = squeeze( mat_invU(i,j,3*k-2:3*k) ) * ( temp_vvv(3*k-2:3*k) - mat_c * temp_uuu(3*k+1:3*k+3) ); temp33a(:,:) = mat_invU(i,j,3*dim3-3*k+1:3*dim3-3*k+3,:); temp33b(:,:) = mat_c(i,j,:,:); temp_uuu(3*k-2:3*k) = temp33a * ( temp_vvv(3*k-2:3*k) - temp33b * temp_uuu(3*k+1:3*k+3) ); end % temp: May 20 uuu(i,j,:) = temp_uuu(:); vvv(i,j,:) = temp_vvv(:); % distributed to 3 components of displacements for k = 1:dim3 F2_displ_1(i,j,k+1) = temp_uuu( (k-1)*3+1 ); F2_displ_2(i,j,k+1) = temp_uuu( (k-1)*3+2 ); F2_displ_3(i,j,k+1) = temp_uuu( (k-1)*3+3 ); end endend for i = 1:dim1 for j = 1:dim2 F2_displ_1(i,j,1) = F2_base_displ_1(i,j); F2_displ_2(i,j,1) = F2_base_displ_2(i,j);

Page 19: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 19 of 25

F2_displ_3(i,j,1) = F2_base_displ_3(i,j); endend % %%% check: LU-solve% i = 4;% j = 4;% for k = 2:8% k% check_vvv = squeeze( vvv(i,j,(k-1)*3+1:(k-1)*3+3) ) - squeeze( e_rhs(i,j,(k-1)*3+1:(k-1)*3+3) ) + squeeze( mat_L(i,j,(k-1)*3+1:(k-1)*3+3,:) ) * squeeze( vvv(i,j,(k-2)*3+1:(k-2)*3+3) )% pause% end% k = 8% check_vvv = check_vvv + squeeze( mat_M(i,j,:,:) ) * squeeze( vvv(i,j,end-8:end-6 ) ) toc fprintf( 'Post-Processing - strains, stresses \n' )tic %% Post-Process (A): displ displ_1 = zeros(dim1,dim2,dim3+1);displ_2 = zeros(dim1,dim2,dim3+1);displ_3 = zeros(dim1,dim2,dim3+1); for k = 1:dim3+1 displ_1(:,:,k) = real( ifft2( F2_displ_1(:,:,k) ) ); displ_2(:,:,k) = real( ifft2( F2_displ_2(:,:,k) ) ); displ_3(:,:,k) = real( ifft2( F2_displ_3(:,:,k) ) );end %% Post-Process (B): F2_strain dz_F2_displ_1 = zeros(dim1,dim2,dim3);dz_F2_displ_2 = zeros(dim1,dim2,dim3);dz_F2_displ_3 = zeros(dim1,dim2,dim3);

Page 20: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 20 of 25

for i = 1:dim1 for j = 1:dim2 dz_F2_displ_1(i,j,1) = ( -3 * F2_displ_1(i,j,1) + 4 * F2_displ_1(i,j,2) - F2_displ_1(i,j,3) ) / 2 / h; dz_F2_displ_2(i,j,1) = ( -3 * F2_displ_2(i,j,1) + 4 * F2_displ_2(i,j,2) - F2_displ_2(i,j,3) ) / 2 / h; dz_F2_displ_3(i,j,1) = ( -3 * F2_displ_3(i,j,1) + 4 * F2_displ_3(i,j,2) - F2_displ_3(i,j,3) ) / 2 / h; for k = 2:dim3 dz_F2_displ_1(i,j,k) = ( F2_displ_1(i,j,k+1) - F2_displ_1(i,j,k-1) ) / 2 / h; dz_F2_displ_2(i,j,k) = ( F2_displ_2(i,j,k+1) - F2_displ_2(i,j,k-1) ) / 2 / h; dz_F2_displ_3(i,j,k) = ( F2_displ_3(i,j,k+1) - F2_displ_3(i,j,k-1) ) / 2 / h; end endend F2_strain_11 = zeros(dim1,dim2,dim3);F2_strain_22 = zeros(dim1,dim2,dim3);F2_strain_33 = zeros(dim1,dim2,dim3);F2_strain_23 = zeros(dim1,dim2,dim3);F2_strain_13 = zeros(dim1,dim2,dim3);F2_strain_12 = zeros(dim1,dim2,dim3); for i = 1:dim1 for j = 1:dim2 for k = 1:dim3 F2_strain_11(i,j,k) = F2_displ_1(i,j,k) * I * kx(i); F2_strain_22(i,j,k) = F2_displ_2(i,j,k) * I * ky(j); F2_strain_33(i,j,k) = dz_F2_displ_3(i,j,k); F2_strain_23(i,j,k) = dz_F2_displ_2(i,j,k) + F2_displ_3(i,j,k) * I * ky(j); F2_strain_13(i,j,k) = dz_F2_displ_1(i,j,k) + F2_displ_3(i,j,k) * I * kx(i); F2_strain_12(i,j,k) = F2_displ_1(i,j,k) * I * ky(j) + F2_displ_2(i,j,k) * I * kx(i); end endend strain_11 = zeros(dim1,dim2,dim3);strain_22 = zeros(dim1,dim2,dim3);strain_33 = zeros(dim1,dim2,dim3);

Page 21: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 21 of 25

strain_23 = zeros(dim1,dim2,dim3);strain_13 = zeros(dim1,dim2,dim3);strain_12 = zeros(dim1,dim2,dim3); for k = 1:dim3 strain_11(:,:,k) = real( ifft2( F2_strain_11(:,:,k) ) ); strain_22(:,:,k) = real( ifft2( F2_strain_22(:,:,k) ) ); strain_33(:,:,k) = real( ifft2( F2_strain_33(:,:,k) ) ); strain_23(:,:,k) = real( ifft2( F2_strain_23(:,:,k) ) ); strain_13(:,:,k) = real( ifft2( F2_strain_13(:,:,k) ) ); strain_12(:,:,k) = real( ifft2( F2_strain_12(:,:,k) ) ); end %% Post-Process (C): stress stress_11 = zeros(dim1,dim2,dim3);stress_22 = zeros(dim1,dim2,dim3);stress_33 = zeros(dim1,dim2,dim3);stress_23 = zeros(dim1,dim2,dim3);stress_13 = zeros(dim1,dim2,dim3);stress_12 = zeros(dim1,dim2,dim3); for i = 1:dim1 for j = 1:dim2 for k = 1:dim3 stress_11(i,j,k) ... = c1 * ( strain_11(i,j,k) - e_strain_11(i,j,k) )... + c3 * ( strain_22(i,j,k) - e_strain_22(i,j,k) )... + c3 * ( strain_33(i,j,k) - e_strain_33(i,j,k) ); stress_22(i,j,k) ... = c3 * ( strain_11(i,j,k) - e_strain_11(i,j,k) )... + c1 * ( strain_22(i,j,k) - e_strain_22(i,j,k) )... + c3 * ( strain_33(i,j,k) - e_strain_33(i,j,k) ); stress_33(i,j,k) ... = c3 * ( strain_11(i,j,k) - e_strain_11(i,j,k) )... + c3 * ( strain_22(i,j,k) - e_strain_22(i,j,k) )... + c1 * ( strain_33(i,j,k) - e_strain_33(i,j,k) ); stress_23(i,j,k) ... = c2 * ( strain_23(i,j,k) - e_strain_23(i,j,k) ); stress_13(i,j,k) ...

Page 22: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 22 of 25

= c2 * ( strain_13(i,j,k) - e_strain_13(i,j,k) ); stress_12(i,j,k) ... = c2 * ( strain_12(i,j,k) - e_strain_12(i,j,k) ); end endend toc fprintf( 'Output to files \n' )tic %% OUTPUT % %% write to file (3D) - topo% fid = fopen('elas_topo_xyz.dat', 'w');% fprintf( fid, 'variables = x, y, top_u, top_v, top_w \n' );% fprintf( fid, 'zone \t I= %d \t J= %d \t F=point \n', dim1, dim2 );% for j = 1:dim2% for i = 1:dim1% fprintf( fid, ' %d, %d, %16.10f, %16.10f, %16.10f \n ', i, j, displ_1(i,j,dim3), displ_2(i,j,dim3), displ_3(i,j,dim3) );% end% end% fclose(fid); %% write to file (3D) - topofid = fopen('elas_topo_z.dat', 'w');fprintf( fid, 'variables = x, y, top_w \n' );fprintf( fid, 'zone \t I= %d \t J= %d \t F=point \n', dim1, dim2 );for j = 1:dim2 for i = 1:dim1 fprintf( fid, ' %d, %d, %16.10f \n ', i, j, displ_3(i,j,dim3) ); endendfclose(fid); %% write to file (3D) - displacement

Page 23: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 23 of 25

fid = fopen('elas_displ.dat', 'w');fprintf( fid, 'variables = x, y, z, displ_u, displ_v, displ_w \n' );fprintf( fid, 'zone \t I= %d \t J= %d \t K= %d \t F=point \n', dim1, dim2, dim3 );for k = 1:dim3 for j = 1:dim2 for i = 1:dim1 %fprintf( fid, ' %d, %d, %d, %16.10f \n ', i, j, k, strain(i,j,k,3) ); %fprintf( fid, ' %d \t %d \t %d \t %16.10f \n ', i, j, k, w(i,j,k) ); fprintf( fid, ' %d, %d, %d, %16.10f, %16.10f, %16.10f \n ', i, j, k, displ_1(i,j,k), displ_2(i,j,k), displ_3(i,j,k) ); end endendfclose(fid); % % % write to file (3D) - displacement% fid = fopen('elas_displ.dat', 'w');% fprintf( fid, 'variables = x, y, z, displ_u, displ_v, displ_w \n' );% fprintf( fid, 'zone \t I= %d \t J= %d \t K= %d \t F=point \n', dim1, dim2, dim3 );% for i = 1:dim1% for j = 1:dim2% for k = 1:dim3% fprintf( fid, ' %d, %d, %d, %16.10f \n ', i, j, k, strain(i,j,k,3) );% fprintf( fid, ' %d \t %d \t %d \t %16.10f \n ', i, j, k, w(i,j,k) );% fprintf( fid, ' %d, %d, %d, %16.10f, %16.10f, %16.10f \n ', i, j, k, displ_1(i,j,k), displ_2(i,j,k), displ_3(i,j,k) );% end% end% end% fclose(fid); %% write to file (3D) - eigen_strainfid = fopen('elas_eigen_strain.dat', 'w');fprintf( fid, 'variables = x, y, z, e_strain11, e_strain22, e_strain33, e_strain23, e_strain13, e_strain12 \n' );fprintf( fid, 'zone \t I= %d \t J= %d \t K= %d \t F=point \n', dim1, dim2, dim3 );for k = 1:dim3 for j = 1:dim2 for i = 1:dim1 %fprintf( fid, ' %d, %d, %d, %16.10f \n ', i, j, k, strain(i,j,k,3) ); %fprintf( fid, ' %d \t %d \t %d \t %16.10f \n ', i, j, k, w(i,j,k) ); fprintf( fid, ' %d, %d, %d, %16.10f, %16.10f, %16.10f, %16.10f, %16.10f, %16.10f \n ', i, j, k, e_strain_11(i,j,k), e_strain_22(i,j,k), e_strain_33(i,j,k), e_strain_23(i,j,k), e_strain_13(i,j,k), e_strain_12(i,j,k) ); end endend

Page 24: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 24 of 25

fclose(fid); %% write to file (3D) - strainfid = fopen('elas_strain.dat', 'w');fprintf( fid, 'variables = x, y, z, strain11, strain22, strain33, strain23, strain13, strain12 \n' );fprintf( fid, 'zone \t I= %d \t J= %d \t K= %d \t F=point \n', dim1, dim2, dim3 );for k = 1:dim3 for j = 1:dim2 for i = 1:dim1 %fprintf( fid, ' %d, %d, %d, %16.10f \n ', i, j, k, strain(i,j,k,3) ); %fprintf( fid, ' %d \t %d \t %d \t %16.10f \n ', i, j, k, w(i,j,k) ); fprintf( fid, ' %d, %d, %d, %16.10f, %16.10f, %16.10f, %16.10f, %16.10f, %16.10f \n ', i, j, k, strain_11(i,j,k), strain_22(i,j,k), strain_33(i,j,k), strain_23(i,j,k), strain_13(i,j,k), strain_12(i,j,k) ); end endendfclose(fid); %% write to file (3D) - stressfid = fopen('elas_stress.dat', 'w');fprintf( fid, 'variables = x, y, z, stress11, stress22, stress33, stress23, stress13, stress12 \n' );fprintf( fid, 'zone \t I= %d \t J= %d \t K= %d \t F=point \n', dim1, dim2, dim3 );for k = 1:dim3 for j = 1:dim2 for i = 1:dim1 %fprintf( fid, ' %d, %d, %d, %16.10f \n ', i, j, k, strain(i,j,k,3) ); %fprintf( fid, ' %d \t %d \t %d \t %16.10f \n ', i, j, k, w(i,j,k) ); fprintf( fid, ' %d, %d, %d, %16.10f, %16.10f, %16.10f, %16.10f, %16.10f, %16.10f \n ', i, j, k, stress_11(i,j,k), stress_22(i,j,k), stress_33(i,j,k), stress_23(i,j,k), stress_13(i,j,k), stress_12(i,j,k) ); end endendfclose(fid); toc close allclear all

Page 25: Pfm fd pot may23

3/18/13 4:52 PM C:\Users\ChiHou\Dropbox\winter13\fer...\PFM__FD__pot__may23.m 25 of 25