Changeset 5829
- Timestamp:
- Sep 24, 2025, 10:24:33 AM (2 months ago)
- Location:
- LMDZ6/trunk/libf/phy_common
- Files:
-
- 3 edited
-
mod_phys_lmdz_mpi_transfert.f90 (modified) (3 diffs)
-
mod_phys_lmdz_omp_transfert.f90 (modified) (3 diffs)
-
mod_phys_lmdz_transfert_para.f90 (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_mpi_transfert.f90
r5477 r5829 47 47 END INTERFACE 48 48 49 INTERFACE reduce_max_mpi 50 MODULE PROCEDURE reduce_max_mpi_i,reduce_max_mpi_i1,reduce_max_mpi_i2,reduce_max_mpi_i3,reduce_max_mpi_i4, & 51 reduce_max_mpi_r,reduce_max_mpi_r1,reduce_max_mpi_r2,reduce_max_mpi_r3,reduce_max_mpi_r4 52 END INTERFACE 53 49 54 INTERFACE grid1dTo2d_mpi 50 55 MODULE PROCEDURE grid1dTo2d_mpi_i,grid1dTo2d_mpi_i1,grid1dTo2d_mpi_i2,grid1dTo2d_mpi_i3, & … … 1114 1119 1115 1120 END SUBROUTINE reduce_min_mpi_r4 1121 1122 1123 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1124 !! Definition des reduce_max --> 4D !! 1125 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1126 1127 SUBROUTINE reduce_max_mpi_i(VarIn, VarOut) 1128 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1129 IMPLICIT NONE 1130 1131 INTEGER,INTENT(IN) :: VarIn 1132 INTEGER,INTENT(OUT) :: VarOut 1133 INTEGER :: VarIn_tmp(1) 1134 INTEGER :: VarOut_tmp(1) 1135 1136 VarIn_tmp(1)=VarIn 1137 CALL reduce_max_mpi_igen(VarIn_tmp,Varout_tmp,1) 1138 VarOut=VarOut_tmp(1) 1139 1140 END SUBROUTINE reduce_max_mpi_i 1141 1142 SUBROUTINE reduce_max_mpi_i1(VarIn, VarOut) 1143 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1144 IMPLICIT NONE 1145 1146 INTEGER,INTENT(IN),DIMENSION(:) :: VarIn 1147 INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut 1148 1149 CALL reduce_max_mpi_igen(VarIn,Varout,SIZE(VarIn)) 1150 1151 END SUBROUTINE reduce_max_mpi_i1 1152 1153 SUBROUTINE reduce_max_mpi_i2(VarIn, VarOut) 1154 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1155 IMPLICIT NONE 1156 1157 INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn 1158 INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut 1159 1160 CALL reduce_max_mpi_igen(VarIn,Varout,SIZE(VarIn)) 1161 1162 END SUBROUTINE reduce_max_mpi_i2 1163 1164 SUBROUTINE reduce_max_mpi_i3(VarIn, VarOut) 1165 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1166 IMPLICIT NONE 1167 1168 INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn 1169 INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 1170 1171 CALL reduce_max_mpi_igen(VarIn,Varout,SIZE(VarIn)) 1172 1173 END SUBROUTINE reduce_max_mpi_i3 1174 1175 SUBROUTINE reduce_max_mpi_i4(VarIn, VarOut) 1176 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1177 IMPLICIT NONE 1178 1179 INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 1180 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 1181 1182 CALL reduce_max_mpi_igen(VarIn,Varout,SIZE(VarIn)) 1183 1184 END SUBROUTINE reduce_max_mpi_i4 1185 1186 1187 SUBROUTINE reduce_max_mpi_r(VarIn, VarOut) 1188 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1189 IMPLICIT NONE 1190 1191 REAL,INTENT(IN) :: VarIn 1192 REAL,INTENT(OUT) :: VarOut 1193 REAL :: VarIn_tmp(1) 1194 REAL :: VarOut_tmp(1) 1195 1196 VarIn_tmp(1)=VarIn 1197 CALL reduce_max_mpi_rgen(VarIn_tmp,Varout_tmp,1) 1198 VarOut=VarOut_tmp(1) 1199 1200 END SUBROUTINE reduce_max_mpi_r 1201 1202 SUBROUTINE reduce_max_mpi_r1(VarIn, VarOut) 1203 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1204 IMPLICIT NONE 1205 1206 REAL,INTENT(IN),DIMENSION(:) :: VarIn 1207 REAL,INTENT(OUT),DIMENSION(:) :: VarOut 1208 1209 CALL reduce_max_mpi_rgen(VarIn,Varout,SIZE(VarIn)) 1210 1211 END SUBROUTINE reduce_max_mpi_r1 1212 1213 SUBROUTINE reduce_max_mpi_r2(VarIn, VarOut) 1214 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1215 IMPLICIT NONE 1216 1217 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn 1218 REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut 1219 1220 CALL reduce_max_mpi_rgen(VarIn,Varout,SIZE(VarIn)) 1221 1222 END SUBROUTINE reduce_max_mpi_r2 1223 1224 SUBROUTINE reduce_max_mpi_r3(VarIn, VarOut) 1225 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1226 IMPLICIT NONE 1227 1228 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn 1229 REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 1230 1231 CALL reduce_max_mpi_rgen(VarIn,Varout,SIZE(VarIn)) 1232 1233 END SUBROUTINE reduce_max_mpi_r3 1234 1235 SUBROUTINE reduce_max_mpi_r4(VarIn, VarOut) 1236 USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root 1237 IMPLICIT NONE 1238 1239 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 1240 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 1241 1242 CALL reduce_max_mpi_rgen(VarIn,Varout,SIZE(VarIn)) 1243 1244 END SUBROUTINE reduce_max_mpi_r4 1116 1245 1117 1246 … … 1796 1925 1797 1926 1927 SUBROUTINE reduce_max_mpi_igen(VarIn,VarOut,nb) 1928 USE mod_phys_lmdz_mpi_data 1929 USE mod_grid_phy_lmdz 1930 USE lmdz_mpi 1931 IMPLICIT NONE 1932 1933 INTEGER,INTENT(IN) :: nb 1934 INTEGER,DIMENSION(nb),INTENT(IN) :: VarIn 1935 INTEGER,DIMENSION(nb),INTENT(OUT) :: VarOut 1936 INTEGER :: ierr 1937 1938 IF (.not.is_using_mpi) THEN 1939 VarOut(:)=VarIn(:) 1940 RETURN 1941 ENDIF 1942 1943 1944 CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_INTEGER,MPI_MAX,mpi_master,COMM_LMDZ_PHY,ierr) 1945 1946 END SUBROUTINE reduce_max_mpi_igen 1947 1948 SUBROUTINE reduce_max_mpi_rgen(VarIn,VarOut,nb) 1949 USE mod_phys_lmdz_mpi_data 1950 USE mod_grid_phy_lmdz 1951 USE lmdz_mpi 1952 1953 IMPLICIT NONE 1954 1955 INTEGER,INTENT(IN) :: nb 1956 REAL,DIMENSION(nb),INTENT(IN) :: VarIn 1957 REAL,DIMENSION(nb),INTENT(OUT) :: VarOut 1958 INTEGER :: ierr 1959 1960 IF (.not.is_using_mpi) THEN 1961 VarOut(:)=VarIn(:) 1962 RETURN 1963 ENDIF 1964 1965 CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_REAL_LMDZ,MPI_MAX,mpi_master,COMM_LMDZ_PHY,ierr) 1966 1967 END SUBROUTINE reduce_max_mpi_rgen 1798 1968 1799 1969 -
LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_omp_transfert.f90
r5477 r5829 52 52 END INTERFACE 53 53 54 55 PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp, reduce_min_omp, omp_barrier 54 INTERFACE reduce_max_omp 55 MODULE PROCEDURE reduce_max_omp_i,reduce_max_omp_i1,reduce_max_omp_i2,reduce_max_omp_i3,reduce_max_omp_i4, & 56 reduce_max_omp_r,reduce_max_omp_r1,reduce_max_omp_r2,reduce_max_omp_r3,reduce_max_omp_r4 57 END INTERFACE 58 59 60 PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp, reduce_min_omp, reduce_max_omp, omp_barrier 56 61 57 62 CONTAINS … … 841 846 842 847 848 SUBROUTINE reduce_max_omp_i(VarIn, VarOut) 849 IMPLICIT NONE 850 851 INTEGER,INTENT(IN) :: VarIn 852 INTEGER,INTENT(OUT) :: VarOut 853 INTEGER :: VarIn_tmp(1) 854 INTEGER :: VarOut_tmp(1) 855 856 VarIn_tmp(1)=VarIn 857 CALL Check_buffer_i(1) 858 CALL reduce_max_omp_igen(VarIn_tmp,Varout_tmp,1,buffer_i) 859 VarOut=VarOut_tmp(1) 860 861 END SUBROUTINE reduce_max_omp_i 862 863 SUBROUTINE reduce_max_omp_i1(VarIn, VarOut) 864 IMPLICIT NONE 865 866 INTEGER,INTENT(IN),DIMENSION(:) :: VarIn 867 INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut 868 869 CALL Check_buffer_i(size(VarIn)) 870 CALL reduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 871 872 END SUBROUTINE reduce_max_omp_i1 873 874 875 SUBROUTINE reduce_max_omp_i2(VarIn, VarOut) 876 IMPLICIT NONE 877 878 INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn 879 INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut 880 881 CALL Check_buffer_i(size(VarIn)) 882 CALL reduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 883 884 END SUBROUTINE reduce_max_omp_i2 885 886 887 SUBROUTINE reduce_max_omp_i3(VarIn, VarOut) 888 IMPLICIT NONE 889 890 INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn 891 INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 892 893 CALL Check_buffer_i(size(VarIn)) 894 CALL reduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 895 896 END SUBROUTINE reduce_max_omp_i3 897 898 899 SUBROUTINE reduce_max_omp_i4(VarIn, VarOut) 900 IMPLICIT NONE 901 902 INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 903 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 904 905 CALL Check_buffer_i(size(VarIn)) 906 CALL reduce_max_omp_igen(VarIn,Varout,Size(VarIn),buffer_i) 907 908 END SUBROUTINE reduce_max_omp_i4 909 910 911 SUBROUTINE reduce_max_omp_r(VarIn, VarOut) 912 IMPLICIT NONE 913 914 REAL,INTENT(IN) :: VarIn 915 REAL,INTENT(OUT) :: VarOut 916 REAL :: VarIn_tmp(1) 917 REAL :: VarOut_tmp(1) 918 919 VarIn_tmp(1)=VarIn 920 CALL Check_buffer_r(1) 921 CALL reduce_max_omp_rgen(VarIn_tmp,Varout_tmp,1,buffer_r) 922 VarOut=VarOut_tmp(1) 923 924 END SUBROUTINE reduce_max_omp_r 925 926 SUBROUTINE reduce_max_omp_r1(VarIn, VarOut) 927 IMPLICIT NONE 928 929 REAL,INTENT(IN),DIMENSION(:) :: VarIn 930 REAL,INTENT(OUT),DIMENSION(:) :: VarOut 931 932 CALL Check_buffer_r(size(VarIn)) 933 CALL reduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 934 935 END SUBROUTINE reduce_max_omp_r1 936 937 938 SUBROUTINE reduce_max_omp_r2(VarIn, VarOut) 939 IMPLICIT NONE 940 941 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn 942 REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut 943 944 CALL Check_buffer_r(size(VarIn)) 945 CALL reduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 946 947 END SUBROUTINE reduce_max_omp_r2 948 949 950 SUBROUTINE reduce_max_omp_r3(VarIn, VarOut) 951 IMPLICIT NONE 952 953 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn 954 REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 955 956 CALL Check_buffer_r(size(VarIn)) 957 CALL reduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 958 959 END SUBROUTINE reduce_max_omp_r3 960 961 962 SUBROUTINE reduce_max_omp_r4(VarIn, VarOut) 963 IMPLICIT NONE 964 965 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 966 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 967 968 CALL Check_buffer_r(size(VarIn)) 969 CALL reduce_max_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r) 970 971 END SUBROUTINE reduce_max_omp_r4 972 973 974 975 976 977 843 978 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 844 979 ! LES ROUTINES GENERIQUES ! … … 1254 1389 1255 1390 1391 SUBROUTINE reduce_max_omp_igen(VarIn,VarOut,dimsize,Buff) 1392 IMPLICIT NONE 1393 1394 INTEGER,INTENT(IN) :: dimsize 1395 INTEGER,INTENT(IN),DIMENSION(dimsize) :: VarIn 1396 INTEGER,INTENT(OUT),DIMENSION(dimsize) :: VarOut 1397 INTEGER,INTENT(INOUT),DIMENSION(dimsize) :: Buff 1398 1399 INTEGER :: i 1400 INTEGER :: var 1401 1402 !$OMP MASTER 1403 Buff(:)=-HUGE(var)-1 1404 !$OMP END MASTER 1405 !$OMP BARRIER 1406 1407 !$OMP CRITICAL 1408 DO i=1,dimsize 1409 Buff(i)=MAX(Buff(i),VarIn(i)) 1410 ENDDO 1411 !$OMP END CRITICAL 1412 !$OMP BARRIER 1413 1414 !$OMP MASTER 1415 DO i=1,dimsize 1416 VarOut(i)=Buff(i) 1417 ENDDO 1418 !$OMP END MASTER 1419 !$OMP BARRIER 1420 1421 END SUBROUTINE reduce_max_omp_igen 1422 1423 SUBROUTINE reduce_max_omp_rgen(VarIn,VarOut,dimsize,Buff) 1424 IMPLICIT NONE 1425 1426 INTEGER,INTENT(IN) :: dimsize 1427 REAL,INTENT(IN),DIMENSION(dimsize) :: VarIn 1428 REAL,INTENT(OUT),DIMENSION(dimsize) :: VarOut 1429 REAL,INTENT(INOUT),DIMENSION(dimsize) :: Buff 1430 1431 INTEGER :: i 1432 REAL :: var 1433 1434 !$OMP MASTER 1435 Buff(:)=-HUGE(var)-1 1436 !$OMP END MASTER 1437 !$OMP BARRIER 1438 1439 !$OMP CRITICAL 1440 DO i=1,dimsize 1441 Buff(i)=MAX(Buff(i),VarIn(i)) 1442 ENDDO 1443 !$OMP END CRITICAL 1444 !$OMP BARRIER 1445 1446 !$OMP MASTER 1447 DO i=1,dimsize 1448 VarOut(i)=Buff(i) 1449 ENDDO 1450 !$OMP END MASTER 1451 !$OMP BARRIER 1452 1453 END SUBROUTINE reduce_max_omp_rgen 1454 1455 1456 1256 1457 END MODULE mod_phys_lmdz_omp_transfert -
LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_transfert_para.f90
r5477 r5829 50 50 reduce_min_r,reduce_min_r1,reduce_min_r2,reduce_min_r3,reduce_min_r4 51 51 END INTERFACE 52 52 53 INTERFACE reduce_max 54 MODULE PROCEDURE reduce_max_i,reduce_max_i1,reduce_max_i2,reduce_max_i3,reduce_max_i4, & 55 reduce_max_r,reduce_max_r1,reduce_max_r2,reduce_max_r3,reduce_max_r4 56 END INTERFACE 57 53 58 CONTAINS 54 59 … … 1444 1449 1445 1450 1451 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1452 !! Definition des reduce_max --> 4D !! 1453 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1454 1455 ! Les entiers 1456 1457 SUBROUTINE reduce_max_i(VarIn, VarOut) 1458 IMPLICIT NONE 1459 1460 INTEGER,INTENT(IN) :: VarIn 1461 INTEGER,INTENT(OUT) :: VarOut 1462 1463 INTEGER :: Var_tmp 1464 1465 CALL reduce_max_omp(VarIn,Var_tmp) 1466 !$OMP MASTER 1467 CALL reduce_max_mpi(Var_tmp,VarOut) 1468 !$OMP END MASTER 1469 1470 END SUBROUTINE reduce_max_i 1471 1472 1473 SUBROUTINE reduce_max_i1(VarIn, VarOut) 1474 IMPLICIT NONE 1475 1476 INTEGER,INTENT(IN),DIMENSION(:) :: VarIn 1477 INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut 1478 1479 INTEGER,DIMENSION(SIZE(VarIn)) :: Var_tmp 1480 1481 CALL reduce_max_omp(VarIn,Var_tmp) 1482 !$OMP MASTER 1483 CALL reduce_max_mpi(Var_tmp,VarOut) 1484 !$OMP END MASTER 1485 1486 END SUBROUTINE reduce_max_i1 1487 1488 1489 SUBROUTINE reduce_max_i2(VarIn, VarOut) 1490 IMPLICIT NONE 1491 1492 INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn 1493 INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut 1494 1495 INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2)) :: Var_tmp 1496 1497 CALL reduce_max_omp(VarIn,Var_tmp) 1498 !$OMP MASTER 1499 CALL reduce_max_mpi(Var_tmp,VarOut) 1500 !$OMP END MASTER 1501 1502 END SUBROUTINE reduce_max_i2 1503 1504 1505 SUBROUTINE reduce_max_i3(VarIn, VarOut) 1506 IMPLICIT NONE 1507 1508 INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn 1509 INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 1510 1511 INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp 1512 1513 CALL reduce_max_omp(VarIn,Var_tmp) 1514 !$OMP MASTER 1515 CALL reduce_max_mpi(Var_tmp,VarOut) 1516 !$OMP END MASTER 1517 1518 END SUBROUTINE reduce_max_i3 1519 1520 1521 SUBROUTINE reduce_max_i4(VarIn, VarOut) 1522 IMPLICIT NONE 1523 1524 INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 1525 INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 1526 1527 INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp 1528 1529 CALL reduce_max_omp(VarIn,Var_tmp) 1530 !$OMP MASTER 1531 CALL reduce_max_mpi(Var_tmp,VarOut) 1532 !$OMP END MASTER 1533 1534 END SUBROUTINE reduce_max_i4 1535 1536 1537 ! Les reels 1538 1539 SUBROUTINE reduce_max_r(VarIn, VarOut) 1540 IMPLICIT NONE 1541 1542 REAL,INTENT(IN) :: VarIn 1543 REAL,INTENT(OUT) :: VarOut 1544 1545 REAL :: Var_tmp 1546 1547 CALL reduce_max_omp(VarIn,Var_tmp) 1548 !$OMP MASTER 1549 CALL reduce_max_mpi(Var_tmp,VarOut) 1550 !$OMP END MASTER 1551 1552 END SUBROUTINE reduce_max_r 1553 1554 1555 SUBROUTINE reduce_max_r1(VarIn, VarOut) 1556 IMPLICIT NONE 1557 1558 REAL,INTENT(IN),DIMENSION(:) :: VarIn 1559 REAL,INTENT(OUT),DIMENSION(:) :: VarOut 1560 1561 REAL,DIMENSION(SIZE(VarIn)) :: Var_tmp 1562 1563 CALL reduce_max_omp(VarIn,Var_tmp) 1564 !$OMP MASTER 1565 CALL reduce_max_mpi(Var_tmp,VarOut) 1566 !$OMP END MASTER 1567 1568 END SUBROUTINE reduce_max_r1 1569 1570 1571 SUBROUTINE reduce_max_r2(VarIn, VarOut) 1572 IMPLICIT NONE 1573 1574 REAL,INTENT(IN),DIMENSION(:,:) :: VarIn 1575 REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut 1576 1577 REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2)) :: Var_tmp 1578 1579 CALL reduce_max_omp(VarIn,Var_tmp) 1580 !$OMP MASTER 1581 CALL reduce_max_mpi(Var_tmp,VarOut) 1582 !$OMP END MASTER 1583 1584 END SUBROUTINE reduce_max_r2 1585 1586 1587 SUBROUTINE reduce_max_r3(VarIn, VarOut) 1588 IMPLICIT NONE 1589 1590 REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn 1591 REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut 1592 1593 REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3)) :: Var_tmp 1594 1595 CALL reduce_max_omp(VarIn,Var_tmp) 1596 !$OMP MASTER 1597 CALL reduce_max_mpi(Var_tmp,VarOut) 1598 !$OMP END MASTER 1599 1600 END SUBROUTINE reduce_max_r3 1601 1602 1603 SUBROUTINE reduce_max_r4(VarIn, VarOut) 1604 IMPLICIT NONE 1605 1606 REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn 1607 REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut 1608 1609 REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4)) :: Var_tmp 1610 1611 CALL reduce_max_omp(VarIn,Var_tmp) 1612 !$OMP MASTER 1613 CALL reduce_max_mpi(Var_tmp,VarOut) 1614 !$OMP END MASTER 1615 1616 END SUBROUTINE reduce_max_r4 1617 1446 1618 1447 1619 END MODULE mod_phys_lmdz_transfert_para
Note: See TracChangeset
for help on using the changeset viewer.
