[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