1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
%------------------ Constants and initialisation ------------------%
warning off MATLAB:divideByZero;
% warning off MATLAB:fzero:UndeterminedSyntax;
options = optimset('TolFun',1e-12);
Lamb_mean = 630e-9;
%************ Calcul de la frequence, du nombre de mode et du groupe de mode******************%
ON = 0.26;
d_co = 250e-6;
while (ON <= 0.50)
n_cl= sqrt(n_co^2 - ON^2);
V = (2 * pi / Lamb_mean) * (d_co / 2) * sqrt(n_co^2 - n_cl^2)
N_modes = 0.5 * V^2
M_modes = sqrt(N_modes)
k0 = k0_mean;
%******************************************************************%
%************ Sauvegarde du fichier FibreData ******%
%************ dans un sous répertoire dont ******%
%************ dont la valeur est celle du rayon de coeur ******%
NomRepertoire = ['.\Results\', num2str(d_co)];
mkdir(NomRepertoire);
repertoire = strcat (NomRepertoire,'\FibreData_', num2str(V),'.mat');
repertoire2 = strcat (NomRepertoire,'\FibreData_', num2str(V),'.txt');
save (repertoire, 'd_co', 'd_cl', 'd_ct', 'ON', 'n_co', 'n_cl', 'Lamb_mean', 'k0_mean');
save (repertoire2, 'd_co', 'd_cl', 'd_ct', 'ON', 'n_co', 'n_cl', 'Lamb_mean', 'k0_mean', '-ASCII', '-DOUBLE','-TABS');
%******************************************************************%
%------------------ Search for cut off normalised frequencies -----%
dBeta = (n_co - n_cl) * k0 / (20 * floor(N_modes * 1.2));
Interv = [];
Beta_array = [];
inter = strcat (NomRepertoire,'\Interv_', num2str(V),'.mat');
save(inter,'Interv');
BetaMin = k0 * n_cl
BetaMax = k0 * n_co
BetaLength = BetaMax - BetaMin;
nu = 0;
ZeroFound = 1;
Beta = BetaMin;
h0 = waitbar(0,['% of orders processed']);
set(h0,'Name','Order');
BarPosit = get(h0,'Position');
while ZeroFound == 1
i = 1;
ZeroFound = 0;
pause(0.01); % 0.01 A CHANGER SI TEMPS DE CALCUL PAS CONVENABLE
waitbar(nu/M_modes,h0);
h1 = waitbar(0,['Order ',num2str(nu),' : search of root segments in progress'],'Position',(BarPosit + [100 -100 0 0]));
set(h1,'Name','Search of roots segments in progress');
while Beta <= BetaMax
waitbar((Beta-BetaMin)/BetaLength,h1);
Disp1 = gDispersion(Beta,nu,k0,n_co,n_cl,d_co,J_bess,K_bess);
Disp2 = gDispersion(Beta + dBeta,nu,k0,n_co,n_cl,d_co,J_bess,K_bess);
Disp3 = gDispersion((Beta + 2 * dBeta),nu,k0,n_co,n_cl,d_co,J_bess,K_bess);
if (isfinite(Disp1) & isfinite(Disp2) & isfinite(Disp3)) & (sign(Disp2) ~= sign(Disp1)) & (sign(Disp3 - Disp2) == sign(Disp2 - Disp1))
Interv((nu+1),i,1) = Beta;
Interv((nu+1),i,2) = Beta + dBeta;
i = i + 1;
ZeroFound = 1;
end
Beta = Beta + dBeta;
end
close(h1);
Beta = BetaMin;
if ZeroFound == 1
save(inter,'Interv','-APPEND');
nu = nu + 1;
end
end
close(h0);
h = waitbar(0,'Roots search in progress');
Betas = [];
Size2 = length(Interv(1,:,1));
for i = 1:nu
waitbar(i/(nu + 1));
for j = 1:nnz(Interv(i,:,1))
Betas(i,(Size2 - j + 1)) = fzero(@gDispersion,[Interv(i,j,1) Interv(i,j,2)],options,(i-1),k0,n_co,n_cl,d_co,J_bess,K_bess);
end
end
close(h);
%************ Sauvegarde des valeurs de Beta ********************%
%************ et de la denière valeur de nu *********************%
beta = strcat (NomRepertoire,'\Betas_', num2str(V),'.mat');
beta2 = strcat (NomRepertoire,'\Betas_', num2str(V),'.txt');
% nu = strcat ('..\Results\',date,'\DerniereValeurDeNu_',num2str(V),'.mat');
save (beta, 'Betas');
save (beta2, 'Betas','-ASCII', '-DOUBLE','-TABS');
% save (nu, 'DerniereValeurDeNu');
%******************************************************************%
% % Test pour tracer la courbe de dispersion
% % ValeurBeta = (n_cl * k0):((n_co - n_cl) * k0 / 1000):(n_co * k0);
% % figure (1)
% % hold on
% % for i=1:nu
% % plot (ValeurBeta,gDispersion(ValeurBeta,i,k0,n_co,n_cl,d_co,J_bess,K_bess));
% % end
% % hold off
% % ******************************************************************%
%************ Calcul des valeurs de Kappa***********************%
Kappas = [];
Kappas = sqrt((n_co * k0)^2 - Betas(1,:).^2);
for i = 2:nu
if nnz(Betas(i,:)) == length(Betas(i,:))
Kappas = [Kappas; sqrt((n_co * k0)^2 - Betas(i,:).^2)];
else
Kappas = [Kappas; [zeros(1,length(Betas(i,:)) - nnz(Betas(i,:))), sqrt((n_co * k0)^2 - nonzeros(Betas(i,:)).^2)']];
end
end
%************ Sauvegarde des valeurs de Kappa*******************%
kappa = strcat (NomRepertoire,'\Kappas_', num2str(V),'.mat');
kappa2 = strcat (NomRepertoire,'\Kappas_', num2str(V),'.txt');
save (kappa, 'Kappas');
save (kappa2, 'Kappas','-ASCII', '-DOUBLE','-TABS');
%***************************************************************%
%************ Calcul des valeurs de Gamma***********************%
Gammas = [];
Gammas = sqrt((Betas(1,:)).^2 - (n_cl * k0)^2);
for i = 2:nu
if nnz(Betas(i,:)) == length(Betas(i,:))
Gammas = [Gammas; sqrt(Betas(i,:).^2 - (n_cl * k0)^2)];
else
Gammas = [Gammas; [zeros(1,length(Betas(i,:)) - nnz(Betas(i,:))), sqrt(nonzeros(Betas(i,:)).^2 - (n_cl * k0)^2)']];
end
end
%************ Sauvegarde des valeurs de Gamma**********************%
gamma = strcat (NomRepertoire,'\Gammas_', num2str(V),'.mat');
gamma2 = strcat (NomRepertoire,'\Gammas_', num2str(V),'.txt');
save (gamma, 'Gammas');
save (gamma2, 'Gammas','-ASCII', '-DOUBLE','-TABS');
%******************************************************************%
ON = ON + 0.02;
end |
Partager