#include #include // Exact Fresnel Function // Qz - current wave vector // Qc - critical wave vector // mu - absorption coefficient // lambda - x-ray wave length double Rf(double,double,double,double); double Rf(double Qz,double Qc,double mu,double lambda) { double res,pp,pm,ac,ai,p,m; if(lambda<=0.0) return(1.0); if(Qz<0.0) return(1.0); //Calculates critical angle ac=asin(Qc/(4.0*pi/lambda)); //Calculates angle ai=asin(Qz*lambda/(4.0*pi)); m=lambda*mu/(2.0*pi); p=ai*ai-ac*ac; pp=0.5*(sqrt(p*p+m*m/(4.0*pi*pi))+p); pp=sqrt(pp); pm=0.5*(sqrt(p*p+m*m/(4.0*pi*pi))-p); res=((ai-pp)*(ai-pp)+pm*pm)/((ai+pp)*(ai+pp)+pm*pm); return(res); }