11#  cython: language_level=3
22from  cpython.mem cimport PyMem_Malloc, PyMem_Free
33
4- cdef extern from  " tdnac .c" 
5-     void  TD_NAC_ORB(int  istep, int  nst, int  nbasis double  dt, \
4+ cdef extern from  " tdnac_orb .c" 
5+     void  TD_NAC_ORB(int  istep, int  nst, int  nbasis,  double  dt, \
66        double  ** nacme, double  ** ao_overlap, double  ** mo_coef_old, double  ** mo_coef_new, int  l_spin_restricted)
77
88def  orb_overlap (qm , molecule , istep_py , dt_py , active_spin , l_spin_restricted ):
@@ -12,7 +12,7 @@ def orb_overlap(qm, molecule, istep_py, dt_py, active_spin, l_spin_restricted):
1212        double  ** mo_coef_old
1313        double  ** mo_coef_new
1414
15-         int  istep, ist, nst,  ibasis, jbasis, nbasis
15+         int  istep, ist, ibasis, jbasis, nbasis
1616        double  dt
1717
1818    #  Assign size variables
@@ -32,13 +32,13 @@ def orb_overlap(qm, molecule, istep_py, dt_py, active_spin, l_spin_restricted):
3232    nacme =  < double ** >  PyMem_Malloc(nst *  sizeof(double * ))
3333
3434    ao_overlap =  < double ** >  PyMem_Malloc(nbasis *  sizeof(double * ))
35-     mo_coef_old =  < double ** >  PyMem_Malloc(norb  *  sizeof(double * ))
36-     mo_coef_new =  < double ** >  PyMem_Malloc(norb  *  sizeof(double * ))
35+     mo_coef_old =  < double ** >  PyMem_Malloc(nst  *  sizeof(double * ))
36+     mo_coef_new =  < double ** >  PyMem_Malloc(nst  *  sizeof(double * ))
3737
3838    for  ist in  range (nst):
3939        nacme[ist] =  < double * >  PyMem_Malloc(nst *  sizeof(double ))
40-         mo_coef_old[iorb ] =  < double * >  PyMem_Malloc(nbasis *  sizeof(double ))
41-         mo_coef_new[iorb ] =  < double * >  PyMem_Malloc(nbasis *  sizeof(double ))
40+         mo_coef_old[ist ] =  < double * >  PyMem_Malloc(nbasis *  sizeof(double ))
41+         mo_coef_new[ist ] =  < double * >  PyMem_Malloc(nbasis *  sizeof(double ))
4242
4343    for  ibasis in  range (nbasis):
4444        ao_overlap[ibasis] =  < double * >  PyMem_Malloc(nbasis *  sizeof(double ))
@@ -57,28 +57,24 @@ def orb_overlap(qm, molecule, istep_py, dt_py, active_spin, l_spin_restricted):
5757            mo_coef_old[ist][ibasis] =  qm.mo_coef_old[ist, ibasis]
5858            mo_coef_new[ist][ibasis] =  qm.mo_coef_new[ist, ibasis]
5959
60-     #  Calculate TDNAC term for CIoverlap
61-     TD_NAC(istep, nst, nbasis, norb, nocc, nvirt, dt, orb_ini, orb_final, nacme, \
62-         ao_overlap, mo_coef_old, mo_coef_new, ci_coef_old, ci_coef_new)
60+     #  Calculate TDNAC term
61+     TD_NAC_ORB(istep, nst, nbasis, dt, nacme, ao_overlap, mo_coef_old, mo_coef_new, l_spin_restricted)
6362
6463    #  Assign NACME variables from C to python
6564    for  ist in  range (nst):
6665        for  jst in  range (nst):
6766             molecule.nacme[ist, jst] =  nacme[ist][jst]
68- 
69-     for  iorb in  range (norb):
70-         for  ibasis in  range (nbasis):
71-             qm.mo_coef_old[iorb, ibasis] =  mo_coef_new[iorb][ibasis]
67+     
68+     if  (l_spin_restricted ==  1  and  active_spin ==  " up+dw" 
69+         for  ist in  range (nst):
70+             for  jst in  range (nst):
71+                 molecule.nacme[nst +  ist, nst +  jst] =  nacme[ist][jst]
7272
7373    for  ist in  range (nst):
74-         for  iorb in  range (nocc):
75-             for  jorb in  range (nvirt):
76-                 qm.ci_coef_old[ist, iorb, jorb] =  ci_coef_new[ist][iorb][jorb]
74+         for  ibasis in  range (nbasis):
75+             qm.mo_coef_old[ist, ibasis] =  mo_coef_new[ist][ibasis]
7776
7877    #  Deallocate NACME variables
79-     PyMem_Free(orb_ini)
80-     PyMem_Free(orb_final)
81- 
8278    for  ist in  range (nst):
8379        PyMem_Free(nacme[ist])
8480
@@ -87,24 +83,11 @@ def orb_overlap(qm, molecule, istep_py, dt_py, active_spin, l_spin_restricted):
8783    for  ibasis in  range (nbasis):
8884        PyMem_Free(ao_overlap[ibasis])
8985
90-     for  iorb  in  range (norb ):
91-         PyMem_Free(mo_coef_old[iorb ])
92-         PyMem_Free(mo_coef_new[iorb ])
86+     for  ist  in  range (nst ):
87+         PyMem_Free(mo_coef_old[ist ])
88+         PyMem_Free(mo_coef_new[ist ])
9389
9490    PyMem_Free(ao_overlap)
9591    PyMem_Free(mo_coef_old)
9692    PyMem_Free(mo_coef_new)
9793
98-     for  ist in  range (nst):
99-         for  iorb in  range (nocc):
100-             PyMem_Free(ci_coef_old[ist][iorb])
101-             PyMem_Free(ci_coef_new[ist][iorb])
102- 
103-     for  ist in  range (nst):
104-         PyMem_Free(ci_coef_old[ist])
105-         PyMem_Free(ci_coef_new[ist])
106- 
107-     PyMem_Free(ci_coef_old)
108-     PyMem_Free(ci_coef_new)
109- 
110- 
0 commit comments