Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • icon-libraries/libiconmath
1 result
Show changes
Commits on Source (8)
Showing
with 602 additions and 190 deletions
......@@ -18,7 +18,8 @@ install_manifest.txt
/**/src/**/mod/*
/**/test/fortran/*.mod
/**/api/*
iconmath_Tests
# Test stage files:
/**/Testing/*
run_tests.f90
ICON
---------------------------------------------------------------
Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
Contact information: icon-model.org
See AUTHORS.TXT for a list of authors
......
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......@@ -65,7 +65,7 @@ endif()
include("${PROJECT_SOURCE_DIR}/cmake/get_library.cmake")
# build fortran-support
get_library("fortran-support" cde3e258411adfcb026bb231f778e9a66737bfee)
get_library("fortran-support" 0f57ee7a57094dfaf6d7d9276683ca6ec6e8cf34)
include("${PROJECT_SOURCE_DIR}/cmake/check_macro.cmake")
check_macro_defined(HAS_OPENMP_MACRO _OPENMP QUIET)
......
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.txt for a list of authors
......@@ -18,7 +18,7 @@ path = [
"README.md",
]
precedence = "aggregate"
SPDX-FileCopyrightText = "2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss"
SPDX-FileCopyrightText = "2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss"
SPDX-License-Identifier = "CC-BY-4.0"
[[annotations]]
......@@ -30,7 +30,7 @@ path = [
"_typos.toml"
]
precedence = "aggregate"
SPDX-FileCopyrightText = "2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss"
SPDX-FileCopyrightText = "2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss"
SPDX-License-Identifier = "CC0-1.0"
[[annotations]]
......@@ -39,5 +39,5 @@ path = [
".gitlab-ci.yml"
]
precedence = "aggregate"
SPDX-FileCopyrightText = "2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss"
SPDX-FileCopyrightText = "2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss"
SPDX-License-Identifier = "BSD-3-Clause"
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......@@ -13,5 +13,8 @@
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
include(CMakeFindDependencyMacro)
find_dependency(fortran-support REQUIRED)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(@PROJECT_NAME@ REQUIRED_VARS @PROJECT_NAME@_DIR)
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......@@ -77,7 +77,6 @@ function(get_library package_target tag)
set(BUILD_TESTING
"${save_BUILD_TESTING}"
CACHE BOOL "Copy back the original value" FORCE)
endif()
endif()
......
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......
! ICON
!
! ---------------------------------------------------------------
! Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Contact information: icon-model.org
!
! See AUTHORS.TXT for a list of authors
......
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......@@ -54,9 +54,9 @@ target_include_directories(
$<INSTALL_INTERFACE:$<$<COMPILE_LANGUAGE:Fortran>:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>>
)
target_link_libraries(iconmath-horizontal PRIVATE fortran-support::fortran-support)
target_link_libraries(iconmath-horizontal PRIVATE iconmath-support)
target_link_libraries(iconmath-horizontal PRIVATE iconmath-interpolation)
target_link_libraries(iconmath-horizontal PUBLIC fortran-support::fortran-support)
target_link_libraries(iconmath-horizontal PUBLIC iconmath-support)
target_link_libraries(iconmath-horizontal PUBLIC iconmath-interpolation)
install(TARGETS iconmath-horizontal EXPORT "${PROJECT_NAME}-targets")
......
! ICON
!
! ---------------------------------------------------------------
! Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Contact information: icon-model.org
!
! See AUTHORS.TXT for a list of authors
......@@ -34,8 +34,8 @@ MODULE mo_lib_divrot
!
!
!
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: wp => real64, &
sp => real32
USE mo_iconlib_kind, ONLY: wp, vp
USE mo_lib_loopindices, ONLY: get_indices_c_lib, get_indices_e_lib, get_indices_v_lib
USE mo_fortran_tools, ONLY: init, set_acc_host_or_device
......@@ -50,12 +50,6 @@ MODULE mo_lib_divrot
PUBLIC :: rot_vertex_lib, rot_vertex_ri_lib
PUBLIC :: rot_vertex_atmos_lib
#ifdef __MIXED_PRECISION
INTEGER, PARAMETER :: vp = sp
#else
INTEGER, PARAMETER :: vp = wp
#endif
INTERFACE rot_vertex_lib
MODULE PROCEDURE rot_vertex_atmos_lib
......@@ -97,7 +91,7 @@ CONTAINS
& lsq_qtmat_c, lsq_rmat_rdiag_c, &
& lsq_rmat_utri_c, lsq_moments, p_coeff, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& nlev, slev, elev, nproma, l_consv, lacc, acc_async)
& slev, elev, nproma, l_consv, lacc, acc_async)
! edge based cell centered variable of which divergence is computed
REAL(wp), INTENT(IN) :: p_cc(:, :, :)
......@@ -137,9 +131,6 @@ CONTAINS
! end_index needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_endidx_in
! total vertical level
INTEGER, INTENT(IN) :: nlev
! vertical start level
INTEGER, INTENT(IN) :: slev
......@@ -160,7 +151,7 @@ CONTAINS
#ifdef __LOOP_EXCHANGE
REAL(wp) :: & !< weights * difference of scalars i j
& z_d(3, nproma, nlev)
& z_d(3, nproma, elev)
#else
REAL(wp) :: z_d(3)
#endif
......@@ -341,7 +332,7 @@ CONTAINS
SUBROUTINE recon_lsq_cell_l_svd_lib(p_cc, cell_neighbor_idx, cell_neighbor_blk, &
& lsq_pseudoinv, lsq_moments, p_coeff, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& nlev, slev, elev, nproma, l_consv, lacc, acc_async)
& slev, elev, nproma, l_consv, lacc, acc_async)
! edge based cell centered variable of which divergence is computed
REAL(wp), INTENT(IN) :: p_cc(:, :, :)
......@@ -375,9 +366,6 @@ CONTAINS
! end_index needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_endidx_in
! total vertical level
INTEGER, INTENT(IN) :: nlev
! vertical start level
INTEGER, INTENT(IN) :: slev
......@@ -398,7 +386,7 @@ CONTAINS
#ifdef __LOOP_EXCHANGE
REAL(wp) :: & !< weights * difference of scalars i j
& z_b(3, nproma, nlev)
& z_b(3, nproma, elev)
#else
REAL(wp) :: z_b(3)
#endif
......@@ -580,7 +568,7 @@ CONTAINS
& lsq_rmat_rdiag_c, lsq_rmat_utri_c, &
& lsq_moments, lsq_qtmat_c, p_coeff, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& nlev, slev, elev, nproma, patch_id, lsq_high_set_dim_c, l_limited_area, lacc)
& slev, elev, nproma, patch_id, lsq_high_set_dim_c, l_limited_area, lacc)
! edge based cell centered variable of which divergence is computed
REAL(wp), INTENT(IN) :: p_cc(:, :, :)
......@@ -620,9 +608,6 @@ CONTAINS
! end_index needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_endidx_in
! total vertical level
INTEGER, INTENT(IN) :: nlev
! vertical start level
INTEGER, INTENT(IN) :: slev
......@@ -645,7 +630,7 @@ CONTAINS
LOGICAL, INTENT(IN), OPTIONAL :: lacc
REAL(wp) :: & !< difference of scalars i j
& z_d(lsq_high_set_dim_c, nproma, nlev)
& z_d(lsq_high_set_dim_c, nproma, elev)
REAL(wp) :: & !< matrix-vector product of transposed
& z_qt_times_d(5) !< Q matrix and d
......@@ -821,7 +806,7 @@ CONTAINS
SUBROUTINE recon_lsq_cell_q_svd_lib(p_cc, lsq_idx_c, lsq_blk_c, &
& lsq_moments, lsq_pseudoinv, p_coeff, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& nlev, slev, elev, nproma, patch_id, lsq_high_set_dim_c, l_limited_area, lacc)
& slev, elev, nproma, patch_id, lsq_high_set_dim_c, l_limited_area, lacc)
! edge based cell centered variable of which divergence is computed
REAL(wp), INTENT(IN) :: p_cc(:, :, :)
......@@ -854,9 +839,6 @@ CONTAINS
! end_index needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_endidx_in
! total vertical level
INTEGER, INTENT(IN) :: nlev
! vertical start level
INTEGER, INTENT(IN) :: slev
......@@ -879,7 +861,7 @@ CONTAINS
LOGICAL, INTENT(IN), OPTIONAL :: lacc
REAL(wp) :: & !< difference of scalars i j
& z_b(lsq_high_set_dim_c, nproma, nlev)
& z_b(lsq_high_set_dim_c, nproma, elev)
INTEGER, POINTER :: & !< Pointer to line and block indices of
& iidx(:, :, :), iblk(:, :, :) !< required stencil
......@@ -1033,7 +1015,7 @@ CONTAINS
& lsq_rmat_rdiag_c, lsq_rmat_utri_c, &
& lsq_moments, lsq_qtmat_c, p_coeff, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& nlev, slev, elev, nproma, patch_id, lsq_high_set_dim_c, l_limited_area, lacc)
& slev, elev, nproma, patch_id, lsq_high_set_dim_c, l_limited_area, lacc)
! edge based cell centered variable of which divergence is computed
REAL(wp), INTENT(IN) :: p_cc(:, :, :)
......@@ -1075,9 +1057,6 @@ CONTAINS
! end_index needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_endidx_in
! total vertical level
INTEGER, INTENT(IN) :: nlev
! vertical start level
INTEGER, INTENT(IN) :: slev
......@@ -1100,7 +1079,7 @@ CONTAINS
LOGICAL, INTENT(IN), OPTIONAL :: lacc
REAL(wp) :: & !< difference of scalars i j
& z_d(lsq_high_set_dim_c, nproma, nlev)
& z_d(lsq_high_set_dim_c, nproma, elev)
REAL(wp) :: & !< matrix-vector product of transposed
& z_qt_times_d(9) !< Q matrix and d
......@@ -1323,7 +1302,7 @@ CONTAINS
& lsq_moments, lsq_pseudoinv, p_coeff, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& i_startblk_init, i_endblk_init, i_startidx_init, i_endidx_init, &
& nlev, slev, elev, nproma, patch_id, lsq_high_set_dim_c, l_limited_area, lacc)
& slev, elev, nproma, patch_id, lsq_high_set_dim_c, l_limited_area, lacc)
! edge based cell centered variable of which divergence is computed
REAL(wp), INTENT(IN) :: p_cc(:, :, :)
......@@ -1368,9 +1347,6 @@ CONTAINS
! end_index needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_endidx_init
! total vertical level
INTEGER, INTENT(IN) :: nlev
! vertical start level
INTEGER, INTENT(IN) :: slev
......@@ -1394,7 +1370,7 @@ CONTAINS
#ifdef __LOOP_EXCHANGE
REAL(wp) :: & !< difference of scalars i j
& z_b(lsq_high_set_dim_c, nproma, nlev)
& z_b(lsq_high_set_dim_c, nproma, elev)
#else
REAL(wp) :: & !< difference of scalars i j
& z_b(9)
......
! ICON
!
! ---------------------------------------------------------------
! Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Contact information: icon-model.org
!
! See AUTHORS.TXT for a list of authors
......@@ -29,8 +29,7 @@ MODULE mo_lib_gradients
!
!
!
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: wp => real64, &
sp => real32
USE mo_iconlib_kind, ONLY: wp, vp
USE mo_lib_loopindices, ONLY: get_indices_c_lib, get_indices_e_lib
USE mo_fortran_tools, ONLY: init, set_acc_host_or_device
......@@ -43,12 +42,6 @@ MODULE mo_lib_gradients
PUBLIC :: grad_green_gauss_cell_lib
PUBLIC :: grad_fe_cell_lib
#ifdef __MIXED_PRECISION
INTEGER, PARAMETER :: vp = sp
#else
INTEGER, PARAMETER :: vp = wp
#endif
INTERFACE grad_green_gauss_cell_lib
MODULE PROCEDURE grad_green_gauss_cell_adv_lib
MODULE PROCEDURE grad_green_gauss_cell_dycore_lib
......@@ -374,7 +367,7 @@ CONTAINS
!$ACC DATA PRESENT(p_cc, p_grad, gradc_bmat, iidx, iblk) IF(lzacc)
!$OMP PARALLEL PRIVATE(i_startblk,i_endblk)
!$OMP PARALLEL
IF (patch_id > 1) THEN
! Fill nest boundaries with zero to avoid trouble with MPI synchronization
......@@ -511,7 +504,7 @@ CONTAINS
!
! 2. reconstruction of cell based geographical gradient
!
!$OMP PARALLEL PRIVATE(i_startblk,i_endblk)
!$OMP PARALLEL
IF (patch_id > 1) THEN
! Fill nest boundaries with zero to avoid trouble with MPI synchronization
......@@ -630,7 +623,7 @@ CONTAINS
!$ACC DATA PRESENT(p_ccpr, p_grad, gradc_bmat, iidx, iblk) IF(lzacc)
!$OMP PARALLEL PRIVATE(i_startblk,i_endblk)
!$OMP PARALLEL
!$OMP DO PRIVATE(jb,jc,jk,i_startidx,i_endidx), ICON_OMP_RUNTIME_SCHEDULE
DO jb = i_startblk, i_endblk
......@@ -769,7 +762,7 @@ CONTAINS
!
!$ACC DATA PRESENT(p_cc, p_grad, geofac_grg, iidx, iblk) IF(lzacc)
!$OMP PARALLEL PRIVATE(i_startblk,i_endblk)
!$OMP PARALLEL
IF (patch_id > 1) THEN
! Fill nest boundaries with zero to avoid trouble with MPI synchronization
......@@ -899,7 +892,7 @@ CONTAINS
!$ACC DATA PRESENT(p_ccpr, p_grad, geofac_grg, iidx, iblk) IF(lzacc)
!$OMP PARALLEL PRIVATE(i_startblk,i_endblk)
!$OMP PARALLEL
!$OMP DO PRIVATE(jb,jc,jk,i_startidx,i_endidx), ICON_OMP_RUNTIME_SCHEDULE
DO jb = i_startblk, i_endblk
......
! ICON
!
! ---------------------------------------------------------------
! Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Contact information: icon-model.org
!
! See AUTHORS.TXT for a list of authors
......@@ -29,7 +29,7 @@ MODULE mo_lib_laplace
!
!
!
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: wp => real64
USE mo_iconlib_kind, ONLY: wp
USE mo_lib_interpolation_scalar, ONLY: edges2verts_scalar_lib, verts2edges_scalar_lib
USE mo_lib_loopindices, ONLY: get_indices_c_lib, get_indices_e_lib
USE mo_lib_divrot, ONLY: div_lib, rot_vertex_atmos_lib
......
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......@@ -57,8 +57,8 @@ target_include_directories(
$<BUILD_INTERFACE:$<$<COMPILE_LANGUAGE:Fortran>:${PROJECT_SOURCE_DIR}/include>>
)
target_link_libraries(iconmath-interpolation PRIVATE fortran-support::fortran-support)
target_link_libraries(iconmath-interpolation PRIVATE iconmath-support)
target_link_libraries(iconmath-interpolation PUBLIC fortran-support::fortran-support)
target_link_libraries(iconmath-interpolation PUBLIC iconmath-support)
install(TARGETS iconmath-interpolation EXPORT "${PROJECT_NAME}-targets")
......
! ICON
!
! ---------------------------------------------------------------
! Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Contact information: icon-model.org
!
! See AUTHORS.TXT for a list of authors
......@@ -23,8 +23,7 @@
MODULE mo_lib_interpolation_vector
!-------------------------------------------------------------------------
!
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: wp => real64, &
sp => real32
USE mo_iconlib_kind, ONLY: wp, vp
USE mo_lib_loopindices, ONLY: get_indices_c_lib
IMPLICIT NONE
......@@ -33,12 +32,6 @@ MODULE mo_lib_interpolation_vector
PUBLIC :: edges2cells_vector_lib
#ifdef __MIXED_PRECISION
INTEGER, PARAMETER :: vp = sp
#else
INTEGER, PARAMETER :: vp = wp
#endif
CONTAINS
!------------------------------------------------------------------------
......
! ICON
!
! ---------------------------------------------------------------
! Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Contact information: icon-model.org
!
! See AUTHORS.TXT for a list of authors
......@@ -22,11 +22,10 @@
MODULE mo_lib_intp_rbf
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: wp => real64, &
dp => real64, &
sp => real32
USE mo_iconlib_kind, ONLY: wp, dp, sp
USE mo_lib_loopindices, ONLY: get_indices_c_lib, get_indices_e_lib, get_indices_v_lib
USE mo_fortran_tools, ONLY: set_acc_host_or_device
USE mo_fortran_tools, ONLY: set_acc_host_or_device
USE mo_exception, ONLY: finish
IMPLICIT NONE
......@@ -36,9 +35,10 @@ MODULE mo_lib_intp_rbf
& rbf_vec_interpol_vertex_lib, rbf_vec_interpol_edge_lib
INTERFACE rbf_vec_interpol_vertex_lib
MODULE PROCEDURE rbf_vec_interpol_vertex_wp_lib
MODULE PROCEDURE rbf_vec_interpol_vertex_vp_lib
END INTERFACE
MODULE PROCEDURE rbf_vec_interpol_vertex_dp_lib
MODULE PROCEDURE rbf_vec_interpol_vertex_dpsp_lib
MODULE PROCEDURE rbf_vec_interpol_vertex_sp_lib
END INTERFACE rbf_vec_interpol_vertex_lib
CONTAINS
......@@ -327,7 +327,7 @@ CONTAINS
!! It takes edge based variables as input and combines them
!! into three dimensional cartesian vectors at each vertex.
!!
SUBROUTINE rbf_vec_interpol_vertex_wp_lib(p_e_in, rbf_vec_idx_v, rbf_vec_blk_v, &
SUBROUTINE rbf_vec_interpol_vertex_dp_lib(p_e_in, rbf_vec_idx_v, rbf_vec_blk_v, &
& rbf_vec_coeff_v, p_u_out, p_v_out, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& slev, elev, nproma, lacc, acc_async)
......@@ -336,7 +336,7 @@ CONTAINS
!
! input components of velocity or horizontal vorticity vectors at edge midpoints
! dim: (nproma,nlev,nblks_e)
REAL(wp), INTENT(IN) :: p_e_in(:, :, :)
REAL(dp), INTENT(IN) :: p_e_in(:, :, :)
! index array defining the stencil of surrounding edges for vector rbf interpolation at each triangle vertex
! (rbf_vec_dim_v,nproma,nblks_v)
......@@ -347,13 +347,13 @@ CONTAINS
! coefficients are working precision array containing the coefficients used for vector rbf interpolation
! at each tringle vertex (input is normal component), dim: (rbf_vec_dim_v,2,nproma,nblks_v)
REAL(wp), TARGET, INTENT(IN) :: rbf_vec_coeff_v(:, :, :, :)
REAL(dp), TARGET, INTENT(IN) :: rbf_vec_coeff_v(:, :, :, :)
! reconstructed x-component (u) of velocity vector, dim: (nproma,nlev,nblks_v)
REAL(wp), INTENT(INOUT) :: p_u_out(:, :, :)
REAL(dp), INTENT(INOUT) :: p_u_out(:, :, :)
! reconstructed y-component (v) of velocity vector, dim: (nproma,nlev,nblks_v)
REAL(wp), INTENT(INOUT) :: p_v_out(:, :, :)
REAL(dp), INTENT(INOUT) :: p_v_out(:, :, :)
! start_block needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_startblk
......@@ -390,7 +390,7 @@ CONTAINS
INTEGER :: i_endidx ! end index
INTEGER, DIMENSION(:, :, :), POINTER :: iidx, iblk
REAL(wp), DIMENSION(:, :, :, :), POINTER :: ptr_coeff
REAL(dp), DIMENSION(:, :, :, :), POINTER :: ptr_coeff
LOGICAL :: lzacc
!-----------------------------------------------------------------------
......@@ -450,17 +450,17 @@ CONTAINS
!$ACC WAIT
END IF
END SUBROUTINE rbf_vec_interpol_vertex_wp_lib
END SUBROUTINE rbf_vec_interpol_vertex_dp_lib
! Variant for mixed precision mode (output fields in single precision)
SUBROUTINE rbf_vec_interpol_vertex_vp_lib(p_e_in, rbf_vec_idx_v, rbf_vec_blk_v, &
SUBROUTINE rbf_vec_interpol_vertex_dpsp_lib(p_e_in, rbf_vec_idx_v, rbf_vec_blk_v, &
& rbf_vec_coeff_v, p_u_out, p_v_out, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& slev, elev, nproma, lacc, acc_async)
! input components of velocity or horizontal vorticity vectors at edge midpoints
! dim: (nproma,nlev,nblks_e)
REAL(wp), INTENT(IN) :: p_e_in(:, :, :)
REAL(dp), INTENT(IN) :: p_e_in(:, :, :)
! index array defining the stencil of surrounding edges for vector rbf interpolation at each triangle vertex
! dim(rbf_vec_dim_v,nproma,nblks_v)
......@@ -471,7 +471,7 @@ CONTAINS
! coefficients are working precision array containing the coefficients used for vector rbf interpolation
! at each triangle vertex (input is normal component), dim(rbf_vec_dim_v,2,nproma,nblks_v)
REAL(wp), TARGET, INTENT(IN) :: rbf_vec_coeff_v(:, :, :, :)
REAL(dp), TARGET, INTENT(IN) :: rbf_vec_coeff_v(:, :, :, :)
! reconstructed x-component (u) of velocity vector, dim: (nproma,nlev,nblks_v)
REAL(sp), INTENT(INOUT) :: p_u_out(:, :, :)
......@@ -514,7 +514,133 @@ CONTAINS
INTEGER :: i_endidx ! end index
INTEGER, DIMENSION(:, :, :), POINTER :: iidx, iblk
REAL(wp), DIMENSION(:, :, :, :), POINTER :: ptr_coeff
REAL(dp), DIMENSION(:, :, :, :), POINTER :: ptr_coeff
LOGICAL :: lzacc
!-----------------------------------------------------------------------
CALL set_acc_host_or_device(lzacc, lacc)
iidx => rbf_vec_idx_v
iblk => rbf_vec_blk_v
ptr_coeff => rbf_vec_coeff_v
!$OMP PARALLEL
!$OMP DO PRIVATE(jb,i_startidx,i_endidx,jk,jv), ICON_OMP_RUNTIME_SCHEDULE
DO jb = i_startblk, i_endblk
CALL get_indices_v_lib(i_startidx_in, i_endidx_in, nproma, jb, i_startblk, i_endblk, &
i_startidx, i_endidx)
!$ACC PARALLEL DEFAULT(PRESENT) ASYNC(1) IF(lzacc)
!$ACC LOOP GANG VECTOR COLLAPSE(2)
#ifdef __LOOP_EXCHANGE
DO jv = i_startidx, i_endidx
DO jk = slev, elev
#else
!$NEC outerloop_unroll(4)
DO jk = slev, elev
DO jv = i_startidx, i_endidx
#endif
p_u_out(jv, jk, jb) = &
ptr_coeff(1, 1, jv, jb)*p_e_in(iidx(1, jv, jb), jk, iblk(1, jv, jb)) + &
ptr_coeff(2, 1, jv, jb)*p_e_in(iidx(2, jv, jb), jk, iblk(2, jv, jb)) + &
ptr_coeff(3, 1, jv, jb)*p_e_in(iidx(3, jv, jb), jk, iblk(3, jv, jb)) + &
ptr_coeff(4, 1, jv, jb)*p_e_in(iidx(4, jv, jb), jk, iblk(4, jv, jb)) + &
ptr_coeff(5, 1, jv, jb)*p_e_in(iidx(5, jv, jb), jk, iblk(5, jv, jb)) + &
ptr_coeff(6, 1, jv, jb)*p_e_in(iidx(6, jv, jb), jk, iblk(6, jv, jb))
p_v_out(jv, jk, jb) = &
ptr_coeff(1, 2, jv, jb)*p_e_in(iidx(1, jv, jb), jk, iblk(1, jv, jb)) + &
ptr_coeff(2, 2, jv, jb)*p_e_in(iidx(2, jv, jb), jk, iblk(2, jv, jb)) + &
ptr_coeff(3, 2, jv, jb)*p_e_in(iidx(3, jv, jb), jk, iblk(3, jv, jb)) + &
ptr_coeff(4, 2, jv, jb)*p_e_in(iidx(4, jv, jb), jk, iblk(4, jv, jb)) + &
ptr_coeff(5, 2, jv, jb)*p_e_in(iidx(5, jv, jb), jk, iblk(5, jv, jb)) + &
ptr_coeff(6, 2, jv, jb)*p_e_in(iidx(6, jv, jb), jk, iblk(6, jv, jb))
END DO
END DO
!$ACC END PARALLEL
END DO
!$OMP END DO NOWAIT
!$OMP END PARALLEL
IF (PRESENT(acc_async)) THEN
IF (.NOT. acc_async) THEN
!$ACC WAIT
END IF
ELSE
!$ACC WAIT
END IF
END SUBROUTINE rbf_vec_interpol_vertex_dpsp_lib
! Variant for single precision mode
SUBROUTINE rbf_vec_interpol_vertex_sp_lib(p_e_in, rbf_vec_idx_v, rbf_vec_blk_v, &
& rbf_vec_coeff_v, p_u_out, p_v_out, &
& i_startblk, i_endblk, i_startidx_in, i_endidx_in, &
& slev, elev, nproma, lacc, acc_async)
! input components of velocity or horizontal vorticity vectors at edge midpoints
! dim: (nproma,nlev,nblks_e)
REAL(sp), INTENT(IN) :: p_e_in(:, :, :)
! index array defining the stencil of surrounding edges for vector rbf interpolation at each triangle vertex
! dim(rbf_vec_dim_v,nproma,nblks_v)
INTEGER, TARGET, INTENT(IN) :: rbf_vec_idx_v(:, :, :)
! ... ditto for the blocks
INTEGER, TARGET, INTENT(IN) :: rbf_vec_blk_v(:, :, :)
! coefficients are working precision array containing the coefficients used for vector rbf interpolation
! at each triangle vertex (input is normal component), dim(rbf_vec_dim_v,2,nproma,nblks_v)
REAL(sp), TARGET, INTENT(IN) :: rbf_vec_coeff_v(:, :, :, :)
! reconstructed x-component (u) of velocity vector, dim: (nproma,nlev,nblks_v)
REAL(sp), INTENT(INOUT) :: p_u_out(:, :, :)
! reconstructed y-component (v) of velocity vector, dim: (nproma,nlev,nblks_v)
REAL(sp), INTENT(INOUT) :: p_v_out(:, :, :)
! start_block needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_startblk
! end_block needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_endblk
! start_index needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_startidx_in
! end_index needed for get_indices_c_lib
INTEGER, INTENT(IN) :: i_endidx_in
! vertical start level
INTEGER, INTENT(IN) :: slev
! vertical end level
INTEGER, INTENT(IN) :: elev
! inner loop length/vector length
INTEGER, INTENT(IN) :: nproma
! if true, use OpenACC
LOGICAL, INTENT(IN), OPTIONAL :: lacc
!< async OpenACC
LOGICAL, INTENT(IN), OPTIONAL :: acc_async
! !LOCAL VARIABLES
INTEGER :: jv, jk, jb ! integer over vertices, levels, and blocks,
INTEGER :: i_startidx ! start index
INTEGER :: i_endidx ! end index
INTEGER, DIMENSION(:, :, :), POINTER :: iidx, iblk
REAL(sp), DIMENSION(:, :, :, :), POINTER :: ptr_coeff
LOGICAL :: lzacc
!-----------------------------------------------------------------------
......@@ -576,7 +702,7 @@ CONTAINS
!$ACC WAIT
END IF
END SUBROUTINE rbf_vec_interpol_vertex_vp_lib
END SUBROUTINE rbf_vec_interpol_vertex_sp_lib
!-------------------------------------------------------------------------
!
......
# ICON
#
# ---------------------------------------------------------------
# Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
# Contact information: icon-model.org
#
# See AUTHORS.TXT for a list of authors
......@@ -59,7 +59,7 @@ target_include_directories(
$<INSTALL_INTERFACE:$<$<COMPILE_LANGUAGE:Fortran>:$<INSTALL_PREFIX>/${CMAKE_INSTALL_INCLUDEDIR}>>
)
target_link_libraries(iconmath-support PRIVATE fortran-support::fortran-support)
target_link_libraries(iconmath-support PUBLIC fortran-support::fortran-support)
install(TARGETS iconmath-support EXPORT "${PROJECT_NAME}-targets")
......
! ICON
!
! ---------------------------------------------------------------
! Copyright (C) 2004-2024, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Copyright (C) 2004-2025, DWD, MPI-M, DKRZ, KIT, ETH, MeteoSwiss
! Contact information: icon-model.org
!
! See AUTHORS.TXT for a list of authors
......@@ -23,7 +23,7 @@ MODULE mo_gridman_constants
!
!
!
USE, INTRINSIC :: ISO_FORTRAN_ENV, ONLY: wp => real64
USE mo_iconlib_kind, ONLY: wp
IMPLICIT NONE
......