MultiOptPy 1.20.2__py3-none-any.whl
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.
- multioptpy/Calculator/__init__.py +0 -0
- multioptpy/Calculator/ase_calculation_tools.py +424 -0
- multioptpy/Calculator/ase_tools/__init__.py +0 -0
- multioptpy/Calculator/ase_tools/fairchem.py +28 -0
- multioptpy/Calculator/ase_tools/gamess.py +19 -0
- multioptpy/Calculator/ase_tools/gaussian.py +165 -0
- multioptpy/Calculator/ase_tools/mace.py +28 -0
- multioptpy/Calculator/ase_tools/mopac.py +19 -0
- multioptpy/Calculator/ase_tools/nwchem.py +31 -0
- multioptpy/Calculator/ase_tools/orca.py +22 -0
- multioptpy/Calculator/ase_tools/pygfn0.py +37 -0
- multioptpy/Calculator/dxtb_calculation_tools.py +344 -0
- multioptpy/Calculator/emt_calculation_tools.py +458 -0
- multioptpy/Calculator/gpaw_calculation_tools.py +183 -0
- multioptpy/Calculator/lj_calculation_tools.py +314 -0
- multioptpy/Calculator/psi4_calculation_tools.py +334 -0
- multioptpy/Calculator/pwscf_calculation_tools.py +189 -0
- multioptpy/Calculator/pyscf_calculation_tools.py +327 -0
- multioptpy/Calculator/sqm1_calculation_tools.py +611 -0
- multioptpy/Calculator/sqm2_calculation_tools.py +376 -0
- multioptpy/Calculator/tblite_calculation_tools.py +352 -0
- multioptpy/Calculator/tersoff_calculation_tools.py +818 -0
- multioptpy/Constraint/__init__.py +0 -0
- multioptpy/Constraint/constraint_condition.py +834 -0
- multioptpy/Coordinate/__init__.py +0 -0
- multioptpy/Coordinate/polar_coordinate.py +199 -0
- multioptpy/Coordinate/redundant_coordinate.py +638 -0
- multioptpy/IRC/__init__.py +0 -0
- multioptpy/IRC/converge_criteria.py +28 -0
- multioptpy/IRC/dvv.py +544 -0
- multioptpy/IRC/euler.py +439 -0
- multioptpy/IRC/hpc.py +564 -0
- multioptpy/IRC/lqa.py +540 -0
- multioptpy/IRC/modekill.py +662 -0
- multioptpy/IRC/rk4.py +579 -0
- multioptpy/Interpolation/__init__.py +0 -0
- multioptpy/Interpolation/adaptive_interpolation.py +283 -0
- multioptpy/Interpolation/binomial_interpolation.py +179 -0
- multioptpy/Interpolation/geodesic_interpolation.py +785 -0
- multioptpy/Interpolation/interpolation.py +156 -0
- multioptpy/Interpolation/linear_interpolation.py +473 -0
- multioptpy/Interpolation/savitzky_golay_interpolation.py +252 -0
- multioptpy/Interpolation/spline_interpolation.py +353 -0
- multioptpy/MD/__init__.py +0 -0
- multioptpy/MD/thermostat.py +185 -0
- multioptpy/MEP/__init__.py +0 -0
- multioptpy/MEP/pathopt_bneb_force.py +443 -0
- multioptpy/MEP/pathopt_dmf_force.py +448 -0
- multioptpy/MEP/pathopt_dneb_force.py +130 -0
- multioptpy/MEP/pathopt_ewbneb_force.py +207 -0
- multioptpy/MEP/pathopt_gpneb_force.py +512 -0
- multioptpy/MEP/pathopt_lup_force.py +113 -0
- multioptpy/MEP/pathopt_neb_force.py +225 -0
- multioptpy/MEP/pathopt_nesb_force.py +205 -0
- multioptpy/MEP/pathopt_om_force.py +153 -0
- multioptpy/MEP/pathopt_qsm_force.py +174 -0
- multioptpy/MEP/pathopt_qsmv2_force.py +304 -0
- multioptpy/ModelFunction/__init__.py +7 -0
- multioptpy/ModelFunction/avoiding_model_function.py +29 -0
- multioptpy/ModelFunction/binary_image_ts_search_model_function.py +47 -0
- multioptpy/ModelFunction/conical_model_function.py +26 -0
- multioptpy/ModelFunction/opt_meci.py +50 -0
- multioptpy/ModelFunction/opt_mesx.py +47 -0
- multioptpy/ModelFunction/opt_mesx_2.py +49 -0
- multioptpy/ModelFunction/seam_model_function.py +27 -0
- multioptpy/ModelHessian/__init__.py +0 -0
- multioptpy/ModelHessian/approx_hessian.py +147 -0
- multioptpy/ModelHessian/calc_params.py +227 -0
- multioptpy/ModelHessian/fischer.py +236 -0
- multioptpy/ModelHessian/fischerd3.py +360 -0
- multioptpy/ModelHessian/fischerd4.py +398 -0
- multioptpy/ModelHessian/gfn0xtb.py +633 -0
- multioptpy/ModelHessian/gfnff.py +709 -0
- multioptpy/ModelHessian/lindh.py +165 -0
- multioptpy/ModelHessian/lindh2007d2.py +707 -0
- multioptpy/ModelHessian/lindh2007d3.py +822 -0
- multioptpy/ModelHessian/lindh2007d4.py +1030 -0
- multioptpy/ModelHessian/morse.py +106 -0
- multioptpy/ModelHessian/schlegel.py +144 -0
- multioptpy/ModelHessian/schlegeld3.py +322 -0
- multioptpy/ModelHessian/schlegeld4.py +559 -0
- multioptpy/ModelHessian/shortrange.py +346 -0
- multioptpy/ModelHessian/swartd2.py +496 -0
- multioptpy/ModelHessian/swartd3.py +706 -0
- multioptpy/ModelHessian/swartd4.py +918 -0
- multioptpy/ModelHessian/tshess.py +40 -0
- multioptpy/Optimizer/QHAdam.py +61 -0
- multioptpy/Optimizer/__init__.py +0 -0
- multioptpy/Optimizer/abc_fire.py +83 -0
- multioptpy/Optimizer/adabelief.py +58 -0
- multioptpy/Optimizer/adabound.py +68 -0
- multioptpy/Optimizer/adadelta.py +65 -0
- multioptpy/Optimizer/adaderivative.py +56 -0
- multioptpy/Optimizer/adadiff.py +68 -0
- multioptpy/Optimizer/adafactor.py +70 -0
- multioptpy/Optimizer/adam.py +65 -0
- multioptpy/Optimizer/adamax.py +62 -0
- multioptpy/Optimizer/adamod.py +83 -0
- multioptpy/Optimizer/adamw.py +65 -0
- multioptpy/Optimizer/adiis.py +523 -0
- multioptpy/Optimizer/afire_neb.py +282 -0
- multioptpy/Optimizer/block_hessian_update.py +709 -0
- multioptpy/Optimizer/c2diis.py +491 -0
- multioptpy/Optimizer/component_wise_scaling.py +405 -0
- multioptpy/Optimizer/conjugate_gradient.py +82 -0
- multioptpy/Optimizer/conjugate_gradient_neb.py +345 -0
- multioptpy/Optimizer/coordinate_locking.py +405 -0
- multioptpy/Optimizer/dic_rsirfo.py +1015 -0
- multioptpy/Optimizer/ediis.py +417 -0
- multioptpy/Optimizer/eve.py +76 -0
- multioptpy/Optimizer/fastadabelief.py +61 -0
- multioptpy/Optimizer/fire.py +77 -0
- multioptpy/Optimizer/fire2.py +249 -0
- multioptpy/Optimizer/fire_neb.py +92 -0
- multioptpy/Optimizer/gan_step.py +486 -0
- multioptpy/Optimizer/gdiis.py +609 -0
- multioptpy/Optimizer/gediis.py +203 -0
- multioptpy/Optimizer/geodesic_step.py +433 -0
- multioptpy/Optimizer/gpmin.py +633 -0
- multioptpy/Optimizer/gpr_step.py +364 -0
- multioptpy/Optimizer/gradientdescent.py +78 -0
- multioptpy/Optimizer/gradientdescent_neb.py +52 -0
- multioptpy/Optimizer/hessian_update.py +433 -0
- multioptpy/Optimizer/hybrid_rfo.py +998 -0
- multioptpy/Optimizer/kdiis.py +625 -0
- multioptpy/Optimizer/lars.py +21 -0
- multioptpy/Optimizer/lbfgs.py +253 -0
- multioptpy/Optimizer/lbfgs_neb.py +355 -0
- multioptpy/Optimizer/linesearch.py +236 -0
- multioptpy/Optimizer/lookahead.py +40 -0
- multioptpy/Optimizer/nadam.py +64 -0
- multioptpy/Optimizer/newton.py +200 -0
- multioptpy/Optimizer/prodigy.py +70 -0
- multioptpy/Optimizer/purtubation.py +16 -0
- multioptpy/Optimizer/quickmin_neb.py +245 -0
- multioptpy/Optimizer/radam.py +75 -0
- multioptpy/Optimizer/rfo_neb.py +302 -0
- multioptpy/Optimizer/ric_rfo.py +842 -0
- multioptpy/Optimizer/rl_step.py +627 -0
- multioptpy/Optimizer/rmspropgrave.py +65 -0
- multioptpy/Optimizer/rsirfo.py +1647 -0
- multioptpy/Optimizer/rsprfo.py +1056 -0
- multioptpy/Optimizer/sadam.py +60 -0
- multioptpy/Optimizer/samsgrad.py +63 -0
- multioptpy/Optimizer/tr_lbfgs.py +678 -0
- multioptpy/Optimizer/trim.py +273 -0
- multioptpy/Optimizer/trust_radius.py +207 -0
- multioptpy/Optimizer/trust_radius_neb.py +121 -0
- multioptpy/Optimizer/yogi.py +60 -0
- multioptpy/OtherMethod/__init__.py +0 -0
- multioptpy/OtherMethod/addf.py +1150 -0
- multioptpy/OtherMethod/dimer.py +895 -0
- multioptpy/OtherMethod/elastic_image_pair.py +629 -0
- multioptpy/OtherMethod/modelfunction.py +456 -0
- multioptpy/OtherMethod/newton_traj.py +454 -0
- multioptpy/OtherMethod/twopshs.py +1095 -0
- multioptpy/PESAnalyzer/__init__.py +0 -0
- multioptpy/PESAnalyzer/calc_irc_curvature.py +125 -0
- multioptpy/PESAnalyzer/cmds_analysis.py +152 -0
- multioptpy/PESAnalyzer/koopman_analysis.py +268 -0
- multioptpy/PESAnalyzer/pca_analysis.py +314 -0
- multioptpy/Parameters/__init__.py +0 -0
- multioptpy/Parameters/atomic_mass.py +20 -0
- multioptpy/Parameters/atomic_number.py +22 -0
- multioptpy/Parameters/covalent_radii.py +44 -0
- multioptpy/Parameters/d2.py +61 -0
- multioptpy/Parameters/d3.py +63 -0
- multioptpy/Parameters/d4.py +103 -0
- multioptpy/Parameters/dreiding.py +34 -0
- multioptpy/Parameters/gfn0xtb_param.py +137 -0
- multioptpy/Parameters/gfnff_param.py +315 -0
- multioptpy/Parameters/gnb.py +104 -0
- multioptpy/Parameters/parameter.py +22 -0
- multioptpy/Parameters/uff.py +72 -0
- multioptpy/Parameters/unit_values.py +20 -0
- multioptpy/Potential/AFIR_potential.py +55 -0
- multioptpy/Potential/LJ_repulsive_potential.py +345 -0
- multioptpy/Potential/__init__.py +0 -0
- multioptpy/Potential/anharmonic_keep_potential.py +28 -0
- multioptpy/Potential/asym_elllipsoidal_potential.py +718 -0
- multioptpy/Potential/electrostatic_potential.py +69 -0
- multioptpy/Potential/flux_potential.py +30 -0
- multioptpy/Potential/gaussian_potential.py +101 -0
- multioptpy/Potential/idpp.py +516 -0
- multioptpy/Potential/keep_angle_potential.py +146 -0
- multioptpy/Potential/keep_dihedral_angle_potential.py +105 -0
- multioptpy/Potential/keep_outofplain_angle_potential.py +70 -0
- multioptpy/Potential/keep_potential.py +99 -0
- multioptpy/Potential/mechano_force_potential.py +74 -0
- multioptpy/Potential/nanoreactor_potential.py +52 -0
- multioptpy/Potential/potential.py +896 -0
- multioptpy/Potential/spacer_model_potential.py +221 -0
- multioptpy/Potential/switching_potential.py +258 -0
- multioptpy/Potential/universal_potential.py +34 -0
- multioptpy/Potential/value_range_potential.py +36 -0
- multioptpy/Potential/void_point_potential.py +25 -0
- multioptpy/SQM/__init__.py +0 -0
- multioptpy/SQM/sqm1/__init__.py +0 -0
- multioptpy/SQM/sqm1/sqm1_core.py +1792 -0
- multioptpy/SQM/sqm2/__init__.py +0 -0
- multioptpy/SQM/sqm2/calc_tools.py +95 -0
- multioptpy/SQM/sqm2/sqm2_basis.py +850 -0
- multioptpy/SQM/sqm2/sqm2_bond.py +119 -0
- multioptpy/SQM/sqm2/sqm2_core.py +303 -0
- multioptpy/SQM/sqm2/sqm2_data.py +1229 -0
- multioptpy/SQM/sqm2/sqm2_disp.py +65 -0
- multioptpy/SQM/sqm2/sqm2_eeq.py +243 -0
- multioptpy/SQM/sqm2/sqm2_overlapint.py +704 -0
- multioptpy/SQM/sqm2/sqm2_qm.py +578 -0
- multioptpy/SQM/sqm2/sqm2_rep.py +66 -0
- multioptpy/SQM/sqm2/sqm2_srb.py +70 -0
- multioptpy/Thermo/__init__.py +0 -0
- multioptpy/Thermo/normal_mode_analyzer.py +865 -0
- multioptpy/Utils/__init__.py +0 -0
- multioptpy/Utils/bond_connectivity.py +264 -0
- multioptpy/Utils/calc_tools.py +884 -0
- multioptpy/Utils/oniom.py +96 -0
- multioptpy/Utils/pbc.py +48 -0
- multioptpy/Utils/riemann_curvature.py +208 -0
- multioptpy/Utils/symmetry_analyzer.py +482 -0
- multioptpy/Visualization/__init__.py +0 -0
- multioptpy/Visualization/visualization.py +156 -0
- multioptpy/WFAnalyzer/MO_analysis.py +104 -0
- multioptpy/WFAnalyzer/__init__.py +0 -0
- multioptpy/Wrapper/__init__.py +0 -0
- multioptpy/Wrapper/autots.py +1239 -0
- multioptpy/Wrapper/ieip_wrapper.py +93 -0
- multioptpy/Wrapper/md_wrapper.py +92 -0
- multioptpy/Wrapper/neb_wrapper.py +94 -0
- multioptpy/Wrapper/optimize_wrapper.py +76 -0
- multioptpy/__init__.py +5 -0
- multioptpy/entrypoints.py +916 -0
- multioptpy/fileio.py +660 -0
- multioptpy/ieip.py +340 -0
- multioptpy/interface.py +1086 -0
- multioptpy/irc.py +529 -0
- multioptpy/moleculardynamics.py +432 -0
- multioptpy/neb.py +1267 -0
- multioptpy/optimization.py +1553 -0
- multioptpy/optimizer.py +709 -0
- multioptpy-1.20.2.dist-info/METADATA +438 -0
- multioptpy-1.20.2.dist-info/RECORD +246 -0
- multioptpy-1.20.2.dist-info/WHEEL +5 -0
- multioptpy-1.20.2.dist-info/entry_points.txt +9 -0
- multioptpy-1.20.2.dist-info/licenses/LICENSE +674 -0
- multioptpy-1.20.2.dist-info/top_level.txt +1 -0
multioptpy/interface.py
ADDED
|
@@ -0,0 +1,1086 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import sys
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
MultiOptPy
|
|
8
|
+
Copyright (C) 2023-2025 ss0832
|
|
9
|
+
|
|
10
|
+
This program is free software: you can redistribute it and/or modify
|
|
11
|
+
it under the terms of the GNU General Public License as published by
|
|
12
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
13
|
+
(at your option) any later version.
|
|
14
|
+
|
|
15
|
+
This program is distributed in the hope that it will be useful,
|
|
16
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
17
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
18
|
+
GNU General Public License for more details.
|
|
19
|
+
|
|
20
|
+
You should have received a copy of the GNU General Public License
|
|
21
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def ieipparser(parser, args_list=None):
|
|
26
|
+
parser = call_ieipparser(parser)
|
|
27
|
+
parser = parser_for_biasforce(parser)
|
|
28
|
+
|
|
29
|
+
# Pass the args_list to parser2args
|
|
30
|
+
args = parser2args(parser, args_list)
|
|
31
|
+
|
|
32
|
+
args.fix_atoms = []
|
|
33
|
+
args.gradient_fix_atoms = []
|
|
34
|
+
args.geom_info = ["0"]
|
|
35
|
+
args.projection_constrain = []
|
|
36
|
+
args.opt_fragment = []
|
|
37
|
+
args.oniom_flag = []
|
|
38
|
+
return args
|
|
39
|
+
|
|
40
|
+
def optimizeparser(parser, args_list=None):
|
|
41
|
+
parser = call_optimizeparser(parser)
|
|
42
|
+
parser = parser_for_biasforce(parser)
|
|
43
|
+
|
|
44
|
+
# Pass the args_list to parser2args
|
|
45
|
+
args = parser2args(parser, args_list)
|
|
46
|
+
|
|
47
|
+
# Handle INPUT logic safely
|
|
48
|
+
if isinstance(args.INPUT, list) and len(args.INPUT) == 1:
|
|
49
|
+
args.INPUT = args.INPUT[0]
|
|
50
|
+
|
|
51
|
+
args.constraint_condition = []
|
|
52
|
+
return args
|
|
53
|
+
|
|
54
|
+
def nebparser(parser, args_list=None):
|
|
55
|
+
parser = call_nebparser(parser)
|
|
56
|
+
parser = parser_for_biasforce(parser)
|
|
57
|
+
|
|
58
|
+
# Pass the args_list to parser2args
|
|
59
|
+
args = parser2args(parser, args_list)
|
|
60
|
+
|
|
61
|
+
args.geom_info = ["0"]
|
|
62
|
+
args.opt_method = ""
|
|
63
|
+
args.opt_fragment = []
|
|
64
|
+
args.oniom_flag = []
|
|
65
|
+
return args
|
|
66
|
+
|
|
67
|
+
def mdparser(parser, args_list=None):
|
|
68
|
+
parser = call_mdparser(parser)
|
|
69
|
+
parser = parser_for_biasforce(parser)
|
|
70
|
+
|
|
71
|
+
# Pass the args_list to parser2args
|
|
72
|
+
args = parser2args(parser, args_list)
|
|
73
|
+
|
|
74
|
+
args.geom_info = ["0"]
|
|
75
|
+
args.opt_method = ""
|
|
76
|
+
args.opt_fragment = []
|
|
77
|
+
args.oniom_flag = []
|
|
78
|
+
return args
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def call_ieipparser(parser):
|
|
82
|
+
parser.add_argument("INPUT", help='input folder')
|
|
83
|
+
parser.add_argument("-bs", "--basisset", default='6-31G(d)', help='basisset (ex. 6-31G*)')
|
|
84
|
+
parser.add_argument("-func", "--functional", default='b3lyp', help='functional(ex. b3lyp)')
|
|
85
|
+
parser.add_argument("-ns", "--NSTEP", type=int, default='999', help='iter. number')
|
|
86
|
+
|
|
87
|
+
parser.add_argument("-opt", "--opt_method", nargs="*", type=str, default=["FIRELARS"], help='optimization method for QM calclation (default: FIRE) (mehod_list:(steepest descent method group) FIRE, CG etc. (quasi-Newton method group) RFO_FSB, RFO_BFGS, RFO3_Bifill etc.) (notice you can combine two methods, steepest descent family and quasi-Newton method family. The later method is used if gradient is small enough. [[steepest descent] [quasi-Newton method]]) (ex.) [opt_method]')
|
|
88
|
+
parser.add_argument("-sub_bs", "--sub_basisset", type=str, nargs="*", default='', help='sub_basisset (ex. I LanL2DZ)')
|
|
89
|
+
parser.add_argument("-ecp", "--effective_core_potential", type=str, nargs="*", default='', help='ECP (ex. I LanL2DZ) (notice) If you assign ECP to all atoms of inputs, type "default (basis_set name)". ')
|
|
90
|
+
parser.add_argument("-gfix", "--gradient_fix_atoms", nargs="*", type=str, default="", help='set the gradient of internal coordinates between atoms to zero (ex.) [[atoms (ex.) 1,2] ...]')
|
|
91
|
+
parser.add_argument("-core", "--N_THREAD", type=int, default='8', help='threads')
|
|
92
|
+
parser.add_argument("-mi", "--microiter", type=int, default=0, help='microiteration for relaxing reaction pathways')
|
|
93
|
+
parser.add_argument("-beta", "--BETA", type=float, default='1.0', help='force for optimization')
|
|
94
|
+
parser.add_argument("-mem", "--SET_MEMORY", type=str, default='2GB', help='use mem(ex. 1GB)')
|
|
95
|
+
parser.add_argument("-es", "--excited_state", type=int, nargs="*", default=[0, 0],
|
|
96
|
+
help='calculate excited state (default: [0(initial state), 0(final state)]) (e.g.) if you set spin_multiplicity as 1 and set this option as "n", this program calculate S"n" state.')
|
|
97
|
+
parser.add_argument("-mf", "--model_function_mode", help="use model function to optimization (seam, avoiding, conical, mesx, meci)", type=str, default='None',)
|
|
98
|
+
parser.add_argument("-fc", "--calc_exact_hess", type=int, default=-1, help='calculate exact hessian per steps (ex.) [steps per one hess calculation]')
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
parser.add_argument("-xtb", "--usextb", type=str, default="None", help='use extended tight bonding method to calculate. default is not using extended tight binding method (ex.) GFN1-xTB, GFN2-xTB ')
|
|
102
|
+
parser.add_argument("-dxtb", "--usedxtb", type=str, default="None", help='use extended tight bonding method to calculate. default is not using extended tight binding method (This option is for dxtb module (hessian calculated by autograd diffential method is available.)) (ex.) GFN1-xTB, GFN2-xTB ')
|
|
103
|
+
parser.add_argument("-sqm1", "--sqm1", action='store_true', help='use experimental semiempirical method based on GFN0-xTB to calculate. default is not using semiempirical method.')
|
|
104
|
+
parser.add_argument("-sqm2", "--sqm2", action='store_true', help='use experimental semiempirical method based on GFN0-xTB to calculate. default is not using semiempirical method.')
|
|
105
|
+
parser.add_argument('-pyscf','--pyscf', help="use pyscf module.", action='store_true')
|
|
106
|
+
|
|
107
|
+
parser.add_argument('-u','--unrestrict', help="use unrestricted method (for radical reaction and excite state etc.)", action='store_true')
|
|
108
|
+
parser.add_argument("-elec", "--electronic_charge", type=int, nargs="*", default=[0, 0], help='formal electronic charge (ex.) [charge (0)]')
|
|
109
|
+
parser.add_argument("-spin", "--spin_multiplicity", type=int, nargs="*", default=[1, 1], help='spin multiplcity (if you use pyscf, please input S value (mol.spin = 2S = Nalpha - Nbeta)) (ex.) [multiplcity (0)]')
|
|
110
|
+
parser.add_argument("-cpcm", "--cpcm_solv_model", type=str, default=None, help='use CPCM solvent model for xTB (Defalut setting is not using this model.) (ex.) water')
|
|
111
|
+
parser.add_argument("-alpb", "--alpb_solv_model", type=str, default=None, help='use ALPB solvent model for xTB (Defalut setting is not using this model.) (ex.) water')#ref.: J. Chem. Theory Comput. 2021, 17, 7, 4250–4261 https://doi.org/10.1021/acs.jctc.1c00471
|
|
112
|
+
parser.add_argument("-grid", "--dft_grid", type=int, default=3, help="fineness of grid for DFT calculation (default: 3 (0~9))")
|
|
113
|
+
parser.add_argument("-os", "--othersoft", type=str, default="None", help='use other QM software. default is not using other QM software. (require python module, ASE (Atomic Simulation Environment)) (ex.) orca, gaussian, gamessus, mace_mp etc.')
|
|
114
|
+
parser.add_argument("-osp", "--software_path_file", type=str, default="./software_path.conf", help='read the list of file directory of other QM softwares to use them. default is current directory. (require python module, ASE (Atomic Simulation Environment)) (ex.) ./software_path.conf')
|
|
115
|
+
|
|
116
|
+
# Other Chain of State methods
|
|
117
|
+
parser.add_argument('-gnt','--use_gnt', help="Use GNT (Growing Newton Trajectory)", action='store_true')
|
|
118
|
+
parser.add_argument('-gnt_vec','--gnt_vec', help="set vector to calculate Newton trajectory (ex. 1,2,3 (default:calculate vector reactant to product) )", type=str, default=None)
|
|
119
|
+
parser.add_argument('-gnt_step','--gnt_step_len', help="set step length for Newton trajectory (default: 0.5)", type=float, default=0.5)
|
|
120
|
+
parser.add_argument('-gnt_mi','--gnt_microiter', help="max number of micro-iteration for Newton trajectory (default: 25)", type=int, default=25)
|
|
121
|
+
|
|
122
|
+
parser.add_argument('-addf','--use_addf', help="Use ADDF-like method (default: False)", action='store_true')
|
|
123
|
+
parser.add_argument('-addf_step','--addf_step_size', help="set step size for ADDF-like method (default: 0.1)", type=float, default=0.1)
|
|
124
|
+
parser.add_argument('-addf_num','--addf_step_num', help="set number of steps for ADDF-like method (default: 300)", type=int, default=300)
|
|
125
|
+
parser.add_argument('-addf_nadd','--number_of_add', help="set number of number of searching ADD (A larger ADD takes precedence.) for ADDF-like method (default: 5)", type=int, default=5)
|
|
126
|
+
|
|
127
|
+
parser.add_argument('-2pshs','--use_2pshs', help="Use 2PSHS-like method (default: False)", action='store_true')
|
|
128
|
+
parser.add_argument('-2pshs_step','--twoPshs_step_size', help="set step size for 2PSHS-like method (default: 0.05)", type=float, default=0.05)
|
|
129
|
+
parser.add_argument('-2pshs_num','--twoPshs_step_num', help="set number of steps for 2PSHS-like method (default: 300)", type=int, default=300)
|
|
130
|
+
|
|
131
|
+
parser.add_argument('-use_dimer','--use_dimer', help="Use Dimer method for searching direction of TS (default: False)", action='store_true'
|
|
132
|
+
)
|
|
133
|
+
parser.add_argument('-dimer_sep','--dimer_separation', help="set dimer separation (default: 0.0001)", type=float, default=0.0001)
|
|
134
|
+
parser.add_argument('-dimer_trial_angle','--dimer_trial_angle', help="set dimer trial angle (default: pi/32)", type=float, default=np.pi / 32.0)
|
|
135
|
+
parser.add_argument('-dimer_maxiter','--dimer_max_iterations', help="set max iterations for dimer method (default: 1000)", type=int, default=1000)
|
|
136
|
+
return parser
|
|
137
|
+
|
|
138
|
+
def call_optimizeparser(parser):
|
|
139
|
+
parser.add_argument("INPUT", help='input xyz file name', nargs="*")
|
|
140
|
+
parser.add_argument("-bs", "--basisset", default='6-31G(d)', help='basisset (ex. 6-31G*)')
|
|
141
|
+
parser.add_argument("-func", "--functional", default='b3lyp', help='functional(ex. b3lyp)')
|
|
142
|
+
parser.add_argument("-sub_bs", "--sub_basisset", type=str, nargs="*", default='', help='sub_basisset (ex. I LanL2DZ)')
|
|
143
|
+
parser.add_argument("-ecp", "--effective_core_potential", type=str, nargs="*", default='', help='ECP (ex. I LanL2DZ) (notice) If you assign ECP to all atoms of inputs, type "default (basis_set name)". ')
|
|
144
|
+
parser.add_argument("-es", "--excited_state", type=int, default=0, help='calculate excited state (default: 0) (e.g.) if you set spin_multiplicity as 1 and set this option as "n", this program calculate S"n" state.')
|
|
145
|
+
parser.add_argument("-ns", "--NSTEP", type=int, default='1000', help='number of iteration (default: 1000)')
|
|
146
|
+
parser.add_argument("-core", "--N_THREAD", type=int, default='8', help='threads')
|
|
147
|
+
parser.add_argument("-mem", "--SET_MEMORY", type=str, default='2GB', help='use mem(ex. 1GB)')
|
|
148
|
+
parser.add_argument("-d", "--DELTA", type=str, default='x', help='move step')
|
|
149
|
+
parser.add_argument("-tr", "--max_trust_radius", type=float, default=None, help='max trust radius to restrict step size (unit: ang.) (default: 0.1 for n-th order saddle point optimization, 0.5 for minimum point optimization) (notice: default minimum trust radius is 0.01)')
|
|
150
|
+
parser.add_argument("-mintr", "--min_trust_radius", type=float, default=0.01, help='min trust radius to restrict step size (unit: ang.) (default: 0.01) ')
|
|
151
|
+
parser.add_argument('-u','--unrestrict', help="use unrestricted method (for radical reaction and excite state etc.)", action='store_true')
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
parser.add_argument("-fix", "--fix_atoms", nargs="*", type=str, default="", help='fix atoms (ex.) [atoms (ex.) 1,2,3-6]')
|
|
155
|
+
parser.add_argument("-gi", "--geom_info", nargs="*", type=str, default="1", help='calculate atom distances, angles, and dihedral angles in every iteration (energy_profile is also saved.) (ex.) [atoms (ex.) 1,2,3-6]')
|
|
156
|
+
parser.add_argument("-dc", "--dissociate_check", nargs="*", type=str, default="10", help='Terminate calculation if distance between two fragments is exceed this value. (default) 10 [ang.]')
|
|
157
|
+
parser.add_argument("-opt", "--opt_method", nargs="*", type=str, default=["FIRELARS"], help='optimization method for QM calculation (default: FIRE) (mehod_list:(steepest descent method group) FIRE, CG etc. (quasi-Newton method group) rsirfo_fsb rsirfo_bofill etc.) (notice you can combine two methods, steepest descent family and quasi-Newton method family. The later method is used if gradient is small enough. [[steepest descent] [quasi-Newton method]]) (ex.) [opt_method]')
|
|
158
|
+
parser.add_argument("-fc", "--calc_exact_hess", type=int, default=-1, help='calculate exact hessian per geometry optimization steps and IRC steps (ex.) [steps per one hess calculation]')
|
|
159
|
+
parser.add_argument("-mfc", "--calc_model_hess", type=int, default=50, help='calculate model hessian per steps (ex.) [steps per one hess calculation]')
|
|
160
|
+
parser.add_argument("-xtb", "--usextb", type=str, default="None", help='use extended tight bonding method to calculate. default is not using extended tight binding method (ex.) GFN1-xTB, GFN2-xTB ')
|
|
161
|
+
parser.add_argument("-dxtb", "--usedxtb", type=str, default="None", help='use extended tight bonding method to calculate. default is not using extended tight binding method (This option is for dxtb module (hessian calculated by autograd differential method is available.)) (ex.) GFN1-xTB, GFN2-xTB ')
|
|
162
|
+
parser.add_argument("-sqm1", "--sqm1", action='store_true', help='use experimental semiempirical method based on GFN0-xTB to calculate. default is not using semiempirical method.')
|
|
163
|
+
parser.add_argument("-sqm2", "--sqm2", action='store_true', help='use experimental semiempirical method based on GFN0-xTB to calculate. default is not using semiempirical method.')
|
|
164
|
+
parser.add_argument("-cpcm", "--cpcm_solv_model", type=str, default=None, help='use CPCM solvent model for xTB (Default setting is not using this model.) (ex.) water')
|
|
165
|
+
parser.add_argument("-alpb", "--alpb_solv_model", type=str, default=None, help='use ALPB solvent model for xTB (Default setting is not using this model.) (ex.) water')#ref.: J. Chem. Theory Comput. 2021, 17, 7, 4250–4261 https://doi.org/10.1021/acs.jctc.1c00471
|
|
166
|
+
|
|
167
|
+
parser.add_argument('-pyscf','--pyscf', help="use pyscf module.", action='store_true')
|
|
168
|
+
parser.add_argument("-elec", "--electronic_charge", type=int, default=0, help='formal electronic charge (ex.) [charge (0)]')
|
|
169
|
+
parser.add_argument("-spin", "--spin_multiplicity", type=int, default=1, help='spin multiplicity (if you use pyscf, please input S value (mol.spin = 2S = Nalpha - Nbeta)) (ex.) [multiplicity (0)]')
|
|
170
|
+
parser.add_argument("-order", "--saddle_order", type=int, default=0, help='optimization for (n-1)-th order saddle point (Newton group of opt method (RFO) is only available.) (ex.) [order (0)]')
|
|
171
|
+
parser.add_argument('-cmds','--cmds', help="Apply classical multidimensional scaling to calculated approx. reaction path.", action='store_true')
|
|
172
|
+
parser.add_argument('-pca','--pca', help="Apply principal component analysis to calculated approx. reaction path.", action='store_true')
|
|
173
|
+
parser.add_argument('-km', '--koopman', help="Apply Koopman model to analyze the convergence", action='store_true')
|
|
174
|
+
parser.add_argument('-irc','--intrinsic_reaction_coordinates', help="Calculate intrinsic reaction coordinates. (ex.) [[step_size], [max_step], [IRC_method]] (Recommended) [0.5 300 lqa]", nargs="*", type=str, default=[])
|
|
175
|
+
parser.add_argument("-of", "--opt_fragment", nargs="*", type=str, default=[], help="Several atoms are grouped together as fragments and optimized. (This method does not work if you use quasi-newton method for optimazation.) (ex.) [[atoms (ex.) 1-4] ...] ")#(2024/3/26) this option doesn't work if you use quasi-Newton method for optimization.
|
|
176
|
+
parser.add_argument("-grid", "--dft_grid", type=int, default=3, help="fineness of grid for DFT calculation (default: 3 (0~9))")
|
|
177
|
+
parser.add_argument("-os", "--othersoft", type=str, default="None", help='use other QM software. default is not using other QM software. (require python module, ASE (Atomic Simulation Environment)) (ex.) orca, gaussian, gamessus, mace_mp etc.')
|
|
178
|
+
parser.add_argument("-osp", "--software_path_file", type=str, default="./software_path.conf", help='read the list of file directory of other QM softwares to use them. default is current directory. (require python module, ASE (Atomic Simulation Environment)) (ex.) ./software_path.conf')
|
|
179
|
+
parser.add_argument('-tcc','--tight_convergence_criteria', help="apply tight opt criteria.", action='store_true')
|
|
180
|
+
parser.add_argument('-lcc','--loose_convergence_criteria', help="apply loose opt criteria.", action='store_true')
|
|
181
|
+
|
|
182
|
+
class ModelhessAction(argparse.Action):
|
|
183
|
+
def __call__(self, parser, namespace, values, option_string=None):
|
|
184
|
+
if values is None:
|
|
185
|
+
setattr(namespace, self.dest, 'fischerd3')
|
|
186
|
+
else:
|
|
187
|
+
setattr(namespace, self.dest, values)
|
|
188
|
+
|
|
189
|
+
parser.add_argument('-modelhess','--use_model_hessian', nargs='?', help="use model hessian. (Default: not using model hessian If you specify only option, Improved Lindh + Grimme's D3 dispersion model hessian is used.) (ex. lindh, gfnff, gfn0xtb, fischer, fischerd3, fischerd4, schlegel, swart, lindh2007, lindh2007d3, lindh2007d4)", action=ModelhessAction, default=None)
|
|
190
|
+
parser.add_argument("-sc", "--shape_conditions", nargs="*", type=str, default=[], help="Exit optimization if these conditions are not satisfied. (e.g.) [[(ang.) gt(lt) 2,3 (bond)] [(deg.) gt(lt) 2,3,4 (bend)] ...] [[(deg.) gt(lt) 2,3,4,5 (torsion)] ...]")
|
|
191
|
+
parser.add_argument("-pc", "--projection_constrain", nargs="*", type=str, default=[], help='apply constrain conditions with projection of gradient and hessian (ex.) [[(constraint condition name) (atoms(ex. 1,2))] ...] ')
|
|
192
|
+
parser.add_argument("-oniom", "--oniom_flag", nargs="*", type=str, default=[], help='apply ONIOM method (low layer: GFN1-xTB) (ex.) [(atom_number of high layer (ex. 1,2))] (caution) -pc option is not available. If there are not link atoms, please input "none"')
|
|
193
|
+
parser.add_argument("-freq", "--frequency_analysis", help="Perform normal vibrational analysis after converging geometry optimization. (Caution: Unable to use this analysis with oniom method)", action='store_true')
|
|
194
|
+
parser.add_argument("-temp", "--temperature", type=float, default='298.15', help='temperatrue to calculate thermochemistry (Unit: K) (default: 298.15K)')
|
|
195
|
+
parser.add_argument("-press", "--pressure", type=float, default='101325', help='pressure to calculate thermochemistry (Unit: Pa) (default: 101325Pa)')
|
|
196
|
+
parser.add_argument("-negeigval", "--detect_negative_eigenvalues", help="Detect negative eigenvalues in the Hessian matrix at ITR. 0 if you caluculate exact hessian (-fc >0). If negative eigenvalues are not detected and saddle_order > 0, the optimization is stopped.", action='store_true')
|
|
197
|
+
|
|
198
|
+
return parser
|
|
199
|
+
|
|
200
|
+
def parser_for_biasforce(parser):
|
|
201
|
+
parser.add_argument("-ma", "--manual_AFIR", nargs="*", type=str, default=[], help='manual-AFIR (ex.) [[Gamma(kJ/mol)] [Fragm.1(ex. 1,2,3-5)] [Fragm.2] ...]')
|
|
202
|
+
parser.add_argument("-rp", "--repulsive_potential", nargs="*", type=str, default=[], help='Add LJ repulsive_potential based on UFF (ex.) [[well_scale] [dist_scale] [Fragm.1(ex. 1,2,3-5)] [Fragm.2] [scale or value(kJ/mol ang.)] ...]')
|
|
203
|
+
parser.add_argument("-rpv2", "--repulsive_potential_v2", nargs="*", type=str, default=[], help='Add LJ repulsive_potential based on UFF (ver.2) (eq. V = ε[A * (σ/r)^(rep) - B * (σ/r)^(attr)]) (ex.) [[well_scale] [dist_scale] [length (ang.)] [const. (rep)] [const. (attr)] [order (rep)] [order (attr)] [LJ center atom (1,2)] [target atoms (3-5,8)] [scale or value(kJ/mol ang.)] ...]')
|
|
204
|
+
parser.add_argument("-rpg", "--repulsive_potential_gaussian", nargs="*", type=str, default=[], help='Add LJ repulsive_potential based on UFF (ver.2) (eq. V = ε_LJ[(σ/r)^(12) - 2 * (σ/r)^(6)] - ε_gau * exp(-((r-σ_gau)/b)^2)) (ex.) [[LJ_well_depth (kJ/mol)] [LJ_dist (ang.)] [Gaussian_well_depth (kJ/mol)] [Gaussian_dist (ang.)] [Gaussian_range (ang.)] [Fragm.1 (1,2)] [Fragm.2 (3-5,8)] ...]')
|
|
205
|
+
|
|
206
|
+
parser.add_argument("-cp", "--cone_potential", nargs="*", type=str, default=[], help='Add cone type LJ repulsive_potential based on UFF (ex.) [[well_value (epsilon) (kJ/mol)] [dist (sigma) (ang.)] [cone angle (deg.)] [LJ center atom (1)] [three atoms (2,3,4) ] [target atoms (5-9)] ...]')
|
|
207
|
+
|
|
208
|
+
parser.add_argument("-fp", "--flux_potential", nargs="*", type=str, default=[], help='Add potential to make flow. ( k/p*(x-x_0)^p )(ex.) [[x,y,z (constant (a.u.))] [x,y,z (order)] [x,y,z coordinate (ang.)] [Fragm.(ex. 1,2,3-5)] ...]')
|
|
209
|
+
parser.add_argument("-kp", "--keep_pot", nargs="*", type=str, default=[], help='keep potential 0.5*k*(r - r0)^2 (ex.) [[spring const.(a.u.)] [keep distance (ang.)] [atom1,atom2] ...] ')
|
|
210
|
+
parser.add_argument("-kpv2", "--keep_pot_v2", nargs="*", type=str, default=[], help='keep potential_v2 0.5*k*(r - r0)^2 (ex.) [[spring const.(a.u.)] [keep distance (ang.)] [Fragm.1] [Fragm.2] ...] ')
|
|
211
|
+
parser.add_argument("-akp", "--anharmonic_keep_pot", nargs="*", type=str, default=[], help='Morse potential De*[1-exp(-((k/2*De)^0.5)*(r - r0))]^2 (ex.) [[potential well depth (a.u.)] [spring const.(a.u.)] [keep distance (ang.)] [atom1,atom2] ...] ')
|
|
212
|
+
parser.add_argument("-ka", "--keep_angle", nargs="*", type=str, default=[], help='keep angle 0.5*k*(θ - θ0)^2 (0 ~ 180 deg.) (ex.) [[spring const.(a.u.)] [keep angle (degrees)] [atom1,atom2,atom3] ...] ')
|
|
213
|
+
parser.add_argument("-kav2", "--keep_angle_v2", nargs="*", type=str, default=[], help='keep angle_v2 0.5*k*(θ - θ0)^2 (0 ~ 180 deg.) (ex.) [[spring const.(a.u.)] [keep angle (degrees)] [Fragm.1] [Fragm.2] [Fragm.3] ...] ')
|
|
214
|
+
parser.add_argument("-up", "--universal_potential", nargs="*", type=str, default=[], help="Potential to gather specified atoms to a single point (ex.) [[potential (kJ/mol)] [target atoms (1,2)] ...]")
|
|
215
|
+
|
|
216
|
+
parser.add_argument("-ddka", "--atom_distance_dependent_keep_angle", nargs="*", type=str, default=[], help='atom-distance-dependent keep angle (ex.) [[spring const.(a.u.)] [minimum keep angle (degrees)] [maximum keep angle (degrees)] [base distance (ang.)] [reference atom (1 atom)] [center atom (1 atom)] [atom1,atom2,atom3] ...] ')
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
parser.add_argument("-kda", "--keep_dihedral_angle", nargs="*", type=str, default=[], help='keep dihedral angle 0.5*k*(φ - φ0)^2 (0 ~ 180 deg.) (ex.) [[spring const.(a.u.)] [keep dihedral angle (degrees)] [atom1,atom2,atom3,atom4] ...] ')
|
|
220
|
+
parser.add_argument("-kopa", "--keep_out_of_plain_angle", nargs="*", type=str, default=[], help='keep_out_of_plain_angle 0.5*k*(φ - φ0)^2 (0 ~ 180 deg.) (ex.) [[spring const.(a.u.)] [keep out of plain angle (degrees)] [atom1,atom2,atom3,atom4] ...] ')
|
|
221
|
+
parser.add_argument("-kdav2", "--keep_dihedral_angle_v2", nargs="*", type=str, default=[], help='keep dihedral angle_v2 0.5*k*(φ - φ0)^2 (0 ~ 180 deg.) (ex.) [[spring const.(a.u.)] [keep dihedral angle (degrees)] [Fragm.1] [Fragm.2] [Fragm.3] [Fragm.4] ...] ')
|
|
222
|
+
parser.add_argument("-kdac", "--keep_dihedral_angle_cos", nargs="*", type=str, default=[], help='keep dihedral angle_cos k*[1 + cos(n * φ - (φ0 + pi))] (0 ~ 180 deg.) (ex.) [[potential const.(a.u.)] [angle const. (unitless)] [keep dihedral angle (degrees)] [Fragm.1] [Fragm.2] [Fragm.3] [Fragm.4] ...] ')
|
|
223
|
+
parser.add_argument("-kopav2", "--keep_out_of_plain_angle_v2", nargs="*", type=str, default=[], help='keep out_of_plain angle_v2 0.5*k*(φ - φ0)^2 (0 ~ 180 deg.) (ex.) [[spring const.(a.u.)] [keep out_of_plain angle (degrees)] [Fragm.1] [Fragm.2] [Fragm.3] [Fragm.4] ...] ')
|
|
224
|
+
parser.add_argument("-vpp", "--void_point_pot", nargs="*", type=str, default=[], help='void point keep potential (ex.) [[spring const.(a.u.)] [keep distance (ang.)] [void_point (x,y,z) (ang.)] [atoms(ex. 1,2,3-5)] [order p "(1/p)*k*(r - r0)^p"] ...] ')
|
|
225
|
+
|
|
226
|
+
parser.add_argument("-brp", "--bond_range_potential", nargs="*", type=str, default=[], help='Add potential to confine atom distance. (ex.) [[upper const.(a.u.)] [lower const.(a.u.)] [upper distance (ang.)] [lower distance (ang.)] [Fragm.1] [Fragm.2] ...] ')
|
|
227
|
+
parser.add_argument("-wp", "--well_pot", nargs="*", type=str, default=[], help="Add potential to limit atom distance. (ex.) [[wall energy (kJ/mol)] [fragm.1] [fragm.2] [a,b,c,d (a<b<c<d) (ang.)] ...]")
|
|
228
|
+
parser.add_argument("-wwp", "--wall_well_pot", nargs="*", type=str, default=[], help="Add potential to limit atoms movement. (like sandwich) (ex.) [[wall energy (kJ/mol)] [direction (x,y,z)] [a,b,c,d (a<b<c<d) (ang.)] [target atoms (1,2,3-5)] ...]")
|
|
229
|
+
parser.add_argument("-vpwp", "--void_point_well_pot", nargs="*", type=str, default=[], help="Add potential to limit atom movement. (like sphere) (ex.) [[wall energy (kJ/mol)] [coordinate (x,y,z) (ang.)] [a,b,c,d (a<b<c<d) (ang.)] [target atoms (1,2,3-5)] ...]")
|
|
230
|
+
parser.add_argument("-awp", "--around_well_pot", nargs="*", type=str, default=[], help="Add potential to limit atom movement. (like sphere around fragment) (ex.) [[wall energy (kJ/mol)] [center (1,2-4)] [a,b,c,d (a<b<c<d) (ang.)] [target atoms (2,3-5)] ...]")
|
|
231
|
+
parser.add_argument("-smp", "--spacer_model_potential", nargs="*", type=str, default=[], help="Add potential based on Morse potential to reproduce solvent molecules around molecule. (ex.) [[solvent particle well depth (kJ/mol)] [solvent particle e.q. distance (ang.)] [scaling of cavity (2.0)] [number of particles] [target atoms (2,3-5)] ...]")
|
|
232
|
+
parser.add_argument("-metad", "--metadynamics", nargs="*", type=str, default=[], help="apply meta-dynamics (use gaussian potential) (ex.) [[[bond] [potential height (kJ/mol)] [potential width (ang.)] [(atom1),(atom2)]] [[angle] [potential height (kJ/mol)] [potential width (deg.)] [(atom1),(atom2),(atom3)]] [[dihedral] [potential height (kJ/mol)] [potential width (deg.)] [(atom1),(atom2),(atom3),(atom4)]] [[outofplain] [potential height (kJ/mol)] [potential width (deg.)] [(atom1),(atom2),(atom3),(atom4)]]...] ")
|
|
233
|
+
parser.add_argument("-lmefp", "--linear_mechano_force_pot", nargs="*", type=str, default=[], help='add linear mechanochemical force (ex.) [[force(pN)] [atoms1(ex. 1,2)] [atoms2(ex. 3,4)] ...]')
|
|
234
|
+
parser.add_argument("-lmefpv2", "--linear_mechano_force_pot_v2", nargs="*", type=str, default=[], help='add linear mechanochemical force (ex.) [[force(pN)] [atom(ex. 1)] [direction (xyz)] ...]')
|
|
235
|
+
parser.add_argument("-aerp", "--asymmetric_ellipsoidal_repulsive_potential", nargs="*", type=str, default=[], help='add asymmetric ellipsoidal repulsive potential (use GNB parameters (JCTC, 2024)) (ex.) [[well_value (epsilon) (kJ/mol)] [dist_value (sigma) (a1,a2,b1,b2,c1,c2) (ang.)] [dist_value (distance) (ang.)] [target atom (1,2)] [off target atoms (3-5)] ...]')
|
|
236
|
+
parser.add_argument("-aerpv2", "--asymmetric_ellipsoidal_repulsive_potential_v2", nargs="*", type=str, default=[], help='add asymmetric ellipsoidal repulsive potential (ex.) [[well_value (epsilon) (kJ/mol)] [dist_value (sigma) (a1,a2,b1,b2,c1,c2) (ang.)] [dist_value (distance) (ang.)] [target atom (1,2)] [off target atoms (3-5)] ...]')
|
|
237
|
+
parser.add_argument("-nrp", "--nano_reactor_potential", nargs="*", type=str, default=[], help='add nano reactor potential (ex.) [[inner wall (ang.)] [outer wall (ang.)] [contraction time (ps)] [expansion time (ps)] [contraction force const (kcal/mol/A^2)] [expansion force const (kcal/mol/A^2)]] (Recommendation: 8.0 14.0 1.5 0.5 1.0 0.5)')
|
|
238
|
+
return parser
|
|
239
|
+
|
|
240
|
+
def call_nebparser(parser):
|
|
241
|
+
parser.add_argument("INPUT", help='input folder', nargs="*")
|
|
242
|
+
parser.add_argument("-bs", "--basisset", default='6-31G(d)', help='basisset (ex. 6-31G*)')
|
|
243
|
+
parser.add_argument("-sub_bs", "--sub_basisset", type=str, nargs="*", default='', help='sub_basisset (ex. I LanL2DZ)')
|
|
244
|
+
parser.add_argument("-ecp", "--effective_core_potential", type=str, nargs="*", default='', help='ECP (ex. I LanL2DZ) (notice) If you assign ECP to all atoms of inputs, type "default (basis_set name)". ')
|
|
245
|
+
parser.add_argument("-func", "--functional", default='b3lyp', help='functional(ex. b3lyp)')
|
|
246
|
+
parser.add_argument('-u','--unrestrict', help="use unrestricted method (for radical reaction and excite state etc.)", action='store_true')
|
|
247
|
+
parser.add_argument("-es", "--excited_state", type=int, default=0, help='calculate excited state (default: 0) (e.g.) if you set spin_multiplicity as 1 and set this option as "n", this program calculate S"n" state.')
|
|
248
|
+
|
|
249
|
+
parser.add_argument("-ns", "--NSTEP", type=int, default='10', help='iter. number')
|
|
250
|
+
parser.add_argument("-om", "--OM", action='store_true', help='J. Chem. Phys. 155, 074103 (2021) doi:https://doi.org/10.1063/5.0059593 This improved NEB method is inspired by the Onsager-Machlup (OM) action.')
|
|
251
|
+
parser.add_argument("-lup", "--LUP", action='store_true', help='J. Chem. Phys. 92, 1510–1511 (1990) doi:https://doi.org/10.1063/1.458112 locally updated planes (LUP) method')
|
|
252
|
+
parser.add_argument("-bneb", "--BNEB", action='store_true', help="NEB using Wilson's B matrix for calculating the perpendicular force.")
|
|
253
|
+
parser.add_argument("-bneb2", "--BNEB2", action='store_true', help="NEB using Wilson's B matrix for calculating the perpendicular force with parallel spring force.")
|
|
254
|
+
parser.add_argument("-dneb", "--DNEB", action='store_true', help='J. Chem. Phys. 120, 2082–2094 (2004) doi:https://doi.org/10.1063/1.1636455 doubly NEB method (DNEB) method')
|
|
255
|
+
parser.add_argument("-nesb", "--NESB", action='store_true', help='J Comput Chem. 2023;44:1884–1897. https://doi.org/10.1002/jcc.27169 Nudged elastic stiffness band (NESB) method')
|
|
256
|
+
parser.add_argument("-dmf", "--DMF", action='store_true', help='Direct Max Flux (DMF) method')
|
|
257
|
+
parser.add_argument("-ewbneb", "--EWBNEB", action='store_true', help='Energy-weighted Nudged elastic band method')
|
|
258
|
+
parser.add_argument("-qsm", "--QSM", action='store_true', help='Quadratic String Method (J. Chem. Phys. 124, 054109 (2006))')
|
|
259
|
+
parser.add_argument("-qsmv2", "--QSMv2", action='store_true', help='Quadratic String Method v2 (J. Chem. Phys. 124, 054109 (2006))')
|
|
260
|
+
parser.add_argument("-aneb", "--ANEB", default=None, nargs="*", help='Adaptic NEB method (ref.: J. Chem. Phys. 117, 4651 (2002)) (Usage: -aneb [interpolation_num (ex. 2)] [frequency (ex. 5)], Default setting is not applying adaptic NEB method.)')
|
|
261
|
+
|
|
262
|
+
parser.add_argument("-idpp", "--use_image_dependent_pair_potential", action='store_true', help='use image dependent pair potential (IDPP) method (ref. arXiv:1406.1512v1)')
|
|
263
|
+
parser.add_argument("-cfbenm", "--use_correlated_flat_bottom_elastic_network_model", action='store_true', help='use correlated flat-bottom elastic network model (CFBENM) method (ref. s: J.Chem.TheoryComput.2025,21,3513−3522)')
|
|
264
|
+
parser.add_argument("-ad", "--align_distances", type=int, default=0, help='distribute images at equal intervals on the reaction coordinate')
|
|
265
|
+
parser.add_argument("-adene", "--align_distances_energy", type=int, default=0, help='distribute images at energy-weighted intervals on the reaction coordinate')
|
|
266
|
+
parser.add_argument("-adpred", "--align_distances_energy_predicted", type=int, default=0, help='distribute images at intervals on the reaction coordinate using cubic predicted interpolation')
|
|
267
|
+
parser.add_argument("-ads", "--align_distances_spline", type=int, default=0, help='distribute images at equal intervals on the reaction coordinate using spline interpolation')
|
|
268
|
+
parser.add_argument("-ads2", "--align_distances_spline_ver2", type=int, default=0, help='distribute images at equal intervals on the reaction coordinate using spline interpolation ver.2')
|
|
269
|
+
parser.add_argument("-adg", "--align_distances_geodesic", type=int, default=0, help='distribute images at equal intervals on the reaction coordinate using geodesic interpolation')
|
|
270
|
+
parser.add_argument("-adb", "--align_distances_bernstein", type=int, default=0, help='distribute images at equal intervals on the reaction coordinate using Bernstein interpolation')
|
|
271
|
+
parser.add_argument("-adbene", "--align_distances_bernstein_energy", type=int, default=0, help='distribute images at energy-weighted intervals on the reaction coordinate using Bernstein interpolation')
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
parser.add_argument("-adadene", "--align_distances_adaptive_energy", type=int, default=0, help='distribute images at energy-weighted intervals on the reaction coordinate using Adaptive Geometry + Energy interpolation')
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
parser.add_argument("-adsg", "--align_distances_savgol", type=str, default="0,0,0", help='distribute images at equal intervals on the reaction coordinate using Savitzky-Golay interpolation (ex.) [[iteration(int)],[window_size(int, 5 is recommended)],[poly_order(int) 3 is recommended]] (default: 0,0,0 (not using Savitzky-Golay interpolation))')
|
|
279
|
+
|
|
280
|
+
parser.add_argument("-nd", "--node_distance", type=float, default=None, help='distribute images at equal intervals linearly based ont specific distance (ex.) [distance (ang.)] (default: None)')
|
|
281
|
+
parser.add_argument("-nds", "--node_distance_spline", type=float, default=None, help='distribute images at equal intervals using spline interpolation based ont specific distance (ex.) [distance (ang.)] (default: None)')
|
|
282
|
+
parser.add_argument("-ndb", "--node_distance_bernstein", type=float, default=None, help='distribute images at equal intervals using Bernstein interpolation based ont specific distance (ex.) [distance (ang.)] (default: None)')
|
|
283
|
+
parser.add_argument("-ndsg", "--node_distance_savgol", type=str, default=None, help='distribute images at equal intervals using Savitzky-Golay interpolation based ont specific distance (ex.) [[distance (ang.)],[window_size(int, 5 is recommended)],[poly_order(int) 3 is recommended]] (default: None)')
|
|
284
|
+
parser.add_argument("-p", "--partition", type=int, default='0', help='number of nodes')
|
|
285
|
+
parser.add_argument("-core", "--N_THREAD", type=int, default='8', help='threads')
|
|
286
|
+
parser.add_argument("-mem", "--SET_MEMORY", type=str, default='1GB', help='use mem(ex. 1GB)')
|
|
287
|
+
parser.add_argument("-cineb", "--apply_CI_NEB", type=int, default='99999', help='apply CI_NEB method')
|
|
288
|
+
parser.add_argument("-sd", "--steepest_descent", type=int, default='99999', help='apply steepest_descent method')
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
class CGAction(argparse.Action):
|
|
292
|
+
def __call__(self, parser, namespace, values, option_string=None):
|
|
293
|
+
if values is None:
|
|
294
|
+
setattr(namespace, self.dest, 'HS')
|
|
295
|
+
else:
|
|
296
|
+
setattr(namespace, self.dest, values)
|
|
297
|
+
|
|
298
|
+
parser.add_argument("-cg", "--conjugate_gradient", nargs='?', help='apply conjugate_gradient method for path optimization (Available update method of CG parameters :FR, PR, HS, DY, HZ), default update method is HS.) ', action=CGAction, default=False)
|
|
299
|
+
parser.add_argument("-lbfgs", "--memory_limited_BFGS", action='store_true', help='apply L-BFGS method for path optimization ')
|
|
300
|
+
parser.add_argument("-notsopt", "--not_ts_optimization", action='store_true', help='not apply TS optimization during NEB calculation')
|
|
301
|
+
parser.add_argument("-fc", "--calc_exact_hess", type=int, default=-1, help='calculate exact hessian per steps (ex.) [steps per one hess calculation]')
|
|
302
|
+
parser.add_argument("-gqnt", "--global_quasi_newton", action='store_true', help='use global quasi-Newton method')
|
|
303
|
+
|
|
304
|
+
parser.add_argument("-xtb", "--usextb", type=str, default="None", help='use extended tight bonding method to calculate. default is not using extended tight binding method (ex.) GFN1-xTB, GFN2-xTB ')
|
|
305
|
+
parser.add_argument("-dxtb", "--usedxtb", type=str, default="None", help='use extended tight bonding method to calculate. default is not using extended tight binding method (This option is for dxtb module (hessian calculated by autograd diffential method is available.)) (ex.) GFN1-xTB, GFN2-xTB ')
|
|
306
|
+
parser.add_argument("-sqm1", "--sqm1", action='store_true', help='use experimental semiempirical method based on GFN0-xTB to calculate. default is not using semiempirical method.')
|
|
307
|
+
parser.add_argument("-sqm2", "--sqm2", action='store_true', help='use experimental semiempirical method based on GFN0-xTB to calculate. default is not using semiempirical method.')
|
|
308
|
+
parser.add_argument('-pyscf','--pyscf', help="use pyscf module.", action='store_true')
|
|
309
|
+
parser.add_argument("-fe", "--fixedges", type=int, default=0, help='fix edges of nodes (1=initial_node, 2=end_node, 3=both_nodes) ')
|
|
310
|
+
parser.add_argument("-fix", "--fix_atoms", nargs="*", type=str, default=[], help='fix atoms (ex.) [atoms (ex.) 1,2,3-6]')
|
|
311
|
+
parser.add_argument("-pc", "--projection_constrain", nargs="*", type=str, default=[], help='apply constrain conditions with projection of gradient and hessian (ex.) [[(constraint condition name) (atoms(ex. 1,2))] ...] ')
|
|
312
|
+
parser.add_argument("-cpcm", "--cpcm_solv_model", type=str, default=None, help='use CPCM solvent model for xTB (Defalut setting is not using this model.) (ex.) water')
|
|
313
|
+
parser.add_argument("-alpb", "--alpb_solv_model", type=str, default=None, help='use ALPB solvent model for xTB (Defalut setting is not using this model.) (ex.) water')#ref.: J. Chem. Theory Comput. 2021, 17, 7, 4250–4261 https://doi.org/10.1021/acs.jctc.1c00471
|
|
314
|
+
parser.add_argument("-spng", "--save_pict", action='store_true', help='Save picture for visualization.')
|
|
315
|
+
parser.add_argument("-aconv", "--apply_convergence_criteria", action='store_true', help='Apply convergence criteria for NEB calculation.')
|
|
316
|
+
parser.add_argument("-ci", "--climbing_image", type=int, default=[999999, 999999], nargs="*", help='climbing image for NEB calculation. (start of ITR., interval) The default setting is not using climbing image.')
|
|
317
|
+
parser.add_argument("-elec", "--electronic_charge", type=int, default=0, help='formal electronic charge (ex.) [charge (0)]')
|
|
318
|
+
parser.add_argument("-spin", "--spin_multiplicity", type=int, default=1, help='spin multiplcity (if you use pyscf, please input S value (mol.spin = 2S = Nalpha - Nbeta)) (ex.) [multiplcity (0)]')
|
|
319
|
+
parser.add_argument("-grid", "--dft_grid", type=int, default=3, help="fineness of grid for DFT calculation (default: 3 (0~9))")
|
|
320
|
+
|
|
321
|
+
class ModelhessAction(argparse.Action):
|
|
322
|
+
def __call__(self, parser, namespace, values, option_string=None):
|
|
323
|
+
if values is None:
|
|
324
|
+
setattr(namespace, self.dest, 'fischerd3')
|
|
325
|
+
else:
|
|
326
|
+
setattr(namespace, self.dest, values)
|
|
327
|
+
|
|
328
|
+
parser.add_argument('-modelhess','--use_model_hessian', nargs='?', help="use model hessian. (Default: not using model hessian If you specify only option, Fischer + Grimme's D3 dispersion model hessian is used.) (ex. lindh, gfnff, gfn0xtb, fischer, fischerd3, fischerd4, schlegel, swart, lindh2007, lindh2007d3, lindh2007d4)", action=ModelhessAction, default=None)
|
|
329
|
+
parser.add_argument("-mfc", "--calc_model_hess", type=int, default=50, help='calculate model hessian per steps (ex.) [steps per one hess calculation]')
|
|
330
|
+
parser.add_argument("-os", "--othersoft", type=str, default="None", help='use other QM software. default is not using other QM software. (require python module, ASE (Atomic Simulation Environment)) (ex.) orca, gaussian, gamessus, mace_mp etc.')
|
|
331
|
+
parser.add_argument("-osp", "--software_path_file", type=str, default="./software_path.conf", help='read the list of file directory of other QM softwares to use them. default is current directory. (require python module, ASE (Atomic Simulation Environment)) (ex.) ./software_path.conf')
|
|
332
|
+
parser.add_argument("-rrs", "--ratio_of_rfo_step", type=float, default=0.5, help='ratio of rfo step (default: 0.5). This option is for optimizer using Hessian (-fc or -modelhess).')
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
return parser
|
|
336
|
+
|
|
337
|
+
def call_mdparser(parser):
|
|
338
|
+
parser.add_argument("INPUT", help='input psi4 files')
|
|
339
|
+
parser.add_argument("-bs", "--basisset", default='6-31G(d)', help='basisset (ex. 6-31G*)')
|
|
340
|
+
parser.add_argument("-func", "--functional", default='b3lyp', help='functional(ex. b3lyp)')
|
|
341
|
+
parser.add_argument("-sub_bs", "--sub_basisset", type=str, nargs="*", default='', help='sub_basisset (ex. I LanL2DZ)')
|
|
342
|
+
parser.add_argument("-ecp", "--effective_core_potential", type=str, nargs="*", default='', help='ECP (ex. I LanL2DZ) (notice) If you assign ECP to all atoms of inputs, type "default (basis_set name)". ')
|
|
343
|
+
parser.add_argument("-es", "--excited_state", type=int, default=0,
|
|
344
|
+
help='calculate excited state (default: 0) (e.g.) if you set spin_multiplicity as 1 and set this option as "n", this program calculate S"n" state.')
|
|
345
|
+
parser.add_argument("-addint", "--additional_inputs", type=int, nargs="*", default=[], help=' (ex.) [(excited state) (fromal charge) (spin multiplicity) ...]')
|
|
346
|
+
parser.add_argument("-time", "--NSTEP", type=int, default='100000', help='time scale')
|
|
347
|
+
parser.add_argument("-traj", "--TRAJECTORY", type=int, default='1', help='number of trajectory to generate (default) 1')
|
|
348
|
+
|
|
349
|
+
parser.add_argument("-temp", "--temperature", type=float, default='298.15', help='temperature [unit. K] (default) 298.15 K')
|
|
350
|
+
parser.add_argument("-ts", "--timestep", type=float, default=0.1, help='time step [unit. atom unit] (default) 0.1 a.u.')
|
|
351
|
+
parser.add_argument("-press", "--pressure", type=float, default='101.3', help='pressure [unit. kPa] (default) 1013 kPa')
|
|
352
|
+
|
|
353
|
+
parser.add_argument("-core", "--N_THREAD", type=int, default='8', help='threads')
|
|
354
|
+
parser.add_argument("-mem", "--SET_MEMORY", type=str, default='1GB', help='use mem(ex. 1GB)')
|
|
355
|
+
parser.add_argument('-u','--unrestrict', help="use unrestricted method (for radical reaction and excite state etc.)", action='store_true')
|
|
356
|
+
parser.add_argument("-mt", "--mdtype", type=str, default='nosehoover', help='specify condition to do MD (ex.) velocityverlet (default) nosehoover')
|
|
357
|
+
|
|
358
|
+
parser.add_argument("-fix", "--fix_atoms", nargs="*", type=str, default="", help='fix atoms (ex.) [atoms (ex.) 1,2,3-6]')
|
|
359
|
+
parser.add_argument("-gi", "--geom_info", nargs="*", type=str, default="1", help='calculate atom distances, angles, and dihedral angles in every iteration (energy_profile is also saved.) (ex.) [atoms (ex.) 1,2,3-6]')
|
|
360
|
+
parser.add_argument('-pyscf','--pyscf', help="use pyscf module.", action='store_true')
|
|
361
|
+
parser.add_argument("-elec", "--electronic_charge", type=int, default=0, help='formal electronic charge (ex.) [charge (0)]')
|
|
362
|
+
parser.add_argument("-spin", "--spin_multiplicity", type=int, default=1, help='spin multiplcity (if you use pyscf, please input S value (mol.spin = 2S = Nalpha - Nbeta)) (ex.) [multiplcity (0)]')
|
|
363
|
+
parser.add_argument("-order", "--saddle_order", type=int, default=0, help='optimization for (n-1)-th order saddle point (Newton group of opt method (RFO) is only available.) (ex.) [order (0)]')
|
|
364
|
+
parser.add_argument('-cmds','--cmds', help="apply classical multidimensional scaling to calculated approx. reaction path.", action='store_true')
|
|
365
|
+
parser.add_argument("-xtb", "--usextb", type=str, default="None", help='use extended tight bonding method to calculate. default is GFN2-xTB (ex.) GFN1-xTB, GFN2-xTB ')
|
|
366
|
+
parser.add_argument("-sqm1", "--sqm1", action='store_true', help='use experimental semiempirical method based on GFN0-xTB to calculate. default is not using semiempirical method.')
|
|
367
|
+
parser.add_argument("-sqm2", "--sqm2", action='store_true', help='use experimental semiempirical method based on GFN0-xTB to calculate. default is not using semiempirical method.')
|
|
368
|
+
parser.add_argument("-ct", "--change_temperature", type=str, nargs="*", default=[], help='change temperature of thermostat (defalut) No change (ex.) [1000(time), 500(K) 5000(time), 1000(K)...]')
|
|
369
|
+
parser.add_argument("-cc", "--constraint_condition", nargs="*", type=str, default=[], help="apply constraint conditions for optimazation (ex.) [[(dinstance (ang.)), (atom1),(atom2)] [(bond_angle (deg.)), (atom1),(atom2),(atom3)] [(dihedral_angle (deg.)), (atom1),(atom2),(atom3),(atom4)] ...] ")
|
|
370
|
+
parser.add_argument("-os", "--othersoft", type=str, default="None", help='use other QM software. default is not using other QM software. (require python module, ASE (Atomic Simulation Environment)) (ex.) orca, gaussian, gamessus, mace_mp etc.')
|
|
371
|
+
parser.add_argument("-osp", "--software_path_file", type=str, default="./software_path.conf", help='read the list of file directory of other QM softwares to use them. default is current directory. (require python module, ASE (Atomic Simulation Environment)) (ex.) ./software_path.conf')
|
|
372
|
+
parser.add_argument("-pbc", "--periodic_boundary_condition", type=str, default=[], help='apply periodic boundary condition (Default is not applying.) (ex.) [periodic boundary (x,y,z) (ang.)] ')
|
|
373
|
+
parser.add_argument("-pc", "--projection_constrain", nargs="*", type=str, default=[], help='apply constrain conditions with projection of gradient and hessian (ex.) [[(constraint condition name) (atoms(ex. 1,2))] ...] ')
|
|
374
|
+
parser.add_argument("-cpcm", "--cpcm_solv_model", type=str, default=None, help='use CPCM solvent model for xTB (Defalut setting is not using this model.) (ex.) water')
|
|
375
|
+
parser.add_argument("-alpb", "--alpb_solv_model", type=str, default=None, help='use ALPB solvent model for xTB (Defalut setting is not using this model.) (ex.) water')#ref.: J. Chem. Theory Comput. 2021, 17, 7, 4250–4261 https://doi.org/10.1021/acs.jctc.1c00471
|
|
376
|
+
parser.add_argument('-pca','--pca', help="Apply principal component analysis to calculated approx. reaction path.", action='store_true')
|
|
377
|
+
parser.add_argument("-grid", "--dft_grid", type=int, default=3, help="fineness of grid for DFT calculation (default: 3 (0~9))")
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
return parser
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
def init_parser():
|
|
385
|
+
parser = argparse.ArgumentParser()
|
|
386
|
+
return parser
|
|
387
|
+
|
|
388
|
+
def parser2args(parser, args_list=None):
|
|
389
|
+
"""
|
|
390
|
+
Parses arguments and returns the args namespace.
|
|
391
|
+
|
|
392
|
+
If args_list is None, it parses from sys.argv[1:] (command line).
|
|
393
|
+
If args_list is provided (e.g., []), it parses from that list.
|
|
394
|
+
"""
|
|
395
|
+
if args_list is None:
|
|
396
|
+
# Original behavior: parse from command line
|
|
397
|
+
args = parser.parse_args()
|
|
398
|
+
else:
|
|
399
|
+
# New behavior: parse from the provided list
|
|
400
|
+
args = parser.parse_args(args_list)
|
|
401
|
+
return args
|
|
402
|
+
|
|
403
|
+
def force_data_parser(args):
|
|
404
|
+
def num_parse(numbers):
|
|
405
|
+
sub_list = []
|
|
406
|
+
|
|
407
|
+
sub_tmp_list = numbers.split(",")
|
|
408
|
+
for sub in sub_tmp_list:
|
|
409
|
+
if "-" in sub:
|
|
410
|
+
for j in range(int(sub.split("-")[0]),int(sub.split("-")[1])+1):
|
|
411
|
+
sub_list.append(j)
|
|
412
|
+
else:
|
|
413
|
+
sub_list.append(int(sub))
|
|
414
|
+
return sub_list
|
|
415
|
+
force_data = {}
|
|
416
|
+
#---------------------
|
|
417
|
+
force_data["oniom_flag"] = []
|
|
418
|
+
|
|
419
|
+
if len(args.oniom_flag) == 3:
|
|
420
|
+
high_layer = num_parse(args.oniom_flag[0])
|
|
421
|
+
if str(args.oniom_flag[1]).lower() == "none":
|
|
422
|
+
link_atoms = []
|
|
423
|
+
else:
|
|
424
|
+
link_atoms = num_parse(args.oniom_flag[1])
|
|
425
|
+
low_layer_model = args.oniom_flag[2]
|
|
426
|
+
force_data["oniom_flag"] = [high_layer, link_atoms, low_layer_model]
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
elif len(args.oniom_flag) == 0:
|
|
430
|
+
force_data["oniom_flag"] = []
|
|
431
|
+
else:
|
|
432
|
+
print("invaild input (-oniom) ")
|
|
433
|
+
sys.exit(0)
|
|
434
|
+
|
|
435
|
+
#---------------------
|
|
436
|
+
force_data["nano_reactor_potential"] = []
|
|
437
|
+
if len(args.nano_reactor_potential) % 6 != 0:
|
|
438
|
+
print("invaild input (-nrp) ")
|
|
439
|
+
sys.exit(0)
|
|
440
|
+
|
|
441
|
+
### add nano reactor potential (ex.) [[inner wall (ang.)] [outer wall (ang.)] [contraction time (ps)] [expansion time (ps)]]
|
|
442
|
+
for i in range(int(len(args.nano_reactor_potential)/6)):
|
|
443
|
+
force_data["nano_reactor_potential"].append([float(args.nano_reactor_potential[6*i]), float(args.nano_reactor_potential[6*i+1]), float(args.nano_reactor_potential[6*i+2]), float(args.nano_reactor_potential[6*i+3]), float(args.nano_reactor_potential[6*i+4]), float(args.nano_reactor_potential[6*i+5])])
|
|
444
|
+
|
|
445
|
+
#---------------------
|
|
446
|
+
force_data["projection_constraint_constant"] = []
|
|
447
|
+
force_data["projection_constraint_condition_list"] = []
|
|
448
|
+
force_data["projection_constraint_atoms"] = []
|
|
449
|
+
if len(args.projection_constrain) > 0:
|
|
450
|
+
if args.projection_constrain[0] == "manual":
|
|
451
|
+
if len(args.projection_constrain) % 4 != 0:
|
|
452
|
+
print("invaild input (-pc) ")
|
|
453
|
+
sys.exit(0)
|
|
454
|
+
|
|
455
|
+
tmp_val = args.projection_constrain
|
|
456
|
+
for i in range(int(len(tmp_val)/4)):
|
|
457
|
+
force_data["projection_constraint_condition_list"].append(str(tmp_val[4*i+1]))
|
|
458
|
+
force_data["projection_constraint_atoms"].append(num_parse(tmp_val[4*i+2]))
|
|
459
|
+
force_data["projection_constraint_constant"].append(float(tmp_val[4*i+3]))
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
else:#auto
|
|
463
|
+
if len(args.projection_constrain) % 2 != 0:
|
|
464
|
+
print("invaild input (-pc) ")
|
|
465
|
+
sys.exit(0)
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
for i in range(int(len(args.projection_constrain)/2)):
|
|
470
|
+
force_data["projection_constraint_condition_list"].append(str(args.projection_constrain[2*i]))
|
|
471
|
+
force_data["projection_constraint_atoms"].append(num_parse(args.projection_constrain[2*i+1]))
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
#---------------------
|
|
475
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_eps"] = []
|
|
476
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_sig"] = []
|
|
477
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_dist"] = []
|
|
478
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_atoms"] = []
|
|
479
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_offtgt"] = []
|
|
480
|
+
|
|
481
|
+
if len(args.asymmetric_ellipsoidal_repulsive_potential_v2) % 5 != 0:
|
|
482
|
+
print("invaild input (-aerpv2) ")
|
|
483
|
+
sys.exit(0)
|
|
484
|
+
|
|
485
|
+
for i in range(int(len(args.asymmetric_ellipsoidal_repulsive_potential_v2)/5)):
|
|
486
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_eps"].append(float(args.asymmetric_ellipsoidal_repulsive_potential_v2[5*i]))
|
|
487
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_sig"].append([float(x) for x in args.asymmetric_ellipsoidal_repulsive_potential_v2[5*i+1].split(",")])
|
|
488
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_dist"].append(float(args.asymmetric_ellipsoidal_repulsive_potential_v2[5*i+2]))
|
|
489
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_atoms"].append(num_parse(args.asymmetric_ellipsoidal_repulsive_potential_v2[5*i+3]))
|
|
490
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_v2_offtgt"].append(num_parse(args.asymmetric_ellipsoidal_repulsive_potential_v2[5*i+4]))
|
|
491
|
+
|
|
492
|
+
#---------------------
|
|
493
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_eps"] = []
|
|
494
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_sig"] = []
|
|
495
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_dist"] = []
|
|
496
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_atoms"] = []
|
|
497
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_offtgt"] = []
|
|
498
|
+
|
|
499
|
+
if len(args.asymmetric_ellipsoidal_repulsive_potential) % 5 != 0:
|
|
500
|
+
print("invaild input (-aerp) ")
|
|
501
|
+
sys.exit(0)
|
|
502
|
+
|
|
503
|
+
for i in range(int(len(args.asymmetric_ellipsoidal_repulsive_potential)/5)):
|
|
504
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_eps"].append(float(args.asymmetric_ellipsoidal_repulsive_potential[5*i]))
|
|
505
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_sig"].append([float(x) for x in args.asymmetric_ellipsoidal_repulsive_potential[5*i+1].split(",")])
|
|
506
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_dist"].append(float(args.asymmetric_ellipsoidal_repulsive_potential[5*i+2]))
|
|
507
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_atoms"].append(num_parse(args.asymmetric_ellipsoidal_repulsive_potential[5*i+3]))
|
|
508
|
+
force_data["asymmetric_ellipsoidal_repulsive_potential_offtgt"].append(num_parse(args.asymmetric_ellipsoidal_repulsive_potential[5*i+4]))
|
|
509
|
+
|
|
510
|
+
#---------------------
|
|
511
|
+
force_data["linear_mechano_force_v2"] = []
|
|
512
|
+
force_data["linear_mechano_force_atom_v2"] = []
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
if len(args.linear_mechano_force_pot_v2) % 2 != 0:
|
|
516
|
+
print("invaild input (-lmefpv2)")
|
|
517
|
+
sys.exit(0)
|
|
518
|
+
|
|
519
|
+
for i in range(int(len(args.linear_mechano_force_pot_v2)/2)):
|
|
520
|
+
force_data["linear_mechano_force_v2"].append(float(args.linear_mechano_force_pot_v2[2*i]))
|
|
521
|
+
force_data["linear_mechano_force_atom_v2"].append(num_parse(args.linear_mechano_force_pot_v2[2*i+1]))
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
#---------------------
|
|
526
|
+
force_data["linear_mechano_force"] = []
|
|
527
|
+
force_data["linear_mechano_force_atoms_1"] = []
|
|
528
|
+
force_data["linear_mechano_force_atoms_2"] = []
|
|
529
|
+
|
|
530
|
+
if len(args.linear_mechano_force_pot) % 3 != 0:
|
|
531
|
+
print("invaild input (-lmefp)")
|
|
532
|
+
sys.exit(0)
|
|
533
|
+
|
|
534
|
+
for i in range(int(len(args.linear_mechano_force_pot)/3)):
|
|
535
|
+
force_data["linear_mechano_force"].append(float(args.linear_mechano_force_pot[3*i]))
|
|
536
|
+
force_data["linear_mechano_force_atoms_1"].append(num_parse(args.linear_mechano_force_pot[3*i+1]))
|
|
537
|
+
force_data["linear_mechano_force_atoms_2"].append(num_parse(args.linear_mechano_force_pot[3*i+2]))
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
#---------------------
|
|
541
|
+
force_data["value_range_upper_const"] = []
|
|
542
|
+
force_data["value_range_lower_const"] = []
|
|
543
|
+
force_data["value_range_upper_distance"] = []
|
|
544
|
+
force_data["value_range_lower_distance"] = []
|
|
545
|
+
force_data["value_range_fragm_1"] = []
|
|
546
|
+
force_data["value_range_fragm_2"] = []
|
|
547
|
+
|
|
548
|
+
if len(args.bond_range_potential) % 6 != 0:
|
|
549
|
+
print("invaild input (-brp)")
|
|
550
|
+
sys.exit(0)
|
|
551
|
+
|
|
552
|
+
for i in range(int(len(args.bond_range_potential)/6)):
|
|
553
|
+
force_data["value_range_upper_const"].append(float(args.bond_range_potential[6*i]))
|
|
554
|
+
force_data["value_range_lower_const"].append(float(args.bond_range_potential[6*i+1]))
|
|
555
|
+
force_data["value_range_upper_distance"].append(float(args.bond_range_potential[6*i+2]))
|
|
556
|
+
force_data["value_range_lower_distance"].append(float(args.bond_range_potential[6*i+3]))
|
|
557
|
+
force_data["value_range_fragm_1"].append(num_parse(args.bond_range_potential[6*i+4]))
|
|
558
|
+
force_data["value_range_fragm_2"].append(num_parse(args.bond_range_potential[6*i+5]))
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
#-----------------------
|
|
563
|
+
if len(args.flux_potential) % 4 != 0:
|
|
564
|
+
print("invaild input (-fp)")
|
|
565
|
+
sys.exit(0)
|
|
566
|
+
|
|
567
|
+
force_data["flux_pot_const"] = []
|
|
568
|
+
force_data["flux_pot_order"] = []
|
|
569
|
+
force_data["flux_pot_direction"] = []
|
|
570
|
+
force_data["flux_pot_target"] = []
|
|
571
|
+
for i in range(int(len(args.flux_potential)/4)):
|
|
572
|
+
tmp = args.flux_potential[4*i].split(",")
|
|
573
|
+
if len(tmp) != 3:
|
|
574
|
+
print("invaild input (-fp)")
|
|
575
|
+
sys.exit(0)
|
|
576
|
+
sc_list = np.array([tmp[0], tmp[1], tmp[2]], dtype="float64")
|
|
577
|
+
force_data["flux_pot_const"].append(sc_list)
|
|
578
|
+
|
|
579
|
+
tmp = args.flux_potential[4*i+1].split(",")
|
|
580
|
+
if len(tmp) != 3:
|
|
581
|
+
print("invaild input (-fp)")
|
|
582
|
+
sys.exit(0)
|
|
583
|
+
order_list = np.array([tmp[0], tmp[1], tmp[2]], dtype="float64")
|
|
584
|
+
force_data["flux_pot_order"].append(order_list)
|
|
585
|
+
|
|
586
|
+
tmp = args.flux_potential[4*i+2].split(",")
|
|
587
|
+
if len(tmp) != 3:
|
|
588
|
+
print("invaild input (-fp)")
|
|
589
|
+
sys.exit(0)
|
|
590
|
+
direction = np.array([tmp[0], tmp[1], tmp[2]], dtype="float64")
|
|
591
|
+
force_data["flux_pot_direction"].append(direction)
|
|
592
|
+
|
|
593
|
+
force_data["flux_pot_target"].append(num_parse(args.flux_potential[4*i+3]))
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
#---------------------
|
|
597
|
+
if len(args.universal_potential) % 2 != 0:
|
|
598
|
+
print("invaild input (-up)")
|
|
599
|
+
sys.exit(0)
|
|
600
|
+
force_data["universal_pot_const"] = []
|
|
601
|
+
force_data["universal_pot_target"] = []
|
|
602
|
+
for i in range(int(len(args.universal_potential)/2)):
|
|
603
|
+
force_data["universal_pot_const"].append(float(args.universal_potential[2*i]))
|
|
604
|
+
force_data["universal_pot_target"].append(num_parse(args.universal_potential[2*i+1]))
|
|
605
|
+
if len(force_data["universal_pot_target"][i]) < 2:
|
|
606
|
+
print("more than one atom for universal_pot_target! exit...")
|
|
607
|
+
sys.exit(0)
|
|
608
|
+
#---------------------
|
|
609
|
+
if len(args.spacer_model_potential) % 5 != 0:
|
|
610
|
+
print("invaild input (-smp)")
|
|
611
|
+
sys.exit(0)
|
|
612
|
+
force_data["spacer_model_potential_target"] = []
|
|
613
|
+
force_data["spacer_model_potential_distance"] = []
|
|
614
|
+
force_data["spacer_model_potential_well_depth"] = []
|
|
615
|
+
force_data["spacer_model_potential_particle_number"] = [] #ang.
|
|
616
|
+
force_data["spacer_model_potential_cavity_scaling"] = []
|
|
617
|
+
|
|
618
|
+
for i in range(int(len(args.spacer_model_potential)/5)):
|
|
619
|
+
force_data["spacer_model_potential_well_depth"].append(float(args.spacer_model_potential[5*i]))
|
|
620
|
+
force_data["spacer_model_potential_distance"].append(float(args.spacer_model_potential[5*i+1]))
|
|
621
|
+
force_data["spacer_model_potential_cavity_scaling"].append(float(args.spacer_model_potential[5*i+2]))
|
|
622
|
+
force_data["spacer_model_potential_particle_number"].append(int(args.spacer_model_potential[5*i+3]))
|
|
623
|
+
force_data["spacer_model_potential_target"].append(num_parse(args.spacer_model_potential[5*i+4]))
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
#---------------------
|
|
627
|
+
if len(args.repulsive_potential) % 5 != 0:
|
|
628
|
+
print("invaild input (-rp)")
|
|
629
|
+
sys.exit(0)
|
|
630
|
+
|
|
631
|
+
force_data["repulsive_potential_well_scale"] = []
|
|
632
|
+
force_data["repulsive_potential_dist_scale"] = []
|
|
633
|
+
force_data["repulsive_potential_Fragm_1"] = []
|
|
634
|
+
force_data["repulsive_potential_Fragm_2"] = []
|
|
635
|
+
force_data["repulsive_potential_unit"] = []
|
|
636
|
+
|
|
637
|
+
for i in range(int(len(args.repulsive_potential)/5)):
|
|
638
|
+
force_data["repulsive_potential_well_scale"].append(float(args.repulsive_potential[5*i]))
|
|
639
|
+
force_data["repulsive_potential_dist_scale"].append(float(args.repulsive_potential[5*i+1]))
|
|
640
|
+
force_data["repulsive_potential_Fragm_1"].append(num_parse(args.repulsive_potential[5*i+2]))
|
|
641
|
+
force_data["repulsive_potential_Fragm_2"].append(num_parse(args.repulsive_potential[5*i+3]))
|
|
642
|
+
force_data["repulsive_potential_unit"].append(str(args.repulsive_potential[5*i+4]))
|
|
643
|
+
|
|
644
|
+
|
|
645
|
+
#---------------------
|
|
646
|
+
if len(args.repulsive_potential_v2) % 10 != 0:
|
|
647
|
+
print("invaild input (-rpv2)")
|
|
648
|
+
sys.exit(0)
|
|
649
|
+
|
|
650
|
+
force_data["repulsive_potential_v2_well_scale"] = []
|
|
651
|
+
force_data["repulsive_potential_v2_dist_scale"] = []
|
|
652
|
+
force_data["repulsive_potential_v2_length"] = []
|
|
653
|
+
force_data["repulsive_potential_v2_const_rep"] = []
|
|
654
|
+
force_data["repulsive_potential_v2_const_attr"] = []
|
|
655
|
+
force_data["repulsive_potential_v2_order_rep"] = []
|
|
656
|
+
force_data["repulsive_potential_v2_order_attr"] = []
|
|
657
|
+
force_data["repulsive_potential_v2_center"] = []
|
|
658
|
+
force_data["repulsive_potential_v2_target"] = []
|
|
659
|
+
force_data["repulsive_potential_v2_unit"] = []
|
|
660
|
+
|
|
661
|
+
for i in range(int(len(args.repulsive_potential_v2)/10)):
|
|
662
|
+
force_data["repulsive_potential_v2_well_scale"].append(float(args.repulsive_potential_v2[10*i+0]))
|
|
663
|
+
force_data["repulsive_potential_v2_dist_scale"].append(float(args.repulsive_potential_v2[10*i+1]))
|
|
664
|
+
force_data["repulsive_potential_v2_length"].append(float(args.repulsive_potential_v2[10*i+2]))
|
|
665
|
+
force_data["repulsive_potential_v2_const_rep"].append(float(args.repulsive_potential_v2[10*i+3]))
|
|
666
|
+
force_data["repulsive_potential_v2_const_attr"].append(float(args.repulsive_potential_v2[10*i+4]))
|
|
667
|
+
force_data["repulsive_potential_v2_order_rep"].append(float(args.repulsive_potential_v2[10*i+5]))
|
|
668
|
+
force_data["repulsive_potential_v2_order_attr"].append(float(args.repulsive_potential_v2[10*i+6]))
|
|
669
|
+
force_data["repulsive_potential_v2_center"].append(num_parse(args.repulsive_potential_v2[10*i+7]))
|
|
670
|
+
force_data["repulsive_potential_v2_target"].append(num_parse(args.repulsive_potential_v2[10*i+8]))
|
|
671
|
+
force_data["repulsive_potential_v2_unit"].append(str(args.repulsive_potential_v2[10*i+9]))
|
|
672
|
+
if len(force_data["repulsive_potential_v2_center"][i]) != 2:
|
|
673
|
+
print("invaild input (-rpv2 center)")
|
|
674
|
+
sys.exit(0)
|
|
675
|
+
|
|
676
|
+
#---------------------
|
|
677
|
+
if len(args.repulsive_potential_gaussian) % 7 != 0:
|
|
678
|
+
print("invaild input (-rpg)")
|
|
679
|
+
sys.exit(0)
|
|
680
|
+
|
|
681
|
+
force_data["repulsive_potential_gaussian_LJ_well_depth"] = []
|
|
682
|
+
force_data["repulsive_potential_gaussian_LJ_dist"] = []
|
|
683
|
+
force_data["repulsive_potential_gaussian_gau_well_depth"] = []
|
|
684
|
+
force_data["repulsive_potential_gaussian_gau_dist"] = []
|
|
685
|
+
force_data["repulsive_potential_gaussian_gau_range"] = []
|
|
686
|
+
force_data["repulsive_potential_gaussian_fragm_1"] = []
|
|
687
|
+
force_data["repulsive_potential_gaussian_fragm_2"] = []
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
for i in range(int(len(args.repulsive_potential_gaussian)/7)):
|
|
691
|
+
force_data["repulsive_potential_gaussian_LJ_well_depth"].append(float(args.repulsive_potential_gaussian[7*i+0]))
|
|
692
|
+
force_data["repulsive_potential_gaussian_LJ_dist"].append(float(args.repulsive_potential_gaussian[7*i+1]))
|
|
693
|
+
force_data["repulsive_potential_gaussian_gau_well_depth"].append(float(args.repulsive_potential_gaussian[7*i+2]))
|
|
694
|
+
force_data["repulsive_potential_gaussian_gau_dist"].append(float(args.repulsive_potential_gaussian[7*i+3]))
|
|
695
|
+
force_data["repulsive_potential_gaussian_gau_range"].append(float(args.repulsive_potential_gaussian[7*i+4]))
|
|
696
|
+
force_data["repulsive_potential_gaussian_fragm_1"].append(num_parse(args.repulsive_potential_gaussian[7*i+5]))
|
|
697
|
+
force_data["repulsive_potential_gaussian_fragm_2"].append(num_parse(args.repulsive_potential_gaussian[7*i+6]))
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
#---------------------
|
|
701
|
+
if len(args.cone_potential) % 6 != 0:
|
|
702
|
+
print("invaild input (-cp)")
|
|
703
|
+
sys.exit(0)
|
|
704
|
+
|
|
705
|
+
force_data["cone_potential_well_value"] = []
|
|
706
|
+
force_data["cone_potential_dist_value"] = []
|
|
707
|
+
force_data["cone_potential_cone_angle"] = []
|
|
708
|
+
force_data["cone_potential_center"] = []
|
|
709
|
+
force_data["cone_potential_three_atoms"] = []
|
|
710
|
+
force_data["cone_potential_target"] = []
|
|
711
|
+
|
|
712
|
+
for i in range(int(len(args.cone_potential)/6)):
|
|
713
|
+
force_data["cone_potential_well_value"].append(float(args.cone_potential[6*i+0]))
|
|
714
|
+
force_data["cone_potential_dist_value"].append(float(args.cone_potential[6*i+1]))
|
|
715
|
+
force_data["cone_potential_cone_angle"].append(float(args.cone_potential[6*i+2]))
|
|
716
|
+
force_data["cone_potential_center"].append(int(args.cone_potential[6*i+3]))
|
|
717
|
+
force_data["cone_potential_three_atoms"].append(num_parse(args.cone_potential[6*i+4]))
|
|
718
|
+
force_data["cone_potential_target"].append(num_parse(args.cone_potential[6*i+5]))
|
|
719
|
+
|
|
720
|
+
if len(force_data["cone_potential_three_atoms"][i]) != 3:
|
|
721
|
+
print("invaild input (-cp three atoms)")
|
|
722
|
+
sys.exit(0)
|
|
723
|
+
|
|
724
|
+
|
|
725
|
+
#--------------------
|
|
726
|
+
if len(args.manual_AFIR) % 3 != 0:
|
|
727
|
+
print("invaild input (-ma)")
|
|
728
|
+
sys.exit(0)
|
|
729
|
+
|
|
730
|
+
force_data["AFIR_gamma"] = []
|
|
731
|
+
force_data["AFIR_Fragm_1"] = []
|
|
732
|
+
force_data["AFIR_Fragm_2"] = []
|
|
733
|
+
|
|
734
|
+
|
|
735
|
+
for i in range(int(len(args.manual_AFIR)/3)):
|
|
736
|
+
force_data["AFIR_gamma"].append(list(map(float, args.manual_AFIR[3*i].split(","))))#kj/mol
|
|
737
|
+
force_data["AFIR_Fragm_1"].append(num_parse(args.manual_AFIR[3*i+1]))
|
|
738
|
+
force_data["AFIR_Fragm_2"].append(num_parse(args.manual_AFIR[3*i+2]))
|
|
739
|
+
|
|
740
|
+
|
|
741
|
+
#---------------------
|
|
742
|
+
if len(args.anharmonic_keep_pot) % 4 != 0:
|
|
743
|
+
print("invaild input (-akp)")
|
|
744
|
+
sys.exit(0)
|
|
745
|
+
|
|
746
|
+
force_data["anharmonic_keep_pot_potential_well_depth"] = []
|
|
747
|
+
force_data["anharmonic_keep_pot_spring_const"] = []
|
|
748
|
+
force_data["anharmonic_keep_pot_distance"] = []
|
|
749
|
+
force_data["anharmonic_keep_pot_atom_pairs"] = []
|
|
750
|
+
|
|
751
|
+
for i in range(int(len(args.anharmonic_keep_pot)/4)):
|
|
752
|
+
force_data["anharmonic_keep_pot_potential_well_depth"].append(float(args.anharmonic_keep_pot[4*i]))#au
|
|
753
|
+
force_data["anharmonic_keep_pot_spring_const"].append(float(args.anharmonic_keep_pot[4*i+1]))#au
|
|
754
|
+
force_data["anharmonic_keep_pot_distance"].append(float(args.anharmonic_keep_pot[4*i+2]))#ang
|
|
755
|
+
force_data["anharmonic_keep_pot_atom_pairs"].append(num_parse(args.anharmonic_keep_pot[4*i+3]))
|
|
756
|
+
if len(force_data["anharmonic_keep_pot_atom_pairs"][i]) != 2:
|
|
757
|
+
print("invaild input (-akp atom_pairs)")
|
|
758
|
+
sys.exit(0)
|
|
759
|
+
|
|
760
|
+
#---------------------
|
|
761
|
+
if len(args.keep_pot) % 3 != 0:
|
|
762
|
+
print("invaild input (-kp)")
|
|
763
|
+
sys.exit(0)
|
|
764
|
+
|
|
765
|
+
force_data["keep_pot_spring_const"] = []
|
|
766
|
+
force_data["keep_pot_distance"] = []
|
|
767
|
+
force_data["keep_pot_atom_pairs"] = []
|
|
768
|
+
|
|
769
|
+
for i in range(int(len(args.keep_pot)/3)):
|
|
770
|
+
force_data["keep_pot_spring_const"].append(float(args.keep_pot[3*i]))#au
|
|
771
|
+
force_data["keep_pot_distance"].append(float(args.keep_pot[3*i+1]))#ang
|
|
772
|
+
force_data["keep_pot_atom_pairs"].append(num_parse(args.keep_pot[3*i+2]))
|
|
773
|
+
if len(force_data["keep_pot_atom_pairs"][i]) != 2:
|
|
774
|
+
print("invaild input (-kp atom_pairs)")
|
|
775
|
+
sys.exit(0)
|
|
776
|
+
|
|
777
|
+
#---------------------
|
|
778
|
+
if len(args.keep_pot_v2) % 4 != 0:
|
|
779
|
+
print("invaild input (-kpv2)")
|
|
780
|
+
sys.exit(0)
|
|
781
|
+
|
|
782
|
+
force_data["keep_pot_v2_spring_const"] = []
|
|
783
|
+
force_data["keep_pot_v2_distance"] = []
|
|
784
|
+
force_data["keep_pot_v2_fragm1"] = []
|
|
785
|
+
force_data["keep_pot_v2_fragm2"] = []
|
|
786
|
+
|
|
787
|
+
for i in range(int(len(args.keep_pot_v2)/4)):
|
|
788
|
+
force_data["keep_pot_v2_spring_const"].append(list(map(float, args.keep_pot_v2[4*i].split(","))))#au
|
|
789
|
+
force_data["keep_pot_v2_distance"].append(list(map(float, args.keep_pot_v2[4*i+1].split(","))))#ang
|
|
790
|
+
force_data["keep_pot_v2_fragm1"].append(num_parse(args.keep_pot_v2[4*i+2]))
|
|
791
|
+
force_data["keep_pot_v2_fragm2"].append(num_parse(args.keep_pot_v2[4*i+3]))
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
#---------------------
|
|
795
|
+
if len(args.keep_angle) % 3 != 0:
|
|
796
|
+
print("invaild input (-ka)")
|
|
797
|
+
sys.exit(0)
|
|
798
|
+
|
|
799
|
+
force_data["keep_angle_spring_const"] = []
|
|
800
|
+
force_data["keep_angle_angle"] = []
|
|
801
|
+
force_data["keep_angle_atom_pairs"] = []
|
|
802
|
+
|
|
803
|
+
for i in range(int(len(args.keep_angle)/3)):
|
|
804
|
+
force_data["keep_angle_spring_const"].append(float(args.keep_angle[3*i]))#au
|
|
805
|
+
force_data["keep_angle_angle"].append(float(args.keep_angle[3*i+1]))#degrees
|
|
806
|
+
force_data["keep_angle_atom_pairs"].append(num_parse(args.keep_angle[3*i+2]))
|
|
807
|
+
if len(force_data["keep_angle_atom_pairs"][i]) != 3:
|
|
808
|
+
print("invaild input (-ka atom_pairs)")
|
|
809
|
+
sys.exit(0)
|
|
810
|
+
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
#---------------------
|
|
814
|
+
if len(args.keep_angle_v2) % 5 != 0:
|
|
815
|
+
print("invaild input (-kav2)")
|
|
816
|
+
sys.exit(0)
|
|
817
|
+
|
|
818
|
+
force_data["keep_angle_v2_spring_const"] = []
|
|
819
|
+
force_data["keep_angle_v2_angle"] = []
|
|
820
|
+
force_data["keep_angle_v2_fragm1"] = []
|
|
821
|
+
force_data["keep_angle_v2_fragm2"] = []
|
|
822
|
+
force_data["keep_angle_v2_fragm3"] = []
|
|
823
|
+
|
|
824
|
+
for i in range(int(len(args.keep_angle_v2)/5)):
|
|
825
|
+
force_data["keep_angle_v2_spring_const"].append(list(map(float, args.keep_angle_v2[5*i].split(","))))#au
|
|
826
|
+
force_data["keep_angle_v2_angle"].append(list(map(float, args.keep_angle_v2[5*i+1].split(","))))#degrees
|
|
827
|
+
force_data["keep_angle_v2_fragm1"].append(num_parse(args.keep_angle_v2[5*i+2]))
|
|
828
|
+
force_data["keep_angle_v2_fragm2"].append(num_parse(args.keep_angle_v2[5*i+3]))
|
|
829
|
+
force_data["keep_angle_v2_fragm3"].append(num_parse(args.keep_angle_v2[5*i+4]))
|
|
830
|
+
|
|
831
|
+
#---------------------
|
|
832
|
+
|
|
833
|
+
if len(args.keep_dihedral_angle) % 3 != 0:
|
|
834
|
+
print("invaild input (-kda)")
|
|
835
|
+
sys.exit(0)
|
|
836
|
+
|
|
837
|
+
force_data["keep_dihedral_angle_spring_const"] = []
|
|
838
|
+
force_data["keep_dihedral_angle_angle"] = []
|
|
839
|
+
force_data["keep_dihedral_angle_atom_pairs"] = []
|
|
840
|
+
|
|
841
|
+
for i in range(int(len(args.keep_dihedral_angle)/3)):
|
|
842
|
+
force_data["keep_dihedral_angle_spring_const"].append(float(args.keep_dihedral_angle[3*i]))#au
|
|
843
|
+
force_data["keep_dihedral_angle_angle"].append(float(args.keep_dihedral_angle[3*i+1]))#degrees
|
|
844
|
+
force_data["keep_dihedral_angle_atom_pairs"].append(num_parse(args.keep_dihedral_angle[3*i+2]))
|
|
845
|
+
if len(force_data["keep_dihedral_angle_atom_pairs"][i]) != 4:
|
|
846
|
+
print("invaild input (-kda atom_pairs)")
|
|
847
|
+
sys.exit(0)
|
|
848
|
+
|
|
849
|
+
#---------------------
|
|
850
|
+
|
|
851
|
+
if len(args.keep_out_of_plain_angle) % 3 != 0:
|
|
852
|
+
print("invaild input (-kopa)")
|
|
853
|
+
sys.exit(0)
|
|
854
|
+
|
|
855
|
+
force_data["keep_out_of_plain_angle_spring_const"] = []
|
|
856
|
+
force_data["keep_out_of_plain_angle_angle"] = []
|
|
857
|
+
force_data["keep_out_of_plain_angle_atom_pairs"] = []
|
|
858
|
+
|
|
859
|
+
for i in range(int(len(args.keep_out_of_plain_angle)/3)):
|
|
860
|
+
force_data["keep_out_of_plain_angle_spring_const"].append(float(args.keep_out_of_plain_angle[3*i]))#au
|
|
861
|
+
force_data["keep_out_of_plain_angle_angle"].append(float(args.keep_out_of_plain_angle[3*i+1]))#degrees
|
|
862
|
+
force_data["keep_out_of_plain_angle_atom_pairs"].append(num_parse(args.keep_out_of_plain_angle[3*i+2]))
|
|
863
|
+
if len(force_data["keep_out_of_plain_angle_atom_pairs"][i]) != 4:
|
|
864
|
+
print("invaild input (-kopa atom_pairs)")
|
|
865
|
+
sys.exit(0)
|
|
866
|
+
|
|
867
|
+
#---------------------
|
|
868
|
+
|
|
869
|
+
if len(args.keep_out_of_plain_angle_v2) % 6 != 0:
|
|
870
|
+
print("invaild input (-kopav2)")
|
|
871
|
+
sys.exit(0)
|
|
872
|
+
|
|
873
|
+
force_data["keep_out_of_plain_angle_v2_spring_const"] = []
|
|
874
|
+
force_data["keep_out_of_plain_angle_v2_angle"] = []
|
|
875
|
+
force_data["keep_out_of_plain_angle_v2_fragm1"] = []
|
|
876
|
+
force_data["keep_out_of_plain_angle_v2_fragm2"] = []
|
|
877
|
+
force_data["keep_out_of_plain_angle_v2_fragm3"] = []
|
|
878
|
+
force_data["keep_out_of_plain_angle_v2_fragm4"] = []
|
|
879
|
+
|
|
880
|
+
for i in range(int(len(args.keep_out_of_plain_angle_v2)/6)):
|
|
881
|
+
force_data["keep_out_of_plain_angle_v2_spring_const"].append(list(map(float, args.keep_out_of_plain_angle_v2[6*i].split(","))))#au
|
|
882
|
+
force_data["keep_out_of_plain_angle_v2_angle"].append(list(map(float, args.keep_out_of_plain_angle_v2[6*i+1].split(","))))#degrees
|
|
883
|
+
force_data["keep_out_of_plain_angle_v2_fragm1"].append(num_parse(args.keep_out_of_plain_angle_v2[6*i+2]))
|
|
884
|
+
force_data["keep_out_of_plain_angle_v2_fragm2"].append(num_parse(args.keep_out_of_plain_angle_v2[6*i+3]))
|
|
885
|
+
force_data["keep_out_of_plain_angle_v2_fragm3"].append(num_parse(args.keep_out_of_plain_angle_v2[6*i+4]))
|
|
886
|
+
force_data["keep_out_of_plain_angle_v2_fragm4"].append(num_parse(args.keep_out_of_plain_angle_v2[6*i+5]))
|
|
887
|
+
|
|
888
|
+
|
|
889
|
+
#---------------------
|
|
890
|
+
|
|
891
|
+
if len(args.keep_dihedral_angle_v2) % 6 != 0:
|
|
892
|
+
print("invaild input (-kdav2)")
|
|
893
|
+
sys.exit(0)
|
|
894
|
+
|
|
895
|
+
force_data["keep_dihedral_angle_v2_spring_const"] = []
|
|
896
|
+
force_data["keep_dihedral_angle_v2_angle"] = []
|
|
897
|
+
force_data["keep_dihedral_angle_v2_fragm1"] = []
|
|
898
|
+
force_data["keep_dihedral_angle_v2_fragm2"] = []
|
|
899
|
+
force_data["keep_dihedral_angle_v2_fragm3"] = []
|
|
900
|
+
force_data["keep_dihedral_angle_v2_fragm4"] = []
|
|
901
|
+
|
|
902
|
+
for i in range(int(len(args.keep_dihedral_angle_v2)/6)):
|
|
903
|
+
force_data["keep_dihedral_angle_v2_spring_const"].append(list(map(float, args.keep_dihedral_angle_v2[6*i].split(","))))#au
|
|
904
|
+
force_data["keep_dihedral_angle_v2_angle"].append(list(map(float, args.keep_dihedral_angle_v2[6*i+1].split(","))))#degrees
|
|
905
|
+
force_data["keep_dihedral_angle_v2_fragm1"].append(num_parse(args.keep_dihedral_angle_v2[6*i+2]))
|
|
906
|
+
force_data["keep_dihedral_angle_v2_fragm2"].append(num_parse(args.keep_dihedral_angle_v2[6*i+3]))
|
|
907
|
+
force_data["keep_dihedral_angle_v2_fragm3"].append(num_parse(args.keep_dihedral_angle_v2[6*i+4]))
|
|
908
|
+
force_data["keep_dihedral_angle_v2_fragm4"].append(num_parse(args.keep_dihedral_angle_v2[6*i+5]))
|
|
909
|
+
|
|
910
|
+
#---------------------
|
|
911
|
+
|
|
912
|
+
if len(args.keep_dihedral_angle_cos) % 7 != 0:
|
|
913
|
+
print("invaild input (-kdac)")
|
|
914
|
+
sys.exit(0)
|
|
915
|
+
|
|
916
|
+
force_data["keep_dihedral_angle_cos_potential_const"] = []
|
|
917
|
+
force_data["keep_dihedral_angle_cos_angle_const"] = []
|
|
918
|
+
force_data["keep_dihedral_angle_cos_angle"] = []
|
|
919
|
+
force_data["keep_dihedral_angle_cos_fragm1"] = []
|
|
920
|
+
force_data["keep_dihedral_angle_cos_fragm2"] = []
|
|
921
|
+
force_data["keep_dihedral_angle_cos_fragm3"] = []
|
|
922
|
+
force_data["keep_dihedral_angle_cos_fragm4"] = []
|
|
923
|
+
|
|
924
|
+
for i in range(int(len(args.keep_dihedral_angle_cos)/7)):
|
|
925
|
+
force_data["keep_dihedral_angle_cos_potential_const"].append(list(map(float, args.keep_dihedral_angle_cos[7*i].split(","))))#au
|
|
926
|
+
force_data["keep_dihedral_angle_cos_angle_const"].append(list(map(float, args.keep_dihedral_angle_cos[7*i+1].split(","))))#degrees
|
|
927
|
+
force_data["keep_dihedral_angle_cos_angle"].append(list(map(float, args.keep_dihedral_angle_cos[7*i+2].split(","))))#degrees
|
|
928
|
+
force_data["keep_dihedral_angle_cos_fragm1"].append(num_parse(args.keep_dihedral_angle_cos[7*i+3]))
|
|
929
|
+
force_data["keep_dihedral_angle_cos_fragm2"].append(num_parse(args.keep_dihedral_angle_cos[7*i+4]))
|
|
930
|
+
force_data["keep_dihedral_angle_cos_fragm3"].append(num_parse(args.keep_dihedral_angle_cos[7*i+5]))
|
|
931
|
+
force_data["keep_dihedral_angle_cos_fragm4"].append(num_parse(args.keep_dihedral_angle_cos[7*i+6]))
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
#---------------------
|
|
935
|
+
if len(args.well_pot) % 4 != 0:
|
|
936
|
+
print("invaild input (-wp)")
|
|
937
|
+
sys.exit(0)
|
|
938
|
+
|
|
939
|
+
force_data["well_pot_wall_energy"] = []
|
|
940
|
+
force_data["well_pot_fragm_1"] = []
|
|
941
|
+
force_data["well_pot_fragm_2"] = []
|
|
942
|
+
force_data["well_pot_limit_dist"] = []
|
|
943
|
+
|
|
944
|
+
for i in range(int(len(args.well_pot)/4)):
|
|
945
|
+
force_data["well_pot_wall_energy"].append(float(args.well_pot[4*i]))#kJ/mol
|
|
946
|
+
force_data["well_pot_fragm_1"].append(num_parse(args.well_pot[4*i+1]))
|
|
947
|
+
force_data["well_pot_fragm_2"].append(num_parse(args.well_pot[4*i+2]))
|
|
948
|
+
force_data["well_pot_limit_dist"].append(args.well_pot[4*i+3].split(","))#ang
|
|
949
|
+
if float(force_data["well_pot_limit_dist"][i][0]) < float(force_data["well_pot_limit_dist"][i][1]) and float(force_data["well_pot_limit_dist"][i][1]) < float(force_data["well_pot_limit_dist"][i][2]) and float(force_data["well_pot_limit_dist"][i][2]) < float(force_data["well_pot_limit_dist"][i][3]):
|
|
950
|
+
pass
|
|
951
|
+
else:
|
|
952
|
+
print("invaild input (-wp a<b<c<d)")
|
|
953
|
+
sys.exit(0)
|
|
954
|
+
|
|
955
|
+
#---------------------
|
|
956
|
+
if len(args.wall_well_pot) % 4 != 0:
|
|
957
|
+
print("invaild input (-wwp)")
|
|
958
|
+
sys.exit(0)
|
|
959
|
+
|
|
960
|
+
force_data["wall_well_pot_wall_energy"] = []
|
|
961
|
+
force_data["wall_well_pot_direction"] = []
|
|
962
|
+
force_data["wall_well_pot_limit_dist"] = []
|
|
963
|
+
force_data["wall_well_pot_target"] = []
|
|
964
|
+
|
|
965
|
+
for i in range(int(len(args.wall_well_pot)/4)):
|
|
966
|
+
force_data["wall_well_pot_wall_energy"].append(float(args.wall_well_pot[4*i]))#kJ/mol
|
|
967
|
+
force_data["wall_well_pot_direction"].append(args.wall_well_pot[4*i+1])
|
|
968
|
+
|
|
969
|
+
if force_data["wall_well_pot_direction"][i] == "x" or force_data["wall_well_pot_direction"][i] == "y" or force_data["wall_well_pot_direction"][i] == "z":
|
|
970
|
+
pass
|
|
971
|
+
else:
|
|
972
|
+
print("invaild input (-wwp direction)")
|
|
973
|
+
sys.exit(0)
|
|
974
|
+
|
|
975
|
+
force_data["wall_well_pot_limit_dist"].append(args.wall_well_pot[4*i+2].split(","))#ang
|
|
976
|
+
if float(force_data["wall_well_pot_limit_dist"][i][0]) < float(force_data["wall_well_pot_limit_dist"][i][1]) and float(force_data["wall_well_pot_limit_dist"][i][1]) < float(force_data["wall_well_pot_limit_dist"][i][2]) and float(force_data["wall_well_pot_limit_dist"][i][2]) < float(force_data["wall_well_pot_limit_dist"][i][3]):
|
|
977
|
+
pass
|
|
978
|
+
else:
|
|
979
|
+
print("invaild input (-wwp a<b<c<d)")
|
|
980
|
+
sys.exit(0)
|
|
981
|
+
|
|
982
|
+
force_data["wall_well_pot_target"].append(num_parse(args.wall_well_pot[4*i+3]))
|
|
983
|
+
#---------------------
|
|
984
|
+
|
|
985
|
+
if len(args.void_point_well_pot) % 4 != 0:
|
|
986
|
+
print("invaild input (-vpwp)")
|
|
987
|
+
sys.exit(0)
|
|
988
|
+
|
|
989
|
+
force_data["void_point_well_pot_wall_energy"] = []
|
|
990
|
+
force_data["void_point_well_pot_coordinate"] = []
|
|
991
|
+
force_data["void_point_well_pot_limit_dist"] = []
|
|
992
|
+
force_data["void_point_well_pot_target"] = []
|
|
993
|
+
|
|
994
|
+
for i in range(int(len(args.void_point_well_pot)/4)):
|
|
995
|
+
force_data["void_point_well_pot_wall_energy"].append(float(args.void_point_well_pot[4*i]))#kJ/mol
|
|
996
|
+
|
|
997
|
+
|
|
998
|
+
force_data["void_point_well_pot_coordinate"].append(list(map(float, args.void_point_well_pot[4*i+1].split(","))))
|
|
999
|
+
|
|
1000
|
+
if len(force_data["void_point_well_pot_coordinate"][i]) != 3:
|
|
1001
|
+
print("invaild input (-vpwp coordinate)")
|
|
1002
|
+
sys.exit(0)
|
|
1003
|
+
|
|
1004
|
+
force_data["void_point_well_pot_limit_dist"].append(args.void_point_well_pot[4*i+2].split(","))#ang
|
|
1005
|
+
if float(force_data["void_point_well_pot_limit_dist"][i][0]) < float(force_data["void_point_well_pot_limit_dist"][i][1]) and float(force_data["void_point_well_pot_limit_dist"][i][1]) < float(force_data["void_point_well_pot_limit_dist"][i][2]) and float(force_data["void_point_well_pot_limit_dist"][i][2]) < float(force_data["void_point_well_pot_limit_dist"][i][3]):
|
|
1006
|
+
pass
|
|
1007
|
+
else:
|
|
1008
|
+
print("invaild input (-vpwp a<b<c<d)")
|
|
1009
|
+
sys.exit(0)
|
|
1010
|
+
|
|
1011
|
+
force_data["void_point_well_pot_target"].append(num_parse(args.void_point_well_pot[4*i+3]))
|
|
1012
|
+
|
|
1013
|
+
#---------------------
|
|
1014
|
+
|
|
1015
|
+
if len(args.around_well_pot) % 4 != 0:
|
|
1016
|
+
print("invaild input (-awp)")
|
|
1017
|
+
sys.exit(0)
|
|
1018
|
+
|
|
1019
|
+
force_data["around_well_pot_wall_energy"] = []
|
|
1020
|
+
force_data["around_well_pot_center"] = []
|
|
1021
|
+
force_data["around_well_pot_limit_dist"] = []
|
|
1022
|
+
force_data["around_well_pot_target"] = []
|
|
1023
|
+
|
|
1024
|
+
for i in range(int(len(args.around_well_pot)/4)):
|
|
1025
|
+
force_data["around_well_pot_wall_energy"].append(float(args.around_well_pot[4*i]))#kJ/mol
|
|
1026
|
+
|
|
1027
|
+
|
|
1028
|
+
force_data["around_well_pot_center"].append(num_parse(args.around_well_pot[4*i+1]))
|
|
1029
|
+
|
|
1030
|
+
|
|
1031
|
+
force_data["around_well_pot_limit_dist"].append(args.around_well_pot[4*i+2].split(","))#ang
|
|
1032
|
+
if float(force_data["around_well_pot_limit_dist"][i][0]) < float(force_data["around_well_pot_limit_dist"][i][1]) and float(force_data["around_well_pot_limit_dist"][i][1]) < float(force_data["around_well_pot_limit_dist"][i][2]) and float(force_data["around_well_pot_limit_dist"][i][2]) < float(force_data["around_well_pot_limit_dist"][i][3]):
|
|
1033
|
+
pass
|
|
1034
|
+
else:
|
|
1035
|
+
print("invaild input (-vpwp a<b<c<d)")
|
|
1036
|
+
sys.exit(0)
|
|
1037
|
+
|
|
1038
|
+
force_data["around_well_pot_target"].append(num_parse(args.around_well_pot[4*i+3]))
|
|
1039
|
+
|
|
1040
|
+
#---------------------
|
|
1041
|
+
|
|
1042
|
+
if len(args.void_point_pot) % 5 != 0:
|
|
1043
|
+
print("invaild input (-vpp)")
|
|
1044
|
+
sys.exit(0)
|
|
1045
|
+
|
|
1046
|
+
force_data["void_point_pot_spring_const"] = []
|
|
1047
|
+
force_data["void_point_pot_distance"] = []
|
|
1048
|
+
force_data["void_point_pot_coord"] = []
|
|
1049
|
+
force_data["void_point_pot_atoms"] = []
|
|
1050
|
+
force_data["void_point_pot_order"] = []
|
|
1051
|
+
|
|
1052
|
+
for i in range(int(len(args.void_point_pot)/5)):
|
|
1053
|
+
force_data["void_point_pot_spring_const"].append(float(args.void_point_pot[5*i]))#au
|
|
1054
|
+
force_data["void_point_pot_distance"].append(float(args.void_point_pot[5*i+1]))#ang
|
|
1055
|
+
coord = args.void_point_pot[5*i+2].split(",")
|
|
1056
|
+
force_data["void_point_pot_coord"].append(list(map(float, coord)))#ang
|
|
1057
|
+
force_data["void_point_pot_atoms"].append(num_parse(args.void_point_pot[5*i+3]))
|
|
1058
|
+
force_data["void_point_pot_order"].append(float(args.void_point_pot[5*i+4]))
|
|
1059
|
+
#---------------------
|
|
1060
|
+
force_data["gaussian_potential_target"] = []
|
|
1061
|
+
force_data["gaussian_potential_height"] = []
|
|
1062
|
+
force_data["gaussian_potential_width"] = []
|
|
1063
|
+
force_data["gaussian_potential_tgt_atom"] = []
|
|
1064
|
+
|
|
1065
|
+
if len(args.metadynamics) > 0:
|
|
1066
|
+
for i in range(int(len(args.metadynamics)/4)):
|
|
1067
|
+
force_data["gaussian_potential_target"].append(str(args.metadynamics[4*i]))
|
|
1068
|
+
force_data["gaussian_potential_height"].append(float(args.metadynamics[4*i+1]))
|
|
1069
|
+
force_data["gaussian_potential_width"].append(float(args.metadynamics[4*i+2]))
|
|
1070
|
+
force_data["gaussian_potential_tgt_atom"].append(num_parse(args.metadynamics[4*i+3]))
|
|
1071
|
+
|
|
1072
|
+
if len(args.fix_atoms) > 0:
|
|
1073
|
+
force_data["fix_atoms"] = num_parse(args.fix_atoms[0])
|
|
1074
|
+
else:
|
|
1075
|
+
force_data["fix_atoms"] = ""
|
|
1076
|
+
|
|
1077
|
+
|
|
1078
|
+
force_data["geom_info"] = num_parse(args.geom_info[0])
|
|
1079
|
+
|
|
1080
|
+
force_data["opt_method"] = args.opt_method
|
|
1081
|
+
|
|
1082
|
+
force_data["xtb"] = args.usextb
|
|
1083
|
+
force_data["opt_fragment"] = [num_parse(args.opt_fragment[i]) for i in range(len(args.opt_fragment))]
|
|
1084
|
+
|
|
1085
|
+
|
|
1086
|
+
return force_data
|