tagarray - Open-Quantum-Platform/openqp GitHub Wiki

Dynamic memory allocations and deallocations are often required during runtime for efficient memory usage, especially when handling large data structures like the Fock matrix. Managing this across different layers can be challenging. To address this, a separate project called "TagArray" has been developed, as illustrated in Fig. below. TagArray enables any layer within the structure to allocate or deallocate dynamic memory using a Tag, which is a simple text string.

sharing_dynamic_memory

In the context of OpenQP, tagarrays are utilized to manage and exchange data within the platform. Below is the list of predefined tagarrays for OpenQP, as defined in source/tagarray_driver.F90:

character(len=*), parameter, public :: OQP_prefix = "OQP::"

! Density matrices and Fock matrices
character(len=*), parameter, public :: OQP_DM_A = OQP_prefix // "DM_A"
character(len=*), parameter, public :: OQP_DM_B = OQP_prefix // "DM_B"
character(len=*), parameter, public :: OQP_FOCK_A = OQP_prefix // "FOCK_A"
character(len=*), parameter, public :: OQP_FOCK_B = OQP_prefix // "FOCK_B"

! Molecular orbital energies and vectors
character(len=*), parameter, public :: OQP_E_MO_A = OQP_prefix // "E_MO_A"
character(len=*), parameter, public :: OQP_E_MO_B = OQP_prefix // "E_MO_B"
character(len=*), parameter, public :: OQP_VEC_MO_A = OQP_prefix // "VEC_MO_A"
character(len=*), parameter, public :: OQP_VEC_MO_B = OQP_prefix // "VEC_MO_B"

! Core Hamiltonian and various matrices
character(len=*), parameter, public :: OQP_Hcore = OQP_prefix // "Hcore"
character(len=*), parameter, public :: OQP_SM = OQP_prefix // "SM"
character(len=*), parameter, public :: OQP_TM = OQP_prefix // "TM"
character(len=*), parameter, public :: OQP_XINTS = OQP_prefix // "XINTS"
character(len=*), parameter, public :: OQP_WAO = OQP_prefix // "WAO"

! Time-dependent calculations and related data
character(len=*), parameter, public :: OQP_td_abxc = OQP_prefix // "td_abxc"
character(len=*), parameter, public :: OQP_td_bvec_mo = OQP_prefix // "td_bvec_mo"
character(len=*), parameter, public :: OQP_td_mrsf_density = OQP_prefix // "td_mrsf_density"
character(len=*), parameter, public :: OQP_td_p = OQP_prefix // "td_p"
character(len=*), parameter, public :: OQP_td_t = OQP_prefix // "td_t"
character(len=*), parameter, public :: OQP_td_xpy = OQP_prefix // "td_xpy"
character(len=*), parameter, public :: OQP_td_xmy = OQP_prefix // "td_xmy"
character(len=*), parameter, public :: OQP_td_energies = OQP_prefix // "td_energies"

! File handling and logging
character(len=*), parameter, public :: OQP_log_filename = OQP_prefix // "log_filename"
character(len=*), parameter, public :: OQP_basis_filename = OQP_prefix // "basis_filename"
character(len=*), parameter, public :: OQP_hbasis_filename = OQP_prefix // "hbasis_filename"

! Data for property computations between two geometries
character(len=*), parameter, public :: OQP_xyz_old = OQP_prefix // "xyz_old"
character(len=*), parameter, public :: OQP_overlap_ao = OQP_prefix // "overlap_ao_non_orthogonal"
character(len=*), parameter, public :: OQP_overlap_mo = OQP_prefix // "overlap_mo_non_orthogonal"
character(len=*), parameter, public :: OQP_E_MO_A_old = OQP_prefix // "E_MO_A_old"
character(len=*), parameter, public :: OQP_E_MO_B_old = OQP_prefix // "E_MO_B_old"
character(len=*), parameter, public :: OQP_VEC_MO_A_old = OQP_prefix // "VEC_MO_A_old"
character(len=*), parameter, public :: OQP_VEC_MO_B_old = OQP_prefix // "VEC_MO_B_old"
character(len=*), parameter, public :: OQP_td_bvec_mo_old = OQP_prefix // "td_bvec_mo_old"
character(len=*), parameter, public :: OQP_td_energies_old = OQP_prefix // "td_energies_old"

! Non-adiabatic coupling and time-dependent states
character(len=*), parameter, public :: OQP_nac = OQP_prefix // "nac"
character(len=*), parameter, public :: OQP_td_states_phase = OQP_prefix // "td_states_phase"
character(len=*), parameter, public :: OQP_td_states_overlap = OQP_prefix // "td_states_overlap"

These tagarrays are used to efficiently manage and transfer data across different parts of the OpenQP platform, ensuring that complex quantum mechanical calculations can be performed smoothly and with interoperability between different programming environments.

Going back to Developer Documentation

⚠️ **GitHub.com Fallback** ⚠️