//****************************************************************************** //** SCATMECH: Polarized Light Scattering C++ Class Library //** //** File: transmit.cpp //** //** Thomas A. Germer //** Optical Technology Division, National Institute of Standards and Technology //** 100 Bureau Dr. Stop 8443; Gaithersburg, MD 20899-8443 //** Phone: (301) 975-2876; FAX: (301) 975-6991 //** Email: thomas.germer@nist.gov //** //** Version: 6.00 (February 2008) //** //****************************************************************************** #include "transmit.h" #include "filmtran.h" using namespace std; namespace SCATMECH { MuellerMatrix Transmit_BRDF_Model:: mueller() { synchronize(model); SETUP(); MuellerMatrix result; if (type==0) error("Reflection mode not defined"); if (substrate.k(lambda)!=0) error("Substrate must be non-absorbing."); double thetas_internal = asin(sin(thetas)/substrate.n(lambda)); dielectric_stack ds; MuellerMatrix T = ds.t12(thetas_internal,lambda,substrate,vacuum); T = T*(cos(thetas)/cos(thetas_internal)/cube(substrate.n(lambda))); return T * model->Mueller(thetai,thetas_internal,phis,rotation); } DEFINE_MODEL(Transmit_BRDF_Model, BRDF_Model, "Transmit_BRDF_Model", "Model which evaluates another BRDF_Model in transmission, outside of a material."); DEFINE_PTRPARAMETER(Transmit_BRDF_Model,BRDF_Model_Ptr,model,"The model","Microroughness_BRDF_Model"); } // namespace SCATMECH