Changeset 5122


Ignore:
Timestamp:
Jul 24, 2024, 8:45:54 PM (3 months ago)
Author:
abarral
Message:

fix lmdz_fxy

Location:
LMDZ6/branches/Amaury_dev
Files:
3 added
6 edited
1 moved

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/fxy.f90

    r5108 r5122  
    55        rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, rlonp025, xprimp025)
    66
    7   USE comconst_mod, ONLY: pi
    8   USE serre_mod, ONLY: pxo, pyo, alphax, alphay, transx, transy
    9   USE lmdz_fxy, ONLY: fxy_new
     7  USE lmdz_fxy_new, ONLY: fx, fxprim, fy, fyprim
    108
    119  IMPLICIT NONE
     
    2624  REAL :: rlonu(iip1), xprimu(iip1), rlonv(iip1), xprimv(iip1), &
    2725          rlonm025(iip1), xprimm025(iip1), rlonp025(iip1), xprimp025(iip1)
    28   REAL :: ripx, fx, fxprim, fy, fyprim, ri, rj, bigy
    29 
    30   CALL fxy_new(ripx, fx, fxprim, fy, fyprim, ri, rj, bigy)
    3126
    3227  !    ......  calcul  des  latitudes  et de y'   .....
  • LMDZ6/branches/Amaury_dev/libf/dyn3d_common/fxysinus.f90

    r5108 r5122  
    66
    77  USE comconst_mod, ONLY: pi
    8   USE lmdz_fxy, ONLY: fxy_sin
     8  USE lmdz_fxy_sin, ONLY: fx, fxprim, fy, fyprim
    99  IMPLICIT NONE
    1010  !
     
    2424  REAL :: rlonu(iip1), xprimu(iip1), rlonv(iip1), xprimv(iip1), &
    2525          rlonm025(iip1), xprimm025(iip1), rlonp025(iip1), xprimp025(iip1)
    26   REAL :: fy, fx, fxprim, fyprim, ri, rj
    27 
    28   CALL fxy_sin(fy, fx, fxprim, fyprim, ri, rj)
    29 
    3026
    3127  !    ......  calcul  des  latitudes  et de y'   .....
  • LMDZ6/branches/Amaury_dev/libf/grid/lmdz_fxy_new.f90

    r5118 r5122  
    1 ! This module replaces grid/fxy*.h
     1! This module replaces grid/fxy_new.h
    22
    3 MODULE lmdz_fxy
     3MODULE lmdz_fxy_new
     4  USE comconst_mod, ONLY: pi
     5  USE serre_mod, ONLY: pxo, pyo, alphax, alphay, transx, transy
    46  IMPLICIT NONE; PRIVATE
    5   PUBLIC fxy_new, fxy_reg, fxy_sin, fxy_prim
     7  PUBLIC fx, fxprim, fy, fyprim
     8  INCLUDE "dimensions.h"
     9  INCLUDE "paramet.h"
    610CONTAINS
    7   SUBROUTINE fxy_new(ripx, fx, fxprim, fy, fyprim, ri, rj, bigy)
    8     INCLUDE "dimensions.h"
    9     REAL :: ripx, fx, fxprim, fy, fyprim, ri, rj, bigy
     11  REAL FUNCTION ripx(ri)
     12    REAL, INTENT(IN) :: ri
     13    ripx = (ri - 1.0) * 2. * pi / REAL(iim)
     14  END FUNCTION ripx
    1015
    11     !....stretching in x...
    12     ripx(ri) = (ri - 1.0) * 2. * pi / REAL(iim)
    13     fx  (ri) = ripx(ri) + transx + &
    14             alphax * SIN(ripx(ri) + transx - pxo) - pi
    15     fxprim(ri) = 2. * pi / REAL(iim) * &
    16             (1. + alphax * COS(ripx(ri) + transx - pxo))
     16  REAL FUNCTION fx(ri)
     17    REAL, INTENT(IN) :: ri
     18    fx = ripx(ri) + transx + alphax * SIN(ripx(ri) + transx - pxo) - pi
     19  END FUNCTION fx
    1720
    18     !....stretching in y...
    19     bigy(rj) = 2. * (REAL(jjp1) - rj) * pi / jjm
    20     fy(rj) = (bigy(rj) + transy + &
    21             alphay * SIN(bigy(rj) + transy - pyo)) / 2. - pi / 2.
    22     fyprim(rj) = (pi / jjm) * (1. + &
    23             alphay * COS(bigy(rj) + transy - pyo))
     21  REAL FUNCTION fxprim(ri)
     22    REAL, INTENT(IN) :: ri
     23    fxprim = 2. * pi / REAL(iim) * (1. + alphax * COS(ripx(ri) + transx - pxo))
     24  END FUNCTION fxprim
    2425
    25     ! fy(rj)= pyo-pisjjm*(rj-transy)+coefalpha*SIN(depisjm*(rj-
    26     ! *  transy ))
    27     !   fyprim(rj)= pisjjm-pisjjm*coefy2* COS(depisjm*(rj-transy))
    28     !--------------------------------------------------------------
    29   END SUBROUTINE fxy_new
     26  REAL FUNCTION bigy(rj)
     27    REAL, INTENT(IN) :: rj
     28    bigy = 2. * (REAL(jjp1) - rj) * pi / jjm
     29  END FUNCTION bigy
    3030
    31   SUBROUTINE fxy_reg(fy, fx, fxprim, fyprim, ri, rj)
    32     INCLUDE "dimensions.h"
    33     REAL :: fy, fx, fxprim, fyprim, ri, rj
     31  REAL FUNCTION fy(rj)
     32    REAL, INTENT(IN) :: rj
     33    fy = (bigy(rj) + transy + alphay * SIN(bigy(rj) + transy - pyo)) / 2. - pi / 2.
     34  END FUNCTION fy
    3435
    35     fy    (rj) = pi / REAL(jjm) * (0.5 * REAL(jjm) + 1. - rj)
    36     fyprim(rj) = pi / REAL(jjm)
    37 
    38     ! fy(rj)=ASIN(1.+2.*((1.-rj)/REAL(jjm)))
    39     ! fyprim(rj)=1./SQRT((rj-1.)*(jjm+1.-rj))
    40 
    41     fx    (ri) = 2. * pi / REAL(iim) * (ri - 0.5 * REAL(iim) - 1.)
    42     ! fx    ( ri ) = 2.*pi/REAL(iim) * ( ri - 0.5* ( REAL(iim) + 1.) )
    43     fxprim(ri) = 2. * pi / REAL(iim)
    44     !
    45     !    La valeur de pi est passee par le common/const/ou /const2/ .
    46     !    Sinon, il faut la calculer avant d'appeler ces fonctions .
    47     !
    48     !   ----------------------------------------------------------------
    49     ! Fonctions a changer eventuellement, selon x(x) et y(y) choisis .
    50     !   -----------------------------------------------------------------
    51     !
    52     !    .....  ici, on a l'application particuliere suivante   ........
    53     !
    54     !            **************************************
    55     !            **     x = 2. * pi/iim *  X         **
    56     !            **     y =      pi/jjm *  Y         **
    57     !            **************************************
    58     !
    59     !   ..................................................................
    60     !   ..................................................................
    61     !
    62     !
    63     !
    64     !-----------------------------------------------------------------------
    65 
    66   END SUBROUTINE fxy_reg
    67 
    68   SUBROUTINE fxy_sin(fy, fx, fxprim, fyprim, ri, rj)
    69     REAL :: fy, fx, fxprim, fyprim, ri, rj
    70 
    71     fy(rj) = ASIN(1. + 2. * ((1. - rj) / REAL(jjm)))
    72     fyprim(rj) = 1. / SQRT((rj - 1.) * (jjm + 1. - rj))
    73 
    74     fx    (ri) = 2. * pi / REAL(iim) * (ri - 0.5 * REAL(iim) - 1.)
    75     ! fx    ( ri ) = 2.*pi/REAL(iim) * ( ri - 0.5* ( REAL(iim) + 1.) )
    76     fxprim(ri) = 2. * pi / REAL(iim)
    77     !
    78     !
    79     !    La valeur de pi est passee par le common/const/ou /const2/ .
    80     !    Sinon, il faut la calculer avant d'appeler ces fonctions .
    81     !
    82     !   ----------------------------------------------------------------
    83     ! Fonctions a changer eventuellement, selon x(x) et y(y) choisis .
    84     !   -----------------------------------------------------------------
    85     !
    86     !    .....  ici, on a l'application particuliere suivante   ........
    87     !
    88     !            **************************************
    89     !            **     x = 2. * pi/iim *  X         **
    90     !            **     y =      pi/jjm *  Y         **
    91     !            **************************************
    92     !
    93     !   ..................................................................
    94     !   ..................................................................
    95     !
    96     !
    97     !
    98     !-----------------------------------------------------------------------
    99   END SUBROUTINE fxy_sin
    100 
    101   SUBROUTINE fxy_prim(fy, fx, fxprim, fyprim, ri, rj)
    102     REAL :: fy, fx, fxprim, fyprim, ri, rj
    103 
    104     fy    (rj) = pi / REAL(jjm) * (0.5 * REAL(jjm) + 1. - rj)
    105     fyprim(rj) = pi / REAL(jjm)
    106 
    107     ! fy(rj)=ASIN(1.+2.*((1.-rj)/REAL(jjm)))
    108     ! fyprim(rj)=1./SQRT((rj-1.)*(jjm+1.-rj))
    109 
    110     fx    (ri) = 2. * pi / REAL(iim) * (ri - 0.5 * REAL(iim) - 1.)
    111     ! fx    ( ri ) = 2.*pi/REAL(iim) * ( ri - 0.5* ( REAL(iim) + 1.) )
    112     fxprim(ri) = 2. * pi / REAL(iim)
    113     !
    114     !
    115     !    La valeur de pi est passee par le common/const/ou /const2/ .
    116     !    Sinon, il faut la calculer avant d'appeler ces fonctions .
    117     !
    118     !   ----------------------------------------------------------------
    119     ! Fonctions a changer eventuellement, selon x(x) et y(y) choisis .
    120     !   -----------------------------------------------------------------
    121     !
    122     !    .....  ici, on a l'application particuliere suivante   ........
    123     !
    124     !            **************************************
    125     !            **     x = 2. * pi/iim *  X         **
    126     !            **     y =      pi/jjm *  Y         **
    127     !            **************************************
    128     !
    129     !   ..................................................................
    130     !   ..................................................................
    131     !
    132     !
    133     !
    134     !-----------------------------------------------------------------------
    135   END SUBROUTINE fxy_prim
    136 END MODULE lmdz_fxy
     36  REAL FUNCTION fyprim(rj)
     37    REAL, INTENT(IN) :: rj
     38    fyprim = (pi / jjm) * (1. + alphay * COS(bigy(rj) + transy - pyo))
     39  END FUNCTION fyprim
     40END MODULE lmdz_fxy_new
  • LMDZ6/branches/Amaury_dev/libf/misc/lmdz_libmath.f90

    r5116 r5122  
    33MODULE lmdz_libmath
    44  IMPLICIT NONE; PRIVATE
    5   PUBLIC ismin, ismax
     5  PUBLIC ismin, ismax, minmax
    66
    77CONTAINS
  • LMDZ6/branches/Amaury_dev/libf/misc/lmdz_readTracFiles.f90

    r5117 r5122  
    429429      IF(LEN_TRIM(str) == 0) CYCLE                                     !--- Empty line (probably end of file)
    430430      IF(str     == '') CYCLE                                          !--- Skip empty line (probably at the end of the file)
    431       IF(str(1:1)==
    432         '&') THEN                                           !=== SECTION HEADER LINE
     431      IF(str(1:1)=='&') THEN                                           !=== SECTION HEADER LINE
    433432        ndb = SIZE(dBase)                                             !--- Number of sections so far
    434433        secn = str(2:LEN_TRIM(str)) // ' '                               !--- Current section name
  • LMDZ6/branches/Amaury_dev/libf/phy_common/lmdz_phys_omp_transfert.f90

    r5110 r5122  
    1 
    21!$Header$
    32
    43MODULE lmdz_phys_omp_transfert
    5 
    64  PRIVATE
    7  
    8   REAL,PARAMETER :: grow_factor=1.5
    9   INTEGER,PARAMETER :: size_min=1024
    10  
    11   CHARACTER(LEN=size_min),SAVE            :: buffer_c
    12 !  INTEGER,SAVE                            :: size_c=0
    13   INTEGER,SAVE,ALLOCATABLE,DIMENSION(:)   :: buffer_i
    14   INTEGER,SAVE                            :: size_i=0
    15   REAL,SAVE,ALLOCATABLE,DIMENSION(:)      :: buffer_r
    16   INTEGER,SAVE                            :: size_r=0
    17   LOGICAL,SAVE,ALLOCATABLE,DIMENSION(:)   :: buffer_l
    18   INTEGER,SAVE                            :: size_l=0
    19 
    20 
    21  
    22  
     5
     6  REAL, PARAMETER :: grow_factor = 1.5
     7  INTEGER, PARAMETER :: size_min = 1024
     8
     9  CHARACTER(LEN = size_min), SAVE :: buffer_c
     10  INTEGER, SAVE, ALLOCATABLE, DIMENSION(:) :: buffer_i
     11  INTEGER, SAVE :: size_i = 0
     12  REAL, SAVE, ALLOCATABLE, DIMENSION(:) :: buffer_r
     13  INTEGER, SAVE :: size_r = 0
     14  LOGICAL, SAVE, ALLOCATABLE, DIMENSION(:) :: buffer_l
     15  INTEGER, SAVE :: size_l = 0
     16
    2317  INTERFACE bcast_omp
    24     MODULE PROCEDURE bcast_omp_c,                                                     &
    25                      bcast_omp_i,bcast_omp_i1,bcast_omp_i2,bcast_omp_i3,bcast_omp_i4, &
    26                      bcast_omp_r,bcast_omp_r1,bcast_omp_r2,bcast_omp_r3,bcast_omp_r4, &
    27                      bcast_omp_l,bcast_omp_l1,bcast_omp_l2,bcast_omp_l3,bcast_omp_l4
     18    MODULE PROCEDURE bcast_omp_c, &
     19            bcast_omp_i, bcast_omp_i1, bcast_omp_i2, bcast_omp_i3, bcast_omp_i4, &
     20            bcast_omp_r, bcast_omp_r1, bcast_omp_r2, bcast_omp_r3, bcast_omp_r4, &
     21            bcast_omp_l, bcast_omp_l1, bcast_omp_l2, bcast_omp_l3, bcast_omp_l4
    2822  END INTERFACE
    2923
    3024  INTERFACE scatter_omp
    31     MODULE PROCEDURE scatter_omp_i,scatter_omp_i1,scatter_omp_i2,scatter_omp_i3, &
    32                      scatter_omp_r,scatter_omp_r1,scatter_omp_r2,scatter_omp_r3, &
    33                      scatter_omp_l,scatter_omp_l1,scatter_omp_l2,scatter_omp_l3
     25    MODULE PROCEDURE scatter_omp_i, scatter_omp_i1, scatter_omp_i2, scatter_omp_i3, &
     26            scatter_omp_r, scatter_omp_r1, scatter_omp_r2, scatter_omp_r3, &
     27            scatter_omp_l, scatter_omp_l1, scatter_omp_l2, scatter_omp_l3
    3428  END INTERFACE
    3529
    36  
    3730  INTERFACE gather_omp
    38     MODULE PROCEDURE gather_omp_i,gather_omp_i1,gather_omp_i2,gather_omp_i3, &
    39                      gather_omp_r,gather_omp_r1,gather_omp_r2,gather_omp_r3, &
    40                      gather_omp_l,gather_omp_l1,gather_omp_l2,gather_omp_l3 
     31    MODULE PROCEDURE gather_omp_i, gather_omp_i1, gather_omp_i2, gather_omp_i3, &
     32            gather_omp_r, gather_omp_r1, gather_omp_r2, gather_omp_r3, &
     33            gather_omp_l, gather_omp_l1, gather_omp_l2, gather_omp_l3
    4134  END INTERFACE
    42  
    43  
     35
    4436  INTERFACE reduce_sum_omp
    45     MODULE PROCEDURE reduce_sum_omp_i,reduce_sum_omp_i1,reduce_sum_omp_i2,reduce_sum_omp_i3,reduce_sum_omp_i4, &
    46                      reduce_sum_omp_r,reduce_sum_omp_r1,reduce_sum_omp_r2,reduce_sum_omp_r3,reduce_sum_omp_r4
    47   END INTERFACE 
     37    MODULE PROCEDURE reduce_sum_omp_i, reduce_sum_omp_i1, reduce_sum_omp_i2, reduce_sum_omp_i3, reduce_sum_omp_i4, &
     38            reduce_sum_omp_r, reduce_sum_omp_r1, reduce_sum_omp_r2, reduce_sum_omp_r3, reduce_sum_omp_r4
     39  END INTERFACE
    4840
    4941  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
     42    MODULE PROCEDURE reduce_min_omp_i, reduce_min_omp_i1, reduce_min_omp_i2, reduce_min_omp_i3, reduce_min_omp_i4, &
     43            reduce_min_omp_r, reduce_min_omp_r1, reduce_min_omp_r2, reduce_min_omp_r3, reduce_min_omp_r4
     44  END INTERFACE
     45
     46  PUBLIC bcast_omp, scatter_omp, gather_omp, reduce_sum_omp, reduce_min_omp
    5647
    5748CONTAINS
    58  
     49
    5950  SUBROUTINE check_buffer_i(buff_size)
    60   IMPLICIT NONE
    61   INTEGER :: buff_size
    62 
    63 !$OMP BARRIER
    64 !$OMP MASTER
     51    IMPLICIT NONE
     52    INTEGER :: buff_size
     53
     54    !$OMP BARRIER
     55    !$OMP MASTER
    6556    IF (buff_size>size_i) THEN
    6657      IF (ALLOCATED(buffer_i)) DEALLOCATE(buffer_i)
    67       size_i=MAX(size_min,INT(grow_factor*buff_size))
     58      size_i = MAX(size_min, INT(grow_factor * buff_size))
    6859      ALLOCATE(buffer_i(size_i))
    6960    ENDIF
    70 !$OMP END MASTER
    71 !$OMP BARRIER
    72  
     61    !$OMP END MASTER
     62    !$OMP BARRIER
     63
    7364  END SUBROUTINE check_buffer_i
    74  
     65
    7566  SUBROUTINE check_buffer_r(buff_size)
    76   IMPLICIT NONE
    77   INTEGER :: buff_size
    78 
    79 !$OMP BARRIER
    80 !$OMP MASTER
     67    IMPLICIT NONE
     68    INTEGER :: buff_size
     69
     70    !$OMP BARRIER
     71    !$OMP MASTER
    8172    IF (buff_size>size_r) THEN
    8273      IF (ALLOCATED(buffer_r)) DEALLOCATE(buffer_r)
    83       size_r=MAX(size_min,INT(grow_factor*buff_size))
     74      size_r = MAX(size_min, INT(grow_factor * buff_size))
    8475      ALLOCATE(buffer_r(size_r))
    8576    ENDIF
    86 !$OMP END MASTER
    87 !$OMP BARRIER
    88  
     77    !$OMP END MASTER
     78    !$OMP BARRIER
     79
    8980  END SUBROUTINE check_buffer_r
    90  
     81
    9182  SUBROUTINE check_buffer_l(buff_size)
    92   IMPLICIT NONE
    93   INTEGER :: buff_size
    94 
    95 !$OMP BARRIER
    96 !$OMP MASTER
     83    IMPLICIT NONE
     84    INTEGER :: buff_size
     85
     86    !$OMP BARRIER
     87    !$OMP MASTER
    9788    IF (buff_size>size_l) THEN
    9889      IF (ALLOCATED(buffer_l)) DEALLOCATE(buffer_l)
    99       size_l=MAX(size_min,INT(grow_factor*buff_size))
     90      size_l = MAX(size_min, INT(grow_factor * buff_size))
    10091      ALLOCATE(buffer_l(size_l))
    10192    ENDIF
    102 !$OMP END MASTER
    103 !$OMP BARRIER
    104  
     93    !$OMP END MASTER
     94    !$OMP BARRIER
     95
    10596  END SUBROUTINE check_buffer_l
    106    
    107 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    108 !! Definition des Broadcast --> 4D   !!
    109 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    110 
    111 !! -- Les chaine de charactère -- !!
     97
     98  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     99  !! Definition des Broadcast --> 4D   !!
     100  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     101
     102  !! -- Les chaine de charactère -- !!
    112103
    113104  SUBROUTINE bcast_omp_c(var)
    114   IMPLICIT NONE
    115     CHARACTER(LEN=*),INTENT(INOUT) :: Var
    116    
    117     CALL bcast_omp_cgen(Var,len(Var),buffer_c)
    118    
     105    IMPLICIT NONE
     106    CHARACTER(LEN = *), INTENT(INOUT) :: Var
     107
     108    CALL bcast_omp_cgen(Var, len(Var), buffer_c)
     109
    119110  END SUBROUTINE bcast_omp_c
    120111
    121 !! -- Les entiers -- !!
    122  
     112  !! -- Les entiers -- !!
     113
    123114  SUBROUTINE bcast_omp_i(var)
    124   IMPLICIT NONE
    125     INTEGER,INTENT(INOUT) :: Var
     115    IMPLICIT NONE
     116    INTEGER, INTENT(INOUT) :: Var
    126117    INTEGER :: Var_tmp(1)
    127    
    128     Var_tmp(1)=Var
     118
     119    Var_tmp(1) = Var
    129120    CALL check_buffer_i(1)
    130     CALL bcast_omp_igen(Var_tmp,1,buffer_i)
    131     Var=Var_tmp(1)
     121    CALL bcast_omp_igen(Var_tmp, 1, buffer_i)
     122    Var = Var_tmp(1)
    132123
    133124  END SUBROUTINE bcast_omp_i
     
    135126
    136127  SUBROUTINE bcast_omp_i1(var)
    137   IMPLICIT NONE
    138     INTEGER,INTENT(INOUT) :: Var(:)
    139    
     128    IMPLICIT NONE
     129    INTEGER, INTENT(INOUT) :: Var(:)
     130
    140131    CALL check_buffer_i(size(Var))
    141     CALL bcast_omp_igen(Var,size(Var),buffer_i)
     132    CALL bcast_omp_igen(Var, size(Var), buffer_i)
    142133
    143134  END SUBROUTINE bcast_omp_i1
     
    145136
    146137  SUBROUTINE bcast_omp_i2(var)
    147   IMPLICIT NONE
    148     INTEGER,INTENT(INOUT) :: Var(:,:)
    149    
     138    IMPLICIT NONE
     139    INTEGER, INTENT(INOUT) :: Var(:, :)
     140
    150141    CALL check_buffer_i(size(Var))
    151     CALL bcast_omp_igen(Var,size(Var),buffer_i)
     142    CALL bcast_omp_igen(Var, size(Var), buffer_i)
    152143
    153144  END SUBROUTINE bcast_omp_i2
     
    155146
    156147  SUBROUTINE bcast_omp_i3(var)
    157   IMPLICIT NONE
    158     INTEGER,INTENT(INOUT) :: Var(:,:,:)
     148    IMPLICIT NONE
     149    INTEGER, INTENT(INOUT) :: Var(:, :, :)
    159150
    160151    CALL check_buffer_i(size(Var))
    161     CALL bcast_omp_igen(Var,size(Var),buffer_i)
     152    CALL bcast_omp_igen(Var, size(Var), buffer_i)
    162153
    163154  END SUBROUTINE bcast_omp_i3
     
    165156
    166157  SUBROUTINE bcast_omp_i4(var)
    167   IMPLICIT NONE
    168     INTEGER,INTENT(INOUT) :: Var(:,:,:,:)
    169    
     158    IMPLICIT NONE
     159    INTEGER, INTENT(INOUT) :: Var(:, :, :, :)
     160
    170161    CALL check_buffer_i(size(Var))
    171     CALL bcast_omp_igen(Var,size(Var),buffer_i)
     162    CALL bcast_omp_igen(Var, size(Var), buffer_i)
    172163
    173164  END SUBROUTINE bcast_omp_i4
    174165
    175166
    176 !! -- Les reels -- !!
     167  !! -- Les reels -- !!
    177168
    178169  SUBROUTINE bcast_omp_r(var)
    179   IMPLICIT NONE
    180     REAL,INTENT(INOUT) :: Var
     170    IMPLICIT NONE
     171    REAL, INTENT(INOUT) :: Var
    181172    REAL :: Var_tmp(1)
    182    
    183     Var_tmp(1)=Var
     173
     174    Var_tmp(1) = Var
    184175    CALL check_buffer_r(1)
    185     CALL bcast_omp_rgen(Var_tmp,1,buffer_r)
    186     Var=Var_tmp(1)
     176    CALL bcast_omp_rgen(Var_tmp, 1, buffer_r)
     177    Var = Var_tmp(1)
    187178
    188179  END SUBROUTINE bcast_omp_r
     
    190181
    191182  SUBROUTINE bcast_omp_r1(var)
    192   IMPLICIT NONE
    193     REAL,INTENT(INOUT) :: Var(:)
    194    
     183    IMPLICIT NONE
     184    REAL, INTENT(INOUT) :: Var(:)
     185
    195186    CALL check_buffer_r(size(Var))
    196     CALL bcast_omp_rgen(Var,size(Var),buffer_r)
     187    CALL bcast_omp_rgen(Var, size(Var), buffer_r)
    197188
    198189  END SUBROUTINE bcast_omp_r1
     
    200191
    201192  SUBROUTINE bcast_omp_r2(var)
    202   IMPLICIT NONE
    203     REAL,INTENT(INOUT) :: Var(:,:)
    204    
     193    IMPLICIT NONE
     194    REAL, INTENT(INOUT) :: Var(:, :)
     195
    205196    CALL check_buffer_r(size(Var))
    206     CALL bcast_omp_rgen(Var,size(Var),buffer_r)
     197    CALL bcast_omp_rgen(Var, size(Var), buffer_r)
    207198
    208199  END SUBROUTINE bcast_omp_r2
     
    210201
    211202  SUBROUTINE bcast_omp_r3(var)
    212   IMPLICIT NONE
    213     REAL,INTENT(INOUT) :: Var(:,:,:)
     203    IMPLICIT NONE
     204    REAL, INTENT(INOUT) :: Var(:, :, :)
    214205
    215206    CALL check_buffer_r(size(Var))
    216     CALL bcast_omp_rgen(Var,size(Var),buffer_r)
     207    CALL bcast_omp_rgen(Var, size(Var), buffer_r)
    217208
    218209  END SUBROUTINE bcast_omp_r3
     
    220211
    221212  SUBROUTINE bcast_omp_r4(var)
    222   IMPLICIT NONE
    223     REAL,INTENT(INOUT) :: Var(:,:,:,:)
    224    
     213    IMPLICIT NONE
     214    REAL, INTENT(INOUT) :: Var(:, :, :, :)
     215
    225216    CALL check_buffer_r(size(Var))
    226     CALL bcast_omp_rgen(Var,size(Var),buffer_r)
     217    CALL bcast_omp_rgen(Var, size(Var), buffer_r)
    227218
    228219  END SUBROUTINE bcast_omp_r4
    229220
    230  
    231 !! -- Les booleans -- !!
     221
     222  !! -- Les booleans -- !!
    232223
    233224  SUBROUTINE bcast_omp_l(var)
    234   IMPLICIT NONE
    235     LOGICAL,INTENT(INOUT) :: Var
     225    IMPLICIT NONE
     226    LOGICAL, INTENT(INOUT) :: Var
    236227    LOGICAL :: Var_tmp(1)
    237    
    238     Var_tmp(1)=Var
     228
     229    Var_tmp(1) = Var
    239230    CALL check_buffer_l(1)
    240     CALL bcast_omp_lgen(Var_tmp,1,buffer_l)
    241     Var=Var_tmp(1)
     231    CALL bcast_omp_lgen(Var_tmp, 1, buffer_l)
     232    Var = Var_tmp(1)
    242233
    243234  END SUBROUTINE bcast_omp_l
     
    245236
    246237  SUBROUTINE bcast_omp_l1(var)
    247   IMPLICIT NONE
    248     LOGICAL,INTENT(INOUT) :: Var(:)
    249    
     238    IMPLICIT NONE
     239    LOGICAL, INTENT(INOUT) :: Var(:)
     240
    250241    CALL check_buffer_l(size(Var))
    251     CALL bcast_omp_lgen(Var,size(Var),buffer_l)
     242    CALL bcast_omp_lgen(Var, size(Var), buffer_l)
    252243
    253244  END SUBROUTINE bcast_omp_l1
     
    255246
    256247  SUBROUTINE bcast_omp_l2(var)
    257   IMPLICIT NONE
    258     LOGICAL,INTENT(INOUT) :: Var(:,:)
    259    
     248    IMPLICIT NONE
     249    LOGICAL, INTENT(INOUT) :: Var(:, :)
     250
    260251    CALL check_buffer_l(size(Var))
    261     CALL bcast_omp_lgen(Var,size(Var),buffer_l)
     252    CALL bcast_omp_lgen(Var, size(Var), buffer_l)
    262253
    263254  END SUBROUTINE bcast_omp_l2
     
    265256
    266257  SUBROUTINE bcast_omp_l3(var)
    267   IMPLICIT NONE
    268     LOGICAL,INTENT(INOUT) :: Var(:,:,:)
     258    IMPLICIT NONE
     259    LOGICAL, INTENT(INOUT) :: Var(:, :, :)
    269260
    270261    CALL check_buffer_l(size(Var))
    271     CALL bcast_omp_lgen(Var,size(Var),buffer_l)
     262    CALL bcast_omp_lgen(Var, size(Var), buffer_l)
    272263
    273264  END SUBROUTINE bcast_omp_l3
     
    275266
    276267  SUBROUTINE bcast_omp_l4(var)
    277   IMPLICIT NONE
    278     LOGICAL,INTENT(INOUT) :: Var(:,:,:,:)
    279    
     268    IMPLICIT NONE
     269    LOGICAL, INTENT(INOUT) :: Var(:, :, :, :)
     270
    280271    CALL check_buffer_l(size(Var))
    281     CALL bcast_omp_lgen(Var,size(Var),buffer_l)
     272    CALL bcast_omp_lgen(Var, size(Var), buffer_l)
    282273
    283274  END SUBROUTINE bcast_omp_l4
    284275
    285276
    286 
    287 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    288 !! Definition des Scatter   --> 4D   !!
    289 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     277  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     278  !! Definition des Scatter   --> 4D   !!
     279  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    290280
    291281  SUBROUTINE scatter_omp_i(VarIn, VarOut)
    292282    IMPLICIT NONE
    293  
    294     INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
    295     INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
    296 
    297     CALL Check_buffer_i(size(VarIn))   
    298     CALL scatter_omp_igen(VarIn,Varout,1,buffer_i)
    299    
     283
     284    INTEGER, INTENT(IN), DIMENSION(:) :: VarIn
     285    INTEGER, INTENT(OUT), DIMENSION(:) :: VarOut
     286
     287    CALL Check_buffer_i(size(VarIn))
     288    CALL scatter_omp_igen(VarIn, Varout, 1, buffer_i)
     289
    300290  END SUBROUTINE scatter_omp_i
    301291
     
    303293  SUBROUTINE scatter_omp_i1(VarIn, VarOut)
    304294    IMPLICIT NONE
    305  
    306     INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
    307     INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    308 
    309     CALL Check_buffer_i(size(VarIn))   
    310     CALL scatter_omp_igen(VarIn,Varout,Size(VarOut,2),buffer_i)
    311    
     295
     296    INTEGER, INTENT(IN), DIMENSION(:, :) :: VarIn
     297    INTEGER, INTENT(OUT), DIMENSION(:, :) :: VarOut
     298
     299    CALL Check_buffer_i(size(VarIn))
     300    CALL scatter_omp_igen(VarIn, Varout, Size(VarOut, 2), buffer_i)
     301
    312302  END SUBROUTINE scatter_omp_i1
    313  
    314  
     303
     304
    315305  SUBROUTINE scatter_omp_i2(VarIn, VarOut)
    316306    IMPLICIT NONE
    317  
    318     INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    319     INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    320    
    321     CALL Check_buffer_i(size(VarIn))   
    322     CALL scatter_omp_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3),buffer_i)
     307
     308    INTEGER, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     309    INTEGER, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     310
     311    CALL Check_buffer_i(size(VarIn))
     312    CALL scatter_omp_igen(VarIn, Varout, Size(VarOut, 2) * Size(VarOut, 3), buffer_i)
    323313
    324314  END SUBROUTINE scatter_omp_i2
     
    327317  SUBROUTINE scatter_omp_i3(VarIn, VarOut)
    328318    IMPLICIT NONE
    329  
    330     INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    331     INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    332    
    333     CALL Check_buffer_i(size(VarIn))   
    334     CALL scatter_omp_igen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4),buffer_i)
    335  
     319
     320    INTEGER, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     321    INTEGER, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     322
     323    CALL Check_buffer_i(size(VarIn))
     324    CALL scatter_omp_igen(VarIn, Varout, Size(VarOut, 2) * Size(VarOut, 3) * Size(VarOut, 4), buffer_i)
     325
    336326  END SUBROUTINE scatter_omp_i3
    337327
    338328
    339 
    340 
    341329  SUBROUTINE scatter_omp_r(VarIn, VarOut)
    342330    IMPLICIT NONE
    343  
    344     REAL,INTENT(IN),DIMENSION(:) :: VarIn
    345     REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    346 
    347     CALL Check_buffer_r(size(VarIn))   
    348     CALL scatter_omp_rgen(VarIn,Varout,1,buffer_r)
    349    
     331
     332    REAL, INTENT(IN), DIMENSION(:) :: VarIn
     333    REAL, INTENT(OUT), DIMENSION(:) :: VarOut
     334
     335    CALL Check_buffer_r(size(VarIn))
     336    CALL scatter_omp_rgen(VarIn, Varout, 1, buffer_r)
     337
    350338  END SUBROUTINE scatter_omp_r
    351339
     
    353341  SUBROUTINE scatter_omp_r1(VarIn, VarOut)
    354342    IMPLICIT NONE
    355  
    356     REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    357     REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    358    
    359     CALL Check_buffer_r(size(VarIn))   
    360     CALL scatter_omp_rgen(VarIn,Varout,Size(VarOut,2),buffer_r)
    361        
     343
     344    REAL, INTENT(IN), DIMENSION(:, :) :: VarIn
     345    REAL, INTENT(OUT), DIMENSION(:, :) :: VarOut
     346
     347    CALL Check_buffer_r(size(VarIn))
     348    CALL scatter_omp_rgen(VarIn, Varout, Size(VarOut, 2), buffer_r)
     349
    362350  END SUBROUTINE scatter_omp_r1
    363  
    364  
     351
     352
    365353  SUBROUTINE scatter_omp_r2(VarIn, VarOut)
    366354    IMPLICIT NONE
    367  
    368     REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    369     REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    370    
    371     CALL Check_buffer_r(size(VarIn))   
    372     CALL scatter_omp_rgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3),buffer_r)
     355
     356    REAL, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     357    REAL, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     358
     359    CALL Check_buffer_r(size(VarIn))
     360    CALL scatter_omp_rgen(VarIn, Varout, Size(VarOut, 2) * Size(VarOut, 3), buffer_r)
    373361
    374362  END SUBROUTINE scatter_omp_r2
     
    377365  SUBROUTINE scatter_omp_r3(VarIn, VarOut)
    378366    IMPLICIT NONE
    379  
    380     REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    381     REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    382    
    383     CALL Check_buffer_r(size(VarIn))   
    384     CALL scatter_omp_rgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4),buffer_r)
    385  
     367
     368    REAL, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     369    REAL, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     370
     371    CALL Check_buffer_r(size(VarIn))
     372    CALL scatter_omp_rgen(VarIn, Varout, Size(VarOut, 2) * Size(VarOut, 3) * Size(VarOut, 4), buffer_r)
     373
    386374  END SUBROUTINE scatter_omp_r3
    387  
    388375
    389376
    390377  SUBROUTINE scatter_omp_l(VarIn, VarOut)
    391378    IMPLICIT NONE
    392  
    393     LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
    394     LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
    395 
    396     CALL Check_buffer_l(size(VarIn))   
    397     CALL scatter_omp_lgen(VarIn,Varout,1,buffer_l)
    398    
     379
     380    LOGICAL, INTENT(IN), DIMENSION(:) :: VarIn
     381    LOGICAL, INTENT(OUT), DIMENSION(:) :: VarOut
     382
     383    CALL Check_buffer_l(size(VarIn))
     384    CALL scatter_omp_lgen(VarIn, Varout, 1, buffer_l)
     385
    399386  END SUBROUTINE scatter_omp_l
    400387
     
    402389  SUBROUTINE scatter_omp_l1(VarIn, VarOut)
    403390    IMPLICIT NONE
    404  
    405     LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    406     LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    407    
    408     CALL Check_buffer_l(size(VarIn))   
    409     CALL scatter_omp_lgen(VarIn,Varout,Size(VarOut,2),buffer_l)
    410    
     391
     392    LOGICAL, INTENT(IN), DIMENSION(:, :) :: VarIn
     393    LOGICAL, INTENT(OUT), DIMENSION(:, :) :: VarOut
     394
     395    CALL Check_buffer_l(size(VarIn))
     396    CALL scatter_omp_lgen(VarIn, Varout, Size(VarOut, 2), buffer_l)
     397
    411398  END SUBROUTINE scatter_omp_l1
    412  
    413  
     399
     400
    414401  SUBROUTINE scatter_omp_l2(VarIn, VarOut)
    415402    IMPLICIT NONE
    416  
    417     LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    418     LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    419    
    420     CALL Check_buffer_l(size(VarIn))   
    421     CALL scatter_omp_lgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3),buffer_l)
     403
     404    LOGICAL, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     405    LOGICAL, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     406
     407    CALL Check_buffer_l(size(VarIn))
     408    CALL scatter_omp_lgen(VarIn, Varout, Size(VarOut, 2) * Size(VarOut, 3), buffer_l)
    422409
    423410  END SUBROUTINE scatter_omp_l2
     
    426413  SUBROUTINE scatter_omp_l3(VarIn, VarOut)
    427414    IMPLICIT NONE
    428  
    429     LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    430     LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    431    
    432     CALL Check_buffer_l(size(VarIn))   
    433     CALL scatter_omp_lgen(VarIn,Varout,Size(VarOut,2)*Size(VarOut,3)*Size(VarOut,4),buffer_l)
    434  
    435   END SUBROUTINE scatter_omp_l3 
    436  
     415
     416    LOGICAL, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     417    LOGICAL, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     418
     419    CALL Check_buffer_l(size(VarIn))
     420    CALL scatter_omp_lgen(VarIn, Varout, Size(VarOut, 2) * Size(VarOut, 3) * Size(VarOut, 4), buffer_l)
     421
     422  END SUBROUTINE scatter_omp_l3
     423
    437424
    438425  SUBROUTINE gather_omp_i(VarIn, VarOut)
    439426    IMPLICIT NONE
    440  
    441     INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
    442     INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
    443 
    444     CALL Check_buffer_i(size(VarOut))   
    445     CALL gather_omp_igen(VarIn,Varout,1,buffer_i)
    446    
     427
     428    INTEGER, INTENT(IN), DIMENSION(:) :: VarIn
     429    INTEGER, INTENT(OUT), DIMENSION(:) :: VarOut
     430
     431    CALL Check_buffer_i(size(VarOut))
     432    CALL gather_omp_igen(VarIn, Varout, 1, buffer_i)
     433
    447434  END SUBROUTINE gather_omp_i
    448435
     
    450437  SUBROUTINE gather_omp_i1(VarIn, VarOut)
    451438    IMPLICIT NONE
    452  
    453     INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
    454     INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    455    
    456     CALL Check_buffer_i(size(VarOut))   
    457     CALL gather_omp_igen(VarIn,Varout,Size(VarIn,2),buffer_i)
    458    
     439
     440    INTEGER, INTENT(IN), DIMENSION(:, :) :: VarIn
     441    INTEGER, INTENT(OUT), DIMENSION(:, :) :: VarOut
     442
     443    CALL Check_buffer_i(size(VarOut))
     444    CALL gather_omp_igen(VarIn, Varout, Size(VarIn, 2), buffer_i)
     445
    459446  END SUBROUTINE gather_omp_i1
    460447
     
    462449  SUBROUTINE gather_omp_i2(VarIn, VarOut)
    463450    IMPLICIT NONE
    464  
    465     INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    466     INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    467    
    468     CALL Check_buffer_i(size(VarOut))   
    469     CALL gather_omp_igen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3),buffer_i)
    470          
     451
     452    INTEGER, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     453    INTEGER, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     454
     455    CALL Check_buffer_i(size(VarOut))
     456    CALL gather_omp_igen(VarIn, Varout, Size(VarIn, 2) * Size(VarIn, 3), buffer_i)
     457
    471458  END SUBROUTINE gather_omp_i2
    472  
     459
    473460
    474461  SUBROUTINE gather_omp_i3(VarIn, VarOut)
    475462    IMPLICIT NONE
    476  
    477     INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    478     INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    479    
    480     CALL Check_buffer_i(size(VarOut))   
    481     CALL gather_omp_igen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4),buffer_i)
    482    
     463
     464    INTEGER, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     465    INTEGER, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     466
     467    CALL Check_buffer_i(size(VarOut))
     468    CALL gather_omp_igen(VarIn, Varout, Size(VarIn, 2) * Size(VarIn, 3) * Size(VarIn, 4), buffer_i)
     469
    483470  END SUBROUTINE gather_omp_i3
    484471
    485472
    486 
    487473  SUBROUTINE gather_omp_r(VarIn, VarOut)
    488474    IMPLICIT NONE
    489  
    490     REAL,INTENT(IN),DIMENSION(:) :: VarIn
    491     REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    492 
    493     CALL gather_omp_rgen(VarIn,Varout,1)
    494    
     475
     476    REAL, INTENT(IN), DIMENSION(:) :: VarIn
     477    REAL, INTENT(OUT), DIMENSION(:) :: VarOut
     478
     479    CALL gather_omp_rgen(VarIn, Varout, 1)
     480
    495481  END SUBROUTINE gather_omp_r
    496482
     
    498484  SUBROUTINE gather_omp_r1(VarIn, VarOut)
    499485    IMPLICIT NONE
    500  
    501     REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    502     REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    503  
    504     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2))
    505        
     486
     487    REAL, INTENT(IN), DIMENSION(:, :) :: VarIn
     488    REAL, INTENT(OUT), DIMENSION(:, :) :: VarOut
     489
     490    CALL gather_omp_rgen(VarIn, Varout, Size(VarIn, 2))
     491
    506492  END SUBROUTINE gather_omp_r1
    507493
     
    509495  SUBROUTINE gather_omp_r2(VarIn, VarOut)
    510496    IMPLICIT NONE
    511  
    512     REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    513     REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    514  
    515     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3))
    516    
     497
     498    REAL, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     499    REAL, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     500
     501    CALL gather_omp_rgen(VarIn, Varout, Size(VarIn, 2) * Size(VarIn, 3))
     502
    517503  END SUBROUTINE gather_omp_r2
    518  
     504
    519505
    520506  SUBROUTINE gather_omp_r3(VarIn, VarOut)
    521507    IMPLICIT NONE
    522  
    523     REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    524     REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    525      
    526     CALL gather_omp_rgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4))
    527    
     508
     509    REAL, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     510    REAL, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     511
     512    CALL gather_omp_rgen(VarIn, Varout, Size(VarIn, 2) * Size(VarIn, 3) * Size(VarIn, 4))
     513
    528514  END SUBROUTINE gather_omp_r3
    529515
     
    531517  SUBROUTINE gather_omp_l(VarIn, VarOut)
    532518    IMPLICIT NONE
    533  
    534     LOGICAL,INTENT(IN),DIMENSION(:) :: VarIn
    535     LOGICAL,INTENT(OUT),DIMENSION(:) :: VarOut
    536 
    537     CALL Check_buffer_l(size(VarOut))   
    538     CALL gather_omp_lgen(VarIn,Varout,1,buffer_l)
    539    
     519
     520    LOGICAL, INTENT(IN), DIMENSION(:) :: VarIn
     521    LOGICAL, INTENT(OUT), DIMENSION(:) :: VarOut
     522
     523    CALL Check_buffer_l(size(VarOut))
     524    CALL gather_omp_lgen(VarIn, Varout, 1, buffer_l)
     525
    540526  END SUBROUTINE gather_omp_l
    541527
     
    543529  SUBROUTINE gather_omp_l1(VarIn, VarOut)
    544530    IMPLICIT NONE
    545  
    546     LOGICAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    547     LOGICAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    548    
    549     CALL Check_buffer_l(size(VarOut))   
    550     CALL gather_omp_lgen(VarIn,Varout,Size(VarIn,2),buffer_l)
    551    
     531
     532    LOGICAL, INTENT(IN), DIMENSION(:, :) :: VarIn
     533    LOGICAL, INTENT(OUT), DIMENSION(:, :) :: VarOut
     534
     535    CALL Check_buffer_l(size(VarOut))
     536    CALL gather_omp_lgen(VarIn, Varout, Size(VarIn, 2), buffer_l)
     537
    552538  END SUBROUTINE gather_omp_l1
    553539
     
    555541  SUBROUTINE gather_omp_l2(VarIn, VarOut)
    556542    IMPLICIT NONE
    557  
    558     LOGICAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    559     LOGICAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    560    
    561     CALL Check_buffer_l(size(VarOut))   
    562     CALL gather_omp_lgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3),buffer_l)
    563    
     543
     544    LOGICAL, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     545    LOGICAL, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     546
     547    CALL Check_buffer_l(size(VarOut))
     548    CALL gather_omp_lgen(VarIn, Varout, Size(VarIn, 2) * Size(VarIn, 3), buffer_l)
     549
    564550  END SUBROUTINE gather_omp_l2
    565  
     551
    566552
    567553  SUBROUTINE gather_omp_l3(VarIn, VarOut)
    568554    IMPLICIT NONE
    569  
    570     LOGICAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    571     LOGICAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    572    
    573     CALL Check_buffer_l(size(VarOut))   
    574     CALL gather_omp_lgen(VarIn,Varout,Size(VarIn,2)*Size(VarIn,3)*Size(VarIn,4),buffer_l)
    575    
     555
     556    LOGICAL, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     557    LOGICAL, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     558
     559    CALL Check_buffer_l(size(VarOut))
     560    CALL gather_omp_lgen(VarIn, Varout, Size(VarIn, 2) * Size(VarIn, 3) * Size(VarIn, 4), buffer_l)
     561
    576562  END SUBROUTINE gather_omp_l3
    577563
    578564
    579 
    580 
    581565  SUBROUTINE reduce_sum_omp_i(VarIn, VarOut)
    582566    IMPLICIT NONE
    583  
    584     INTEGER,INTENT(IN) :: VarIn
    585     INTEGER,INTENT(OUT) :: VarOut
    586     INTEGER             :: VarIn_tmp(1)
    587     INTEGER             :: VarOut_tmp(1)
    588    
    589     VarIn_tmp(1)=VarIn
    590     CALL Check_buffer_i(1)   
    591     CALL reduce_sum_omp_igen(VarIn_tmp,Varout_tmp,1,buffer_i)
    592     VarOut=VarOut_tmp(1)
    593    
     567
     568    INTEGER, INTENT(IN) :: VarIn
     569    INTEGER, INTENT(OUT) :: VarOut
     570    INTEGER :: VarIn_tmp(1)
     571    INTEGER :: VarOut_tmp(1)
     572
     573    VarIn_tmp(1) = VarIn
     574    CALL Check_buffer_i(1)
     575    CALL reduce_sum_omp_igen(VarIn_tmp, Varout_tmp, 1, buffer_i)
     576    VarOut = VarOut_tmp(1)
     577
    594578  END SUBROUTINE reduce_sum_omp_i
    595579
    596580  SUBROUTINE reduce_sum_omp_i1(VarIn, VarOut)
    597581    IMPLICIT NONE
    598  
    599     INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
    600     INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
    601    
    602     CALL Check_buffer_i(size(VarIn))   
    603     CALL reduce_sum_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
    604    
     582
     583    INTEGER, INTENT(IN), DIMENSION(:) :: VarIn
     584    INTEGER, INTENT(OUT), DIMENSION(:) :: VarOut
     585
     586    CALL Check_buffer_i(size(VarIn))
     587    CALL reduce_sum_omp_igen(VarIn, Varout, Size(VarIn), buffer_i)
     588
    605589  END SUBROUTINE reduce_sum_omp_i1
    606  
    607  
     590
     591
    608592  SUBROUTINE reduce_sum_omp_i2(VarIn, VarOut)
    609593    IMPLICIT NONE
    610  
    611     INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
    612     INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    613 
    614     CALL Check_buffer_i(size(VarIn))   
    615     CALL reduce_sum_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
    616  
     594
     595    INTEGER, INTENT(IN), DIMENSION(:, :) :: VarIn
     596    INTEGER, INTENT(OUT), DIMENSION(:, :) :: VarOut
     597
     598    CALL Check_buffer_i(size(VarIn))
     599    CALL reduce_sum_omp_igen(VarIn, Varout, Size(VarIn), buffer_i)
     600
    617601  END SUBROUTINE reduce_sum_omp_i2
    618602
     
    620604  SUBROUTINE reduce_sum_omp_i3(VarIn, VarOut)
    621605    IMPLICIT NONE
    622  
    623     INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    624     INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    625    
    626     CALL Check_buffer_i(size(VarIn))   
    627     CALL reduce_sum_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
    628  
     606
     607    INTEGER, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     608    INTEGER, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     609
     610    CALL Check_buffer_i(size(VarIn))
     611    CALL reduce_sum_omp_igen(VarIn, Varout, Size(VarIn), buffer_i)
     612
    629613  END SUBROUTINE reduce_sum_omp_i3
    630614
     
    633617    IMPLICIT NONE
    634618
    635     INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    636     INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    637  
    638     CALL Check_buffer_i(size(VarIn))   
    639     CALL reduce_sum_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
    640  
     619    INTEGER, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     620    INTEGER, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     621
     622    CALL Check_buffer_i(size(VarIn))
     623    CALL reduce_sum_omp_igen(VarIn, Varout, Size(VarIn), buffer_i)
     624
    641625  END SUBROUTINE reduce_sum_omp_i4
    642626
     
    644628  SUBROUTINE reduce_sum_omp_r(VarIn, VarOut)
    645629    IMPLICIT NONE
    646  
    647     REAL,INTENT(IN) :: VarIn
    648     REAL,INTENT(OUT) :: VarOut
    649     REAL             :: VarIn_tmp(1)
    650     REAL             :: VarOut_tmp(1)
    651    
    652     VarIn_tmp(1)=VarIn
    653     CALL Check_buffer_r(1)   
    654     CALL reduce_sum_omp_rgen(VarIn_tmp,Varout_tmp,1,buffer_r)
    655     VarOut=VarOut_tmp(1)
    656  
     630
     631    REAL, INTENT(IN) :: VarIn
     632    REAL, INTENT(OUT) :: VarOut
     633    REAL :: VarIn_tmp(1)
     634    REAL :: VarOut_tmp(1)
     635
     636    VarIn_tmp(1) = VarIn
     637    CALL Check_buffer_r(1)
     638    CALL reduce_sum_omp_rgen(VarIn_tmp, Varout_tmp, 1, buffer_r)
     639    VarOut = VarOut_tmp(1)
     640
    657641  END SUBROUTINE reduce_sum_omp_r
    658642
    659643  SUBROUTINE reduce_sum_omp_r1(VarIn, VarOut)
    660644    IMPLICIT NONE
    661  
    662     REAL,INTENT(IN),DIMENSION(:) :: VarIn
    663     REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    664    
    665     CALL Check_buffer_r(size(VarIn))   
    666     CALL reduce_sum_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
    667    
     645
     646    REAL, INTENT(IN), DIMENSION(:) :: VarIn
     647    REAL, INTENT(OUT), DIMENSION(:) :: VarOut
     648
     649    CALL Check_buffer_r(size(VarIn))
     650    CALL reduce_sum_omp_rgen(VarIn, Varout, Size(VarIn), buffer_r)
     651
    668652  END SUBROUTINE reduce_sum_omp_r1
    669  
    670  
     653
     654
    671655  SUBROUTINE reduce_sum_omp_r2(VarIn, VarOut)
    672656    IMPLICIT NONE
    673  
    674     REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    675     REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    676    
    677     CALL Check_buffer_r(size(VarIn))   
    678     CALL reduce_sum_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
    679  
     657
     658    REAL, INTENT(IN), DIMENSION(:, :) :: VarIn
     659    REAL, INTENT(OUT), DIMENSION(:, :) :: VarOut
     660
     661    CALL Check_buffer_r(size(VarIn))
     662    CALL reduce_sum_omp_rgen(VarIn, Varout, Size(VarIn), buffer_r)
     663
    680664  END SUBROUTINE reduce_sum_omp_r2
    681665
     
    683667  SUBROUTINE reduce_sum_omp_r3(VarIn, VarOut)
    684668    IMPLICIT NONE
    685  
    686     REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    687     REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    688    
    689     CALL Check_buffer_r(size(VarIn))   
    690     CALL reduce_sum_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
    691  
     669
     670    REAL, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     671    REAL, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     672
     673    CALL Check_buffer_r(size(VarIn))
     674    CALL reduce_sum_omp_rgen(VarIn, Varout, Size(VarIn), buffer_r)
     675
    692676  END SUBROUTINE reduce_sum_omp_r3
    693677
     
    696680    IMPLICIT NONE
    697681
    698     REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    699     REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    700  
    701     CALL Check_buffer_r(size(VarIn))   
    702     CALL reduce_sum_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
    703  
     682    REAL, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     683    REAL, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     684
     685    CALL Check_buffer_r(size(VarIn))
     686    CALL reduce_sum_omp_rgen(VarIn, Varout, Size(VarIn), buffer_r)
     687
    704688  END SUBROUTINE reduce_sum_omp_r4
    705689
    706690
    707 
    708691  SUBROUTINE reduce_min_omp_i(VarIn, VarOut)
    709692    IMPLICIT NONE
    710  
    711     INTEGER,INTENT(IN) :: VarIn
    712     INTEGER,INTENT(OUT) :: VarOut
    713     INTEGER             :: VarIn_tmp(1)
    714     INTEGER             :: VarOut_tmp(1)
    715    
    716     VarIn_tmp(1)=VarIn
    717     CALL Check_buffer_i(1)   
    718     CALL reduce_min_omp_igen(VarIn_tmp,Varout_tmp,1,buffer_i)
    719     VarOut=VarOut_tmp(1)
    720    
     693
     694    INTEGER, INTENT(IN) :: VarIn
     695    INTEGER, INTENT(OUT) :: VarOut
     696    INTEGER :: VarIn_tmp(1)
     697    INTEGER :: VarOut_tmp(1)
     698
     699    VarIn_tmp(1) = VarIn
     700    CALL Check_buffer_i(1)
     701    CALL reduce_min_omp_igen(VarIn_tmp, Varout_tmp, 1, buffer_i)
     702    VarOut = VarOut_tmp(1)
     703
    721704  END SUBROUTINE reduce_min_omp_i
    722705
    723706  SUBROUTINE reduce_min_omp_i1(VarIn, VarOut)
    724707    IMPLICIT NONE
    725  
    726     INTEGER,INTENT(IN),DIMENSION(:) :: VarIn
    727     INTEGER,INTENT(OUT),DIMENSION(:) :: VarOut
    728    
    729     CALL Check_buffer_i(size(VarIn))   
    730     CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
    731    
     708
     709    INTEGER, INTENT(IN), DIMENSION(:) :: VarIn
     710    INTEGER, INTENT(OUT), DIMENSION(:) :: VarOut
     711
     712    CALL Check_buffer_i(size(VarIn))
     713    CALL reduce_min_omp_igen(VarIn, Varout, Size(VarIn), buffer_i)
     714
    732715  END SUBROUTINE reduce_min_omp_i1
    733  
    734  
     716
     717
    735718  SUBROUTINE reduce_min_omp_i2(VarIn, VarOut)
    736719    IMPLICIT NONE
    737  
    738     INTEGER,INTENT(IN),DIMENSION(:,:) :: VarIn
    739     INTEGER,INTENT(OUT),DIMENSION(:,:) :: VarOut
    740 
    741     CALL Check_buffer_i(size(VarIn))   
    742     CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
    743  
     720
     721    INTEGER, INTENT(IN), DIMENSION(:, :) :: VarIn
     722    INTEGER, INTENT(OUT), DIMENSION(:, :) :: VarOut
     723
     724    CALL Check_buffer_i(size(VarIn))
     725    CALL reduce_min_omp_igen(VarIn, Varout, Size(VarIn), buffer_i)
     726
    744727  END SUBROUTINE reduce_min_omp_i2
    745728
     
    747730  SUBROUTINE reduce_min_omp_i3(VarIn, VarOut)
    748731    IMPLICIT NONE
    749  
    750     INTEGER,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    751     INTEGER,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    752    
    753     CALL Check_buffer_i(size(VarIn))   
    754     CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
    755  
     732
     733    INTEGER, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     734    INTEGER, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     735
     736    CALL Check_buffer_i(size(VarIn))
     737    CALL reduce_min_omp_igen(VarIn, Varout, Size(VarIn), buffer_i)
     738
    756739  END SUBROUTINE reduce_min_omp_i3
    757740
     
    760743    IMPLICIT NONE
    761744
    762     INTEGER,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    763     INTEGER,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    764  
    765     CALL Check_buffer_i(size(VarIn))   
    766     CALL reduce_min_omp_igen(VarIn,Varout,Size(VarIn),buffer_i)
    767  
     745    INTEGER, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     746    INTEGER, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     747
     748    CALL Check_buffer_i(size(VarIn))
     749    CALL reduce_min_omp_igen(VarIn, Varout, Size(VarIn), buffer_i)
     750
    768751  END SUBROUTINE reduce_min_omp_i4
    769752
     
    771754  SUBROUTINE reduce_min_omp_r(VarIn, VarOut)
    772755    IMPLICIT NONE
    773  
    774     REAL,INTENT(IN) :: VarIn
    775     REAL,INTENT(OUT) :: VarOut
    776     REAL             :: VarIn_tmp(1)
    777     REAL             :: VarOut_tmp(1)
    778    
    779     VarIn_tmp(1)=VarIn
    780     CALL Check_buffer_r(1)   
    781     CALL reduce_min_omp_rgen(VarIn_tmp,Varout_tmp,1,buffer_r)
    782     VarOut=VarOut_tmp(1)
    783  
     756
     757    REAL, INTENT(IN) :: VarIn
     758    REAL, INTENT(OUT) :: VarOut
     759    REAL :: VarIn_tmp(1)
     760    REAL :: VarOut_tmp(1)
     761
     762    VarIn_tmp(1) = VarIn
     763    CALL Check_buffer_r(1)
     764    CALL reduce_min_omp_rgen(VarIn_tmp, Varout_tmp, 1, buffer_r)
     765    VarOut = VarOut_tmp(1)
     766
    784767  END SUBROUTINE reduce_min_omp_r
    785768
    786769  SUBROUTINE reduce_min_omp_r1(VarIn, VarOut)
    787770    IMPLICIT NONE
    788  
    789     REAL,INTENT(IN),DIMENSION(:) :: VarIn
    790     REAL,INTENT(OUT),DIMENSION(:) :: VarOut
    791    
    792     CALL Check_buffer_r(size(VarIn))   
    793     CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
    794    
     771
     772    REAL, INTENT(IN), DIMENSION(:) :: VarIn
     773    REAL, INTENT(OUT), DIMENSION(:) :: VarOut
     774
     775    CALL Check_buffer_r(size(VarIn))
     776    CALL reduce_min_omp_rgen(VarIn, Varout, Size(VarIn), buffer_r)
     777
    795778  END SUBROUTINE reduce_min_omp_r1
    796  
    797  
     779
     780
    798781  SUBROUTINE reduce_min_omp_r2(VarIn, VarOut)
    799782    IMPLICIT NONE
    800  
    801     REAL,INTENT(IN),DIMENSION(:,:) :: VarIn
    802     REAL,INTENT(OUT),DIMENSION(:,:) :: VarOut
    803    
    804     CALL Check_buffer_r(size(VarIn))   
    805     CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
    806  
     783
     784    REAL, INTENT(IN), DIMENSION(:, :) :: VarIn
     785    REAL, INTENT(OUT), DIMENSION(:, :) :: VarOut
     786
     787    CALL Check_buffer_r(size(VarIn))
     788    CALL reduce_min_omp_rgen(VarIn, Varout, Size(VarIn), buffer_r)
     789
    807790  END SUBROUTINE reduce_min_omp_r2
    808791
     
    810793  SUBROUTINE reduce_min_omp_r3(VarIn, VarOut)
    811794    IMPLICIT NONE
    812  
    813     REAL,INTENT(IN),DIMENSION(:,:,:) :: VarIn
    814     REAL,INTENT(OUT),DIMENSION(:,:,:) :: VarOut
    815    
    816     CALL Check_buffer_r(size(VarIn))   
    817     CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
    818  
     795
     796    REAL, INTENT(IN), DIMENSION(:, :, :) :: VarIn
     797    REAL, INTENT(OUT), DIMENSION(:, :, :) :: VarOut
     798
     799    CALL Check_buffer_r(size(VarIn))
     800    CALL reduce_min_omp_rgen(VarIn, Varout, Size(VarIn), buffer_r)
     801
    819802  END SUBROUTINE reduce_min_omp_r3
    820803
     
    823806    IMPLICIT NONE
    824807
    825     REAL,INTENT(IN),DIMENSION(:,:,:,:) :: VarIn
    826     REAL,INTENT(OUT),DIMENSION(:,:,:,:) :: VarOut
    827  
    828     CALL Check_buffer_r(size(VarIn))   
    829     CALL reduce_min_omp_rgen(VarIn,Varout,Size(VarIn),buffer_r)
    830  
     808    REAL, INTENT(IN), DIMENSION(:, :, :, :) :: VarIn
     809    REAL, INTENT(OUT), DIMENSION(:, :, :, :) :: VarOut
     810
     811    CALL Check_buffer_r(size(VarIn))
     812    CALL reduce_min_omp_rgen(VarIn, Varout, Size(VarIn), buffer_r)
     813
    831814  END SUBROUTINE reduce_min_omp_r4
    832815
    833816
    834 
    835 
    836 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    837 !    LES ROUTINES GENERIQUES    !
    838 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    839 
    840   SUBROUTINE bcast_omp_cgen(Var,Nb,Buff)
    841   IMPLICIT NONE
    842    
    843     CHARACTER(LEN=*),INTENT(INOUT) :: Var
    844     CHARACTER(LEN=*),INTENT(INOUT) :: Buff
    845     INTEGER,INTENT(IN) :: Nb
    846    
     817  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     818  !    LES ROUTINES GENERIQUES    !
     819  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     820
     821  SUBROUTINE bcast_omp_cgen(Var, Nb, Buff)
     822    IMPLICIT NONE
     823
     824    CHARACTER(LEN = *), INTENT(INOUT) :: Var
     825    CHARACTER(LEN = *), INTENT(INOUT) :: Buff
     826    INTEGER, INTENT(IN) :: Nb
     827
    847828    INTEGER :: i
    848  
    849   !$OMP MASTER
    850       Buff=Var
    851   !$OMP END MASTER
    852   !$OMP BARRIER
    853 
    854     DO i=1,Nb
    855       Var=Buff
    856     ENDDO
    857   !$OMP BARRIER     
    858  
     829
     830    !$OMP MASTER
     831    Buff = Var
     832    !$OMP END MASTER
     833    !$OMP BARRIER
     834
     835    DO i = 1, Nb
     836      Var = Buff
     837    ENDDO
     838    !$OMP BARRIER
     839
    859840  END SUBROUTINE bcast_omp_cgen
    860841
    861842
    862      
    863   SUBROUTINE bcast_omp_igen(Var,Nb,Buff)
    864   IMPLICIT NONE
    865    
    866     INTEGER,INTENT(IN) :: Nb
    867     INTEGER,DIMENSION(Nb),INTENT(INOUT) :: Var
    868     INTEGER,DIMENSION(Nb),INTENT(INOUT) :: Buff
     843  SUBROUTINE bcast_omp_igen(Var, Nb, Buff)
     844    IMPLICIT NONE
     845
     846    INTEGER, INTENT(IN) :: Nb
     847    INTEGER, DIMENSION(Nb), INTENT(INOUT) :: Var
     848    INTEGER, DIMENSION(Nb), INTENT(INOUT) :: Buff
    869849
    870850    INTEGER :: i
    871    
    872   !$OMP MASTER
    873     DO i=1,Nb
    874       Buff(i)=Var(i)
    875     ENDDO
    876   !$OMP END MASTER
    877   !$OMP BARRIER
    878 
    879     DO i=1,Nb
    880       Var(i)=Buff(i)
    881     ENDDO
    882   !$OMP BARRIER       
     851
     852    !$OMP MASTER
     853    DO i = 1, Nb
     854      Buff(i) = Var(i)
     855    ENDDO
     856    !$OMP END MASTER
     857    !$OMP BARRIER
     858
     859    DO i = 1, Nb
     860      Var(i) = Buff(i)
     861    ENDDO
     862    !$OMP BARRIER
    883863
    884864  END SUBROUTINE bcast_omp_igen
    885865
    886866
    887   SUBROUTINE bcast_omp_rgen(Var,Nb,Buff)
    888   IMPLICIT NONE
    889    
    890     INTEGER,INTENT(IN) :: Nb
    891     REAL,DIMENSION(Nb),INTENT(INOUT) :: Var
    892     REAL,DIMENSION(Nb),INTENT(INOUT) :: Buff
     867  SUBROUTINE bcast_omp_rgen(Var, Nb, Buff)
     868    IMPLICIT NONE
     869
     870    INTEGER, INTENT(IN) :: Nb
     871    REAL, DIMENSION(Nb), INTENT(INOUT) :: Var
     872    REAL, DIMENSION(Nb), INTENT(INOUT) :: Buff
    893873
    894874    INTEGER :: i
    895    
    896   !$OMP MASTER
    897     DO i=1,Nb
    898       Buff(i)=Var(i)
    899     ENDDO
    900   !$OMP END MASTER
    901   !$OMP BARRIER
    902 
    903     DO i=1,Nb
    904       Var(i)=Buff(i)
    905     ENDDO
    906   !$OMP BARRIER       
     875
     876    !$OMP MASTER
     877    DO i = 1, Nb
     878      Buff(i) = Var(i)
     879    ENDDO
     880    !$OMP END MASTER
     881    !$OMP BARRIER
     882
     883    DO i = 1, Nb
     884      Var(i) = Buff(i)
     885    ENDDO
     886    !$OMP BARRIER
    907887
    908888  END SUBROUTINE bcast_omp_rgen
    909889
    910   SUBROUTINE bcast_omp_lgen(Var,Nb,Buff)
    911   IMPLICIT NONE
    912    
    913     INTEGER,INTENT(IN) :: Nb
    914     LOGICAL,DIMENSION(Nb),INTENT(INOUT) :: Var
    915     LOGICAL,DIMENSION(Nb),INTENT(INOUT) :: Buff
    916  
     890  SUBROUTINE bcast_omp_lgen(Var, Nb, Buff)
     891    IMPLICIT NONE
     892
     893    INTEGER, INTENT(IN) :: Nb
     894    LOGICAL, DIMENSION(Nb), INTENT(INOUT) :: Var
     895    LOGICAL, DIMENSION(Nb), INTENT(INOUT) :: Buff
     896
    917897    INTEGER :: i
    918    
    919   !$OMP MASTER
    920     DO i=1,Nb
    921       Buff(i)=Var(i)
    922     ENDDO
    923   !$OMP END MASTER
    924   !$OMP BARRIER
    925 
    926     DO i=1,Nb
    927       Var(i)=Buff(i)
    928     ENDDO
    929   !$OMP BARRIER       
     898
     899    !$OMP MASTER
     900    DO i = 1, Nb
     901      Buff(i) = Var(i)
     902    ENDDO
     903    !$OMP END MASTER
     904    !$OMP BARRIER
     905
     906    DO i = 1, Nb
     907      Var(i) = Buff(i)
     908    ENDDO
     909    !$OMP BARRIER
    930910
    931911  END SUBROUTINE bcast_omp_lgen
    932912
    933913
    934   SUBROUTINE scatter_omp_igen(VarIn,VarOut,dimsize,Buff)
     914  SUBROUTINE scatter_omp_igen(VarIn, VarOut, dimsize, Buff)
    935915    USE lmdz_phys_omp_data
    936916    USE lmdz_phys_mpi_data, ONLY: klon_mpi
    937917    IMPLICIT NONE
    938918
    939     INTEGER,INTENT(IN) :: dimsize
    940     INTEGER,INTENT(IN),DIMENSION(klon_mpi,dimsize) :: VarIn
    941     INTEGER,INTENT(OUT),DIMENSION(klon_omp,dimsize) :: VarOut
    942     INTEGER,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    943 
    944     INTEGER :: i,ij
    945    
    946   !$OMP MASTER
    947     DO i=1,dimsize
    948       DO ij=1,klon_mpi
    949         Buff(ij,i)=VarIn(ij,i)
     919    INTEGER, INTENT(IN) :: dimsize
     920    INTEGER, INTENT(IN), DIMENSION(klon_mpi, dimsize) :: VarIn
     921    INTEGER, INTENT(OUT), DIMENSION(klon_omp, dimsize) :: VarOut
     922    INTEGER, INTENT(INOUT), DIMENSION(klon_mpi, dimsize) :: Buff
     923
     924    INTEGER :: i, ij
     925
     926    !$OMP MASTER
     927    DO i = 1, dimsize
     928      DO ij = 1, klon_mpi
     929        Buff(ij, i) = VarIn(ij, i)
    950930      ENDDO
    951     ENDDO 
    952   !$OMP END MASTER
    953   !$OMP BARRIER
    954  
    955     DO i=1,dimsize
    956       DO ij=1,klon_omp
    957         VarOut(ij,i)=Buff(klon_omp_begin-1+ij,i)
     931    ENDDO
     932    !$OMP END MASTER
     933    !$OMP BARRIER
     934
     935    DO i = 1, dimsize
     936      DO ij = 1, klon_omp
     937        VarOut(ij, i) = Buff(klon_omp_begin - 1 + ij, i)
    958938      ENDDO
    959939    ENDDO
    960   !$OMP BARRIER 
    961  
     940    !$OMP BARRIER
     941
    962942  END SUBROUTINE scatter_omp_igen
    963943
    964944
    965   SUBROUTINE scatter_omp_rgen(VarIn,VarOut,dimsize,Buff)
    966   USE lmdz_phys_omp_data
    967   USE lmdz_phys_mpi_data, ONLY: klon_mpi
    968   IMPLICIT NONE
    969 
    970     INTEGER,INTENT(IN) :: dimsize
    971     REAL,INTENT(IN),DIMENSION(klon_mpi,dimsize) :: VarIn
    972     REAL,INTENT(OUT),DIMENSION(klon_omp,dimsize) :: VarOut
    973     REAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    974 
    975     INTEGER :: i,ij
    976    
    977   !$OMP MASTER
    978     DO i=1,dimsize
    979       DO ij=1,klon_mpi
    980         Buff(ij,i)=VarIn(ij,i)
     945  SUBROUTINE scatter_omp_rgen(VarIn, VarOut, dimsize, Buff)
     946    USE lmdz_phys_omp_data
     947    USE lmdz_phys_mpi_data, ONLY: klon_mpi
     948    IMPLICIT NONE
     949
     950    INTEGER, INTENT(IN) :: dimsize
     951    REAL, INTENT(IN), DIMENSION(klon_mpi, dimsize) :: VarIn
     952    REAL, INTENT(OUT), DIMENSION(klon_omp, dimsize) :: VarOut
     953    REAL, INTENT(INOUT), DIMENSION(klon_mpi, dimsize) :: Buff
     954
     955    INTEGER :: i, ij
     956
     957    !$OMP MASTER
     958    DO i = 1, dimsize
     959      DO ij = 1, klon_mpi
     960        Buff(ij, i) = VarIn(ij, i)
    981961      ENDDO
    982     ENDDO 
    983   !$OMP END MASTER
    984   !$OMP BARRIER
    985 
    986     DO i=1,dimsize
    987       DO ij=1,klon_omp
    988         VarOut(ij,i)=Buff(klon_omp_begin-1+ij,i)
     962    ENDDO
     963    !$OMP END MASTER
     964    !$OMP BARRIER
     965
     966    DO i = 1, dimsize
     967      DO ij = 1, klon_omp
     968        VarOut(ij, i) = Buff(klon_omp_begin - 1 + ij, i)
    989969      ENDDO
    990970    ENDDO
    991   !$OMP BARRIER 
     971    !$OMP BARRIER
    992972
    993973  END SUBROUTINE scatter_omp_rgen
    994974
    995975
    996   SUBROUTINE scatter_omp_lgen(VarIn,VarOut,dimsize,Buff)
    997   USE lmdz_phys_omp_data
    998   USE lmdz_phys_mpi_data, ONLY: klon_mpi
    999   IMPLICIT NONE
    1000 
    1001     INTEGER,INTENT(IN) :: dimsize
    1002     LOGICAL,INTENT(IN),DIMENSION(klon_mpi,dimsize) :: VarIn
    1003     LOGICAL,INTENT(OUT),DIMENSION(klon_omp,dimsize) :: VarOut
    1004     LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    1005 
    1006     INTEGER :: i,ij
    1007    
    1008  !$OMP MASTER
    1009     DO i=1,dimsize
    1010       DO ij=1,klon_mpi
    1011         Buff(ij,i)=VarIn(ij,i)
     976  SUBROUTINE scatter_omp_lgen(VarIn, VarOut, dimsize, Buff)
     977    USE lmdz_phys_omp_data
     978    USE lmdz_phys_mpi_data, ONLY: klon_mpi
     979    IMPLICIT NONE
     980
     981    INTEGER, INTENT(IN) :: dimsize
     982    LOGICAL, INTENT(IN), DIMENSION(klon_mpi, dimsize) :: VarIn
     983    LOGICAL, INTENT(OUT), DIMENSION(klon_omp, dimsize) :: VarOut
     984    LOGICAL, INTENT(INOUT), DIMENSION(klon_mpi, dimsize) :: Buff
     985
     986    INTEGER :: i, ij
     987
     988    !$OMP MASTER
     989    DO i = 1, dimsize
     990      DO ij = 1, klon_mpi
     991        Buff(ij, i) = VarIn(ij, i)
    1012992      ENDDO
    1013     ENDDO 
    1014   !$OMP END MASTER
    1015   !$OMP BARRIER
    1016 
    1017     DO i=1,dimsize
    1018       DO ij=1,klon_omp
    1019         VarOut(ij,i)=Buff(klon_omp_begin-1+ij,i)
     993    ENDDO
     994    !$OMP END MASTER
     995    !$OMP BARRIER
     996
     997    DO i = 1, dimsize
     998      DO ij = 1, klon_omp
     999        VarOut(ij, i) = Buff(klon_omp_begin - 1 + ij, i)
    10201000      ENDDO
    10211001    ENDDO
    1022   !$OMP BARRIER 
     1002    !$OMP BARRIER
    10231003
    10241004  END SUBROUTINE scatter_omp_lgen
    10251005
    10261006
    1027 
    1028 
    1029 
    1030   SUBROUTINE gather_omp_igen(VarIn,VarOut,dimsize,Buff)
    1031   USE lmdz_phys_omp_data
    1032   USE lmdz_phys_mpi_data, ONLY: klon_mpi
    1033   IMPLICIT NONE
    1034 
    1035     INTEGER,INTENT(IN) :: dimsize
    1036     INTEGER,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
    1037     INTEGER,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    1038     INTEGER,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    1039 
    1040     INTEGER :: i,ij
    1041    
    1042     DO i=1,dimsize
    1043       DO ij=1,klon_omp
    1044         Buff(klon_omp_begin-1+ij,i)=VarIn(ij,i)
     1007  SUBROUTINE gather_omp_igen(VarIn, VarOut, dimsize, Buff)
     1008    USE lmdz_phys_omp_data
     1009    USE lmdz_phys_mpi_data, ONLY: klon_mpi
     1010    IMPLICIT NONE
     1011
     1012    INTEGER, INTENT(IN) :: dimsize
     1013    INTEGER, INTENT(IN), DIMENSION(klon_omp, dimsize) :: VarIn
     1014    INTEGER, INTENT(OUT), DIMENSION(klon_mpi, dimsize) :: VarOut
     1015    INTEGER, INTENT(INOUT), DIMENSION(klon_mpi, dimsize) :: Buff
     1016
     1017    INTEGER :: i, ij
     1018
     1019    DO i = 1, dimsize
     1020      DO ij = 1, klon_omp
     1021        Buff(klon_omp_begin - 1 + ij, i) = VarIn(ij, i)
    10451022      ENDDO
    10461023    ENDDO
    1047   !$OMP BARRIER 
    1048  
    1049  
    1050   !$OMP MASTER
    1051     DO i=1,dimsize
    1052       DO ij=1,klon_mpi
    1053         VarOut(ij,i)=Buff(ij,i)
     1024    !$OMP BARRIER
     1025
     1026
     1027    !$OMP MASTER
     1028    DO i = 1, dimsize
     1029      DO ij = 1, klon_mpi
     1030        VarOut(ij, i) = Buff(ij, i)
    10541031      ENDDO
    1055     ENDDO 
    1056   !$OMP END MASTER
    1057   !$OMP BARRIER
     1032    ENDDO
     1033    !$OMP END MASTER
     1034    !$OMP BARRIER
    10581035
    10591036  END SUBROUTINE gather_omp_igen
    10601037
    10611038
    1062   SUBROUTINE gather_omp_rgen(VarIn,VarOut,dimsize)
    1063   USE lmdz_phys_omp_data
    1064   USE lmdz_phys_mpi_data, ONLY: klon_mpi
    1065   IMPLICIT NONE
    1066 
    1067     INTEGER,INTENT(IN) :: dimsize
    1068     REAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
    1069     REAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize),TARGET :: VarOut
    1070 
    1071     REAL, POINTER, SAVE :: Varout_ptr(:,:) ! Shared between threads NOT THREADPRIVATE
    1072 
    1073     INTEGER :: i,ij
    1074    
     1039  SUBROUTINE gather_omp_rgen(VarIn, VarOut, dimsize)
     1040    USE lmdz_phys_omp_data
     1041    USE lmdz_phys_mpi_data, ONLY: klon_mpi
     1042    IMPLICIT NONE
     1043
     1044    INTEGER, INTENT(IN) :: dimsize
     1045    REAL, INTENT(IN), DIMENSION(klon_omp, dimsize) :: VarIn
     1046    REAL, INTENT(OUT), DIMENSION(klon_mpi, dimsize), TARGET :: VarOut
     1047
     1048    REAL, POINTER, SAVE :: Varout_ptr(:, :) ! Shared between threads NOT THREADPRIVATE
     1049
     1050    INTEGER :: i, ij
     1051
    10751052    !$omp master
    10761053    Varout_ptr => VarOut
     
    10781055    !$omp barrier
    10791056
    1080     DO i=1,dimsize
    1081       DO ij=1,klon_omp
    1082         Varout_ptr(klon_omp_begin-1+ij,i)=VarIn(ij,i)
     1057    DO i = 1, dimsize
     1058      DO ij = 1, klon_omp
     1059        Varout_ptr(klon_omp_begin - 1 + ij, i) = VarIn(ij, i)
    10831060      ENDDO
    10841061    ENDDO
     
    10871064
    10881065
    1089   SUBROUTINE gather_omp_lgen(VarIn,VarOut,dimsize,Buff)
    1090   USE lmdz_phys_omp_data
    1091   USE lmdz_phys_mpi_data, ONLY: klon_mpi
    1092   IMPLICIT NONE
    1093 
    1094     INTEGER,INTENT(IN) :: dimsize
    1095     LOGICAL,INTENT(IN),DIMENSION(klon_omp,dimsize) :: VarIn
    1096     LOGICAL,INTENT(OUT),DIMENSION(klon_mpi,dimsize) :: VarOut
    1097     LOGICAL,INTENT(INOUT),DIMENSION(klon_mpi,dimsize) :: Buff
    1098 
    1099     INTEGER :: i,ij
    1100    
    1101     DO i=1,dimsize
    1102       DO ij=1,klon_omp
    1103         Buff(klon_omp_begin-1+ij,i)=VarIn(ij,i)
     1066  SUBROUTINE gather_omp_lgen(VarIn, VarOut, dimsize, Buff)
     1067    USE lmdz_phys_omp_data
     1068    USE lmdz_phys_mpi_data, ONLY: klon_mpi
     1069    IMPLICIT NONE
     1070
     1071    INTEGER, INTENT(IN) :: dimsize
     1072    LOGICAL, INTENT(IN), DIMENSION(klon_omp, dimsize) :: VarIn
     1073    LOGICAL, INTENT(OUT), DIMENSION(klon_mpi, dimsize) :: VarOut
     1074    LOGICAL, INTENT(INOUT), DIMENSION(klon_mpi, dimsize) :: Buff
     1075
     1076    INTEGER :: i, ij
     1077
     1078    DO i = 1, dimsize
     1079      DO ij = 1, klon_omp
     1080        Buff(klon_omp_begin - 1 + ij, i) = VarIn(ij, i)
    11041081      ENDDO
    11051082    ENDDO
    1106   !$OMP BARRIER 
    1107 
    1108 
    1109   !$OMP MASTER
    1110     DO i=1,dimsize
    1111       DO ij=1,klon_mpi
    1112         VarOut(ij,i)=Buff(ij,i)
     1083    !$OMP BARRIER
     1084
     1085
     1086    !$OMP MASTER
     1087    DO i = 1, dimsize
     1088      DO ij = 1, klon_mpi
     1089        VarOut(ij, i) = Buff(ij, i)
    11131090      ENDDO
    1114     ENDDO 
    1115   !$OMP END MASTER
    1116   !$OMP BARRIER
     1091    ENDDO
     1092    !$OMP END MASTER
     1093    !$OMP BARRIER
    11171094
    11181095  END SUBROUTINE gather_omp_lgen
    11191096
    11201097
    1121   SUBROUTINE reduce_sum_omp_igen(VarIn,VarOut,dimsize,Buff)
    1122   IMPLICIT NONE
    1123 
    1124     INTEGER,INTENT(IN) :: dimsize
    1125     INTEGER,INTENT(IN),DIMENSION(dimsize) :: VarIn
    1126     INTEGER,INTENT(OUT),DIMENSION(dimsize) :: VarOut
    1127     INTEGER,INTENT(INOUT),DIMENSION(dimsize) :: Buff
     1098  SUBROUTINE reduce_sum_omp_igen(VarIn, VarOut, dimsize, Buff)
     1099    IMPLICIT NONE
     1100
     1101    INTEGER, INTENT(IN) :: dimsize
     1102    INTEGER, INTENT(IN), DIMENSION(dimsize) :: VarIn
     1103    INTEGER, INTENT(OUT), DIMENSION(dimsize) :: VarOut
     1104    INTEGER, INTENT(INOUT), DIMENSION(dimsize) :: Buff
    11281105
    11291106    INTEGER :: i
    11301107
    1131   !$OMP MASTER
    1132     Buff(:)=0
    1133   !$OMP END MASTER
    1134   !$OMP BARRIER
    1135  
    1136   !$OMP CRITICAL     
    1137     DO i=1,dimsize
    1138       Buff(i)=Buff(i)+VarIn(i)
    1139     ENDDO
    1140   !$OMP END CRITICAL
    1141   !$OMP BARRIER 
    1142  
    1143   !$OMP MASTER
    1144     DO i=1,dimsize
    1145       VarOut(i)=Buff(i)
    1146     ENDDO
    1147   !$OMP END MASTER
    1148   !$OMP BARRIER
    1149  
     1108    !$OMP MASTER
     1109    Buff(:) = 0
     1110    !$OMP END MASTER
     1111    !$OMP BARRIER
     1112
     1113    !$OMP CRITICAL
     1114    DO i = 1, dimsize
     1115      Buff(i) = Buff(i) + VarIn(i)
     1116    ENDDO
     1117    !$OMP END CRITICAL
     1118    !$OMP BARRIER
     1119
     1120    !$OMP MASTER
     1121    DO i = 1, dimsize
     1122      VarOut(i) = Buff(i)
     1123    ENDDO
     1124    !$OMP END MASTER
     1125    !$OMP BARRIER
     1126
    11501127  END SUBROUTINE reduce_sum_omp_igen
    11511128
    1152   SUBROUTINE reduce_sum_omp_rgen(VarIn,VarOut,dimsize,Buff)
    1153   IMPLICIT NONE
    1154 
    1155     INTEGER,INTENT(IN) :: dimsize
    1156     REAL,INTENT(IN),DIMENSION(dimsize) :: VarIn
    1157     REAL,INTENT(OUT),DIMENSION(dimsize) :: VarOut
    1158     REAL,INTENT(INOUT),DIMENSION(dimsize) :: Buff
     1129  SUBROUTINE reduce_sum_omp_rgen(VarIn, VarOut, dimsize, Buff)
     1130    IMPLICIT NONE
     1131
     1132    INTEGER, INTENT(IN) :: dimsize
     1133    REAL, INTENT(IN), DIMENSION(dimsize) :: VarIn
     1134    REAL, INTENT(OUT), DIMENSION(dimsize) :: VarOut
     1135    REAL, INTENT(INOUT), DIMENSION(dimsize) :: Buff
    11591136
    11601137    INTEGER :: i
    11611138
    1162   !$OMP MASTER
    1163     Buff(:)=0
    1164   !$OMP END MASTER
    1165   !$OMP BARRIER
    1166  
    1167   !$OMP CRITICAL     
    1168     DO i=1,dimsize
    1169       Buff(i)=Buff(i)+VarIn(i)
    1170     ENDDO
    1171   !$OMP END CRITICAL
    1172   !$OMP BARRIER 
    1173  
    1174   !$OMP MASTER
    1175     DO i=1,dimsize
    1176       VarOut(i)=Buff(i)
    1177     ENDDO
    1178   !$OMP END MASTER
    1179   !$OMP BARRIER
    1180  
     1139    !$OMP MASTER
     1140    Buff(:) = 0
     1141    !$OMP END MASTER
     1142    !$OMP BARRIER
     1143
     1144    !$OMP CRITICAL
     1145    DO i = 1, dimsize
     1146      Buff(i) = Buff(i) + VarIn(i)
     1147    ENDDO
     1148    !$OMP END CRITICAL
     1149    !$OMP BARRIER
     1150
     1151    !$OMP MASTER
     1152    DO i = 1, dimsize
     1153      VarOut(i) = Buff(i)
     1154    ENDDO
     1155    !$OMP END MASTER
     1156    !$OMP BARRIER
     1157
    11811158  END SUBROUTINE reduce_sum_omp_rgen
    11821159
    11831160
    1184   SUBROUTINE reduce_min_omp_igen(VarIn,VarOut,dimsize,Buff)
    1185   IMPLICIT NONE
    1186 
    1187     INTEGER,INTENT(IN) :: dimsize
    1188     INTEGER,INTENT(IN),DIMENSION(dimsize) :: VarIn
    1189     INTEGER,INTENT(OUT),DIMENSION(dimsize) :: VarOut
    1190     INTEGER,INTENT(INOUT),DIMENSION(dimsize) :: Buff
     1161  SUBROUTINE reduce_min_omp_igen(VarIn, VarOut, dimsize, Buff)
     1162    IMPLICIT NONE
     1163
     1164    INTEGER, INTENT(IN) :: dimsize
     1165    INTEGER, INTENT(IN), DIMENSION(dimsize) :: VarIn
     1166    INTEGER, INTENT(OUT), DIMENSION(dimsize) :: VarOut
     1167    INTEGER, INTENT(INOUT), DIMENSION(dimsize) :: Buff
    11911168
    11921169    INTEGER :: i
    11931170    INTEGER :: var
    11941171
    1195   !$OMP MASTER
    1196     Buff(:)=HUGE(var)
    1197   !$OMP END MASTER
    1198   !$OMP BARRIER
    1199  
    1200   !$OMP CRITICAL     
    1201     DO i=1,dimsize
    1202       Buff(i)=MIN(Buff(i),VarIn(i))
    1203     ENDDO
    1204   !$OMP END CRITICAL
    1205   !$OMP BARRIER 
    1206  
    1207   !$OMP MASTER
    1208     DO i=1,dimsize
    1209       VarOut(i)=Buff(i)
    1210     ENDDO
    1211   !$OMP END MASTER
    1212   !$OMP BARRIER
    1213  
     1172    !$OMP MASTER
     1173    Buff(:) = HUGE(var)
     1174    !$OMP END MASTER
     1175    !$OMP BARRIER
     1176
     1177    !$OMP CRITICAL
     1178    DO i = 1, dimsize
     1179      Buff(i) = MIN(Buff(i), VarIn(i))
     1180    ENDDO
     1181    !$OMP END CRITICAL
     1182    !$OMP BARRIER
     1183
     1184    !$OMP MASTER
     1185    DO i = 1, dimsize
     1186      VarOut(i) = Buff(i)
     1187    ENDDO
     1188    !$OMP END MASTER
     1189    !$OMP BARRIER
     1190
    12141191  END SUBROUTINE reduce_min_omp_igen
    12151192
    1216   SUBROUTINE reduce_min_omp_rgen(VarIn,VarOut,dimsize,Buff)
    1217   IMPLICIT NONE
    1218 
    1219     INTEGER,INTENT(IN) :: dimsize
    1220     REAL,INTENT(IN),DIMENSION(dimsize) :: VarIn
    1221     REAL,INTENT(OUT),DIMENSION(dimsize) :: VarOut
    1222     REAL,INTENT(INOUT),DIMENSION(dimsize) :: Buff
     1193  SUBROUTINE reduce_min_omp_rgen(VarIn, VarOut, dimsize, Buff)
     1194    IMPLICIT NONE
     1195
     1196    INTEGER, INTENT(IN) :: dimsize
     1197    REAL, INTENT(IN), DIMENSION(dimsize) :: VarIn
     1198    REAL, INTENT(OUT), DIMENSION(dimsize) :: VarOut
     1199    REAL, INTENT(INOUT), DIMENSION(dimsize) :: Buff
    12231200
    12241201    INTEGER :: i
    12251202    REAL :: var
    12261203
    1227   !$OMP MASTER
    1228     Buff(:)=HUGE(var)
    1229   !$OMP END MASTER
    1230   !$OMP BARRIER
    1231  
    1232   !$OMP CRITICAL     
    1233     DO i=1,dimsize
    1234       Buff(i)=MIN(Buff(i),VarIn(i))
    1235     ENDDO
    1236   !$OMP END CRITICAL
    1237   !$OMP BARRIER 
    1238  
    1239   !$OMP MASTER
    1240     DO i=1,dimsize
    1241       VarOut(i)=Buff(i)
    1242     ENDDO
    1243   !$OMP END MASTER
    1244   !$OMP BARRIER
    1245  
     1204    !$OMP MASTER
     1205    Buff(:) = HUGE(var)
     1206    !$OMP END MASTER
     1207    !$OMP BARRIER
     1208
     1209    !$OMP CRITICAL
     1210    DO i = 1, dimsize
     1211      Buff(i) = MIN(Buff(i), VarIn(i))
     1212    ENDDO
     1213    !$OMP END CRITICAL
     1214    !$OMP BARRIER
     1215
     1216    !$OMP MASTER
     1217    DO i = 1, dimsize
     1218      VarOut(i) = Buff(i)
     1219    ENDDO
     1220    !$OMP END MASTER
     1221    !$OMP BARRIER
     1222
    12461223  END SUBROUTINE reduce_min_omp_rgen
    12471224
  • LMDZ6/branches/Amaury_dev/makelmdz_fcm

    r5111 r5122  
    386386  fi
    387387
    388 if [[ $veget = "true" || $veget = "orchidee1.9" || $veget = "orchidee2.0" \
     388  if [[ $veget = "true" || $veget = "orchidee1.9" || $veget = "orchidee2.0" \
    389389   || $veget = "orchidee2.1" || $veget = "orchideetrunk" ]]; then
    390390        echo "doing orchidee"
     
    394394   INCLUDE="${INCLUDE} ${ORCH_INCDIR}"
    395395   CPP_KEY="$CPP_KEY CPP_VEGET"
    396 # temporary, for Orchidee versions 1.9.* (before openmp activation)
     396# temporary, for Orchidee versions 1.9.* (before openmp activatmodion)
    397397   if [[ "$veget" = "orchidee1.9" ]]; then
    398398      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
Note: See TracChangeset for help on using the changeset viewer.