New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14219 for NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/lib_fortran_generic.h90 – NEMO

Ignore:
Timestamp:
2020-12-18T18:52:57+01:00 (4 years ago)
Author:
mcastril
Message:

Add Mixed Precision support by Oriol Tintó

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/lib_fortran_generic.h90

    r13226 r14219  
     1#if defined SINGLE_PRECISION 
     2#   define TYPE                          REAL(sp) 
     3#else 
     4#   define TYPE                          REAL(dp) 
     5#endif 
     6 
    17#if defined GLOBSUM_CODE 
    28!                          ! FUNCTION FUNCTION_GLOBSUM ! 
    39#   if defined DIM_1d 
    4 #      define ARRAY_TYPE(i,j,k)    REAL(wp)                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
     10#      define ARRAY_TYPE(i,j,k)    TYPE                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
    511#      define ARRAY_IN(i,j,k)   ptab(i) 
    612#      define ARRAY2_IN(i,j,k)  ptab2(i) 
     
    1016#   endif 
    1117#   if defined DIM_2d 
    12 #      define ARRAY_TYPE(i,j,k)    REAL(wp)                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
     18#      define ARRAY_TYPE(i,j,k)    TYPE                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
    1319#      define ARRAY_IN(i,j,k)   ptab(i,j) 
    1420#      define ARRAY2_IN(i,j,k)  ptab2(i,j) 
     
    1723#   endif 
    1824#   if defined DIM_3d 
    19 #      define ARRAY_TYPE(i,j,k)    REAL(wp)                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
     25#      define ARRAY_TYPE(i,j,k)    TYPE                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
    2026#      define ARRAY_IN(i,j,k)   ptab(i,j,k) 
    2127#      define ARRAY2_IN(i,j,k)  ptab2(i,j,k) 
     
    3440      CHARACTER(len=*),  INTENT(in   ) ::   cdname  ! name of the calling subroutine 
    3541      ARRAY_TYPE(:,:,:)                             ! array on which operation is applied 
    36       REAL(wp)   ::  FUNCTION_GLOBSUM 
     42      TYPE   ::  FUNCTION_GLOBSUM 
    3743      ! 
    3844      !!----------------------------------------------------------------------- 
    39       ! 
    40       REAL(wp)                              ::   FUNCTION_GLOB_OP   ! global sum 
    4145      !! 
    4246      COMPLEX(dp)::   ctmp 
    43       REAL(wp)   ::   ztmp 
     47      TYPE   ::   ztmp 
    4448      INTEGER    ::   ji, jj, jk   ! dummy loop indices 
    4549      INTEGER    ::   ipi, ipj, ipk    ! dimensions 
     
    6569   END FUNCTION FUNCTION_GLOBSUM 
    6670 
     71#undef TYPE 
    6772#undef ARRAY_TYPE 
    6873#undef ARRAY2_TYPE 
     
    7782!                          ! FUNCTION FUNCTION_GLOBMINMAX ! 
    7883#   if defined DIM_2d 
    79 #      define ARRAY_TYPE(i,j,k)    REAL(wp)                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
     84#      define ARRAY_TYPE(i,j,k)    TYPE                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
    8085#      define ARRAY_IN(i,j,k)   ptab(i,j) 
    8186#      define ARRAY2_IN(i,j,k)  ptab2(i,j) 
     
    8388#   endif 
    8489#   if defined DIM_3d 
    85 #      define ARRAY_TYPE(i,j,k)    REAL(wp)                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
     90#      define ARRAY_TYPE(i,j,k)    TYPE                 , INTENT(in   ) ::   ARRAY_IN(i,j,k) 
    8691#      define ARRAY_IN(i,j,k)   ptab(i,j,k) 
    8792#      define ARRAY2_IN(i,j,k)  ptab2(i,j,k) 
     
    103108      CHARACTER(len=*),  INTENT(in   ) ::   cdname  ! name of the calling subroutine 
    104109      ARRAY_TYPE(:,:,:)                             ! array on which operation is applied 
    105       REAL(wp)   ::  FUNCTION_GLOBMINMAX 
     110      TYPE   ::  FUNCTION_GLOBMINMAX 
    106111      ! 
    107112      !!----------------------------------------------------------------------- 
    108113      ! 
    109       REAL(wp)                              ::   FUNCTION_GLOB_OP   ! global sum 
    110114      !! 
    111115      COMPLEX(dp)::   ctmp 
     
    129133   END FUNCTION FUNCTION_GLOBMINMAX 
    130134 
     135#undef TYPE 
    131136#undef ARRAY_TYPE 
    132137#undef ARRAY2_TYPE 
Note: See TracChangeset for help on using the changeset viewer.