Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
ef1f354
add part_of_state flag
jornbr May 19, 2025
a807d4f
fix macro name in comment
jornbr May 31, 2025
61f5be4
separate _CONTIGUOUS_ and _HOST_CONTIGUOUS_
jornbr May 31, 2025
bf65201
correct #ifdef/ifndef
jornbr Jun 1, 2025
e79ac7b
Merge branch 'master' of github.com:fabm-model/fabm into part_of_state
jornbr Jun 13, 2025
a77d76a
expressions: use contiguous pointer in preparation for use of store
jornbr Jun 13, 2025
981bdc7
add time filters to fabm-builtin test case
jornbr Jun 13, 2025
a3fb83a
keep expression data in store
jornbr Jun 13, 2025
6a084f1
nullify link pointers
jornbr Jun 13, 2025
3ff7e84
set part_of_state for expression outputs
jornbr Jun 13, 2025
6e29b59
expressions: introduce global variable ids
jornbr Jun 14, 2025
89f6288
expressions: handle fill values through prefill_value attribute
jornbr Jun 14, 2025
55c9642
support for scalar diagnostics; use scalar diagnostics for type_horiz…
jornbr Jun 30, 2025
2765b78
expose part_of_state attribute through c/python apis
jornbr Jul 1, 2025
c675792
clean up util/algorithms notebooks
jornbr Jul 1, 2025
bd544d2
improve scalar names
jornbr Jul 1, 2025
2b039e8
couple vertical_integral input via link instead of name
jornbr Jul 1, 2025
dfb7c07
flang: try force-disable of vectorization
jornbr Jul 1, 2025
b982deb
annotate flag option
jornbr Jul 1, 2025
6b3bdba
refactor temporal mean to use stored scalars; centralize expression l…
jornbr Jul 2, 2025
9632ce0
restore part_of_state attribute
jornbr Jul 2, 2025
e23bfbe
implements: skip 0d routines
jornbr Jul 2, 2025
cf19e12
Merge branch 'master' of github.com:fabm-model/fabm into part_of_state
jornbr Jul 3, 2025
eed31de
fix 0d implements
jornbr Jul 3, 2025
d2cf8bb
further centralize expression logic
jornbr Jul 4, 2025
9aded5c
expression clean-up
jornbr Jul 4, 2025
3a08730
move global types to new fabm_global_types module
jornbr Jul 4, 2025
c28d8e6
refactor expressions
jornbr Jul 15, 2025
de28578
disable cache use for source_global
jornbr Jul 15, 2025
85f5892
complete support for detection of implemented routines
jornbr Jul 15, 2025
16feebf
bugfix
jornbr Jul 15, 2025
756fdc7
time_filter: fix dependencies
jornbr Jul 15, 2025
3a4bedd
fix cyclic dependency
jornbr Jul 16, 2025
fad9ee4
postpone implements() calls until after initialize
jornbr Jul 17, 2025
54fc837
limit implements calls
jornbr Jul 17, 2025
38f2575
fix source access
jornbr Jul 17, 2025
a9ce679
improve implements()
jornbr Jul 18, 2025
964559e
skip implements check for do_column
jornbr Jul 18, 2025
97fd89c
drop is_part_of_state procedure in favor of part_of_state member vari…
jornbr Aug 13, 2025
f784da9
clean-up
jornbr Aug 14, 2025
221654d
pyfabm: ensure backward compatibility with old fabm libraries
jornbr Aug 15, 2025
45fa055
simplification
jornbr Aug 15, 2025
5be18b8
intel compiler update
jornbr Aug 15, 2025
3cd61e5
fix intel compiler filenames
jornbr Aug 15, 2025
b27013b
intel compilers: revert to 2024 for ifort
jornbr Aug 15, 2025
2c61b2b
Merge branch 'master' of github.com:fabm-model/fabm into part_of_state
jornbr Aug 21, 2025
feb929e
flang: try activating -fno-vectorize
jornbr Sep 6, 2025
9cc3369
flang 21: try static runtime library for conda tests
jornbr Sep 8, 2025
bd4b493
flang tests: install flang-rt_win-64
jornbr Sep 8, 2025
9a68620
flang testing: add -fno-slp-vectorize
jornbr Sep 9, 2025
189c92f
bump to 3.0.0
jornbr Sep 15, 2025
f4b6513
Merge branch 'master' of github.com:fabm-model/fabm into part_of_state
jornbr Oct 2, 2025
d8cd44c
drop redundant calls to register_implemented_routines; add type_base_…
jornbr Oct 3, 2025
bc22491
sum: fix implements detection
jornbr Oct 3, 2025
9d12079
reduce act_as_state_variable use
jornbr Oct 6, 2025
c41d214
deprecate register_implemented_routines; whitespace tweaks
jornbr Oct 7, 2025
ad15b30
cosmetic tweaks
jornbr Oct 7, 2025
aaae085
Merge branch 'master' of github.com:fabm-model/fabm into part_of_state
jornbr Oct 18, 2025
cc28900
Merge branch 'master' of github.com:fabm-model/fabm into part_of_state
jornbr Nov 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
cmake_minimum_required(VERSION 3.13)

project(fabm
VERSION 2.1.6
VERSION 3.0.0
DESCRIPTION "Framework for Aquatic Biogeochemical Models"
HOMEPAGE_URL https://fabm.net
LANGUAGES Fortran
Expand Down
20 changes: 10 additions & 10 deletions include/fabm.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,9 @@
#else
! Interior procedures operate in 0D
! Interior slices may be 0D scalars or 1D arrays [the latter if the model has a vertical dimension]
# define _LOOP_BEGIN_EX_(cache)
# define _CONCURRENT_LOOP_BEGIN_EX_(cache)
# define _LOOP_END_
# define _LOOP_BEGIN_EX_(cache) if (cache%n /= 0) then
# define _CONCURRENT_LOOP_BEGIN_EX_(cache) if (cache%n /= 0) then
# define _LOOP_END_ end if
# ifdef _INTERIOR_IS_VECTORIZED_
! Interior slices are 1D arrays - we will operate on their first element (_I_=1)
# define _DECLARE_INTERIOR_INDICES_ integer,parameter :: _I_=1
Expand All @@ -134,9 +134,9 @@
#else
! Horizontal procedures operate in 0D
! Horizontal slices MUST be scalars; interior slices can be scalars or 1D arrays
# define _HORIZONTAL_LOOP_BEGIN_EX_(cache)
# define _CONCURRENT_HORIZONTAL_LOOP_BEGIN_EX_(cache)
# define _HORIZONTAL_LOOP_END_
# define _HORIZONTAL_LOOP_BEGIN_EX_(cache) if (cache%n /= 0) then
# define _CONCURRENT_HORIZONTAL_LOOP_BEGIN_EX_(cache) if (cache%n /= 0) then
# define _HORIZONTAL_LOOP_END_ end if
# ifdef _INTERIOR_IS_VECTORIZED_
! Interior slices are 1D arrays - we will operate on their first element (_I_=1)
# define _DECLARE_HORIZONTAL_INDICES_ integer,parameter :: _I_=1
Expand Down Expand Up @@ -186,11 +186,11 @@
! Vertical procedures operate in 0D
! Interior slices may scalars or 1D arrays [the latter if the model is vectorized over a horizontal dimension]
! Applies to all models without depth dimension; for instance, 0D box or model with i,j or i
# define _CONCURRENT_VERTICAL_LOOP_BEGIN_EX_(cache)
# define _VERTICAL_LOOP_END_
# define _CONCURRENT_VERTICAL_LOOP_BEGIN_EX_(cache) if (cache%n /= 0) then
# define _VERTICAL_LOOP_END_ end if
# define _VERTICAL_LOOP_EXIT_
# define _DOWNWARD_LOOP_BEGIN_
# define _UPWARD_LOOP_BEGIN_
# define _DOWNWARD_LOOP_BEGIN_ if (cache%n /= 0) then
# define _UPWARD_LOOP_BEGIN_ if (cache%n /= 0) then
# define _MOVE_TO_SURFACE_
# define _MOVE_TO_BOTTOM_
# ifdef _INTERIOR_IS_VECTORIZED_
Expand Down
16 changes: 13 additions & 3 deletions include/fabm_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -269,12 +269,18 @@
# define _IS_UNMASKED_(maskvalue) .true.
#endif

#if defined(_FABM_CONTIGUOUS_)&&!defined(_FABM_NO_CONTIGUOUS_)
#ifndef _FABM_NO_CONTIGUOUS_
# define _CONTIGUOUS_ ,contiguous
#else
# define _CONTIGUOUS_
#endif

#ifdef _FABM_CONTIGUOUS_
# define _HOST_CONTIGUOUS_ _CONTIGUOUS_
#else
# define _HOST_CONTIGUOUS_
#endif

#ifndef _BEGIN_OUTER_HORIZONTAL_LOOP_
# define _BEGIN_OUTER_HORIZONTAL_LOOP_
# define _END_OUTER_HORIZONTAL_LOOP_
Expand Down Expand Up @@ -326,7 +332,8 @@
#if _HORIZONTAL_DIMENSION_COUNT_>0
# define _INDEX_HORIZONTAL_LOCATION_ (_HORIZONTAL_LOCATION_)
# define _DIMENSION_GLOBAL_HORIZONTAL_ ,dimension(_HORIZONTAL_LOCATION_DIMENSIONS_)
# define _ATTRIBUTES_GLOBAL_HORIZONTAL_ _DIMENSION_GLOBAL_HORIZONTAL_ _CONTIGUOUS_
# define _ATTRIBUTES_GLOBAL_HORIZONTAL_ _DIMENSION_GLOBAL_HORIZONTAL_ _HOST_CONTIGUOUS_
# define _ATTRIBUTES_GLOBAL_HORIZONTAL_CONTIGUOUS_ _DIMENSION_GLOBAL_HORIZONTAL_ _CONTIGUOUS_
# define _ARG_HORIZONTAL_LOCATION_ _HORIZONTAL_LOCATION_
# define _POSTARG_HORIZONTAL_LOCATION_ ,_ARG_HORIZONTAL_LOCATION_
# define _POSTARG_HORIZONTAL_LOCATION_RANGE_ ,_HORIZONTAL_LOCATION_RANGE_
Expand All @@ -339,6 +346,7 @@
# define _INDEX_HORIZONTAL_LOCATION_
# define _DIMENSION_GLOBAL_HORIZONTAL_
# define _ATTRIBUTES_GLOBAL_HORIZONTAL_
# define _ATTRIBUTES_GLOBAL_HORIZONTAL_CONTIGUOUS_
# define _ARG_HORIZONTAL_LOCATION_
# define _POSTARG_HORIZONTAL_LOCATION_
# define _POSTARG_HORIZONTAL_LOCATION_RANGE_
Expand All @@ -356,7 +364,8 @@
#if _FABM_DIMENSION_COUNT_>0
# define _INDEX_LOCATION_ (_LOCATION_)
# define _DIMENSION_GLOBAL_ ,dimension(_LOCATION_DIMENSIONS_)
# define _ATTRIBUTES_GLOBAL_ _DIMENSION_GLOBAL_ _CONTIGUOUS_
# define _ATTRIBUTES_GLOBAL_ _DIMENSION_GLOBAL_ _HOST_CONTIGUOUS_
# define _ATTRIBUTES_GLOBAL_CONTIGUOUS_ _DIMENSION_GLOBAL_ _CONTIGUOUS_
# define _POSTARG_LOCATION_ ,_LOCATION_
# define _POSTARG_LOCATION_RANGE_ ,_LOCATION_RANGE_
# define _PREARG_LOCATION_ _LOCATION_,
Expand All @@ -368,6 +377,7 @@
# define _INDEX_LOCATION_
# define _DIMENSION_GLOBAL_
# define _ATTRIBUTES_GLOBAL_
# define _ATTRIBUTES_GLOBAL_CONTIGUOUS_
# define _POSTARG_LOCATION_
# define _POSTARG_LOCATION_RANGE_
# define _PREARG_LOCATION_
Expand Down
2 changes: 1 addition & 1 deletion include/fabm_version.h
Original file line number Diff line number Diff line change
@@ -1 +1 @@
#define _FABM_API_VERSION_ 2
#define _FABM_API_VERSION_ 3
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "pyfabm"
version = "2.1.6"
version = "3.0.0"
authors = [
{name = "Jorn Bruggeman", email = "[email protected]"},
{name = "Karsten Bolding", email = "[email protected]"}
Expand Down
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ add_library(fabm_base OBJECT
${CMAKE_CURRENT_LIST_DIR}/fabm_standard_variables.F90
${CMAKE_CURRENT_LIST_DIR}/fabm_properties.F90
${CMAKE_CURRENT_LIST_DIR}/fabm_types.F90
${CMAKE_CURRENT_LIST_DIR}/fabm_global_types.F90
${CMAKE_CURRENT_LIST_DIR}/fabm_particle.F90
${CMAKE_CURRENT_LIST_DIR}/fabm_expressions.F90
${CMAKE_CURRENT_LIST_DIR}/builtin/tracer.F90
Expand Down
5 changes: 0 additions & 5 deletions src/builtin/constant.F90
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ subroutine interior_constant_initialize(self, configunit)
real(rk) :: value
type (type_interior_standard_variable) :: standard_variable

call self%register_implemented_routines()
call self%get_parameter(standard_variable%name, 'standard_name', '', 'standard name', default='')
call self%get_parameter(value, 'value', '', 'value')
if (standard_variable%name /= '') then
Expand All @@ -66,7 +65,6 @@ subroutine horizontal_constant_initialize(self, configunit)
real(rk) :: value
type (type_horizontal_standard_variable) :: standard_variable

call self%register_implemented_routines()
call self%get_parameter(standard_variable%name, 'standard_name', '', 'standard name', default='')
call self%get_parameter(value, 'value', '', 'value')
if (standard_variable%name /= '') then
Expand All @@ -87,7 +85,6 @@ subroutine surface_constant_initialize(self, configunit)
real(rk) :: value
type (type_surface_standard_variable) :: standard_variable

call self%register_implemented_routines()
call self%get_parameter(standard_variable%name, 'standard_name', '', 'standard name', default='')
call self%get_parameter(value, 'value', '', 'value')
if (standard_variable%name /= '') then
Expand All @@ -108,7 +105,6 @@ subroutine bottom_constant_initialize(self, configunit)
real(rk) :: value
type (type_bottom_standard_variable) :: standard_variable

call self%register_implemented_routines()
call self%get_parameter(standard_variable%name, 'standard_name', '', 'standard name', default='')
call self%get_parameter(value, 'value', '', 'value')
if (standard_variable%name /= '') then
Expand All @@ -129,7 +125,6 @@ subroutine global_constant_initialize(self, configunit)
real(rk) :: value
type (type_global_standard_variable) :: standard_variable

call self%register_implemented_routines()
call self%get_parameter(standard_variable%name, 'standard_name', '', 'standard name', default='')
call self%get_parameter(value, 'value', '', 'value')
if (standard_variable%name /= '') then
Expand Down
1 change: 0 additions & 1 deletion src/builtin/depth_integral.F90
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ subroutine depth_integral_initialize(self, configunit)
class (type_depth_integral), intent(inout), target :: self
integer, intent(in) :: configunit

call self%register_implemented_routines((/source_do_column/))
call self%get_parameter(self%average, 'average', '', 'compute average by dividing integral by total height', default=self%average)
call self%register_dependency(self%id_input, 'source', '', 'source')
call self%register_dependency(self%id_thickness, standard_variables%cell_thickness)
Expand Down
7 changes: 0 additions & 7 deletions src/builtin/depth_mapping.F90
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,6 @@ subroutine vertical_depth_range_initialize(self, configunit)
class (type_vertical_depth_range), intent(inout), target :: self
integer, intent(in) :: configunit

call self%register_implemented_routines((/source_do/))
call self%get_parameter(self%minimum_depth, 'minimum_depth', 'm', 'minimum depth (distance from surface)', &
default=self%minimum_depth)
call self%get_parameter(self%maximum_depth, 'maximum_depth', 'm', 'maximum depth (distance from surface)', &
Expand Down Expand Up @@ -258,8 +257,6 @@ subroutine weighted_depth_integral_initialize(self, configunit)

class (type_absolute_rate_distributor), pointer :: rate_distributor

call self%register_implemented_routines((/source_do_column/))

call self%get_parameter(self%average, 'average', '', 'average', default=self%average)
call self%get_parameter(self%act_as_state_variable, 'act_as_state_variable', '', 'act as state variable', &
default=self%act_as_state_variable)
Expand Down Expand Up @@ -324,8 +321,6 @@ subroutine projector_initialize(self, configunit)

class (type_projected_rate_distributor), pointer :: rate_distributor

call self%register_implemented_routines((/source_do/))

call self%get_parameter(self%act_as_state_variable, 'act_as_state_variable', '', 'act as state variable', &
default=self%act_as_state_variable)

Expand Down Expand Up @@ -365,7 +360,6 @@ subroutine absolute_rate_distributor_initialize(self, configunit)
class (type_absolute_rate_distributor), intent(inout), target :: self
integer, intent(in) :: configunit

call self%register_implemented_routines((/source_do/))
call self%register_state_dependency(self%id_target, 'target', '', 'variable to apply sources and sinks to')
call self%register_dependency(self%id_w, 'w', '1', 'weights for vertical distribution')
call self%register_dependency(self%id_w_int, 'w_int', 'm', 'depth-integrated weights for vertical distribution')
Expand Down Expand Up @@ -416,7 +410,6 @@ subroutine projected_rate_distributor_initialize(self, configunit)
class (type_projected_rate_distributor), intent(inout), target :: self
integer, intent(in) :: configunit

call self%register_implemented_routines((/source_do_column/))
call self%register_state_dependency(self%id_target, 'target', '', 'variable to apply sources and sinks to')
call self%register_dependency(self%id_h, standard_variables%cell_thickness)
call self%register_dependency(self%id_sms, 'sms', '', 'sources-sinks')
Expand Down
9 changes: 3 additions & 6 deletions src/builtin/model_library.F90
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,9 @@ subroutine create(self,name,model)
case ('vertical_integral'); allocate(type_depth_integral::model)
case ('bounded_vertical_integral');allocate(type_bounded_depth_integral::model)
case ('interior_temporal_mean'); allocate(type_interior_temporal_mean::model)
case ('surface_temporal_mean'); allocate(type_surface_temporal_mean::model)
case ('bottom_temporal_mean'); allocate(type_bottom_temporal_mean::model)
case ('surface_temporal_maximum'); allocate(type_surface_temporal_maximum::model)
case ('surface_temporal_mean'); allocate(type_horizontal_temporal_mean::model)
case ('bottom_temporal_mean'); allocate(type_horizontal_temporal_mean::model)
case ('surface_temporal_maximum'); allocate(type_horizontal_temporal_maximum::model)
case ('depth_integrated_particle_override'); allocate(type_depth_integrated_particle_override::model)
case ('vertical_depth_range'); allocate(type_vertical_depth_range::model)
! Add new examples models here
Expand All @@ -106,7 +106,6 @@ subroutine bottom_field_initialize(self,configunit)
class (type_bottom_field), intent(inout), target :: self
integer, intent(in) :: configunit

call self%register_implemented_routines((/source_do_bottom/))
call self%register_diagnostic_variable(self%id_result, 'result', '', 'bottom values', source=source_do_bottom)
call self%register_dependency(self%id_source, 'source', '', 'interior values')
end subroutine bottom_field_initialize
Expand All @@ -127,7 +126,6 @@ subroutine surface_field_initialize(self,configunit)
class (type_surface_field), intent(inout), target :: self
integer, intent(in) :: configunit

call self%register_implemented_routines((/source_do_surface/))
call self%register_diagnostic_variable(self%id_result, 'result', '', 'surface values', source=source_do_surface)
call self%register_dependency(self%id_source, 'source', '', 'interior values')
end subroutine surface_field_initialize
Expand All @@ -148,7 +146,6 @@ subroutine column_projection_initialize(self,configunit)
class (type_column_projection),intent(inout),target :: self
integer, intent(in) :: configunit

call self%register_implemented_routines((/source_do/))
call self%register_dependency(self%id_source,'source', '', 'horizontal source')
call self%register_diagnostic_variable(self%id_result,'result', '', 'interior result')
end subroutine column_projection_initialize
Expand Down
1 change: 0 additions & 1 deletion src/builtin/relaxation.F90
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ subroutine interior_relaxation_initialize(self,configunit)
class (type_interior_relaxation),intent(inout),target :: self
integer, intent(in) :: configunit

call self%register_implemented_routines((/source_do/))
call self%register_state_dependency(self%id_original, 'original', '', 'variable that is to be relaxed')
call self%register_dependency(self%id_target, 'target', '', 'target to relax towards')
call self%get_parameter(self%rate_is_variable, 'rate_is_variable', '', 'use variable relaxation rate', default=.false.)
Expand Down
35 changes: 25 additions & 10 deletions src/builtin/scale.F90
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,37 @@

module fabm_builtin_scale
use fabm_types
use fabm_builtin_source, only: copy_fluxes, copy_horizontal_fluxes

implicit none

private

public type_scaled_interior_variable, type_scaled_horizontal_variable

type, extends(type_base_model) :: type_scaled_interior_variable
type, extends(type_base_model) :: type_scaled_variable
real(rk) :: weight = 1.0_rk
real(rk) :: offset = 0.0_rk
character(len=attribute_length) :: units = ''
real(rk) :: missing_value = -2.e20_rk
logical :: act_as_state_variable = .false.
logical :: include_background = .false.
integer :: result_output = output_instantaneous
end type

type, extends(type_scaled_variable) :: type_scaled_interior_variable
type (type_dependency_id) :: id_source
type (type_diagnostic_variable_id) :: id_result
real(rk) :: weight = 1.0_rk
real(rk) :: offset = 0.0_rk
logical :: include_background = .false.
contains
procedure :: initialize => scaled_interior_variable_initialize
procedure :: do => scaled_interior_variable_do
procedure :: after_coupling => scaled_interior_variable_after_coupling
end type

type, extends(type_base_model) :: type_scaled_horizontal_variable
type, extends(type_scaled_variable) :: type_scaled_horizontal_variable
type (type_horizontal_dependency_id) :: id_source
type (type_horizontal_diagnostic_variable_id) :: id_result
real(rk) :: weight = 1.0_rk
real(rk) :: offset = 0.0_rk
logical :: include_background = .false.
integer :: domain = domain_horizontal
contains
procedure :: initialize => scaled_horizontal_variable_initialize
procedure :: do_horizontal => scaled_horizontal_variable_do_horizontal
Expand All @@ -38,7 +44,11 @@ module fabm_builtin_scale
subroutine scaled_interior_variable_initialize(self, configunit)
class (type_scaled_interior_variable), intent(inout), target :: self
integer, intent(in) :: configunit
call self%register_implemented_routines((/source_do/))

call self%register_dependency(self%id_source, 'source', '', 'source variable')
call self%register_diagnostic_variable(self%id_result, 'result', self%units, 'result', &
missing_value=self%missing_value, output=self%result_output, act_as_state_variable=self%act_as_state_variable)
if (self%act_as_state_variable) call copy_fluxes(self, self%id_result, self%id_source%link%target%name, scale_factor=1.0_rk / self%weight)
end subroutine

subroutine scaled_interior_variable_do(self, _ARGUMENTS_DO_)
Expand Down Expand Up @@ -66,7 +76,12 @@ end subroutine scaled_interior_variable_after_coupling
subroutine scaled_horizontal_variable_initialize(self, configunit)
class (type_scaled_horizontal_variable), intent(inout), target :: self
integer, intent(in) :: configunit
call self%register_implemented_routines((/source_do_horizontal/))

call self%register_dependency(self%id_source, 'source', '', 'source variable')
call self%register_diagnostic_variable(self%id_result, 'result', self%units, 'result', &
missing_value=self%missing_value, output=self%result_output, act_as_state_variable= &
self%act_as_state_variable, source=source_do_horizontal, domain=self%domain)
if (self%act_as_state_variable) call copy_horizontal_fluxes(self, self%id_result, self%id_source%link%target%name, scale_factor=1.0_rk / self%weight)
end subroutine

subroutine scaled_horizontal_variable_do_horizontal(self, _ARGUMENTS_HORIZONTAL_)
Expand Down
Loading
Loading