sim-trhepd-rheed
solver¶
sim-trhepd-rheed
is a Solver
that uses sim-trhepd-rheed to calculate the diffraction rocking curve from the atomic position \(x\) and returns the deviation from the experimental rocking curve as \(f(x)\).
Preparation¶
You will need to install sim-trhepd-rheed beforehand.
Download the source code from the official
sim-trhepd-rheed
website.Move to
sim-trhepd-rheed/src
folder and makebulk.exe
andsurf.exe
by usingmake
.
Before running py2dmat
, run bulk.exe
to create the bulk data.
The surf.exe
is called from py2dmat
.
Input parameters¶
Input parameters can be specified in subsections config
, post
, param
, reference
in solver
section.
[solver
] section¶
generate_rocking_curve
Format: boolean (default: false)
Description: Whether to generate
RockingCurve_calculated.txt
. Iftrue
,RockingCurve_calculated.txt
will be generated in the working directoryLog%%%_###
. Note that ifremove_work_dir
(in [post
] subsection) istrue
,Log%%%_###
will be removed.
[solver.config
] subsection¶
surface_exec_file
Format: string (default: “surf.exe”)
Description: Path to
sim-trhepd-rheed
surface reflection solversurf.exe
.surface_input_file
Format: string (default: “surf.txt”)
Description: Input file for surface structure.
bulk_output_file
Format: string (default: “bulkP.b”)
Description: Output file for bulk structure.
surface_output_file
Format: string (default: “surf-bulkP.s”)
Description: Output file for surface structure.
calculated_first_line
Format: integer (default: 5)
Description: In the output file, the first line to be read as D(x). The last line is automatically calculated from the number of the reference data.
calculated_info_line
Format: integer (default: 2)
Description: In the output file, the line contains the information of the calculated data – the number of glancing angles (second column) and the number of beams (third column).
cal_number
Format: Integer or List of integers
Description: In the output file, the columns to be read as D(x). Multiple columns can be specified (many-beam condition).
[solver.post
] subsection¶
This subsection is used to the postprocess – to specify how to calculate the objective function, that is, the deviation between the experimental and computational data, and to draw the rocking curve.
Rfactor_type
Format: string (“A” or “B”, default: “A”)
Description: This parameter specifies how to calculate the R-factor to be minimized. Let \(n\) be the number of dataset, \(m\) be the number of glancing angles, and \(v^{(n)} = (v^{(n)}_{1}, v^{(n)}_{2}, \dots ,v^{(n)}_{m})\) be the calculated data. With the weights of the beams, \(w^{(j)}\), R-factors is defined as follows:
“A” type:
\[R = \sqrt{ \sum_{j}^{n} w^{(j)} \sum_{i}^{m} \left(u^{(j)}_{i}-v^{(j)}_{i}\right)^{2} }\]“A2” type:
\[R^{2} = \sum_{j}^{n} w^{(j)} \sum_{i}^{m} \left(u^{(j)}_{i}-v^{(j)}_{i}\right)^{2}\]“B” type:
\[R = \frac{\sum_{i}^{m} \left(u^{(1)}_{i}-v^{(1)}_{i}\right)^{2}}{\sum_{i}^{m} \left(u^{(1)}_{i}\right)^{2} + \sum_{i}^{m} (v^{(1)}_{i})^2}\]“B” type is available only for the single dataset (\(n=1\)).
normalization
Format: string (“TOTAL” or “MANY_BEAM”)
Description: This parameter specifies how to normalize the experimental and computational data vectors.
“TOTAL”
To normalize the data as the summation is 1.
The number of dataset should be one (the number of
cal_number
should be one).
“MANY_BEAM”
To normalize with weights as specified by
weight_type
.
NOTE: “MAX” is no longer available
weight_type
Format: string or
None
. “calc” or “manual” (default:None
)Description: The weights of the datasets for the “MANY_BEAM” normalization.
“calc”
\[w^{(n)} = \left(\frac{\sum_i^m v^{(n)}_{i}}{\sum_j^n \sum_i^m v^{(j)}_i} \right)^2\]“manual”
\(w^{(n)}\) is specified by
spot_weight
.spot_weight
Format: list of float (mandatory when
weight_type
is “manual”)Description: The weights of the beams in the calculation of R-factor. The weights are automatically normalized as the sum be 1. For example, [3,2,1] means \(w^{(1)}=1/2, w^{(2)}=1/3, w^{(3)}=1/6\).
omega
Format: float (default: 0.5)
Description: This parameter specifies the half-width of convolution.
remove_work_dir
Format: boolean (default: false)
Description: Whether to remove working directories
Log%%%_###
after reading R-factor or not
[solver.param
] subsection¶
string_list
Format: list of string. The length should match the value of dimension (default: [“value_01”, “value_02”]).
Description: List of placeholders to be used in the reference template file to create the input file for the solver. These strings will be replaced with the values of the parameters being searched for.
[solver.reference
] subsection¶
path
Format: string (default:
experiment.txt
)Description: Path to the reference data file.
reference_first_line
Format: integer
Description: In the reference data file, the first line to be read as Dexp. The default value is 1, that is, the first line of the file.
reference_last_line
Format: integer
Description: In the reference data file, the last line to be read as Dexp. If omitted, all lines from the first line to the end of the file will be read.
exp_number
Format: Integer or List of integers
Description: In the reference data file, the column numbers to be read. Multiple columns can be specified (many-beam condition).
Reference file¶
Input template file¶
The input template file template.txt
is a template for creating an input file for surf.exe
.
The parameters to be moved in py2dmat
(such as the atomic coordinates you want to find) should be replaced with the appropriate string, such as value_*
.
The strings to be used are specified by string_list
in the [solver]
- [param]
section of the input file for the solver.
An example template is shown below.
2 ,NELMS, -------- Ge(001)-c4x2
32,1.0,0.1 ,Ge Z,da1,sap
0.6,0.6,0.6 ,BH(I),BK(I),BZ(I)
32,1.0,0.1 ,Ge Z,da1,sap
0.4,0.4,0.4 ,BH(I),BK(I),BZ(I)
9,4,0,0,2, 2.0,-0.5,0.5 ,NSGS,msa,msb,nsa,nsb,dthick,DXS,DYS
8 ,NATM
1, 1.0, 1.34502591 1 value_01 ,IELM(I),ocr(I),X(I),Y(I),Z(I)
1, 1.0, 0.752457792 1 value_02
2, 1.0, 1.480003343 1.465005851 value_03
2, 1.0, 2 1.497500418 2.281675
2, 1.0, 1 1.5 1.991675
2, 1.0, 0 1 0.847225
2, 1.0, 2 1 0.807225
2, 1.0, 1.009998328 1 0.597225
1,1 ,(WDOM,I=1,NDOM)
In this case, value_01
, value_02
, and value_03
are the parameters to be moved in py2dmat
.
Target file¶
This file (experiment.txt
) contains the data to be targeted.
The first column contains the angle, and the second and following columns contain the calculated value of the reflection intensity multiplied by the weight.
An example of the file is shown below.
3.00000e-01 8.17149e-03 1.03057e-05 8.88164e-15 ...
4.00000e-01 1.13871e-02 4.01611e-05 2.23952e-13 ...
5.00000e-01 1.44044e-02 1.29668e-04 4.53633e-12 ...
6.00000e-01 1.68659e-02 3.49471e-04 7.38656e-11 ...
7.00000e-01 1.85375e-02 7.93037e-04 9.67719e-10 ...
8.00000e-01 1.93113e-02 1.52987e-03 1.02117e-08 ...
9.00000e-01 1.92590e-02 2.53448e-03 8.69136e-08 ...
1.00000e+00 1.86780e-02 3.64176e-03 5.97661e-07 ...
1.10000e+00 1.80255e-02 4.57932e-03 3.32760e-06 ...
1.20000e+00 1.77339e-02 5.07634e-03 1.50410e-05 ...
1.30000e+00 1.80264e-02 4.99008e-03 5.53791e-05 ...
...
Output file¶
For sim-trhepd-rheed
, the files output by surf.exe
will be output in the Log%%%%%_#####
folder under the folder with the rank number.
%%%%%
means an index of iteration in Algorithm
(e.g., steps in Monte Carlo),
and #####
means an index of group (e.g., replica index in Monte Carlo).
In large calculation, the number of these folders becomes too large to be written in the storage of the system.
For such a case, let solver.post.remove_work_dir
parameter be true
in order to remove these folders.
This section describes the own files that are output by this solver.
stdout
¶
It contains the standard output of surf.exe
.
An example is shown below.
bulk-filename (end=e) ? :
bulkP.b
structure-filename (end=e) ? :
surf.txt
output-filename :
surf-bulkP.s
RockingCurve_calculated.txt
¶
This file is located in the Log%%%%%_#####
folder.
At the beginning of the file, the lines beginning with #
are headers.
The header contains the values of the input variables, the objective function value f(x)
, the parameters Rfactor_type
, normalization
, weight_type
, cal_number
, spot_weight
, and what is marked in the data portion columns (e.g. # #0 glancing_angle
).
The header is followed by the data. The first column shows the glancing angle, and the second and subsequent columns show the intensity of each data column. You can see which data columns are marked in the header. For example,
# #0 glancing_angle
# #1 cal_number=1
# #2 cal_number=2
# #3 cal_number=4
shows that the first column is the glancing angle, and the second, third, and fourth columns are the calculated data corresponding to the first, second, and fourth columns of the calculated data file, respectively.
Intencities in each column are normalized so that the sum of the intensity is 1.
To calculate the objective function value (R-factor and R-factor squared), the data columns are weighted by spot_weight
and normalized by normalization
.
#value_01 = 0.00000 value_02 = 0.00000
#Rfactor_type = A
#normalization = MANY_BEAM
#weight_type = manual
#fx(x) = 0.03686180462340505
#cal_number = [1, 2, 4, 6, 8]
#spot_weight = [0.933 0.026 0.036 0.003 0.002]
#NOTICE : Intensities are NOT multiplied by spot_weight.
#The intensity I_(spot) for each spot is normalized as in the following equation.
#sum( I_(spot) ) = 1
#
# #0 glancing_angle
# #1 cal_number=1
# #2 cal_number=2
# #3 cal_number=4
# #4 cal_number=6
# #5 cal_number=8
0.30000 1.278160358686800e-02 1.378767858296659e-04 8.396046839668212e-14 1.342648818357391e-30 6.697979700048016e-53
0.40000 1.778953628930054e-02 5.281839702773564e-04 2.108814173486245e-12 2.467220122612354e-28 7.252675318478533e-50
0.50000 2.247181148723425e-02 1.671115124520428e-03 4.250758278908295e-11 3.632860054842994e-26 6.291667506376419e-47
...