Skip to content
Snippets Groups Projects
sfx_fc_wrapper.F90 2.61 KiB
Newer Older
数学の武士's avatar
数学の武士 committed
module C_FUNC
数学の武士's avatar
数学の武士 committed

#if defined(INCLUDE_CXX)

数学の武士's avatar
数学の武士 committed
    INTERFACE
数学の武士's avatar
数学の武士 committed
        SUBROUTINE get_surface_fluxes_esm(sfx, meteo, model_param, surface_param, numerics, constants, grid_size) BIND(C)
            use sfx_data
            USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_INT, C_PTR
数学の武士's avatar
数学の武士 committed
            IMPLICIT NONE
数学の武士's avatar
数学の武士 committed
            INTEGER(C_INT) :: grid_size
            type(C_PTR), value :: sfx
            type(C_PTR), value :: meteo
            type(sfx_esm_param) :: model_param
            type(sfx_surface_param) :: surface_param
            type(sfx_esm_numericsTypeC) :: numerics
            type(sfx_phys_constants) :: constants
数学の武士's avatar
.  
数学の武士 committed
        END SUBROUTINE get_surface_fluxes_esm

数学の武士's avatar
数学の武士 committed
        SUBROUTINE get_surface_fluxes_sheba(sfx, meteo, model_param, surface_param, numerics, constants, grid_size) BIND(C)
            use sfx_data
            USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_INT, C_PTR
数学の武士's avatar
.  
数学の武士 committed
            IMPLICIT NONE
数学の武士's avatar
数学の武士 committed
            INTEGER(C_INT) :: grid_size
            type(C_PTR), value :: sfx
            type(C_PTR), value :: meteo
            type(sfx_sheba_param) :: model_param
            type(sfx_surface_param) :: surface_param
            type(sfx_sheba_numericsTypeC) :: numerics
            type(sfx_phys_constants) :: constants
数学の武士's avatar
.  
数学の武士 committed
        END SUBROUTINE get_surface_fluxes_sheba
数学の武士's avatar
数学の武士 committed
    END INTERFACE
数学の武士's avatar
数学の武士 committed

    contains

    subroutine set_c_struct_sfx_surface_param_values(surface_param)
        use sfx_data
        use sfx_surface
        implicit none
        type (sfx_surface_param), intent(inout) :: surface_param
        surface_param%surface_ocean = surface_ocean
        surface_param%surface_land = surface_land
        surface_param%surface_lake = surface_lake

        surface_param%gamma_c = gamma_c
        surface_param%Re_visc_min = Re_visc_min
        surface_param%h_charnock = h_charnock
        surface_param%c1_charnock = c1_charnock
        surface_param%c2_charnock = c2_charnock
        surface_param%Re_rough_min = Re_rough_min
        surface_param%B1_rough = B1_rough
        surface_param%B2_rough = B2_rough
        surface_param%B3_rough = B3_rough
        surface_param%B4_rough = B4_rough
        surface_param%B_max_lake = B_max_lake
        surface_param%B_max_ocean = B_max_ocean
        surface_param%B_max_land = B_max_land
    end subroutine set_c_struct_sfx_surface_param_values

    subroutine set_c_struct_sfx_phys_constants_values(constants)
        use sfx_data
        use sfx_phys_const
        implicit none
        type (sfx_phys_constants), intent(inout) :: constants
        constants%Pr_m = Pr_m
        constants%g = g
        constants%nu_air = nu_air
    end subroutine set_c_struct_sfx_phys_constants_values
#endif
数学の武士's avatar
数学の武士 committed
end module C_FUNC