subroutine dealloc_global_rdm_data() ! This routine just deallocates the arrays allocated in InitRDMs. ! If the NECI calculation softexits before the RDMs start to fill, ! this is all that is called at the end. use CalcData, only: tEN2 use FciMCData, only: Spawned_Parents, Spawned_Parents_Index use FciMCData, only: Spawned_ParentsTag, Spawned_Parents_IndexTag use FciMCData, only: AvNoatHF, IterRDM_HF use LoggingData, only: RDMExcitLevel, tExplicitAllRDM use rdm_data, only: two_rdm_main, two_rdm_recv, two_rdm_recv_2, two_rdm_spawn, en_pert_main use rdm_data, only: rdm_estimates, one_rdms, Sing_ExcDjs, Doub_ExcDjs use rdm_data, only: Sing_ExcDjs2, Doub_ExcDjs2, Sing_ExcDjsTag, Doub_ExcDjsTag use rdm_data, only: Sing_ExcDjs2Tag, Doub_ExcDjs2Tag use rdm_data, only: Sing_InitExcSlots, Doub_InitExcSlots, Sing_ExcList, Doub_ExcList use rdm_data_utils, only: dealloc_rdm_list_t, dealloc_rdm_spawn_t, dealloc_one_rdm_t use rdm_data_utils, only: dealloc_en_pert_t use rdm_estimators, only: dealloc_rdm_estimates_t use RotateOrbsData, only: SymLabelCounts2_rot, SymLabelList2_rot, SymLabelListInv_rot use RotateOrbsData, only: SymLabelCounts2_rotTag, SymLabelList2_rotTag use RotateOrbsData, only: SymLabelListInv_rotTag use RotateOrbsMod, only: FourIndInts, FourIndIntsTag character(len=*), parameter :: t_r = 'dealloc_global_rdm_data' integer :: irdm ! Deallocate global 2-RDM arrays, including the spawning object. call dealloc_rdm_list_t(two_rdm_main) call dealloc_rdm_list_t(two_rdm_recv) call dealloc_rdm_list_t(two_rdm_recv_2) call dealloc_rdm_spawn_t(two_rdm_spawn) ! deallocate the inits-only rdms if (tinitsRDM) then call dealloc_rdm_list_t(two_rdm_inits) call dealloc_rdm_spawn_t(two_rdm_inits_spawn) end if ! Deallocate the EN perturbation orbject. if (tEN2) then call dealloc_en_pert_t(en_pert_main) end if ! Deallocate the RDM estimates object. call dealloc_rdm_estimates_t(rdm_estimates) ! Deallocate all 1-RDM objects. if (allocated(one_rdms)) then do irdm = 1, size(one_rdms) call dealloc_one_rdm_t(one_rdms(irdm)) if (tinitsRDM) call dealloc_one_rdm_t(inits_one_rdms(irdm)) end do deallocate(one_rdms) if (tinitsRDM .and. allocated(inits_one_rdms)) deallocate(inits_one_rdms) end if if (tExplicitAllRDM) then ! This array contains the initial positions of the single ! excitations for each processor. deallocate(Sing_InitExcSlots) ! This array contains the current position of the single ! excitations as they're added. deallocate(Sing_ExcList) ! This array actually contains the single excitations in blocks of ! the processor they will be sent to. deallocate(Sing_ExcDjs) call LogMemDeAlloc(t_r, Sing_ExcDjsTag) deallocate(Sing_ExcDjs2) call LogMemDeAlloc(t_r, Sing_ExcDjs2Tag) if (RDMExcitLevel /= 1) then ! This array contains the initial positions of the ! single excitations for each processor. deallocate(Doub_InitExcSlots) ! This array contains the current position of the single ! excitations as they're added. deallocate(Doub_ExcList) ! This array actually contains the single excitations in ! blocks of the processor they will be sent to. deallocate(Doub_ExcDjs) call LogMemDeAlloc(t_r, Doub_ExcDjsTag) deallocate(Doub_ExcDjs2) call LogMemDeAlloc(t_r, Doub_ExcDjs2Tag) end if else if (allocated(Spawned_Parents)) then deallocate(Spawned_Parents) call LogMemDeAlloc(t_r, Spawned_ParentsTag) end if if (allocated(Spawned_Parents_Index)) then deallocate(Spawned_Parents_Index) call LogMemDeAlloc(t_r, Spawned_Parents_IndexTag) end if end if if (allocated(FourIndInts)) then deallocate(FourIndInts) call LogMemDeAlloc(t_r, FourIndIntsTag) end if if (allocated(SymLabelCounts2_rot)) then deallocate(SymLabelCounts2_rot) call LogMemDeAlloc(t_r, SymLabelCounts2_rotTag) end if if (allocated(SymLabelList2_rot)) then deallocate(SymLabelList2_rot) call LogMemDeAlloc(t_r, SymLabelList2_rotTag) end if if (allocated(SymLabelListInv_rot)) then deallocate(SymLabelListInv_rot) call LogMemDeAlloc(t_r, SymLabelListInv_rotTag) end if if (allocated(AvNoatHF)) deallocate(AvNoatHF) if (allocated(IterRDM_HF)) deallocate(IterRDM_HF) end subroutine dealloc_global_rdm_data