Ignore:
Timestamp:
07/29/14 18:27:41 (10 years ago)
Author:
ymipsl
Message:

Add bcast functionnalities for MPI

YM

Location:
codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/mpi_mod.F90

    r221 r261  
    77  INTEGER :: MPI_REAL8 
    88  INTEGER :: MPI_INTEGER 
     9  INTEGER :: MPI_CHARACTER 
     10  INTEGER :: MPI_LOGICAL 
    911  INTEGER :: MPI_ANY_SOURCE 
    1012  INTEGER :: MPI_MAX 
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/mpipara.F90

    r221 r261  
    99  LOGICAL,SAVE :: using_mpi 
    1010  LOGICAL,SAVE :: is_mpi_root 
     11  LOGICAL,SAVE :: is_mpi_master 
     12  LOGICAL,SAVE :: mpi_master 
     13   
    1114   
    1215  INTERFACE allocate_mpi_buffer 
     
    9295    ENDIF 
    9396     
     97    mpi_master=0 
    9498    IF (mpi_rank==0) THEN  
    9599      is_mpi_root=.TRUE. 
     100      is_mpi_master=.TRUE. 
    96101    ELSE 
    97102      is_mpi_root=.FALSE. 
     103      is_mpi_master=.FALSE. 
    98104    ENDIF 
    99105     
     
    102108  SUBROUTINE finalize_mpipara 
    103109  USE mpi_mod 
    104   IMPLICIT NONE 
    105      
     110#ifdef CPP_USING_XIOS 
     111  USE xios 
     112#endif 
     113  IMPLICIT NONE 
     114     
     115#ifdef CPP_USING_XIOS 
     116      CALL xios_finalize 
     117#endif 
    106118    IF (using_mpi) CALL MPI_FINALIZE(ierr) 
    107119     
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/transfert.F90

    r260 r261  
    55                                req_e1_scal, req_i0, req_e0_vect, req_e0_scal, request_add_point, create_request, gather_field, scatter_field, & 
    66                                t_message,init_message=>init_message_mpi,transfert_message=>transfert_message_mpi,  & 
    7                                 send_message=>send_message_mpi,test_message=>test_message_mpi,wait_message=>wait_message_mpi,barrier 
     7                                send_message=>send_message_mpi,test_message=>test_message_mpi,wait_message=>wait_message_mpi,barrier, & 
     8                                bcast_mpi 
    89#else  
    910  USE transfert_mpi_mod, ONLY : init_transfert, transfert_request=>transfert_request_seq, req_i1,req_e1_vect, & 
    1011                                req_e1_scal,req_i0, req_e0_vect, req_e0_scal, request_add_point, create_request, gather_field, scatter_field,& 
    1112                                t_message,init_message=>init_message_seq,transfert_message=>transfert_message_seq,  & 
    12                                 send_message=>send_message_seq,test_message=>test_message_seq,wait_message=>wait_message_seq,barrier 
     13                                send_message=>send_message_seq,test_message=>test_message_seq,wait_message=>wait_message_seq,barrier, & 
     14                                bcast_mpi 
    1315#endif 
     16 
     17  USE transfert_omp_mod 
     18   
     19  INTERFACE bcast 
     20    MODULE PROCEDURE bcast_c,                                     & 
     21                     bcast_i,bcast_i1,bcast_i2,bcast_i3,bcast_i4, & 
     22                     bcast_r,bcast_r1,bcast_r2,bcast_r3,bcast_r4, & 
     23                     bcast_l,bcast_l1,bcast_l2,bcast_l3,bcast_l4 
     24 
     25  END INTERFACE 
     26 
     27 
     28CONTAINS 
     29 
     30 
     31!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     32!! Definition des Broadcast --> 4D   !! 
     33!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     34 
     35!! -- Les chaine de charactère -- !! 
     36 
     37  SUBROUTINE bcast_c(var) 
     38  IMPLICIT NONE 
     39    CHARACTER(LEN=*),INTENT(INOUT) :: Var 
     40    
     41!$OMP MASTER 
     42    CALL bcast_mpi(Var) 
     43!$OMP END MASTER 
     44    CALL bcast_omp(Var) 
     45     
     46  END SUBROUTINE bcast_c 
     47 
     48!! -- Les entiers -- !! 
     49   
     50  SUBROUTINE bcast_i(var) 
     51  IMPLICIT NONE 
     52    INTEGER,INTENT(INOUT) :: Var 
     53!$OMP MASTER 
     54    CALL bcast_mpi(Var) 
     55!$OMP END MASTER 
     56    CALL bcast_omp(Var) 
     57     
     58  END SUBROUTINE bcast_i 
     59 
     60  SUBROUTINE bcast_i1(var) 
     61  IMPLICIT NONE 
     62    INTEGER,INTENT(INOUT) :: Var(:) 
     63    
     64!$OMP MASTER 
     65    CALL bcast_mpi(Var) 
     66!$OMP END MASTER 
     67    CALL bcast_omp(Var) 
     68     
     69  END SUBROUTINE bcast_i1 
     70 
     71 
     72  SUBROUTINE bcast_i2(var) 
     73  IMPLICIT NONE 
     74    INTEGER,INTENT(INOUT) :: Var(:,:) 
     75    
     76!$OMP MASTER 
     77    CALL bcast_mpi(Var) 
     78!$OMP END MASTER 
     79    CALL bcast_omp(Var) 
     80     
     81  END SUBROUTINE bcast_i2 
     82 
     83 
     84  SUBROUTINE bcast_i3(var) 
     85  IMPLICIT NONE 
     86    INTEGER,INTENT(INOUT) :: Var(:,:,:) 
     87    
     88!$OMP MASTER 
     89    CALL bcast_mpi(Var) 
     90!$OMP END MASTER 
     91    CALL bcast_omp(Var) 
     92     
     93  END SUBROUTINE bcast_i3 
     94 
     95 
     96  SUBROUTINE bcast_i4(var) 
     97  IMPLICIT NONE 
     98    INTEGER,INTENT(INOUT) :: Var(:,:,:,:) 
     99    
     100!$OMP MASTER 
     101    CALL bcast_mpi(Var) 
     102!$OMP END MASTER 
     103    CALL bcast_omp(Var) 
     104     
     105  END SUBROUTINE bcast_i4 
     106 
     107  
     108!! -- Les reels -- !! 
     109   
     110  SUBROUTINE bcast_r(var) 
     111  IMPLICIT NONE 
     112    REAL,INTENT(INOUT) :: Var 
     113 
     114!$OMP MASTER 
     115    CALL bcast_mpi(Var) 
     116!$OMP END MASTER 
     117    CALL bcast_omp(Var) 
     118     
     119  END SUBROUTINE bcast_r 
     120 
     121  SUBROUTINE bcast_r1(var) 
     122  IMPLICIT NONE 
     123    REAL,INTENT(INOUT) :: Var(:) 
     124    
     125!$OMP MASTER 
     126    CALL bcast_mpi(Var) 
     127!$OMP END MASTER 
     128    CALL bcast_omp(Var) 
     129     
     130  END SUBROUTINE bcast_r1 
     131 
     132 
     133  SUBROUTINE bcast_r2(var) 
     134  IMPLICIT NONE 
     135    REAL,INTENT(INOUT) :: Var(:,:) 
     136    
     137!$OMP MASTER 
     138    CALL bcast_mpi(Var) 
     139!$OMP END MASTER 
     140    CALL bcast_omp(Var) 
     141     
     142  END SUBROUTINE bcast_r2 
     143 
     144 
     145  SUBROUTINE bcast_r3(var) 
     146  IMPLICIT NONE 
     147    REAL,INTENT(INOUT) :: Var(:,:,:) 
     148    
     149!$OMP MASTER 
     150    CALL bcast_mpi(Var) 
     151!$OMP END MASTER 
     152    CALL bcast_omp(Var) 
     153     
     154  END SUBROUTINE bcast_r3 
     155 
     156 
     157  SUBROUTINE bcast_r4(var) 
     158  IMPLICIT NONE 
     159    REAL,INTENT(INOUT) :: Var(:,:,:,:) 
     160    
     161!$OMP MASTER 
     162    CALL bcast_mpi(Var) 
     163!$OMP END MASTER 
     164    CALL bcast_omp(Var) 
     165     
     166  END SUBROUTINE bcast_r4  
     167 
     168 
     169!! -- Les booleens -- !! 
     170   
     171  SUBROUTINE bcast_l(var) 
     172  IMPLICIT NONE 
     173    LOGICAL,INTENT(INOUT) :: Var 
     174!$OMP MASTER 
     175    CALL bcast_mpi(Var) 
     176!$OMP END MASTER 
     177    CALL bcast_omp(Var) 
     178     
     179  END SUBROUTINE bcast_l 
     180 
     181  SUBROUTINE bcast_l1(var) 
     182  IMPLICIT NONE 
     183    LOGICAL,INTENT(INOUT) :: Var(:) 
     184    
     185!$OMP MASTER 
     186    CALL bcast_mpi(Var) 
     187!$OMP END MASTER 
     188    CALL bcast_omp(Var) 
     189     
     190  END SUBROUTINE bcast_l1 
     191 
     192 
     193  SUBROUTINE bcast_l2(var) 
     194  IMPLICIT NONE 
     195    LOGICAL,INTENT(INOUT) :: Var(:,:) 
     196    
     197!$OMP MASTER 
     198    CALL bcast_mpi(Var) 
     199!$OMP END MASTER 
     200    CALL bcast_omp(Var) 
     201     
     202  END SUBROUTINE bcast_l2 
     203 
     204 
     205  SUBROUTINE bcast_l3(var) 
     206  IMPLICIT NONE 
     207    LOGICAL,INTENT(INOUT) :: Var(:,:,:) 
     208    
     209!$OMP MASTER 
     210    CALL bcast_mpi(Var) 
     211!$OMP END MASTER 
     212    CALL bcast_omp(Var) 
     213     
     214  END SUBROUTINE bcast_l3 
     215 
     216 
     217  SUBROUTINE bcast_l4(var) 
     218  IMPLICIT NONE 
     219    LOGICAL,INTENT(INOUT) :: Var(:,:,:,:) 
     220    
     221!$OMP MASTER 
     222    CALL bcast_mpi(Var) 
     223!$OMP END MASTER 
     224    CALL bcast_omp(Var) 
     225     
     226  END SUBROUTINE bcast_l4 
     227 
    14228   
    15229END MODULE transfert_mod 
  • codes/icosagcm/branches/SATURN_DYNAMICO/ICOSAGCM/src/transfert_mpi.f90

    r260 r261  
    7474    INTEGER :: number 
    7575  END TYPE t_message 
     76 
     77 
     78  INTERFACE bcast_mpi 
     79    MODULE PROCEDURE bcast_mpi_c,                                                     & 
     80                     bcast_mpi_i,bcast_mpi_i1,bcast_mpi_i2,bcast_mpi_i3,bcast_mpi_i4, & 
     81                     bcast_mpi_r,bcast_mpi_r1,bcast_mpi_r2,bcast_mpi_r3,bcast_mpi_r4, & 
     82                     bcast_mpi_l,bcast_mpi_l1,bcast_mpi_l2,bcast_mpi_l3,bcast_mpi_l4 
     83  END INTERFACE 
     84 
     85 
    7686   
    7787CONTAINS 
     
    17351745  END SUBROUTINE trace_out               
    17361746 
     1747 
     1748 
     1749 
     1750!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     1751!! Definition des Broadcast --> 4D   !! 
     1752!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     1753 
     1754!! -- Les chaine de charactère -- !! 
     1755 
     1756  SUBROUTINE bcast_mpi_c(var1) 
     1757  IMPLICIT NONE 
     1758    CHARACTER(LEN=*),INTENT(INOUT) :: Var1 
     1759    
     1760    CALL bcast_mpi_cgen(Var1,len(Var1)) 
     1761 
     1762  END SUBROUTINE bcast_mpi_c 
     1763 
     1764!! -- Les entiers -- !! 
     1765   
     1766  SUBROUTINE bcast_mpi_i(var) 
     1767  USE mpipara 
     1768  IMPLICIT NONE 
     1769    INTEGER,INTENT(INOUT) :: Var 
     1770     
     1771    INTEGER               :: var_tmp(1) 
     1772     
     1773    IF (is_mpi_master) var_tmp(1)=var 
     1774    CALL bcast_mpi_igen(Var_tmp,1) 
     1775    var=var_tmp(1) 
     1776     
     1777  END SUBROUTINE bcast_mpi_i 
     1778 
     1779  SUBROUTINE bcast_mpi_i1(var) 
     1780  IMPLICIT NONE 
     1781    INTEGER,INTENT(INOUT) :: Var(:) 
     1782 
     1783    CALL bcast_mpi_igen(Var,size(Var)) 
     1784     
     1785  END SUBROUTINE bcast_mpi_i1 
     1786 
     1787  SUBROUTINE bcast_mpi_i2(var) 
     1788  IMPLICIT NONE 
     1789    INTEGER,INTENT(INOUT) :: Var(:,:) 
     1790    
     1791    CALL bcast_mpi_igen(Var,size(Var)) 
     1792   
     1793  END SUBROUTINE bcast_mpi_i2 
     1794 
     1795  SUBROUTINE bcast_mpi_i3(var) 
     1796  IMPLICIT NONE 
     1797    INTEGER,INTENT(INOUT) :: Var(:,:,:) 
     1798    
     1799    CALL bcast_mpi_igen(Var,size(Var)) 
     1800 
     1801  END SUBROUTINE bcast_mpi_i3 
     1802 
     1803  SUBROUTINE bcast_mpi_i4(var) 
     1804  IMPLICIT NONE 
     1805    INTEGER,INTENT(INOUT) :: Var(:,:,:,:) 
     1806    
     1807    CALL bcast_mpi_igen(Var,size(Var)) 
     1808 
     1809  END SUBROUTINE bcast_mpi_i4 
     1810 
     1811 
     1812!! -- Les reels -- !! 
     1813 
     1814  SUBROUTINE bcast_mpi_r(var) 
     1815  USE mpipara 
     1816  IMPLICIT NONE 
     1817    REAL,INTENT(INOUT) :: Var 
     1818    REAL               :: var_tmp(1) 
     1819     
     1820    IF (is_mpi_master) var_tmp(1)=var 
     1821    CALL bcast_mpi_rgen(Var_tmp,1) 
     1822    var=var_tmp(1)    
     1823 
     1824  END SUBROUTINE bcast_mpi_r 
     1825 
     1826  SUBROUTINE bcast_mpi_r1(var) 
     1827  IMPLICIT NONE 
     1828    REAL,INTENT(INOUT) :: Var(:) 
     1829    
     1830    CALL bcast_mpi_rgen(Var,size(Var)) 
     1831 
     1832  END SUBROUTINE bcast_mpi_r1 
     1833 
     1834  SUBROUTINE bcast_mpi_r2(var) 
     1835  IMPLICIT NONE 
     1836    REAL,INTENT(INOUT) :: Var(:,:) 
     1837    
     1838    CALL bcast_mpi_rgen(Var,size(Var)) 
     1839 
     1840  END SUBROUTINE bcast_mpi_r2 
     1841 
     1842  SUBROUTINE bcast_mpi_r3(var) 
     1843  IMPLICIT NONE 
     1844    REAL,INTENT(INOUT) :: Var(:,:,:) 
     1845    
     1846    CALL bcast_mpi_rgen(Var,size(Var)) 
     1847 
     1848  END SUBROUTINE bcast_mpi_r3 
     1849 
     1850  SUBROUTINE bcast_mpi_r4(var) 
     1851  IMPLICIT NONE 
     1852    REAL,INTENT(INOUT) :: Var(:,:,:,:) 
     1853    
     1854    CALL bcast_mpi_rgen(Var,size(Var)) 
     1855 
     1856  END SUBROUTINE bcast_mpi_r4 
     1857   
     1858!! -- Les booleans -- !! 
     1859 
     1860  SUBROUTINE bcast_mpi_l(var) 
     1861  USE mpipara 
     1862  IMPLICIT NONE 
     1863    LOGICAL,INTENT(INOUT) :: Var 
     1864    LOGICAL               :: var_tmp(1) 
     1865     
     1866    IF (is_mpi_master) var_tmp(1)=var 
     1867    CALL bcast_mpi_lgen(Var_tmp,1) 
     1868    var=var_tmp(1)    
     1869 
     1870  END SUBROUTINE bcast_mpi_l 
     1871 
     1872  SUBROUTINE bcast_mpi_l1(var) 
     1873  IMPLICIT NONE 
     1874    LOGICAL,INTENT(INOUT) :: Var(:) 
     1875    
     1876    CALL bcast_mpi_lgen(Var,size(Var)) 
     1877 
     1878  END SUBROUTINE bcast_mpi_l1 
     1879 
     1880  SUBROUTINE bcast_mpi_l2(var) 
     1881  IMPLICIT NONE 
     1882    LOGICAL,INTENT(INOUT) :: Var(:,:) 
     1883    
     1884    CALL bcast_mpi_lgen(Var,size(Var)) 
     1885 
     1886  END SUBROUTINE bcast_mpi_l2 
     1887 
     1888  SUBROUTINE bcast_mpi_l3(var) 
     1889  IMPLICIT NONE 
     1890    LOGICAL,INTENT(INOUT) :: Var(:,:,:) 
     1891    
     1892    CALL bcast_mpi_lgen(Var,size(Var)) 
     1893 
     1894  END SUBROUTINE bcast_mpi_l3 
     1895 
     1896  SUBROUTINE bcast_mpi_l4(var) 
     1897  IMPLICIT NONE 
     1898    LOGICAL,INTENT(INOUT) :: Var(:,:,:,:) 
     1899    
     1900    CALL bcast_mpi_lgen(Var,size(Var)) 
     1901 
     1902  END SUBROUTINE bcast_mpi_l4 
     1903   
     1904!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     1905!! DEFINITION DES FONCTIONS DE TRANSFERT GENERIQUES ! 
     1906!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     1907 
     1908  SUBROUTINE bcast_mpi_cgen(var,nb) 
     1909    USE mpi_mod 
     1910    USE mpipara 
     1911    IMPLICIT NONE 
     1912     
     1913    CHARACTER(LEN=*),INTENT(INOUT) :: Var 
     1914    INTEGER,INTENT(IN) :: nb 
     1915 
     1916    IF (.NOT. using_mpi) RETURN 
     1917     
     1918    CALL MPI_BCAST(Var,nb,MPI_CHARACTER,mpi_master,comm_icosa,ierr) 
     1919         
     1920  END SUBROUTINE bcast_mpi_cgen 
     1921 
     1922 
     1923       
     1924  SUBROUTINE bcast_mpi_igen(var,nb) 
     1925    USE mpi_mod 
     1926    USE mpipara 
     1927    IMPLICIT NONE 
     1928     
     1929    INTEGER,DIMENSION(nb),INTENT(INOUT) :: Var 
     1930    INTEGER,INTENT(IN) :: nb 
     1931 
     1932    IF (.NOT. using_mpi) RETURN 
     1933 
     1934    CALL MPI_BCAST(Var,nb,MPI_INTEGER,mpi_master,comm_icosa,ierr) 
     1935         
     1936  END SUBROUTINE bcast_mpi_igen 
     1937 
     1938 
     1939 
     1940   
     1941  SUBROUTINE bcast_mpi_rgen(var,nb) 
     1942    USE mpi_mod 
     1943    USE mpipara 
     1944    IMPLICIT NONE 
     1945     
     1946    REAL,DIMENSION(nb),INTENT(INOUT) :: Var 
     1947    INTEGER,INTENT(IN) :: nb 
     1948 
     1949    IF (.NOT. using_mpi) RETURN 
     1950 
     1951    CALL MPI_BCAST(Var,nb,MPI_REAL,mpi_master,comm_icosa,ierr) 
     1952     
     1953  END SUBROUTINE bcast_mpi_rgen 
     1954   
     1955 
     1956 
     1957 
     1958  SUBROUTINE bcast_mpi_lgen(var,nb) 
     1959    USE mpi_mod 
     1960    USE mpipara 
     1961    IMPLICIT NONE 
     1962     
     1963    LOGICAL,DIMENSION(nb),INTENT(INOUT) :: Var 
     1964    INTEGER,INTENT(IN) :: nb 
     1965 
     1966    IF (.NOT. using_mpi) RETURN 
     1967 
     1968    CALL MPI_BCAST(Var,nb,MPI_LOGICAL,mpi_master,comm_icosa,ierr) 
     1969 
     1970  END SUBROUTINE bcast_mpi_lgen 
     1971   
     1972    
    17371973END MODULE transfert_mpi_mod 
    17381974       
Note: See TracChangeset for help on using the changeset viewer.