[mcstas-users] Supermirror reflectivity calculation

Thierry Bigault bigault at ill.fr
Wed May 20 12:04:30 CEST 2020


Dear McStas users,

First, as I am trying to use some basic components, I think that this 
statement from the McStas component manual (2.6), about the use of the 
analytical reflectivity calculation for mirror and guide devices, is wrong:

"It is important to notice that when m < 1, the reflectivity remains 
constant at R = R0 up to q = Qc, and not m.Qc.
This means that m < 1 parameters behave like m = 1 materials."

If you try the attached file instrument, you will that as expected the 
cut-off wavelength of a simple mirror with 1deg incidence angle, for a 
collimated beam, depends on the m-value of the surface:
- 10 Ang for m=1
- 5 Ang for m=2
- 20 Ang for m=0.5
- 30 Ang for m=0.333
The two last results show that when m<1, the reflectivity falls to 0 
after m.Qc, and not after Qc. This is in contradiction with the 
documentation, but in agreement with what the user would expect (at 
least me...).
I tested here with Mirror.comp, but I observed the same behaviour with 
Guide_gravity.comp, and as I understand all guide components use the 
same routine for calculating the reflectivity.
I may have done something wrong, as I am not experienced with McStas.

Second, I think that the analytical empirical formula for supermirror 
reflectivity sometimes behaves in a strange way:
For a given value of m (e.g. m=2), if one changes Qc to something 
different from the default value, the actual supermirror cut-off also 
changes.
This is not what I would expect. The general convention is that the "m" 
value is defined as Qmax(supermirror)/Qc(natural Nickel), therefore it 
should not depend on another parameter than m.
On the other hand, one can imagine having a material different from 
nickel on the supermirror surface, which would have a different Qc (for 
total reflection).
Therefore it may be useful to change Qc and m, but these should be 
completely independent parameters.
For these reasons, I would suggest to replace the formula used in the 
reflectivity calculation by this one:

R= 1/2*R0*(1 - tanh[(Q-m.QcNi)/W]) (1-alpha* (Q - Qc))

It is the same as today, except that the parameter Qc in the tanh 
function is replaced by the constant QcNi(=0.0217). This makes the 
supermirror cutoff independent from the Qc parameter, which determines 
the range of total reflection but nothing else.
As I understand one can always use a file to model the reflectivity of 
guide faces, but I think it it also nice to have simple analytical 
formula with a clear and predictable behaviour.


Thierry Bigault




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman2.mcstas.org/pipermail/mcstas-users/attachments/20200520/83f1c281/attachment.html>
-------------- next part --------------
/*******************************************************************************
* Instrument: <Mirror_cutoff>
*
* %Identification
*
* author: <Thierry Bigault (bigault at ill.fr)>
* date: 18/05/2020
* version: 1.0
* origin: ILL
*
* %Instrument_site: None
* 
* %Description
* 
* Simple test of components: reflection on supermirrors
*
* %Parameters
* 
*
* %Links 
*  <reference/HTML link>
* 
* %End
*
********************************************************************************/
DEFINE INSTRUMENT Mirror_cutoff()

DECLARE
%{
/* Source wavelength range */
  double longuonde=20.0001;
  double dlonguonde=20;
  
  /* source parameters*/
  double DistSourceGuide = 100;  /* Distance from the source to the mirror */
%}

INITIALIZE
%{
%}

TRACE

COMPONENT origin = Progress_bar()
AT (0, 0, 0) RELATIVE ABSOLUTE

/* Source simple, with a long focusing distance producing a highly collimated beam */
COMPONENT MaSource = Source_simple(
    yheight=.01, 
    xwidth=0.01, 
    dist=DistSourceGuide, 
    focus_xw=0.02,  
    focus_yh=0.02,  
    lambda0=longuonde, 
    dlambda=dlonguonde)
AT (0, 0, 0) RELATIVE PREVIOUS

/* monitor before mirror */
COMPONENT MoniteurEntreeGuide = Monitor_nD(
    xwidth=0.051, 
    yheight=0.2, 
    options="lambda, limits=[0 40] bins=80")
	AT (0, 0, DistSourceGuide) RELATIVE MaSource

/* Mirror with incidence angle 1deg, catching all neutrons.
* Any neutron is either reflected by the mirror, and catched by MoniteurApresMiroirR, 
* or transmitted and catched by MoniteurApresMiroirT
*/
COMPONENT miroir = Mirror(
    xwidth=3, 
    yheight=0.3, 
    R0=1, 
    m=1,         // determines the wavelength cutoff of the mirror
    Qc=0.021,
    alpha=1, 
    center=1, 
    transmit=1
   )  	AT (0, 0, DistSourceGuide+1.5) RELATIVE MaSource
	ROTATED (0, 90-1, 0) RELATIVE MaSource

/* Monitor for transmitted neutrons */
COMPONENT MoniteurApresMiroirT = Monitor_nD(
    xwidth=0.3, 
    yheight=0.8, 
    options="lambda, limits=[0. 40] bins=80")
	AT (0, 0, 2*DistSourceGuide+4) RELATIVE MaSource

/* Monitor for reflected neutrons */
COMPONENT MoniteurApresMiroirR = Monitor_nD(
    xwidth=0.3, 
    yheight=0.8, 
    options="lambda, limits=[0. 40] bins=80")
	AT (-0.300/2-0.026, 0, 1* DistSourceGuide+3.1) RELATIVE MaSource

FINALLY
%{
%}

END



More information about the mcstas-users mailing list