Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update iso c binding library, replace PR#490 #491

Merged
merged 2 commits into from
Feb 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
184 changes: 92 additions & 92 deletions extern/iso_c_fortran_bmi/src/bmi.f90
Original file line number Diff line number Diff line change
Expand Up @@ -296,65 +296,65 @@ function bmif_get_value_double(this, name, dest) result(bmi_status)
integer :: bmi_status
end function bmif_get_value_double

! ! ! Get a reference to the given integer variable.
! ! function bmif_get_value_ptr_int(this, name, dest_ptr) result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(in) :: this
! ! character(len=*), intent(in) :: name
! ! integer, pointer, intent(inout) :: dest_ptr(:)
! ! 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, name, dest_ptr) result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(in) :: this
! ! character(len=*), intent(in) :: name
! ! real, pointer, intent(inout) :: dest_ptr(:)
! ! 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, name, dest_ptr) result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(in) :: this
! ! character(len=*), intent(in) :: name
! ! double precision, pointer, intent(inout) :: dest_ptr(:)
! ! 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, name, dest, inds) &
! ! result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(in) :: this
! ! character(len=*), intent(in) :: name
! ! integer, intent(inout) :: dest(:)
! ! integer, intent(in) :: inds(:)
! ! 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, name, dest, inds) &
! ! result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(in) :: this
! ! character(len=*), intent(in) :: name
! ! real, intent(inout) :: dest(:)
! ! integer, intent(in) :: inds(:)
! ! 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, name, dest, inds) &
! ! result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(in) :: this
! ! character(len=*), intent(in) :: name
! ! double precision, intent(inout) :: dest(:)
! ! integer, intent(in) :: inds(:)
! ! integer :: bmi_status
! ! end function bmif_get_value_at_indices_double
! Get a reference to the given integer variable.
function bmif_get_value_ptr_int(this, name, dest_ptr) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character(len=*), intent(in) :: name
integer, pointer, intent(inout) :: dest_ptr(:)
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, name, dest_ptr) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character(len=*), intent(in) :: name
real, pointer, intent(inout) :: dest_ptr(:)
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, name, dest_ptr) result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character(len=*), intent(in) :: name
double precision, pointer, intent(inout) :: dest_ptr(:)
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, name, dest, inds) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character(len=*), intent(in) :: name
integer, intent(inout) :: dest(:)
integer, intent(in) :: inds(:)
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, name, dest, inds) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character(len=*), intent(in) :: name
real, intent(inout) :: dest(:)
integer, intent(in) :: inds(:)
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, name, dest, inds) &
result(bmi_status)
import :: bmi
class(bmi), intent(in) :: this
character(len=*), intent(in) :: name
double precision, intent(inout) :: dest(:)
integer, intent(in) :: inds(:)
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, name, src) result(bmi_status)
Expand Down Expand Up @@ -383,39 +383,39 @@ function bmif_set_value_double(this, name, src) result(bmi_status)
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, name, inds, src) &
! ! result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(inout) :: this
! ! character(len=*), intent(in) :: name
! ! integer, intent(in) :: inds(:)
! ! 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, name, inds, src) &
! ! result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(inout) :: this
! ! character(len=*), intent(in) :: name
! ! integer, intent(in) :: inds(:)
! ! 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, name, inds, src) &
! ! result(bmi_status)
! ! import :: bmi
! ! class(bmi), intent(inout) :: this
! ! character(len=*), intent(in) :: name
! ! integer, intent(in) :: inds(:)
! ! double precision, intent(in) :: src(:)
! ! integer :: bmi_status
! ! end function bmif_set_value_at_indices_double
! !
! Set integer values at particular (one-dimensional) indices.
function bmif_set_value_at_indices_int(this, name, inds, src) &
result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character(len=*), intent(in) :: name
integer, intent(in) :: inds(:)
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, name, inds, src) &
result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character(len=*), intent(in) :: name
integer, intent(in) :: inds(:)
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, name, inds, src) &
result(bmi_status)
import :: bmi
class(bmi), intent(inout) :: this
character(len=*), intent(in) :: name
integer, intent(in) :: inds(:)
double precision, intent(in) :: src(:)
integer :: bmi_status
end function bmif_set_value_at_indices_double

! Get number of dimensions of the computational grid.
function bmif_get_grid_rank(this, grid, rank) result(bmi_status)
import :: bmi
Expand Down
101 changes: 100 additions & 1 deletion extern/iso_c_fortran_bmi/src/iso_c_bmi.f90
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

module iso_c_bmif_2_0
use bmif_2_0_iso
use, intrinsic :: iso_c_binding, only: c_ptr, c_loc, c_f_pointer, c_char, c_null_char, c_int, c_double, c_float
use, intrinsic :: iso_c_binding, only: c_ptr, c_loc, c_f_pointer, c_char, c_null_char, c_int, c_double, c_float, c_null_ptr
implicit none

type box
Expand Down Expand Up @@ -440,6 +440,72 @@ function get_value_double(this, name, dest) result(bmi_status) bind(C, name="get
deallocate(f_str)
end function get_value_double

! Get a reference to the given integer variable.
function get_value_ptr_int(this, name, dest_ptr) result(bmi_status) bind(C, name="get_value_ptr_int")
type(c_ptr) :: this
type(c_ptr) :: dest_ptr
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
integer(kind=c_int) :: bmi_status

dest_ptr = c_null_ptr
bmi_status = BMI_FAILURE
end function get_value_ptr_int

! Get a reference to the given float variable.
function get_value_ptr_float(this, name, dest_ptr) result(bmi_status) bind(C, name="get_value_ptr_float")
type(c_ptr) :: this
type(c_ptr) :: dest_ptr
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
integer(kind=c_int) :: bmi_status

dest_ptr = c_null_ptr
bmi_status = BMI_FAILURE
end function get_value_ptr_float

! Get a reference to the given double variable.
function get_value_ptr_double(this, name, dest_ptr) result(bmi_status) bind(C, name="get_value_ptr_double")
type(c_ptr) :: this
type(c_ptr) :: dest_ptr
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
integer(kind=c_int) :: bmi_status

dest_ptr = c_null_ptr
bmi_status = BMI_FAILURE
end function get_value_ptr_double

! Get integer values at particular (one-dimensional) indices.
function get_value_at_indices_int(this, name, dest, inds) result(bmi_status) bind(C, name="get_value_at_indices_int")
type(c_ptr) :: this
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
integer(kind=c_int), intent(inout) :: dest(*)
integer(kind=c_int), intent(in) :: inds(*)
integer(kind=c_int) :: bmi_status

bmi_status = BMI_FAILURE
end function get_value_at_indices_int

! Get real values at particular (one-dimensional) indices.
function get_value_at_indices_float(this, name, dest, inds) result(bmi_status) bind(C, name="get_value_at_indices_float")
type(c_ptr) :: this
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
real(kind=c_float), intent(inout) :: dest(*)
integer(kind=c_int), intent(in) :: inds(*)
integer(kind=c_int) :: bmi_status

bmi_status = BMI_FAILURE
end function get_value_at_indices_float

! Get real values at particular (one-dimensional) indices.
function get_value_at_indices_double(this, name, dest, inds) result(bmi_status) bind(C, name="get_value_at_indices_double")
type(c_ptr) :: this
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
real(kind=c_double), intent(inout) :: dest(*)
integer(kind=c_int), intent(in) :: inds(*)
integer(kind=c_int) :: bmi_status

bmi_status = BMI_FAILURE
end function get_value_at_indices_double

! Set new values for an integer model variable.
function set_value_int(this, name, src) result(bmi_status) bind(C, name="set_value_int")
type(c_ptr) :: this
Expand Down Expand Up @@ -505,6 +571,39 @@ function set_value_double(this, name, src) result(bmi_status) bind(C, name="set_
deallocate(f_str)
end function set_value_double

! Set integer values at particular (one-dimensional) indices.
function set_value_at_indices_int(this, name, inds, src) result(bmi_status) bind(C, name="set_value_at_indices_int")
type(c_ptr) :: this
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
integer(kind=c_int), intent(in) :: inds(*)
integer(kind=c_int), intent(in) :: src(*)
integer(kind=c_int) :: bmi_status

bmi_status = BMI_FAILURE
end function set_value_at_indices_int

! Set real values at particular (one-dimensional) indices.
function set_value_at_indices_float(this, name, inds, src) result(bmi_status) bind(C, name="set_value_at_indices_float")
type(c_ptr) :: this
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
integer(kind=c_int), intent(in) :: inds(*)
real(kind=c_float), intent(in) :: src(*)
integer(kind=c_int) :: bmi_status

bmi_status = BMI_FAILURE
end function set_value_at_indices_float

! Set double values at particular (one-dimensional) indices.
function set_value_at_indices_double(this, name, inds, src) result(bmi_status) bind(C, name="set_value_at_indices_double")
type(c_ptr) :: this
character(kind=c_char, len=1), dimension(BMI_MAX_COMPONENT_NAME), intent(in) :: name
integer(kind=c_int), intent(in) :: inds(*)
real(kind=c_double), intent(in) :: src(*)
integer(kind=c_int) :: bmi_status

bmi_status = BMI_FAILURE
end function set_value_at_indices_double

! Get number of dimensions of the computational grid.
function get_grid_rank(this, grid, rank) result(bmi_status) bind(C, name="get_grid_rank")
type(c_ptr) :: this
Expand Down
Loading