Skip to content
Snippets Groups Projects
Commit b10ff249 authored by Sebastien Masson's avatar Sebastien Masson
Browse files

Merge branch '16-remove-tmask_h' into 'main'

Resolve "remove tmask_h"

Closes #16

See merge request nemo/nemo!30
parents c3e7cc60 1a8769d4
No related branches found
No related tags found
No related merge requests found
...@@ -79,59 +79,34 @@ MODULE lib_fortran ...@@ -79,59 +79,34 @@ MODULE lib_fortran
CONTAINS CONTAINS
# define GLOBSUM_CODE # define GLOBSUM_CODE
# define DIM_1d # define DIM_1d
# define FUNCTION_GLOBSUM glob_sum_1d # include "lib_fortran_generic.h90"
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBSUM
# undef DIM_1d # undef DIM_1d
# define DIM_2d # define DIM_2d
# define OPERATION_GLOBSUM # include "lib_fortran_generic.h90"
# define FUNCTION_GLOBSUM glob_sum_2d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBSUM
# undef OPERATION_GLOBSUM
# undef DIM_2d # undef DIM_2d
# define DIM_3d # define DIM_3d
# define OPERATION_GLOBSUM # include "lib_fortran_generic.h90"
# define FUNCTION_GLOBSUM glob_sum_3d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBSUM
# undef OPERATION_GLOBSUM
# undef DIM_3d # undef DIM_3d
# undef GLOBSUM_CODE # undef GLOBSUM_CODE
# define GLOBMINMAX_CODE # define GLOBMINMAX_CODE
# define DIM_2d # define DIM_2d
# define OPERATION_GLOBMIN # define OPERATION_GLOBMIN
# define FUNCTION_GLOBMINMAX glob_min_2d # include "lib_fortran_generic.h90"
# include "lib_fortran_generic.h90" # undef OPERATION_GLOBMIN
# undef FUNCTION_GLOBMINMAX # define OPERATION_GLOBMAX
# undef OPERATION_GLOBMIN # include "lib_fortran_generic.h90"
# define OPERATION_GLOBMAX # undef OPERATION_GLOBMAX
# define FUNCTION_GLOBMINMAX glob_max_2d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBMINMAX
# undef OPERATION_GLOBMAX
# undef DIM_2d # undef DIM_2d
# define DIM_3d # define DIM_3d
# define OPERATION_GLOBMIN # define OPERATION_GLOBMIN
# define FUNCTION_GLOBMINMAX glob_min_3d # include "lib_fortran_generic.h90"
# include "lib_fortran_generic.h90" # undef OPERATION_GLOBMIN
# undef FUNCTION_GLOBMINMAX # define OPERATION_GLOBMAX
# undef OPERATION_GLOBMIN # include "lib_fortran_generic.h90"
# define OPERATION_GLOBMAX # undef OPERATION_GLOBMAX
# define FUNCTION_GLOBMINMAX glob_max_3d # undef DIM_3
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBMINMAX
# undef OPERATION_GLOBMAX
# undef DIM_3d
# undef GLOBMINMAX_CODE # undef GLOBMINMAX_CODE
! ! FUNCTION local_sum ! ! ! FUNCTION local_sum !
......
#if defined GLOBSUM_CODE #if defined GLOBSUM_CODE
! ! FUNCTION FUNCTION_GLOBSUM ! ! ! FUNCTION FUNCTION_GLOBSUM !
# if defined DIM_1d # if defined DIM_1d
# define XD 1d
# define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k) # define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k)
# define ARRAY_IN(i,j,k) ptab(i) # define ARRAY_IN(i,j,k) ptab(i)
# define ARRAY2_IN(i,j,k) ptab2(i) # define ARRAY2_IN(i,j,k) ptab2(i)
...@@ -9,13 +10,16 @@ ...@@ -9,13 +10,16 @@
# define MASK_ARRAY(i,j) 1. # define MASK_ARRAY(i,j) 1.
# endif # endif
# if defined DIM_2d # if defined DIM_2d
# define XD 2d
# define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k) # define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k)
# define ARRAY_IN(i,j,k) ptab(i,j) # define ARRAY_IN(i,j,k) ptab(i,j)
# define ARRAY2_IN(i,j,k) ptab2(i,j) # define ARRAY2_IN(i,j,k) ptab2(i,j)
# define J_SIZE(ptab) SIZE(ptab,2) # define J_SIZE(ptab) SIZE(ptab,2)
# define K_SIZE(ptab) 1 # define K_SIZE(ptab) 1
# define MASK_ARRAY(i,j) tmask_i(i,j)
# endif # endif
# if defined DIM_3d # if defined DIM_3d
# define XD 3d
# define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k) # define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k)
# define ARRAY_IN(i,j,k) ptab(i,j,k) # define ARRAY_IN(i,j,k) ptab(i,j,k)
# define ARRAY2_IN(i,j,k) ptab2(i,j,k) # define ARRAY2_IN(i,j,k) ptab2(i,j,k)
...@@ -24,16 +28,14 @@ ...@@ -24,16 +28,14 @@
# define MASK_ARRAY(i,j) tmask_i(i,j) # define MASK_ARRAY(i,j) tmask_i(i,j)
# endif # endif
FUNCTION FUNCTION_GLOBSUM( cdname, ptab ) FUNCTION glob_sum_/**/XD/**/( cdname, ptab )
!!---------------------------------------------------------------------- !!----------------------------------------------------------------------
CHARACTER(len=*), INTENT(in ) :: cdname ! name of the calling subroutine CHARACTER(len=*), INTENT(in ) :: cdname ! name of the calling subroutine
ARRAY_TYPE(:,:,:) ! array on which operation is applied ARRAY_TYPE(:,:,:) ! array on which operation is applied
REAL(wp) :: FUNCTION_GLOBSUM REAL(wp) :: glob_sum_/**/XD
! !
!!----------------------------------------------------------------------- !!-----------------------------------------------------------------------
! !
REAL(wp) :: FUNCTION_GLOB_OP ! global sum
!!
COMPLEX(dp):: ctmp COMPLEX(dp):: ctmp
REAL(wp) :: ztmp REAL(wp) :: ztmp
INTEGER :: ji, jj, jk ! dummy loop indices INTEGER :: ji, jj, jk ! dummy loop indices
...@@ -63,10 +65,11 @@ ...@@ -63,10 +65,11 @@
END DO END DO
END DO END DO
CALL mpp_sum( cdname, ctmp ) ! sum over the global domain CALL mpp_sum( cdname, ctmp ) ! sum over the global domain
FUNCTION_GLOBSUM = REAL(ctmp,wp) glob_sum_/**/XD = REAL(ctmp,wp)
END FUNCTION FUNCTION_GLOBSUM END FUNCTION glob_sum_/**/XD
#undef XD
#undef ARRAY_TYPE #undef ARRAY_TYPE
#undef ARRAY2_TYPE #undef ARRAY2_TYPE
#undef ARRAY_IN #undef ARRAY_IN
...@@ -79,38 +82,34 @@ ...@@ -79,38 +82,34 @@
#if defined GLOBMINMAX_CODE #if defined GLOBMINMAX_CODE
! ! FUNCTION FUNCTION_GLOBMINMAX ! ! ! FUNCTION FUNCTION_GLOBMINMAX !
# if defined DIM_2d # if defined DIM_2d
# define XD 2d
# define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k) # define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k)
# define ARRAY_IN(i,j,k) ptab(i,j) # define ARRAY_IN(i,j,k) ptab(i,j)
# define ARRAY2_IN(i,j,k) ptab2(i,j) # define ARRAY2_IN(i,j,k) ptab2(i,j)
# define K_SIZE(ptab) 1 # define K_SIZE(ptab) 1
# endif # endif
# if defined DIM_3d # if defined DIM_3d
# define XD 3d
# define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k) # define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k)
# define ARRAY_IN(i,j,k) ptab(i,j,k) # define ARRAY_IN(i,j,k) ptab(i,j,k)
# define ARRAY2_IN(i,j,k) ptab2(i,j,k) # define ARRAY2_IN(i,j,k) ptab2(i,j,k)
# define K_SIZE(ptab) SIZE(ptab,3) # define K_SIZE(ptab) SIZE(ptab,3)
# endif # endif
# if defined OPERATION_GLOBMIN # if defined OPERATION_GLOBMIN
# define SCALAR_OPERATION min # define OPER min
# define ARRAY_OPERATION minval
# define MPP_OPERATION mpp_min
# endif # endif
# if defined OPERATION_GLOBMAX # if defined OPERATION_GLOBMAX
# define SCALAR_OPERATION max # define OPER max
# define ARRAY_OPERATION maxval
# define MPP_OPERATION mpp_max
# endif # endif
FUNCTION FUNCTION_GLOBMINMAX( cdname, ptab ) FUNCTION glob_/**/OPER/**/_/**/XD/**/( cdname, ptab )
!!---------------------------------------------------------------------- !!----------------------------------------------------------------------
CHARACTER(len=*), INTENT(in ) :: cdname ! name of the calling subroutine CHARACTER(len=*), INTENT(in ) :: cdname ! name of the calling subroutine
ARRAY_TYPE(:,:,:) ! array on which operation is applied ARRAY_TYPE(:,:,:) ! array on which operation is applied
REAL(wp) :: FUNCTION_GLOBMINMAX REAL(wp) :: glob_/**/OPER/**/_/**/XD
! !
!!----------------------------------------------------------------------- !!-----------------------------------------------------------------------
! !
REAL(wp) :: FUNCTION_GLOB_OP ! global sum
!!
COMPLEX(dp):: ctmp COMPLEX(dp):: ctmp
REAL(wp) :: ztmp REAL(wp) :: ztmp
INTEGER :: jk ! dummy loop indices INTEGER :: jk ! dummy loop indices
...@@ -119,24 +118,22 @@ ...@@ -119,24 +118,22 @@
! !
ipk = K_SIZE(ptab) ! 3rd dimension ipk = K_SIZE(ptab) ! 3rd dimension
! !
ztmp = ARRAY_OPERATION( ARRAY_IN(:,:,1)*tmask_i(:,:) ) ztmp = OPER/**/val( ARRAY_IN(:,:,1)*tmask_i(:,:) )
DO jk = 2, ipk DO jk = 2, ipk
ztmp = SCALAR_OPERATION(ztmp, ARRAY_OPERATION( ARRAY_IN(:,:,jk)*tmask_i(:,:) )) ztmp = OPER/**/(ztmp, OPER/**/val( ARRAY_IN(:,:,jk)*tmask_i(:,:) ))
ENDDO ENDDO
CALL MPP_OPERATION( cdname, ztmp) CALL mpp_/**/OPER/**/( cdname, ztmp)
FUNCTION_GLOBMINMAX = ztmp
glob_/**/OPER/**/_/**/XD = ztmp
END FUNCTION FUNCTION_GLOBMINMAX END FUNCTION glob_/**/OPER/**/_/**/XD
#undef XD
#undef ARRAY_TYPE #undef ARRAY_TYPE
#undef ARRAY2_TYPE #undef ARRAY2_TYPE
#undef ARRAY_IN #undef ARRAY_IN
#undef ARRAY2_IN #undef ARRAY2_IN
#undef K_SIZE #undef K_SIZE
#undef SCALAR_OPERATION #undef OPER
#undef ARRAY_OPERATION
#undef MPP_OPERATION
# endif # endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment