Skip to content
Snippets Groups Projects
Commit e428de69 authored by 数学の武士's avatar 数学の武士
Browse files

Remove pointers

parent 1262b184
No related branches found
No related tags found
No related merge requests found
...@@ -40,21 +40,12 @@ module sfx_data ...@@ -40,21 +40,12 @@ module sfx_data
!> @brief meteorological input for surface flux calculation !> @brief meteorological input for surface flux calculation
!> &details using arrays as input !> &details using arrays as input
type, public :: meteoDataVecType type, public :: meteoDataVecType
#if defined(INCLUDE_CXX)
real, pointer, contiguous :: h(:) !< constant flux layer height [m]
real, pointer, contiguous :: U(:) !< abs(wind speed) at 'h' [m/s]
real, pointer, contiguous :: dT(:) !< difference between potential temperature at 'h' and at surface [K]
real, pointer, contiguous :: Tsemi(:) !< semi-sum of potential temperature at 'h' and at surface [K]
real, pointer, contiguous :: dQ(:) !< difference between humidity at 'h' and at surface [g/g]
real, pointer, contiguous :: z0_m(:) !< surface aerodynamic roughness (should be < 0 for water bodies surface)
#else
real, allocatable :: h(:) !< constant flux layer height [m] real, allocatable :: h(:) !< constant flux layer height [m]
real, allocatable :: U(:) !< abs(wind speed) at 'h' [m/s] real, allocatable :: U(:) !< abs(wind speed) at 'h' [m/s]
real, allocatable :: dT(:) !< difference between potential temperature at 'h' and at surface [K] real, allocatable :: dT(:) !< difference between potential temperature at 'h' and at surface [K]
real, allocatable :: Tsemi(:) !< semi-sum of potential temperature at 'h' and at surface [K] real, allocatable :: Tsemi(:) !< semi-sum of potential temperature at 'h' and at surface [K]
real, allocatable :: dQ(:) !< difference between humidity at 'h' and at surface [g/g] real, allocatable :: dQ(:) !< difference between humidity at 'h' and at surface [g/g]
real, allocatable :: z0_m(:) !< surface aerodynamic roughness (should be < 0 for water bodies surface) real, allocatable :: z0_m(:) !< surface aerodynamic roughness (should be < 0 for water bodies surface)
#endif
end type end type
#if defined(INCLUDE_CXX) #if defined(INCLUDE_CXX)
...@@ -90,19 +81,7 @@ module sfx_data ...@@ -90,19 +81,7 @@ module sfx_data
!> @brief surface flux output data !> @brief surface flux output data
!> &details using arrays as output !> &details using arrays as output
type, public :: sfxDataVecType type, public :: sfxDataVecType
#if defined(INCLUDE_CXX)
real, pointer, contiguous :: zeta(:) !< = z/L [n/d]
real, pointer, contiguous :: Rib(:) !< bulk Richardson number [n/d]
real, pointer, contiguous :: Re(:) !< Reynolds number [n/d]
real, pointer, contiguous :: B(:) !< = log(z0_m / z0_h) [n/d]
real, pointer, contiguous :: z0_m(:) !< aerodynamic roughness [m]
real, pointer, contiguous :: z0_t(:) !< thermal roughness [m]
real, pointer, contiguous :: Rib_conv_lim(:) !< Ri-bulk convection critical value [n/d]
real, pointer, contiguous :: Cm(:) !< transfer coefficient for momentum [n/d]
real, pointer, contiguous :: Ct(:) !< transfer coefficient for heat [n/d]
real, pointer, contiguous :: Km(:) !< eddy viscosity coeff. at h [m^2/s]
real, pointer, contiguous :: Pr_t_inv(:) !< inverse turbulent Prandtl number at h [n/d]
#else
real, allocatable :: zeta(:) !< = z/L [n/d] real, allocatable :: zeta(:) !< = z/L [n/d]
real, allocatable :: Rib(:) !< bulk Richardson number [n/d] real, allocatable :: Rib(:) !< bulk Richardson number [n/d]
real, allocatable :: Re(:) !< Reynolds number [n/d] real, allocatable :: Re(:) !< Reynolds number [n/d]
...@@ -114,7 +93,7 @@ module sfx_data ...@@ -114,7 +93,7 @@ module sfx_data
real, allocatable :: Ct(:) !< transfer coefficient for heat [n/d] real, allocatable :: Ct(:) !< transfer coefficient for heat [n/d]
real, allocatable :: Km(:) !< eddy viscosity coeff. at h [m^2/s] real, allocatable :: Km(:) !< eddy viscosity coeff. at h [m^2/s]
real, allocatable :: Pr_t_inv(:) !< inverse turbulent Prandtl number at h [n/d] real, allocatable :: Pr_t_inv(:) !< inverse turbulent Prandtl number at h [n/d]
#endif
end type end type
#if defined(INCLUDE_CXX) #if defined(INCLUDE_CXX)
...@@ -222,10 +201,8 @@ contains ...@@ -222,10 +201,8 @@ contains
subroutine set_meteo_vec_c(meteo, meteo_C) subroutine set_meteo_vec_c(meteo, meteo_C)
!> @brief allocate meteo data vector !> @brief allocate meteo data vector
! ---------------------------------------------------------------------------- ! ----------------------------------------------------------------------------
type (meteoDataVecType) , intent(in) :: meteo type (meteoDataVecType), target :: meteo
type (meteoDataVecTypeC), pointer, intent(inout) :: meteo_C type (meteoDataVecTypeC), intent(inout) :: meteo_C
allocate(meteo_C)
meteo_C%h = c_loc(meteo%h) meteo_C%h = c_loc(meteo%h)
meteo_C%U = c_loc(meteo%U) meteo_C%U = c_loc(meteo%U)
...@@ -281,10 +258,8 @@ contains ...@@ -281,10 +258,8 @@ contains
subroutine set_sfx_vec_c(sfx, sfx_C) subroutine set_sfx_vec_c(sfx, sfx_C)
!> @brief allocate surface fluxes data vector !> @brief allocate surface fluxes data vector
! ---------------------------------------------------------------------------- ! ----------------------------------------------------------------------------
type (sfxDataVecType), intent(inout) :: sfx type (sfxDataVecType), target :: sfx
type (sfxDataVecTypeC), pointer, intent(inout) :: sfx_C type (sfxDataVecTypeC), intent(inout) :: sfx_C
allocate(sfx_C)
sfx_C%zeta = c_loc(sfx%zeta) sfx_C%zeta = c_loc(sfx%zeta)
sfx_C%Rib = c_loc(sfx%Rib) sfx_C%Rib = c_loc(sfx%Rib)
......
...@@ -12,7 +12,7 @@ module sfx_esm ...@@ -12,7 +12,7 @@ module sfx_esm
use sfx_surface use sfx_surface
use sfx_esm_param use sfx_esm_param
#if defined(INCLUDE_CXX) #if defined(INCLUDE_CXX)
use iso_c_binding, only: c_loc use iso_c_binding, only: C_LOC, C_PTR
use C_FUNC use C_FUNC
#endif #endif
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
...@@ -72,8 +72,9 @@ contains ...@@ -72,8 +72,9 @@ contains
integer i integer i
! ---------------------------------------------------------------------------- ! ----------------------------------------------------------------------------
#if defined(INCLUDE_CXX) #if defined(INCLUDE_CXX)
type (meteoDataVecTypeC), pointer :: meteo_c !< meteorological data (input) type (meteoDataVecTypeC), target :: meteo_c !< meteorological data (input)
type (sfxDataVecTypeC), pointer :: sfx_c !< surface flux data (output) type (sfxDataVecTypeC), target :: sfx_c !< surface flux data (output)
type(C_PTR) :: meteo_c_ptr, sfx_c_ptr
type (sfx_esm_param) :: model_param type (sfx_esm_param) :: model_param
type (sfx_surface_param) :: surface_param type (sfx_surface_param) :: surface_param
type (sfx_esm_numericsTypeC) :: numerics_c type (sfx_esm_numericsTypeC) :: numerics_c
...@@ -90,11 +91,10 @@ contains ...@@ -90,11 +91,10 @@ contains
call set_c_struct_sfx_surface_param_values(surface_param) call set_c_struct_sfx_surface_param_values(surface_param)
call set_meteo_vec_c(meteo, meteo_c) call set_meteo_vec_c(meteo, meteo_c)
call set_sfx_vec_c(sfx, sfx_c) call set_sfx_vec_c(sfx, sfx_c)
meteo_c_ptr = C_LOC(meteo_c)
sfx_c_ptr = C_LOC(sfx_c)
call get_surface_fluxes_esm(c_loc(sfx_c), c_loc(meteo_c), model_param, surface_param, numerics_c, phys_constants, n) call get_surface_fluxes_esm(sfx_c_ptr, meteo_c_ptr, model_param, surface_param, numerics_c, phys_constants, n)
deallocate(meteo_c)
deallocate(sfx_c)
#else #else
do i = 1, n do i = 1, n
#ifdef SFX_FORCE_DEPRECATED_ESM_CODE #ifdef SFX_FORCE_DEPRECATED_ESM_CODE
......
...@@ -12,8 +12,8 @@ module sfx_sheba ...@@ -12,8 +12,8 @@ module sfx_sheba
use sfx_surface use sfx_surface
use sfx_sheba_param use sfx_sheba_param
#if defined(INCLUDE_CUDA) || defined(INCLUDE_CXX) #if defined(INCLUDE_CXX)
use iso_c_binding, only: c_loc use iso_c_binding, only: C_LOC, C_PTR
use C_FUNC use C_FUNC
#endif #endif
! -------------------------------------------------------------------------------- ! --------------------------------------------------------------------------------
...@@ -74,6 +74,7 @@ contains ...@@ -74,6 +74,7 @@ contains
#if defined(INCLUDE_CXX) #if defined(INCLUDE_CXX)
type (meteoDataVecTypeC), pointer :: meteo_c !< meteorological data (input) type (meteoDataVecTypeC), pointer :: meteo_c !< meteorological data (input)
type (sfxDataVecTypeC), pointer :: sfx_c !< surface flux data (output) type (sfxDataVecTypeC), pointer :: sfx_c !< surface flux data (output)
type(C_PTR) :: meteo_c_ptr, sfx_c_ptr
type (sfx_sheba_param) :: model_param type (sfx_sheba_param) :: model_param
type (sfx_surface_param) :: surface_param type (sfx_surface_param) :: surface_param
type (sfx_sheba_numericsTypeC) :: numerics_c type (sfx_sheba_numericsTypeC) :: numerics_c
...@@ -90,10 +91,10 @@ contains ...@@ -90,10 +91,10 @@ contains
call set_meteo_vec_c(meteo, meteo_c) call set_meteo_vec_c(meteo, meteo_c)
call set_sfx_vec_c(sfx, sfx_c) call set_sfx_vec_c(sfx, sfx_c)
call get_surface_fluxes_sheba(c_loc(sfx_c), c_loc(meteo_c), model_param, surface_param, numerics_c, phys_constants, n) meteo_c_ptr = C_LOC(meteo_c)
sfx_c_ptr = C_LOC(sfx_c)
deallocate(meteo_c) call get_surface_fluxes_sheba(sfx_c_ptr, meteo_c_ptr, model_param, surface_param, numerics_c, phys_constants, n)
deallocate(sfx_c)
#else #else
do i = 1, n do i = 1, n
meteo_cell = meteoDataType(& meteo_cell = meteoDataType(&
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment