@@ -17,7 +17,9 @@ module fabm_types
1717 type_universal_standard_variable = > type_universal_standard_variable
1818 use fabm_properties
1919 use fabm_driver, only: driver
20- use yaml_settings
20+
21+ use yaml_settings, yaml_default_minimum_real = > default_minimum_real, yaml_default_maximum_real = > default_maximum_real
22+ use yaml_types, only: yaml_rk = > real_kind
2123
2224 implicit none
2325
@@ -516,10 +518,11 @@ module fabm_types
516518
517519 ! Procedures that may be used to query parameter values during initialization.
518520 procedure :: get_real_parameter
521+ procedure :: get_double_parameter
519522 procedure :: get_integer_parameter
520523 procedure :: get_logical_parameter
521524 procedure :: get_string_parameter
522- generic :: get_parameter = > get_real_parameter, get_integer_parameter, get_logical_parameter, get_string_parameter
525+ generic :: get_parameter = > get_real_parameter,get_double_parameter, get_integer_parameter,get_logical_parameter,get_string_parameter
523526
524527 procedure :: set_variable_property_real
525528 procedure :: set_variable_property_integer
@@ -2611,10 +2614,36 @@ function get_effective_display(display, user_created) result(display_)
26112614
26122615 subroutine get_real_parameter (self , value , name , units , long_name , default , scale_factor , minimum , maximum , display )
26132616 class (type_base_model), intent (inout ), target :: self
2614- real (rk), intent (inout ), target :: value
2617+ real (kind ( 1.0e0 )), intent (inout ), target :: value
26152618 character (len=* ), intent (in ) :: name
26162619 character (len=* ), intent (in ), optional :: units, long_name
2617- real (rk), intent (in ), optional :: default, scale_factor, minimum, maximum
2620+ real (kind (1.0e0 )), intent (in ), optional :: default, scale_factor, minimum, maximum
2621+ integer , intent (in ), optional :: display
2622+
2623+ real (yaml_rk) :: scale_factor_, minimum_, maximum_
2624+
2625+ minimum_ = yaml_default_minimum_real
2626+ maximum_ = yaml_default_maximum_real
2627+ scale_factor_ = 1.0_yaml_rk
2628+ if (present (minimum)) minimum_ = minimum
2629+ if (present (maximum)) maximum_ = maximum
2630+ if (present (scale_factor)) scale_factor_ = scale_factor
2631+
2632+ if (present (default)) then
2633+ value = self% parameters% get_real(name, get_effective_string(long_name, name), get_effective_string(units, ' ' ), &
2634+ default= real (default, yaml_rk), minimum= minimum_, maximum= maximum_, scale_factor= scale_factor_, display= get_effective_display(display, self% user_created))
2635+ else
2636+ value = self% parameters% get_real(name, get_effective_string(long_name, name), get_effective_string(units, ' ' ), &
2637+ minimum= minimum_, maximum= maximum_, scale_factor= scale_factor_, display= get_effective_display(display, self% user_created))
2638+ end if
2639+ end subroutine get_real_parameter
2640+
2641+ subroutine get_double_parameter (self , value , name , units , long_name , default , scale_factor , minimum , maximum , display )
2642+ class (type_base_model), intent (inout ), target :: self
2643+ real (kind (1.0d0 )), intent (inout ), target :: value
2644+ character (len=* ), intent (in ) :: name
2645+ character (len=* ), intent (in ), optional :: units, long_name
2646+ real (kind (1.0d0 )), intent (in ), optional :: default, scale_factor, minimum, maximum
26182647 integer , intent (in ), optional :: display
26192648
26202649 if (fabm_parameter_pointers) then
@@ -2624,7 +2653,7 @@ subroutine get_real_parameter(self, value, name, units, long_name, default, scal
26242653 value = self% parameters% get_real(name, get_effective_string(long_name, name), get_effective_string(units, ' ' ), &
26252654 default, minimum, maximum, scale_factor, display= get_effective_display(display, self% user_created))
26262655 end if
2627- end subroutine get_real_parameter
2656+ end subroutine get_double_parameter
26282657
26292658 subroutine get_integer_parameter (self , value , name , units , long_name , default , minimum , maximum , options , display )
26302659 class (type_base_model), intent (inout ), target :: self
@@ -3260,7 +3289,7 @@ subroutine settings_set_real(self, key, value)
32603289
32613290 real (rk) :: final_value
32623291
3263- final_value = self% get_real(key, key, ' ' , default= value)
3292+ final_value = self% get_real(key, key, ' ' , default= real ( value, yaml_rk) )
32643293 end subroutine settings_set_real
32653294
32663295 subroutine settings_set_integer (self , key , value )
0 commit comments