print_gmbe_energy_breakdown Subroutine

public subroutine print_gmbe_energy_breakdown(monomer_energy, n_monomers, level_energies, level_counts, max_level, total_energy, has_intersections)

Print GMBE energy breakdown using inclusion-exclusion principle

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: monomer_energy
integer, intent(in) :: n_monomers
real(kind=dp), intent(in), optional :: level_energies(:)
integer, intent(in), optional :: level_counts(:)
integer, intent(in) :: max_level
real(kind=dp), intent(in) :: total_energy
logical, intent(in) :: has_intersections

Calls

proc~~print_gmbe_energy_breakdown~~CallsGraph proc~print_gmbe_energy_breakdown print_gmbe_energy_breakdown info info proc~print_gmbe_energy_breakdown->info

Called by

proc~~print_gmbe_energy_breakdown~~CalledByGraph proc~print_gmbe_energy_breakdown print_gmbe_energy_breakdown proc~compute_gmbe compute_gmbe proc~compute_gmbe->proc~print_gmbe_energy_breakdown

Variables

Type Visibility Attributes Name Initial
integer, private :: k
character(len=256), private :: line
real(kind=dp), private :: sign_factor

Source Code

   subroutine print_gmbe_energy_breakdown(monomer_energy, n_monomers, level_energies, level_counts, &
                                          max_level, total_energy, has_intersections)
      !! Print GMBE energy breakdown using inclusion-exclusion principle
      real(dp), intent(in) :: monomer_energy
      integer, intent(in) :: n_monomers
      real(dp), intent(in), optional :: level_energies(:)
      integer, intent(in), optional :: level_counts(:)
      integer, intent(in) :: max_level
      real(dp), intent(in) :: total_energy
      logical, intent(in) :: has_intersections

      integer :: k
      real(dp) :: sign_factor
      character(len=256) :: line

      if (has_intersections) then
         call logger%info("GMBE Energy breakdown (Inclusion-Exclusion Principle):")
         write (line, '(a,i0,a,f20.10)') "  Monomers (", n_monomers, "):  ", monomer_energy
         call logger%info(trim(line))

         do k = 2, max_level
            if (level_counts(k) > 0) then
               sign_factor = real((-1)**(k + 1), dp)
               if (sign_factor > 0.0_dp) then
                  write (line, '(a,i0,a,i0,a,f20.10)') "  ", k, "-way ∩ (", level_counts(k), "):  +", level_energies(k)
               else
                  write (line, '(a,i0,a,i0,a,f20.10)') "  ", k, "-way ∩ (", level_counts(k), "):  ", level_energies(k)
               end if
               call logger%info(trim(line))
            end if
         end do

         write (line, '(a,f20.10)') "  Total GMBE:      ", total_energy
         call logger%info(trim(line))
      else
         call logger%info("GMBE Energy breakdown:")
         write (line, '(a,i0,a,f20.10)') "  Monomers (", n_monomers, "): ", monomer_energy
         call logger%info(trim(line))
         write (line, '(a,f20.10)') "  Total GMBE:  ", total_energy
         call logger%info(trim(line))
      end if
   end subroutine print_gmbe_energy_breakdown