mlatom 2.0.3__tar.gz → 2.0.5__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 (83) hide show
  1. {MLatom-2.0.3/src/MLatom.egg-info → MLatom-2.0.5}/PKG-INFO +3 -3
  2. {MLatom-2.0.3 → MLatom-2.0.5}/README.md +2 -2
  3. {MLatom-2.0.3 → MLatom-2.0.5}/setup.py +9 -5
  4. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/ML_NEA.py +35 -25
  5. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/README +2 -2
  6. MLatom-2.0.5/src/MLatom/__init__.py +0 -0
  7. MLatom-2.0.5/src/MLatom/interfaces/DeePMDkit/__init__.py +0 -0
  8. MLatom-2.0.5/src/MLatom/interfaces/GAP/__init__.py +0 -0
  9. MLatom-2.0.5/src/MLatom/interfaces/PhysNet/__init__.py +0 -0
  10. MLatom-2.0.5/src/MLatom/interfaces/TorchANI/__init__.py +0 -0
  11. MLatom-2.0.5/src/MLatom/interfaces/__init__.py +0 -0
  12. MLatom-2.0.5/src/MLatom/interfaces/sGDML/__init__.py +0 -0
  13. MLatom-2.0.5/src/MLatom/mlatom_gui.py +1348 -0
  14. MLatom-2.0.5/src/MLatom/shell_cmd.py +14 -0
  15. {MLatom-2.0.3 → MLatom-2.0.5/src/MLatom.egg-info}/PKG-INFO +3 -3
  16. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom.egg-info/SOURCES.txt +10 -2
  17. MLatom-2.0.5/src/MLatom.egg-info/entry_points.txt +6 -0
  18. MLatom-2.0.5/src/MLatom.egg-info/top_level.txt +1 -0
  19. MLatom-2.0.3/MLatomF +0 -12
  20. MLatom-2.0.3/mlatom +0 -12
  21. MLatom-2.0.3/src/MLatom.egg-info/top_level.txt +0 -1
  22. {MLatom-2.0.3 → MLatom-2.0.5}/LICENSE.txt +0 -0
  23. {MLatom-2.0.3 → MLatom-2.0.5}/setup.cfg +0 -0
  24. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/LICENSE.CC-BY-NC-ND-4.0 +0 -0
  25. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatom.py +0 -0
  26. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF +0 -0
  27. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/A_KRR.f90 +0 -0
  28. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/A_KRR_kernel.f90 +0 -0
  29. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/D_CoulombMatrix.f90 +0 -0
  30. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/D_rel2eq.f90 +0 -0
  31. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/MLatomF.f90 +0 -0
  32. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/MLatomFInfo.f90 +0 -0
  33. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/MLmodel.f90 +0 -0
  34. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/Makefile +0 -0
  35. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/Makefile.intel +0 -0
  36. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/analyze.f90 +0 -0
  37. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/constants.f90 +0 -0
  38. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/cs.cpp +0 -0
  39. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/dataset.f90 +0 -0
  40. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/mathUtils.f90 +0 -0
  41. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/molDescr.f90 +0 -0
  42. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/optionsModule.f90 +0 -0
  43. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/precision.f90 +0 -0
  44. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/sampling.f90 +0 -0
  45. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/statistics.f90 +0 -0
  46. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/stopper.f90 +0 -0
  47. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/strings.f90 +0 -0
  48. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/timing.f90 +0 -0
  49. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLatomF_src/types.f90 +0 -0
  50. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/MLtasks.py +0 -0
  51. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/args_class.py +0 -0
  52. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/cs.so +0 -0
  53. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/doc.py +0 -0
  54. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/documentation/installation.txt +0 -0
  55. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/E_FCI_451.dat +0 -0
  56. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/E_UHF_451.dat +0 -0
  57. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/R_451.dat +0 -0
  58. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/isubtrain.dat +0 -0
  59. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/itest.dat +0 -0
  60. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/itrain.dat +0 -0
  61. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/ivalidate.dat +0 -0
  62. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/mlatom.inp +0 -0
  63. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/mlatom.saved +0 -0
  64. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/example/test.sh +0 -0
  65. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/header.py +0 -0
  66. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interface_MLatomF.py +0 -0
  67. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/DeePMDkit/DP_inference.py +0 -0
  68. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/DeePMDkit/interface_DeePMDkit.py +0 -0
  69. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/DeePMDkit/template.json +0 -0
  70. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/GAP/interface_GAP.py +0 -0
  71. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/PhysNet/PhysNet_predict.py +0 -0
  72. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/PhysNet/PhysNet_train.py +0 -0
  73. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/PhysNet/interface_PhysNet.py +0 -0
  74. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/TorchANI/TorchANI_predict.py +0 -0
  75. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/TorchANI/TorchANI_train.py +0 -0
  76. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/TorchANI/interface_TorchANI.py +0 -0
  77. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/sGDML/interface_sGDML.py +0 -0
  78. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/interfaces/sGDML/sgdml_dataset_from_extxyz.py +0 -0
  79. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/ref.json +0 -0
  80. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/sliceData.py +0 -0
  81. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom/stopper.py +0 -0
  82. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom.egg-info/dependency_links.txt +0 -0
  83. {MLatom-2.0.3 → MLatom-2.0.5}/src/MLatom.egg-info/requires.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: MLatom
3
- Version: 2.0.3
3
+ Version: 2.0.5
4
4
  Summary: A Package for Atomistic Simulations with Machine Learning
5
5
  Home-page: http://mlatom.com
6
6
  Author: Pavlo O. Dral
@@ -122,7 +122,7 @@ MLatom also provides interfaces to some third-party software where extra ML mode
122
122
 
123
123
  # About Program
124
124
  MLatom: a Package for Atomistic Simulations with Machine Learning
125
- Version 2.0.3
125
+ Version 2.0.5
126
126
  http://mlatom.com/
127
127
 
128
128
  Copyright (c) 2013-2021 Pavlo O. Dral
@@ -136,7 +136,7 @@ Cite as:
136
136
 
137
137
  1. Pavlo O. Dral, J. Comput. Chem. 2019, 40, 2339-2347
138
138
  2. Pavlo O. Dral, Fuchun Ge, Bao-Xin Xue, Yi-Fan Hou, Max Pinheiro Jr, Jianxing Huang, Mario Barbatti, Top. Curr. Chem. 2021, 379, 27
139
- 3. Pavlo O. Dral, Bao-Xin Xue, Fuchun Ge, Yi-Fan Hou, Max Pinheiro Jr, MLatom: A Package for Atomistic Simulations with Machine Learning, version 2.0.3, Xiamen University, Xiamen, China, 2013-2021.
139
+ 3. Pavlo O. Dral, Bao-Xin Xue, Fuchun Ge, Yi-Fan Hou, Max Pinheiro Jr, MLatom: A Package for Atomistic Simulations with Machine Learning, version 2.0.5, Xiamen University, Xiamen, China, 2013-2021.
140
140
 
141
141
 
142
142
  # License
@@ -104,7 +104,7 @@ MLatom also provides interfaces to some third-party software where extra ML mode
104
104
 
105
105
  # About Program
106
106
  MLatom: a Package for Atomistic Simulations with Machine Learning
107
- Version 2.0.3
107
+ Version 2.0.5
108
108
  http://mlatom.com/
109
109
 
110
110
  Copyright (c) 2013-2021 Pavlo O. Dral
@@ -118,7 +118,7 @@ Cite as:
118
118
 
119
119
  1. Pavlo O. Dral, J. Comput. Chem. 2019, 40, 2339-2347
120
120
  2. Pavlo O. Dral, Fuchun Ge, Bao-Xin Xue, Yi-Fan Hou, Max Pinheiro Jr, Jianxing Huang, Mario Barbatti, Top. Curr. Chem. 2021, 379, 27
121
- 3. Pavlo O. Dral, Bao-Xin Xue, Fuchun Ge, Yi-Fan Hou, Max Pinheiro Jr, MLatom: A Package for Atomistic Simulations with Machine Learning, version 2.0.3, Xiamen University, Xiamen, China, 2013-2021.
121
+ 3. Pavlo O. Dral, Bao-Xin Xue, Fuchun Ge, Yi-Fan Hou, Max Pinheiro Jr, MLatom: A Package for Atomistic Simulations with Machine Learning, version 2.0.5, Xiamen University, Xiamen, China, 2013-2021.
122
122
 
123
123
 
124
124
  # License
@@ -43,7 +43,7 @@ with open(os.path.join(here, 'README.md')) as f:
43
43
 
44
44
  setup(
45
45
  name = pkg_name,
46
- version = "2.0.3",
46
+ version = "2.0.5",
47
47
  author = "Pavlo O. Dral",
48
48
  author_email = "admin@mlatom.com",
49
49
  license = 'CC BY-NC-ND 4.0', # https://creativecommons.org/licenses/by-nc-nd/4.0/
@@ -54,7 +54,7 @@ setup(
54
54
  python_requires='>=3.7',
55
55
  packages = find_packages('src'),
56
56
  package_dir = {'' : 'src'},
57
- scripts = ['mlatom', 'MLatomF'],
57
+ # scripts = ['mlatom', 'MLatomF'],
58
58
  package_data = {"": ['MLatomF', '*.json', 'cs.so']},
59
59
  classifiers = [
60
60
  "Programming Language :: Python :: 3",
@@ -64,9 +64,13 @@ setup(
64
64
  "Environment :: Console",
65
65
  ],
66
66
  install_requires = ['numpy', 'matplotlib'],
67
- # entry_points = {
68
- # 'console_scripts' : ['mlatom=MLatom.MLatom:MLatomMainCls']
69
- # }
67
+ entry_points = {
68
+ 'console_scripts' : ['mlatom-gui = MLatom.mlatom_gui:main',
69
+ 'mlatom_gui = MLatom.mlatom_gui:main',
70
+ 'mlatom = MLatom.shell_cmd:mlatom',
71
+ # 'MLatom.py = MLatom.shell_cmd:mlatom',
72
+ 'MLatomF = MLatom.shell_cmd:MLatomF']
73
+ }
70
74
  # cmdclass = {
71
75
  # "install_scripts": InstallScripts
72
76
  # }
@@ -749,13 +749,13 @@ class GaussCalc(LinuxInterface):
749
749
  self.cd(orig_folder)
750
750
 
751
751
  def process_one_gauss_log(self, log_file: str) -> Tuple[List[float], List[float]]:
752
- cmd = '''grep 'Excited State' %s | awk '{print $5}' > %s/SPC_E.TEMP''' % (log_file, self.temp_path)
752
+ cmd = '''grep -E 'Excited State +?[0-9]+' %s | awk '{print $5}' > %s/SPC_E.TEMP''' % (log_file, self.temp_path)
753
753
  err_code, _ = self.exec(cmd)
754
754
  E_file = os.path.join(self.temp_path, 'SPC_E.TEMP')
755
755
  if err_code != 0:
756
756
  err_print(f'extract E value from one gaussian log failed with error code: {err_code}')
757
757
 
758
- cmd = '''grep 'Excited State' %s | awk '{print $9}' | sed s/f=//g > %s/SPC_f.TEMP''' % (log_file, self.temp_path)
758
+ cmd = '''grep -E 'Excited State +?[0-9]+' %s | awk '{print $9}' | sed s/f=//g > %s/SPC_f.TEMP''' % (log_file, self.temp_path)
759
759
  err_code, _ = self.exec(cmd)
760
760
  f_file = os.path.join(self.temp_path, 'SPC_f.TEMP')
761
761
  if err_code != 0:
@@ -795,8 +795,10 @@ class NewtonXCalc(LinuxInterface):
795
795
  self.cd(self.NX_path)
796
796
  self.change_geom(geom_path)
797
797
  self.run_dynamic(freq_path, atom_num, NEA_point)
798
+ eq_mole = Molecule()
799
+ eq_mole.read_xyz(geom_path)
800
+ self.multi_xyz.append(eq_mole)
798
801
  self.restore_multi_xyz(atom_num)
799
- pass
800
802
 
801
803
  def change_geom(self, geom_path: str) -> None:
802
804
  # check whether trnasfer success (delete /dev/null and then check the output log)
@@ -822,12 +824,9 @@ class NewtonXCalc(LinuxInterface):
822
824
  ' nis = 1\n nfs = 2\n kvert = 1\n de = 100\n prog = 6.5\n iseed = 1234\n lvprt = 1\n/\n'
823
825
  with open(inp_name, 'w') as f:
824
826
  f.write(nx_inp)
825
- # err_code, out = self.exec(f'$NX/initcond.pl > NX-MD.log 2>&1')
826
- err_code, out = self.exec('$NX/mk_qvector < initqp_input ; ' \
827
- '$NX/weight < initqp_input &> weight.log ; ' \
828
- '$NX/initqp < initqp_input &> initqp.log ')
829
- if err_code != 0 or out != '':
830
- err_print(f'Newton-X calculation failed!!!\nstatus code: {err_code} (0 stands for normal exit, none 0 stands for error)\noutput: {out}')
827
+ os.system('$NX/mk_qvector < initqp_input')
828
+ os.system('$NX/weight < initqp_input > weight.log')
829
+ os.system('$NX/initqp < initqp_input > initqp.log')
831
830
 
832
831
  def restore_multi_xyz(self, atom_num: int):
833
832
  with open('ini_qv') as f:
@@ -850,6 +849,7 @@ class NewtonXCalc(LinuxInterface):
850
849
  else:
851
850
  err_print('processing ini_qv failed! exit!')
852
851
  exit()
852
+ self.multi_xyz.append(mole)
853
853
 
854
854
  def _process_ini_qv_line(self, splited_line: List[str]) -> List[float]:
855
855
  xyz = map(lambda x: float(x.replace('D', 'e')), splited_line[0: 3])
@@ -2346,11 +2346,12 @@ class RecurPaperProcedure(ArgParser, LinuxInterface):
2346
2346
  self.delta_QC = 0.01
2347
2347
  self.delta_SPC = 0.3
2348
2348
 
2349
- def opt_freq_calc(self):
2349
+ def opt_freq_calc(self, force_calc: bool=False):
2350
2350
  self.cd(self.work_path)
2351
- if self.exist_path(self.eq_init_xyz_name) and self.exist_path(self.nx_nea_geom_name):
2352
- self.opt_molecule.read_xyz(self.eq_init_xyz_name)
2353
- return
2351
+ if not force_calc:
2352
+ if self.exist_path(self.eq_init_xyz_name) and self.exist_path(self.nx_nea_geom_name):
2353
+ self.opt_molecule.read_xyz(self.eq_init_xyz_name)
2354
+ return
2354
2355
  if not EnvCheck.check_NX():
2355
2356
  exit()
2356
2357
  self.cd(self.work_path)
@@ -2362,28 +2363,37 @@ class RecurPaperProcedure(ArgParser, LinuxInterface):
2362
2363
  else: # not exists opt-freq.com, raise error
2363
2364
  err_print(f'not exists {self.gauss_opt_inp_name} or {self.gauss_opt_log_name}, exit')
2364
2365
  exit()
2366
+ else:
2367
+ self.cp(self.gauss_opt_log_name, os.path.join(self.gauss.gauss_path, self.gauss_opt_log_name))
2365
2368
  # now exists opt-freq.log, extract opt.xyz & freq
2366
- self.opt_molecule = self.gauss.extract_xyz(
2367
- os.path.join(self.gauss.gauss_path, self.gauss_opt_log_name))
2368
- # self.opt_molecule.print_xyz(self.eq_xyz_name) # no needed, don't pollute the working directory
2369
+ if not force_calc:
2370
+ self.opt_molecule = self.gauss.extract_xyz(
2371
+ os.path.join(self.gauss.gauss_path, self.gauss_opt_log_name))
2372
+ # self.opt_molecule.print_xyz(self.eq_xyz_name) # no needed, don't pollute the working directory
2369
2373
 
2370
2374
  def NX_multi_xyz_calc(self):
2371
- self.cd(self.work_path)
2372
- if not self.exist_path(self.nx_nea_geom_name): # not exist multiple xyz.dat, need to calc it with NX
2375
+ def NX_gen_ensemble():
2376
+ if not EnvCheck.check_NX():
2377
+ exit()
2373
2378
  self.cd(self.nx.NX_path)
2374
2379
  self.opt_molecule.print_xyz('opt.xyz')
2375
2380
  self.cp(os.path.join(self.gauss.gauss_path, self.gauss_opt_log_name),
2376
2381
  os.path.join(self.nx.NX_path, 'opt.log'))
2377
- if not EnvCheck.check_NX():
2378
- exit()
2379
2382
  self.nx.invoke_NX('opt.xyz', 'opt.log', self.opt_molecule.atom_num, self.ML_point)
2380
2383
  self.multi_xyz = self.nx.multi_xyz
2381
- else:
2382
- # now exists xyz file, process this file and store it to self.multi_xyz_geom
2384
+
2385
+ self.cd(self.work_path)
2386
+ if self.exist_path(self.nx_nea_geom_name): # exists nea geom path
2383
2387
  self.multi_xyz = Molecule.read_multi_xyz(self.nx_nea_geom_name)
2384
- # self.ML_point = len(self.multi_xyz) - 1 # keep the MLpoint the same with ML-NEA (except the equibrium geom)
2385
- if len(self.multi_xyz) - 1 >= self.ML_point:
2388
+ if len(self.multi_xyz) - 1 > self.ML_point:
2386
2389
  self.multi_xyz = self.multi_xyz[:self.ML_point + 1]
2390
+ elif len(self.multi_xyz) - 1 < self.ML_point:
2391
+ orig_xyz = self.multi_xyz
2392
+ self.opt_freq_calc(force_calc=True)
2393
+ NX_gen_ensemble()
2394
+ self.multi_xyz = orig_xyz + self.multi_xyz[len(orig_xyz): ]
2395
+ else: # not exists multiple nea geom data, need to calc it with NX
2396
+ NX_gen_ensemble()
2387
2397
 
2388
2398
  def ML_NEA_calc_all(self):
2389
2399
  self.cd(self.cs_ML.ML_path)
@@ -2393,7 +2403,7 @@ class RecurPaperProcedure(ArgParser, LinuxInterface):
2393
2403
  # self.gauss.process_gaussian_log(self.gauss.all_log_path, self.max_state, pattern='', regex=False)
2394
2404
  ctl_adapter = CtlPartAdapter(self, CtlPartAdapter.paper_adapter)
2395
2405
  self.cs_ML.define_data_set(this=ctl_adapter, TD_point=self.TD_point, xyz_file=self.nx_nea_geom_name,
2396
- max_state=self.max_state, delta=0.01)
2406
+ max_state=self.max_state, delta=self.delta_ML)
2397
2407
  self.cs_ML.ML_train_all()
2398
2408
 
2399
2409
  def ML_NEA_calc_iter(self):
@@ -1,5 +1,5 @@
1
1
  MLatom: a Package for Atomistic Simulations with Machine Learning
2
- Version 2.0.1
2
+ Version 2.0.5
3
3
  http://mlatom.com/
4
4
 
5
5
  Copyright (c) 2013-2021 Pavlo O. Dral
@@ -15,7 +15,7 @@ Cite as:
15
15
 
16
16
  1. Pavlo O. Dral, J. Comput. Chem. 2019, 40, 2339-2347
17
17
  2. Pavlo O. Dral, Fuchun Ge, Bao-Xin Xue, Yi-Fan Hou, Max Pinheiro Jr, Jianxing Huang, Mario Barbatti, Top. Curr. Chem. 2021, 379, 27
18
- 3. Pavlo O. Dral, Bao-Xin Xue, Fuchun Ge, Yi-Fan Hou, Max Pinheiro Jr, MLatom: A Package for Atomistic Simulations with Machine Learning, version 2.0.1, Xiamen University, Xiamen, China, 2013-2021.
18
+ 3. Pavlo O. Dral, Bao-Xin Xue, Fuchun Ge, Yi-Fan Hou, Max Pinheiro Jr, MLatom: A Package for Atomistic Simulations with Machine Learning, version 2.0.5, Xiamen University, Xiamen, China, 2013-2021.
19
19
 
20
20
  In addition to above citations in the published work, the users have to cite the relevant literature for the MLatom features used. Examples of suggested citations are provided on http://mlatom.com/features page in form of web links and in the output of MLatom.
21
21
 
File without changes
File without changes
File without changes
File without changes
File without changes