Changeset 5829


Ignore:
Timestamp:
Sep 24, 2025, 10:24:33 AM (2 months ago)
Author:
rkazeroni
Message:

Add reduce_max functionality, similarly to reduce_min

Location:
LMDZ6/trunk/libf/phy_common
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_mpi_transfert.f90

    r5477 r5829  
    4747  END INTERFACE
    4848
     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
    4954 INTERFACE grid1dTo2d_mpi
    5055    MODULE PROCEDURE grid1dTo2d_mpi_i,grid1dTo2d_mpi_i1,grid1dTo2d_mpi_i2,grid1dTo2d_mpi_i3, &
     
    11141119 
    11151120  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
    11161245
    11171246
     
    17961925
    17971926
     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
    17981968
    17991969
  • LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_omp_transfert.f90

    r5477 r5829  
    5252  END INTERFACE
    5353
    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
    5661
    5762CONTAINS
     
    841846
    842847
     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
    843978!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    844979!    LES ROUTINES GENERIQUES    !
     
    12541389
    12551390
     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
    12561457END MODULE mod_phys_lmdz_omp_transfert
  • LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_transfert_para.f90

    r5477 r5829  
    5050                     reduce_min_r,reduce_min_r1,reduce_min_r2,reduce_min_r3,reduce_min_r4
    5151  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
    5358CONTAINS
    5459
     
    14441449
    14451450
     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
    14461618   
    14471619END MODULE mod_phys_lmdz_transfert_para
Note: See TracChangeset for help on using the changeset viewer.