subroutine print_averaged_ci_coeff integer :: i, ic, ex(2, 4), iCI, unit_CIav real(dp) :: sign_tmp(lenof_sign), ref_coef logical :: tPar totEntCoeff(:, :) = 0 iCILoop0: do iCI = 0, n_store_ci_level if (iCI /= 0) open (newunit=unit_CIav, file='ci_coeff_'//str(iCI)//'_av', status='replace') ! loop over the total entries of CI coefficients do i = 1, root_first_free_entry ic = n_store_ci_level + 1 ! gets the excitation level of the CI coefficient call get_bit_excitmat(iLutRef(:, 1), root_ciCoeff_storage(:, i), ex, ic) if (iCI == ic) then ! gets the value of the CI coefficient (i.e. the number of walkers) call extract_sign(root_ciCoeff_storage(:, i), sign_tmp) ex(1, 1) = ic ! gets the sign of the CI coef (tPar=true if odd number of permutations) call GetBitExcitation(ilutRef(:, 1), root_ciCoeff_storage(:, i), ex, tPar) if (tPar) sign_tmp = -sign_tmp select case (iCI) ! writing averaged CI coefficients case (0) ! reference write (stdout, "(A45,F14.3)") 'Instantaneous number of walkers on HF : ', AllNoatHF ref_coef = -sign_tmp(1) write (stdout, "(A45,F14.3)") 'Averaged number of walkers on HF : ', -sign_tmp/nCyc write (stdout, "(A45,I10)") 'Total entries of CI coefficients : ', root_first_free_entry case (1) ! singles totEntCoeff(iCI, 1) = totEntCoeff(iCI, 1) + 1 ! total entries for singles if (.not. near_zero(sign_tmp(1))) then totEntCoeff(iCI, 2) = totEntCoeff(iCI, 2) + 1 ! total entries for singles without zeros write (unit_CIav, '(G20.12,2I5)') sign_tmp/ref_coef, ex(1, 1), ex(2, 1) end if case (2) ! doubles totEntCoeff(iCI, 1) = totEntCoeff(iCI, 1) + 1 ! total entries for doubles if (.not. near_zero(sign_tmp(1))) then totEntCoeff(iCI, 2) = totEntCoeff(iCI, 2) + 1 ! total entries for doubles without zeros write (unit_CIav, '(G20.12,4I5)') sign_tmp/ref_coef, ex(1, 1), ex(2, 1), & ex(1, 2), ex(2, 2) end if case (3) ! triples totEntCoeff(iCI, 1) = totEntCoeff(iCI, 1) + 1 ! total entries for triples if (.not. near_zero(sign_tmp(1))) then totEntCoeff(iCI, 2) = totEntCoeff(iCI, 2) + 1 ! total entries for triples without zeros write (unit_CIav, '(G20.12,6I5)') sign_tmp/ref_coef, ex(1, 1), ex(2, 1), & ex(1, 2), ex(2, 2), ex(1, 3), ex(2, 3) end if end select end if end do if (iCI /= 0) then close (unit_CIav) write (stdout, "(A31,I1,A12,I11)") 'total entries CI coeff. with ', iCI, 'excit. :', totEntCoeff(iCI, 1) if (totEntCoeff(iCI, 1) /= totEntCoeff(iCI, 2)) then write (stdout, "(A17,A27,I11)") '- without zeros', ':', totEntCoeff(iCI, 2) end if end if end do iCILoop0 end subroutine print_averaged_ci_coeff