Forked from
Numerical_Simulations_Lab / Actors / Summa Actors
379 commits behind the upstream repository.
cppwrap_metadata.f90 2.02 KiB
module cppwrap_metadata
use, intrinsic :: iso_c_binding
use data_types
implicit none
contains
! **************************** var_info ********************************
function new_handle_var_info() result(handle) bind(C, name='new_handle_var_info')
type(c_ptr) :: handle
type(var_info), pointer :: p
allocate(p)
handle = c_loc(p)
end function new_handle_var_info
!-----------------------------------
subroutine delete_handle_var_info(handle) bind(C, name='delete_handle_var_info')
type(c_ptr), intent(in), value :: handle
type(var_info), pointer :: p
call c_f_pointer(handle, p)
deallocate(p)
end subroutine delete_handle_var_info
!-----------------------------------
subroutine set_data_var_info(handle, varname, vardesc, varunit, vartype, &
ncVarID, ncVarID_size, statIndex, statIndex_size, varDesire) &
bind(C, name='set_data_var_info')
use cppwrap_auxiliary,only:c_f_string
implicit none
type(c_ptr), intent(in),value :: handle
character(kind=c_char,len=1),intent(in) :: varname(*), vardesc(*), varunit(*)
integer(c_int), intent(in),value :: vartype
integer(c_int), intent(in),value :: ncVarID_size
integer(c_int), intent(in) :: ncVarID(ncVarID_size)
integer(c_int), intent(in),value :: statIndex_size
integer(c_int), intent(in) :: statIndex(statIndex_size)
integer(c_int), intent(in),value :: varDesire
type(var_info), pointer :: p
integer :: i
call c_f_pointer(handle, p)
call c_f_string(varname, p%varname, 64)
call c_f_string(vardesc, p%vardesc, 128)
call c_f_string(varunit, p%varunit, 64)
p%vartype = vartype
do i=1,ncVarID_size
p%ncVarID(i) = ncVarID(i)
end do
do i=1,statIndex_size
p%statIndex(i) = statIndex(i)
end do
if(varDesire == 0)then; p%varDesire = .false.; else; p%varDesire = .true.; endif
end subroutine set_data_var_info
end module cppwrap_metadata