Program Listing for File bmi.f90¶
↰ Return to documentation for file (srcbmi/bmi.f90)
module bmif
implicit none
integer, parameter :: bmi_max_component_name = 2048
integer, parameter :: bmi_max_var_name = 2048
integer, parameter :: bmi_max_type_name = 2048
integer, parameter :: bmi_max_units_name = 2048
integer, parameter :: bmi_failure = 1
integer, parameter :: bmi_success = 0
type, abstract :: bmi
contains
procedure(bmif_get_component_name), deferred :: get_component_name
procedure(bmif_get_input_var_names), deferred :: get_input_var_names
procedure(bmif_get_output_var_names), deferred :: get_output_var_names
procedure(bmif_initialize), deferred :: initialize
procedure(bmif_finalize), deferred :: finalize
procedure(bmif_get_start_time), deferred :: get_start_time
procedure(bmif_get_end_time), deferred :: get_end_time
procedure(bmif_get_current_time), deferred :: get_current_time
procedure(bmif_get_time_step), deferred :: get_time_step
procedure(bmif_get_time_units), deferred :: get_time_units
procedure(bmif_update), deferred :: update
procedure(bmif_update_frac), deferred :: update_frac
procedure(bmif_update_until), deferred :: update_until
procedure(bmif_get_var_grid), deferred :: get_var_grid
procedure(bmif_get_grid_type), deferred :: get_grid_type
procedure(bmif_get_grid_rank), deferred :: get_grid_rank
procedure(bmif_get_grid_shape), deferred :: get_grid_shape
procedure(bmif_get_grid_size), deferred :: get_grid_size
procedure(bmif_get_grid_spacing), deferred :: get_grid_spacing
procedure(bmif_get_grid_origin), deferred :: get_grid_origin
procedure(bmif_get_grid_x), deferred :: get_grid_x
procedure(bmif_get_grid_y), deferred :: get_grid_y
procedure(bmif_get_grid_z), deferred :: get_grid_z
procedure(bmif_get_grid_connectivity), deferred :: get_grid_connectivity
procedure(bmif_get_grid_offset), deferred :: get_grid_offset
procedure(bmif_get_var_type), deferred :: get_var_type
procedure(bmif_get_var_units), deferred :: get_var_units
procedure(bmif_get_var_itemsize), deferred :: get_var_itemsize
procedure(bmif_get_var_nbytes), deferred :: get_var_nbytes
procedure(bmif_get_value_int), deferred :: get_value_int
procedure(bmif_get_value_float), deferred :: get_value_float
procedure(bmif_get_value_double), deferred :: get_value_double
procedure(bmif_get_value_ptr_int), deferred :: get_value_ptr_int
procedure(bmif_get_value_ptr_float), deferred :: get_value_ptr_float
procedure(bmif_get_value_ptr_double), deferred :: get_value_ptr_double
procedure(bmif_get_value_at_indices_int), deferred :: &
get_value_at_indices_int
procedure(bmif_get_value_at_indices_float), deferred :: &
get_value_at_indices_float
procedure(bmif_get_value_at_indices_double), deferred :: &
get_value_at_indices_double
procedure(bmif_set_value_int), deferred :: set_value_int
procedure(bmif_set_value_float), deferred :: set_value_float
procedure(bmif_set_value_double), deferred :: set_value_double
procedure(bmif_set_value_at_indices_int), deferred :: &
set_value_at_indices_int
procedure(bmif_set_value_at_indices_float), deferred :: &
set_value_at_indices_float
procedure(bmif_set_value_at_indices_double), deferred :: &
set_value_at_indices_double
end type bmi
abstract interface
! Get the name of the model.
function bmif_get_component_name(this, name) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), pointer, intent(out) :: name
integer :: bmi_status
end function bmif_get_component_name
! List a model's input variables.
function bmif_get_input_var_names(this, names) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), pointer, intent(out) :: names(:)
integer :: bmi_status
end function bmif_get_input_var_names
! List a model's output variables.
function bmif_get_output_var_names(this, names) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), pointer, intent(out) :: names(:)
integer :: bmi_status
end function bmif_get_output_var_names
! Perform startup tasks for the model.
function bmif_initialize(this, config_file) result(bmi_status)
import :: bmi
class(bmi), intent(out) :: this
character (len=*), intent(in) :: config_file
integer :: bmi_status
end function bmif_initialize
! Perform teardown tasks for the model.
function bmif_finalize(this) result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
integer :: bmi_status
end function bmif_finalize
! Start time of the model.
function bmif_get_start_time(this, time) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
double precision, intent(out) :: time
integer :: bmi_status
end function bmif_get_start_time
! End time of the model.
function bmif_get_end_time(this, time) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
double precision, intent(out) :: time
integer :: bmi_status
end function bmif_get_end_time
! Current time of the model.
function bmif_get_current_time(this, time) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
double precision, intent(out) :: time
integer :: bmi_status
end function bmif_get_current_time
! Time step of the model.
function bmif_get_time_step(this, time_step) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
double precision, intent(out) :: time_step
integer :: bmi_status
end function bmif_get_time_step
! Time units of the model.
function bmif_get_time_units(this, time_units) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(out) :: time_units
integer :: bmi_status
end function bmif_get_time_units
! Advance the model one time step.
function bmif_update(this) result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
integer :: bmi_status
end function bmif_update
! Advance the model by a fraction of a time step.
function bmif_update_frac(this, time_frac) result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
double precision, intent(in) :: time_frac
integer :: bmi_status
end function bmif_update_frac
! Advance the model until the given time.
function bmif_update_until(this, time) result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
double precision, intent(in) :: time
integer :: bmi_status
end function bmif_update_until
! Get the grid identifier for the given variable.
function bmif_get_var_grid(this, var_name, grid_id) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
integer, intent(out) :: grid_id
integer :: bmi_status
end function bmif_get_var_grid
! Get the grid type as a string.
function bmif_get_grid_type(this, grid_id, grid_type) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
character (len=*), intent(out) :: grid_type
integer :: bmi_status
end function bmif_get_grid_type
! Get number of dimensions of the computational grid.
function bmif_get_grid_rank(this, grid_id, grid_rank) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
integer, intent(out) :: grid_rank
integer :: bmi_status
end function bmif_get_grid_rank
! Get the dimensions of the computational grid.
function bmif_get_grid_shape(this, grid_id, grid_shape) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
integer, dimension(:), intent(out) :: grid_shape
integer :: bmi_status
end function bmif_get_grid_shape
! Get the total number of elements in the computational grid.
function bmif_get_grid_size(this, grid_id, grid_size) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
integer, intent(out) :: grid_size
integer :: bmi_status
end function bmif_get_grid_size
! Get distance between nodes of the computational grid.
function bmif_get_grid_spacing(this, grid_id, grid_spacing) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
double precision, dimension(:), intent(out) :: grid_spacing
integer :: bmi_status
end function bmif_get_grid_spacing
! Get coordinates of the origin of the computational grid.
function bmif_get_grid_origin(this, grid_id, grid_origin) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
double precision, dimension(:), intent(out) :: grid_origin
integer :: bmi_status
end function bmif_get_grid_origin
! Get the x-coordinates of the nodes of a computational grid.
function bmif_get_grid_x(this, grid_id, grid_x) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
double precision, dimension(:), intent(out) :: grid_x
integer :: bmi_status
end function bmif_get_grid_x
! Get the y-coordinates of the nodes of a computational grid.
function bmif_get_grid_y(this, grid_id, grid_y) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
double precision, dimension(:), intent(out) :: grid_y
integer :: bmi_status
end function bmif_get_grid_y
! Get the z-coordinates of the nodes of a computational grid.
function bmif_get_grid_z(this, grid_id, grid_z) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
double precision, dimension(:), intent(out) :: grid_z
integer :: bmi_status
end function bmif_get_grid_z
! Get the connectivity array of the nodes of an unstructured grid.
function bmif_get_grid_connectivity(this, grid_id, grid_conn) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
integer, dimension(:), intent(out) :: grid_conn
integer :: bmi_status
end function bmif_get_grid_connectivity
! Get the offsets of the nodes of an unstructured grid.
function bmif_get_grid_offset(this, grid_id, grid_offset) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
integer, intent(in) :: grid_id
integer, dimension(:), intent(out) :: grid_offset
integer :: bmi_status
end function bmif_get_grid_offset
! Get the data type of the given variable as a string.
function bmif_get_var_type(this, var_name, var_type) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
character (len=*), intent(out) :: var_type
integer :: bmi_status
end function bmif_get_var_type
! Get the units of the given variable.
function bmif_get_var_units(this, var_name, var_units) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
character (len=*), intent(out) :: var_units
integer :: bmi_status
end function bmif_get_var_units
! Get memory use per array element, in bytes.
function bmif_get_var_itemsize(this, var_name, var_size) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
integer, intent(out) :: var_size
integer :: bmi_status
end function bmif_get_var_itemsize
! Get size of the given variable, in bytes.
function bmif_get_var_nbytes(this, var_name, var_nbytes) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
integer, intent(out) :: var_nbytes
integer :: bmi_status
end function bmif_get_var_nbytes
! Get a copy of values (flattened!) of the given integer variable.
function bmif_get_value_int(this, var_name, dest) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
integer, intent(inout) :: dest(:)
integer :: bmi_status
end function bmif_get_value_int
! Get a copy of values (flattened!) of the given real variable.
function bmif_get_value_float(this, var_name, dest) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
real, intent(inout) :: dest(:)
integer :: bmi_status
end function bmif_get_value_float
! Get a copy of values (flattened!) of the given double variable.
function bmif_get_value_double(this, var_name, dest) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
double precision, intent(inout) :: dest(:)
integer :: bmi_status
end function bmif_get_value_double
! Get a reference to the given integer variable.
function bmif_get_value_ptr_int(this, var_name, dest) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
integer, pointer, intent(inout) :: dest(:)
integer :: bmi_status
end function bmif_get_value_ptr_int
! Get a reference to the given real variable.
function bmif_get_value_ptr_float(this, var_name, dest) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
real, pointer, intent(inout) :: dest(:)
integer :: bmi_status
end function bmif_get_value_ptr_float
! Get a reference to the given double variable.
function bmif_get_value_ptr_double(this, var_name, dest) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
double precision, pointer, intent(inout) :: dest(:)
integer :: bmi_status
end function bmif_get_value_ptr_double
! Get integer values at particular (one-dimensional) indices.
function bmif_get_value_at_indices_int(this, var_name, dest, indices) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
integer, intent(inout) :: dest(:)
integer, intent(in) :: indices(:)
integer :: bmi_status
end function bmif_get_value_at_indices_int
! Get real values at particular (one-dimensional) indices.
function bmif_get_value_at_indices_float(this, var_name, dest, indices) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
real, intent(inout) :: dest(:)
integer, intent(in) :: indices(:)
integer :: bmi_status
end function bmif_get_value_at_indices_float
! Get double values at particular (one-dimensional) indices.
function bmif_get_value_at_indices_double(this, var_name, dest, indices) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character (len=*), intent(in) :: var_name
double precision, intent(inout) :: dest(:)
integer, intent(in) :: indices(:)
integer :: bmi_status
end function bmif_get_value_at_indices_double
! Set new values for an integer model variable.
function bmif_set_value_int(this, var_name, src) result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character (len=*), intent(in) :: var_name
integer, intent(in) :: src(:)
integer :: bmi_status
end function bmif_set_value_int
! Set new values for a real model variable.
function bmif_set_value_float(this, var_name, src) result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character (len=*), intent(in) :: var_name
real, intent(in) :: src(:)
integer :: bmi_status
end function bmif_set_value_float
! Set new values for a double model variable.
function bmif_set_value_double(this, var_name, src) result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character (len=*), intent(in) :: var_name
double precision, intent(in) :: src(:)
integer :: bmi_status
end function bmif_set_value_double
! Set integer values at particular (one-dimensional) indices.
function bmif_set_value_at_indices_int(this, var_name, indices, src) &
result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character (len=*), intent(in) :: var_name
integer, intent(in) :: indices(:)
integer, intent(in) :: src(:)
integer :: bmi_status
end function bmif_set_value_at_indices_int
! Set real values at particular (one-dimensional) indices.
function bmif_set_value_at_indices_float(this, var_name, indices, src) &
result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character (len=*), intent(in) :: var_name
integer, intent(in) :: indices(:)
real, intent(in) :: src(:)
integer :: bmi_status
end function bmif_set_value_at_indices_float
! Set double values at particular (one-dimensional) indices.
function bmif_set_value_at_indices_double(this, var_name, indices, src) &
result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character (len=*), intent(in) :: var_name
integer, intent(in) :: indices(:)
double precision, intent(in) :: src(:)
integer :: bmi_status
end function bmif_set_value_at_indices_double
end interface
end module bmif