diff --git a/src/mo_optimization_types.f90 b/src/mo_optimization_types.f90 index 062a5a11bc9e25a0d9a707ca9d684561038d224f..8ecbdb1e43810c659fdd49566223c28f4b9abc38 100644 --- a/src/mo_optimization_types.f90 +++ b/src/mo_optimization_types.f90 @@ -56,6 +56,7 @@ MODULE mo_optimization_types procedure, private :: sim_data_set_pointer_4d procedure, private :: sim_data_set_pointer_5d ! ToDo: destructor + final :: sim_data_destructor generic, public :: set_pointer => sim_data_set_pointer_1d, sim_data_set_pointer_2d, & sim_data_set_pointer_3d, sim_data_set_pointer_4d, sim_data_set_pointer_5d end type sim_data_t @@ -72,6 +73,7 @@ MODULE mo_optimization_types !< 0 total, n every n timestep contains procedure, public :: is_allocated => sim_var_is_allocated + final :: sim_var_destructor end type sim_var_t !> \brief optional data, such as sm, neutrons, et, tws @@ -396,4 +398,23 @@ MODULE mo_optimization_types this%averageCounter = this%averageCounter + 1 end subroutine optidata_sim_average_add + subroutine sim_data_destructor(this) + type(sim_data_t), intent(inout) :: this + + if (allocated(this%variables)) deallocate(this%variables) + + end subroutine sim_data_destructor + + subroutine sim_var_destructor(this) + type(sim_var_t), intent(inout) :: this + + if (allocated(this%name)) deallocate(this%name) + if (allocated(this%data_1d)) deallocate(this%data_1d) + if (allocated(this%data_2d)) deallocate(this%data_2d) + if (allocated(this%data_3d)) deallocate(this%data_3d) + if (allocated(this%data_4d)) deallocate(this%data_4d) + if (allocated(this%data_5d)) deallocate(this%data_5d) + + end subroutine sim_var_destructor + END MODULE mo_optimization_types