rl_raylib  1.1.10
rl_Multilayer Class Reference

A class encapsulating reflection of a ray from a multilayer surface. More...

#include <rl_Multilayer.h>

Collaboration diagram for rl_Multilayer:

Public Types

typedef rl_Traits::EInterpMode EInterpMode
 interpolation mode for dielectric data
 

Public Member Functions

virtual ~rl_Multilayer ()
 Destructor. More...
 
 rl_Multilayer (int num_layers, rl_DielectricLayer *layers, rl_Traits::Bool adopt_data=rl_Traits::True)
 Construct multilayer from num_layers individual layers. More...
 
void init (int num_layers, rl_DielectricLayer *layers, rl_Traits::Bool adopt_data=rl_Traits::True)
 Initialize multilayer from num_layers individual layers. More...
 
int multilayer_reflect_coef (rl_ReflectionCoefPOD &rfl, double energy, double sg)
 Evaluate the multilayer reflection coefficients. More...
 
int multilayer_reflectivity (double &rfl, double energy, double sg, double polarization_factor=0.0)
 Evaluate the multilayer reflectivity (assuming unpolarized rays) More...
 
rl_DielectricLayer const & layer (int layer_no) const
 
int num_layers () const
 
std::ostream & dump_on (std::ostream &os, int layer_no, char const pre[]="", char const pst[]="") const
 Dump information about layer layer_no to stream os. More...
 
void cdump_on (std::FILE *of, int layer_no, char const pre[]="", char const pst[]="") const
 Dump information about layer layer_no to output FILE*. More...
 

Protected Attributes

int num_layers_
 number of multilayers
 
rl_DielectricLayer vacuum_
 the top (vacuum) layer
 
rl_DielectricLayerlayer_
 array of dielectric layers
 
rl_Traits::Bool own_data_
 do we own the rl_DielectricLayer array?
 

Detailed Description

A class encapsulating reflection of a ray from a multilayer surface.

Given the energy and the sine of the graze angle, reflection coefficient can be evaluated.

Definition at line 60 of file rl_Multilayer.h.

Constructor & Destructor Documentation

◆ ~rl_Multilayer()

rl_Multilayer::~rl_Multilayer ( )
virtual

Destructor.

Frees up rl_DielectricLayer array if own_data_ is rl_Traits::True.

Definition at line 46 of file rl_Multilayer.cc.

◆ rl_Multilayer()

rl_Multilayer::rl_Multilayer ( int  num_layers,
rl_DielectricLayer layers,
rl_Traits::Bool  adopt_data = rl_Traits::True 
)

Construct multilayer from num_layers individual layers.

Parameters
num_layersnumber of layers to construct.
layerspointer to array of layer data
adopt_databoolean flag
  • if rl_Traits::True, rl_Multilayer assumes responsibility for deleting the rl_DielectricLayer array;
  • if rl_Traits::False, it is the caller's responsibility.

Definition at line 53 of file rl_Multilayer.cc.

Member Function Documentation

◆ cdump_on()

void rl_Multilayer::cdump_on ( std::FILE *  of,
int  layer_no,
char const  pre[] = "",
char const  pst[] = "" 
) const

Dump information about layer layer_no to output FILE*.

Parameters
ofoutput FILE*
layer_nolayer number to be dumped
preoptional prefix string
pstoptional postfix string

Definition at line 181 of file rl_Multilayer.cc.

◆ dump_on()

std::ostream & rl_Multilayer::dump_on ( std::ostream &  os,
int  layer_no,
char const  pre[] = "",
char const  pst[] = "" 
) const

Dump information about layer layer_no to stream os.

Returns
reference to stream os.
Parameters
osoutput stream
layer_nolayer number to be dumped
preoptional prefix string
pstoptional postfix string

Definition at line 164 of file rl_Multilayer.cc.

◆ init()

void rl_Multilayer::init ( int  num_layers,
rl_DielectricLayer layers,
rl_Traits::Bool  adopt_data = rl_Traits::True 
)

Initialize multilayer from num_layers individual layers.

Parameters
num_layersnumber of layers to construct.
layerspointer to array of layer data
adopt_databoolean flag
  • if rl_Traits::True, rl_Multilayer assumes responsibility for deleting the rl_DielectricLayer array;
  • if rl_Traits::False, it is the caller's responsibility.

Definition at line 64 of file rl_Multilayer.cc.

◆ layer()

rl_DielectricLayer const & rl_Multilayer::layer ( int  layer_no) const
Returns
const reference to layer layer_no

Definition at line 156 of file rl_Multilayer.cc.

◆ multilayer_reflect_coef()

int rl_Multilayer::multilayer_reflect_coef ( rl_ReflectionCoefPOD rfl,
double  energy,
double  sg 
)

Evaluate the multilayer reflection coefficients.

Returns
0 if successful, the number of the invalid layer if not.
Parameters
rflthe computed reflection coefficient.
energyray energy.
sgsine of the graze angle between the ray and the surface.

Definition at line 90 of file rl_Multilayer.cc.

◆ multilayer_reflectivity()

int rl_Multilayer::multilayer_reflectivity ( double &  rfl,
double  energy,
double  sg,
double  polarization_factor = 0.0 
)

Evaluate the multilayer reflectivity (assuming unpolarized rays)

Returns
0 if successful, the number of the invalid layer if not.
Parameters
rflmultilayer reflectivity.
energyray energy.
sgsine of the graze angle between the ray and the surface.
polarization_factorpolarization factor; it must be a value between -1 and 1. The polarization factor is related to parallel (p) and perpendicular (s) polarization by:

\[ \mathtt{polarization\_factor} = {(I_\perp - I_\parallel) \over (I_\perp + I_\parallel)} \]

or

\[ \mathtt{polarization\_factor} = {(I_\mathit{s} - I_\mathit{p}) \over (I_\mathit{s} + I_\mathit{p})} \]

where $I_\perp$ and $I_\parallel$ are the perpendicular and parallel E-field intensities, respectively. Thus,
  • -1: pure parallel (p) polarization.
  • 0: completely unpolarized.
  • +1: pure perpendicular (s) polarization.

Definition at line 136 of file rl_Multilayer.cc.

◆ num_layers()

int rl_Multilayer::num_layers ( ) const
inline
Returns
number of layers

Definition at line 231 of file rl_Multilayer.h.


The documentation for this class was generated from the following files: