diff --git a/cmake/TestsRelaxSE.cmake b/cmake/TestsRelaxSE.cmake index 4335bcd669fbb5970bef5616f58de911aea0c4f6..26e973cb5a68a6467cb6fbea990cb0d177a65484 100644 --- a/cmake/TestsRelaxSE.cmake +++ b/cmake/TestsRelaxSE.cmake @@ -46,11 +46,13 @@ if(NOT ENABLE_NOGEN) add_runtest(CuO_02240) add_runtest(CuO_02240_lowmem) add_runtest(CuO_30405) - #add_runtest(CuO_03450_nodet2) + #add_runtest(CuO_03450_nodet3) #add_runtest(CuO_03450_nocontraction) #add_runtest(CuO_03450_allcontraction) add_runtest(CuO_03450) + add_runtest(CuO_03450_extravec) + add_runtest(CuO_03450_extravec_reconv) add_runtest(CuO_12423_block0) add_runtest(CuO_12423_block0_lowmem) add_runtest(CuO_12423_block01) diff --git a/doc/code.tex b/doc/code.tex index 6bbfbbf033eca5924b2b612e3d3ed27b333192b5..973827acf93de00bd0da4c757b15f481c0b1d619 100644 --- a/doc/code.tex +++ b/doc/code.tex @@ -1,5 +1,5 @@ The {\sass} code~\cite{p:relaxse} -does a fully-decontracted Multirefrence Configuration +does a fully-decontracted Multireference Configuration Interaction (MRCI) calculation using one of the following methods \begin{itemize} \item {\bf SAS+S~:} single excitations on all determinants of a reference @@ -17,15 +17,15 @@ Interaction (MRCI) calculation using one of the following methods \item {\bf MRSCI~:} single excitations on all determinants of a selected reference space (included into a formal Complete Active Space); -\item {\bf MRSDCI~:} single and double excitations on aall determinants of selected reference space +\item {\bf MRSDCI~:} single and double excitations on all determinants of a selected reference space (included into a formal Complete Active Space); \item {\bf CAS+S~:} single excitations on all determinants of a Complete Active Space; \item {\bf CAS+SD~:} single and double excitations on all determinants of a Complete Active Space; -\item {\bf CAS+DDCI~:} single and double excitations from the Difference - Dedicated Configuration Interaction space~\cite{DDCI1992,DDCI1995,DDCI1997}, on all determinants of a - Complete Active Space. +\item {\bf CAS+DDCI~:} selected single and double excitations on all determinants of a + Complete Active Space, as defined in the Difference + Dedicated Configuration Interaction space~\cite{DDCI1992,DDCI1995,DDCI1997}, \end{itemize} @@ -33,32 +33,32 @@ Interaction (MRCI) calculation using one of the following methods \subsection{The orbital classes} The code uses a partition of the orbital set into 7 different types \begin{description} -\item[FROZEN]~: (keywork NOrb\_gel) doubly-occupied orbitals that are frozen in the +\item[FROZEN]~: (keyword NOrb\_gel) doubly-occupied orbitals that are frozen in the calculation. In the present version this number should be the same as in motra. -\item[OCCUPIED]~: (keywork NOrb\_occ) doubly-occupied orbitals from which only one hole can be created in the calculation. -\item[LIGO]~: (keywork NOrb\_ligo) doubly-occupied orbitals from which two holes can be created in the calculation. +\item[OCCUPIED]~: (keyword NOrb\_occ) doubly-occupied orbitals from which only one hole can be created in the calculation. +\item[LIGO]~: (keyword NOrb\_ligo) doubly-occupied orbitals from which two holes can be created in the calculation. These orbitals are typically the occupied ligand orbitals bridging the magnetic interactions. -\item[ACTIVE]~: (keywork NOrb\_act) active orbitals. When the CAS keywork is +\item[ACTIVE]~: (keyword NOrb\_act) active orbitals. When the CAS keyword is given the the METHOD the whole Complete Active Space is generated. When the - SAS keywork is given the the METHOD only a selection of determinants within the CAS is generated~: + SAS keyword is given the the METHOD only a selection of determinants within the CAS is generated~: \begin{itemize} \item all determinants required for building the $S^2,\, S_z$ spin configurations associated with each configuration provided in Ref0, \item all single excitations within the CAS on each configuration provided in Ref0, and their associated determinants required for the associated $S^2,\, S_z$ spin configurations. \end{itemize} -\item[LIGV]~: (keywork NOrb\_ligv) virtual orbitals on which two particules can be created in the calculation. +\item[LIGV]~: (keyword NOrb\_ligv) virtual orbitals on which two particles can be created in the calculation. These orbitals are typically the virtual ligand orbitals bridging the magnetic interactions. -\item[VIRTUAL]~: (keywork NOrb\_virt) virtual orbitals on which one particule can be created in the calculation. -\item[DELETED]~: (keywork NOrb\_del) virtual orbitals deleted in the +\item[VIRTUAL]~: (keyword NOrb\_virt) virtual orbitals on which one particle can be created in the calculation. +\item[DELETED]~: (keyword NOrb\_del) virtual orbitals deleted in the calculation. In the present version this number should be the same as in motra. \end{description} \subsection{The different methods} -The different types of calculations can be done with a proper combination the -the keyword METHOD (ACS or SAS + DDCI or S) and the setting of the different class of orbitals. +The different types of calculations can be done with a proper combination +the keyword METHOD (CAS or SAS + S, DDCI or SD) and the setting of the different class of orbitals. For instance \\[2ex] \begin{tabular}{l|l|ccccccc} \hline \hline @@ -88,8 +88,8 @@ For instance \\[2ex] \end{tabular} \subsection{The determinant classes} -The \sass\ code partition the determinants into 9 classes, defined from the -number of holes in the OCCUPPIED or LIGO and the number of particules in the LIGV or VIRTUAL classes of orbitals. +The \sass\ code partitions the determinants into 9 classes, defined from the +number of holes in the OCCUPIED or LIGO and the number of particles in the LIGV or VIRTUAL classes of orbitals. {\small \begin{minipage}[t]{0.490\linewidth} @@ -107,7 +107,7 @@ $D_{00}$ & 0 & 0 & n & 0 & 0 \\ & 1 & 0 & n & 0 & 1 \\ \hline % - \multirow{4}{*}{$D_0^2$} & 0 & 2 & n & 2 & 0 \\ + \multirow{4}{*}{$D_{02}$} & 0 & 2 & n & 2 & 0 \\ & 0 & 2 & n & 1 & 1 \\ & 1 & 1 & n & 2 & 0 \\ & 1 & 1 & n & 1 & 1 \\ diff --git a/doc/input.tex b/doc/input.tex index dd523709f62acd61b1e70f790ebf55be04ab7c01..800f61cdbe41013496c8839aa142a5c1ded8fd89 100644 --- a/doc/input.tex +++ b/doc/input.tex @@ -2,13 +2,13 @@ The files required by the \sass code are the following. \begin{filelist} \item[INPUT]~: the input file -\item[prefix.ref0]: the {\sc ref0} short list of determinants. From each - determinant in \file{prefix.ref0} all other determinants to get the desired - spin configurations will be generated. +\item[prefix.ref0]: the {\sc ref0} short list of determinants. Only one + determinant per spin configuration is needed. All the other determinants to + get the desired spin configurations will be automatically generated to get the complete Ref0. \item[prefix.TraOne]: the \file{TraOne} frile issued from \program{motra}. \item[prefix.TraInt]: the \file{TraInt} frile issued from \program{motra}. -\item[prefix.restart]: (optional) the wave-function file for restarts. -\devonly{ \item[prefix.mat]: (optional) the Hamiltonian matrix for lreadHmat = .true..} +\item[prefix.guess]: (optional) the wave-function file from a previous + calculation for a restart. \end{filelist} @@ -17,11 +17,11 @@ The files required by the \sass code are the following. The files generated by the code are \begin{filelist} \item[prefix.out]: the output file. -\item[prefix.det]: (optional) the list of determinants in human readible +\item[prefix.det]: (optional) the list of determinants in human readable format. \item[prefix.bdet]: the list of determinants in binary format. \item[prefix.sass]: sass information file. -\item[prefix.restart]: the wave-function file for restarts. +\item[prefix.restart]: the wave-function file. \devonly{ \item[prefix.mat]: (optional, if --nogen and --build-type=Debug) the Hamiltonian matrix. \item[prefix.mat2]: (optional, if --nogen and --build-type=Debug)) the Hamiltonian matrix (i, j elm(i,j) format @@ -55,35 +55,74 @@ The required namelists are the following ones \vspace*{-2.5ex} \end{itemize} \begin{description} \itemsep 3ex -\item[SassInp]~: dedicated to general informations. +\item[SassInp]~: dedicated to general information. \begin{keywordlist} - \item[prefix]: prefix for all code files except \file{INPUT}. + + \item[prefix]: prefix for all code files except \file{INPUT}. + \item[print\_det]: (optional, default \ftncode{.false.}) to print the determinants list in \file{prefix.det}. - \item[iprint]: (optional, default \ftncode{0}) printinng options. + + \item[iprint]: (optional, default \ftncode{0}) printing options. \begin{itemize} \item \ftncode{0}: no debug print \item \ftncode{1}: print individual block timings \item \ftncode{2}: print the Fock matrix \end{itemize} + \item[method]: (optional, default \ftncode{SAS+S}) method for determinant generation. + The keyword \keyword{method} is compose of two parts. The fist part can be \begin{itemize} - \item \keyword{SAS+S} : SASS method. - \item \keyword{CAS+S} : complete active space + single excitations on all - determinants of the CAS. - \item \keyword{CAS+SD} : complete active space + single and double excitations on all - determinants of the CAS. - \item \keyword{CAS+DDCI} : complete active space + single and double - excitations belonging to the difference dedicated configuration - interaction method. + \item \keyword{SAS}~: for a selection of spin configurations in the Ref0, + \item \keyword{CAS}~: for a complete CAS in the Ref0. \end{itemize} + and the second part that can be + \begin{itemize} + \item \keyword{+S} for single excitations on top of the reference + determinants. The occupied orbitals should be in the \ftncode{Occ} and the + virtual one in the \ftncode{Virt} classes. + \item \keyword{+SD} for single and double excitations on top of the + reference determinant. Note that the occupied orbitals should be in the + \ftncode{Ligo} and the virtual one in the \ftncode{Ligv} classes. + \item \keyword{+DDCI} for a selection of the single and double excitations + (according to the DDCI method) on top of the reference determinant. Note + that the occupied orbitals should be in the \ftncode{Ligo} and the virtual + one in the \ftncode{Ligv} classes. + \end{itemize} + \begin{itemize} + % \item \keyword{SAS+S} : SASS method. + % \item \keyword{CAS+S} : complete active space + single excitations on all + % determinants of the CAS. + % \item \keyword{CAS+SD} : complete active space + single and double excitations on all + % determinants of the CAS. + % \item \keyword{CAS+DDCI} : complete active space + single and double + % excitations belonging to the difference dedicated configuration + % interaction method. + \end{itemize} + \item[sizebatch] : (optional, default \ftncode{40}) size of blocks for MPI - calculations. Recommended size for large calculations~= \ftncode{number of OpenMP threads}. - \item[restart] : (optional, default \ftncode{.false.}) to restart a calculation from a - previous job, file \file{prefix.restart} needs to be present . + calculations. Recommended size for large calculations~= \ftncode{number of OpenMP threads}. + + \item[restart] : (optional, default \ftncode{.false.}) to restart a + calculation from a previous job. The keyword \keyword{method}, the spin + state and the setting of the orbitals in the different classes should be + identical between the two calculations. The file \file{prefix.restart} + from the old + calculation should be provided as \file{prefix.guess}. \\ + Note that the number of required vectors does not need to be identical + between the two calculations.\\ + This option can be used either to converge unconverged vectors (or + converge them to a higher accuracy, see \keyword{nconv} keyword below), or + to require a larger number of vectors. Only the vectors reputed as not + converged will be converged ( see \keyword{nconv} keyword below). \\ + % + \devonly{ \item[prefix.mat]: + (optional) the Hamiltonian matrix for lreadHmat = .true..} + + \item[mem\_reduction] : (optional, default \ftncode{.false.}) turn on/off the - memory reduction which saves intermediate vectors to disk and compute the - pair of off-diagonal blocs independently to save memory. Gives a 30-40\% + memory reduction which computes the + pair of off-diagonal blocks independently to save memory. Gives a 30-40\% gain in memory at the cost of an increased CPU time. \devonly{ @@ -102,7 +141,7 @@ The required namelists are the following ones \vspace*{-2.5ex} \devonly{ \item[lreadHmat] : ( optional, default \ftncode{.false.}) Read - the Hamiltonian matrice on disk -- to be used with + the Hamiltonian matrix on disk -- to be used with \ftncode{lexplicitHmat} to compare both matrices.} \devonly{ @@ -128,7 +167,7 @@ The required namelists are the following ones \vspace*{-2.5ex} } \end{keywordlist} - Typical exemple. + Typical example. \begin{shell} &sassinp prefix="cuo", @@ -137,18 +176,19 @@ The required namelists are the following ones \vspace*{-2.5ex} &end \end{shell} + \bigskip -\item[InfoMolcasInp]~: dedicated to provide informations on group symmetry, +\item[InfoMolcasInp]~: dedicated to provide information on group symmetry, usually contained in the \program{molcas} \file{RunFile}. \begin{keywordlist} \item[NIrrep]: number of irreducible representations in the symmetry - group. + group. As symmetry is not yet implemented it should be 1. \item[Ntot]: total number of orbitals. - \item[iIrTb]: group multiplication table. - \item[iChTb]: group character table. + \item[iIrTb]: group multiplication table. As symmetry is not yet implemented it should be 1. + \item[iChTb]: group character table. As symmetry is not yet implemented it should be 1. \end{keywordlist} - Typical exemple. + Typical example as follows. \begin{shell} &infomolcasinp nirrep=1, @@ -158,7 +198,7 @@ The required namelists are the following ones \vspace*{-2.5ex} &end \end{shell} - + \bigskip \item[OrbInp]~: dedicated to orbitals information. \begin{keywordlist} @@ -170,7 +210,7 @@ The required namelists are the following ones \vspace*{-2.5ex} \item[Norb\_virt]: vector, number of virtual orbitals. \item[NOrb\_del]: vector, number of deleted orbitals. \end{keywordlist} - Typical exemple. + Typical example. \begin{shell} &orbinp norb_gel = 2, @@ -184,20 +224,23 @@ The required namelists are the following ones \vspace*{-2.5ex} \end{shell} + \bigskip - -\item[VecInp]~: dedicated to information on the seaked vectors. +\item[VecInp]~: dedicated to information on the sought vectors. \begin{keywordlist} \item[NRef0]: number of {\sc ref0} determinants to be read in \file{prefix.ref0}. \item[NElact]: number of active/magnetic electrons. \item[NVec]: number of desired eigenstates. - \item[Stot]: $2S+1$, $S$ spin of the seaked states (default + \item[NConv]: (only when the keyword \keyword{restart} is set. Optional, + Default read in \file{prefix.guess} file) Defines the number of vectors + reputed to be converged. Overwrites the value read in \file{prefix.guess}. + \item[Stot]: $2S+1$, $S$ spin of the sought states (default \keyword{stot}=1). Used only to generate the complete {\sc ref0} determinants list. - \item[Sz]: $2S_z$, the spin sector in wich the diagonalisation takes place. + \item[Sz]: $2S_z$, the spin sector in which the diagonalisation takes place. \item[vec\_irrep]: (default 1) the irreducible representation of the - seaked vectors. + sought vectors. As symmetry is not yet implemented it should be 1. \end{keywordlist} - Typical exemple. + Typical example. \begin{shell} &vecinp stot=1, @@ -209,6 +252,8 @@ The required namelists are the following ones \vspace*{-2.5ex} &end \end{shell} + \bigskip + \item[DavidInp]~: (experts) dedicated to the Davidson procedure fine tuning. \begin{keywordlist} @@ -223,7 +268,7 @@ The required namelists are the following ones \vspace*{-2.5ex} \item[tol\_norm]: (optional, default \ftncode{$10^{-15}$}) normalisation maximum error. \item[tol\_conv]: (optional, default \ftncode{$10^{-8}$}) convergence criterium (energy equivalent). - \item[iter0]: (optional, default \ftncode{0}) last iteration number of the previous + \item[iter0]: (optional, default \ftncode{0}) number of the last iteration of the previous run in case of a restart. \item[conv\_ener]: (optional, default \ftncode{.false.}) activate the convergence on energy in addition to vectors. @@ -233,12 +278,17 @@ The required namelists are the following ones \vspace*{-2.5ex} and in \file{fort.666}) } \end{keywordlist} - Typical exemple. + Typical example. \begin{shell} &davidinp &end \end{shell} + \bigskip + +\item[PropInp]~: should be present for the \file{prefix.sass} and + \file{prefix.bdet} files (needed for the properties \program{prop} code) to + be printed. See the \program{PROP} input section. \end{description} @@ -252,3 +302,4 @@ The required namelists are the following ones \vspace*{-2.5ex} %%% mode: latex %%% TeX-master: "user_manual" %%% End: + diff --git a/doc/inputprop.tex b/doc/inputprop.tex index a867992d6b5bbbf8eb3c7a292e10e072193c5e56..a5ee33db451778e3e35c2cb80fb45f34f6cff963 100644 --- a/doc/inputprop.tex +++ b/doc/inputprop.tex @@ -1,10 +1,10 @@ -The \program{\prop} computes properties from the wave functions issued from the +The \program{\prop} code computes properties from the wave functions issued from the \program{\sass} code. It always prints out the projection of the \program{\sass} wave functions on -the CAS. +the reference determinants. -This is presently the only property implemented. +%This is presently the only property implemented. \subsection{Input files} The files required by the \program{\prop} code are the following. @@ -28,7 +28,7 @@ The files generated by the code are \subsection{The \file{INPUT} File } This file is divided in several Fortran namelists. The same namelists as for -the \program{\sass} calculation and an additinal namelist specific for properties +the \program{\sass} calculation and an additional namelist specific for properties calculations. \begin{description} \itemsep 3ex @@ -70,7 +70,7 @@ calculations. on the Ref1 space \\ \keyword{lcoef}: printing of the \program{\sass} wave functions coefficients larger than 0.05. \\ - \keyword{dens2}: two-particules density matrix calculation. + \keyword{dens2}: two-particles density matrix calculation. } \item[seuilcoef]: threshold on the coefficients diff --git a/doc/perf.tex b/doc/perf.tex index 1201c05435182685e1a2635dff1ca21b8da016f0..00e7aaec2ef6b80286e89b8fc929377f1673feb5 100644 --- a/doc/perf.tex +++ b/doc/perf.tex @@ -7,19 +7,19 @@ $D_{\text{Nel}}^{\text{Nexc}}$, where \verb|Nel| is the number of additional electrons in the active part with respect to the {\sc Ref0} configurations, and \verb|Nexc| is the number of additional excitations outside of the active space. The \program{\sass} code has both MPI and OpenMP parallelization -driven both by integral and determinant blocks. The MPI parallelisation is -done on the pair integral-kind~/~determinant-block. When the determinant -blocks are very large, it is possible to divide the calculation into smaller +driven both by integral, determinant blocks and spin cases. The MPI parallelization is +done on the pair integral-kind~/~determinant-block/spin-case. When the determinant +blocks/spin-cases are very large, it is possible to divide the calculation into smaller MPI parts by batching the determinants. However, the gain is not systematic as the integrals are read from disk for each MPI process and the overhead can be large. -Within each MPI process an OpenMP parallelisation is done on the outer particle or +Within each MPI process an OpenMP parallelization is done on the outer particle or hole loop. For an optimal use of the code the user should adjust the number of MPI -precesses, OpenMP threads and the size of the batches according to her/his +processes, OpenMP threads and the size of the batches according to her/his problem and computer system. In order to guide the user for such choices we provide below performance testing for the most typical cases. These data are taken from ref.~\cite{p:relaxse}. diff --git a/doc/user_manual.pdf b/doc/user_manual.pdf index dbcfdc2ec8dd7a6d5118ad2c46a3fe8750a5f1ed..2664af6c29fa0408195291c027e94a14bd9ec060 100644 Binary files a/doc/user_manual.pdf and b/doc/user_manual.pdf differ diff --git a/src/RelaxSE.F90 b/src/RelaxSE.F90 index cefd77e3ef91b93906be4321fbd2398b7a82b194..9233ba45f072a7371cc1d35dd193b4d3148edd97 100644 --- a/src/RelaxSE.F90 +++ b/src/RelaxSE.F90 @@ -82,8 +82,8 @@ Program RelaxSE real(kd_dble) :: hij_test - Integer (KIND=kd_int) :: nvec_restart, nd00 - Integer (KIND=kd_int) :: i, j, idet, jdet + Integer (KIND=kd_int) :: nvec_restart, nvec_gen, nd00 + Integer (KIND=kd_int) :: i, idet, jdet, ivec real(kd_dble) :: tstart, tend, t1, t2, wstart, wend, wstart1, wend1 CHARACTER(LEN=8) :: date ! returned values from DATE_AND_TIME() @@ -163,12 +163,16 @@ Program RelaxSE if (prog_info%id_cpu.eq.0) then if (prog_info%methodAct.eq.'cas') then write(f_output,*) + write(f_output,*) ("--", i=1,50) write(f_output,*)">>> Ref0 = CAS" + write(f_output,*) else write(f_output,*) + write(f_output,*) ("--", i=1,50) write(f_output,*)">>> Reading Ref0" write(f_output,'(a25,":",i4)') " Nb of read ref0 ",& det_info%nref0 + write(f_output,*) end if end if @@ -186,11 +190,11 @@ Program RelaxSE call detact_all_init(r, nb_rlist) - if (prog_info%id_cpu.eq.0) then - write(f_output,*) - write(f_output,*)">>> Generation of all determinants" - flush(f_output) - endif + ! if (prog_info%id_cpu.eq.0) then + ! write(f_output,*) + ! write(f_output,*)">>> Generation of all determinants" + ! flush(f_output) + ! endif call gettime(t1,wstart1) ! Calcul des conf de spin des ref0 call generspin_ref0(ref0, vecref0, r, o_info, det_info, v_info, prog_info) @@ -243,7 +247,9 @@ Program RelaxSE ! Lecture des integrales if (prog_info%id_cpu.eq.0) then write(f_output,*) - write(f_output,*)">>> Lecture des integrales TraOne et TraInt" + write(f_output,*) ("--", i=1,50) + write(f_output,*)">>> Reading integral files TraOne and TraInt" + write(f_output,*) ("--", i=1,50) flush(f_output) endif call gettime(t1,wstart1) @@ -265,7 +271,9 @@ Program RelaxSE !where o runs on both the occ and ligo if (prog_info%id_cpu.eq.0) then write(f_output,*) + write(f_output,*) ("--", i=1,50) write(f_output,*)">>> Construction of the Fock matrix" + write(f_output,*) ("--", i=1,50) endif call gettime(t1,wstart1) @@ -359,23 +367,45 @@ Program RelaxSE int_info, v_info%sz, prog_info) nd00 = d%detblock(1)%p%ndet call diag_h0(h0, psi_0_guess, nd00, ener_info, v_info%nvec, prog_info) - if (prog_info%id_cpu.eq.0) then call gettime(t2,wend1) write(f_output,*) '>>> H0 diagonalised in',t2-t1,'second(s)' flush(f_output) endif deallocate(h0) + else + + if (prog_info%id_cpu.eq.0) then + write(f_output,*) + write(f_output,*) ("--", i=1,50) + write(f_output,*) '>>> Guess vectors from restart file' + write(f_output,*) ("--", i=1,50) + end if r0 => rspin%l(1)%p call lect_guess(psi_0_guess, det_info%ndet, v_info%nvec, nvec_restart, & - bdav_info%iter0, ener_info%potnuc, ener_info%Ecoeur) - if (nvec_restart.lt.v_info%nvec) & - call complement_guess(psi_0_guess, det_info%ndet, v_info%nvec, nvec_restart, r0, d, & - fock, hdiag, g_info, o_info, ord_info, int_info, v_info%sz, ener_info, prog_info) + nvec_gen, bdav_info%iter0, ener_info, v_info, prog_info) + if (nvec_gen.ne.0) & + call complement_guess(psi_0_guess, det_info%ndet, v_info%nvec, nvec_restart, nvec_gen, & + r0, d, fock, hdiag, g_info, o_info, ord_info, int_info, v_info%sz, & + ener_info, prog_info, bdav_info) + ! sauvegarde dans f_restart + + if (prog_info%id_cpu.eq.0) then + rewind(f_restart) + write(f_restart) v_info%nvec, det_info%ndet, v_info%nconv, bdav_info%iter0 + write(f_restart) ener_info%Ecoeur,ener_info%PotNuc + write(f_restart) (ener_info%ener(ivec), ivec =1,v_info%nvec) + do ivec = 1,v_info%nvec + write(f_restart) (psi_0_guess(idet,ivec),idet=1,det_info%ndet) + end do + flush(f_restart) + rewind(f_restart) + end if end if + if (prog_info%id_cpu.eq.0) then write(f_output,*) write(f_output,*) ("--", i=1,50) diff --git a/src/RelaxSE_diag.F90 b/src/RelaxSE_diag.F90 index e6d5154bbc00a0878602e6ec26ba060cc5c7a95f..20c6a84b75e2be41d5c7ca42022b583e4408d914 100644 --- a/src/RelaxSE_diag.F90 +++ b/src/RelaxSE_diag.F90 @@ -39,6 +39,7 @@ module SASS_diag use utils_wrt use utils_ortho use utils_intcase + use utils_char use typetargetvec use compute_hv use sort @@ -117,6 +118,7 @@ contains integer :: ivec, jvec, kvec, iter, ish, jsh, i, j integer :: ncol, icol, jcol, idet + Integer :: n integer :: nguess integer :: iconv, nbre_col @@ -134,7 +136,15 @@ contains real(kd_dble), dimension(:,:), allocatable :: Vm_tmp, Wm_tmp debugdav = bdav_info%debug_dav - open(666) + if (debugdav) then + if (prog_info%id_cpu.eq.0) then + write(f_output,*) + write(f_output,*)">>>>> Debug_dav on <<<<<<<" + write(f_output,*) + end if + call noblancs(prog_info%prefix,n) + open(fdav,file=prog_info%prefix(1:n)//".debug",form="formatted") + end if open(667) ngel = o_info%ngel @@ -145,7 +155,7 @@ contains nvirt = o_info%nvirt nd00 = det%detblock(1)%p%ndet sz = v_info%sz - nvectot = v_info%nvec + nvectot = v_info%nvec !total nb of vectors to be computed (from INPUT) Sizeheff = bdav_info%Sizeheff NitDavid = bdav_info%NitDavid tol_orth = bdav_info%tol_orth @@ -195,23 +205,20 @@ contains if (prog_info%id_cpu.eq.0) then write(f_output,*) - write(f_output,*)& - "=================================================================" - write(f_output,*) ">>> Davidson Diagonalisation with low memory" + write(f_output,*) ">>> Davidson Diagonalisation" ! with low memory" write(f_output,'(A,I0,A,ES8.1)') " Search for ",nvectot,& " vectors with a convergence threshold of ",sqrt(tol_conv) write(f_output,*) call gettime(t1,ostart) write(f_output,'(A,F12.4,A)') 'Total Elapsed tWall ', ostart-prog_info%wstart,'s' - write(f_output, '(A,I0,A)') 'Particles are divided in batches of ', sizebatch + write(f_output,*)& + "=================================================================" endif if (debugdav) then write(fdav,*) "Guess vectors" - do idet = 1, nd00 - write(fdav,*) (psi_0_guess(idet,ivec), ivec = 1,nvectot) - enddo + call wrt_vect(fdav,nd00,ndet,nvectot,psi_0_guess) write(fdav,*) end if @@ -226,14 +233,15 @@ contains ! aux nvectot vecteurs d'essai donnés sur les nd00 premiers déterminants if (prog_info%restart) then nguess = ndet + iter0 = iter0-1 else nguess = nd00 endif Vm(1:nguess,1:nvectot,1) = psi_0_guess(1:nguess,1:nvectot) psi_SASS(1:nguess,1:nvectot) = psi_0_guess(1:nguess,1:nvectot) -!!$ Orthogonormalite des vecteurs d'essai - call orthonorm(Vm(1,1,1),ndet,nvectot,tol_orth,tol_norm,.false.,prog_info) +!!$ Orthogonormalite des vecteurs d'essai + if (.not.prog_info%restart) call orthonorm(Vm(1,1,1),ndet,nvectot,tol_orth,tol_norm,.false.,prog_info) !!$ Davidson iterations ------------------------------------------------ @@ -255,10 +263,27 @@ contains etmp(:) = 0.d0 ! energies temporaires vconv(:) = 0 - nconv = 0 + nconv = 0 !nb of converged vectors ncol = 1 - nvec = nvectot - + nvec = nvectot !nb of vectors still to be converged + ! si restart on met les initialisations specifiques + if (prog_info%restart) then + nconv = v_info%nconv !nb of converged vectors from the restart file + ener(:) = ener_info%ener(:) + if (nconv.ge.nvectot) then + if (prog_info%id_cpu.eq.0) then + write(f_output,'(" Number of converged vectors ",i4,& + " equal to number of required vectors",i4," No diagonalisation needed." )') nconv, nvectot + call SASS_quit('>>> No need to diagonalise', f_output) + end if + end if + if (nconv.ne.0) then + nvec = nvectot - nconv + Vm(:,:,:) = 0.d0 + Vm(1:ndet,1:nvec,1) = psi_SASS(1:ndet, 1+nconv:nvec+nconv) + end if + end if + !Fock and Integrals call intkind_H_all_init(intkindlist, int_info) @@ -268,6 +293,7 @@ contains write(f_output,'(X,A6,X,A12,X,A12,X,A12,2X,A)') & '#Iter', 'tallCPU (s)', 'tCPU0 (s)', 'tWall0 (s)', "Energies" write(*,*) '#tCPU (s) : tWall (s) : tCPU/tWall : intkind : DblockI : DblockJ : spin' + write(*,*) #else write(f_output,'(X,A6,X,A12,X,A12,2X,A)') '#Iter', 'tCPU (s)', 'tWall (s)', "Energies" write(667,*) '#tCPU (s) : tWall (s) : tCPU/tWall : intkind : DblockI : DblockJ : spin' @@ -279,11 +305,15 @@ contains !---------------------------------------------------------------------------------------------- daviter: do iter = 1, NitDavid !--------------------------------------------------------------- + !call recouvrement(Vm(1,1,1), psi_SASS(1,1), ndet,nvec,nconv, f_output, "Vm avant David"," psi_SASS") call david_iter_mem(H_dav, ener, ener_np1, deltaE, vect, psi_SASS, & Vm, Wm, Dimheff, ncol, fock, hdiag, rspin, & det, o_info, int_info, v_info, prog_info, nelact, ndet, nvec, nconv, & hcase_info, pcase_info, bdav_info, ener_info, Hmat, intkindlist, mpilist, iter) - + + !call recouvrement(Vm(1,1,1), psi_SASS(1,1), ndet,nvec,nconv, f_output, "Vm apres David"," psi_SASS") + !call recouvrement(Wm(1,1,1), psi_SASS(1,1), ndet,nvec,nconv, f_output, "Wm apres David"," psi_SASS") + if (prog_info%iprintHmat .gt. 0) goto 902 ! On teste la convergence sur les energies @@ -311,7 +341,7 @@ contains ! On met à jour Ener Ener(1+nconv:nvectot) = Ener_np1(1:nvec) - ! Sauvegarde des vecteurs pour restart + ! Sauvegarde des vecteurs pour restart rewind(f_restart) write(f_restart) nvectot,ndet,nconv, iter+iter0 write(f_restart) Ecoeur,PotNuc @@ -320,6 +350,14 @@ contains write(f_restart) (psi_SASS(idet,ivec),idet=1,ndet) end do flush(f_restart) + + !--- debug + if (debugdav) then + write(fdav,*) "psi_SASS - Iter =", iter + call wrt_vect(f_output,20,ndet,nvectot,psi_SASS) + write(fdav,*) + end if + !--- fin debug ! Si a on atteint Sizeheff alors on contracte tout sur les premiers vecteurs ! (une colonne) @@ -358,12 +396,12 @@ contains end do write(f_Wm) Wm(:,:,1) flush(f_Wm) - write(f_output,*) "debug: je sauve les vecteurs de la colonne:",ncol + !write(f_output,*) "debug: je sauve les vecteurs de la colonne:",ncol flush(f_output) ! Puis Calcul du nouveau vecteur de correction : (HV-EV)/(Ej-Hii) -> Vm(ncol+1) ncol = ncol + 1 - if (debugdav) then + if (debugdav .and. prog_info%id_cpu .eq. 0) then write(fdav,*) " vecteurs HV de l'iteration :", iter+iter0 call wrtmat(Wm, ndet, min(10,ndet), nvec*ncol, fdav) write(fdav,*) @@ -579,7 +617,7 @@ contains Ener_np1(:) = 0.d0 !if (.not.debugmat) then #ifdef VAR_MPI - if ((prog_info%id_cpu.eq.0).and.(prog_info%iprint.gt.0)) then + if ((prog_info%id_cpu.eq.0).and.(prog_info%iprint.gt.1)) then write(*,*) '' write(*,*) '>>>> Compute error' write(*,*) '' @@ -753,7 +791,7 @@ contains close(f_mat) close(f_mat2) close(f_bmat) - close(666) + if (debugdav) close(fdav) close(667) close(f_Vm,status="delete") close(f_Wm,status="delete") @@ -873,7 +911,7 @@ contains #ifdef VAR_MPI - if ((prog_info%id_cpu.eq.0).and.(prog_info%iprint.gt.0)) then + if ((prog_info%id_cpu.eq.0).and.(prog_info%iprint.gt.1)) then write(*,*) '' write(*,*) '>>>> Iteration', iter write(*,*) '' @@ -930,6 +968,10 @@ contains endif #endif + ! Correction du defaut d'orthogonalisation de W avec vecteurs converges pour cause d'erreurs numeriques + call orthog_Schmidt(Wm(1,1,1),psi_SASS(1,1),ndet,nvec,nconv,bdav_info%tol_orth) + + ! Calcul de l'Hamiltonien effectif H_dav ! bloc iteration iter -> <Vm(ivec,ncol)|H|Vm(jvec,ncol)> nsh = (ncol-1)*nvec @@ -967,7 +1009,7 @@ contains endif ! si iter=1 ecrire l'énergie des vecteurs d'essais - if (iter.eq.1) then + if (iter+iter0.eq.1) then do ivec = 1, nvec ener(ivec) = H_dav(ivec,ivec) end do @@ -1018,6 +1060,7 @@ contains if (prog_info%id_cpu .eq. 0) & write(fdav,*) ">>> vecteurs vect de l'iteration :", iter + iter0 call wrtmat(Vect,Dimheff,nvec*ncol,nvec*ncol, fdav) + write(fdav,*) end if @@ -1068,6 +1111,9 @@ contains end do end do deallocate(Vecttmp) +! call orthog_Schmidt(psi_SASS(1,1+nconv),psi_SASS(1,1),ndet,nvec,nconv,bdav_info%tol_orth) +! call orthonorm(psi_SASS(1,1+nconv),ndet,nvec,bdav_info%tol_orth,bdav_info%tol_norm,.true.,prog_info, f_output) + if (debugdav) then write(fdav,*) " vecteurs psi_SASS de l'iteration :", iter+iter0, & @@ -1382,7 +1428,7 @@ contains 1000 continue if ((prog_info%id_cpu .eq. 0).and. (prog_info%iprint .ge. 0)) then - write(*,*) 'Final Sum Wall time on the dfifferent CPUs' + write(*,*) 'Final Sum Wall time on the different CPUs' write(*,*) sum_wall(:) endif diff --git a/src/compute_hv.F90 b/src/compute_hv.F90 index 32c2bbc3fdbcd48802f5247cd8dd237ba8886478..7cf1fb50da83de8f0f43387fb32198be25873892 100644 --- a/src/compute_hv.F90 +++ b/src/compute_hv.F90 @@ -277,7 +277,7 @@ contains cputime(i) = t2-t1 wtime(i) = wt2-wt1 - if (prog_info%iprint.gt.0) then + if (prog_info%iprint.gt.1) then if ((wt2-wt1) .gt. 1d-12) then write(*,'(3(F12.4,A),2A,I3,5(A,I3),A,I4,A,I3,A, F12.4)') & @@ -347,7 +347,7 @@ contains #ifdef VAR_MPI mem = prog_info%mem_reduction - write(*,*) 'mem', mem + !write(*,*) 'mem', mem read_time = 0.d0 DblockI => det%detblock(indxI)%p diff --git a/src/def_files.F90 b/src/def_files.F90 index b30dc4543787e8b37e7af926d3c5bccd5f28c7ac..d36085c911d50ca126a13b1cda0a67377e271651 100644 --- a/src/def_files.F90 +++ b/src/def_files.F90 @@ -46,6 +46,7 @@ subroutine def_files(prog_info) Character*2 :: file_input Character*3 :: file_output, file_det, file_mat Character*4 :: file_fock, file_bmat, file_ref0, file_mat2, file_bdet, file_info + Character*5 :: file_guess Character*6 :: file_traone, file_traint Character*7 :: file_restart Character*40 :: blan40 @@ -57,6 +58,7 @@ subroutine def_files(prog_info) logical :: lexist_mat Character*40 :: filename_mat + Integer :: i !!$============================================================ !!$ -------- Code --------------------------------------------- !!$----- @@ -80,6 +82,8 @@ subroutine def_files(prog_info) file_bdet = "bdet" file_restart= "restart" ! infos pour restart de la procedure de Davidson + file_guess = "guess" ! fichier restart utilisé du precedent calcul pour le + ! restart de la procedure de Davidson file_bmat = "bmat" !Hamiltonian matrix in binary format file_mat = "mat" !Hamiltonian matrix @@ -138,10 +142,13 @@ subroutine def_files(prog_info) write(f_output,*) 'Calculation started on ', date(7:8),'-',date(5:6),& '-',date(1:4), ' at ', time(1:2),':',time(3:4) write(f_output,*) - + write(f_output,*) ("--", i=1,50) + write(f_output,'(X,2A)') '>>> Method ',prog_info%method - - write(f_output,*) ">>> Ouverture des fichiers" + if (prog_info%restart) write(f_output,'(X,2A)') '>>> Restart' + write(f_output,*) ("--", i=1,50) + + write(f_output,*) ">>> Files opening" write(f_output,9001) file_output, prog_info%prefix(1:n)//"."//file_output endif @@ -161,6 +168,17 @@ subroutine def_files(prog_info) open (f_restart,file=prog_info%prefix(1:n)//"."//file_restart,& form="unformatted") + if (prog_info%restart) then + write(filename_mat,'(3A)') prog_info%prefix(1:n),".",file_guess + inquire(file=filename_mat, exist=lexist_mat) + if (.not. lexist_mat) then + call SASS_quit('restart requires in .guess file in input',f_output) + else + open (f_guess,file=prog_info%prefix(1:n)//"."//file_guess,& + form="unformatted") + endif + endif + if (prog_info%lreadHmat) then write(filename_mat,'(3A)') prog_info%prefix(1:n),".",file_mat inquire(file=filename_mat, exist=lexist_mat) @@ -195,11 +213,13 @@ subroutine def_files(prog_info) open (f_bdet,file=file_bdet,form="unformatted") open (f_info,file=file_info,form="unformatted") open (f_restart,file=file_restart,form="unformatted") + open (f_guess,file=file_guess,form="unformatted") open (f_mat,file=file_mat,form="formatted") open (f_mat2,file=file_mat2,form="formatted") open (f_bmat,file=file_bmat,form="unformatted") + if (prog_info%id_cpu.eq.0) then if (prog_info%iprint .gt. 1) then write(f_output,9001) file_fock, file_fock diff --git a/src/files.F90 b/src/files.F90 index 316bb75aa1504ceaccb1eaefee8075c5f213200c..d3d7ef0ca6fda461f137afec9b6c8ec84494dad4 100644 --- a/src/files.F90 +++ b/src/files.F90 @@ -36,12 +36,14 @@ Module files !!$ En entree !!$ f_input : fichier de donnees !!$ f_ref0 : liste des det de ref0 +!!$ f_guess : f_restart d'un precedent calcul pour restart !!$ En sortie !!$ f_output : fichier de sortie !!$ f_det : tous les determinants en clair !!$ f_bdet : tous les determinants en binaire !!$ f_info : variables globales x_info !!$ f_dens : matrice densite +!!$ f_restart: vecteurs a la dernire iteration pour restart !!$ Autres !!$ f_hcore : Hcore (a voir si vraiment nécessaire) @@ -55,7 +57,7 @@ Module files !!$ ----------------------------------------------------------- integer, parameter :: f_input=1, f_output=7, f_ref0=8, f_det=9, f_bdet=39 integer, parameter :: f_fock=10 - integer, parameter :: f_info=24, f_dens=25, f_restart = 15 + integer, parameter :: f_info=24, f_dens=25, f_restart = 15, f_guess = 12 integer, parameter :: f_gen=14, f_gen0=16, f_gen_mem=17, f_gen0_mem=18 integer, parameter :: f_tone=31, f_tint=32, f_mat=33, f_bmat=34, f_mat2=35 integer, parameter :: f_Vm=80, f_Wm=81 diff --git a/src/gener_guess.F90 b/src/gener_guess.F90 index 68caac8044ef25f8bd29b7a5f0cd91175fda62b6..1990a671a53c4a38e8c9f4743f3266eb5ebcb158 100644 --- a/src/gener_guess.F90 +++ b/src/gener_guess.F90 @@ -960,12 +960,12 @@ contains real(kd_dble), dimension(:,:), allocatable, intent(in) :: h0 real(kd_dble), dimension(:,:), allocatable, intent(inout) :: phi_0_guess - type(ener_infotype), intent(in) :: ener_info + type(ener_infotype), intent(inout) :: ener_info integer, intent(in) :: nd00, nvec type(prog_infotype), intent(in) :: prog_info logical :: debug = .false. - integer :: info, i + integer :: info, i,j real(kd_dble), allocatable, dimension(:,:) :: vec real(kd_dble), allocatable, dimension(:) :: e real(kd_dble) :: e0 @@ -983,20 +983,26 @@ contains allocate(e(nd00)) call diag(h0, e, vec, nd00, prog_info%idiag, f_output, info) - + if (debug) then write(f_output,*) write(f_output,*) 'Eigenvalues of the D00-D00 Matrix' do i = 1,nd00 write(f_output,'(2X,I0,X,F22.16)') i, e0 + e(i) enddo - - + write(f_output,*) + write(f_output,*) 'Eigenvectors of the D00-D00 Matrix' + do i=1,nd00 + do j=1,nvec + write(f_output,'(2X,F22.16)',advance='no') vec(i,j) + end do + write(f_output,*) + end do flush(f_output) endif - phi_0_guess = vec(:, 1:nvec) - + phi_0_guess(:,1:nvec) = vec(:, 1:nvec) + ener_info%ener(1:nvec) = e(1:nvec) deallocate(vec) deallocate(e) @@ -1006,177 +1012,376 @@ contains !$==================================================================== !> @brief Read the guess from the file f_restart !> @author MBL - !> @date Feb. 2019 + !> @date Feb. 2019/ Dec; 2024 ! !> @param[allocated] psi_0_guess : guess vectors - !> @param[in] n : Nb of determinants + !> @param[in] ndetcode : Nb of determinants computed in the code !> @param[in] nvec : Number of target states in the code - !> @param[out] nvectot : Number of target states read from the restart file - !! If nvec > nvectot read from restart file - !! nvec - nvectot new guess vectors generated - !> @param[in] pot : Nuclear potential read from molcas file - !! to be compared with the value read from the restart file - !> @param[in] Ec : Core energy read from molcas file + !> @param[out] nveclus : Number of states read from the restart file + !> @param[out] nconv : Number of converged vectors read from the restart file + !> @param[out] ngen : Number of guess vectors to be generated + !> @param[in] ener_info : Nuclear potential & Core energy read from molcas file !! to be compared with the value read from the restart file !$==================================================================== -subroutine lect_guess(psi_0_guess, n, nvec, nvectot, iter, pot, Ec) - Real*8, parameter :: seuil = 1.d-12 - real(kd_dble), allocatable :: psi_0_guess(:,:) - Real (KIND=kd_dble), intent(in) :: Ec - Real*8, intent(in) :: pot - integer, intent(in) :: n, nvec - Integer, intent(inout) :: iter - Real*8 :: Ecoeur,PotNuc - Real(kd_dble), dimension(nvec) :: ener - Integer :: nvectot,ndet,nconv, ivec, idet, nveclus + subroutine lect_guess(psi_0_guess, ndetcode, nvec, nveclus, ngen, iter, ener_info, v_info, prog_info) + use utils_char + Real*8, parameter :: seuil = 1.d-12 + real(kd_dble), dimension(:,:), allocatable, intent(out) :: psi_0_guess(:,:) + integer, intent(in) :: ndetcode, nvec + Integer, intent(inout) :: iter + Integer, intent(out) :: nveclus, ngen + type(ener_infotype), intent(inout) :: ener_info + type(v_infotype), intent(inout) :: v_info + type(prog_infotype), intent(in) :: prog_info + + Character*5 :: file_guess + + Real(kd_dble), dimension(:,:), allocatable :: tmp_guess + Real(kd_dble), dimension(:), allocatable :: ener + Real(kd_dble) :: Ecoeur,PotNuc + Integer :: ndet, nconv, ivec, idet, my_iostat, i, n + Character(len=256) :: my_iomsg + Logical :: debugl=.false. +#ifdef VAR_MPI + integer :: info +#endif + + if (prog_info%id_cpu.eq.0) then + write(f_output,*) + if (debugl) write(f_output,*) ">>> Debug : Guess vectors read from file" + end if - write(f_output,*) - write(f_output,*) " Guess vectors read from file" +! !!$--- Lecture des infos sur f_guess (chaque proc a son propre pointeur) + + rewind(f_guess) + read(f_guess,iostat=my_iostat, iomsg=my_iomsg) nveclus,ndet,nconv, iter + read(f_guess,iostat=my_iostat, iomsg=my_iomsg) Ecoeur,PotNuc + + allocate (ener(nveclus)) + read(f_guess) (ener(ivec), ivec =1,nveclus) + + allocate(tmp_guess(ndet,nveclus)) + tmp_guess(:,:) = 0.d0 + do ivec = 1,nveclus + my_iomsg=' ' + read(f_guess,iostat=my_iostat, iomsg=my_iomsg) (tmp_guess(idet,ivec),idet=1,ndet) + ! if (prog_info%id_cpu.eq.0) then + ! select case (my_iostat) + ! case (0) + ! write(f_output,'(2x,"Vector ",i3," has been sucessfully read")') ivec + ! if (debugl) write(f_output,'("ivec=",i3," iostat=",i3,2x,"iomsg=",a120)') & + ! ivec, my_iostat, my_iomsg + ! case default + ! write(f_output,'("ivec=",i3," iostat=",i3,2x,"iomsg=",a120)') & + ! ivec, my_iostat, my_iomsg + ! end select + ! flush(f_output) + ! end if + end do + + ! fermeture fichier + close (f_guess) + +!!$ Ecritures + if (prog_info%id_cpu.eq.0) then + write(f_output,9001) nveclus,ndet,nconv, iter + write(f_output,9002) Ecoeur,PotNuc + write(f_output,*) + ! write(f_output,9003) + ! write(f_output,9004) (ener(ivec), ivec =1,nveclus) + ! write(f_output,*) + write(f_output,*) " Vectors read " + call wrt_vect(f_output,10,ndet,nveclus, tmp_guess) + write(f_output,*) + flush(f_output) + end if + + + +!!$--- Tests donnees code et guess identiques + ! test egalite des nbre de det e + if (ndetcode.ne.ndet) then + if (prog_info%id_cpu.eq.0) then + write(f_output,*) + write(f_output,'(1x," Number of determinants read from file: ",i4, & + " different from number of computed ones :",i4)') ndet, ndetcode + write(f_output,*) + end if + call SASS_quit(' Error in nb of determinants read from file', f_output) + end if + + ! test egalite Ecoeur,PotNuc & test egalite + if (abs(ener_info%potnuc-potnuc).ge.seuil) then + if (prog_info%id_cpu.eq.0) then + write(f_output,*) + write(f_output,'(1x," Nuclear potential read from restart file: ",i4, & + " differs from read on molcas file :",i4)') potnuc, ener_info%potnuc + write(f_output,*) + end if + call SASS_quit(' Error in potnuc read from file', f_output) + end if + if (abs(ener_info%Ecoeur-Ecoeur).ge.seuil) then + if (prog_info%id_cpu.eq.0) then + write(f_output,*) + write(f_output,'(" Core energy read from restart file: ",i4, & + " differs from read on molcas file :",i4)') Ecoeur, ener_info%Ecoeur + write(f_output,*) + end if + call SASS_quit('Error in Ecoeur read from file', f_output) + end if + + +!!$ Reste a calculer + ! cas ou on choisi dans les input le nombre de vecteurs converges + if (v_info%nconv.ne.-1) then ! certains vecteurs sont supposes converges + if (nconv.gt.nveclus) then + if (prog_info%id_cpu.eq.0) then + write(f_output,*) ' Error~: number of given converged vecteurs > number of read vectors' + flush(f_output) + end if + call SASS_quit(' nconv should be smaller than nvec from guess file',f_output) + end if + nconv = v_info%nconv + else + v_info%nconv = nconv + end if + + ! test du cas de convergence + ngen = 0 + if (nvec.le.nconv) then + ! tous les vecteurs demandes sont converges + if (prog_info%id_cpu.eq.0) & + write(f_output,'(1x," All guess vectors read from file are converged.", & + " No need to work further.")' ) + call SASS_quit(' All vectors converged. ', f_output) + + else if (nconv.lt.nvec .and. nconv.eq.nveclus) then + ! ts les vecteurs demandes ne sont pas converges + ! ts les vecteurs lus sont converges + ngen = nvec-nveclus + if (prog_info%id_cpu.eq.0) then + write(f_output,'(1x," All vectors read from file are converged.")') + write(f_output,'(1x,i4," out of ",i4," required vectors are converged.")') & + nconv, nvec + write(f_output,'(1x,i4," extra guess vectors will be generated from H0=<D00|H|D00>")') & + ngen + end if + + else if (nconv.lt.nvec .and. nvec.le.nveclus) then + ! ts les vecteurs demandes ne sont pas converges + ! On a assez de vecteurs lus, pas besoin d'en generer + if (prog_info%id_cpu.eq.0)& + write(f_output,'(1x,i4," out of ",i4," required vectors are converged.")') & + nconv, nvec + + else if (nconv.lt.nvec .and. nvec.gt.nveclus) then + ! ts les vecteurs demandes ne sont pas converges + ! certain ont des guess lus, pas les autres + ngen = nvec - nveclus + if (prog_info%id_cpu.eq.0) then + write(f_output,'(1x,i4," out of ",i4," required vectors are converged.")') & + nconv, nvec + write(f_output,'(1x,i4," extra guess vectors will be generated from H0=<D00|H|D00>")') & + ngen + end if + + else + ! ne devrait pas exister + call SASS_quit(' Error ', f_output) + end if + + + + +!!$--- On met les tableaux lus dans tableaux du code et on dealloue + n = min(nvec, nveclus) + ener_info%ener(1:n) = ener(1:n) + deallocate(ener) + + allocate(psi_0_guess(ndet,nvec)) + psi_0_guess(:,:) = 0.d0 + psi_0_guess(1:ndet , 1:n) = tmp_guess(1:ndet , 1:n) + deallocate(tmp_guess) - rewind (f_restart) - read(f_restart) nvectot,ndet,nconv, iter - nveclus = nvectot - - if (nvec.ne.nvectot) then - write(f_output,*) - write(f_output,'(" Number of guess vectors read from file: ",i4, & - " different from number of required ones :",i4)') nvectot, nvec - if (nvec.lt.nvectot) then - write(f_output,'(i4," last restart vectors will be discarted")') nvectot-nvec - nveclus = nvec - else if (nvec.gt.nvectot) then - write(f_output,'(i4," extra guess vectors will be generated from H0=<D00|H|D00>")') & - nvec-nvectot - ! nveclus = nvectot - end if - write(f_output,*) -! call generautres() - call SASS_quit('Error in guess vectors read from file', f_output) - end if - if (n.ne.ndet) then - write(f_output,*) - write(f_output,'(" Number of determinants read from file: ",i4, & - " different from number of computed ones :",i4)') ndet, n - write(f_output,*) - call SASS_quit('Error in nb of determinants read from file', f_output) - end if - - allocate(psi_0_guess(n,nvec)) - psi_0_guess(:,:) = 0.d0 - read(f_restart) Ecoeur,PotNuc - if (pot.ne.potnuc) then - write(f_output,*) - write(f_output,'(" Nuclear potential read from restart file: ",i4, & - " differs from read on molcas file :",i4)') potnuc, pot - write(f_output,*) - if (abs(potnuc-pot).ge.seuil) call SASS_quit('Error in potnuc read from file', f_output) - end if - if (Ec.ne.Ecoeur) then - write(f_output,*) - write(f_output,'(" Core energy read from restart file: ",i4, & - " differs from read on molcas file :",i4)') Ecoeur, Ec - write(f_output,*) - if (abs(Ecoeur-Ec).ge.seuil) call SASS_quit('Error in Ecoeur read from file', f_output) - end if +!!$ sorties + if (prog_info%id_cpu.eq.0) then + write(f_output,'(1x,i4," vectors read successfully from restart file")') min(nveclus,nvec) + write(f_output,*) + write(f_output,'(1x," Energies of vectors read from restart file")') + do ivec = 1, min(nconv,nvec) + write(f_output,9007) ivec, ener_info%ener(ivec), & + ener_info%ener(ivec) + Ecoeur+Potnuc + end do + do ivec = nconv+1, min(nveclus,nvec) + write(f_output,9008) ivec, ener_info%ener(ivec), & + ener_info%ener(ivec) + Ecoeur+Potnuc + end do + end if + + if (debugl.and.prog_info%id_cpu.eq.0) write(f_output,*) "<<< Debug : Fin reading guess vectors from file" - read(f_restart) (ener(ivec), ivec =1,nveclus) - do ivec = 1,nveclus - read(f_restart) (psi_0_guess(idet,ivec),idet=1,ndet) - end do +9001 format(2x,'nveclus =',i3,/, 2x,'ndet =',i10,/, 2x,'nconv =',i3,/,& + 2x,'iter =',i3,/) +9002 format(2x,'Ecoeur =',f20.10,/, 2x,'PotNuc =',f20.10,/) +9003 format(2x,'Ener =') +9004 format(2x,f20.15) +9005 format(2x,'Vectors=') +9006 format(2x,5(f20.15,2x)) +9007 format(2x,i10,2x,2(f22.15,2x)," converged") +9008 format(2x,i10,2x,2(f22.15,2x)," not converged") end subroutine lect_guess !$==================================================================== !> @brief Generate missing guess vectors not read from the file f_restart !> @author MBL - !> @date May 2019 + !> @date Dec. 2024 ! !> @param[inout] psi_0_guess : guess vectors - !> @param[in] n : Nb of determinants + !> @param[in] ndet : Nb of determinants !> @param[in] nvec : Number of target states in the code - !> @param[in] nvectot : Number of target states read from the restart file - !! nvec - nvectot new guess vectors generated + !> @param[in] nveclus : Number of target states read from the restart file + !> @param[in] ngen : Number of guess vectors to be generated !$==================================================================== -subroutine complement_guess(psi_0_guess, ndet, nvec, nvectot, r0,d, fock, hdiag, & - g_info, o_info, ord_info, int_info, sz, ener_info, prog_info) +subroutine complement_guess(psi_0_guess, ndet, nvec, nveclus, ngen, & + r0,d, fock, hdiag, g_info, o_info,& + & ord_info, int_info, sz, ener_info, prog_info, bdav_info) !!$ -------- Donness globales --------------------------------- use info + use utils_ortho !!$ -------- Donnes locales ----------------------------------- Implicit none real(kd_dble), dimension(ndet,nvec), intent(inout) :: psi_0_guess(:,:) - Integer, intent(in) :: ndet, nvec, nvectot - type(spindetact_list), intent(in) :: r0 - type(deter_dblocklist), intent(in) :: d - type(g_infotype), intent(in) :: g_info - type(o_infotype), intent(in) :: o_info - type(ord_infotype), intent(in) :: ord_info - type(int_infotype), intent(in) :: int_info - integer, intent(in) :: sz - type(ener_infotype), intent(in) :: ener_info + Integer, intent(in) :: ndet, nvec, ngen + type(spindetact_list), intent(in) :: r0 + type(deter_dblocklist), intent(in) :: d + type(g_infotype), intent(in) :: g_info + type(o_infotype), intent(in) :: o_info + type(ord_infotype), intent(in) :: ord_info + type(int_infotype), intent(in) :: int_info + type(prog_infotype), intent(in) :: prog_info + type(david_infotype), intent(in) :: bdav_info + integer, intent(in) :: sz + type(ener_infotype), intent(inout) :: ener_info + Integer, intent(inout) :: nveclus + + type(ener_infotype) :: tmp_ener Real(KIND=kd_dble), dimension(:,:), allocatable :: fock Real(kd_dble), dimension(:), allocatable :: hdiag - type(prog_infotype), intent(in) :: prog_info +! Real(kd_dble), dimension(nvec) :: ener type(deter_dblock), pointer :: d00 Real(KIND=kd_dble), dimension(:,:), allocatable :: h0 real(kd_dble), dimension(:,:), allocatable :: vect - Integer, dimension(nvectot) :: vguess + Integer, dimension(nveclus) :: vguess Logical, dimension(nvec) :: libre - Integer :: ngen, nd00 + Integer :: nd00 Integer :: ivec, jvec, i, igen, indx Real(KIND=kd_dble) :: tmp, tmpmax - + Logical :: debugl=.false. + ! check - if (nvec.le.nvectot) return + if (nvec.le.nveclus) return + write(f_output,*) + write(f_output,*) ">>> Generation of extra guess vectors from H0=<D00|H|D00>" + ! initialisations - ngen = nvec - nvectot + nveclus = min(nvec,nveclus) vguess(:) = 0 libre(:) = .true. nd00 = d%detblock(1)%p%ndet + if (nvec.gt.nd00) call SASS_quit(' >>> NVec too large', f_output) + !ener(1:nveclus) = ener_info%ener(1:nveclus) + tmp_ener%potnuc = ener_info%potnuc + tmp_ener%Ecoeur = ener_info%Ecoeur + allocate(tmp_ener%ener(nvec)) ! compute guess from DOO block + !write(f_output,*) " Entree dans compute_h0" call compute_h0(h0, r0, d, fock, hdiag, g_info, o_info, ord_info, & int_info, sz, prog_info) - call diag_h0(h0, vect, nd00, ener_info, nvec, prog_info) + !write(f_output,*) " Entree dans diag_h0" + call diag_h0(h0, vect, nd00, tmp_ener, nvec, prog_info) deallocate(h0) + if (debugl) then + write(f_output,*) " Energie des vecteurs propres de H0" + write(f_output,9007) tmp_ener%ener + flush(f_output) + end if + ! allocate guess vectors to H0=<D00|H|D00> eigenvectors - do ivec = 1,nvectot + do ivec = 1,nveclus tmpmax = 0.d0 do jvec = 1,nvec - tmp = dot_product(vect(1:ndet,jvec) , psi_0_guess(1:ndet,ivec)) - if (tmpmax.lt.abs(tmp)) then + tmp = dot_product(vect(1:nd00,jvec) , psi_0_guess(1:nd00,ivec)) + if (abs(tmpmax).lt.abs(tmp)) then tmpmax = tmp vguess(ivec) = jvec end if end do + write(f_output,'(" Overlap read vp / H0 vp : ",i5,2x,i5,f10.6)') ivec, vguess(ivec), tmpmax end do - + + ! check non allocated H0 eigenvectors - do ivec = 1,nvectot + do ivec = 1,nveclus libre(vguess(ivec)) = .false. end do - ! allocated psi_0_guess(: , nvectot+1:nvec) to H0 non-allocated eigenvectors - psi_0_guess(: , nvectot+1:nvec) = 0.d0 + ! allocated psi_0_guess(: , nveclus+1:nvec) to H0 non-allocated eigenvectors + psi_0_guess(: , nveclus+1:nvec) = 0.d0 igen = 0 do jvec = 1,nvec if (libre(jvec)) then igen = igen + 1 - if (igen.gt.ngen) stop " Error in complementary guess" - psi_0_guess(1:nd00,igen+nvectot) = vect(1:nd00,jvec) + if (igen.gt.ngen) call SASS_quit(">>> Error in complementary guess: too many vectors", f_output) + psi_0_guess(1:nd00,igen+nveclus) = vect(1:nd00,jvec) + ener_info%ener(igen+nveclus) = tmp_ener%ener(jvec) libre(jvec) = .false. end if end do - + ! verification do jvec = 1,nvec - if (libre(jvec)) stop " Error in complementary guess" + if (libre(jvec)) call SASS_quit(">>> Error in complementary guess: not all vectors defined", f_output) end do + + ! orthogonormalisation + !write(f_output,*) " Schmidt orthogonalisation of the new Guess Vectors to the read ones" + deallocate(vect) + allocate(vect(ndet,ngen)) + vect(1:ndet,1:ngen) = psi_0_guess(1:ndet,1+nveclus:ngen+nveclus) + call orthog_Schmidt(vect,psi_0_guess,ndet,ngen,nveclus,bdav_info%tol_orth) + !write(f_output,*) " Lowdin orthogonormalisation between the new Guess Vectors" + call orthonorm(Vect,ndet,ngen, bdav_info%tol_orth, bdav_info%tol_norm, .false.,prog_info,f_output) + psi_0_guess(1:ndet,1+nveclus:ngen+nveclus) = vect(1:ndet,1:ngen) + + if (debugl) then + write(f_output,*) ">>> orthogonalisation of guess vectors" + do jvec = 1, nvec + do ivec = 1,jvec + tmp = dot_product( psi_0_guess(1:ndet,ivec), psi_0_guess(1:ndet,jvec)) + write(f_output,'(2x,ES15.6)', advance='no') tmp + end do + write(f_output,*) + end do + + write(f_output,*) + write(f_output,*) ">>> Extra guess vectors sucessfully"& + " generated from H0=<D00|H|D00>" + write(f_output,'(1x," Energies of guess vectors")') + do ivec =1,nvec + write(f_output,'(2x,f15.10)') ener_info%ener(ivec) + end do + end if + flush(f_output) + deallocate(tmp_ener%ener,vect) +9007 format(5(3x,f22.15)) end subroutine complement_guess end module gener_guess diff --git a/src/hv_blocs.F90 b/src/hv_blocs.F90 index b780e9620cea24474cea0b4ad5c43e87c314985f..032653bc776b69a1f44601f751b0da5430564fcc 100644 --- a/src/hv_blocs.F90 +++ b/src/hv_blocs.F90 @@ -87,7 +87,7 @@ contains type(intcase_list), intent(in) :: intcases integer :: i - logical :: ldebug = .true. + logical :: ldebug = .false. type(braket) :: Hij diff --git a/src/info.F90 b/src/info.F90 index 4890265bb1461b7d02476c3187d2d3d43317674f..41331a3e170f0d15e37c038e9c38a12f25019c96 100644 --- a/src/info.F90 +++ b/src/info.F90 @@ -49,6 +49,7 @@ Module Info !!$ molcas : version de molcas !!$ prt_cipci : Print option for cipci !!$ mem_reduction : = .true. reduction de memoire on +!!$ restart : = .true. restart from a previous calculation !!$==================================================================== !!$ Definitions common informations sur les orbitales : o_info !!$==================================================================== @@ -91,6 +92,7 @@ Module Info !!$ sz : =2Sz des etats recherches !!$ vec_irrep : representation irreductible des etats recherches !!$ nvec : nbre d'etats recherches +!!$ nconv : nbre d'etats converges !!$ ncfspref0 : nbre de conf de spin S construites à partir des ref0 !!$ !!$==================================================================== @@ -263,6 +265,8 @@ Module Info Integer (KIND=kd_int), public :: vec_irrep !> @brief Number of target states Integer (KIND=kd_int), public :: nvec + !> @brief Number of converged states + Integer (KIND=kd_int), public :: nconv !> @brief Number of spin configurations built from ref0 Integer (KIND=kd_int), public :: ncfspref0 end type v_infotype @@ -478,6 +482,7 @@ contains v_info%sz = 0 v_info%vec_irrep = 1 v_info%nvec = 1 + v_info%nconv = 0 v_info%ncfspref0 = 0 !> @todo check if 0 or 1 ! det_info diff --git a/src/lect_data.F90 b/src/lect_data.F90 index f630a070a6d4a53ca9e33aaf31550b207fd59fc7..3a7558bd251ba7b6ee93c43fb4cbcf4c2126dbab 100644 --- a/src/lect_data.F90 +++ b/src/lect_data.F90 @@ -67,9 +67,9 @@ Subroutine lect_data(g_info, prog_info, o_info, v_info, det_info, ener_info, & call read_orbinp(f_input, o_info) !Verfication of the method and given orb kinds call check_orb_vs_method(prog_info, o_info) - if (prog_info%id_cpu.eq.0) then - write(f_output,'(a39)') " Transfert d''information par namelist" - endif + ! if (prog_info%id_cpu.eq.0) then + ! write(f_output,'(a39)') " Transfert d''information par namelist" + ! endif !Calcul de orb_info(i,iorb) @@ -328,25 +328,27 @@ subroutine read_vecinp(iunit, g_info, prog_info, v_info, det_info, ener_info) type(det_infotype), intent(inout) :: det_info type(ener_infotype),intent(inout) :: ener_info - integer (KIND=kd_int) :: stot, sz, vec_irrep, nvec, & + integer (KIND=kd_int) :: stot, sz, vec_irrep, nvec, nconv, & nref0, nelact, itmp - namelist /vecinp/ stot, sz, vec_irrep, nvec, nref0, nelact + namelist /vecinp/ stot, sz, vec_irrep, nvec, nconv, nref0, nelact ! v_info - stot = 1 - sz = 0 + stot = 1 + sz = 0 vec_irrep = 1 - nvec = 1 + nvec = 1 + nconv =-1 nref0 = 1 nelact = 0 read(iunit, vecinp) - v_info%stot = stot - v_info%sz = sz + v_info%stot = stot + v_info%sz = sz v_info%vec_irrep = vec_irrep - v_info%nvec = nvec + v_info%nvec = nvec + v_info%nconv = nconv allocate(ener_info%ener(nvec)) ener_info%ener(:) = 0.d0 @@ -427,7 +429,8 @@ subroutine wrt_infoinp(iunit, g_info, o_info, v_info, bdav_info) !Impressions vecinp et orbinp write(iunit,*) - write(iunit,fmt1) " Nbre de vecteurs ", v_info%nvec + write(iunit,fmt1) " Nbre de vecteurs ", v_info%nvec + if (v_info%nconv.ne.-1) write(iunit,fmt1) " Nbre de vecteurs converges ", v_info%nconv write(iunit,fmt2) " 2S+1, 2Sz ", v_info%stot, v_info%sz write(iunit,fmt2) " Irrep ", v_info%vec_irrep write(iunit,fmt2) " Nbre d'electrons actifs ", g_info%nelact @@ -598,6 +601,10 @@ subroutine read_davidinp(iunit, bdav_info, prog_info) bdav_info%iter0 = iter0 bdav_info%conv_ener = conv_ener bdav_info%debug_dav = debug_dav + if (debug_dav) then + write(f_output,*) " debug_dav active" + write(f_output,*) + end if if (SizeheffDavidson.lt.1) & call SASS_quit('>>> Error in SizeheffDavidson : must be at least 1 (default = 10) <<<',f_output) diff --git a/src/lect_int.F90 b/src/lect_int.F90 index 832f9c5ae8b5357d9d675499477024686b6f2d08..7cd0f2b64a94017a1dd06f36e2b6a245bd937e6d 100644 --- a/src/lect_int.F90 +++ b/src/lect_int.F90 @@ -143,14 +143,14 @@ contains call noblancs(prog_info%prefix,n) file_traone = prog_info%prefix(1:n)//".TraOne" if (prog_info%id_cpu.eq.0) then - write(f_output,*) " Ouverture TraOne = ",& + write(f_output,*) " Opening TraOne file = ",& prog_info%prefix(1:n)//".TraOne" endif cf_tone = c_open(trim(file_traone)//char(0)) else file_traone = "TraOne" cf_tone=c_open(trim(file_traone)//char(0)) - if (prog_info%id_cpu.eq.0) write(f_output,*) " Ouverture TraOne = ","TraOne" + if (prog_info%id_cpu.eq.0) write(f_output,*) " Opening TraOne file = ","TraOne" end if ! Verifier 32 ou 64 bits en regardant si le debut du fichier @@ -196,13 +196,13 @@ contains file_traint = prog_info%prefix(1:n)//".TraInt" cf_tint = c_open(trim(file_traint)//char(0)) if (prog_info%id_cpu.eq.0) & - write(f_output,*) " Ouverture TraInt = ",& + write(f_output,*) " Opening TraInt file = ",& prog_info%prefix(1:n)//".TraInt" else file_traint = "TraInt" cf_tint=c_open(trim(file_traint)//char(0)) if (prog_info%id_cpu.eq.0) & - write(f_output,*) " Ouverture TraInt = ",file_traint + write(f_output,*) " Opening TraInt file = ",file_traint end if y64_traInt = y64_traone @@ -1190,7 +1190,7 @@ contains type(prog_infotype), intent(in) :: prog_info - Logical :: debugl=.true. + Logical :: debugl=.false. Real*8 :: potnuc Integer, dimension(8) :: norbsym diff --git a/src/orthog.F90 b/src/orthog.F90 index 8cc46cc1a8694d4d9a3167b57d292c9ee10fa0cd..1ba51a0417ce3a95055c32f8e5e0d0b926eb886d 100644 --- a/src/orthog.F90 +++ b/src/orthog.F90 @@ -284,9 +284,49 @@ subroutine orthonorm(Vect,ndet,nvec,tol_orth,tol_norm,lpr,prog_info,iunit) end if 9999 deallocate(S, sp) - end subroutine orthonorm +!$======================================================================== +!> @brief Overlap calculation +!> @author MB Lepetit +! +!> @param[inout] Vect(ndet,nvec) = vectors to orthogonalize to the Vectref ones +!> @param[in] Vectref(ndet,nvecref) = reference vectors to which Vect will be orthogonilized +!> @param[in] ndet = number of determinants +!> @param[in] nvec = number of vectors Vect +!> @param[in] nvecref = number of vectors Vectref +!> @param[in] tol_orth = quality of the orthogonalisation +!> @param jtermax = 20 max number or orthogonalisation loops +!$======================================================================== +Subroutine recouvrement(v1,v2,ndet,nvec1,nvec2, iunit,messv1,messv2) + use utils_wrt + Implicit none + Integer, intent(in) :: ndet,nvec1, nvec2, iunit + real(kd_dble), dimension(ndet,nvec1), intent(in) :: v1 + real(kd_dble), dimension(ndet,nvec2), intent(in) :: v2 + Character(len=*), intent(in) :: messv1, messv2 + + real(kd_dble), dimension(nvec1,nvec2) :: S + Integer :: ivec, jvec + + S(:,:) = 0.d0 + do jvec = 1,nvec2 + do ivec = 1,nvec1 + S(ivec,jvec) = dot_product(v1(1:ndet,ivec),v2(1:ndet,jvec)) + end do + end do + + write (iunit,'(" Overlap matrix between vectors")',advance='no') + write (iunit,'(a)',advance='no') messv1 + write (iunit,'(" and ")',advance='no') + write (iunit,'(a)',advance='no') messv2 + write (iunit,*) + + call wrtmatE(S, ndet, nvec1, nvec2, f_output) + write (f_output,*) + + +end Subroutine recouvrement end module utils_ortho diff --git a/src/ref0.F90 b/src/ref0.F90 index a3b1a5c2176cfe5f7b13f68a7967125ddbfb53c9..c45dbe302a7fbc0e59bca50a976109e5db54480a 100644 --- a/src/ref0.F90 +++ b/src/ref0.F90 @@ -214,7 +214,7 @@ contains deallocate(CASa,CASb) - if (prog_info%id_cpu.eq.0) then + if (prog_info%id_cpu.eq.0 .and. prog_info%iprint.gt.2 ) then do idet = 1,ndetCAS write(f_output,'(i5," : ")',advance='no') idet call wrtdet(ref(idet),f_output, o_info) diff --git a/src/utils_wrt.F90 b/src/utils_wrt.F90 index 414f46236108d724e4286bc1d27bf796780bc24f..0cb9ea1e1536855b6fd0f3e0922d9331ce5799a9 100644 --- a/src/utils_wrt.F90 +++ b/src/utils_wrt.F90 @@ -32,7 +32,8 @@ !! Wrtdet : écrit un det !! Wrtact : écrit la partie active d'un det !! Wrtactalpha : Ecriture partie active alpha des det -!! Wrtmat : Ecriture matrice réelle +!! Wrtmat : Ecriture matrice réelle +!! Wrt_vect : Ecriture des vecteurs !$============================================================ module utils_wrt @@ -49,7 +50,7 @@ module utils_wrt wrtact, & wrtactalpha, & wrtmat, wrtmat_accurate, wrtmatE, wrt_bdet, wrt_info, & - wrt_WF + wrt_WF, wrt_vect ! interface wrt_bdet ! module procedure wrt_bdet @@ -639,6 +640,33 @@ contains 9990 format(5(2x,F20.16)) end subroutine wrt_WF !!$============================================================ + Subroutine wrt_vect(file,ndetwrt,ndet,nvec,vect) + !------------------------------------------------------------ + ! Ecriture vecteurs + Implicit none + Integer (KIND=kd_int), intent(in) :: file,ndetwrt,ndet,nvec + real(kd_dble), dimension(:,:), allocatable, intent(in) :: vect + ! -------- Donnes locales ----------------------------------- + Integer (KIND=kd_int) :: i, nq, n, idet + ! -------- Code --------------------------------------------- + + write(f_output,9005) + nq = nvec/5 + do i=1 , nq+1 + n = min(5,nvec-(i-1)*5) + do idet =1,ndetwrt + write(file,9006) (vect(idet,(i-1)*5+1:(i-1)*5+n)) + end do + write(file,*) + end do + write(file,9007) + write(file,*) + +9005 format(2x,'Vectors=') +9006 format(2x,5(f20.15,2x)) +9007 format(2x,5(20("."),2x)) + + end Subroutine wrt_vect !!$============================================================ End Module utils_wrt !!$ Local Variables: diff --git a/test/CuO_03450_extravec/INPUT b/test/CuO_03450_extravec/INPUT new file mode 100644 index 0000000000000000000000000000000000000000..777ca9a3b2749991e326ca4195259e4371b6ddcb --- /dev/null +++ b/test/CuO_03450_extravec/INPUT @@ -0,0 +1,62 @@ +# +# + + &sassinp + prefix="cuo", + restart=.true. + prt_cipci=.false., + iprint=1 + &end + + &infomolcasinp + nirrep=1, + ntot=12, + iIrTb(1,1) = 1, + iChTb(1,1) = 1 + &end + + + &orbinp + norb_gel = 38, + norb_occ = 0, + norb_ligo = 3, + norb_act = 4, + norb_ligv = 5, + norb_virt = 0, + norb_del = 68 + &end + + &vecinp + stot=3, + sz=2, + vec_irrep=1, + nvec=4, + nref0=13, + nelact = 4 + &end + + &davidinp + SizeheffDavidson = 10, + tol_conv = 1.d-8, + NiterDavidson = 200 + &end + +&propinp + Nprop=3, + whichprop="lcoef","intJK","Helm", + seuilcoef = 0.01d0, + nintegrals = 4 + nHelms = 1, + &end + + &intJK + p=41,41,41,42, + q=41,42,41,42, + r=42,41,41,42, + s=42,42,42,41, + &end + + &helm + idet = 2, + jdet = 3, + &end diff --git a/test/CuO_03450_extravec/cuo.TraInt b/test/CuO_03450_extravec/cuo.TraInt new file mode 100644 index 0000000000000000000000000000000000000000..e7f8bba427b347d8e39f0891f677afd28a848161 Binary files /dev/null and b/test/CuO_03450_extravec/cuo.TraInt differ diff --git a/test/CuO_03450_extravec/cuo.TraOne b/test/CuO_03450_extravec/cuo.TraOne new file mode 100644 index 0000000000000000000000000000000000000000..ebe5faa748583797c307b5aeaa0c174a41ff9612 Binary files /dev/null and b/test/CuO_03450_extravec/cuo.TraOne differ diff --git a/test/CuO_03450_extravec/cuo.guess b/test/CuO_03450_extravec/cuo.guess new file mode 100644 index 0000000000000000000000000000000000000000..4cb2b1288e6797b8745441206618ef735abae397 Binary files /dev/null and b/test/CuO_03450_extravec/cuo.guess differ diff --git a/test/CuO_03450_extravec/cuo.ref0 b/test/CuO_03450_extravec/cuo.ref0 new file mode 100644 index 0000000000000000000000000000000000000000..a56e2dd5dac36bbdc467b207a698eff6e1b2c68b --- /dev/null +++ b/test/CuO_03450_extravec/cuo.ref0 @@ -0,0 +1,22 @@ +42u 43d 44u 45u +42u 42d 43u 44u +42u 43u 43d 44u +42u 43u 44u 44d +42u 42d 43u 45u +42u 43u 43d 45u +42u 43u 45u 45d +42u 42d 45u 44u +42u 45u 45d 44u +42u 45u 44u 44d +45u 45d 43u 44u +45u 43u 43d 44u +45u 43u 44u 44d + +42u 42d 43u 43d +42u 42d 44u 44d +42u 42d 45u 45d +43u 43d 44u 44d +43u 43d 45u 45d +44u 44d 45u 45d + + diff --git a/test/CuO_03450_extravec/result/cuo.out b/test/CuO_03450_extravec/result/cuo.out new file mode 100644 index 0000000000000000000000000000000000000000..ffa4d75178a75011c6f26fda23b1eb6a25d9f794 --- /dev/null +++ b/test/CuO_03450_extravec/result/cuo.out @@ -0,0 +1,611 @@ + *********************************************** + + Relaxed Selected Excitation (RelaxSE) + + The RelaxSE project is distributed under https://spdx.org/licenses/LGPL-3.0-or-later.html + + Copyright (C) 2016-2021 Institut Laue-Langevin (ILL), Grenoble, FRANCE + Institut Neel, (CNRS), Grenoble, FRANCE + + Authors: Elisa REBOLINI (ILL) rebolini@ill.fr + Marie-Bernadette LEPETIT (CNRS) Marie-Bernadette.Lepetit@neel.cnrs.fr + + *********************************************** + DEBUG VersionT + Calculation started on 06-12-2024 at 15:00 + + >>> Method sas+s + >>> Ouverture des fichiers + out : cuo.out + ref0 : cuo.ref0 + det : cuo.det + bdet : cuo.bdet + sass : cuo.sass +resta : cuo.restart + mat : cuo.mat + mat2 : cuo.mat2 + bmat : cuo.bmat + + ---------------------------------------------------------------------------------------------------- + >>> Reading input data + ---------------------------------------------------------------------------------------------------- + Transfert d''information par namelist + Nbre d'irrep : 1 + Nbre total d'orbitales : 12 + Nbre d'orbitales gelees : 38 + Nbre d'orbitales occuppees : 0 + Nbre d'orbitales lig. occ : 3 + Nbre d'orbitales actives : 4 + Nbre d'orbitales lig. virt : 5 + Nbre d'orbitales virtuelles : 0 + Nbre d'orbitales deletees : 68 + Nbre d'orbitales total : ngel nocc nligo nact nligv nvirt ndel ntot Total + : 38 0 3 4 5 0 68 12 118 + + Nbre de vecteurs : 4 + 2S+1, 2Sz : 3 2 + Irrep : 1 + Nbre d'electrons actifs : 4 + + Size of the Davidson Heff : 10 + Nbr of Davidson super-iter : 200 + Orthogonality threshold : 1.0E-15 + Normalisation threshold : 1.0E-15 + Conv. threshold on vectors : 1.0E-08 + Expected threshold on energies : 1.0E-14 + Nbr of 1st iter (restart) : 0 + + ---------------------------------------------------------------------------------------------------- + >>> Preparations + ---------------------------------------------------------------------------------------------------- + >>> Orbital re-ordering Molcas <-> RelaxSE + Ordre des orbitales MOLCAS ds SelS + Irrep = 1 + Gelees = 38 + Molcas : 1 2 3 4 5 6 7 8 9 10 + Molcas/ir : 1 2 3 4 5 6 7 8 9 10 + SelS : 1 2 3 4 5 6 7 8 9 10 + SelS up : 1 2 3 4 5 6 7 8 9 10 + SelS dn : 39 40 41 42 43 44 45 46 47 48 + + Molcas : 11 12 13 14 15 16 17 18 19 20 + Molcas/ir : 11 12 13 14 15 16 17 18 19 20 + SelS : 11 12 13 14 15 16 17 18 19 20 + SelS up : 11 12 13 14 15 16 17 18 19 20 + SelS dn : 49 50 51 52 53 54 55 56 57 58 + + Molcas : 21 22 23 24 25 26 27 28 29 30 + Molcas/ir : 21 22 23 24 25 26 27 28 29 30 + SelS : 21 22 23 24 25 26 27 28 29 30 + SelS up : 21 22 23 24 25 26 27 28 29 30 + SelS dn : 59 60 61 62 63 64 65 66 67 68 + + Molcas : 31 32 33 34 35 36 37 38 + Molcas/ir : 31 32 33 34 35 36 37 38 + SelS : 31 32 33 34 35 36 37 38 + SelS up : 31 32 33 34 35 36 37 38 + SelS dn : 69 70 71 72 73 74 75 76 + Occ = 0 + Ligo = 3 + Molcas : 39 40 41 + Molcas/ir : 39 40 41 + SelS : 39 40 41 + SelS up : 77 78 79 + SelS dn : 80 81 82 + Act = 4 + Molcas : 42 43 44 45 + Molcas/ir : 42 43 44 45 + SelS : 42 43 44 45 + SelS up : 83 84 85 86 + SelS dn : 87 88 89 90 + Ligv = 5 + Molcas : 46 47 48 49 50 + Molcas/ir : 46 47 48 49 50 + SelS : 46 47 48 49 50 + SelS up : 91 92 93 94 95 + SelS dn : 96 97 98 99 100 + Virt = 0 + Delete = 68 + Molcas : 51 52 53 54 55 56 57 58 59 60 + Molcas/ir : 51 52 53 54 55 56 57 58 59 60 + SelS : 51 52 53 54 55 56 57 58 59 60 + SelS up : 101 102 103 104 105 106 107 108 109 110 + SelS dn : 169 170 171 172 173 174 175 176 177 178 + + Molcas : 61 62 63 64 65 66 67 68 69 70 + Molcas/ir : 61 62 63 64 65 66 67 68 69 70 + SelS : 61 62 63 64 65 66 67 68 69 70 + SelS up : 111 112 113 114 115 116 117 118 119 120 + SelS dn : 179 180 181 182 183 184 185 186 187 188 + + Molcas : 71 72 73 74 75 76 77 78 79 80 + Molcas/ir : 71 72 73 74 75 76 77 78 79 80 + SelS : 71 72 73 74 75 76 77 78 79 80 + SelS up : 121 122 123 124 125 126 127 128 129 130 + SelS dn : 189 190 191 192 193 194 195 196 197 198 + + Molcas : 81 82 83 84 85 86 87 88 89 90 + Molcas/ir : 81 82 83 84 85 86 87 88 89 90 + SelS : 81 82 83 84 85 86 87 88 89 90 + SelS up : 131 132 133 134 135 136 137 138 139 140 + SelS dn : 199 200 201 202 203 204 205 206 207 208 + + Molcas : 91 92 93 94 95 96 97 98 99 100 + Molcas/ir : 91 92 93 94 95 96 97 98 99 100 + SelS : 91 92 93 94 95 96 97 98 99 100 + SelS up : 141 142 143 144 145 146 147 148 149 150 + SelS dn : 209 210 211 212 213 214 215 216 217 218 + + Molcas : 101 102 103 104 105 106 107 108 109 110 + Molcas/ir : 101 102 103 104 105 106 107 108 109 110 + SelS : 101 102 103 104 105 106 107 108 109 110 + SelS up : 151 152 153 154 155 156 157 158 159 160 + SelS dn : 219 220 221 222 223 224 225 226 227 228 + + Molcas : 111 112 113 114 115 116 117 118 + Molcas/ir : 111 112 113 114 115 116 117 118 + SelS : 111 112 113 114 115 116 117 118 + SelS up : 161 162 163 164 165 166 167 168 + SelS dn : 229 230 231 232 233 234 235 236 + + + >>> Reading Ref0 + Nb of read ref0 : 13 + 1 : 1011 0100 + 2 : 1110 1000 + 3 : 1110 0100 + 4 : 1110 0010 + 5 : 1101 1000 + 6 : 1101 0100 + 7 : 1101 0001 + 8 : 1011 1000 + 9 : 1011 0001 + 10 : 1011 0010 + 11 : 0111 0001 + 12 : 0111 0100 + 13 : 0111 0010 + + >>> Generation of all determinants + Ref0: 1 Couches fermees : 0 - 0000 0000 Ref0: 1 Couches ouvertes: 4 - 1111 0000 + Ref0: 2 Couches fermees : 1 - 1000 0000 Ref0: 2 Couches ouvertes: 2 - 0110 0000 + Ref0: 3 Couches fermees : 1 - 0100 0000 Ref0: 3 Couches ouvertes: 2 - 1010 0000 + Ref0: 4 Couches fermees : 1 - 0010 0000 Ref0: 4 Couches ouvertes: 2 - 1100 0000 + Ref0: 5 Couches fermees : 1 - 1000 0000 Ref0: 5 Couches ouvertes: 2 - 0101 0000 + Ref0: 6 Couches fermees : 1 - 0100 0000 Ref0: 6 Couches ouvertes: 2 - 1001 0000 + Ref0: 7 Couches fermees : 1 - 0001 0000 Ref0: 7 Couches ouvertes: 2 - 1100 0000 + Ref0: 8 Couches fermees : 1 - 1000 0000 Ref0: 8 Couches ouvertes: 2 - 0011 0000 + Ref0: 9 Couches fermees : 1 - 0001 0000 Ref0: 9 Couches ouvertes: 2 - 1010 0000 + Ref0: 10 Couches fermees : 1 - 0010 0000 Ref0: 10 Couches ouvertes: 2 - 1001 0000 + Ref0: 11 Couches fermees : 1 - 0001 0000 Ref0: 11 Couches ouvertes: 2 - 0110 0000 + Ref0: 12 Couches fermees : 1 - 0100 0000 Ref0: 12 Couches ouvertes: 2 - 0011 0000 + Ref0: 13 Couches fermees : 1 - 0010 0000 Ref0: 13 Couches ouvertes: 2 - 0101 0000 + + Nbre de conf d'espace unique : 13 + Ref0 irr: 1 Couches fermees : 0 - 0000 Ref0 irr: 1 Couches ouvertes: 4 - 1111 + Ref0 irr: 2 Couches fermees : 1 - 1000 Ref0 irr: 2 Couches ouvertes: 2 - 0110 + Ref0 irr: 3 Couches fermees : 1 - 0100 Ref0 irr: 3 Couches ouvertes: 2 - 1010 + Ref0 irr: 4 Couches fermees : 1 - 0010 Ref0 irr: 4 Couches ouvertes: 2 - 1100 + Ref0 irr: 5 Couches fermees : 1 - 1000 Ref0 irr: 5 Couches ouvertes: 2 - 0101 + Ref0 irr: 6 Couches fermees : 1 - 0100 Ref0 irr: 6 Couches ouvertes: 2 - 1001 + Ref0 irr: 7 Couches fermees : 1 - 0001 Ref0 irr: 7 Couches ouvertes: 2 - 1100 + Ref0 irr: 8 Couches fermees : 1 - 1000 Ref0 irr: 8 Couches ouvertes: 2 - 0011 + Ref0 irr: 9 Couches fermees : 1 - 0001 Ref0 irr: 9 Couches ouvertes: 2 - 1010 + Ref0 irr: 10 Couches fermees : 1 - 0010 Ref0 irr: 10 Couches ouvertes: 2 - 1001 + Ref0 irr: 11 Couches fermees : 1 - 0001 Ref0 irr: 11 Couches ouvertes: 2 - 0110 + Ref0 irr: 12 Couches fermees : 1 - 0100 Ref0 irr: 12 Couches ouvertes: 2 - 0011 + Ref0 irr: 13 Couches fermees : 1 - 0010 Ref0 irr: 13 Couches ouvertes: 2 - 0101 + Nbre de det Ref0 final : 16 + -------------------------------------------- + Entree dans diag_S2 pour les etats : +0111 1000 +1011 0100 +1101 0010 +1110 0001 + Matrix to be diagonalised + 3.000000 1.000000 1.000000 1.000000 + 1.000000 3.000000 1.000000 1.000000 + 1.000000 1.000000 3.000000 1.000000 + 1.000000 1.000000 1.000000 3.000000 + Valeurs pp de S2 + 2.000000000000 2.000000000000 2.000000000000 6.000000000000 + + Nbre de conf S, Sz 3 + 0.048957 0.449881 -0.738383 + 0.256610 -0.815030 -0.140989 + 0.512449 0.365148 0.595031 + -0.818016 0.000000 0.284341 + -------------------------------------------- + + Ref0 finaux + 1 : 0111 1000 + 2 : 1011 0100 + 3 : 1101 0010 + 4 : 1110 0001 + 5 : 1110 1000 + 6 : 1110 0100 + 7 : 1110 0010 + 8 : 1101 1000 + 9 : 1101 0100 + 10 : 1101 0001 + 11 : 1011 1000 + 12 : 1011 0001 + 13 : 1011 0010 + 14 : 0111 0001 + 15 : 0111 0100 + 16 : 0111 0010 + Nbre de det Ref1 (debug) : 4928 + Nbre de det Ref1 CAS -> CAS : 0 + Nbre de det Ref1 ligo-> CAS : 84 + Nbre de det Ref1 CAS -> ligv: 140 + Nbre de det Ref1 ligo-> ligv: 480 + Nbre de det Ref1 ligo-> ligv + ech : 555 + Nbre de det Ref1 ligo-> ligv tot: 1035 + Ref1 Cas -> Cas : 1 -> 0 +=== +Active determinant list R_-2 +Contains 22 determinants + 0 2 -2 + 6 0 16 +=== +Active determinant list R_-1 +Contains 52 determinants + 1 -1 3 -3 + 4 24 0 24 +=== +Active determinant list R_0 +Contains 69 determinants + 0 2 -2 4 -4 + 16 1 36 0 16 +=== +Active determinant list R_1 +Contains 52 determinants + 1 -1 3 -3 + 4 24 0 24 +=== +Active determinant list R_2 +Contains 22 determinants + 0 2 -2 + 6 0 16 + + ---------------------------------------------------------------------------------------------------- + >>> Generation of all determinants + ---------------------------------------------------------------------------------------------------- + Nb of determinants in D 0 = 16 + Nb of determinants in D 1 = 1035 + Nb of determinants in D 2 = 11145 + Nb of determinants in D 11 = 84 + Nb of determinants in D 12 = 2040 + Nb of determinants in D-11 = 140 + Nb of determinants in D-12 = 3660 + Nb of determinants in D 20 = 102 + Nb of determinants in D-20 = 310 + + Total Nb of determinant 18532 + + >>> Generation of D0 + >>> Determinant block D0 generated in 0.00 second(s) + >>> Generation of D1 + >>> Determinant block D1 generated in 0.00 second(s) + >>> Generation of D2 + >>> Determinant block D2 generated in 0.00 second(s) + >>> Generation of D11 + >>> Determinant block D11 generated in 0.00 second(s) + >>> Generation of D12 + >>> Determinant block D12 generated in 0.00 second(s) + >>> Generation of D-11 + >>> Determinant block D-11 generated in 0.00 second(s) + >>> Generation of D-12 + >>> Determinant block D-12 generated in 0.00 second(s) + >>> Generation of D20 + >>> Determinant block D20 generated in 0.00 second(s) + >>> Generation of D-20 + >>> Determinant block D-20 generated in 0.00 second(s) + >>>Determinants generated in 1.3935000000000001E-002 second(s) + + >>> x_info written on file + + >>> Determinants written on file + + >>> Lecture des integrales TraOne et TraInt + >>> Lecture des integrales TraOne + Ouverture TraOne = cuo.TraOne + Lecture TraOne en entiers 64 bits + Potnuc = -449.56085922 + Nombre d'irrep lu ds TraOne = 1 + BSLbl = + Irrep = 1 + 1 CU01 1s + 2 CU01 2px + 3 CU01 2px + 4 CU01 2py + 5 CU01 2py + 6 CU01 2pz + 7 CU01 2pz + 8 CU01 3d2- + 9 CU01 3d2- + 10 CU01 3d1- + 11 CU01 3d1- + 12 CU01 3d0 + 13 CU01 3d0 + 14 CU01 3d1+ + 15 CU01 3d1+ + 16 CU01 3d2+ + 17 CU01 3d2+ + 18 CU02 1s + 19 CU02 2px + 20 CU02 2px + 21 CU02 2py + 22 CU02 2py + 23 CU02 2pz + 24 CU02 2pz + 25 CU02 3d2- + 26 CU02 3d2- + 27 CU02 3d1- + 28 CU02 3d1- + 29 CU02 3d0 + 30 CU02 3d0 + 31 CU02 3d1+ + 32 CU02 3d1+ + 33 CU02 3d2+ + 34 CU02 3d2+ + 35 O_03 1s + 36 O_03 2px + 37 O_03 2px + 38 O_03 2py + 39 O_03 2py + 40 O_03 2pz + 41 O_03 2pz + 42 O_03 3d2- + 43 O_03 3d1- + 44 O_03 3d0 + 45 O_03 3d1+ + 46 O_03 3d2+ + 47 O_04 1s + 48 O_04 2px + 49 O_04 2px + 50 O_04 2py + 51 O_04 2py + 52 O_04 2pz + 53 O_04 2pz + 54 O_04 3d2- + 55 O_04 3d1- + 56 O_04 3d0 + 57 O_04 3d1+ + 58 O_04 3d2+ + 59 O_05 1s + 60 O_05 2px + 61 O_05 2px + 62 O_05 2py + 63 O_05 2py + 64 O_05 2pz + 65 O_05 2pz + 66 O_05 3d2- + 67 O_05 3d1- + 68 O_05 3d0 + 69 O_05 3d1+ + 70 O_05 3d2+ + 71 O_06 1s + 72 O_06 2px + 73 O_06 2px + 74 O_06 2py + 75 O_06 2py + 76 O_06 2pz + 77 O_06 2pz + 78 O_06 3d2- + 79 O_06 3d1- + 80 O_06 3d0 + 81 O_06 3d1+ + 82 O_06 3d2+ + 83 O_07 1s + 84 O_07 2px + 85 O_07 2px + 86 O_07 2py + 87 O_07 2py + 88 O_07 2pz + 89 O_07 2pz + 90 O_07 3d2- + 91 O_07 3d1- + 92 O_07 3d0 + 93 O_07 3d1+ + 94 O_07 3d2+ + 95 O_08 1s + 96 O_08 2px + 97 O_08 2px + 98 O_08 2py + 99 O_08 2py + 100 O_08 2pz + 101 O_08 2pz + 102 O_08 3d2- + 103 O_08 3d1- + 104 O_08 3d0 + 105 O_08 3d1+ + 106 O_08 3d2+ + 107 O_09 1s + 108 O_09 2px + 109 O_09 2px + 110 O_09 2py + 111 O_09 2py + 112 O_09 2pz + 113 O_09 2pz + 114 O_09 3d2- + 115 O_09 3d1- + 116 O_09 3d0 + 117 O_09 3d1+ + 118 O_09 3d2+ + Nombre d'integrales a lire = 78 + Nombre d'integrales mono-electroniques lues = 78 + + >>> Lecture des integrales TraInt + Ouverture TraInt = cuo.TraInt + Lecture TraInt en entiers 64 bits + Total nb of 2e- integrals 3081 + (oo|oo) 21 + (ao|oo) 72 + (aa|oo) and (ao|ao) 138 + (aa|ao) 120 + (aa|aa) 55 + (vo|oo) 90 + (va|oo) and (vo|ao) 300 + (va|ao) and (vo|aa) 390 + (va|aa) 200 + (vv|oo) and (vo|vo) 210 + (vv|ao), and (va|vo) 480 + (vv|aa) and (va|va) 360 + (vv|vo) 225 + (vv|va) 300 + (vv|vv) 120 + gelees 0 + >>> Integrals read in 2.1330000000000029E-003 second(s) + + >>> Construction of the Fock matrix + >>> Fock matrix built in 3.7400000000000627E-004 second(s) + + One-electron energy = -13.247675800429850 + Two-electron energy = 3.2986676825230550 + E0 = -9.9490081179067946 + Pot. Nuc. = -449.56085922003842 + Total E = -459.50986733794520 + + >>> Construction of the diagonal of the Hamiltonian matrix (gen) + >>> Hdiag(gen) built in CPU time: 0.009818 second(s) Wall time: 0.010000 second(s) + + ---------------------------------------------------------------------------------------------------- + >>> Calculation of guess vectors + ---------------------------------------------------------------------------------------------------- + >>> Build the matrix H0=<D00|H|D00> + >>> H0 diagonalised in 1.0100000000000386E-004 second(s) + + ---------------------------------------------------------------------------------------------------- + >>> Diagonalisation + ---------------------------------------------------------------------------------------------------- + + ================================================================= + >>> Davidson Diagonalisation + Search for 4 vectors with a convergence threshold of 1.0E-04 + +Total Elapsed tWall 0.0400s +Particles are divided in batches of 5 + #Iter tCPU (s) tWall (s) Energies + 0 0.0000 0.0000 -462.5453189892 -462.0809787580 -462.0769011406 -462.0756145990 + 1 0.5777 0.5780 -462.5453189892 -462.0809787580 -462.0769011406 -462.0756145990 + 4.441E-16 0.000E+00 0.000E+00 0.000E+00 + 2 0.5496 0.5520 -462.5473689642 -462.0981924925 -462.0887364619 -462.0780940339 + -2.050E-03 -1.721E-02 -1.184E-02 -2.479E-03 + 3 0.5490 0.5490 -462.5473940635 -462.1184542108 -462.1023762082 -462.0820351170 + -2.510E-05 -2.026E-02 -1.364E-02 -3.941E-03 + 4 0.5497 0.5500 -462.5473948871 -462.1444568814 -462.1188153382 -462.0936840670 + -8.236E-07 -2.600E-02 -1.644E-02 -1.165E-02 + 5 0.5506 0.5510 -462.5473950005 -462.1520265723 -462.1209269573 -462.0949437075 + -1.134E-07 -7.570E-03 -2.112E-03 -1.260E-03 + 6 0.5508 0.5510 -462.5473950217 -462.1539109210 -462.1221350039 -462.1128133939 + -2.119E-08 -1.884E-03 -1.208E-03 -1.787E-02 + The vectors 1 seem converged : we take them out + 7 0.5136 0.5140 -462.1539109210 -462.1221350039 -462.1128133939 + 5.329E-15 -3.997E-15 8.438E-15 + 8 0.5137 0.5130 -462.1543716847 -462.1258613712 -462.1218882000 + -4.608E-04 -3.726E-03 -9.075E-03 + 9 0.5141 0.5140 -462.1547068038 -462.1320532261 -462.1233737554 + -3.351E-04 -6.192E-03 -1.486E-03 + 10 0.5132 0.5130 -462.1549637194 -462.1400305336 -462.1281417888 + -2.569E-04 -7.977E-03 -4.768E-03 + 11 0.5142 0.5140 -462.1551952564 -462.1479589357 -462.1320278766 + -2.315E-04 -7.928E-03 -3.886E-03 + 12 0.5138 0.5130 -462.1555748559 -462.1511873329 -462.1352917971 + -3.796E-04 -3.228E-03 -3.264E-03 + 13 0.5148 0.5150 -462.1561363062 -462.1525113361 -462.1405647425 + -5.615E-04 -1.324E-03 -5.273E-03 + 14 0.5154 0.5160 -462.1566115569 -462.1532644250 -462.1447567106 + -4.753E-04 -7.531E-04 -4.192E-03 + 15 0.5155 0.5150 -462.1570302753 -462.1538377131 -462.1476550217 + -4.187E-04 -5.733E-04 -2.898E-03 + 16 0.5153 0.5150 -462.1572888534 -462.1542116459 -462.1490515008 + -2.586E-04 -3.739E-04 -1.396E-03 + >>> On contracte <<< + 17 0.5146 0.5150 -462.1572888534 -462.1542116459 -462.1490515008 + 2.665E-15 8.882E-16 -4.441E-16 + 18 0.5135 0.5140 -462.1573722202 -462.1543201138 -462.1493729824 + -8.337E-05 -1.085E-04 -3.215E-04 + 19 0.5134 0.5130 -462.1574347636 -462.1543966744 -462.1495839235 + -6.254E-05 -7.656E-05 -2.109E-04 + 20 0.5136 0.5130 -462.1574803402 -462.1544529075 -462.1497391559 + -4.558E-05 -5.623E-05 -1.552E-04 + 21 0.5144 0.5150 -462.1575136219 -462.1544955392 -462.1498570307 + -3.328E-05 -4.263E-05 -1.179E-04 + 22 0.5151 0.5150 -462.1575261983 -462.1545192019 -462.1499021265 + -1.258E-05 -2.366E-05 -4.510E-05 + 23 0.5174 0.5180 -462.1575322197 -462.1545320734 -462.1499238803 + -6.021E-06 -1.287E-05 -2.175E-05 + 24 0.5171 0.5170 -462.1575384133 -462.1545400325 -462.1499456848 + -6.194E-06 -7.959E-06 -2.180E-05 + 25 0.5163 0.5170 -462.1575430162 -462.1545455306 -462.1499631578 + -4.603E-06 -5.498E-06 -1.747E-05 + 26 0.5151 0.5150 -462.1575448151 -462.1545481486 -462.1499706616 + -1.799E-06 -2.618E-06 -7.504E-06 + >>> On contracte <<< + 27 0.5139 0.5140 -462.1575448151 -462.1545481486 -462.1499706616 + -2.354E-14 -1.332E-15 9.770E-15 + 28 0.5133 0.5130 -462.1575453824 -462.1545489020 -462.1499730971 + -5.673E-07 -7.535E-07 -2.435E-06 + 29 0.5138 0.5140 -462.1575460020 -462.1545494342 -462.1499759748 + -6.196E-07 -5.322E-07 -2.878E-06 + 30 0.5135 0.5130 -462.1575464252 -462.1545497172 -462.1499782286 + -4.232E-07 -2.830E-07 -2.254E-06 + 31 0.5141 0.5140 -462.1575466500 -462.1545498852 -462.1499795620 + -2.248E-07 -1.680E-07 -1.333E-06 + 32 0.5145 0.5150 -462.1575467753 -462.1545499825 -462.1499803355 + -1.253E-07 -9.732E-08 -7.735E-07 + 33 0.5147 0.5150 -462.1575468540 -462.1545500433 -462.1499808540 + -7.872E-08 -6.076E-08 -5.185E-07 + 34 0.5145 0.5140 -462.1575469110 -462.1545500829 -462.1499812908 + -5.697E-08 -3.966E-08 -4.368E-07 + 35 0.5147 0.5150 -462.1575469529 -462.1545501108 -462.1499816564 + -4.195E-08 -2.789E-08 -3.656E-07 + 36 0.5145 0.5150 -462.1575469690 -462.1545501250 -462.1499818113 + -1.604E-08 -1.422E-08 -1.548E-07 + >>> On contracte <<< + 37 0.5164 0.5210 -462.1575469690 -462.1545501250 -462.1499818113 + 8.882E-16 -3.109E-15 -8.882E-16 + 38 0.5161 0.5160 -462.1575469754 -462.1545501318 -462.1499818754 + -6.384E-09 -6.798E-09 -6.411E-08 + The vectors 1 2 seem converged : we take them out +-- Davidson' iteration: 38 ncol= 3 Nbre of converged vectors: 3 Nbre of remaining vectors: 1 + 39 0.4296 0.4300 -462.1499818754 + -1.243E-14 + 40 0.4294 0.4290 -462.1499819112 + -3.586E-08 + 41 0.4296 0.4300 -462.1499820129 + -1.017E-07 + 42 0.4295 0.4300 -462.1499820398 + -2.686E-08 + 43 0.4297 0.4300 -462.1499820696 + -2.980E-08 + 44 0.4309 0.4310 -462.1499820843 + -1.478E-08 + 45 0.4320 0.4320 -462.1499821006 + -1.623E-08 + 46 0.4313 0.4310 -462.1499821078 + -7.266E-09 + The vectors 1 seem converged : we take them out +-- Davidson' iteration: 46 ncol= 9 Nbre of converged vectors: 4 Nbre of remaining vectors: 0 + + >>> Davidson procedure converged on vectors corrections at 1.0E-08 <<< + >>> Convergence reached after 45 iterations <<< + + Overlap matrix between final vectors (difference to Id) + -0.144329E-14 -0.159131E-16 -0.563001E-16 -0.773630E-16 + -0.159131E-16 0.310862E-14 0.104857E-14 0.414329E-14 + -0.563001E-16 0.104857E-14 0.488498E-14 0.253356E-15 + -0.773630E-16 0.414329E-14 0.253356E-15 -0.399680E-14 + + Energies : -462.547395021697241 -462.157546975365733 -462.154550131837027 -462.149982107835683 + E ss ref : -3.037527683752005 -2.647679637420535 -2.644682793891838 -2.640114769890475 + dE (a.u.): 0.000000000000000 0.389848046331470 0.392844889860167 0.397412913861530 + dE (meV) : 0.000000000000000 10608.305765969455024 10689.854032747622114 10814.156298229641834 + |Hv-Ev| : 3.5086E-05 4.6833E-05 4.4846E-05 4.6802E-05 + deltaE : -2.1188E-08 -6.3842E-09 -6.7983E-09 -7.2658E-09 + + Maximum precision expected on |Hv-Ev| : 0.3D-07 + Maximum precision expected on <v|H|v>-E : 0.1D-14 + + Calculation finished in CPUtime 24.94s Walltime: 24.95s + Calculation finished on 06-12-2024 at 15:00 diff --git a/test/CuO_03450_extravec/test b/test/CuO_03450_extravec/test new file mode 100755 index 0000000000000000000000000000000000000000..8697cf689abaec53d36fa9da1272fa79304847b8 --- /dev/null +++ b/test/CuO_03450_extravec/test @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) + +from runtest_relaxse import Filter, TestRun + +test = TestRun(__file__, sys.argv) + +f = Filter() + +f.add(string = 'Energies :', + abs_tolerance = 1.0e-6) + +#f.add(string = '|Hv-Ev| :', +# abs_tolerance = 1.0e-7) + +test.run(['cuo.input'], {'out': f}) + +sys.exit(test.return_code) diff --git a/test/CuO_03450_extravec_reconv/INPUT b/test/CuO_03450_extravec_reconv/INPUT new file mode 100644 index 0000000000000000000000000000000000000000..1336233c9cefdf24c152c1a315c3da4739d81f09 --- /dev/null +++ b/test/CuO_03450_extravec_reconv/INPUT @@ -0,0 +1,63 @@ +# +# + + &sassinp + prefix="cuo", + restart=.true. + prt_cipci=.false., + iprint=1 + &end + + &infomolcasinp + nirrep=1, + ntot=12, + iIrTb(1,1) = 1, + iChTb(1,1) = 1 + &end + + + &orbinp + norb_gel = 38, + norb_occ = 0, + norb_ligo = 3, + norb_act = 4, + norb_ligv = 5, + norb_virt = 0, + norb_del = 68 + &end + + &vecinp + stot=3, + sz=2, + vec_irrep=1, + nvec=4, + nconv=1, + nref0=13, + nelact = 4 + &end + + &davidinp + SizeheffDavidson = 10, + tol_conv = 1.d-8, + NiterDavidson = 200 + &end + +&propinp + Nprop=3, + whichprop="lcoef","intJK","Helm", + seuilcoef = 0.01d0, + nintegrals = 4 + nHelms = 1, + &end + + &intJK + p=41,41,41,42, + q=41,42,41,42, + r=42,41,41,42, + s=42,42,42,41, + &end + + &helm + idet = 2, + jdet = 3, + &end diff --git a/test/CuO_03450_extravec_reconv/cuo.TraInt b/test/CuO_03450_extravec_reconv/cuo.TraInt new file mode 100644 index 0000000000000000000000000000000000000000..e7f8bba427b347d8e39f0891f677afd28a848161 Binary files /dev/null and b/test/CuO_03450_extravec_reconv/cuo.TraInt differ diff --git a/test/CuO_03450_extravec_reconv/cuo.TraOne b/test/CuO_03450_extravec_reconv/cuo.TraOne new file mode 100644 index 0000000000000000000000000000000000000000..ebe5faa748583797c307b5aeaa0c174a41ff9612 Binary files /dev/null and b/test/CuO_03450_extravec_reconv/cuo.TraOne differ diff --git a/test/CuO_03450_extravec_reconv/cuo.guess b/test/CuO_03450_extravec_reconv/cuo.guess new file mode 100644 index 0000000000000000000000000000000000000000..4cb2b1288e6797b8745441206618ef735abae397 Binary files /dev/null and b/test/CuO_03450_extravec_reconv/cuo.guess differ diff --git a/test/CuO_03450_extravec_reconv/cuo.ref0 b/test/CuO_03450_extravec_reconv/cuo.ref0 new file mode 100644 index 0000000000000000000000000000000000000000..a56e2dd5dac36bbdc467b207a698eff6e1b2c68b --- /dev/null +++ b/test/CuO_03450_extravec_reconv/cuo.ref0 @@ -0,0 +1,22 @@ +42u 43d 44u 45u +42u 42d 43u 44u +42u 43u 43d 44u +42u 43u 44u 44d +42u 42d 43u 45u +42u 43u 43d 45u +42u 43u 45u 45d +42u 42d 45u 44u +42u 45u 45d 44u +42u 45u 44u 44d +45u 45d 43u 44u +45u 43u 43d 44u +45u 43u 44u 44d + +42u 42d 43u 43d +42u 42d 44u 44d +42u 42d 45u 45d +43u 43d 44u 44d +43u 43d 45u 45d +44u 44d 45u 45d + + diff --git a/test/CuO_03450_extravec_reconv/result/cuo.out b/test/CuO_03450_extravec_reconv/result/cuo.out new file mode 100644 index 0000000000000000000000000000000000000000..ffa4d75178a75011c6f26fda23b1eb6a25d9f794 --- /dev/null +++ b/test/CuO_03450_extravec_reconv/result/cuo.out @@ -0,0 +1,611 @@ + *********************************************** + + Relaxed Selected Excitation (RelaxSE) + + The RelaxSE project is distributed under https://spdx.org/licenses/LGPL-3.0-or-later.html + + Copyright (C) 2016-2021 Institut Laue-Langevin (ILL), Grenoble, FRANCE + Institut Neel, (CNRS), Grenoble, FRANCE + + Authors: Elisa REBOLINI (ILL) rebolini@ill.fr + Marie-Bernadette LEPETIT (CNRS) Marie-Bernadette.Lepetit@neel.cnrs.fr + + *********************************************** + DEBUG VersionT + Calculation started on 06-12-2024 at 15:00 + + >>> Method sas+s + >>> Ouverture des fichiers + out : cuo.out + ref0 : cuo.ref0 + det : cuo.det + bdet : cuo.bdet + sass : cuo.sass +resta : cuo.restart + mat : cuo.mat + mat2 : cuo.mat2 + bmat : cuo.bmat + + ---------------------------------------------------------------------------------------------------- + >>> Reading input data + ---------------------------------------------------------------------------------------------------- + Transfert d''information par namelist + Nbre d'irrep : 1 + Nbre total d'orbitales : 12 + Nbre d'orbitales gelees : 38 + Nbre d'orbitales occuppees : 0 + Nbre d'orbitales lig. occ : 3 + Nbre d'orbitales actives : 4 + Nbre d'orbitales lig. virt : 5 + Nbre d'orbitales virtuelles : 0 + Nbre d'orbitales deletees : 68 + Nbre d'orbitales total : ngel nocc nligo nact nligv nvirt ndel ntot Total + : 38 0 3 4 5 0 68 12 118 + + Nbre de vecteurs : 4 + 2S+1, 2Sz : 3 2 + Irrep : 1 + Nbre d'electrons actifs : 4 + + Size of the Davidson Heff : 10 + Nbr of Davidson super-iter : 200 + Orthogonality threshold : 1.0E-15 + Normalisation threshold : 1.0E-15 + Conv. threshold on vectors : 1.0E-08 + Expected threshold on energies : 1.0E-14 + Nbr of 1st iter (restart) : 0 + + ---------------------------------------------------------------------------------------------------- + >>> Preparations + ---------------------------------------------------------------------------------------------------- + >>> Orbital re-ordering Molcas <-> RelaxSE + Ordre des orbitales MOLCAS ds SelS + Irrep = 1 + Gelees = 38 + Molcas : 1 2 3 4 5 6 7 8 9 10 + Molcas/ir : 1 2 3 4 5 6 7 8 9 10 + SelS : 1 2 3 4 5 6 7 8 9 10 + SelS up : 1 2 3 4 5 6 7 8 9 10 + SelS dn : 39 40 41 42 43 44 45 46 47 48 + + Molcas : 11 12 13 14 15 16 17 18 19 20 + Molcas/ir : 11 12 13 14 15 16 17 18 19 20 + SelS : 11 12 13 14 15 16 17 18 19 20 + SelS up : 11 12 13 14 15 16 17 18 19 20 + SelS dn : 49 50 51 52 53 54 55 56 57 58 + + Molcas : 21 22 23 24 25 26 27 28 29 30 + Molcas/ir : 21 22 23 24 25 26 27 28 29 30 + SelS : 21 22 23 24 25 26 27 28 29 30 + SelS up : 21 22 23 24 25 26 27 28 29 30 + SelS dn : 59 60 61 62 63 64 65 66 67 68 + + Molcas : 31 32 33 34 35 36 37 38 + Molcas/ir : 31 32 33 34 35 36 37 38 + SelS : 31 32 33 34 35 36 37 38 + SelS up : 31 32 33 34 35 36 37 38 + SelS dn : 69 70 71 72 73 74 75 76 + Occ = 0 + Ligo = 3 + Molcas : 39 40 41 + Molcas/ir : 39 40 41 + SelS : 39 40 41 + SelS up : 77 78 79 + SelS dn : 80 81 82 + Act = 4 + Molcas : 42 43 44 45 + Molcas/ir : 42 43 44 45 + SelS : 42 43 44 45 + SelS up : 83 84 85 86 + SelS dn : 87 88 89 90 + Ligv = 5 + Molcas : 46 47 48 49 50 + Molcas/ir : 46 47 48 49 50 + SelS : 46 47 48 49 50 + SelS up : 91 92 93 94 95 + SelS dn : 96 97 98 99 100 + Virt = 0 + Delete = 68 + Molcas : 51 52 53 54 55 56 57 58 59 60 + Molcas/ir : 51 52 53 54 55 56 57 58 59 60 + SelS : 51 52 53 54 55 56 57 58 59 60 + SelS up : 101 102 103 104 105 106 107 108 109 110 + SelS dn : 169 170 171 172 173 174 175 176 177 178 + + Molcas : 61 62 63 64 65 66 67 68 69 70 + Molcas/ir : 61 62 63 64 65 66 67 68 69 70 + SelS : 61 62 63 64 65 66 67 68 69 70 + SelS up : 111 112 113 114 115 116 117 118 119 120 + SelS dn : 179 180 181 182 183 184 185 186 187 188 + + Molcas : 71 72 73 74 75 76 77 78 79 80 + Molcas/ir : 71 72 73 74 75 76 77 78 79 80 + SelS : 71 72 73 74 75 76 77 78 79 80 + SelS up : 121 122 123 124 125 126 127 128 129 130 + SelS dn : 189 190 191 192 193 194 195 196 197 198 + + Molcas : 81 82 83 84 85 86 87 88 89 90 + Molcas/ir : 81 82 83 84 85 86 87 88 89 90 + SelS : 81 82 83 84 85 86 87 88 89 90 + SelS up : 131 132 133 134 135 136 137 138 139 140 + SelS dn : 199 200 201 202 203 204 205 206 207 208 + + Molcas : 91 92 93 94 95 96 97 98 99 100 + Molcas/ir : 91 92 93 94 95 96 97 98 99 100 + SelS : 91 92 93 94 95 96 97 98 99 100 + SelS up : 141 142 143 144 145 146 147 148 149 150 + SelS dn : 209 210 211 212 213 214 215 216 217 218 + + Molcas : 101 102 103 104 105 106 107 108 109 110 + Molcas/ir : 101 102 103 104 105 106 107 108 109 110 + SelS : 101 102 103 104 105 106 107 108 109 110 + SelS up : 151 152 153 154 155 156 157 158 159 160 + SelS dn : 219 220 221 222 223 224 225 226 227 228 + + Molcas : 111 112 113 114 115 116 117 118 + Molcas/ir : 111 112 113 114 115 116 117 118 + SelS : 111 112 113 114 115 116 117 118 + SelS up : 161 162 163 164 165 166 167 168 + SelS dn : 229 230 231 232 233 234 235 236 + + + >>> Reading Ref0 + Nb of read ref0 : 13 + 1 : 1011 0100 + 2 : 1110 1000 + 3 : 1110 0100 + 4 : 1110 0010 + 5 : 1101 1000 + 6 : 1101 0100 + 7 : 1101 0001 + 8 : 1011 1000 + 9 : 1011 0001 + 10 : 1011 0010 + 11 : 0111 0001 + 12 : 0111 0100 + 13 : 0111 0010 + + >>> Generation of all determinants + Ref0: 1 Couches fermees : 0 - 0000 0000 Ref0: 1 Couches ouvertes: 4 - 1111 0000 + Ref0: 2 Couches fermees : 1 - 1000 0000 Ref0: 2 Couches ouvertes: 2 - 0110 0000 + Ref0: 3 Couches fermees : 1 - 0100 0000 Ref0: 3 Couches ouvertes: 2 - 1010 0000 + Ref0: 4 Couches fermees : 1 - 0010 0000 Ref0: 4 Couches ouvertes: 2 - 1100 0000 + Ref0: 5 Couches fermees : 1 - 1000 0000 Ref0: 5 Couches ouvertes: 2 - 0101 0000 + Ref0: 6 Couches fermees : 1 - 0100 0000 Ref0: 6 Couches ouvertes: 2 - 1001 0000 + Ref0: 7 Couches fermees : 1 - 0001 0000 Ref0: 7 Couches ouvertes: 2 - 1100 0000 + Ref0: 8 Couches fermees : 1 - 1000 0000 Ref0: 8 Couches ouvertes: 2 - 0011 0000 + Ref0: 9 Couches fermees : 1 - 0001 0000 Ref0: 9 Couches ouvertes: 2 - 1010 0000 + Ref0: 10 Couches fermees : 1 - 0010 0000 Ref0: 10 Couches ouvertes: 2 - 1001 0000 + Ref0: 11 Couches fermees : 1 - 0001 0000 Ref0: 11 Couches ouvertes: 2 - 0110 0000 + Ref0: 12 Couches fermees : 1 - 0100 0000 Ref0: 12 Couches ouvertes: 2 - 0011 0000 + Ref0: 13 Couches fermees : 1 - 0010 0000 Ref0: 13 Couches ouvertes: 2 - 0101 0000 + + Nbre de conf d'espace unique : 13 + Ref0 irr: 1 Couches fermees : 0 - 0000 Ref0 irr: 1 Couches ouvertes: 4 - 1111 + Ref0 irr: 2 Couches fermees : 1 - 1000 Ref0 irr: 2 Couches ouvertes: 2 - 0110 + Ref0 irr: 3 Couches fermees : 1 - 0100 Ref0 irr: 3 Couches ouvertes: 2 - 1010 + Ref0 irr: 4 Couches fermees : 1 - 0010 Ref0 irr: 4 Couches ouvertes: 2 - 1100 + Ref0 irr: 5 Couches fermees : 1 - 1000 Ref0 irr: 5 Couches ouvertes: 2 - 0101 + Ref0 irr: 6 Couches fermees : 1 - 0100 Ref0 irr: 6 Couches ouvertes: 2 - 1001 + Ref0 irr: 7 Couches fermees : 1 - 0001 Ref0 irr: 7 Couches ouvertes: 2 - 1100 + Ref0 irr: 8 Couches fermees : 1 - 1000 Ref0 irr: 8 Couches ouvertes: 2 - 0011 + Ref0 irr: 9 Couches fermees : 1 - 0001 Ref0 irr: 9 Couches ouvertes: 2 - 1010 + Ref0 irr: 10 Couches fermees : 1 - 0010 Ref0 irr: 10 Couches ouvertes: 2 - 1001 + Ref0 irr: 11 Couches fermees : 1 - 0001 Ref0 irr: 11 Couches ouvertes: 2 - 0110 + Ref0 irr: 12 Couches fermees : 1 - 0100 Ref0 irr: 12 Couches ouvertes: 2 - 0011 + Ref0 irr: 13 Couches fermees : 1 - 0010 Ref0 irr: 13 Couches ouvertes: 2 - 0101 + Nbre de det Ref0 final : 16 + -------------------------------------------- + Entree dans diag_S2 pour les etats : +0111 1000 +1011 0100 +1101 0010 +1110 0001 + Matrix to be diagonalised + 3.000000 1.000000 1.000000 1.000000 + 1.000000 3.000000 1.000000 1.000000 + 1.000000 1.000000 3.000000 1.000000 + 1.000000 1.000000 1.000000 3.000000 + Valeurs pp de S2 + 2.000000000000 2.000000000000 2.000000000000 6.000000000000 + + Nbre de conf S, Sz 3 + 0.048957 0.449881 -0.738383 + 0.256610 -0.815030 -0.140989 + 0.512449 0.365148 0.595031 + -0.818016 0.000000 0.284341 + -------------------------------------------- + + Ref0 finaux + 1 : 0111 1000 + 2 : 1011 0100 + 3 : 1101 0010 + 4 : 1110 0001 + 5 : 1110 1000 + 6 : 1110 0100 + 7 : 1110 0010 + 8 : 1101 1000 + 9 : 1101 0100 + 10 : 1101 0001 + 11 : 1011 1000 + 12 : 1011 0001 + 13 : 1011 0010 + 14 : 0111 0001 + 15 : 0111 0100 + 16 : 0111 0010 + Nbre de det Ref1 (debug) : 4928 + Nbre de det Ref1 CAS -> CAS : 0 + Nbre de det Ref1 ligo-> CAS : 84 + Nbre de det Ref1 CAS -> ligv: 140 + Nbre de det Ref1 ligo-> ligv: 480 + Nbre de det Ref1 ligo-> ligv + ech : 555 + Nbre de det Ref1 ligo-> ligv tot: 1035 + Ref1 Cas -> Cas : 1 -> 0 +=== +Active determinant list R_-2 +Contains 22 determinants + 0 2 -2 + 6 0 16 +=== +Active determinant list R_-1 +Contains 52 determinants + 1 -1 3 -3 + 4 24 0 24 +=== +Active determinant list R_0 +Contains 69 determinants + 0 2 -2 4 -4 + 16 1 36 0 16 +=== +Active determinant list R_1 +Contains 52 determinants + 1 -1 3 -3 + 4 24 0 24 +=== +Active determinant list R_2 +Contains 22 determinants + 0 2 -2 + 6 0 16 + + ---------------------------------------------------------------------------------------------------- + >>> Generation of all determinants + ---------------------------------------------------------------------------------------------------- + Nb of determinants in D 0 = 16 + Nb of determinants in D 1 = 1035 + Nb of determinants in D 2 = 11145 + Nb of determinants in D 11 = 84 + Nb of determinants in D 12 = 2040 + Nb of determinants in D-11 = 140 + Nb of determinants in D-12 = 3660 + Nb of determinants in D 20 = 102 + Nb of determinants in D-20 = 310 + + Total Nb of determinant 18532 + + >>> Generation of D0 + >>> Determinant block D0 generated in 0.00 second(s) + >>> Generation of D1 + >>> Determinant block D1 generated in 0.00 second(s) + >>> Generation of D2 + >>> Determinant block D2 generated in 0.00 second(s) + >>> Generation of D11 + >>> Determinant block D11 generated in 0.00 second(s) + >>> Generation of D12 + >>> Determinant block D12 generated in 0.00 second(s) + >>> Generation of D-11 + >>> Determinant block D-11 generated in 0.00 second(s) + >>> Generation of D-12 + >>> Determinant block D-12 generated in 0.00 second(s) + >>> Generation of D20 + >>> Determinant block D20 generated in 0.00 second(s) + >>> Generation of D-20 + >>> Determinant block D-20 generated in 0.00 second(s) + >>>Determinants generated in 1.3935000000000001E-002 second(s) + + >>> x_info written on file + + >>> Determinants written on file + + >>> Lecture des integrales TraOne et TraInt + >>> Lecture des integrales TraOne + Ouverture TraOne = cuo.TraOne + Lecture TraOne en entiers 64 bits + Potnuc = -449.56085922 + Nombre d'irrep lu ds TraOne = 1 + BSLbl = + Irrep = 1 + 1 CU01 1s + 2 CU01 2px + 3 CU01 2px + 4 CU01 2py + 5 CU01 2py + 6 CU01 2pz + 7 CU01 2pz + 8 CU01 3d2- + 9 CU01 3d2- + 10 CU01 3d1- + 11 CU01 3d1- + 12 CU01 3d0 + 13 CU01 3d0 + 14 CU01 3d1+ + 15 CU01 3d1+ + 16 CU01 3d2+ + 17 CU01 3d2+ + 18 CU02 1s + 19 CU02 2px + 20 CU02 2px + 21 CU02 2py + 22 CU02 2py + 23 CU02 2pz + 24 CU02 2pz + 25 CU02 3d2- + 26 CU02 3d2- + 27 CU02 3d1- + 28 CU02 3d1- + 29 CU02 3d0 + 30 CU02 3d0 + 31 CU02 3d1+ + 32 CU02 3d1+ + 33 CU02 3d2+ + 34 CU02 3d2+ + 35 O_03 1s + 36 O_03 2px + 37 O_03 2px + 38 O_03 2py + 39 O_03 2py + 40 O_03 2pz + 41 O_03 2pz + 42 O_03 3d2- + 43 O_03 3d1- + 44 O_03 3d0 + 45 O_03 3d1+ + 46 O_03 3d2+ + 47 O_04 1s + 48 O_04 2px + 49 O_04 2px + 50 O_04 2py + 51 O_04 2py + 52 O_04 2pz + 53 O_04 2pz + 54 O_04 3d2- + 55 O_04 3d1- + 56 O_04 3d0 + 57 O_04 3d1+ + 58 O_04 3d2+ + 59 O_05 1s + 60 O_05 2px + 61 O_05 2px + 62 O_05 2py + 63 O_05 2py + 64 O_05 2pz + 65 O_05 2pz + 66 O_05 3d2- + 67 O_05 3d1- + 68 O_05 3d0 + 69 O_05 3d1+ + 70 O_05 3d2+ + 71 O_06 1s + 72 O_06 2px + 73 O_06 2px + 74 O_06 2py + 75 O_06 2py + 76 O_06 2pz + 77 O_06 2pz + 78 O_06 3d2- + 79 O_06 3d1- + 80 O_06 3d0 + 81 O_06 3d1+ + 82 O_06 3d2+ + 83 O_07 1s + 84 O_07 2px + 85 O_07 2px + 86 O_07 2py + 87 O_07 2py + 88 O_07 2pz + 89 O_07 2pz + 90 O_07 3d2- + 91 O_07 3d1- + 92 O_07 3d0 + 93 O_07 3d1+ + 94 O_07 3d2+ + 95 O_08 1s + 96 O_08 2px + 97 O_08 2px + 98 O_08 2py + 99 O_08 2py + 100 O_08 2pz + 101 O_08 2pz + 102 O_08 3d2- + 103 O_08 3d1- + 104 O_08 3d0 + 105 O_08 3d1+ + 106 O_08 3d2+ + 107 O_09 1s + 108 O_09 2px + 109 O_09 2px + 110 O_09 2py + 111 O_09 2py + 112 O_09 2pz + 113 O_09 2pz + 114 O_09 3d2- + 115 O_09 3d1- + 116 O_09 3d0 + 117 O_09 3d1+ + 118 O_09 3d2+ + Nombre d'integrales a lire = 78 + Nombre d'integrales mono-electroniques lues = 78 + + >>> Lecture des integrales TraInt + Ouverture TraInt = cuo.TraInt + Lecture TraInt en entiers 64 bits + Total nb of 2e- integrals 3081 + (oo|oo) 21 + (ao|oo) 72 + (aa|oo) and (ao|ao) 138 + (aa|ao) 120 + (aa|aa) 55 + (vo|oo) 90 + (va|oo) and (vo|ao) 300 + (va|ao) and (vo|aa) 390 + (va|aa) 200 + (vv|oo) and (vo|vo) 210 + (vv|ao), and (va|vo) 480 + (vv|aa) and (va|va) 360 + (vv|vo) 225 + (vv|va) 300 + (vv|vv) 120 + gelees 0 + >>> Integrals read in 2.1330000000000029E-003 second(s) + + >>> Construction of the Fock matrix + >>> Fock matrix built in 3.7400000000000627E-004 second(s) + + One-electron energy = -13.247675800429850 + Two-electron energy = 3.2986676825230550 + E0 = -9.9490081179067946 + Pot. Nuc. = -449.56085922003842 + Total E = -459.50986733794520 + + >>> Construction of the diagonal of the Hamiltonian matrix (gen) + >>> Hdiag(gen) built in CPU time: 0.009818 second(s) Wall time: 0.010000 second(s) + + ---------------------------------------------------------------------------------------------------- + >>> Calculation of guess vectors + ---------------------------------------------------------------------------------------------------- + >>> Build the matrix H0=<D00|H|D00> + >>> H0 diagonalised in 1.0100000000000386E-004 second(s) + + ---------------------------------------------------------------------------------------------------- + >>> Diagonalisation + ---------------------------------------------------------------------------------------------------- + + ================================================================= + >>> Davidson Diagonalisation + Search for 4 vectors with a convergence threshold of 1.0E-04 + +Total Elapsed tWall 0.0400s +Particles are divided in batches of 5 + #Iter tCPU (s) tWall (s) Energies + 0 0.0000 0.0000 -462.5453189892 -462.0809787580 -462.0769011406 -462.0756145990 + 1 0.5777 0.5780 -462.5453189892 -462.0809787580 -462.0769011406 -462.0756145990 + 4.441E-16 0.000E+00 0.000E+00 0.000E+00 + 2 0.5496 0.5520 -462.5473689642 -462.0981924925 -462.0887364619 -462.0780940339 + -2.050E-03 -1.721E-02 -1.184E-02 -2.479E-03 + 3 0.5490 0.5490 -462.5473940635 -462.1184542108 -462.1023762082 -462.0820351170 + -2.510E-05 -2.026E-02 -1.364E-02 -3.941E-03 + 4 0.5497 0.5500 -462.5473948871 -462.1444568814 -462.1188153382 -462.0936840670 + -8.236E-07 -2.600E-02 -1.644E-02 -1.165E-02 + 5 0.5506 0.5510 -462.5473950005 -462.1520265723 -462.1209269573 -462.0949437075 + -1.134E-07 -7.570E-03 -2.112E-03 -1.260E-03 + 6 0.5508 0.5510 -462.5473950217 -462.1539109210 -462.1221350039 -462.1128133939 + -2.119E-08 -1.884E-03 -1.208E-03 -1.787E-02 + The vectors 1 seem converged : we take them out + 7 0.5136 0.5140 -462.1539109210 -462.1221350039 -462.1128133939 + 5.329E-15 -3.997E-15 8.438E-15 + 8 0.5137 0.5130 -462.1543716847 -462.1258613712 -462.1218882000 + -4.608E-04 -3.726E-03 -9.075E-03 + 9 0.5141 0.5140 -462.1547068038 -462.1320532261 -462.1233737554 + -3.351E-04 -6.192E-03 -1.486E-03 + 10 0.5132 0.5130 -462.1549637194 -462.1400305336 -462.1281417888 + -2.569E-04 -7.977E-03 -4.768E-03 + 11 0.5142 0.5140 -462.1551952564 -462.1479589357 -462.1320278766 + -2.315E-04 -7.928E-03 -3.886E-03 + 12 0.5138 0.5130 -462.1555748559 -462.1511873329 -462.1352917971 + -3.796E-04 -3.228E-03 -3.264E-03 + 13 0.5148 0.5150 -462.1561363062 -462.1525113361 -462.1405647425 + -5.615E-04 -1.324E-03 -5.273E-03 + 14 0.5154 0.5160 -462.1566115569 -462.1532644250 -462.1447567106 + -4.753E-04 -7.531E-04 -4.192E-03 + 15 0.5155 0.5150 -462.1570302753 -462.1538377131 -462.1476550217 + -4.187E-04 -5.733E-04 -2.898E-03 + 16 0.5153 0.5150 -462.1572888534 -462.1542116459 -462.1490515008 + -2.586E-04 -3.739E-04 -1.396E-03 + >>> On contracte <<< + 17 0.5146 0.5150 -462.1572888534 -462.1542116459 -462.1490515008 + 2.665E-15 8.882E-16 -4.441E-16 + 18 0.5135 0.5140 -462.1573722202 -462.1543201138 -462.1493729824 + -8.337E-05 -1.085E-04 -3.215E-04 + 19 0.5134 0.5130 -462.1574347636 -462.1543966744 -462.1495839235 + -6.254E-05 -7.656E-05 -2.109E-04 + 20 0.5136 0.5130 -462.1574803402 -462.1544529075 -462.1497391559 + -4.558E-05 -5.623E-05 -1.552E-04 + 21 0.5144 0.5150 -462.1575136219 -462.1544955392 -462.1498570307 + -3.328E-05 -4.263E-05 -1.179E-04 + 22 0.5151 0.5150 -462.1575261983 -462.1545192019 -462.1499021265 + -1.258E-05 -2.366E-05 -4.510E-05 + 23 0.5174 0.5180 -462.1575322197 -462.1545320734 -462.1499238803 + -6.021E-06 -1.287E-05 -2.175E-05 + 24 0.5171 0.5170 -462.1575384133 -462.1545400325 -462.1499456848 + -6.194E-06 -7.959E-06 -2.180E-05 + 25 0.5163 0.5170 -462.1575430162 -462.1545455306 -462.1499631578 + -4.603E-06 -5.498E-06 -1.747E-05 + 26 0.5151 0.5150 -462.1575448151 -462.1545481486 -462.1499706616 + -1.799E-06 -2.618E-06 -7.504E-06 + >>> On contracte <<< + 27 0.5139 0.5140 -462.1575448151 -462.1545481486 -462.1499706616 + -2.354E-14 -1.332E-15 9.770E-15 + 28 0.5133 0.5130 -462.1575453824 -462.1545489020 -462.1499730971 + -5.673E-07 -7.535E-07 -2.435E-06 + 29 0.5138 0.5140 -462.1575460020 -462.1545494342 -462.1499759748 + -6.196E-07 -5.322E-07 -2.878E-06 + 30 0.5135 0.5130 -462.1575464252 -462.1545497172 -462.1499782286 + -4.232E-07 -2.830E-07 -2.254E-06 + 31 0.5141 0.5140 -462.1575466500 -462.1545498852 -462.1499795620 + -2.248E-07 -1.680E-07 -1.333E-06 + 32 0.5145 0.5150 -462.1575467753 -462.1545499825 -462.1499803355 + -1.253E-07 -9.732E-08 -7.735E-07 + 33 0.5147 0.5150 -462.1575468540 -462.1545500433 -462.1499808540 + -7.872E-08 -6.076E-08 -5.185E-07 + 34 0.5145 0.5140 -462.1575469110 -462.1545500829 -462.1499812908 + -5.697E-08 -3.966E-08 -4.368E-07 + 35 0.5147 0.5150 -462.1575469529 -462.1545501108 -462.1499816564 + -4.195E-08 -2.789E-08 -3.656E-07 + 36 0.5145 0.5150 -462.1575469690 -462.1545501250 -462.1499818113 + -1.604E-08 -1.422E-08 -1.548E-07 + >>> On contracte <<< + 37 0.5164 0.5210 -462.1575469690 -462.1545501250 -462.1499818113 + 8.882E-16 -3.109E-15 -8.882E-16 + 38 0.5161 0.5160 -462.1575469754 -462.1545501318 -462.1499818754 + -6.384E-09 -6.798E-09 -6.411E-08 + The vectors 1 2 seem converged : we take them out +-- Davidson' iteration: 38 ncol= 3 Nbre of converged vectors: 3 Nbre of remaining vectors: 1 + 39 0.4296 0.4300 -462.1499818754 + -1.243E-14 + 40 0.4294 0.4290 -462.1499819112 + -3.586E-08 + 41 0.4296 0.4300 -462.1499820129 + -1.017E-07 + 42 0.4295 0.4300 -462.1499820398 + -2.686E-08 + 43 0.4297 0.4300 -462.1499820696 + -2.980E-08 + 44 0.4309 0.4310 -462.1499820843 + -1.478E-08 + 45 0.4320 0.4320 -462.1499821006 + -1.623E-08 + 46 0.4313 0.4310 -462.1499821078 + -7.266E-09 + The vectors 1 seem converged : we take them out +-- Davidson' iteration: 46 ncol= 9 Nbre of converged vectors: 4 Nbre of remaining vectors: 0 + + >>> Davidson procedure converged on vectors corrections at 1.0E-08 <<< + >>> Convergence reached after 45 iterations <<< + + Overlap matrix between final vectors (difference to Id) + -0.144329E-14 -0.159131E-16 -0.563001E-16 -0.773630E-16 + -0.159131E-16 0.310862E-14 0.104857E-14 0.414329E-14 + -0.563001E-16 0.104857E-14 0.488498E-14 0.253356E-15 + -0.773630E-16 0.414329E-14 0.253356E-15 -0.399680E-14 + + Energies : -462.547395021697241 -462.157546975365733 -462.154550131837027 -462.149982107835683 + E ss ref : -3.037527683752005 -2.647679637420535 -2.644682793891838 -2.640114769890475 + dE (a.u.): 0.000000000000000 0.389848046331470 0.392844889860167 0.397412913861530 + dE (meV) : 0.000000000000000 10608.305765969455024 10689.854032747622114 10814.156298229641834 + |Hv-Ev| : 3.5086E-05 4.6833E-05 4.4846E-05 4.6802E-05 + deltaE : -2.1188E-08 -6.3842E-09 -6.7983E-09 -7.2658E-09 + + Maximum precision expected on |Hv-Ev| : 0.3D-07 + Maximum precision expected on <v|H|v>-E : 0.1D-14 + + Calculation finished in CPUtime 24.94s Walltime: 24.95s + Calculation finished on 06-12-2024 at 15:00 diff --git a/test/CuO_03450_extravec_reconv/test b/test/CuO_03450_extravec_reconv/test new file mode 100755 index 0000000000000000000000000000000000000000..8697cf689abaec53d36fa9da1272fa79304847b8 --- /dev/null +++ b/test/CuO_03450_extravec_reconv/test @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) +sys.path.append(os.path.join(os.path.dirname(__file__), '..')) + +from runtest_relaxse import Filter, TestRun + +test = TestRun(__file__, sys.argv) + +f = Filter() + +f.add(string = 'Energies :', + abs_tolerance = 1.0e-6) + +#f.add(string = '|Hv-Ev| :', +# abs_tolerance = 1.0e-7) + +test.run(['cuo.input'], {'out': f}) + +sys.exit(test.return_code) diff --git a/test/prop_CuO_02204/cuo.sass b/test/prop_CuO_02204/cuo.sass index c05b663f40febe1d8ef5d371d0ef4c560460fa07..99f856a3f57873c872d3b89697beff2a1fc554f3 100644 Binary files a/test/prop_CuO_02204/cuo.sass and b/test/prop_CuO_02204/cuo.sass differ diff --git a/test/prop_CuO_02240/cuo.sass b/test/prop_CuO_02240/cuo.sass index 39d45f89425bb11696a9385de7da172b4f7e8419..ee6bd5afa8282a07367e7d3a5a94a0cac32ab5a0 100644 Binary files a/test/prop_CuO_02240/cuo.sass and b/test/prop_CuO_02240/cuo.sass differ diff --git a/test/prop_CuO_03450/cuo.sass b/test/prop_CuO_03450/cuo.sass index 92eef72cee8fef606d55364c6fec45c5590415b5..b4d5a0e79a6bbed2fbbf8806b3ee059b21418163 100644 Binary files a/test/prop_CuO_03450/cuo.sass and b/test/prop_CuO_03450/cuo.sass differ diff --git a/test/prop_CuO_03450_Helm/cuo.sass b/test/prop_CuO_03450_Helm/cuo.sass index 92eef72cee8fef606d55364c6fec45c5590415b5..b4d5a0e79a6bbed2fbbf8806b3ee059b21418163 100644 Binary files a/test/prop_CuO_03450_Helm/cuo.sass and b/test/prop_CuO_03450_Helm/cuo.sass differ diff --git a/test/prop_CuO_20204/cuo.sass b/test/prop_CuO_20204/cuo.sass index 608d60d5322d6993d540262650e19138660635b7..267696fe2b8c4e0b7880b41cf637dc6684e6451d 100644 Binary files a/test/prop_CuO_20204/cuo.sass and b/test/prop_CuO_20204/cuo.sass differ