Message: Re: Is it possible to set reflectivity of an optical surface dependent on the angle of incidence of an optical photon? Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

None Re: Is it possible to set reflectivity of an optical surface dependent on the angle of incidence of an optical photon? 

Forum: Processes Involving Optical Photons
Re: Question Is it possible to set reflectivity of an optical surface dependent on the angle of incidence of an optical photon? (Maarten van Dijk)
Date: 18 Jul, 2014
From: Maarten van Dijk <Maarten van Dijk>

Hi Peter,

Five months after my initial posting I have finally taken the time to make the changes. Apologies for taking so long, but better late than never :)

First off, a small correction. I actually misinterpreted the angular notation in the TIPP proceedings I've quoted in my first message - the angle theta is the angle with the surface normal, as conventional in Geant, so that did not require any adaptation.

I have implemented it as follows. The only files I have ended up editing is the G4OpBoundaryProcess.cc and .hh (adding a variable for the surface roughness).

I have added a ConstProperty to the MaterialPropertiesTable (MPT) of my surface, which I have unimaginatively dubbed "SURFACEROUGHNESS". In the constructor I retrieve this information from the MPT and store it.

The actual added code is in the G4OpBoundaryProcess::DielectricDielectric() method since this is the only surface for which this is a relevant description. I chose to only consider the extra condition if it is going from a high index medium to a low index medium - if the SurfaceRoughness is defined.

G4bool SurfaceRoughnessCriterionPass = 1;
if(theSurfaceroughness != 0. && Rindex1 > Rindex2)
	{
		G4double wavelength = h_Planck*c_light/thePhotonMomentum;
		G4double SurfaceRoughnessCriterion = exp(-pow((4*pi*theSurfaceroughness*Rindex1*cost1/wavelength),2));
		SurfaceRoughnessCriterionPass = G4BooleanRand(SurfaceRoughnessCriterion);
	}

This is at the very beginning of the DielDiel code (before the line with leap:) so that it is only calculated once. I have done my best to decipher what was going on with the Swap, Through and Inside parameters but even after several attempts to understand this I still failed to. Some extra info on this would be appreciated - I have made some changes (details below) - since I'm not quite sure how the looping goes (and why, or how often) I am not sure that the adaptations I made do not get applied a number of times instead of just once, as intended.

The place where I apply the SurfaceRoughnessCriterion is at two places. The first is when a photon is totally internally reflected. The second is when it is Fresnel reflected. I have left the photons that refract out of the high density medium as they are.

The SurfaceRoughnessCriterion should be a number close to 1 for the sort of surface roughness that is relevant to our work (~1-50 angstrom) - also see the presentation linked in my first message. It also works for higher surface roughness, but the approximation chosen here is only valid if the surface roughness is much smaller than the wavelength of the light involved.

If the SurfaceRougnessCriterionPass gets set to 0, and the photon gets either TIR or Fresnel Reflection, theStatus gets set to LambertianReflection. Note that because of this choice this will get overridden if theModel == unified and theFinish != polished because of the lines shortly thereafter.

Do you see any fundamental problems with the way I have implemented this? I have done my best to keep it as general as possible. I'm not sure if this is something other people would be interested in having available as well, but if so I'd be happy to further document the changes and the underlying references.

 Add Message Add Message
to: "Re: Is it possible to set reflectivity of an optical surface dependent on the angle of incidence of an optical photon?"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews