Changeset 681 for trunk/NEMO/OPA_SRC/lib_mpp.F90
- Timestamp:
- 2007-06-29T18:31:31+02:00 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/lib_mpp.F90
r635 r681 26 26 !! mppmin_int , mppmin_a_int , mppmin_real, mppmin_a_real 27 27 !! mpp_max : generic interface for : 28 !! mppmax_ real, mppmax_a_real28 !! mppmax_int , mppmax_a_int , mppmax_real, mppmax_a_real 29 29 !! mpp_sum : generic interface for : 30 30 !! mppsum_int , mppsum_a_int , mppsum_real, mppsum_a_real … … 48 48 !!---------------------------------------------------------------------- 49 49 !! OPA 9.0 , LOCEAN-IPSL (2005) 50 !! $Header $50 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/OPA_SRC/lib_mpp.F90,v 1.21 2007/06/05 10:28:55 opalod Exp $ 51 51 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 52 52 !!--------------------------------------------------------------------- … … 77 77 END INTERFACE 78 78 INTERFACE mpp_max 79 MODULE PROCEDURE mppmax_a_ real, mppmax_real79 MODULE PROCEDURE mppmax_a_int, mppmax_int, mppmax_a_real, mppmax_real 80 80 END INTERFACE 81 81 INTERFACE mpp_sum … … 270 270 !!---------------------------------------------------------------------- 271 271 !! OPA 9.0 , LOCEAN-IPSL (2005) 272 !! $Header $272 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/OPA_SRC/lib_mpp.F90,v 1.21 2007/06/05 10:28:55 opalod Exp $ 273 273 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 274 274 !!--------------------------------------------------------------------- … … 3069 3069 3070 3070 3071 SUBROUTINE mppmax_a_int( ktab, kdim ) 3072 !!---------------------------------------------------------------------- 3073 !! *** routine mppmax_a_int *** 3074 !! 3075 !! ** Purpose : Find maximum value in an integer layout array 3076 !! 3077 !!---------------------------------------------------------------------- 3078 !! * Arguments 3079 INTEGER , INTENT( in ) :: kdim ! size of array 3080 INTEGER , INTENT(inout), DIMENSION(kdim) :: ktab ! input array 3081 3082 #if defined key_mpp_shmem 3083 !! * Local declarations (SHMEM version) 3084 INTEGER :: ji 3085 INTEGER, SAVE :: ibool=0 3086 3087 IF( kdim > jpmppsum ) CALL ctl_stop( 'mppmax_a_int routine : kdim is too big', & 3088 & 'change jpmppsum dimension in mpp.h' ) 3089 3090 DO ji = 1, kdim 3091 niltab_shmem(ji) = ktab(ji) 3092 END DO 3093 CALL barrier() 3094 IF(ibool == 0 ) THEN 3095 CALL shmem_int8_max_to_all (niltab_shmem,niltab_shmem,kdim,0,0 & 3096 ,N$PES,nil1wrk_shmem,nil1sync_shmem ) 3097 ELSE 3098 CALL shmem_int8_max_to_all (niltab_shmem,niltab_shmem,kdim,0,0 & 3099 ,N$PES,nil2wrk_shmem,nil2sync_shmem ) 3100 ENDIF 3101 CALL barrier() 3102 ibool=ibool+1 3103 ibool=MOD( ibool,2) 3104 DO ji = 1, kdim 3105 ktab(ji) = niltab_shmem(ji) 3106 END DO 3107 3108 # elif defined key_mpp_mpi 3109 3110 !! * Local variables (MPI version) 3111 INTEGER :: ierror 3112 INTEGER, DIMENSION(kdim) :: iwork 3113 3114 CALL mpi_allreduce( ktab, iwork, kdim, mpi_integer, & 3115 & mpi_max, mpi_comm_opa, ierror ) 3116 3117 ktab(:) = iwork(:) 3118 #endif 3119 3120 END SUBROUTINE mppmax_a_int 3121 3122 3123 SUBROUTINE mppmax_int( ktab ) 3124 !!---------------------------------------------------------------------- 3125 !! *** routine mppmax_int *** 3126 !! 3127 !! ** Purpose : 3128 !! Massively parallel processors 3129 !! Find maximum value in an integer layout array 3130 !! 3131 !!---------------------------------------------------------------------- 3132 !! * Arguments 3133 INTEGER, INTENT(inout) :: ktab ! ??? 3134 3135 !! * Local declarations 3136 3137 #if defined key_mpp_shmem 3138 3139 !! * Local variables (SHMEM version) 3140 INTEGER :: ji 3141 INTEGER, SAVE :: ibool=0 3142 3143 niltab_shmem(1) = ktab 3144 CALL barrier() 3145 IF(ibool == 0 ) THEN 3146 CALL shmem_int8_max_to_all (niltab_shmem,niltab_shmem, 1,0,0 & 3147 ,N$PES,nil1wrk_shmem,nil1sync_shmem ) 3148 ELSE 3149 CALL shmem_int8_max_to_all (niltab_shmem,niltab_shmem, 1,0,0 & 3150 ,N$PES,nil2wrk_shmem,nil2sync_shmem ) 3151 ENDIF 3152 CALL barrier() 3153 ibool=ibool+1 3154 ibool=MOD( ibool,2) 3155 ktab = niltab_shmem(1) 3156 3157 # elif defined key_mpp_mpi 3158 3159 !! * Local variables (MPI version) 3160 INTEGER :: ierror, iwork 3161 3162 CALL mpi_allreduce(ktab,iwork, 1,mpi_integer & 3163 & ,mpi_max,mpi_comm_opa,ierror) 3164 3165 ktab = iwork 3166 #endif 3167 3168 END SUBROUTINE mppmax_int 3169 3170 3071 3171 SUBROUTINE mppmin_a_int( ktab, kdim ) 3072 3172 !!---------------------------------------------------------------------- … … 5117 5217 END INTERFACE 5118 5218 INTERFACE mpp_max 5119 MODULE PROCEDURE mppmax_a_ real, mppmax_real5219 MODULE PROCEDURE mppmax_a_int, mppmax_int, mppmax_a_real, mppmax_real 5120 5220 END INTERFACE 5121 5221 INTERFACE mpp_min … … 5198 5298 END SUBROUTINE mppmin_real 5199 5299 5300 SUBROUTINE mppmax_a_int( karr, kdim ) 5301 INTEGER, DIMENSION(:) :: karr 5302 INTEGER :: kdim 5303 WRITE(*,*) 'mppmax_a_int: You should not have seen this print! error?', kdim, karr(1) 5304 END SUBROUTINE mppmax_a_int 5305 5306 SUBROUTINE mppmax_int( kint ) 5307 INTEGER :: kint 5308 WRITE(*,*) 'mppmax_int: You should not have seen this print! error?', kint 5309 END SUBROUTINE mppmax_int 5310 5200 5311 SUBROUTINE mppmin_a_int( karr, kdim ) 5201 5312 INTEGER, DIMENSION(:) :: karr
Note: See TracChangeset
for help on using the changeset viewer.