function [Ex,Ey,Ez,Hx,Hy,Hz] = guideEH(fo,mod,m,n,a,b,epsr,X,Y,Z,bide)
% Dominic Grenier décembre 2003

tp=sqrt((m/(2*a))^2+(n/(2*b))^2);
betac=tp*2*pi;
vo=3.0e8/epsr;
lambda=vo/fo;
fc=vo*tp;
if nargin>10
    fprintf('Frequence de coupure (GHz)=%6.2f\n',fc/1e9);
end
tq=sqrt(1.0-(lambda*tp)^2);
if isreal(tq)
    betaz=(2*pi/lambda)*tq;
    vpz=vo/tq;
    lambdag=lambda/tq;
    
	if mod==0
   		etag=(120*pi/epsr)/tq;
    	Ez=0*Z;
    	Hz=cos(m*pi*X/a).*cos(n*pi*Y/b).*cos(-betaz*Z);
    	Hx=(betaz/betac^2)*(m*pi/a)*sin(m*pi*X/a).*cos(n*pi*Y/b).*cos(-betaz*Z+pi/2);
        Hy=(betaz/betac^2)*(n*pi/b)*cos(m*pi*X/a).*sin(n*pi*Y/b).*cos(-betaz*Z+pi/2);
        Ex=etag*Hy;
        Ey=-etag*Hx;
 	else
		etag=(120*pi/epsr)*tq;
    	Hz=0*Z;
    	Ez=sin(m*pi*X/a).*sin(n*pi*Y/b).*cos(-betaz*Z);
    	Ex=(betaz/betac^2)*(m*pi/a)*cos(m*pi*X/a).*sin(n*pi*Y/b).*cos(-betaz*Z-pi/2);
    	Ey=(betaz/betac^2)*(n*pi/b)*sin(m*pi*X/a).*cos(n*pi*Y/b).*cos(-betaz*Z-pi/2);
    	Hx=-Ey/etag;
    	Hy=Ex/etag;
    end
else
    disp('Le mode ne se propage pas');
    Ez=[];
    Ex=Ez; Ey=Ez; Hz=Ez; Hx=Ez; Hy=Ez;
end
