surface-construct 0.12__tar.gz → 0.12.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. {surface_construct-0.12/surface_construct.egg-info → surface_construct-0.12.2}/PKG-INFO +15 -24
  2. {surface_construct-0.12 → surface_construct-0.12.2}/README.md +14 -23
  3. {surface_construct-0.12 → surface_construct-0.12.2}/setup.py +1 -1
  4. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/structures/surface_grid.py +21 -42
  5. {surface_construct-0.12 → surface_construct-0.12.2/surface_construct.egg-info}/PKG-INFO +15 -24
  6. {surface_construct-0.12 → surface_construct-0.12.2}/tests/test_surface_grid.py +27 -1
  7. {surface_construct-0.12 → surface_construct-0.12.2}/LICENSE +0 -0
  8. {surface_construct-0.12 → surface_construct-0.12.2}/setup.cfg +0 -0
  9. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/__init__.py +0 -0
  10. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/db.py +0 -0
  11. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/default_parameter.py +0 -0
  12. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/sg_sampler.py +0 -0
  13. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/structures/__init__.py +0 -0
  14. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/structures/adsorbate.py +0 -0
  15. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/structures/combiner.py +0 -0
  16. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/structures/pymsym_test.py +0 -0
  17. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/structures/surface.py +0 -0
  18. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/tasks/__init__.py +0 -0
  19. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/tasks/afm.py +0 -0
  20. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/tasks/sitesampling.py +0 -0
  21. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/tasks/taskbase.py +0 -0
  22. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/tasks/terminations.py +0 -0
  23. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/utils/__init__.py +0 -0
  24. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/utils/atoms.py +0 -0
  25. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/utils/geometry.py +0 -0
  26. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/utils/pymsym_wrapper.py +0 -0
  27. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/utils/spglib_wrapper.py +0 -0
  28. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct/utils/weight_functions.py +0 -0
  29. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct.egg-info/SOURCES.txt +0 -0
  30. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct.egg-info/dependency_links.txt +0 -0
  31. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct.egg-info/requires.txt +0 -0
  32. {surface_construct-0.12 → surface_construct-0.12.2}/surface_construct.egg-info/top_level.txt +0 -0
  33. {surface_construct-0.12 → surface_construct-0.12.2}/tests/test_adsorbate.py +0 -0
  34. {surface_construct-0.12 → surface_construct-0.12.2}/tests/test_combiner.py +0 -0
  35. {surface_construct-0.12 → surface_construct-0.12.2}/tests/test_sampling1.py +0 -0
  36. {surface_construct-0.12 → surface_construct-0.12.2}/tests/test_sampling2.py +0 -0
  37. {surface_construct-0.12 → surface_construct-0.12.2}/tests/test_simple_surface.py +0 -0
  38. {surface_construct-0.12 → surface_construct-0.12.2}/tests/test_task.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: surface_construct
3
- Version: 0.12
3
+ Version: 0.12.2
4
4
  Summary: Surface construction and surface reaction sampling tools.
5
5
  Home-page: https://gitee.com/pjren/surface_construct/
6
6
  Author: ren
@@ -32,7 +32,9 @@ Dynamic: summary
32
32
 
33
33
  催化剂构效关系是建立表面位点结构和反应过程势能面的关联关系,这依赖对表面上各种可能位点的充分分析和采样,找到这些位点对关键反应步骤的影响情况。从催化剂的角度看,研究的目标是从表面上存在的位点中找到表面最适合反应的位点,即使反应势能面最低的位点;从反应的角度看,研究目标是对于一系列反应通道,找到反应势能面上的卡点,找到能够突破卡点的催化环境。
34
34
 
35
- 本软件同时进行表面位点的构建、采样、计算、分析,和反应过程的分析采样,即过渡态和分子构象,由此可以实现分子在表面反应的全过程采样。其中的技术关键是采样的效率,我们针对性地使用综合使用了多样化的采样策略,保证表面各类型位点和关键位点的充分采样。
35
+ 本软件同时进行表面位点的构建、采样、计算、分析,和反应过程的分析采样,即过渡态和分子构象,由此可以实现分子在表面反应的全过程采样。不仅包括平板模型的表面,还包括分子筛孔道內、团簇表面等。
36
+
37
+ 表面反应过程采样的技术关键是采样的效率,我们针对性地使用综合使用了多样化的采样策略,保证表面各类型位点和关键位点的充分采样。
36
38
 
37
39
  ### 应用场景
38
40
  * 催化剂表面最可能反应位点采样
@@ -41,15 +43,17 @@ Dynamic: summary
41
43
  * 优化 C、R、Z (z方向,距离表面的距离)空间,固定COM
42
44
  * 返回所采结构中最低能量和对应的结构和能量
43
45
 
44
- * 催化剂表面全势能面采样
46
+ * 催化剂表面全势能面采样(位点、分子构象、旋转)
45
47
  * 适用于催化剂位点全局考察
46
48
  * 适用于表面分子全局的构象和姿态
47
49
  * 适用于反应全过程采样
48
50
  * 不优化,或者仅优化Z空间
49
51
  * 返回全部能量和结构,以及全局的fitting结果
50
52
  * 使用能量截断(dEmax<2eV)
53
+ * 原子力显微镜(AFM)谱图模拟
54
+ * 分子筛孔道內分子构象采样
55
+
51
56
 
52
- <img src="docs/birds_view.png" alt="表面位点全局分析" style="zoom:50%;" />
53
57
 
54
58
  ## 程序流程图 Program Workflow
55
59
 
@@ -96,24 +100,6 @@ Dynamic: summary
96
100
  * MDMin
97
101
  * FIRE
98
102
 
99
- 各种优化算法的对比,参考[链接](https://wiki.fysik.dtu.dk/gpaw/devel/ase_optimize/ase_optimize.html)
100
-
101
- **使用方法**
102
-
103
- 修改 `surface_reaction_sample.py` 其中的一行
104
-
105
- ```
106
- from ase.optimize import BFGS
107
- ```
108
-
109
- 改为
110
-
111
- ```
112
- from ase.optimize import XXX as BFGS
113
- ```
114
-
115
- 注意:目前这只是权宜之计,后面会把相应的设置加入到 `parameter.py`
116
-
117
103
  ### Gaussian Process Regression 方法
118
104
 
119
105
  高斯过程回归 GPR 的优点:
@@ -166,6 +152,8 @@ $$
166
152
  * v 0.9.2: debug 支持三斜晶系的表面格点化
167
153
  * v 0.9.3: debug GridGenerator
168
154
  * v 0.10: 表面终结生成完整并入
155
+ * v0.11:分子构象和旋转采样
156
+ * v0.12:AFM 模拟
169
157
 
170
158
  **TODO**
171
159
 
@@ -174,13 +162,16 @@ $$
174
162
  * Low-Energy Region Explorer 方法借鉴[^LoreX]: 划分能量区域, 进行 Delaunay 划分,合并较小的区域为较大的区域。然后针对低能的区域进行额外采样。也可以适用不同的方法,低精度进行低能高能区域识别,然后高精度方法加强。
175
163
  * 表面格点使用对称性进行降维。在最初期就引入对称性。参考 adsorbate rotation 思路
176
164
  * 表面位点数据库
177
- * 多原子体系(内坐标受限体系)
165
+ * 覆盖度问题
166
+ * 表面上每增加一个吸附分子,就更新一次格点(可以仅仅更新 vip points,或者dock points)
167
+ * 表面上新增 dock points 属性,根据吸附能、位点类型或者用户进行定义。默认是所有的位点,根据能量分析或者用户更新
168
+ * sg 增加 del_grid(indices), 删除对应的 points, vectors,Dga 等等
178
169
  * 完善用户界面、例子、教程
179
170
 
180
171
 
181
172
  ## Reference
182
173
 
183
- [^Duvenaud]: [The Kernel Cookbook: Advice on Covariance functions](https://www.cs.toronto.edu/~duvenaud/)]
174
+ [^Duvenaud]: [The Kernel Cookbook: Advice on Covariance functions](https://www.cs.toronto.edu/~duvenaud/)
184
175
  [^BASC]: Shane Carr, Roman Garnett, Cynthia LoBASC: Applying Bayesian Optimization to the Search for Global Minima on Potential Energy Surfaces.
185
176
 
186
177
  [^向量空间转化]: 计算实空间和向量空间的相邻格点距离的映射系数,根据此系数将实空间的距离转化为向量空间距离。
@@ -2,7 +2,9 @@
2
2
 
3
3
  催化剂构效关系是建立表面位点结构和反应过程势能面的关联关系,这依赖对表面上各种可能位点的充分分析和采样,找到这些位点对关键反应步骤的影响情况。从催化剂的角度看,研究的目标是从表面上存在的位点中找到表面最适合反应的位点,即使反应势能面最低的位点;从反应的角度看,研究目标是对于一系列反应通道,找到反应势能面上的卡点,找到能够突破卡点的催化环境。
4
4
 
5
- 本软件同时进行表面位点的构建、采样、计算、分析,和反应过程的分析采样,即过渡态和分子构象,由此可以实现分子在表面反应的全过程采样。其中的技术关键是采样的效率,我们针对性地使用综合使用了多样化的采样策略,保证表面各类型位点和关键位点的充分采样。
5
+ 本软件同时进行表面位点的构建、采样、计算、分析,和反应过程的分析采样,即过渡态和分子构象,由此可以实现分子在表面反应的全过程采样。不仅包括平板模型的表面,还包括分子筛孔道內、团簇表面等。
6
+
7
+ 表面反应过程采样的技术关键是采样的效率,我们针对性地使用综合使用了多样化的采样策略,保证表面各类型位点和关键位点的充分采样。
6
8
 
7
9
  ### 应用场景
8
10
  * 催化剂表面最可能反应位点采样
@@ -11,15 +13,17 @@
11
13
  * 优化 C、R、Z (z方向,距离表面的距离)空间,固定COM
12
14
  * 返回所采结构中最低能量和对应的结构和能量
13
15
 
14
- * 催化剂表面全势能面采样
16
+ * 催化剂表面全势能面采样(位点、分子构象、旋转)
15
17
  * 适用于催化剂位点全局考察
16
18
  * 适用于表面分子全局的构象和姿态
17
19
  * 适用于反应全过程采样
18
20
  * 不优化,或者仅优化Z空间
19
21
  * 返回全部能量和结构,以及全局的fitting结果
20
22
  * 使用能量截断(dEmax<2eV)
23
+ * 原子力显微镜(AFM)谱图模拟
24
+ * 分子筛孔道內分子构象采样
25
+
21
26
 
22
- <img src="docs/birds_view.png" alt="表面位点全局分析" style="zoom:50%;" />
23
27
 
24
28
  ## 程序流程图 Program Workflow
25
29
 
@@ -66,24 +70,6 @@
66
70
  * MDMin
67
71
  * FIRE
68
72
 
69
- 各种优化算法的对比,参考[链接](https://wiki.fysik.dtu.dk/gpaw/devel/ase_optimize/ase_optimize.html)
70
-
71
- **使用方法**
72
-
73
- 修改 `surface_reaction_sample.py` 其中的一行
74
-
75
- ```
76
- from ase.optimize import BFGS
77
- ```
78
-
79
- 改为
80
-
81
- ```
82
- from ase.optimize import XXX as BFGS
83
- ```
84
-
85
- 注意:目前这只是权宜之计,后面会把相应的设置加入到 `parameter.py`
86
-
87
73
  ### Gaussian Process Regression 方法
88
74
 
89
75
  高斯过程回归 GPR 的优点:
@@ -136,6 +122,8 @@ $$
136
122
  * v 0.9.2: debug 支持三斜晶系的表面格点化
137
123
  * v 0.9.3: debug GridGenerator
138
124
  * v 0.10: 表面终结生成完整并入
125
+ * v0.11:分子构象和旋转采样
126
+ * v0.12:AFM 模拟
139
127
 
140
128
  **TODO**
141
129
 
@@ -144,13 +132,16 @@ $$
144
132
  * Low-Energy Region Explorer 方法借鉴[^LoreX]: 划分能量区域, 进行 Delaunay 划分,合并较小的区域为较大的区域。然后针对低能的区域进行额外采样。也可以适用不同的方法,低精度进行低能高能区域识别,然后高精度方法加强。
145
133
  * 表面格点使用对称性进行降维。在最初期就引入对称性。参考 adsorbate rotation 思路
146
134
  * 表面位点数据库
147
- * 多原子体系(内坐标受限体系)
135
+ * 覆盖度问题
136
+ * 表面上每增加一个吸附分子,就更新一次格点(可以仅仅更新 vip points,或者dock points)
137
+ * 表面上新增 dock points 属性,根据吸附能、位点类型或者用户进行定义。默认是所有的位点,根据能量分析或者用户更新
138
+ * sg 增加 del_grid(indices), 删除对应的 points, vectors,Dga 等等
148
139
  * 完善用户界面、例子、教程
149
140
 
150
141
 
151
142
  ## Reference
152
143
 
153
- [^Duvenaud]: [The Kernel Cookbook: Advice on Covariance functions](https://www.cs.toronto.edu/~duvenaud/)]
144
+ [^Duvenaud]: [The Kernel Cookbook: Advice on Covariance functions](https://www.cs.toronto.edu/~duvenaud/)
154
145
  [^BASC]: Shane Carr, Roman Garnett, Cynthia LoBASC: Applying Bayesian Optimization to the Search for Global Minima on Potential Energy Surfaces.
155
146
 
156
147
  [^向量空间转化]: 计算实空间和向量空间的相邻格点距离的映射系数,根据此系数将实空间的距离转化为向量空间距离。
@@ -15,7 +15,7 @@ install_requires = [
15
15
 
16
16
  setup(
17
17
  name='surface_construct',
18
- version='0.12',
18
+ version='0.12.2',
19
19
  packages=find_packages(),
20
20
  url='https://gitee.com/pjren/surface_construct/',
21
21
  license='GPL',
@@ -98,11 +98,12 @@ class MLATVectorGen:
98
98
  index_array = grid_dist.argsort(axis=-1)
99
99
  grid_dist = np.take_along_axis(grid_dist, index_array, axis=-1)
100
100
  # 设定距离向量长度
101
- vlen = self.vlen
102
101
  r0 = self.kwargs.get('r0_dict')[atomnum] # r0_dict 是一个字典,放着 r0 值
103
- v = grid_dist[:, :vlen]
104
102
  kwargs.update({'r0': r0})
105
- v_w = self.weight_func(v, **kwargs)
103
+ vlen = min(self.vlen,grid_dist.shape[-1])
104
+ rt = grid_dist[:, :vlen]
105
+ v_w = np.zeros((grid_dist.shape[0],self.vlen))
106
+ v_w[:,:vlen] = self.weight_func(rt, **kwargs)
106
107
  vector.append(v_w)
107
108
  vector = np.concatenate(vector, axis=1)
108
109
  return vector
@@ -1142,45 +1143,23 @@ def combine_sg_vector(*sg_lst):
1142
1143
  elif len(sg_lst) == 1:
1143
1144
  return sg_lst[0]._raw_vector
1144
1145
 
1145
- species_num_lst = sorted(set([s[0] for sg in sg_lst for s in sg.species]))
1146
- species_default_dct = {num: 0 for num in species_num_lst}
1147
- species_lsts = []
1148
- vlen_max = species_default_dct.copy()
1146
+ species_lst = sorted({s[0] for sg in sg_lst for s in sg.species})
1147
+ vlen = max([sg.vlen for sg in sg_lst])
1148
+ vectors_lst = []
1149
1149
  for sg in sg_lst:
1150
- species_dct = species_default_dct.copy()
1151
- species_dct.update({num: min(sg.vlen, cnt) for num, cnt in sg.species})
1152
- # 对 species_dcts 中的元素进行排序
1153
- species_lst = sorted(species_dct.items(), key=lambda x: x[0])
1154
- species_lsts.append(species_lst)
1155
- vlen_max = {num: max(vlen_max[num], vlen) for num, vlen in species_dct.items()} # 更新向量最大值
1156
- # vlen_max 进行排序
1157
-
1158
- new_vector_lst = []
1159
- for sg, species_lst in zip(sg_lst, species_lsts):
1160
- # 提取 raw_vector, 对不足的 vector 进行补齐
1161
- raw_vector = sg._raw_vector
1162
- nvector = len(raw_vector) # 总行数
1163
- pointer = 0 # 列指针
1164
- new_vector = []
1165
- for num, cnt in species_lst:
1166
- new_vlen = vlen_max[num]
1167
- new_v = np.zeros([nvector, new_vlen])
1168
- new_v += 1.0 * raw_vector.min() # 超过截断的使用最小值的三分之二,从而减小不同表面之间的结构差异
1169
- # 判断长度是不是 0
1170
- if cnt == 0:
1171
- new_vector.append(new_v)
1172
- continue
1173
- # 取出对应的 vector 列
1174
- old_v = raw_vector[:, pointer:pointer+cnt]
1175
- # 判断是不是要补齐
1176
- if cnt == new_vlen:
1177
- new_vector.append(old_v)
1178
- else:
1179
- new_v[:, :cnt] = old_v
1180
- new_vector.append(new_v)
1181
- pointer += cnt
1182
- new_vector = np.concatenate(new_vector, axis=1)
1183
- new_vector_lst.append(new_vector)
1184
- vector_combine = np.concatenate(new_vector_lst, axis=0)
1150
+ sp0 = [s[0] for s in sg.species] # 所有的物种
1151
+ if species_lst == sp0 and sg.vlen==vlen: #如果元素相同,vlen相同,直接合并
1152
+ vectors_lst.append(sg._raw_vector)
1153
+ else: # 如果元素或者vlen不同,都要重新定义 vector
1154
+ vector = np.zeros((len(sg.vector), vlen*len(species_lst)))
1155
+ for old_idx, atomnum in enumerate(sp0):
1156
+ new_idx = species_lst.index(atomnum)
1157
+ idx_up = new_idx*vlen
1158
+ idx_down = idx_up + sg.vlen
1159
+ old_idx_up, old_idx_down = old_idx*sg.vlen, (old_idx+1)*sg.vlen
1160
+ vector[:, idx_up:idx_down] = sg._raw_vector[:, old_idx_up:old_idx_down]
1161
+ vectors_lst.append(vector)
1162
+
1163
+ vector_combine = np.concatenate(vectors_lst, axis=0)
1185
1164
 
1186
1165
  return vector_combine
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: surface_construct
3
- Version: 0.12
3
+ Version: 0.12.2
4
4
  Summary: Surface construction and surface reaction sampling tools.
5
5
  Home-page: https://gitee.com/pjren/surface_construct/
6
6
  Author: ren
@@ -32,7 +32,9 @@ Dynamic: summary
32
32
 
33
33
  催化剂构效关系是建立表面位点结构和反应过程势能面的关联关系,这依赖对表面上各种可能位点的充分分析和采样,找到这些位点对关键反应步骤的影响情况。从催化剂的角度看,研究的目标是从表面上存在的位点中找到表面最适合反应的位点,即使反应势能面最低的位点;从反应的角度看,研究目标是对于一系列反应通道,找到反应势能面上的卡点,找到能够突破卡点的催化环境。
34
34
 
35
- 本软件同时进行表面位点的构建、采样、计算、分析,和反应过程的分析采样,即过渡态和分子构象,由此可以实现分子在表面反应的全过程采样。其中的技术关键是采样的效率,我们针对性地使用综合使用了多样化的采样策略,保证表面各类型位点和关键位点的充分采样。
35
+ 本软件同时进行表面位点的构建、采样、计算、分析,和反应过程的分析采样,即过渡态和分子构象,由此可以实现分子在表面反应的全过程采样。不仅包括平板模型的表面,还包括分子筛孔道內、团簇表面等。
36
+
37
+ 表面反应过程采样的技术关键是采样的效率,我们针对性地使用综合使用了多样化的采样策略,保证表面各类型位点和关键位点的充分采样。
36
38
 
37
39
  ### 应用场景
38
40
  * 催化剂表面最可能反应位点采样
@@ -41,15 +43,17 @@ Dynamic: summary
41
43
  * 优化 C、R、Z (z方向,距离表面的距离)空间,固定COM
42
44
  * 返回所采结构中最低能量和对应的结构和能量
43
45
 
44
- * 催化剂表面全势能面采样
46
+ * 催化剂表面全势能面采样(位点、分子构象、旋转)
45
47
  * 适用于催化剂位点全局考察
46
48
  * 适用于表面分子全局的构象和姿态
47
49
  * 适用于反应全过程采样
48
50
  * 不优化,或者仅优化Z空间
49
51
  * 返回全部能量和结构,以及全局的fitting结果
50
52
  * 使用能量截断(dEmax<2eV)
53
+ * 原子力显微镜(AFM)谱图模拟
54
+ * 分子筛孔道內分子构象采样
55
+
51
56
 
52
- <img src="docs/birds_view.png" alt="表面位点全局分析" style="zoom:50%;" />
53
57
 
54
58
  ## 程序流程图 Program Workflow
55
59
 
@@ -96,24 +100,6 @@ Dynamic: summary
96
100
  * MDMin
97
101
  * FIRE
98
102
 
99
- 各种优化算法的对比,参考[链接](https://wiki.fysik.dtu.dk/gpaw/devel/ase_optimize/ase_optimize.html)
100
-
101
- **使用方法**
102
-
103
- 修改 `surface_reaction_sample.py` 其中的一行
104
-
105
- ```
106
- from ase.optimize import BFGS
107
- ```
108
-
109
- 改为
110
-
111
- ```
112
- from ase.optimize import XXX as BFGS
113
- ```
114
-
115
- 注意:目前这只是权宜之计,后面会把相应的设置加入到 `parameter.py`
116
-
117
103
  ### Gaussian Process Regression 方法
118
104
 
119
105
  高斯过程回归 GPR 的优点:
@@ -166,6 +152,8 @@ $$
166
152
  * v 0.9.2: debug 支持三斜晶系的表面格点化
167
153
  * v 0.9.3: debug GridGenerator
168
154
  * v 0.10: 表面终结生成完整并入
155
+ * v0.11:分子构象和旋转采样
156
+ * v0.12:AFM 模拟
169
157
 
170
158
  **TODO**
171
159
 
@@ -174,13 +162,16 @@ $$
174
162
  * Low-Energy Region Explorer 方法借鉴[^LoreX]: 划分能量区域, 进行 Delaunay 划分,合并较小的区域为较大的区域。然后针对低能的区域进行额外采样。也可以适用不同的方法,低精度进行低能高能区域识别,然后高精度方法加强。
175
163
  * 表面格点使用对称性进行降维。在最初期就引入对称性。参考 adsorbate rotation 思路
176
164
  * 表面位点数据库
177
- * 多原子体系(内坐标受限体系)
165
+ * 覆盖度问题
166
+ * 表面上每增加一个吸附分子,就更新一次格点(可以仅仅更新 vip points,或者dock points)
167
+ * 表面上新增 dock points 属性,根据吸附能、位点类型或者用户进行定义。默认是所有的位点,根据能量分析或者用户更新
168
+ * sg 增加 del_grid(indices), 删除对应的 points, vectors,Dga 等等
178
169
  * 完善用户界面、例子、教程
179
170
 
180
171
 
181
172
  ## Reference
182
173
 
183
- [^Duvenaud]: [The Kernel Cookbook: Advice on Covariance functions](https://www.cs.toronto.edu/~duvenaud/)]
174
+ [^Duvenaud]: [The Kernel Cookbook: Advice on Covariance functions](https://www.cs.toronto.edu/~duvenaud/)
184
175
  [^BASC]: Shane Carr, Roman Garnett, Cynthia LoBASC: Applying Bayesian Optimization to the Search for Global Minima on Potential Energy Surfaces.
185
176
 
186
177
  [^向量空间转化]: 计算实空间和向量空间的相邻格点距离的映射系数,根据此系数将实空间的距离转化为向量空间距离。
@@ -6,6 +6,8 @@ import ase
6
6
  from surface_construct import GridGenerator
7
7
  from ase.cluster.cubic import FaceCenteredCubic
8
8
  from surface_construct import SurfaceGrid
9
+ from surface_construct.structures.surface_grid import combine_sg_vector
10
+
9
11
 
10
12
  class TestSurfaceGrid:
11
13
  def test_Cu_cluster(self):
@@ -118,4 +120,28 @@ class TestSurfaceGrid:
118
120
  atoms = ase.io.read('atoms_files/Fe28C12_115_12_POSCAR')
119
121
  sg_obj = SurfaceGrid(atoms, interval=0.1, ads_num=6, lpca=False)
120
122
  sg_obj.gridize(subtype='slab')
121
- print(sg_obj.points.shape)
123
+ print(sg_obj.points.shape)
124
+
125
+ def test_ads_C4H4O(self):
126
+ atoms = ase.io.read('atoms_files/C4H4O_Cu.vasp')
127
+ sg_obj = SurfaceGrid(atoms, interval=0.2, ads_num=6, lpca=False)
128
+ sg_obj.gridize(subtype='slab')
129
+ sg_obj.vectorize()
130
+ assert sg_obj.vector.shape==(6582, 40)
131
+
132
+ def test_sg_combiner(self):
133
+ atoms1 = ase.io.read('atoms_files/C4H4O_Cu.vasp')
134
+ sg_obj1 = SurfaceGrid(atoms1, interval=0.2, ads_num=6, lpca=False)
135
+ sg_obj1.gridize(subtype='slab')
136
+ sg_obj1.vectorize()
137
+ assert sg_obj1.vector.shape[1] == 40
138
+
139
+ atoms2 = ase.io.read('atoms_files/Fe28C12_115_12_POSCAR')
140
+ sg_obj2 = SurfaceGrid(atoms2, interval=0.2, ads_num=6, lpca=False, vlen=15)
141
+ sg_obj2.gridize(subtype='slab')
142
+ sg_obj2.vectorize()
143
+
144
+ assert sg_obj2.vector.shape[1] == 30
145
+
146
+ comb_vector = combine_sg_vector(sg_obj1, sg_obj2)
147
+ assert comb_vector.shape[1] == 75