|
|
|||
File indexing completed on 2026-11-07 10:11:39
0001 //------------------------------- -*- C++ -*- -------------------------------// 0002 // Copyright Celeritas contributors: see top-level COPYRIGHT file for details 0003 // SPDX-License-Identifier: (Apache-2.0 OR MIT) 0004 //---------------------------------------------------------------------------// 0005 //! \file celeritas/optical/surface/model/DielectricInteractionModel.hh 0006 //---------------------------------------------------------------------------// 0007 #pragma once 0008 0009 #include "corecel/data/ParamsDataStore.hh" 0010 #include "celeritas/inp/OpticalPhysics.hh" 0011 #include "celeritas/optical/surface/SurfaceModel.hh" 0012 0013 #include "DielectricInteractionData.hh" 0014 0015 namespace celeritas 0016 { 0017 namespace optical 0018 { 0019 //---------------------------------------------------------------------------// 0020 /*! 0021 * Interaction model for analytic dielectric-dielectric and dielectric-metal 0022 * surface interactions. 0023 * 0024 * Uses the refractive indices of two materials in Fresnel equations to 0025 * determine the reflectivity of a photon incident on the physical surface. The 0026 * reflectivity is sampled to determine whether the photon refracts into the 0027 * next material or reflects. Reflection follows the UNIFIED model (see \c 0028 * ReflectionFormSampler). Refracted waves fall into two cases: 0029 * 0030 * 1. dielectric-metal: the photon is immediately absorbed. 0031 * 2. dielectric-dielectric: refracted direction and polarization are 0032 * calculate from Fresnel equations. 0033 */ 0034 class DielectricInteractionModel : public SurfaceModel 0035 { 0036 public: 0037 //!@{ 0038 //! \name Type aliases 0039 using InputT = inp::DielectricInteraction; 0040 //!@} 0041 0042 public: 0043 // Construct the model from an ID and layer map 0044 DielectricInteractionModel(SurfaceModelId, 0045 std::map<PhysSurfaceId, InputT> const&); 0046 0047 //! Get the list of physical surfaces this model applies to 0048 VecSurfaceLayer const& get_surfaces() const final { return surfaces_; } 0049 0050 // Execute the model with host data 0051 void step(CoreParams const&, CoreStateHost&) const final; 0052 0053 // Execute the model with device data 0054 void step(CoreParams const&, CoreStateDevice&) const final; 0055 0056 private: 0057 VecSurfaceLayer surfaces_; 0058 ParamsDataStore<DielectricData> dielectric_data_; 0059 ParamsDataStore<UnifiedReflectionData> reflection_data_; 0060 }; 0061 0062 //---------------------------------------------------------------------------// 0063 } // namespace optical 0064 } // namespace celeritas
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|