28 #include "./base/base_uses.f90"
36 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'semi_empirical_store_int_types'
43 TYPE semi_empirical_si_type
44 LOGICAL :: filling_containers, compress
46 REAL(KIND=
dp),
POINTER,
DIMENSION(:) :: max_val_buffer, uncompressed_container
47 TYPE(hfx_memory_type) :: memory_parameter
48 TYPE(hfx_cache_type),
DIMENSION(:), &
49 POINTER :: integral_caches
50 TYPE(hfx_container_type),
DIMENSION(:), &
51 POINTER :: integral_containers
52 END TYPE semi_empirical_si_type
54 PUBLIC :: semi_empirical_si_type, &
71 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
72 TYPE(section_vals_type),
POINTER :: se_section
73 LOGICAL,
INTENT(in),
OPTIONAL :: compression
76 TYPE(section_vals_type),
POINTER :: se_mem_section
78 cpassert(.NOT.
ASSOCIATED(store_int_env))
79 ALLOCATE (store_int_env)
80 store_int_env%filling_containers = .true.
81 store_int_env%nbuffer = 0
82 NULLIFY (store_int_env%max_val_buffer, store_int_env%uncompressed_container)
86 IF (
PRESENT(compression))
THEN
87 store_int_env%compress = compression
92 skip_in_core_forces=.true.)
93 store_int_env%memory_parameter%ram_counter = 0
95 IF (.NOT. store_int_env%compress)
THEN
96 store_int_env%memory_parameter%cache_size = 1
100 IF (store_int_env%memory_parameter%do_disk_storage) &
101 cpabort(
"Disk storage for SEMIEMPIRICAL methods disabled! ")
104 IF (.NOT. store_int_env%memory_parameter%do_all_on_the_fly .AND. store_int_env%compress)
THEN
105 ALLOCATE (store_int_env%integral_containers(64))
106 ALLOCATE (store_int_env%integral_caches(64))
108 store_int_env%integral_caches(i)%element_counter = 1
109 store_int_env%integral_caches(i)%data = 0
110 ALLOCATE (store_int_env%integral_containers(i)%first)
111 store_int_env%integral_containers(i)%first%prev => null()
112 store_int_env%integral_containers(i)%first%next => null()
113 store_int_env%integral_containers(i)%current => store_int_env%integral_containers(i)%first
114 store_int_env%integral_containers(i)%current%data = 0
115 store_int_env%integral_containers(i)%element_counter = 1
127 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
131 IF (
ASSOCIATED(store_int_env))
THEN
133 IF (.NOT. store_int_env%memory_parameter%do_all_on_the_fly)
THEN
134 IF (store_int_env%compress)
THEN
138 store_int_env%memory_parameter%actual_memory_usage, &
140 DEALLOCATE (store_int_env%integral_containers(i)%first)
142 IF (
ASSOCIATED(store_int_env%max_val_buffer))
THEN
143 DEALLOCATE (store_int_env%max_val_buffer)
145 DEALLOCATE (store_int_env%integral_containers)
146 DEALLOCATE (store_int_env%integral_caches)
148 IF (
ASSOCIATED(store_int_env%uncompressed_container))
THEN
149 DEALLOCATE (store_int_env%uncompressed_container)
154 DEALLOCATE (store_int_env)
167 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
168 LOGICAL,
INTENT(IN) :: geometry_did_change
172 IF (
ASSOCIATED(store_int_env))
THEN
173 IF (.NOT. store_int_env%memory_parameter%do_all_on_the_fly)
THEN
174 IF (geometry_did_change)
THEN
175 store_int_env%filling_containers = .true.
176 store_int_env%nbuffer = 0
177 store_int_env%memory_parameter%ram_counter = huge(store_int_env%memory_parameter%ram_counter)
178 IF (store_int_env%compress)
THEN
180 CALL reallocate(store_int_env%max_val_buffer, 1, store_int_env%nbuffer)
184 store_int_env%memory_parameter%actual_memory_usage, &
189 CALL reallocate(store_int_env%uncompressed_container, 1, 0)
190 store_int_env%memory_parameter%actual_memory_usage = 1
193 store_int_env%filling_containers = .false.
194 store_int_env%nbuffer = 0
195 IF (store_int_env%compress)
THEN
199 store_int_env%integral_containers(i), &
200 store_int_env%memory_parameter%actual_memory_usage, .false.)
203 store_int_env%memory_parameter%actual_memory_usage = 1
219 TYPE(semi_empirical_si_type),
POINTER :: store_int_env
220 LOGICAL,
INTENT(IN) :: geometry_did_change
224 IF (
ASSOCIATED(store_int_env))
THEN
225 IF (.NOT. store_int_env%memory_parameter%do_all_on_the_fly)
THEN
226 IF (geometry_did_change)
THEN
227 IF (store_int_env%compress)
THEN
231 store_int_env%integral_containers(i), &
232 store_int_env%memory_parameter%actual_memory_usage, .false.)
235 CALL reallocate(store_int_env%max_val_buffer, 1, store_int_env%nbuffer)
238 CALL reallocate(store_int_env%uncompressed_container, 1, &
239 store_int_env%memory_parameter%actual_memory_usage - 1)
242 IF (store_int_env%compress)
THEN
246 store_int_env%integral_caches(i), &
247 store_int_env%integral_containers(i), store_int_env%memory_parameter%actual_memory_usage, &
routines and types for Hartree-Fock-Exchange
subroutine, public hfx_flush_last_cache(nbits, cache, container, memory_usage, use_disk_storage)
This routine compresses the last probably not yet compressed cache into a container
subroutine, public hfx_decompress_first_cache(nbits, cache, container, memory_usage, use_disk_storage)
This routine decompresses the first bunch of data in a container and copies them into a cache
subroutine, public hfx_reset_cache_and_container(cache, container, memory_usage, do_disk_storage)
This routine resets the containers list pointer to the first element and moves the element counters o...
Types and set/get functions for HFX.
subroutine, public hfx_init_container(container, memory_usage, do_disk_storage)
This routine deletes all list entries in a container in order to deallocate the memory.
subroutine, public parse_memory_section(memory_parameter, hf_sub_section, storage_id, i_thread, n_threads, para_env, irep, skip_disk, skip_in_core_forces)
Parses the memory section
Defines the basic variable types.
integer, parameter, public dp
Utility routines for the memory handling.
Type to store integrals for semi-empirical calculations.
subroutine, public semi_empirical_si_finalize(store_int_env, geometry_did_change)
Deallocate the semi-empirical store integrals type.
subroutine, public semi_empirical_si_initialize(store_int_env, geometry_did_change)
Deallocate the semi-empirical store integrals type.
subroutine, public semi_empirical_si_release(store_int_env)
Deallocate the semi-empirical store integrals type.
subroutine, public semi_empirical_si_create(store_int_env, se_section, compression)
Allocate semi-empirical store integrals type.