Skip to content
Snippets Groups Projects
Commit 1a8769d4 authored by Sebastien MASSON's avatar Sebastien MASSON
Browse files

bugfix and cleaning

parent c3e7cc60
No related branches found
No related tags found
No related merge requests found
......@@ -79,59 +79,34 @@ MODULE lib_fortran
CONTAINS
# define GLOBSUM_CODE
# define DIM_1d
# define FUNCTION_GLOBSUM glob_sum_1d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBSUM
# include "lib_fortran_generic.h90"
# undef DIM_1d
# define DIM_2d
# define OPERATION_GLOBSUM
# define FUNCTION_GLOBSUM glob_sum_2d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBSUM
# undef OPERATION_GLOBSUM
# include "lib_fortran_generic.h90"
# undef DIM_2d
# define DIM_3d
# define OPERATION_GLOBSUM
# define FUNCTION_GLOBSUM glob_sum_3d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBSUM
# undef OPERATION_GLOBSUM
# include "lib_fortran_generic.h90"
# undef DIM_3d
# undef GLOBSUM_CODE
# define GLOBMINMAX_CODE
# define DIM_2d
# define OPERATION_GLOBMIN
# define FUNCTION_GLOBMINMAX glob_min_2d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBMINMAX
# undef OPERATION_GLOBMIN
# define OPERATION_GLOBMAX
# define FUNCTION_GLOBMINMAX glob_max_2d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBMINMAX
# undef OPERATION_GLOBMAX
# define OPERATION_GLOBMIN
# include "lib_fortran_generic.h90"
# undef OPERATION_GLOBMIN
# define OPERATION_GLOBMAX
# include "lib_fortran_generic.h90"
# undef OPERATION_GLOBMAX
# undef DIM_2d
# define DIM_3d
# define OPERATION_GLOBMIN
# define FUNCTION_GLOBMINMAX glob_min_3d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBMINMAX
# undef OPERATION_GLOBMIN
# define OPERATION_GLOBMAX
# define FUNCTION_GLOBMINMAX glob_max_3d
# include "lib_fortran_generic.h90"
# undef FUNCTION_GLOBMINMAX
# undef OPERATION_GLOBMAX
# undef DIM_3d
# define OPERATION_GLOBMIN
# include "lib_fortran_generic.h90"
# undef OPERATION_GLOBMIN
# define OPERATION_GLOBMAX
# include "lib_fortran_generic.h90"
# undef OPERATION_GLOBMAX
# undef DIM_3
# undef GLOBMINMAX_CODE
! ! FUNCTION local_sum !
......
#if defined GLOBSUM_CODE
! ! FUNCTION FUNCTION_GLOBSUM !
# if defined DIM_1d
# define XD 1d
# define ARRAY_TYPE(i,j,k) REAL(wp) , INTENT(in ) :: ARRAY_IN(i,j,k)
# define ARRAY_IN(i,j,k) ptab(i)
# define ARRAY2_IN(i,j,k) ptab2(i)
......@@ -9,13 +10,16 @@
# define MASK_ARRAY(i,j) 1.
# endif
# if defined DIM_2d
# define XD 2d
# 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 ARRAY2_IN(i,j,k) ptab2(i,j)
# define J_SIZE(ptab) SIZE(ptab,2)
# define K_SIZE(ptab) 1
# define MASK_ARRAY(i,j) tmask_i(i,j)
# endif
# if defined DIM_3d
# define XD 3d
# 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 ARRAY2_IN(i,j,k) ptab2(i,j,k)
......@@ -24,16 +28,14 @@
# define MASK_ARRAY(i,j) tmask_i(i,j)
# endif
FUNCTION FUNCTION_GLOBSUM( cdname, ptab )
FUNCTION glob_sum_/**/XD/**/( cdname, ptab )
!!----------------------------------------------------------------------
CHARACTER(len=*), INTENT(in ) :: cdname ! name of the calling subroutine
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
REAL(wp) :: ztmp
INTEGER :: ji, jj, jk ! dummy loop indices
......@@ -63,10 +65,11 @@
END DO
END DO
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 ARRAY2_TYPE
#undef ARRAY_IN
......@@ -79,38 +82,34 @@
#if defined GLOBMINMAX_CODE
! ! FUNCTION FUNCTION_GLOBMINMAX !
# if defined DIM_2d
# define XD 2d
# 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 ARRAY2_IN(i,j,k) ptab2(i,j)
# define K_SIZE(ptab) 1
# endif
# if defined DIM_3d
# define XD 3d
# 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 ARRAY2_IN(i,j,k) ptab2(i,j,k)
# define K_SIZE(ptab) SIZE(ptab,3)
# endif
# if defined OPERATION_GLOBMIN
# define SCALAR_OPERATION min
# define ARRAY_OPERATION minval
# define MPP_OPERATION mpp_min
# define OPER min
# endif
# if defined OPERATION_GLOBMAX
# define SCALAR_OPERATION max
# define ARRAY_OPERATION maxval
# define MPP_OPERATION mpp_max
# define OPER max
# endif
FUNCTION FUNCTION_GLOBMINMAX( cdname, ptab )
FUNCTION glob_/**/OPER/**/_/**/XD/**/( cdname, ptab )
!!----------------------------------------------------------------------
CHARACTER(len=*), INTENT(in ) :: cdname ! name of the calling subroutine
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
REAL(wp) :: ztmp
INTEGER :: jk ! dummy loop indices
......@@ -119,24 +118,22 @@
!
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
ztmp = SCALAR_OPERATION(ztmp, ARRAY_OPERATION( ARRAY_IN(:,:,jk)*tmask_i(:,:) ))
ztmp = OPER/**/(ztmp, OPER/**/val( ARRAY_IN(:,:,jk)*tmask_i(:,:) ))
ENDDO
CALL MPP_OPERATION( cdname, ztmp)
FUNCTION_GLOBMINMAX = ztmp
CALL mpp_/**/OPER/**/( cdname, ztmp)
glob_/**/OPER/**/_/**/XD = ztmp
END FUNCTION FUNCTION_GLOBMINMAX
END FUNCTION glob_/**/OPER/**/_/**/XD
#undef XD
#undef ARRAY_TYPE
#undef ARRAY2_TYPE
#undef ARRAY_IN
#undef ARRAY2_IN
#undef K_SIZE
#undef SCALAR_OPERATION
#undef ARRAY_OPERATION
#undef MPP_OPERATION
#undef OPER
# 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