Changeset 1528 for trunk/NEMO/OPA_SRC/lib_mpp.F90
- Timestamp:
- 2009-07-23T16:38:47+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/lib_mpp.F90
r1490 r1528 31 31 !! mppscatter : 32 32 !! mppgather : 33 !! mpp_isl : generic inteface for mppisl_int , mppisl_a_int , mppisl_real, mppisl_a_real34 33 !! mpp_min : generic interface for mppmin_int , mppmin_a_int , mppmin_real, mppmin_a_real 35 34 !! mpp_max : generic interface for mppmax_int , mppmax_a_int , mppmax_real, mppmax_a_real … … 71 70 PUBLIC mpp_lnk_3d, mpp_lnk_3d_gather, mpp_lnk_2d, mpp_lnk_2d_e 72 71 PUBLIC mpprecv, mppsend, mppscatter, mppgather 73 PUBLIC mppobc, mpp_ini_ice, mpp_i sl, mpp_ini_znl72 PUBLIC mppobc, mpp_ini_ice, mpp_ini_znl 74 73 #if defined key_oasis3 || defined key_oasis4 75 74 PUBLIC mppsize, mpprank … … 80 79 !! with scalar arguments instead of array arguments, which causes problems 81 80 !! for the compilation on AIX system as well as NEC and SGI. Ok on COMPACQ 82 INTERFACE mpp_isl83 MODULE PROCEDURE mppisl_a_int, mppisl_int, mppisl_a_real, mppisl_real84 END INTERFACE85 81 INTERFACE mpp_min 86 82 MODULE PROCEDURE mppmin_a_int, mppmin_int, mppmin_a_real, mppmin_real … … 1120 1116 1121 1117 1122 SUBROUTINE mppisl_a_int( ktab, kdim )1123 !!----------------------------------------------------------------------1124 !! *** routine mppisl_a_int ***1125 !!1126 !! ** Purpose : Massively parallel processors1127 !! Find the non zero value1128 !!1129 !!----------------------------------------------------------------------1130 INTEGER, INTENT(in ) :: kdim ! ???1131 INTEGER, INTENT(inout), DIMENSION(kdim) :: ktab ! ???1132 !!1133 LOGICAL :: lcommute1134 INTEGER :: mpi_isl, ierror ! temporary integer1135 INTEGER, DIMENSION(kdim) :: iwork1136 !!----------------------------------------------------------------------1137 !1138 lcommute = .TRUE.1139 CALL mpi_op_create( lc_isl, lcommute, mpi_isl, ierror )1140 CALL mpi_allreduce( ktab, iwork, kdim, mpi_integer, mpi_isl, mpi_comm_opa, ierror )1141 ktab(:) = iwork(:)1142 !1143 END SUBROUTINE mppisl_a_int1144 1145 1146 SUBROUTINE mppisl_int( ktab )1147 !!----------------------------------------------------------------------1148 !! *** routine mppisl_int ***1149 !!1150 !! ** Purpose : Massively parallel processors1151 !! Find the non zero value1152 !!1153 !!----------------------------------------------------------------------1154 INTEGER , INTENT(inout) :: ktab !1155 !!1156 LOGICAL :: lcommute1157 INTEGER :: mpi_isl, ierror, iwork ! temporary integer1158 !!----------------------------------------------------------------------1159 !1160 lcommute = .TRUE.1161 CALL mpi_op_create( lc_isl, lcommute, mpi_isl, ierror )1162 CALL mpi_allreduce(ktab, iwork, 1, mpi_integer, mpi_isl, mpi_comm_opa, ierror)1163 ktab = iwork1164 !1165 END SUBROUTINE mppisl_int1166 1167 1168 1118 SUBROUTINE mppmax_a_int( ktab, kdim, kcom ) 1169 1119 !!---------------------------------------------------------------------- … … 1300 1250 ! 1301 1251 END SUBROUTINE mppsum_int 1302 1303 1304 SUBROUTINE mppisl_a_real( ptab, kdim )1305 !!----------------------------------------------------------------------1306 !! *** routine mppisl_a_real ***1307 !!1308 !! ** Purpose : Massively parallel processors1309 !! Find the non zero island barotropic stream function value1310 !!1311 !! Modifications:1312 !! ! 93-09 (M. Imbard)1313 !! ! 96-05 (j. Escobar)1314 !! ! 98-05 (M. Imbard, J. Escobar, L. Colombet ) SHMEM and MPI1315 !!----------------------------------------------------------------------1316 INTEGER , INTENT( in ) :: kdim ! ???1317 REAL(wp), INTENT(inout), DIMENSION(kdim) :: ptab ! ???1318 !!1319 LOGICAL :: lcommute = .TRUE.1320 INTEGER :: mpi_isl, ierror1321 REAL(wp), DIMENSION(kdim) :: zwork1322 !!----------------------------------------------------------------------1323 !1324 CALL mpi_op_create( lc_isl, lcommute, mpi_isl, ierror )1325 CALL mpi_allreduce( ptab, zwork, kdim, mpi_double_precision, mpi_isl, mpi_comm_opa, ierror )1326 ptab(:) = zwork(:)1327 !1328 END SUBROUTINE mppisl_a_real1329 1330 1331 SUBROUTINE mppisl_real( ptab )1332 !!----------------------------------------------------------------------1333 !! *** routine mppisl_real ***1334 !!1335 !! ** Purpose : Massively parallel processors1336 !! Find the non zero island barotropic stream function value1337 !!1338 !! Modifications:1339 !! ! 93-09 (M. Imbard)1340 !! ! 96-05 (j. Escobar)1341 !! ! 98-05 (M. Imbard, J. Escobar, L. Colombet ) SHMEM and MPI1342 !!----------------------------------------------------------------------1343 REAL(wp), INTENT(inout) :: ptab1344 1345 LOGICAL :: lcommute = .TRUE.1346 INTEGER :: mpi_isl, ierror1347 REAL(wp) :: zwork1348 !!----------------------------------------------------------------------1349 !1350 CALL mpi_op_create( lc_isl, lcommute, mpi_isl, ierror )1351 CALL mpi_allreduce( ptab, zwork, 1, mpi_double_precision, mpi_isl, mpi_comm_opa, ierror )1352 ptab = zwork1353 !1354 END SUBROUTINE mppisl_real1355 1356 1357 FUNCTION lc_isl( py, px, kdim )1358 !!----------------------------------------------------------------------1359 !!----------------------------------------------------------------------1360 INTEGER :: kdim1361 REAL(wp), DIMENSION(kdim) :: px, py1362 !!1363 INTEGER :: ji1364 INTEGER :: lc_isl1365 !!----------------------------------------------------------------------1366 !1367 DO ji = 1, kdim1368 IF( py(ji) /= 0. ) px(ji) = py(ji)1369 END DO1370 lc_isl=01371 !1372 END FUNCTION lc_isl1373 1252 1374 1253 … … 2396 2275 MODULE PROCEDURE mppmin_a_int, mppmin_int, mppmin_a_real, mppmin_real 2397 2276 END INTERFACE 2398 INTERFACE mpp_isl2399 MODULE PROCEDURE mppisl_a_int, mppisl_int, mppisl_a_real, mppisl_real2400 END INTERFACE2401 2277 INTERFACE mppobc 2402 2278 MODULE PROCEDURE mppobc_1d, mppobc_2d, mppobc_3d, mppobc_4d … … 2532 2408 END SUBROUTINE mppobc_4d 2533 2409 2534 SUBROUTINE mppisl_a_int( karr, kdim )2535 INTEGER, DIMENSION(:) :: karr2536 INTEGER :: kdim2537 WRITE(*,*) 'mppisl_a_int: You should not have seen this print! error?', kdim, karr(1)2538 END SUBROUTINE mppisl_a_int2539 2540 SUBROUTINE mppisl_int( kint )2541 INTEGER :: kint2542 WRITE(*,*) 'mppisl_int: You should not have seen this print! error?', kint2543 END SUBROUTINE mppisl_int2544 2545 SUBROUTINE mppisl_a_real( parr, kdim )2546 REAL , DIMENSION(:) :: parr2547 INTEGER :: kdim2548 WRITE(*,*) 'mppisl_a_real: You should not have seen this print! error?', kdim, parr(1)2549 END SUBROUTINE mppisl_a_real2550 2551 SUBROUTINE mppisl_real( psca )2552 REAL :: psca2553 WRITE(*,*) 'mppisl_real: You should not have seen this print! error?', psca2554 END SUBROUTINE mppisl_real2555 2556 2410 SUBROUTINE mpp_minloc2d( ptab, pmask, pmin, ki, kj ) 2557 2411 REAL :: pmin 2558 2412 REAL , DIMENSION (:,:) :: ptab, pmask 2559 2413 INTEGER :: ki, kj 2560 WRITE(*,*) 'mpp isl_real: You should not have seen this print! error?', pmin, ki, kj, ptab(1,1), pmask(1,1)2414 WRITE(*,*) 'mpp_minloc2d: You should not have seen this print! error?', pmin, ki, kj, ptab(1,1), pmask(1,1) 2561 2415 END SUBROUTINE mpp_minloc2d 2562 2416 … … 2565 2419 REAL , DIMENSION (:,:,:) :: ptab, pmask 2566 2420 INTEGER :: ki, kj, kk 2567 WRITE(*,*) 'mpp isl_real: You should not have seen this print! error?', pmin, ki, kj, kk, ptab(1,1,1), pmask(1,1,1)2421 WRITE(*,*) 'mpp_minloc3d: You should not have seen this print! error?', pmin, ki, kj, kk, ptab(1,1,1), pmask(1,1,1) 2568 2422 END SUBROUTINE mpp_minloc3d 2569 2423 … … 2572 2426 REAL , DIMENSION (:,:) :: ptab, pmask 2573 2427 INTEGER :: ki, kj 2574 WRITE(*,*) 'mpp isl_real: You should not have seen this print! error?', pmax, ki, kj, ptab(1,1), pmask(1,1)2428 WRITE(*,*) 'mpp_maxloc2d: You should not have seen this print! error?', pmax, ki, kj, ptab(1,1), pmask(1,1) 2575 2429 END SUBROUTINE mpp_maxloc2d 2576 2430 … … 2579 2433 REAL , DIMENSION (:,:,:) :: ptab, pmask 2580 2434 INTEGER :: ki, kj, kk 2581 WRITE(*,*) 'mpp isl_real: You should not have seen this print! error?', pmax, ki, kj, kk, ptab(1,1,1), pmask(1,1,1)2435 WRITE(*,*) 'mpp_maxloc3d: You should not have seen this print! error?', pmax, ki, kj, kk, ptab(1,1,1), pmask(1,1,1) 2582 2436 END SUBROUTINE mpp_maxloc3d 2583 2437
Note: See TracChangeset
for help on using the changeset viewer.