www.pudn.com > FDBPM_3D.zip > FDBPM3D_free_space.m


% Finite Difference Beam Propagation Method     18 Mayo 2007 
% Edgar Guevara Codina  
% Dispositivos Optoelectronicos  
% Genera un pulso gaussiano en 3D y lo propaga 1500 um a lo largo del eje z 
% Utiliza Diferencias Finitas para resolver la ecuacion parabolica en 3D 
% Mediante el metodo Implicito de Direccion Alternante (ADI) 
% Genera una animacion y la guarda en formato AVI 
 
close all;                          % Cierra Ventanas 
clear all;                          % Limpia Variables 
clc;                                % Limpia Pantalla 
 
% ---------- Declaracion de Variables ----------------- 
x1 = -50e-6;                                % Coordenada Inicial 
x2 = 50e-6;                                 % Coordenada Final 
num_samples = 128;                          % Numero de muestras (potencia de 2) 
dx = (x2-x1)/num_samples;                   % Espaciado de las muestras en x 
dz = 0.25e-6;                               % Incremento en z 
x = linspace (x1, x2-dx, num_samples);      % Dominio espacial (simetrico en x y en y) 
W0 = 8e-6;                                  % Radio de la cintura del pulso 
lambda = 0.8e-6;                            % Longitud de onda 
k0 = 2*pi/lambda;                           % Numero de onda 
 
% -------- Generamos la reticula para graficar --------  
[xx,yy] = meshgrid ([x1:dx:x2-dx],[x1:dx:x2-dx]); 
 
% ------------ Generacion del pulso ------------------- 
modo = exp (-(xx/W0).^2-(yy/W0).^2);    % Pulso Gaussiano en 3D 
 
% ---------- Constantes para metodo ADI ----------------- 
B = j/(2*k0);                       % Constante de difusion 
G = B*dz/(dx^2);                    % Parametro de ganancia 
d = zeros(1,num_samples);           % Terminos Independientes 
 
matrix = zeros(num_samples);        % Inicializa Matriz 
 
% --------- Generacion de la matriz tridiagonal --------- 
for m = 1:1:num_samples, 
    if ((m>1) && (m1) && (lc1) && (ir