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-rheedwebsite.Move to
sim-trhepd-rheed/srcfolder and makebulk.exeandsurf.exeby 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_curveFormat: boolean (default: false)
Description: Whether to generate
RockingCurve_calculated.txt. Iftrue,RockingCurve_calculated.txtwill be generated in the working directoryLog%%%_###. Note that ifremove_work_dir(in [post] subsection) istrue,Log%%%_###will be removed.
[solver.config] subsection¶
surface_exec_fileFormat: string (default: “surf.exe”)
Description: Path to
sim-trhepd-rheedsurface reflection solversurf.exe.surface_input_fileFormat: string (default: “surf.txt”)
Description: Input file for surface structure.
bulk_output_fileFormat: string (default: “bulkP.b”)
Description: Output file for bulk structure.
surface_output_fileFormat: string (default: “surf-bulkP.s”)
Description: Output file for surface structure.
calculated_first_lineFormat: 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_lineFormat: 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_numberFormat: 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_typeFormat: 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\)).
normalizationFormat: 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_numbershould be one).
“MANY_BEAM”
To normalize with weights as specified by
weight_type.
NOTE: “MAX” is no longer available
weight_typeFormat: 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_weightFormat: list of float (mandatory when
weight_typeis “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\).
omegaFormat: float (default: 0.5)
Description: This parameter specifies the half-width of convolution.
remove_work_dirFormat: boolean (default: false)
Description: Whether to remove working directories
Log%%%_###after reading R-factor or not
[solver.param] subsection¶
string_listFormat: 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¶
pathFormat: string (default:
experiment.txt)Description: Path to the reference data file.
reference_first_lineFormat: 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_lineFormat: 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_numberFormat: 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
...