diff --git a/src/mo_cost.f90 b/src/mo_cost.f90 index d9bbf65f289fd16fdb4418a78fe5dc359568002b..232f6edd1b6e1b59fb593862e2ebcc891ea5a7b3 100644 --- a/src/mo_cost.f90 +++ b/src/mo_cost.f90 @@ -225,7 +225,7 @@ CONTAINS use mo_kind, only: dp, i4 use mo_optimization_utils, only: eval_interface - use mo_optimization_types, only : opti_sim_t, config_t + use mo_optimization_types, only : sim_data_t, config_t implicit none @@ -236,7 +236,7 @@ CONTAINS real(dp), optional, intent(out) :: arg3 real(dp) :: cost_objective - type(opti_sim_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: opti_sim type(config_t) :: config REAL(DP), DIMENSION(6,2) :: meas REAL(DP), DIMENSION(6) :: calc diff --git a/src/mo_likelihood.f90 b/src/mo_likelihood.f90 index d76c187cca84829b3c8859af988051dc96847cc9..3f1c47553775707c56db87bc1d6a2a96a4ac5b26 100644 --- a/src/mo_likelihood.f90 +++ b/src/mo_likelihood.f90 @@ -47,7 +47,7 @@ CONTAINS ! ------------------------------- !> \brief A Likelihood function: "real" likelihood (sigma is an error model or given) function likelihood_dp(paraset, eval, stddev_in, stddev_new, likeli_new) - use mo_optimization_types, only : opti_sim_t, config_t + use mo_optimization_types, only : sim_data_t, config_t REAL(DP), DIMENSION(:), INTENT(IN) :: paraset ! parameter set procedure(eval_interface), INTENT(IN), pointer :: eval REAL(DP), INTENT(IN), optional :: stddev_in ! standard deviation of data @@ -59,7 +59,7 @@ CONTAINS ! local REAL(DP), DIMENSION(size(meas,1)) :: errors real(dp), pointer :: runoff(:, :) - type(opti_sim_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: opti_sim type(config_t) :: config config%parameters = paraset @@ -77,7 +77,7 @@ CONTAINS ! ------------------------------- !> \brief A Log-Likelihood function: "real" likelihood (sigma is an error model or given) function loglikelihood_dp(paraset, eval, stddev_in, stddev_new, likeli_new) - use mo_optimization_types, only : opti_sim_t, config_t + use mo_optimization_types, only : sim_data_t, config_t REAL(DP), DIMENSION(:), INTENT(IN) :: paraset ! parameter set procedure(eval_interface), INTENT(IN), pointer :: eval REAL(DP), INTENT(IN), optional :: stddev_in ! standard deviation of data @@ -89,7 +89,7 @@ CONTAINS ! local REAL(DP), DIMENSION(size(meas,1)) :: errors real(dp), pointer :: runoff(:, :) - type(opti_sim_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: opti_sim type(config_t) :: config config%parameters = paraset @@ -107,7 +107,7 @@ CONTAINS ! ------------------------------- !> \brief A Likelihood function: "faked" likelihood (sigma is computed by obs vs model) function likelihood_stddev_dp(paraset, eval, stddev_in, stddev_new, likeli_new) - use mo_optimization_types, only : opti_sim_t, config_t + use mo_optimization_types, only : sim_data_t, config_t REAL(DP), DIMENSION(:), INTENT(IN) :: paraset ! parameter set procedure(eval_interface), INTENT(IN), pointer :: eval REAL(DP), INTENT(IN), optional :: stddev_in ! standard deviation of data @@ -120,7 +120,7 @@ CONTAINS REAL(DP), DIMENSION(size(meas,1)) :: errors REAL(DP) :: stddev_err real(dp), pointer :: runoff(:, :) - type(opti_sim_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: opti_sim type(config_t) :: config config%parameters = paraset @@ -147,7 +147,7 @@ CONTAINS ! ------------------------------- !> \brief A Log-Likelihood_stddev function: "faked" likelihood (sigma is computed by obs vs model) function loglikelihood_stddev_dp(paraset, eval, stddev_in, stddev_new, likeli_new) - use mo_optimization_types, only : opti_sim_t, config_t + use mo_optimization_types, only : sim_data_t, config_t REAL(DP), DIMENSION(:), INTENT(IN) :: paraset ! parameter set procedure(eval_interface), INTENT(IN), pointer :: eval REAL(DP), INTENT(IN), optional :: stddev_in ! standard deviation of data @@ -160,7 +160,7 @@ CONTAINS REAL(DP), DIMENSION(size(meas,1)) :: errors REAL(DP) :: stddev_err real(dp), pointer :: runoff(:, :) - type(opti_sim_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: opti_sim type(config_t) :: config config%parameters = paraset @@ -189,11 +189,11 @@ CONTAINS subroutine model_dp(config, opti_sim) use mo_kind, only: dp - use mo_optimization_types, only : opti_sim_t, config_t + use mo_optimization_types, only : sim_data_t, config_t !! !$ USE omp_lib, only: OMP_GET_THREAD_NUM type(config_t), intent(in) :: config - type(opti_sim_t), dimension(:), pointer, optional, intent(inout) :: opti_sim + type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: opti_sim real(dp), pointer :: runoff(:, :) integer(i4) :: i, n @@ -222,7 +222,7 @@ CONTAINS end do !$OMP end do !$OMP end parallel - + end subroutine model_dp function data_dp() diff --git a/src/mo_opt_functions.f90 b/src/mo_opt_functions.f90 index 6a9fb664fd2d1ff0069a1560c81096da2a152c04..57b709cea9b1286152bf149a1348a29240a5145e 100644 --- a/src/mo_opt_functions.f90 +++ b/src/mo_opt_functions.f90 @@ -5623,7 +5623,7 @@ CONTAINS function ackley_objective(parameterset, eval, arg1, arg2, arg3) use mo_constants, only: pi_dp - use mo_optimization_types, only : opti_sim_t, config_t + use mo_optimization_types, only : sim_data_t, config_t implicit none @@ -5639,7 +5639,7 @@ CONTAINS real(dp), parameter :: b = 0.2_dp real(dp), parameter :: c = 2.0_dp*pi_dp real(dp) :: s1, s2 - type(opti_sim_t), pointer, dimension(:) :: opti_sim + type(sim_data_t), pointer, dimension(:) :: opti_sim type(config_t) :: config allocate(opti_sim(1)) @@ -5659,7 +5659,7 @@ CONTAINS function griewank_objective(parameterset, eval, arg1, arg2, arg3) use mo_kind, only: i4, dp - use mo_optimization_types, only : opti_sim_t, config_t + use mo_optimization_types, only : sim_data_t, config_t implicit none @@ -5673,7 +5673,7 @@ CONTAINS integer(i4) :: nopt integer(i4) :: j real(dp) :: d, u1, u2 - type(opti_sim_t), pointer, dimension(:) :: opti_sim + type(sim_data_t), pointer, dimension(:) :: opti_sim type(config_t) :: config config%parameters = parameterset @@ -5701,12 +5701,12 @@ CONTAINS subroutine eval_dummy(config, opti_sim) use mo_kind, only : dp - use mo_optimization_types, only : opti_sim_t, config_t, optidata + use mo_optimization_types, only : sim_data_t, config_t, optidata implicit none type(config_t), intent(in) :: config - type(opti_sim_t), dimension(:), pointer, optional, intent(inout) :: opti_sim + type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: opti_sim real(dp), dimension(:, :), pointer :: dummyDataPtr_2d real(dp), dimension(:), pointer :: dummyDataPtr_1d diff --git a/src/mo_optimization_types.f90 b/src/mo_optimization_types.f90 index a7f9031a1e4ef548216d1cc6c066c3170bcdf51e..915aff2cacb17f77b4ff05a7b7934737b90661b1 100644 --- a/src/mo_optimization_types.f90 +++ b/src/mo_optimization_types.f90 @@ -12,7 +12,7 @@ MODULE mo_optimization_types IMPLICIT NONE - public :: optidata, optidata_sim, config_t, opti_sim_t + public :: optidata, optidata_sim, config_t, sim_data_t private @@ -38,12 +38,8 @@ MODULE mo_optimization_types ! ToDo: documentation like mo_cli -! type opti_sim_t -! type(optidata_sim), target, dimension(:), allocatable :: data -! character(256) :: name -! end type opti_sim_t - type opti_sim_t - type(opti_sim_single_t), dimension(:), allocatable :: opti_vars + type sim_data_t + type(sim_var_t), dimension(:), allocatable :: variables contains procedure :: has => opti_sim_t_has procedure :: add => opti_sim_t_add @@ -63,21 +59,21 @@ MODULE mo_optimization_types opti_sim_t_set_pointer_3d, opti_sim_t_set_pointer_4d, opti_sim_t_set_pointer_5d generic :: allocate => opti_sim_t_allocate_1d, opti_sim_t_allocate_2d, & opti_sim_t_allocate_3d, opti_sim_t_allocate_4d, opti_sim_t_allocate_5d - end type opti_sim_t + end type sim_data_t - type opti_sim_single_t + type sim_var_t real(dp), dimension(:), allocatable :: data_1d real(dp), dimension(:, :), allocatable :: data_2d real(dp), dimension(:, :, :), allocatable :: data_3d real(dp), dimension(:, :, :, :), allocatable :: data_4d real(dp), dimension(:, :, :, :, :), allocatable :: data_5d character(256) :: name - integer(i4) :: dimen + integer(i4) :: ndim integer(i4) :: time_avg_selector = 1_i4 !< time averaging: -3 yearly, -2 monthly, -1 daily, !< 0 total, n every n timestep ! contains ! procedure :: add => opti_sim_single_t_add - end type opti_sim_single_t + end type sim_var_t !> \brief optional data, such as sm, neutrons, et, tws @@ -114,72 +110,72 @@ MODULE mo_optimization_types ! ToDo: When to charater(*) and character(256)? pure logical function opti_sim_t_has(this, name) - class(opti_sim_t), intent(in) :: this + class(sim_data_t), intent(in) :: this character(*), intent(in) :: name integer(i4) :: i opti_sim_t_has = .false. - do i = 1, size(this%opti_vars) - if (trim(this%opti_vars(i)%name) == trim(name)) opti_sim_t_has = .true. + do i = 1, size(this%variables) + if (trim(this%variables(i)%name) == trim(name)) opti_sim_t_has = .true. end do end function opti_sim_t_has subroutine opti_sim_t_add(this, name, dim, time_avg_selector) - class(opti_sim_t), intent(inout) :: this + class(sim_data_t), intent(inout) :: this character(*), intent(in) :: name integer(i4), intent(in) :: dim integer(i4), optional, intent(in) :: time_avg_selector - type(opti_sim_single_t) :: add_data + type(sim_var_t) :: add_data ! ToDo: Why name in type 256 and in input var *? add_data%name = name - add_data%dimen = dim + add_data%ndim = dim if (present(time_avg_selector)) add_data%time_avg_selector = time_avg_selector ! ToDo: is the if case needed? ! Tested: the else case works - if (allocated(this%opti_vars)) then - this%opti_vars = [this%opti_vars, add_data] + if (allocated(this%variables)) then + this%variables = [this%variables, add_data] else - allocate(this%opti_vars(1)) - this%opti_vars(1)=add_data + allocate(this%variables(1)) + this%variables(1)=add_data end if end subroutine opti_sim_t_add subroutine opti_sim_t_allocate_1d(this, name, dim1) - class(opti_sim_t), target, intent(inout) :: this + class(sim_data_t), target, intent(inout) :: this character(*), intent(in) :: name integer(i4), intent(in) :: dim1 integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - allocate(this%opti_vars(i)%data_1d(dim1)) + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + allocate(this%variables(i)%data_1d(dim1)) end if end do end subroutine opti_sim_t_allocate_1d subroutine opti_sim_t_allocate_2d(this, name, dim1, dim2) - class(opti_sim_t), target, intent(inout) :: this + class(sim_data_t), target, intent(inout) :: this character(*), intent(in) :: name integer(i4), intent(in) :: dim1 integer(i4), intent(in) :: dim2 integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - allocate(this%opti_vars(i)%data_2d(dim1, dim2)) + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + allocate(this%variables(i)%data_2d(dim1, dim2)) end if end do end subroutine opti_sim_t_allocate_2d subroutine opti_sim_t_allocate_3d(this, name, dim1, dim2, dim3) - class(opti_sim_t), target, intent(inout) :: this + class(sim_data_t), target, intent(inout) :: this character(*), intent(in) :: name integer(i4), intent(in) :: dim1 integer(i4), intent(in) :: dim2 @@ -187,15 +183,15 @@ MODULE mo_optimization_types integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - allocate(this%opti_vars(i)%data_3d(dim1, dim2, dim3)) + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + allocate(this%variables(i)%data_3d(dim1, dim2, dim3)) end if end do end subroutine opti_sim_t_allocate_3d subroutine opti_sim_t_allocate_4d(this, name, dim1, dim2, dim3, dim4) - class(opti_sim_t), target, intent(inout) :: this + class(sim_data_t), target, intent(inout) :: this character(*), intent(in) :: name integer(i4), intent(in) :: dim1 integer(i4), intent(in) :: dim2 @@ -204,15 +200,15 @@ MODULE mo_optimization_types integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - allocate(this%opti_vars(i)%data_4d(dim1, dim2, dim3, dim4)) + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + allocate(this%variables(i)%data_4d(dim1, dim2, dim3, dim4)) end if end do end subroutine opti_sim_t_allocate_4d subroutine opti_sim_t_allocate_5d(this, name, dim1, dim2, dim3, dim4, dim5) - class(opti_sim_t), target, intent(inout) :: this + class(sim_data_t), target, intent(inout) :: this character(*), intent(in) :: name integer(i4), intent(in) :: dim1 integer(i4), intent(in) :: dim2 @@ -222,9 +218,9 @@ MODULE mo_optimization_types integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - allocate(this%opti_vars(i)%data_5d(dim1, dim2, dim3, dim4, dim5)) + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + allocate(this%variables(i)%data_5d(dim1, dim2, dim3, dim4, dim5)) end if end do end subroutine opti_sim_t_allocate_5d @@ -232,7 +228,7 @@ MODULE mo_optimization_types ! ToDo: generate with fypp ! ToDo: switch ptr with name subroutine opti_sim_t_set_pointer_1d(this, ptr, name) - class(opti_sim_t), target, intent(in) :: this + class(sim_data_t), target, intent(in) :: this real(dp), dimension(:), pointer, intent(inout) :: ptr character(*), intent(in) :: name @@ -240,66 +236,66 @@ MODULE mo_optimization_types ! ToDo: loop -> subroutine get_id ! i = this%get_id(name) - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - ptr => this%opti_vars(i)%data_1d + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + ptr => this%variables(i)%data_1d ! ToDo: exit end if end do end subroutine opti_sim_t_set_pointer_1d subroutine opti_sim_t_set_pointer_2d(this, ptr, name) - class(opti_sim_t), target, intent(in) :: this + class(sim_data_t), target, intent(in) :: this real(dp), dimension(:,:), pointer :: ptr character(*), intent(in) :: name integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - ptr => this%opti_vars(i)%data_2d + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + ptr => this%variables(i)%data_2d end if end do end subroutine opti_sim_t_set_pointer_2d subroutine opti_sim_t_set_pointer_3d(this, ptr, name) - class(opti_sim_t), target, intent(in) :: this + class(sim_data_t), target, intent(in) :: this real(dp), dimension(:,:,:), pointer, intent(inout) :: ptr character(*), intent(in) :: name integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - ptr => this%opti_vars(i)%data_3d + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + ptr => this%variables(i)%data_3d end if end do end subroutine opti_sim_t_set_pointer_3d subroutine opti_sim_t_set_pointer_4d(this, ptr, name) - class(opti_sim_t), target, intent(in) :: this + class(sim_data_t), target, intent(in) :: this real(dp), dimension(:,:,:,:), pointer, intent(inout) :: ptr character(*), intent(in) :: name integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - ptr => this%opti_vars(i)%data_4d + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + ptr => this%variables(i)%data_4d end if end do end subroutine opti_sim_t_set_pointer_4d subroutine opti_sim_t_set_pointer_5d(this, ptr, name) - class(opti_sim_t), target, intent(in) :: this + class(sim_data_t), target, intent(in) :: this real(dp), dimension(:,:,:,:,:), pointer, intent(inout) :: ptr character(*), intent(in) :: name integer(i4) :: i - do i = 1, size(this%opti_vars) - if (this%opti_vars(i)%name == name) then - ptr => this%opti_vars(i)%data_5d + do i = 1, size(this%variables) + if (this%variables(i)%name == name) then + ptr => this%variables(i)%data_5d end if end do end subroutine opti_sim_t_set_pointer_5d diff --git a/src/mo_optimization_utils.f90 b/src/mo_optimization_utils.f90 index d7e48755af6cdbcb14282bbad2854c49cfbf9528..1de2dd4a3522699d8767143095de73194b0585b9 100644 --- a/src/mo_optimization_utils.f90 +++ b/src/mo_optimization_utils.f90 @@ -24,9 +24,9 @@ module mo_optimization_utils abstract interface subroutine eval_interface(config, opti_sim) - use mo_optimization_types, only : config_t, opti_sim_t + use mo_optimization_types, only : config_t, sim_data_t type(config_t), intent(in) :: config - type(opti_sim_t), dimension(:), pointer, optional, intent(inout) :: opti_sim + type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: opti_sim end subroutine end interface