www.pudn.com > FDBPM_3D.zip > FDBPM3D_free_space_volume.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 un volumen del haz propagado tal y como se veria en 3-D
close all; % Cierra Ventanas
clear all; % Limpia Variables
clc; % Limpia Pantalla
tic % Comienza Timer
% ---------- Declaracion de Variables -----------------
x1 = -50e-6; % Coordenada Inicial
x2 = 50e-6; % Coordenada Final
num_samples = 64; % 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 el pulso --------
[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
% -------- Generamos la reticula para volumen --------
[xx,yy,zz] = meshgrid (x1:dx:x2-dx,x1:dx:x2-dx,1:1:1000);
volumen = zeros(size(zz));
clear xx yy zz;
% ---------- 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