Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
G
GOSI9esm
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Consortium Members
UKMO
GOSI
GOSI9esm
Commits
1a8769d4
Commit
1a8769d4
authored
3 years ago
by
Sebastien MASSON
Browse files
Options
Downloads
Patches
Plain Diff
bugfix and cleaning
parent
c3e7cc60
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/OCE/lib_fortran.F90
+16
-41
16 additions, 41 deletions
src/OCE/lib_fortran.F90
src/OCE/lib_fortran_generic.h90
+22
-25
22 additions, 25 deletions
src/OCE/lib_fortran_generic.h90
with
38 additions
and
66 deletions
src/OCE/lib_fortran.F90
+
16
−
41
View file @
1a8769d4
...
...
@@ -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 !
...
...
This diff is collapsed.
Click to expand it.
src/OCE/lib_fortran_generic.h90
+
22
−
25
View file @
1a8769d4
#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
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment