ascii_atomic_references Subroutine

public subroutine ascii_atomic_references(unit, mol, disp)

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: unit

Unit for output

class(structure_type), intent(in) :: mol

Molecular structure data

class(d4_model), intent(in) :: disp

Dispersion model


Source Code

subroutine ascii_atomic_references(unit, mol, disp)
   !DEC$ ATTRIBUTES DLLEXPORT :: ascii_atomic_references

   !> Unit for output
   integer, intent(in) :: unit

   !> Molecular structure data
   class(structure_type), intent(in) :: mol

   !> Dispersion model
   class(d4_model), intent(in) :: disp

   integer :: isp, iref, mref

   mref = maxval(disp%ref)
   write(unit, '(a,":")') "Atomic reference systems (in atomic units)"
   write(unit, '(70("-"))')
   write(unit, '(a4, 5x)', advance='no') "Z"
   do iref = 1, 2
      write(unit, '(a4, 2(1x, a7), 1x, a9)', advance='no') &
         "#", "CN", "q+Z", "C6(AA)"
   end do
   write(unit, '(a)')
   write(unit, '(70("-"))')
   do isp = 1, mol%nid
      write(unit, '(i4, 1x, a4)', advance='no') &
         & mol%num(isp), mol%sym(isp)
      do iref = 1, disp%ref(isp)
         write(unit, '(i4, 2(1x, f7.4), 1x, f9.4)', advance='no') &
            iref, disp%cn(iref, isp), disp%q(iref, isp) + disp%zeff(isp), &
            disp%c6(iref, iref, isp, isp)
         if (iref == 2 .and. disp%ref(isp) > 2) then
            write(unit, '(/,9x)', advance='no')
         end if
         if (iref == 4 .and. disp%ref(isp) > 4) then
            write(unit, '(/,9x)', advance='no')
         end if
         if (iref == 6 .and. disp%ref(isp) > 6) then
            write(unit, '(/,9x)', advance='no')
         end if
      end do
      write(unit, '(a)')
   end do
   write(unit, '(70("-"))')
   write(unit, '(a)')

end subroutine ascii_atomic_references