Ignore:
Timestamp:
Mar 14, 2019, 10:34:31 AM (5 years ago)
Author:
Laurent Fairhead
Message:

Further modifications for DYNAMICO/LMDZ convergence. These are based
on Yann's LMDZ6_V2 sources. Compiles on irene and converges with revision 3459
in a bucket configuration
YM/LF

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

Legend:

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

    r2429 r3465  
    4242  END INTERFACE
    4343
     44  INTERFACE reduce_min_mpi
     45    MODULE PROCEDURE reduce_min_mpi_i,reduce_min_mpi_i1,reduce_min_mpi_i2,reduce_min_mpi_i3,reduce_min_mpi_i4, &
     46                     reduce_min_mpi_r,reduce_min_mpi_r1,reduce_min_mpi_r2,reduce_min_mpi_r3,reduce_min_mpi_r4
     47  END INTERFACE
     48
    4449 INTERFACE grid1dTo2d_mpi
    4550    MODULE PROCEDURE grid1dTo2d_mpi_i,grid1dTo2d_mpi_i1,grid1dTo2d_mpi_i2,grid1dTo2d_mpi_i3, &
     
    986991  END SUBROUTINE reduce_sum_mpi_r4
    987992 
     993
     994!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     995!! Definition des reduce_min   --> 4D   !!
     996!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     997
     998  SUBROUTINE reduce_min_mpi_i(VarIn, VarOut)
     999    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1000    IMPLICIT NONE
     1001 
     1002    INTEGER,INTENT(IN)  :: VarIn
     1003    INTEGER,INTENT(OUT) :: VarOut
     1004    INTEGER             :: VarIn_tmp(1)
     1005    INTEGER             :: VarOut_tmp(1)
     1006   
     1007    VarIn_tmp(1)=VarIn   
     1008    CALL reduce_min_mpi_igen(VarIn_tmp,Varout_tmp,1)
     1009    VarOut=VarOut_tmp(1)
     1010   
     1011  END SUBROUTINE reduce_min_mpi_i
     1012
     1013  SUBROUTINE reduce_min_mpi_i1(VarIn, VarOut)
     1014    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1015    IMPLICIT NONE
     1016 
     1017    INTEGER,INTENT(IN),DIMENSION(:)  :: VarIn
     1018    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
     1019   
     1020    CALL reduce_min_mpi_igen(VarIn,Varout,SIZE(VarIn))
     1021 
     1022  END SUBROUTINE reduce_min_mpi_i1
     1023
     1024  SUBROUTINE reduce_min_mpi_i2(VarIn, VarOut)
     1025    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1026    IMPLICIT NONE
     1027 
     1028    INTEGER,INTENT(IN),DIMENSION(:,:)  :: VarIn
     1029    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
     1030   
     1031    CALL reduce_min_mpi_igen(VarIn,Varout,SIZE(VarIn))
     1032 
     1033  END SUBROUTINE reduce_min_mpi_i2
     1034
     1035  SUBROUTINE reduce_min_mpi_i3(VarIn, VarOut)
     1036    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1037    IMPLICIT NONE
     1038 
     1039    INTEGER,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
     1040    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
     1041   
     1042    CALL reduce_min_mpi_igen(VarIn,Varout,SIZE(VarIn))
     1043 
     1044  END SUBROUTINE reduce_min_mpi_i3
     1045
     1046  SUBROUTINE reduce_min_mpi_i4(VarIn, VarOut)
     1047    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1048    IMPLICIT NONE
     1049 
     1050    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
     1051    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
     1052   
     1053    CALL reduce_min_mpi_igen(VarIn,Varout,SIZE(VarIn))
     1054 
     1055  END SUBROUTINE reduce_min_mpi_i4                 
     1056 
     1057 
     1058  SUBROUTINE reduce_min_mpi_r(VarIn, VarOut)
     1059    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1060    IMPLICIT NONE
     1061 
     1062    REAL,INTENT(IN)  :: VarIn
     1063    REAL,INTENT(OUT) :: VarOut
     1064    REAL             :: VarIn_tmp(1)
     1065    REAL             :: VarOut_tmp(1)
     1066   
     1067    VarIn_tmp(1)=VarIn   
     1068    CALL reduce_min_mpi_rgen(VarIn_tmp,Varout_tmp,1)
     1069    VarOut=VarOut_tmp(1)
     1070 
     1071  END SUBROUTINE reduce_min_mpi_r
     1072
     1073  SUBROUTINE reduce_min_mpi_r1(VarIn, VarOut)
     1074    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1075    IMPLICIT NONE
     1076 
     1077    REAL,INTENT(IN),DIMENSION(:)  :: VarIn
     1078    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
     1079   
     1080    CALL reduce_min_mpi_rgen(VarIn,Varout,SIZE(VarIn))
     1081     
     1082  END SUBROUTINE reduce_min_mpi_r1
     1083
     1084  SUBROUTINE reduce_min_mpi_r2(VarIn, VarOut)
     1085    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1086    IMPLICIT NONE
     1087 
     1088    REAL,INTENT(IN),DIMENSION(:,:)  :: VarIn
     1089    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
     1090   
     1091    CALL reduce_min_mpi_rgen(VarIn,Varout,SIZE(VarIn))
     1092 
     1093  END SUBROUTINE reduce_min_mpi_r2
     1094
     1095  SUBROUTINE reduce_min_mpi_r3(VarIn, VarOut)
     1096    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1097    IMPLICIT NONE
     1098 
     1099    REAL,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
     1100    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
     1101   
     1102    CALL reduce_min_mpi_rgen(VarIn,Varout,SIZE(VarIn))
     1103 
     1104  END SUBROUTINE reduce_min_mpi_r3
     1105
     1106  SUBROUTINE reduce_min_mpi_r4(VarIn, VarOut)
     1107    USE mod_phys_lmdz_mpi_data, ONLY :  is_mpi_root
     1108    IMPLICIT NONE
     1109 
     1110    REAL,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
     1111    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
     1112   
     1113    CALL reduce_min_mpi_rgen(VarIn,Varout,SIZE(VarIn))
     1114 
     1115  END SUBROUTINE reduce_min_mpi_r4
     1116
     1117
    9881118
    9891119
     
    16781808
    16791809
     1810  SUBROUTINE reduce_min_mpi_igen(VarIn,VarOut,nb)
     1811    USE mod_phys_lmdz_mpi_data
     1812    USE mod_grid_phy_lmdz
     1813    IMPLICIT NONE
     1814   
     1815#ifdef CPP_MPI
     1816    INCLUDE 'mpif.h'
     1817#endif
     1818   
     1819    INTEGER,INTENT(IN) :: nb
     1820    INTEGER,DIMENSION(nb),INTENT(IN) :: VarIn
     1821    INTEGER,DIMENSION(nb),INTENT(OUT) :: VarOut   
     1822    INTEGER :: ierr
     1823   
     1824    IF (.not.is_using_mpi) THEN
     1825      VarOut(:)=VarIn(:)
     1826      RETURN
     1827    ENDIF
     1828
     1829
     1830#ifdef CPP_MPI
     1831    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_INTEGER,MPI_MIN,mpi_master,COMM_LMDZ_PHY,ierr)
     1832#endif
     1833           
     1834  END SUBROUTINE reduce_min_mpi_igen
     1835 
     1836  SUBROUTINE reduce_min_mpi_rgen(VarIn,VarOut,nb)
     1837    USE mod_phys_lmdz_mpi_data
     1838    USE mod_grid_phy_lmdz
     1839
     1840    IMPLICIT NONE
     1841
     1842#ifdef CPP_MPI
     1843    INCLUDE 'mpif.h'
     1844#endif
     1845   
     1846    INTEGER,INTENT(IN) :: nb
     1847    REAL,DIMENSION(nb),INTENT(IN) :: VarIn
     1848    REAL,DIMENSION(nb),INTENT(OUT) :: VarOut   
     1849    INTEGER :: ierr
     1850 
     1851    IF (.not.is_using_mpi) THEN
     1852      VarOut(:)=VarIn(:)
     1853      RETURN
     1854    ENDIF
     1855   
     1856#ifdef CPP_MPI
     1857    CALL MPI_REDUCE(VarIn,VarOut,nb,MPI_REAL_LMDZ,MPI_MIN,mpi_master,COMM_LMDZ_PHY,ierr)
     1858#endif
     1859       
     1860  END SUBROUTINE reduce_min_mpi_rgen
     1861
     1862
     1863
     1864
     1865
     1866
     1867
    16801868  SUBROUTINE grid1dTo2d_mpi_igen(VarIn,VarOut,dimsize)
    16811869    USE mod_phys_lmdz_mpi_data
  • LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_omp_transfert.F90

    r2326 r3465  
    4747  END INTERFACE
    4848
    49 
    50   PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp, omp_barrier
     49  INTERFACE reduce_min_omp
     50    MODULE PROCEDURE reduce_min_omp_i,reduce_min_omp_i1,reduce_min_omp_i2,reduce_min_omp_i3,reduce_min_omp_i4, &
     51                     reduce_min_omp_r,reduce_min_omp_r1,reduce_min_omp_r2,reduce_min_omp_r3,reduce_min_omp_r4
     52  END INTERFACE
     53
     54
     55  PUBLIC bcast_omp,scatter_omp,gather_omp,reduce_sum_omp, reduce_min_omp, omp_barrier
    5156
    5257CONTAINS
     
    710715  END SUBROUTINE reduce_sum_omp_r4
    711716
     717
     718
     719  SUBROUTINE reduce_min_omp_i(VarIn, VarOut)
     720    IMPLICIT NONE
     721 
     722    INTEGER,INTENT(IN)  :: VarIn
     723    INTEGER,INTENT(OUT) :: VarOut
     724    INTEGER             :: VarIn_tmp(1)
     725    INTEGER             :: VarOut_tmp(1)
     726   
     727    VarIn_tmp(1)=VarIn
     728    CALL Check_buffer_i(1)   
     729    CALL reduce_min_omp_igen(VarIn_tmp,Varout_tmp,1,buffer_i)
     730    VarOut=VarOut_tmp(1)
     731   
     732  END SUBROUTINE reduce_min_omp_i
     733
     734  SUBROUTINE reduce_min_omp_i1(VarIn, VarOut)
     735    IMPLICIT NONE
     736 
     737    INTEGER,INTENT(IN),DIMENSION(:)  :: VarIn
     738    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
     739   
     740    CALL Check_buffer_i(size(VarIn))   
     741    CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
     742   
     743  END SUBROUTINE reduce_min_omp_i1
     744 
     745 
     746  SUBROUTINE reduce_min_omp_i2(VarIn, VarOut)
     747    IMPLICIT NONE
     748 
     749    INTEGER,INTENT(IN),DIMENSION(:,:)  :: VarIn
     750    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
     751
     752    CALL Check_buffer_i(size(VarIn))   
     753    CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
     754 
     755  END SUBROUTINE reduce_min_omp_i2
     756
     757
     758  SUBROUTINE reduce_min_omp_i3(VarIn, VarOut)
     759    IMPLICIT NONE
     760 
     761    INTEGER,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
     762    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
     763   
     764    CALL Check_buffer_i(size(VarIn))   
     765    CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
     766 
     767  END SUBROUTINE reduce_min_omp_i3
     768
     769
     770  SUBROUTINE reduce_min_omp_i4(VarIn, VarOut)
     771    IMPLICIT NONE
     772
     773    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
     774    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
     775 
     776    CALL Check_buffer_i(size(VarIn))   
     777    CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
     778 
     779  END SUBROUTINE reduce_min_omp_i4
     780
     781
     782  SUBROUTINE reduce_min_omp_r(VarIn, VarOut)
     783    IMPLICIT NONE
     784 
     785    REAL,INTENT(IN)  :: VarIn
     786    REAL,INTENT(OUT) :: VarOut
     787    REAL             :: VarIn_tmp(1)
     788    REAL             :: VarOut_tmp(1)
     789   
     790    VarIn_tmp(1)=VarIn
     791    CALL Check_buffer_r(1)   
     792    CALL reduce_min_omp_rgen(VarIn_tmp,Varout_tmp,1,buffer_r)
     793    VarOut=VarOut_tmp(1)
     794 
     795  END SUBROUTINE reduce_min_omp_r
     796
     797  SUBROUTINE reduce_min_omp_r1(VarIn, VarOut)
     798    IMPLICIT NONE
     799 
     800    REAL,INTENT(IN),DIMENSION(:)  :: VarIn
     801    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
     802   
     803    CALL Check_buffer_r(size(VarIn))   
     804    CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
     805   
     806  END SUBROUTINE reduce_min_omp_r1
     807 
     808 
     809  SUBROUTINE reduce_min_omp_r2(VarIn, VarOut)
     810    IMPLICIT NONE
     811 
     812    REAL,INTENT(IN),DIMENSION(:,:)  :: VarIn
     813    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
     814   
     815    CALL Check_buffer_r(size(VarIn))   
     816    CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
     817 
     818  END SUBROUTINE reduce_min_omp_r2
     819
     820
     821  SUBROUTINE reduce_min_omp_r3(VarIn, VarOut)
     822    IMPLICIT NONE
     823 
     824    REAL,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
     825    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
     826   
     827    CALL Check_buffer_r(size(VarIn))   
     828    CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
     829 
     830  END SUBROUTINE reduce_min_omp_r3
     831
     832
     833  SUBROUTINE reduce_min_omp_r4(VarIn, VarOut)
     834    IMPLICIT NONE
     835
     836    REAL,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
     837    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
     838 
     839    CALL Check_buffer_r(size(VarIn))   
     840    CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
     841 
     842  END SUBROUTINE reduce_min_omp_r4
     843
     844
     845
     846
    712847!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    713848!    LES ROUTINES GENERIQUES    !
     
    10621197  END SUBROUTINE reduce_sum_omp_rgen
    10631198
     1199
     1200  SUBROUTINE reduce_min_omp_igen(VarIn,VarOut,dimsize,Buff)
     1201  IMPLICIT NONE
     1202
     1203    INTEGER,INTENT(IN) :: dimsize
     1204    INTEGER,INTENT(IN),DIMENSION(dimsize) :: VarIn
     1205    INTEGER,INTENT(OUT),DIMENSION(dimsize) :: VarOut
     1206    INTEGER,INTENT(INOUT),DIMENSION(dimsize) :: Buff
     1207
     1208    INTEGER :: i
     1209    INTEGER :: var
     1210
     1211  !$OMP MASTER
     1212    Buff(:)=HUGE(var)
     1213  !$OMP END MASTER
     1214  !$OMP BARRIER
     1215 
     1216  !$OMP CRITICAL     
     1217    DO i=1,dimsize
     1218      Buff(i)=MIN(Buff(i),VarIn(i))
     1219    ENDDO
     1220  !$OMP END CRITICAL
     1221  !$OMP BARRIER 
     1222 
     1223  !$OMP MASTER
     1224    DO i=1,dimsize
     1225      VarOut(i)=Buff(i)
     1226    ENDDO
     1227  !$OMP END MASTER
     1228  !$OMP BARRIER
     1229 
     1230  END SUBROUTINE reduce_min_omp_igen
     1231
     1232  SUBROUTINE reduce_min_omp_rgen(VarIn,VarOut,dimsize,Buff)
     1233  IMPLICIT NONE
     1234
     1235    INTEGER,INTENT(IN) :: dimsize
     1236    REAL,INTENT(IN),DIMENSION(dimsize) :: VarIn
     1237    REAL,INTENT(OUT),DIMENSION(dimsize) :: VarOut
     1238    REAL,INTENT(INOUT),DIMENSION(dimsize) :: Buff
     1239
     1240    INTEGER :: i
     1241    REAL :: var
     1242
     1243  !$OMP MASTER
     1244    Buff(:)=HUGE(var)
     1245  !$OMP END MASTER
     1246  !$OMP BARRIER
     1247 
     1248  !$OMP CRITICAL     
     1249    DO i=1,dimsize
     1250      Buff(i)=MIN(Buff(i),VarIn(i))
     1251    ENDDO
     1252  !$OMP END CRITICAL
     1253  !$OMP BARRIER 
     1254 
     1255  !$OMP MASTER
     1256    DO i=1,dimsize
     1257      VarOut(i)=Buff(i)
     1258    ENDDO
     1259  !$OMP END MASTER
     1260  !$OMP BARRIER
     1261 
     1262  END SUBROUTINE reduce_min_omp_rgen
     1263
     1264
    10641265END MODULE mod_phys_lmdz_omp_transfert
  • LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_para.F90

    r3435 r3465  
    3333       is_master=.FALSE.
    3434     ENDIF
    35      CALL Test_transfert
     35!ym     CALL Test_transfert
    3636!$OMP END PARALLEL   
    3737     IF (is_using_mpi .OR. is_using_omp) THEN
  • LMDZ6/trunk/libf/phy_common/mod_phys_lmdz_transfert_para.F90

    r2326 r3465  
    11!
    2 !$Header$
     2!$Id$
    33!
    44MODULE mod_phys_lmdz_transfert_para
     
    4646  END INTERFACE
    4747
     48  INTERFACE reduce_min
     49    MODULE PROCEDURE reduce_min_i,reduce_min_i1,reduce_min_i2,reduce_min_i3,reduce_min_i4, &
     50                     reduce_min_r,reduce_min_r1,reduce_min_r2,reduce_min_r3,reduce_min_r4
     51  END INTERFACE
    4852   
    4953CONTAINS
     
    12711275  END SUBROUTINE reduce_sum_r4 
    12721276
     1277
     1278!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1279!! Definition des reduce_min   --> 4D   !!
     1280!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1281
     1282! Les entiers
     1283
     1284  SUBROUTINE reduce_min_i(VarIn, VarOut)
     1285    IMPLICIT NONE
     1286 
     1287    INTEGER,INTENT(IN)  :: VarIn
     1288    INTEGER,INTENT(OUT) :: VarOut
     1289   
     1290    INTEGER             :: Var_tmp
     1291           
     1292    CALL reduce_min_omp(VarIn,Var_tmp)
     1293!$OMP MASTER     
     1294    CALL reduce_min_mpi(Var_tmp,VarOut)
     1295!$OMP END MASTER
     1296 
     1297  END SUBROUTINE reduce_min_i 
     1298
     1299
     1300  SUBROUTINE reduce_min_i1(VarIn, VarOut)
     1301    IMPLICIT NONE
     1302 
     1303    INTEGER,INTENT(IN),DIMENSION(:)  :: VarIn
     1304    INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
     1305   
     1306    INTEGER,DIMENSION(SIZE(VarIn))   :: Var_tmp
     1307           
     1308    CALL reduce_min_omp(VarIn,Var_tmp)
     1309!$OMP MASTER     
     1310    CALL reduce_min_mpi(Var_tmp,VarOut)
     1311!$OMP END MASTER
     1312 
     1313  END SUBROUTINE reduce_min_i1 
     1314
     1315
     1316  SUBROUTINE reduce_min_i2(VarIn, VarOut)
     1317    IMPLICIT NONE
     1318 
     1319    INTEGER,INTENT(IN),DIMENSION(:,:)  :: VarIn
     1320    INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
     1321   
     1322    INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2)) :: Var_tmp
     1323           
     1324    CALL reduce_min_omp(VarIn,Var_tmp)
     1325!$OMP MASTER     
     1326    CALL reduce_min_mpi(Var_tmp,VarOut)
     1327!$OMP END MASTER
     1328 
     1329  END SUBROUTINE reduce_min_i2 
     1330 
     1331
     1332  SUBROUTINE reduce_min_i3(VarIn, VarOut)
     1333    IMPLICIT NONE
     1334 
     1335    INTEGER,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
     1336    INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
     1337   
     1338    INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3))  :: Var_tmp
     1339           
     1340    CALL reduce_min_omp(VarIn,Var_tmp)
     1341!$OMP MASTER     
     1342    CALL reduce_min_mpi(Var_tmp,VarOut)
     1343!$OMP END MASTER
     1344 
     1345  END SUBROUTINE reduce_min_i3 
     1346
     1347
     1348  SUBROUTINE reduce_min_i4(VarIn, VarOut)
     1349    IMPLICIT NONE
     1350 
     1351    INTEGER,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
     1352    INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
     1353   
     1354    INTEGER,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))  :: Var_tmp
     1355           
     1356    CALL reduce_min_omp(VarIn,Var_tmp)
     1357!$OMP MASTER     
     1358    CALL reduce_min_mpi(Var_tmp,VarOut)
     1359!$OMP END MASTER
     1360 
     1361  END SUBROUTINE reduce_min_i4 
     1362
     1363
     1364! Les reels
     1365
     1366  SUBROUTINE reduce_min_r(VarIn, VarOut)
     1367    IMPLICIT NONE
     1368 
     1369    REAL,INTENT(IN)  :: VarIn
     1370    REAL,INTENT(OUT) :: VarOut
     1371   
     1372    REAL             :: Var_tmp
     1373           
     1374    CALL reduce_min_omp(VarIn,Var_tmp)
     1375!$OMP MASTER     
     1376    CALL reduce_min_mpi(Var_tmp,VarOut)
     1377!$OMP END MASTER
     1378 
     1379  END SUBROUTINE reduce_min_r 
     1380
     1381
     1382  SUBROUTINE reduce_min_r1(VarIn, VarOut)
     1383    IMPLICIT NONE
     1384 
     1385    REAL,INTENT(IN),DIMENSION(:)  :: VarIn
     1386    REAL,INTENT(OUT),DIMENSION(:) :: VarOut
     1387   
     1388    REAL,DIMENSION(SIZE(VarIn))   :: Var_tmp
     1389           
     1390    CALL reduce_min_omp(VarIn,Var_tmp)
     1391!$OMP MASTER     
     1392    CALL reduce_min_mpi(Var_tmp,VarOut)
     1393!$OMP END MASTER
     1394 
     1395  END SUBROUTINE reduce_min_r1 
     1396
     1397
     1398  SUBROUTINE reduce_min_r2(VarIn, VarOut)
     1399    IMPLICIT NONE
     1400 
     1401    REAL,INTENT(IN),DIMENSION(:,:)  :: VarIn
     1402    REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
     1403   
     1404    REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2)) :: Var_tmp
     1405           
     1406    CALL reduce_min_omp(VarIn,Var_tmp)
     1407!$OMP MASTER     
     1408    CALL reduce_min_mpi(Var_tmp,VarOut)
     1409!$OMP END MASTER
     1410 
     1411  END SUBROUTINE reduce_min_r2 
     1412 
     1413
     1414  SUBROUTINE reduce_min_r3(VarIn, VarOut)
     1415    IMPLICIT NONE
     1416 
     1417    REAL,INTENT(IN),DIMENSION(:,:,:)  :: VarIn
     1418    REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
     1419   
     1420    REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3))  :: Var_tmp
     1421           
     1422    CALL reduce_min_omp(VarIn,Var_tmp)
     1423!$OMP MASTER     
     1424    CALL reduce_min_mpi(Var_tmp,VarOut)
     1425!$OMP END MASTER
     1426 
     1427  END SUBROUTINE reduce_min_r3 
     1428
     1429
     1430  SUBROUTINE reduce_min_r4(VarIn, VarOut)
     1431    IMPLICIT NONE
     1432 
     1433    REAL,INTENT(IN),DIMENSION(:,:,:,:)  :: VarIn
     1434    REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
     1435   
     1436    REAL,DIMENSION(SIZE(VarIn,1),SIZE(VarIn,2),SIZE(VarIn,3),SIZE(VarIn,4))  :: Var_tmp
     1437           
     1438    CALL reduce_min_omp(VarIn,Var_tmp)
     1439!$OMP MASTER     
     1440    CALL reduce_min_mpi(Var_tmp,VarOut)
     1441!$OMP END MASTER
     1442 
     1443  END SUBROUTINE reduce_min_r4 
     1444
     1445
    12731446   
    12741447END MODULE mod_phys_lmdz_transfert_para
Note: See TracChangeset for help on using the changeset viewer.