From 6771e227e4db1099e28786d0b4b83310ed3d490a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= <mueller.seb@posteo.de> Date: Wed, 12 Mar 2025 11:16:39 +0100 Subject: [PATCH] opt_types: add more function docs --- src/mo_optimization_types.f90 | 91 +++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 37 deletions(-) diff --git a/src/mo_optimization_types.f90 b/src/mo_optimization_types.f90 index 6e95d7c..d138f1c 100644 --- a/src/mo_optimization_types.f90 +++ b/src/mo_optimization_types.f90 @@ -18,23 +18,22 @@ MODULE mo_optimization_types private + !> \class config_t + !> \brief Type to hold the configuration of an evaluation function. type config_t - real(dp), dimension(:), allocatable :: parameters - integer(i4), dimension(:), allocatable :: opti_indices + real(dp), dimension(:), allocatable :: parameters !< parameters for the evaluation function + integer(i4), dimension(:), allocatable :: opti_indices !< optimization indices for the evaluation function end type config_t -! ToDo: documentation like mo_cli - + !> \class sim_data_t + !> \brief Type to hold all the simulated data of an evaluation function. type sim_data_t - type(sim_var_t), dimension(:), allocatable :: variables + type(sim_var_t), dimension(:), allocatable :: variables !< array of all simulated variables contains procedure, public :: has => sim_data_has procedure, public :: add => sim_data_add procedure, public :: allocate => sim_data_allocate procedure, private :: get_id => sim_data_get_id - ! One could create these similar procedures - ! with fypp, for example if more dimensions are needed. - ! Or you could read about 'assumed rank'. procedure, private :: sim_data_set_pointer_1d procedure, private :: sim_data_set_pointer_2d procedure, private :: sim_data_set_pointer_3d @@ -44,6 +43,9 @@ MODULE mo_optimization_types sim_data_set_pointer_3d, sim_data_set_pointer_4d, sim_data_set_pointer_5d end type sim_data_t + !> \class sim_var_t + !> \brief Type to hold a single simulated variable of an evaluation function. + !> \details Can hold data with 1 to 5 dimensions. type sim_var_t real(dp), dimension(:), allocatable :: data_1d !< 1D data array real(dp), dimension(:, :), allocatable :: data_2d !< 2D data array @@ -58,30 +60,35 @@ MODULE mo_optimization_types contains + !> \brief Check given data shape and ndim for consistency. subroutine check_data_shape(data_shape, ndim) - integer(i4), dimension(:), intent(in) :: data_shape - integer(i4), intent(in) :: ndim + integer(i4), dimension(:), intent(in) :: data_shape !< data shape + integer(i4), intent(in) :: ndim !< number of dimensions if (size(data_shape) /= ndim) & call error_message( & 'check_data_shape: given data-shape (size ', num2str(size(data_shape)), ') not matching ndim (', num2str(ndim), ').') end subroutine check_data_shape + !> \brief Check given pointer dimension and ndim for consistency. subroutine check_pointer_ndim(pointer_ndim, data_ndim) - integer(i4), intent(in) :: pointer_ndim - integer(i4), intent(in) :: data_ndim + integer(i4), intent(in) :: pointer_ndim !< number of dimensions of the pointer + integer(i4), intent(in) :: data_ndim !< number of dimensions of the variable data if (pointer_ndim /= data_ndim) & call error_message("check_pointer_ndim: pointer is ", num2str(pointer_ndim),"D but data is ", num2str(data_ndim), "D.") end subroutine check_pointer_ndim + !> \brief Check if variable is allocated. subroutine check_allocated(var) - class(sim_var_t), intent(in) :: var + class(sim_var_t), intent(in) :: var !< variable if (.not. var%is_allocated()) & call error_message('check_allocated: data for "', var%name ,'" is not allocated') end subroutine check_allocated + !> \brief Check if variable is present in the simulated data. + !> \return .True. or .False. logical function sim_data_has(this, name) - class(sim_data_t), intent(in) :: this - character(*), intent(in) :: name + class(sim_data_t), intent(in) :: this !< simulated data + character(*), intent(in) :: name !< variable name sim_data_has = this%get_id(name) > 0 end function sim_data_has @@ -122,10 +129,11 @@ MODULE mo_optimization_types end subroutine sim_data_add + !> \brief Allocate variable data by name in the simulated data. subroutine sim_data_allocate(this, name, data_shape) - class(sim_data_t), target, intent(inout) :: this - character(*), intent(in) :: name - integer(i4), dimension(:), intent(in) :: data_shape + class(sim_data_t), target, intent(inout) :: this !< simulated data + character(*), intent(in) :: name !< variable name + integer(i4), dimension(:), intent(in) :: data_shape !< data shape integer(i4) :: i @@ -147,10 +155,12 @@ MODULE mo_optimization_types end select end subroutine sim_data_allocate + !> \brief Get variable ID in the simulated data array. + !> \return variable ID as integer integer(i4) function sim_data_get_id(this, name, raise) - class(sim_data_t), target, intent(in) :: this - character(*), intent(in) :: name - logical, intent(in), optional :: raise + class(sim_data_t), target, intent(in) :: this !< simulated data + character(*), intent(in) :: name !< variable name + logical, intent(in), optional :: raise !< flag to raise error if variable not present (default: .false.) logical :: raise_ integer(i4) :: i, max_i @@ -174,10 +184,11 @@ MODULE mo_optimization_types end function sim_data_get_id + !> \brief Set a 1D pointer to variable data by name from the simulated data. subroutine sim_data_set_pointer_1d(this, name, ptr) - class(sim_data_t), target, intent(in) :: this - character(*), intent(in) :: name - real(dp), dimension(:), pointer, intent(inout) :: ptr + class(sim_data_t), target, intent(in) :: this !< simulated data + character(*), intent(in) :: name !< variable name + real(dp), dimension(:), pointer, intent(inout) :: ptr !< pointer integer(i4) :: i @@ -187,10 +198,11 @@ MODULE mo_optimization_types ptr => this%variables(i)%data_1d end subroutine sim_data_set_pointer_1d + !> \brief Set a 2D pointer to variable data by name from the simulated data. subroutine sim_data_set_pointer_2d(this, name, ptr) - class(sim_data_t), target, intent(in) :: this - character(*), intent(in) :: name - real(dp), dimension(:,:), pointer :: ptr + class(sim_data_t), target, intent(in) :: this !< simulated data + character(*), intent(in) :: name !< variable name + real(dp), dimension(:,:), pointer :: ptr !< pointer integer(i4) :: i @@ -200,10 +212,11 @@ MODULE mo_optimization_types ptr => this%variables(i)%data_2d end subroutine sim_data_set_pointer_2d + !> \brief Set a 3D pointer to variable data by name from the simulated data. subroutine sim_data_set_pointer_3d(this, name, ptr) - class(sim_data_t), target, intent(in) :: this - character(*), intent(in) :: name - real(dp), dimension(:,:,:), pointer, intent(inout) :: ptr + class(sim_data_t), target, intent(in) :: this !< simulated data + character(*), intent(in) :: name !< variable name + real(dp), dimension(:,:,:), pointer, intent(inout) :: ptr !< pointer integer(i4) :: i @@ -213,10 +226,11 @@ MODULE mo_optimization_types ptr => this%variables(i)%data_3d end subroutine sim_data_set_pointer_3d + !> \brief Set a 4D pointer to variable data by name from the simulated data. subroutine sim_data_set_pointer_4d(this, name, ptr) - class(sim_data_t), target, intent(in) :: this - character(*), intent(in) :: name - real(dp), dimension(:,:,:,:), pointer, intent(inout) :: ptr + class(sim_data_t), target, intent(in) :: this !< simulated data + character(*), intent(in) :: name !< variable name + real(dp), dimension(:,:,:,:), pointer, intent(inout) :: ptr !< pointer integer(i4) :: i @@ -226,10 +240,11 @@ MODULE mo_optimization_types ptr => this%variables(i)%data_4d end subroutine sim_data_set_pointer_4d + !> \brief Set a 5D pointer to variable data by name from the simulated data. subroutine sim_data_set_pointer_5d(this, name, ptr) - class(sim_data_t), target, intent(in) :: this - character(*), intent(in) :: name - real(dp), dimension(:,:,:,:,:), pointer, intent(inout) :: ptr + class(sim_data_t), target, intent(in) :: this !< simulated data + character(*), intent(in) :: name !< variable name + real(dp), dimension(:,:,:,:,:), pointer, intent(inout) :: ptr !< pointer integer(i4) :: i @@ -239,8 +254,10 @@ MODULE mo_optimization_types ptr => this%variables(i)%data_5d end subroutine sim_data_set_pointer_5d + !> \brief Check if variable data is allocated. + !> \return .True. or .False. logical function sim_var_is_allocated(this) - class(sim_var_t), intent(in) :: this + class(sim_var_t), intent(in) :: this !< variable select case (this%ndim) case(1) sim_var_is_allocated = allocated(this%data_1d) -- GitLab