crysna 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/CHANGES +24 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +91 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/bin/checkmodel +66 -0
- data/bin/collectcell +92 -0
- data/bin/fitframe +68 -0
- data/bin/occupiedpolyhedralsite +96 -0
- data/bin/occupiedscattersite +77 -0
- data/bin/site2poscar +66 -0
- data/bin/site2pov +30 -0
- data/bin/sitecombination +69 -0
- data/bin/sitemigration +80 -0
- data/bin/sitemigrationdistance +87 -0
- data/bin/siteoperation +109 -0
- data/bin/sitesingle +36 -0
- data/bin/siteuniq +32 -0
- data/bin/symidsite +65 -0
- data/bin/transitcell +46 -0
- data/crysna.gemspec +219 -0
- data/lib/crysna.rb +26 -0
- data/lib/crysna/atom.rb +97 -0
- data/lib/crysna/cell.rb +314 -0
- data/lib/crysna/frameatom.rb +13 -0
- data/lib/crysna/frameinterstitialcell.rb +309 -0
- data/lib/crysna/interstitialatom.rb +13 -0
- data/lib/crysna/modelstructure.rb +333 -0
- data/lib/crysna/optionmanager.rb +177 -0
- data/lib/crysna/site.rb +35 -0
- data/lib/crysna/siteconfiguration.rb +26 -0
- data/lib/crysna/sitenamelabeledcell.rb +220 -0
- data/lib/crysna/siteoperation.rb +56 -0
- data/lib/crysna/sitewithposition.rb +24 -0
- data/lib/crysna/transitionfinder.rb +448 -0
- data/lib/crysna/transitionfinder/cell.rb +144 -0
- data/lib/crysna/transitionfinder/cellmanager.rb +129 -0
- data/lib/crysna/transitionfinder/edge.rb +54 -0
- data/test/.gitignore +1 -0
- data/test/cell_orig/POSCAR +17 -0
- data/test/cell_orig/model.yaml +122 -0
- data/test/collectcells/.gitignore +2 -0
- data/test/collectcells/model.yaml +154 -0
- data/test/collectcells/nooutcar/minexpconfiguration.yaml +22 -0
- data/test/collectcells/normal-higher/OUTCAR +2406 -0
- data/test/collectcells/normal-higher/minexpconfiguration.yaml +22 -0
- data/test/collectcells/normal-lower/OUTCAR +2406 -0
- data/test/collectcells/normal-lower/minexpconfiguration.yaml +22 -0
- data/test/collectcells/normal/OUTCAR +2406 -0
- data/test/collectcells/normal/minexpconfiguration.yaml +22 -0
- data/test/collectcells/normalB/OUTCAR +2406 -0
- data/test/collectcells/normalB/minexpconfiguration.yaml +22 -0
- data/test/collectcells/unfinished/OUTCAR +40702 -0
- data/test/collectcells/unfinished/minexpconfiguration.yaml +22 -0
- data/test/collectcells/unidentified/OUTCAR +3541 -0
- data/test/collectcells/unidentified/minexpconfiguration.yaml +2 -0
- data/test/fitmodelstructure/.gitignore +1 -0
- data/test/fitmodelstructure/AgI/CONTCAR +17 -0
- data/test/fitmodelstructure/AgI/fitmodelstructure.log +1161 -0
- data/test/fitmodelstructure/AgI/model.yaml +45 -0
- data/test/fitmodelstructure/normal/CONTCAR +17 -0
- data/test/fitmodelstructure/normal/fitmodelstructure.log +5063 -0
- data/test/fitmodelstructure/normal/model.yaml +122 -0
- data/test/fitmodelstructure/unidentified/CONTCAR +44 -0
- data/test/fitmodelstructure/unidentified/fitmodelstructure.log +8833 -0
- data/test/fitmodelstructure/unidentified/model.yaml +154 -0
- data/test/helper.rb +17 -0
- data/test/identifypolyhedralsites/.gitignore +1 -0
- data/test/identifypolyhedralsites/identifyatomsites.log +333 -0
- data/test/identifypolyhedralsites/normal/fitmodelstructure.yaml +60 -0
- data/test/identifypolyhedralsites/normal/model.yaml +122 -0
- data/test/identifypolyhedralsites/unidentified/fitmodelstructure.yaml +2 -0
- data/test/identifypolyhedralsites/unidentified/model.yaml +154 -0
- data/test/identifypolyhedralsites/volumemismatch/fitmodelstructure.yaml +101 -0
- data/test/identifypolyhedralsites/volumemismatch/model.yaml +154 -0
- data/test/identifyscattersites/CONTCAR +17 -0
- data/test/identifyscattersites/POSCAR +12 -0
- data/test/identifyscattersites/fitmodelstructure.log +1 -0
- data/test/identifyscattersites/fitmodelstructure.yaml +0 -0
- data/test/identifyscattersites/identifyscattersites.yaml +5 -0
- data/test/identifyscattersites/model.yaml +45 -0
- data/test/minexpconfiguration/.gitignore +1 -0
- data/test/minexpconfiguration/collective/AgI/.gitignore +2 -0
- data/test/minexpconfiguration/collective/AgI/siteoperations.yaml +51265 -0
- data/test/minexpconfiguration/collective/AgI/sitesingle.yaml +15 -0
- data/test/minexpconfiguration/collective/AgI/test.sh +2 -0
- data/test/minexpconfiguration/normal/identifysites.yaml +22 -0
- data/test/minexpconfiguration/normal/minexpconfiguration.log +0 -0
- data/test/minexpconfiguration/normal/siteoperations.yaml +1793 -0
- data/test/minexpconfiguration/unidentified/identifysites.yaml +2 -0
- data/test/minexpconfiguration/unidentified/siteoperations.yaml +1793 -0
- data/test/sitecombination/initsites.yaml +7 -0
- data/test/sitecombination/initsites_test2.yaml +8 -0
- data/test/sitecombination/sitecombination.yaml +29 -0
- data/test/siteconfiguration/elements-sitenames.yaml +2 -0
- data/test/siteconfiguration/latticeaxes.yaml +3 -0
- data/test/siteconfiguration/sitenames-coordinates.yaml +4 -0
- data/test/sitemigrationsdistance/model.yaml +45 -0
- data/test/siteoperations/.gitignore +2 -0
- data/test/siteoperations/model.yaml +43 -0
- data/test/siteoperations/symmetryoperations.yaml +1441 -0
- data/test/sitesingle/.gitignore +1 -0
- data/test/sitesingle/sitecombination.yaml +29 -0
- data/test/siteuniq/minexpconfiguration.yaml +15 -0
- data/test/siteuniq/siteuniq.yaml +8 -0
- data/test/test_atom.rb +206 -0
- data/test/test_cell.rb +604 -0
- data/test/test_commands.rb +340 -0
- data/test/test_crystana.rb +7 -0
- data/test/test_frameatom.rb +22 -0
- data/test/test_frameinterstitialcell.rb +939 -0
- data/test/test_interstitialatom.rb +22 -0
- data/test/test_modelstructure.rb +807 -0
- data/test/test_optionmanager.rb +172 -0
- data/test/test_site.rb +40 -0
- data/test/test_siteconfiguration.rb +29 -0
- data/test/test_sitenamelabeledcell.rb +528 -0
- data/test/test_siteoperation.rb +79 -0
- data/test/test_sitewithposition.rb +20 -0
- data/test/test_transitionfinder.rb +432 -0
- data/test/transitcell/.gitignore +2 -0
- data/test/transitcell/collectcells.yaml +51 -0
- data/test/transitcell/sitemigrations.yaml +8 -0
- data/test/transitcell/siteoperations.yaml +17 -0
- data/test/transitcell/transitcell.log +1342 -0
- data/test/transitionfinder/collectcells.yaml +81 -0
- data/test/transitionfinder/sitemigrations.yaml +33 -0
- data/test/transitionfinder/siteoperations.yaml +16 -0
- data/test/transitionfinder/test_cell.rb +287 -0
- data/test/transitionfinder/test_cellmanager.rb +185 -0
- data/test/transitionfinder/test_edge.rb +49 -0
- data/test/uniquesitesgenerator/elements-sitenames.yaml +1 -0
- data/test/uniquesitesgenerator/siteoperations.yaml +9 -0
- metadata +406 -0
@@ -0,0 +1,144 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
class Crysna::TransitionFinder::Cell < Crysna::Cell
|
5
|
+
|
6
|
+
#@from_edges of a start cell must be set to be []
|
7
|
+
attr_reader :from_edges
|
8
|
+
attr_reader :reach_flag
|
9
|
+
attr_reader :atoms
|
10
|
+
attr_accessor :name
|
11
|
+
attr_accessor :energy
|
12
|
+
|
13
|
+
class RangeError < Exception; end
|
14
|
+
|
15
|
+
def initialize(sites, energy = nil, name = "")
|
16
|
+
super(sites)
|
17
|
+
@energy = energy
|
18
|
+
@reach_flag = false
|
19
|
+
@from_edges = [] # include Edge.
|
20
|
+
@name = name
|
21
|
+
end
|
22
|
+
|
23
|
+
def ==(other)
|
24
|
+
result = true
|
25
|
+
result = false if @atoms != other.atoms
|
26
|
+
result = false if @energy != other.energy
|
27
|
+
result = false if @reach_flag != other.reach_flag
|
28
|
+
result = false if @from_edges != other.from_edges
|
29
|
+
result = false if @name != other.name
|
30
|
+
return result
|
31
|
+
end
|
32
|
+
|
33
|
+
def same_atoms?(other)
|
34
|
+
return @atoms == other.atoms
|
35
|
+
end
|
36
|
+
|
37
|
+
def same_sites?(other)
|
38
|
+
result = true
|
39
|
+
@atoms.size.times do |index|
|
40
|
+
if @atoms[index].site.name != other.atoms[index].site.name
|
41
|
+
result = false
|
42
|
+
break
|
43
|
+
end
|
44
|
+
end
|
45
|
+
return result
|
46
|
+
end
|
47
|
+
|
48
|
+
#Migrate atom of index to site and in the cell
|
49
|
+
#which is neighboring with the direction of global_vector.
|
50
|
+
#Generating new cell which is not reached.
|
51
|
+
#This method does not raise error even when destination site
|
52
|
+
#is already occupied,
|
53
|
+
#then, there are two atoms in the site.
|
54
|
+
def migrate!(index, site, global_vector, io = File.open(File::NULL, "w"))
|
55
|
+
io.puts "##{self.class}.migrate!(#{index}, #{site}, #{global_vector}"
|
56
|
+
raise RangeError if index >= atoms.size
|
57
|
+
|
58
|
+
atoms #sort
|
59
|
+
@atoms[index].migrate!(site, global_vector)
|
60
|
+
io.puts "Atoms after migration:"
|
61
|
+
@atoms.each do |atom|
|
62
|
+
io.puts "#{atom.element}, #{atom.site.name}, #{atom.site.global_vector}"
|
63
|
+
end
|
64
|
+
|
65
|
+
@atoms.sort!
|
66
|
+
io.puts "Atoms after sort:"
|
67
|
+
@atoms.each do |atom|
|
68
|
+
io.puts "#{atom.element}, #{atom.site.name}, #{atom.site.global_vector}"
|
69
|
+
end
|
70
|
+
reset
|
71
|
+
end
|
72
|
+
|
73
|
+
#Not-destructive method of migrate!()
|
74
|
+
def migrate(index, site, global_vector)
|
75
|
+
result = Marshal.load(Marshal.dump(self))
|
76
|
+
result.migrate!(index, site, global_vector)
|
77
|
+
result
|
78
|
+
end
|
79
|
+
|
80
|
+
#Set reach flag to be true.
|
81
|
+
#'edge' is the one between cells of already reached cell and self.
|
82
|
+
def reach(edge)
|
83
|
+
@reach_flag = true
|
84
|
+
@from_edges << edge
|
85
|
+
end
|
86
|
+
|
87
|
+
#Return true if already reached.
|
88
|
+
def reach?
|
89
|
+
return @reach_flag
|
90
|
+
end
|
91
|
+
|
92
|
+
#Return true if all sites correspond to those of the other.
|
93
|
+
#It is ok even if global vector is different.
|
94
|
+
def periodically_equal?(other)
|
95
|
+
self.atoms.sort.map{|atom| atom.site.name} == other.atoms.sort.map{|atom| atom.site.name}
|
96
|
+
end
|
97
|
+
|
98
|
+
def occupied_sitename
|
99
|
+
result = ''
|
100
|
+
result += atoms.map do |atom|
|
101
|
+
periodic_num = ''
|
102
|
+
atom.site.global_vector.each do |i|
|
103
|
+
periodic_num += (i + 5).to_s
|
104
|
+
end
|
105
|
+
atom.site.name + periodic_num
|
106
|
+
end . join "-"
|
107
|
+
result
|
108
|
+
end
|
109
|
+
|
110
|
+
def inspect_short
|
111
|
+
result = "#{self.class}: "
|
112
|
+
result += occupied_sitename
|
113
|
+
#result += '-'
|
114
|
+
result += ", @energy = #{@energy}"
|
115
|
+
result += ", @reach_flag = #{@reach_flag}"
|
116
|
+
result += ", @from_edges = #{@from_edges}"
|
117
|
+
result += ", @name = \"#{@name}\""
|
118
|
+
return result
|
119
|
+
end
|
120
|
+
|
121
|
+
#def inspect
|
122
|
+
# result =
|
123
|
+
# to_s
|
124
|
+
#end
|
125
|
+
#
|
126
|
+
|
127
|
+
def operate(operation)
|
128
|
+
result = super(operation)
|
129
|
+
result.energy = @energy
|
130
|
+
return result
|
131
|
+
end
|
132
|
+
|
133
|
+
private
|
134
|
+
|
135
|
+
#Reset information of reach and edge.
|
136
|
+
#(@reach_flag and @from_edges)
|
137
|
+
def reset
|
138
|
+
@reach_flag = false
|
139
|
+
@from_edges = []
|
140
|
+
@name = nil
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
|
@@ -0,0 +1,129 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
#
|
5
|
+
#
|
6
|
+
#
|
7
|
+
class Crysna::TransitionFinder::CellManager
|
8
|
+
|
9
|
+
attr_reader :cells
|
10
|
+
|
11
|
+
#
|
12
|
+
def initialize
|
13
|
+
@cells = []
|
14
|
+
end
|
15
|
+
|
16
|
+
#Add entry of cell as node.
|
17
|
+
#Return index of the name.
|
18
|
+
#If the cell is already added, do nothing and return the same cell.
|
19
|
+
def add(cell)
|
20
|
+
#index = @cells.find {|tgt_cell| cell == tgt_cell}
|
21
|
+
index = index_same_atoms cell
|
22
|
+
if index
|
23
|
+
return index
|
24
|
+
else
|
25
|
+
@cells << cell
|
26
|
+
return @cells.size - 1
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
#Return a cell of index.
|
31
|
+
def [](nth)
|
32
|
+
@cells[nth]
|
33
|
+
end
|
34
|
+
|
35
|
+
#Return index of the cell in CellManager instance.
|
36
|
+
def index_same_atoms(cell)
|
37
|
+
#@cells.index(cell)
|
38
|
+
|
39
|
+
result = nil
|
40
|
+
@cells.each_with_index do |tmp_cell, id|
|
41
|
+
if cell.same_atoms?(tmp_cell)
|
42
|
+
result = id
|
43
|
+
break
|
44
|
+
end
|
45
|
+
end
|
46
|
+
return result
|
47
|
+
end
|
48
|
+
|
49
|
+
#Return index of the cell with the same site in CellManager instance.
|
50
|
+
def index_same_sites(cell)
|
51
|
+
result = nil
|
52
|
+
@cells.each_with_index do |tmp_cell, id|
|
53
|
+
if cell.same_sites?(tmp_cell)
|
54
|
+
result = id
|
55
|
+
break
|
56
|
+
end
|
57
|
+
end
|
58
|
+
return result
|
59
|
+
end
|
60
|
+
|
61
|
+
#Set reach flag to the cell of 'dst_cell_index'.
|
62
|
+
#'edge' is added into '@from_edges' of the cell.
|
63
|
+
#'nil' data is available for 'edge'. (E.g., starting cell.)
|
64
|
+
def reach(dest_cell_index, edge)
|
65
|
+
@cells[dest_cell_index].reach(edge)
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
#Return a two-dimensional array,
|
70
|
+
#whose items are indices of the cells of groups of identical nodes
|
71
|
+
#among reached cells.
|
72
|
+
def periodically_shift_indices
|
73
|
+
results = []
|
74
|
+
@cells.each_with_index do |cell, c_index|
|
75
|
+
next unless cell.reach?
|
76
|
+
entering_index = results.size
|
77
|
+
results.each_with_index do |group, g_index|
|
78
|
+
if @cells[group[0]].periodically_equal? cell
|
79
|
+
entering_index = g_index
|
80
|
+
break
|
81
|
+
end
|
82
|
+
end
|
83
|
+
results[entering_index] ||= []
|
84
|
+
results[entering_index] << c_index
|
85
|
+
end
|
86
|
+
return results
|
87
|
+
end
|
88
|
+
|
89
|
+
def contain_periodically_shift_cells?
|
90
|
+
if periodically_shift_indices.find {|i| i.size > 1}
|
91
|
+
return true
|
92
|
+
else
|
93
|
+
return false # nil is converted to false.
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
#Return an array of indices from a cell of 'index' in @cells
|
98
|
+
#to the origin cell.
|
99
|
+
#The origin cell is the cell whose @from_edges has nil
|
100
|
+
#at the first item.
|
101
|
+
#Note that this method uses only the first item in @flom_edges
|
102
|
+
#of cells.
|
103
|
+
def ascend(index)
|
104
|
+
results = []
|
105
|
+
while true
|
106
|
+
results << index
|
107
|
+
edge = @cells[index].from_edges[0]
|
108
|
+
#pp edge
|
109
|
+
break unless edge
|
110
|
+
index = edge.nodes[0]
|
111
|
+
end
|
112
|
+
|
113
|
+
#current_index = last_index
|
114
|
+
#while current_index != nil
|
115
|
+
# results << current_index
|
116
|
+
# current_index = @cells[current_index].previous_cell
|
117
|
+
#end
|
118
|
+
return results
|
119
|
+
end
|
120
|
+
|
121
|
+
#def to_s
|
122
|
+
# result = "["
|
123
|
+
# tmp = @cells.map { |cell| result += cell.to_s }.join(", ")
|
124
|
+
# result += "]"
|
125
|
+
# return result
|
126
|
+
#end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
class Crysna::TransitionFinder::Edge
|
5
|
+
|
6
|
+
#attr_reader :nodes, :atom_id, :to_site, :global_vector, :operation, :weight
|
7
|
+
attr_reader :nodes, :weight, :note
|
8
|
+
|
9
|
+
class InitializeError < Exception; end
|
10
|
+
|
11
|
+
#'nodes' is assumed to be an array of 2 items which have indices of cells.
|
12
|
+
# E.g., [0, 3]
|
13
|
+
#'migration' indicates an array of 2 items which have source and destination sites
|
14
|
+
#as String. E.g., ["A", "C"]
|
15
|
+
#'operation' indicates an index of symmetry_operations in model.yaml.
|
16
|
+
#'weight' indicates a weight of the edge.
|
17
|
+
#def initialize(nodes, atom_id, to_site, global_vector, operation, weight)
|
18
|
+
def initialize(nodes, weight, note)
|
19
|
+
if nodes.size != 2
|
20
|
+
raise InitializeError, nodes.to_s
|
21
|
+
end
|
22
|
+
@nodes = nodes
|
23
|
+
#@atom_id = atom_id
|
24
|
+
#@to_site = to_site
|
25
|
+
#@global_vector = global_vector
|
26
|
+
#@operation = operation
|
27
|
+
@weight = weight
|
28
|
+
@note = note
|
29
|
+
end
|
30
|
+
|
31
|
+
#Return true if @nodes, @migrations, @operation, @weight are the same as others',
|
32
|
+
#respectively.
|
33
|
+
#Inverse edge will return false. E.g.,
|
34
|
+
#e00 = Crysna::TransitionFinder::Edge.new([0, 1], ["A", "B"], 0, -1.0)
|
35
|
+
#e01 = Crysna::TransitionFinder::Edge.new([1, 0], ["B", "A"], 0, -1.0)
|
36
|
+
#e00 == e01 #=> false
|
37
|
+
def ==(other)
|
38
|
+
result = true
|
39
|
+
result = false if @nodes != other.nodes
|
40
|
+
#result = false if @atom_id != other.atom_id
|
41
|
+
#result = false if @to_site != other.to_site
|
42
|
+
#result = false if @global_vector != other.global_vector
|
43
|
+
#result = false if @operation != other.operation
|
44
|
+
result = false if @weight != other.weight
|
45
|
+
result = false if @note != other.note
|
46
|
+
return result
|
47
|
+
end
|
48
|
+
|
49
|
+
#def to_s_short
|
50
|
+
# #"cell:#{@nodes[0]}->#{@nodes[1]}(mig:#{@migration[0]}->#{@migration[1]}, ope:#{@operation}, wgt:#{@weight})"
|
51
|
+
#end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
data/test/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.out
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Model to test optimizeframe command
|
2
|
+
1.0
|
3
|
+
2.0 2.0 2.0
|
4
|
+
0.0 2.0 2.0
|
5
|
+
0.0 0.0 2.0
|
6
|
+
7 1 2
|
7
|
+
Direct
|
8
|
+
0.10 0.10 0.10
|
9
|
+
0.10 0.10 0.11
|
10
|
+
0.10 0.10 0.13
|
11
|
+
0.10 0.12 0.10
|
12
|
+
0.10 0.16 0.10
|
13
|
+
0.13 0.10 0.10
|
14
|
+
0.19 0.10 0.10
|
15
|
+
0.11 0.11 0.11
|
16
|
+
0.00 0.00 0.00
|
17
|
+
0.90 0.90 0.90
|
@@ -0,0 +1,122 @@
|
|
1
|
+
---
|
2
|
+
frame_elements:
|
3
|
+
- 0
|
4
|
+
frame_sites:
|
5
|
+
FS_000:
|
6
|
+
- 0.0
|
7
|
+
- 0.0
|
8
|
+
- 0.0
|
9
|
+
FS_001:
|
10
|
+
- 0.0
|
11
|
+
- 0.0
|
12
|
+
- 0.01
|
13
|
+
FS_003:
|
14
|
+
- 0.0
|
15
|
+
- 0.0
|
16
|
+
- 0.03
|
17
|
+
FS_020:
|
18
|
+
- 0.0
|
19
|
+
- 0.02
|
20
|
+
- 0.0
|
21
|
+
FS_060:
|
22
|
+
- 0.0
|
23
|
+
- 0.06
|
24
|
+
- 0.0
|
25
|
+
FS_300:
|
26
|
+
- 0.03
|
27
|
+
- 0.0
|
28
|
+
- 0.0
|
29
|
+
FS_900:
|
30
|
+
- 0.09
|
31
|
+
- 0.0
|
32
|
+
- 0.0
|
33
|
+
symmetry_operations:
|
34
|
+
- rotation:
|
35
|
+
- - 1
|
36
|
+
- 0
|
37
|
+
- 0
|
38
|
+
- - 0
|
39
|
+
- 1
|
40
|
+
- 0
|
41
|
+
- - 0
|
42
|
+
- 0
|
43
|
+
- 1
|
44
|
+
translation:
|
45
|
+
- 0.0
|
46
|
+
- 0.0
|
47
|
+
- 0.0
|
48
|
+
- rotation:
|
49
|
+
- - -1
|
50
|
+
- 0
|
51
|
+
- 0
|
52
|
+
- - 0
|
53
|
+
- -1
|
54
|
+
- 0
|
55
|
+
- - 0
|
56
|
+
- 0
|
57
|
+
- -1
|
58
|
+
translation:
|
59
|
+
- 0.0
|
60
|
+
- 0.0
|
61
|
+
- 0.0
|
62
|
+
octahedral_sites:
|
63
|
+
Oc_000:
|
64
|
+
- - - FS_000
|
65
|
+
- - 0
|
66
|
+
- 0
|
67
|
+
- 1
|
68
|
+
- - FS_000
|
69
|
+
- - 1
|
70
|
+
- 1
|
71
|
+
- 0
|
72
|
+
- - - FS_000
|
73
|
+
- - 0
|
74
|
+
- 1
|
75
|
+
- 0
|
76
|
+
- - FS_000
|
77
|
+
- - 1
|
78
|
+
- 0
|
79
|
+
- 1
|
80
|
+
- - - FS_000
|
81
|
+
- - 1
|
82
|
+
- 0
|
83
|
+
- 0
|
84
|
+
- - FS_000
|
85
|
+
- - 0
|
86
|
+
- 1
|
87
|
+
- 1
|
88
|
+
tetrahedral_sites:
|
89
|
+
Te_000:
|
90
|
+
- - FS_000
|
91
|
+
- - 0
|
92
|
+
- 0
|
93
|
+
- 0
|
94
|
+
- - FS_000
|
95
|
+
- - 0
|
96
|
+
- 0
|
97
|
+
- 1
|
98
|
+
- - FS_000
|
99
|
+
- - 0
|
100
|
+
- 1
|
101
|
+
- 0
|
102
|
+
- - FS_000
|
103
|
+
- - 1
|
104
|
+
- 0
|
105
|
+
- 0
|
106
|
+
Te_001:
|
107
|
+
- - FS_000
|
108
|
+
- - 1
|
109
|
+
- 1
|
110
|
+
- 1
|
111
|
+
- - FS_000
|
112
|
+
- - 1
|
113
|
+
- 1
|
114
|
+
- 0
|
115
|
+
- - FS_000
|
116
|
+
- - 1
|
117
|
+
- 0
|
118
|
+
- 1
|
119
|
+
- - FS_000
|
120
|
+
- - 0
|
121
|
+
- 1
|
122
|
+
- 1
|