MODULE lib_fortran_crs !!====================================================================== !! *** MODULE lib_fortran *** !! Fortran utilities: includes some low levels fortran functionality !!====================================================================== !! History : 3.2 ! 2010-05 (M. Dunphy, R. Benshila) Original code !! 3.4 ! 2013-06 (C. Rousset) add glob_min, glob_max !! + 3d dim. of input is fexible (jpk, jpl...) !!---------------------------------------------------------------------- !!---------------------------------------------------------------------- !! glob_sum : generic interface for global masked summation over !! the interior domain for 1 or 2 2D or 3D arrays !! it works only for T points !! SIGN : generic interface for SIGN to overwrite f95 behaviour !! of intrinsinc sign function !!---------------------------------------------------------------------- USE par_oce ! Ocean parameter USE lib_mpp ! distributed memory computing USE crs IMPLICIT NONE PRIVATE PUBLIC glob_sum_crs ! used in many places INTERFACE glob_sum_crs MODULE PROCEDURE glob_sum_2d, glob_sum_3d END INTERFACE !!---------------------------------------------------------------------- !! NEMO/OPA 3.3 , NEMO Consortium (2010) !! $Id: lib_fortran.F90 4161 2013-11-07 10:01:27Z cetlod $ !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) !!---------------------------------------------------------------------- CONTAINS #if ! defined key_mpp_rep ! --- SUM --- FUNCTION glob_sum_2d( ptab ) !!----------------------------------------------------------------------- !! *** FUNCTION glob_sum_2D *** !! !! ** Purpose : perform a masked sum on the inner global domain of a 2D array !!----------------------------------------------------------------------- REAL(wp), INTENT(in), DIMENSION(:,:) :: ptab ! input 2D array REAL(wp) :: glob_sum_2d ! global masked sum !!----------------------------------------------------------------------- ! glob_sum_2d = SUM( ptab(:,:)*tmask_i_crs(:,:) ) IF( lk_mpp ) CALL mpp_sum( glob_sum_2d ) ! END FUNCTION glob_sum_2d FUNCTION glob_sum_3d( ptab ) !!----------------------------------------------------------------------- !! *** FUNCTION glob_sum_3D *** !! !! ** Purpose : perform a masked sum on the inner global domain of a 3D array !!----------------------------------------------------------------------- REAL(wp), INTENT(in), DIMENSION(:,:,:) :: ptab ! input 3D array REAL(wp) :: glob_sum_3d ! global masked sum !! INTEGER :: jk INTEGER :: ijpk ! local variable: size of the 3d dimension of ptab !!----------------------------------------------------------------------- ! ijpk = SIZE(ptab,3) ! glob_sum_3d = 0.e0 DO jk = 1, ijpk glob_sum_3d = glob_sum_3d + SUM( ptab(:,:,jk)*tmask_i_crs(:,:) ) END DO IF( lk_mpp ) CALL mpp_sum( glob_sum_3d ) ! END FUNCTION glob_sum_3d #endif !!====================================================================== END MODULE lib_fortran_crs