QuantumModelLib or QML* is a free software under the MIT Licence.
date: 29/07/2026
Copyright (c) 2022 David Lauvergnat [1]
with contributions of:
Félix MOUHAT [2]
Liang LIANG [3]
Emanuele MARSILI [1,4]
Evaristo Villaseco Arribas [5]
Peter Schürger [1]
[1]: Institut de Chimie Physique, UMR 8000, CNRS-Université Paris-Saclay, France [2]: Laboratoire PASTEUR, ENS-PSL-Sorbonne Université-CNRS, France [3]: Maison de la Simulation, CEA-CNRS-Université Paris-Saclay,France [4]: Durham University, Durham, UK [5]: Department of Physics, Rutgers University, Newark, New Jersey 07102, USA
* Originally, it has been developed during the Quantum-Dynamics E-CAM project : https://www.e-cam2020.eu/quantum-dynamics
To build the library with the default options:
make libThe QuantumModelLib needs two other external libraries (AD_dnSVM and QDUtilLib) present in QuantumModelLib directory. Then, the compilation creates two libraries:
- a standalone library: libQuantumModelLibFull_XXX_optW_ompX_lapackY_intZ_realR.a which contains everything except the .mod files
- a QuantumModelLib library: libQuantumModelLib_XXX_optW_ompX_lapackY_intZ_realR.a. The two other external libraries need to be link separatlely.
with:
- XXX: the compiler name (like gfortran, ifx)
- W, (OPT: compiler optimization): 0/1 when flags are turn off/on
- X, (OMP: OpenMP): 0/1 when flags are turn off/on
- Y, (LAPACK): 0/1 when flags are turn off/on
- Z: (INT: integer default at compilation), possible values: 4 or 8
- R: (REAL, the value of real kind), possible values: 32, 64, 128
For instance, the default libraries are (XXX=gfortran, W=1, X=1, Y=1, Z=4 and R=64):
- libQuantumModelLib_gfortran_opt1_omp1_lapack1_int4_real64.a
- libQuantumModelLibFull_gfortran_opt1_omp1_lapack1_int4_real64.a
Remarks: To be compatible with previous versions, the standalone library is linked to other library names:
- libQMLFull_XXX_optW_ompX_lapackY_intZ.a
- libQMLFull.a and QuantumModelLib library is linked to:
- libQuantumModelLib_XXX_optW_ompX_lapackY_intZ.a
- libQuantumModelLib.a
The compiler options are (the first values are the default):
- FC=gfortran or ifx or ifort ...
- OPT=1 or 0: compilation with optimization or without optimization
- OMP=1 or 0: with or without openmp
- LAPACK=1 or 0: with or without blas and lapack libraries
- INT=4 or 8: change the integer kind default compilation option
- RKIND=real64 or real32 or real128: change the real kind
Exemple:
make FC=gfortran OPT=1 OMP=0 RKIND=real128The module files (.mod) are in the OBJ/obj_XXX_optW_lapackX_ompY_intZ_realR directory. If you need to compile your code with them, then use the -I option (gfortran). For instance:
gfortran -I/$QML_path/OBJ/obj_XXX_optW_lapackX_ompY_intZ_realR -c YourCode.f90QML_path contains the path of QuantumModelLib.
This version works with:
gfortran 9.0 (linux and macOS)
ifort/ifx 19
When lapack/blas are not linked to the library:
gfortran .... $QML_path/libQMLFull_XXX_optW_ompX_lapack0_intZ.aor with lapack/blas (linux)
gfortran .... $QML_path/libQMLFull_XXX_optW_ompX_lapack1_intZ.a -llapack -lblasIn the following, it shows how to initialize, compute with the driver subroutines (the standalone library is needed, the Fortran module files are not required)
CALL sub_Init_Qmodel(ndim,nsurf,pot_name,adiabatic,option)where
- ndim : the number of degree(s) of freedom [integer]
- nsurf : the number of electronic surface(s) (adiabatic or diabatic) [integer]
- pot_name : the name of the potential or model (phenol, Tully, HenonHeiles ...) [string of characters]
- adiabatic : flag (.TRUE. or .FALSE.) [logical]
- option : option, to be able to select a model with several options (Tully ...) [integer]
There is an alternative way to initialized a model, when the coordinate are given in Cartesian coordinates, but the potential is in internal (curvilinear) coordinates
CALL sub_Init_Qmodel_Cart(ndim,nsurf,pot_name,adiabatic,option)The parameters are indentical as the previous subroutine, but ndim is the number of Cartesian coordinates. Remark: the model Fortran file must contain a specific Cart_TO_Q_QModel subroutine.
Example:
ndim = 2
nsurf = 3
CALL sub_Init_Qmodel(ndim,nsurf,'phenol',.FALSE.,0)It initializes the phenol potential (2D and 3 PES). => Computation of the diabatic surface
The list of available models is given below.
CALL sub_Read_Qmodel(ndim,nsurf,nio) where
- ndim : the number of degree(s) of freedom [integer]
- nsurf : the number of electronic surface(s) (adiabatic or diabatic) [integer]
- nio : file unit where the namelist is read. It can be the standard unit [integer]
Then, the &potential namelist is read. In the following exemple, the 2+1D-retinal model ('Retinal_JPCB2000') is read.
&potential
pot_name='Retinal_JPCB2000' ! potential surface name
ndim=3 PubliUnit=f
adiabatic=t
Phase_checking=f
/It initializes the 2+1D-retinal model (ndim=3). For this model, fhe number of electronic surfaces is automatically set up to 2. => adiabatic=t : Computation of the adiabatic surface: => Phase_checking=f : The adiabatic vector phases are not checked between several calculations => PubliUnit=f : The atomic units are used
Some extra parameters can be initialized with specific procedures:
-
Phase_Checking (default: .FALSE. ) for the adiabatic calculations: WARNING: Before the version 23.3, the default was .TRUE.
When Phase_Checking=.TRUE.: The eigenvector phases are checked and changed through overlapp beetween the current and reference eigenvectors. The two (and only two) eigenvectors are degenerated a rotation may occur (experimental)
When Phase_Checking=.FALSE.: The eigenvector phases are not checked
To change Phase_Checking behavior:
CALL set_Qmodel_Phase_Checking(Phase_Checking)-
Phase_Following (default: .FALSE. ) for the adiabatic calculations: WARNING: Before the version 23.2, the default was .TRUE.
This feature is only relevant if Phase_Checking=.TRUE. When Phase_Checking=.TRUE., the reference eigenvectors are the ones of the previous evaluation. When Phase_Checking=.FALSE., the reference eigenvectors are the ones of the first evaluation.
To change Phase_Following behavior:
CALL set_Qmodel_Phase_Following(Phase_Following)-
Other parameters can be changed
or it can be set up while reading the model (see 3a2).
A subroutine for the potential (adaibatic or diabtic):
CALL sub_Qmodel_V(V,Q) where
Q(:) is the ndim coordinates (vector of real(kind=8))
V(:,:) is PES and a nsurf x nsurf matrix of real (kind=8)
Remarks:
- when adiabatic is set to .TRUE. during initialization, V(:,:) is a diagonal matrix.
Full list of drivers:
CALL sub_Qmodel_VG(V,G,Q) ! to get the potential and the gradient
! G(:,:,:) are real (kind=8) of nsurf x nsurf x ndim
CALL sub_Qmodel_VGH(V,G,H,Q) ! to get the potential, the gradient and the hessian
! H(:,:,:,:) are real (kind=8) of nsurf x nsurf x ndim x ndim
CALL sub_Qmodel_Vdia_Vadia(Vdia,Vadia,Q) ! get the diabatic potential and the adiabatic one (if adiabatic=.TRUE.)
CALL sub_Qmodel_VVec(V,Vec,Q) ! get the adiabatic potential (V) and the adiabatic vectors (Vec)
CALL sub_Qmodel_VVec_Vec0(V,Vec,Vec0,Q) ! get the adiabatic potential (V) and the adiabatic vectors (Vec).
! Vec0(:,:) (nsurf x NB) is initial vector (for the phase following)
CALL sub_Qmodel_VG_NAC(V,G,NAC,Q) ! to get the potential, the gradient and the non-adiabatic couplings (NAC).
! NAC(:,:,:) are real (kind=8) of nsurf x nsurf x ndim
CALL sub_Qmodel_VG_NACdNAC(V,G,NAC,dNAC,Q) ! as the previous one + the 2d order derivative of the vectors, dNAC.
! NAC(:,:,:,:) are real (kind=8) of nsurf x nsurf x ndim x ndim
CALL sub_Qmodel_VG_NAC_Vec0(V,G,NAC,Vec0,Q) ! as sub_Qmodel_VG_NAC + Vec0(:,:) (nsurf x NB) is initial vector (for the phase following)
CALL sub_Qmodel_VG_NAC_VecVec0(V,G,NAC,Vec,Vec0,Q) ! as the previous one + the adiatic vector, Vec(:,:) (nsurf x NB).This feature can be used only when the model is read. Therefore in the initialization with sub_Init_Qmodel, the variable, pot_name, must be 'read_model'. Then:
(i) The potential must be read as a namelist:
&potential
pot_name='hbond' ! potential surface name
Vib_adia=t
list_act=1
read_nml=f
nb_channels=6
/In this example the 'Hbond' potential is used within the adiabatic separation (Vib_adia=t). Read_nml=f, the specific namelist for 'hbond' model is not read. The number of channels (nsurf) is 6 list_act is a table which enables to select the active coordinate(s) (here the first one only) The inactive coordinates are just the remaining coordinates (here 2)
(ii) A basis set must be read for the inactive coordinates:
&basis_nD name='boxAB' nb=64 nq=64 A=-2.5 B=2.5 /Here, it is a 1D basis set (particle-in-a-box), with
- 64 basis function (nb)
- 64 grid points (nq)
- The range of the coordinate is [A,B]
WARNING: It is working only with ONE inactive variable.
The following subroutine enables to get the effective Hamiltonian along
CALL sub_Qmodel_tab_HMatVibAdia(tab_MatH,Q,nb_terms)The table tab_MatH(nsurf,nsurf,nb_terms) contains:
- Heff: tab_MatH(nsurf,nsurf,1) [1 matrix]
- F2 terms: tab_MatH(nsurf,nsurf,2:...) [ (nb_act+1)nb_act/2 matrices)]
- F1 terms: tab_MatH(nsurf,nsurf,...:nb_terms) [ nb_act matrices ]
CALL get_Qmodel_GGdef(GGdef)where:
Most of the models are associated with a specific kinetic energy operator (KEO) Here, it is given through a constant metric tensor, GGdef, so the that the KEO is:
Its diagonal components,
Remark: The metric tensor can be modified:
CALL set_Qmodel_GGdef(GGdef,ndim)where
- ndim is the number of degree(s) of freedom it MUST be indentical to the initialized value (with sub_Init_Qmodel)
-
$GGdef(:,:)$ is the new metric tensor a ndim x ndim matrix of real (kind=8)
- Functions or subroutines to check data of the initialization:
ndim = get_Qmodel_ndim() ! get ndim (number of coordinates)
nsurf = get_Qmodel_nsurf() ! get nsurf (number of electronic surface or vibrational effective surface)
NB = get_Qmodel_NB() ! get the number of basis functions for the vibrational adiabatic separation
VibAdia = get_Qmodel_Vib_Adia() ! (logical), the value is .TRUE. for the vibrational adiabatic separation
CALL sub_check_Init_Qmodel(check) ! check if the model is initialized
CALL sub_Write_Qmodel(nio) ! write the model to the unit **nio**
CALL sub_Qmodel_check_alloc_d0GGdef(check) ! check is set to .TRUE.,
! when a model is initialized and when the metric tensor is allocated.
CALL sub_Qmodel_Check_anaVSnum(Q,nderiv) ! check analitical versus numerical derivatives
CALL set_Qmodel_step(step) ! set the displacement value when
! the derivatives are obtained using the finite difference approach.- Subroutines to change default parameters:
CALL set_Qmodel_Print_level(printlevel) ! change the default printing level (default, printlevel=-1)
CALL set_Qmodel_in_unit(inunitp) ! change the reading unit.
! usefull, when the model is read from a user defined unit
CALL set_Qmodel_out_unit(outunitp) ! change the writing unit.
! usefull, when output is printed to a user defined unit
CALL set_Qmodel_Phase_Checking(check) ! change the default (.FALSE.) Phase_Checking flag (see 3a3)
CALL set_Qmodel_Phase_Following(check) ! change the default (.FALSE.) Phase_Following flag (see 3a3)
CALL set_Qmodel_Print_Vec_Overlap(Print_Vec_Overlap) ! change the default (0) of Print_Vec_Overlap.
! relevant when Phase_Following=.TRUE.With "make all", the libraries are created and several main programs.
From the main QuantumModelLib directory:
make utThis will run all Fortran test files.
To run a single test, the SRCTESTFILES makefile variable can be used. For example, to only run TEST_buck.f90 test:
make ut SRCTESTFILES=TEST_buck.f90From the Tests directory
./run_test_QML=> Some options are possible, the compiler, OPT, OMP, Lapack
Or you can run:
./run_tests=> All possible combinations between OPT=0/1, OMP=0/1, Lapack=0/1 will be tested. Beware, this test is long.
From the main QuantumModelLib directory:
./APP_driver.x < Tests/DAT_files/Vibadia_HBond.dat > res_driver=> Test sevral models (1 or several surfaces, optimization, Vibration adiabatic separation)
./APP_VibAdia.x < Tests/DAT_files/Vibadia_HBond.dat > res_VibAdia=> Test a Vibration adiabatic separation model.
./APP_grid.x > res_grid=> Test the 1D and 2D-cut generation for HenonHeiles potential (it uses subroutines with Fortran modules)
./APP_OMPloop.x > res_loop=> Test an OpenMP loop (
-
You have to edit the fpm.toml and change the QML_path (path of QML directory)
-
If you want to remove OpenMP feature,
-
build:
fpm buildRemark: if you get this error "'./././/Ext_lib/QDUtilLib/fpm.toml' could not be found" Its means that the link between some dependencies are lost. Do:
make fpmlink- tests:
fpm test --> resThe intermediate result files (.txt grid) are in the RES_files directory (link to Tests/RES_files). The tests summaries are in QModel.log file (about 43 tests are performed)
Remark: if you get this error "STOP ERROR in Test_QdnV_FOR_Model: Impossible to open the file" Its means that the link between RES_files and/or DAT_files are lost. Do:
make fpmlink- run examples:
fpm run driver --< Tests/DAT_files/Vibadia_HBond.dat --> res_driver=> Test sevral models (1 or several surfaces, optimization, Vibration adiabatic separation)
fpm run vibadia --< Tests/DAT_files/Vibadia_HBond.dat --> res_VibAdia=> Test a Vibration adiabatic separation model.
fpm run grid=> Test the 1D and 2D-cut generation for HenonHeiles potential (it uses subroutines with Fortran modules)
fpm run omp=> Test an OpenMP loop (
Buckingham potential: V(R) = A*exp(-B*R)-C/R^6
pot_name = 'buck'
ndim = 1
nsurf = 1
reduced mass = 36423.484024390622 au
remark: default parameters for Ar2
ref: R.A. Buckingham, Proc. R. Soc. A Math. Phys. Eng. Sci. 168 (1938) 264–283. doi:10.1098/rspa.1938.0173
LinearHBond potential: Morse1(QQ/2+q,param1)+Morse2(QQ/2-q,param2)+Eref2+Buckingham(QQ)
pot_name = 'HBond'
ndim = 2 (QQ,q)
nsurf = 1
reduced masses = (/ 29156.946380706224, 1837.1526464003414 /) au
remark:
A--------------H-----X--------------------B
<--------------QQ----------------------->
<-q->
ref: Dana Codruta Marinica, Marie-Pierre Gaigeot, Daniel Borgis,
Chemical Physics Letters 423 (2006) 390–394
DOI: 10.1016/j.cplett.2006.04.007
ref: Eq 3.79 of J. Beutier, thesis.
remark: when option=2 is selected, a contribution is added along QQ:
Dm.exp(-betam.(QQ-QQm)) + Dp.exp(+betap.(QQ-QQp))
2D model
pot_name = 'TwoD_RJDI2014'
ndim = 2 (X,Y)
nsurf = 2
Reduced masses = [1. , 1.] au
ref: Ilya G. Ryabinkin, Loïc Joubert-Doriol, and Artur F. Izmaylov, ...
... J. Chem. Phys. 140, 214116 (2014); https://doi.org/10.1063/1.4881147
2D model
pot_name = 'TwoD_Valahu2022'
ndim = 2 (X,Y)
nsurf = 2
ref: xxxxx
Model for the photo-isomerization of the penta-2,4-dieniminium (PSB3) cation.
pot_name = 'PSB3'
ndim = 3
nsurf = 2
remarks: two options are possible (option = 1,2)
The default is option=1 (ref2).
The parameters for option=2 come from the following reference.
ref1: E. Marsili, M. H. Farag, X. Yang, L. De Vico, and M. Olivucci, JPCA, 123, 1710–1719 (2019).
https://doi.org/10.1021/acs.jpca.8b10010
ref2: 1 E. Marsili, M. Olivucci, D. Lauvergnat, and F. Agostini, JCTC 16, 6032 (2020).
https://pubs.acs.org/doi/10.1021/acs.jctc.0c00679
Model for the photo-isomerization of retinal.
pot_name = 'Retinal_JPCB2000'
ndim = 2 or up to 2+23
nsurf = 2
ref: S. Hahn, G. Stock / Chemical Physics 259 (2000) 297-312.
doi: 10.1016/S0301-0104(00)00201-9
Model for the photo-dissociation of the uracil cation.
pot_name = 'Uracil'
ndim = 36
nsurf = 4
ref1: Mariana Assmann, Horst Köppel, and Spiridoula Matsika,
J. Phys. Chem. A 2015, 119, 866−875,
DOI: 10.1021/jp512221x
ref2: Patricia Vindel Zandbergen, Spiridoula Matsika, and Neepa T. Maitra
J. Phys. Chem. Lett. 2022, 13, 7, 1785–1790
https://doi.org/10.1021/acs.jpclett.1c04132
Model for the HONO.
pot_name = 'HONO'
ndim = 6
nsurf = 1
ref1: F. Richter, M. Hochlaf, P. Rosmus, F. Gatti, and H.-D. Meyer,
J. Chem. Phys. 120, 1306 (2004).
doi: 10.1063/1.1632471
ref2: F. Richter, F. Gatti, C. Léonard, F. Le Quéré, and H.-D. Meyer,
J. Chem. Phys. 127, 164315 (2007)
doi: 10.1063/1.2784553
H + CH4 -> H-H + CH3 potential
Quadratic potential along the reaction path'
Reaction coordinate: R- = 1/2(RCH - RHH)'
Optimal coordinates along the path at CCSD(T)-F12/cc-pVTZ-F12'
V0 along the path at CCSD(T)-F12/cc-pVTZ-F12'
Hessian along the path at MP2/cc-pVDZ'
pot_name = 'CH5'
ndim = 12 or 1
nsurf = 1
option = 4 (default) or 5
H + PH3 -> H-H + PH2 potential
Quadratic potential along the reaction path'
Reaction coordinate: R- = 1/2(RPH - RHH)'
Optimal coordinates along the path at MP2/cc-pVTZ'
V0 along the path at CCSD(T)-F12/cc-pVTZ-F12 (option 4) or ...'
... MP2/cc-pVTZ'
Hessian and gradient along the path at MP2/cc-pVTZ'
pot_name = 'PH4'
ndim = 9 or 1
nsurf = 1
option = 4 (default)
HOO potential: DMBE IV of Varandas group
pot_name = 'HOO_DMBE'
ndim = 3 (R1=dOO,R2=dHO1,R3=dHO2)
nsurf = 1
ref: M. R. Pastrana, L. A. M. Quintales, J. Brandão and A. J. C. Varandas'
JCP, 1990, 94, 8073-8080, doi: 10.1021/j100384a019.
H3 potential:
pot_name = 'H3'
option = 0,1,10,11 (LSTH)
ndim = 3 (the 3 H-H distances)
nsurf = 1
Units: Energy in Hartree and distances in bohr.
refs (option=0):
P. Siegbahn, B. Liu, J. Chem. Phys. 68, 2457(1978).
D.G. Truhlar and C.J. Horowitz, J. Chem. Phys. 68, 2466 (1978); https://doi.org/10.1063/1.436019
options 0 and 10 : 3D model with IRC functions (1 potential + parameters)
options 0 and 1 : first IRC funtions fitted in polar representation (alpha)
options 10 and 11 : second IRC funtions fitted with the sum and the difference (alpha)
2D Müller-Brown potential:
pot_name = '2d_mb'
ndim = 2 (x,y)
nsurf = 1
reduced masses = [1000.,1000.]
ref: Klaus Müller and Leo D. Brown, ...
... Theoret. Chim. Acta (Berl.) 53, 75-93 (1979)
https://doi.org/10.1007/BF00547608.
remark: the option enables one to select among three minima and two TS.
default (option=1), the first minimum (A in the reference)
CNH or HCN potential:
pot_name = 'CNH_Murrell'
option = 0 (3D-3distances, default), 1,11 (3D-Jacobi), 2,21 (1D-Jacobi MEP)
ndim = 3
nsurf = 1
remarks:
- Atomic order: C, N, H
- Cart_TO_Q is possible
- The options 11 and 21, the third coordinate is cos(theta)
ref: J. N. Murrell, S. Carter and L. O. Halonene, J. Mol. Spectrosc. vo93 p307 1982
doi: https://doi.org/10.1016/0022-2852(82)90170-9
H2O potential:
pot_name = 'H2O'
option = 1(default 1)
ndim = 3
nsurf = 1
refs: Quadratic model potential for H2O; TIPS force constants taken from:
Dang and Pettitt, J. Chem. Phys. 91 (1987)
H2_H2On potential:
pot_name = 'H2_H2On'
option = 1 (default 1)
ndim = 6
nsurf = 1
Bottleneck potential: 1D Eckart Barrier + quadratic contributions'
pot_name = 'Bottleneck' or 'Eckart'
option = 1, 2 (default 2)
ndim >= 1
nsurf = 1
ref (option 1): Trahan, Wyatt and Poirier, J Chem Phys 122, 164104 (2005)'
Multidimensional quantum trajectories: Applications of the derivative propagation method.'
ref (option 2): Dupuy, Lauvergnat and Scribano, CPL 787, 139241 (2022)'
Smolyak representations with absorbing boundary conditions ...'
for reaction path Hamiltonian model of reactive scattering.'
DOI: 10.1016/j.cplett.2021.139241'
ClH2+ potential:
pot_name = 'ClH2+'
option = 1 to 6 (default 6)
ndim = 3
nsurf = 1
remark, 6 options are possible:
options = 1,3,5: the coordinates are [angle, R+, R-] (in bohr and radian)
options = 2,4,6: the coordinates are [R1, R2, angle] (in bohr and radian)
options = 1,2: B3LYP/cc-pVTZ 1st version (do not use)
options = 3,4: B3LYP/cc-pVTZ 2d version
options = 5,6: CCSD(T)-F12b/cc-pVTZ-F12
refs: unpublished
ClH2+ potential:
pot_name = 'ClH2+_Botschwina'
option = 1,2 (default 1)
ndim = 3
nsurf = 1
remark, 2 options are possible:
options = 1: CEPA-1
options = 2: CEPA-1 corrected
ref: Peter Botschwina, J. Chem. Soc., Faraday Trans. 2, 1988, 84(9), 1263-1276'
DOI: 10.1039/F29888401263
CHFClBr QFF and bQFF potentials:
pot_name = 'CHFClBr'
option = no option
ndim = 9
nsurf = 1
remark, with read_nml=t, options are possible:
* norder: order of the Taylor expansion (values: 2,3,4). Default norder=4
* bQFF: corrected bound QFF (values: T,F). Default bQFF=T
refs: unpublished yet
Polynomial potential:
H2 potential pot_name = 'H2' ndim = 1 nsurf = 1
options, (1) Talyor expansion:
reduced mass = 1837.1526464003414/2 au
Morse potential:
HenonHeiles potential
pot_name = 'HenonHeiles'
ndim > 1
nsurf = 1
remark: three options are possible (option = 1,2,3)
option 1: usual HenonHeiles (default)
option 2: quadratic contribution + morse potentials and tanh contributions
option 3: quadratic contribution + tanh contributions for the anharmonic part
reduced masses = ONE au
ref: parameters taken from M. Nest, H.-D. Meyer, J. Chem. Phys. 117 (2002) 10499. doi:10.1063/1.1521129
Polynomial potential:
Polynomial potential:
DoubleWell potential
pot_name = 'DoubleWell'
ndim = 1
nsurf = 1
reduced masses = ONE au
ref: Nancy Makri & William H. Miller, The Journal of Chemical Physics 87, 5781 (1987); doi: 10.1063/1.453501
Tully potential: three options
pot_name = 'Tully'
ndim = 1
nsurf = 2
reduced mass = 2000. au
remark: three options are possible (option = 1,2,3)
ref: Tully, J. Chem. Phys. V93, pp15, 1990
Spin Orbit coupling model
pot_name = '1DSOC_1S1T'
ndim = 1
nsurf = 4 or 2
reduced mass = 20000. au
remarks: 1 singlet and 3 triplet components => nsurf = 4
or 1 singlet and 1 linear combibation of the triplet components => nsurf = 2
ref: Giovanni Granucci, Maurizio Persico, and Gloria Spighi, J. Chem. Phys. V137, p22A501 (2012)
Spin Orbit coupling model
pot_name = '1DSOC_2S1T'
ndim = 1
nsurf = 4
reduced mass = 20000. au
remark: 2 singlets and 1 triplet (2 linear combinations of the triplet components are not included) => nsurf = 4
ref: Giovanni Granucci, Maurizio Persico, and Gloria Spighi, J. Chem. Phys. V137, p22A501 (2012)
Phenol model
pot_name = 'Phenol'
ndim = 2 (R=rOH, th=OH-torsion)
nsurf = 3
Diagonal Metric Tensor = [ 0.0005786177, 0.0002550307 ] au
remark:
ref: Z. Lan, W. Domcke, V. Vallet, A.L. Sobolewski, S. Mahapatra, J. Chem. Phys. 122 (2005) 224315. doi:10.1063/1.1906218.
2D model
pot_name = 'TwoD'
ndim = 2 (X,Y)
nsurf = 2
Reduced masses$ = [ 20000., 6667. ] au
remark: The parameter values have been modified
ref: A. Ferretti, G. Granucci, A. Lami, M. Persico, G. Villani, J. Chem. Phys. 104, 5517 (1996); https://doi.org/10.1063/1.471791