normalize_basis_name Function

public pure function normalize_basis_name(basis_name) result(normalized)

Normalize basis set name to filename-safe format

Rules: * -> s + -> p Remove parentheses and commas

Examples: 6-31G -> 6-31Gs 6-31+G -> 6-31pGs 6-31G(d) -> 6-31Gd 6-311G(d,p) -> 6-311Gdp 6-311++G** -> 6-311ppGss cc-pVDZ -> cc-pVDZ (unchanged)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: basis_name

Return Value character(len=:), allocatable


Called by

proc~~normalize_basis_name~~CalledByGraph proc~normalize_basis_name normalize_basis_name proc~find_basis_file find_basis_file proc~find_basis_file->proc~normalize_basis_name

Variables

Type Visibility Attributes Name Initial
character(len=256), private :: buffer
integer, private :: i
logical, private :: in_parens
integer, private :: out_pos

Source Code

   pure function normalize_basis_name(basis_name) result(normalized)
      !! Normalize basis set name to filename-safe format
      !!
      !! Rules:
      !!   * -> s
      !!   + -> p
      !!   Remove parentheses and commas
      !!
      !! Examples:
      !!   6-31G*      -> 6-31Gs
      !!   6-31+G*     -> 6-31pGs
      !!   6-31G(d)    -> 6-31Gd
      !!   6-311G(d,p) -> 6-311Gdp
      !!   6-311++G**  -> 6-311ppGss
      !!   cc-pVDZ     -> cc-pVDZ (unchanged)
      character(len=*), intent(in) :: basis_name
      character(len=:), allocatable :: normalized
      integer :: i, out_pos
      character(len=256) :: buffer
      logical :: in_parens

      buffer = ""
      out_pos = 0
      in_parens = .false.

      do i = 1, len_trim(basis_name)
         select case (basis_name(i:i))
         case ('*')
            ! Star becomes 's'
            out_pos = out_pos + 1
            buffer(out_pos:out_pos) = 's'

         case ('+')
            ! Plus becomes 'p'
            out_pos = out_pos + 1
            buffer(out_pos:out_pos) = 'p'

         case ('(')
            ! Start of parentheses - we'll extract contents
            in_parens = .true.

         case (')')
            ! End of parentheses
            in_parens = .false.

         case (',', ' ')
            ! Skip commas and spaces (inside or outside parentheses)
            continue

         case default
            ! Copy character as-is
            out_pos = out_pos + 1
            buffer(out_pos:out_pos) = basis_name(i:i)
         end select
      end do

      normalized = trim(buffer(1:out_pos))
   end function normalize_basis_name