diff --git a/src/mo_cost.f90 b/src/mo_cost.f90 index 0df50f81875e15229a4b4d91b1cafc77c2286569..8c5d483a1997cea645e23b05e6202f320871c871 100644 --- a/src/mo_cost.f90 +++ b/src/mo_cost.f90 @@ -236,15 +236,15 @@ CONTAINS real(dp), optional, intent(out) :: arg3 real(dp) :: cost_objective - type(sim_data_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: sim_data type(config_t) :: config REAL(DP), DIMENSION(6,2) :: meas REAL(DP), DIMENSION(6) :: calc config%parameters = parameterset - allocate(opti_sim(1)) - call opti_sim(1)%add(name='et', ndim=2_i4) - call eval(config, opti_sim) + allocate(sim_data(1)) + call sim_data(1)%add(name='et', ndim=2_i4) + call eval(config, sim_data) ! function: f(x) = ax^3 + bx^2 + cx + d ! measurements: (0.5,5.725), (1.0, 21.7), (1.5, 49.175), (2.0, 88.9), (2.5, 141.625), (3.0, 208.1) @@ -258,7 +258,7 @@ CONTAINS ! MAE Mean Absolute Error cost_objective = sum(abs( meas(:,2)-calc(:) ))/size(meas,1) - deallocate(opti_sim) + deallocate(sim_data) RETURN END FUNCTION cost_objective diff --git a/src/mo_likelihood.f90 b/src/mo_likelihood.f90 index 895a9f38f4fa957826571714e159141d8109f7d0..463711bf403d1aac60028a87512d3db11afab2fd 100644 --- a/src/mo_likelihood.f90 +++ b/src/mo_likelihood.f90 @@ -59,18 +59,18 @@ CONTAINS ! local REAL(DP), DIMENSION(size(meas,1)) :: errors real(dp), pointer :: runoff(:, :) - type(sim_data_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: sim_data type(config_t) :: config config%parameters = paraset - allocate(opti_sim(1)) - call opti_sim(1)%add(name="runoff", ndim=2_i4) - call eval(config, opti_sim=opti_sim) - call opti_sim(1)%set_pointer(name="runoff", ptr=runoff) + allocate(sim_data(1)) + call sim_data(1)%add(name="runoff", ndim=2_i4) + call eval(config, sim_data=sim_data) + call sim_data(1)%set_pointer(name="runoff", ptr=runoff) errors(:) = runoff(:,1)-data() likelihood_dp = exp(-0.5_dp * sum( errors(:) * errors(:) / stddev_global**2 )) - deallocate(opti_sim) + deallocate(sim_data) end function likelihood_dp @@ -89,18 +89,18 @@ CONTAINS ! local REAL(DP), DIMENSION(size(meas,1)) :: errors real(dp), pointer :: runoff(:, :) - type(sim_data_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: sim_data type(config_t) :: config config%parameters = paraset - allocate(opti_sim(1)) - call opti_sim(1)%add(name="runoff", ndim=2_i4) - call eval(config, opti_sim=opti_sim) - call opti_sim(1)%set_pointer(name="runoff", ptr=runoff) + allocate(sim_data(1)) + call sim_data(1)%add(name="runoff", ndim=2_i4) + call eval(config, sim_data=sim_data) + call sim_data(1)%set_pointer(name="runoff", ptr=runoff) errors(:) = runoff(:,1)-data() loglikelihood_dp = -0.5_dp * sum( errors(:) * errors(:) / stddev_global**2 ) - deallocate(opti_sim) + deallocate(sim_data) end function loglikelihood_dp @@ -120,18 +120,18 @@ CONTAINS REAL(DP), DIMENSION(size(meas,1)) :: errors REAL(DP) :: stddev_err real(dp), pointer :: runoff(:, :) - type(sim_data_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: sim_data type(config_t) :: config config%parameters = paraset - allocate(opti_sim(1)) - call opti_sim(1)%add(name="runoff", ndim=2_i4) - call eval(config, opti_sim=opti_sim) - call opti_sim(1)%set_pointer(name="runoff", ptr=runoff) + allocate(sim_data(1)) + call sim_data(1)%add(name="runoff", ndim=2_i4) + call eval(config, sim_data=sim_data) + call sim_data(1)%set_pointer(name="runoff", ptr=runoff) errors(:) = runoff(:,1)-data() likelihood_stddev_dp = exp(-0.5_dp * sum( errors(:) * errors(:) / stddev_in**2 )) - deallocate(opti_sim) + deallocate(sim_data) ! optional out stddev_err = stddev(errors) @@ -160,18 +160,18 @@ CONTAINS REAL(DP), DIMENSION(size(meas,1)) :: errors REAL(DP) :: stddev_err real(dp), pointer :: runoff(:, :) - type(sim_data_t), dimension(:), pointer :: opti_sim + type(sim_data_t), dimension(:), pointer :: sim_data type(config_t) :: config config%parameters = paraset - allocate(opti_sim(1)) - call opti_sim(1)%add(name="runoff", ndim=2_i4) - call eval(config, opti_sim=opti_sim) - call opti_sim(1)%set_pointer(name="runoff", ptr=runoff) + allocate(sim_data(1)) + call sim_data(1)%add(name="runoff", ndim=2_i4) + call eval(config, sim_data=sim_data) + call sim_data(1)%set_pointer(name="runoff", ptr=runoff) errors(:) = runoff(:,1)-data() loglikelihood_stddev_dp = -0.5_dp * sum( errors(:) * errors(:) / stddev_in**2 ) - deallocate(opti_sim) + deallocate(sim_data) ! optional out stddev_err = stddev(errors) @@ -186,7 +186,7 @@ CONTAINS ! ------------------------------- !> \brief A Model: p1*x^2 + p2*x + p3 - subroutine model_dp(config, opti_sim) + subroutine model_dp(config, sim_data) use mo_kind, only: dp use mo_optimization_types, only : sim_data_t, config_t @@ -194,7 +194,7 @@ CONTAINS !! !$ USE omp_lib, only: OMP_GET_THREAD_NUM type(config_t), intent(in) :: config - type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: opti_sim + type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: sim_data real(dp), pointer :: runoff(:, :) integer(i4) :: i, n @@ -203,11 +203,11 @@ CONTAINS n = size(meas,1) - if (size(opti_sim) /= 1) call error_message('model_dp: does not support opti_sim data with more than 1 dimension.') + if (size(sim_data) /= 1) call error_message('model_dp: does not support sim_data data with more than 1 dimension.') - if (opti_sim(1)%has('runoff')) then - call opti_sim(1)%allocate(name="runoff", data_shape=(/n, 1/)) - call opti_sim(1)%set_pointer(name="runoff", ptr=runoff) + if (sim_data(1)%has('runoff')) then + call sim_data(1)%allocate(name="runoff", data_shape=(/n, 1/)) + call sim_data(1)%set_pointer(name="runoff", ptr=runoff) end if !! !$ is_thread = OMP_GET_THREAD_NUM() diff --git a/src/mo_opt_functions.f90 b/src/mo_opt_functions.f90 index 7c4e8550f1d397791cb58b7359399995da12a5d1..103159d5ab7dbdc5fe7ae8360fee75052969fece 100644 --- a/src/mo_opt_functions.f90 +++ b/src/mo_opt_functions.f90 @@ -5639,20 +5639,20 @@ CONTAINS real(dp), parameter :: b = 0.2_dp real(dp), parameter :: c = 2.0_dp*pi_dp real(dp) :: s1, s2 - type(sim_data_t), pointer, dimension(:) :: opti_sim + type(sim_data_t), pointer, dimension(:) :: sim_data type(config_t) :: config - allocate(opti_sim(1)) + allocate(sim_data(1)) config%parameters = parameterset - call opti_sim(1)%add(name='et', ndim=2_i4) - call eval(config, opti_sim) + call sim_data(1)%add(name='et', ndim=2_i4) + call eval(config, sim_data) n = size(parameterset) s1 = sum(parameterset**2) s2 = sum(cos(c*parameterset)) ackley_objective = -a * exp(-b*sqrt(1.0_dp/real(n,dp)*s1)) - exp(1.0_dp/real(n,dp)*s2) + a + exp(1.0_dp) - deallocate(opti_sim) + deallocate(sim_data) end function ackley_objective @@ -5673,13 +5673,13 @@ CONTAINS integer(i4) :: nopt integer(i4) :: j real(dp) :: d, u1, u2 - type(sim_data_t), pointer, dimension(:) :: opti_sim + type(sim_data_t), pointer, dimension(:) :: sim_data type(config_t) :: config config%parameters = parameterset - allocate(opti_sim(1)) - call opti_sim(1)%add(name='et', ndim=2_i4) - call eval(config, opti_sim) + allocate(sim_data(1)) + call sim_data(1)%add(name='et', ndim=2_i4) + call eval(config, sim_data) nopt = size(parameterset) if (nopt .eq. 2) then @@ -5694,25 +5694,25 @@ CONTAINS end do griewank_objective = u1 - u2 + 1.0_dp - deallocate(opti_sim) + deallocate(sim_data) ! end function griewank_objective - subroutine eval_dummy(config, opti_sim) + subroutine eval_dummy(config, sim_data) use mo_kind, only : dp use mo_optimization_types, only : sim_data_t, config_t implicit none type(config_t), intent(in) :: config - type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: opti_sim + type(sim_data_t), dimension(:), pointer, optional, intent(inout) :: sim_data real(dp), dimension(:, :), pointer :: dummyDataPtr_2d real(dp), dimension(:), pointer :: dummyDataPtr_1d integer(i4) :: iDomain, nDomains - nDomains = size(opti_sim) + nDomains = size(sim_data) allocate(dummyDataPtr_2d(1, 1)) allocate(dummyDataPtr_1d(1)) @@ -5720,79 +5720,79 @@ CONTAINS dummyDataPtr_1d = 0.0_dp do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('et')) then - call opti_sim(iDomain)%allocate(name="et", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="et", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('et')) then + call sim_data(iDomain)%allocate(name="et", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="et", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('neutrons')) then - call opti_sim(iDomain)%allocate(name="neutrons", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="neutrons", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('neutrons')) then + call sim_data(iDomain)%allocate(name="neutrons", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="neutrons", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('tws')) then - call opti_sim(iDomain)%allocate(name="tws", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="tws", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('tws')) then + call sim_data(iDomain)%allocate(name="tws", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="tws", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('sm')) then - call opti_sim(iDomain)%allocate(name="sm", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="sm", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('sm')) then + call sim_data(iDomain)%allocate(name="sm", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="sm", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('runoff')) then - call opti_sim(iDomain)%allocate(name="runoff", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="runoff", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('runoff')) then + call sim_data(iDomain)%allocate(name="runoff", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="runoff", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('BFI')) then - call opti_sim(iDomain)%allocate(name="BFI", data_shape=(/1/)) - call opti_sim(iDomain)%set_pointer(name="BFI", ptr=dummyDataPtr_1d) + if (sim_data(iDomain)%has('BFI')) then + call sim_data(iDomain)%allocate(name="BFI", data_shape=(/1/)) + call sim_data(iDomain)%set_pointer(name="BFI", ptr=dummyDataPtr_1d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('lake_level')) then - call opti_sim(iDomain)%allocate(name="lake_level", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="lake_level", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('lake_level')) then + call sim_data(iDomain)%allocate(name="lake_level", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="lake_level", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('lake_volume')) then - call opti_sim(iDomain)%allocate(name="lake_volume", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="lake_volume", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('lake_volume')) then + call sim_data(iDomain)%allocate(name="lake_volume", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="lake_volume", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('lake_area')) then - call opti_sim(iDomain)%allocate(name="lake_area", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="lake_area", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('lake_area')) then + call sim_data(iDomain)%allocate(name="lake_area", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="lake_area", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('lake_spill')) then - call opti_sim(iDomain)%allocate(name="lake_spill", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="lake_spill", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('lake_spill')) then + call sim_data(iDomain)%allocate(name="lake_spill", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="lake_spill", ptr=dummyDataPtr_2d) end if end do do iDomain = 1 , nDomains - if (opti_sim(iDomain)%has('lake_outflow')) then - call opti_sim(iDomain)%allocate(name="lake_outflow", data_shape=(/1, 1/)) - call opti_sim(iDomain)%set_pointer(name="lake_outflow", ptr=dummyDataPtr_2d) + if (sim_data(iDomain)%has('lake_outflow')) then + call sim_data(iDomain)%allocate(name="lake_outflow", data_shape=(/1, 1/)) + call sim_data(iDomain)%set_pointer(name="lake_outflow", ptr=dummyDataPtr_2d) end if end do