Changeset 5561


Ignore:
Timestamp:
Feb 25, 2025, 7:15:18 PM (6 hours ago)
Author:
Laurent Fairhead
Message:

Roll back of commit 5511 and part of 5544 to insure convergence of next testing revision. Both commits will be reintroduced just after the validation of this
testing version

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

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/Dust/checknanqfi.f90

    r5354 r5561  
    11SUBROUTINE checknanqfi(zq,qmin,qmax,comment)
    22  USE dimphy
    3   USE, intrinsic :: ieee_arithmetic
    43  IMPLICIT NONE
    54
     
    1716     DO i = 1, klon
    1817!        IF (zq(i,k).GT.qmax .OR. zq(i,k).LT.qmin) THEN
    19         IF (ieee_is_nan(zq(i,k))) THEN
     18        IF (isnan(zq(i,k))) THEN
    2019           jbad = jbad + 1
    2120           jadrs(jbad) = i
  • LMDZ6/trunk/libf/phylmd/acama_gwd_rando_m.f90

    r5512 r5561  
    55
    66  USE clesphys_mod_h
    7   IMPLICIT NONE
    8   LOGICAL, SAVE :: gwd_reproductibilite_mpiomp=.true.
    9   LOGICAL, SAVE :: firstcall = .TRUE.
     7    implicit none
     8
     9contains
     10
     11  SUBROUTINE ACAMA_GWD_rando(DTIME, pp, plat, tt, uu, vv, rot, &
     12       zustr, zvstr, d_u, d_v,east_gwstress,west_gwstress)
     13
     14    ! Parametrization of the momentum flux deposition due to a discrete
     15    ! number of gravity waves.
     16    ! Author: F. Lott, A. de la Camara
     17    ! July, 24th, 2014
     18    ! Gaussian distribution of the source, source is vorticity squared
     19    ! Reference: de la Camara and Lott (GRL, 2015, vol 42, 2071-2078 )
     20    ! Lott et al (JAS, 2010, vol 67, page 157-170)
     21    ! Lott et al (JAS, 2012, vol 69, page 2134-2151)
     22
     23!  ONLINE:
     24USE yoegwd_mod_h
     25        USE yomcst_mod_h
     26use dimphy, only: klon, klev
     27    use assert_m, only: assert
     28    USE ioipsl_getin_p_mod, ONLY : getin_p
     29    USE vertical_layers_mod, ONLY : presnivs
     30
     31
     32!  OFFLINE:
     33!   include "dimensions_mod.f90"
     34!   include "dimphy.h"
     35!END DIFFERENCE
     36
     37    ! 0. DECLARATIONS:
     38
     39    ! 0.1 INPUTS
     40    REAL, intent(in)::DTIME ! Time step of the Physics
     41    REAL, intent(in):: PP(:, :) ! (KLON, KLEV) Pressure at full levels
     42    REAL, intent(in):: ROT(:,:) ! Relative vorticity             
     43    REAL, intent(in):: TT(:, :) ! (KLON, KLEV) Temp at full levels
     44    REAL, intent(in):: UU(:, :) ! (KLON, KLEV) Zonal wind at full levels
     45    REAL, intent(in):: VV(:, :) ! (KLON, KLEV) Merid wind at full levels
     46    REAL, intent(in):: PLAT(:) ! (KLON) LATITUDE                   
     47
     48    ! 0.2 OUTPUTS
     49    REAL, intent(out):: zustr(:), zvstr(:) ! (KLON) Surface Stresses
     50
     51    REAL, intent(inout):: d_u(:, :), d_v(:, :)
     52    REAL, intent(inout):: east_gwstress(:, :) !  Profile of eastward stress
     53    REAL, intent(inout):: west_gwstress(:, :) !  Profile of westward stress
     54    ! (KLON, KLEV) tendencies on winds
     55
     56    ! O.3 INTERNAL ARRAYS
     57    REAL BVLOW(klon)  !  LOW LEVEL BV FREQUENCY
     58    REAL ROTBA(KLON),CORIO(KLON)  !  BAROTROPIC REL. VORTICITY AND PLANETARY
     59    REAL UZ(KLON, KLEV + 1)
     60
     61    INTEGER II, JJ, LL
     62
     63    ! 0.3.0 TIME SCALE OF THE LIFE CYCLE OF THE WAVES PARAMETERIZED
     64
     65    REAL DELTAT
     66
     67    ! 0.3.1 GRAVITY-WAVES SPECIFICATIONS
     68
     69    INTEGER, PARAMETER:: NK = 2, NP = 2, NO = 2, NW = NK * NP * NO
     70    INTEGER JK, JP, JO, JW
     71    INTEGER, PARAMETER:: NA = 5  !number of realizations to get the phase speed
     72    REAL KMIN, KMAX ! Min and Max horizontal wavenumbers
     73    REAL CMIN, CMAX ! Min and Max absolute ph. vel.
     74    REAL CPHA ! absolute PHASE VELOCITY frequency
     75    REAL ZK(NW, KLON) ! Horizontal wavenumber amplitude
     76    REAL ZP(NW, KLON) ! Horizontal wavenumber angle
     77    REAL ZO(NW, KLON) ! Absolute frequency !
     78
     79    ! Waves Intr. freq. at the 1/2 lev surrounding the full level
     80    REAL ZOM(NW, KLON), ZOP(NW, KLON)
     81
     82    ! Wave EP-fluxes at the 2 semi levels surrounding the full level
     83    REAL WWM(NW, KLON), WWP(NW, KLON)
     84
     85    REAL RUW0(NW, KLON) ! Fluxes at launching level
     86
     87    REAL RUWP(NW, KLON), RVWP(NW, KLON)
     88    ! Fluxes X and Y for each waves at 1/2 Levels
     89
     90    INTEGER LAUNCH, LTROP ! Launching altitude and tropo altitude
     91
     92    REAL XLAUNCH ! Controle the launching altitude
     93    REAL XTROP ! SORT of Tropopause altitude
     94    REAL RUW(KLON, KLEV + 1) ! Flux x at semi levels
     95    REAL RVW(KLON, KLEV + 1) ! Flux y at semi levels
     96
     97    REAL PRMAX ! Maximum value of PREC, and for which our linear formula
     98    ! for GWs parameterisation apply
     99
     100    ! 0.3.2 PARAMETERS OF WAVES DISSIPATIONS
     101
     102    REAL RDISS, ZOISEC ! COEFF DE DISSIPATION, SECURITY FOR INTRINSIC FREQ
     103    REAL CORSEC ! SECURITY FOR INTRINSIC CORIOLIS
     104    REAL RUWFRT,SATFRT
     105
     106    ! 0.3.3 BACKGROUND FLOW AT 1/2 LEVELS AND VERTICAL COORDINATE
     107
     108    REAL H0 ! Characteristic Height of the atmosphere
     109    REAL DZ ! Characteristic depth of the source!
     110    REAL PR, TR ! Reference Pressure and Temperature
     111
     112    REAL ZH(KLON, KLEV + 1) ! Log-pressure altitude
     113
     114    REAL UH(KLON, KLEV + 1), VH(KLON, KLEV + 1) ! Winds at 1/2 levels
     115    REAL PH(KLON, KLEV + 1) ! Pressure at 1/2 levels
     116    REAL PSEC ! Security to avoid division by 0 pressure
     117    REAL PHM1(KLON, KLEV + 1) ! 1/Press at 1/2 levels
     118    REAL BV(KLON, KLEV + 1) ! Brunt Vaisala freq. (BVF) at 1/2 levels
     119    REAL BVSEC ! Security to avoid negative BVF
     120
     121    REAL, DIMENSION(klev+1) ::HREF
     122    LOGICAL, SAVE :: gwd_reproductibilite_mpiomp=.true.
     123    LOGICAL, SAVE :: firstcall = .TRUE.
    10124  !$OMP THREADPRIVATE(firstcall,gwd_reproductibilite_mpiomp)
    11  
    12   INTEGER, PARAMETER:: NK = 2, NP = 2, NO = 2, NW = NK * NP * NO
    13   INTEGER, PARAMETER:: NA = 5  !number of realizations to get the phase speed
    14 
    15 
    16 contains
    17  
    18   SUBROUTINE ACAMA_GWD_rando_first
    19   use dimphy, only: klev
    20   USE ioipsl_getin_p_mod, ONLY : getin_p
    21   IMPLICIT NONE
    22     CHARACTER (LEN=20),PARAMETER :: modname='acama_gwd_rando_m'
     125
     126    CHARACTER (LEN=20) :: modname='acama_gwd_rando_m'
    23127    CHARACTER (LEN=80) :: abort_message
    24  
    25     IF (firstcall) THEN
     128
     129
     130
     131  IF (firstcall) THEN
    26132    ! Cle introduite pour resoudre un probleme de non reproductibilite
    27133    ! Le but est de pouvoir tester de revenir a la version precedenete
     
    34140    firstcall=.false.
    35141!    CALL iophys_ini(dtime)
    36     ENDIF
    37   END SUBROUTINE ACAMA_GWD_rando_first
    38 
    39   SUBROUTINE ACAMA_GWD_rando(DTIME, pp, plat, tt, uu, vv, rot, &
    40        zustr, zvstr, d_u, d_v,east_gwstress,west_gwstress)
    41 
    42     ! Parametrization of the momentum flux deposition due to a discrete
    43     ! number of gravity waves.
    44     ! Author: F. Lott, A. de la Camara
    45     ! July, 24th, 2014
    46     ! Gaussian distribution of the source, source is vorticity squared
    47     ! Reference: de la Camara and Lott (GRL, 2015, vol 42, 2071-2078 )
    48     ! Lott et al (JAS, 2010, vol 67, page 157-170)
    49     ! Lott et al (JAS, 2012, vol 69, page 2134-2151)
    50 
    51 !  ONLINE:
    52 USE yoegwd_mod_h
    53         USE yomcst_mod_h
    54 use dimphy, only: klon, klev
    55     use assert_m, only: assert
    56     USE vertical_layers_mod, ONLY : presnivs
    57     USE lmdz_fake_call, ONLY : fake_call
    58 
    59 !  OFFLINE:
    60 !   include "dimensions_mod.f90"
    61 !   include "dimphy.h"
    62 !END DIFFERENCE
    63 
    64     ! 0. DECLARATIONS:
    65 
    66     ! 0.1 INPUTS
    67     REAL, intent(in)::DTIME ! Time step of the Physics
    68     REAL, intent(in):: PP(KLON, KLEV) ! (KLON, KLEV) Pressure at full levels
    69     REAL, intent(in):: ROT(KLON,KLEV) ! Relative vorticity             
    70     REAL, intent(in):: TT(KLON, KLEV) ! (KLON, KLEV) Temp at full levels
    71     REAL, intent(in):: UU(KLON, KLEV) ! (KLON, KLEV) Zonal wind at full levels
    72     REAL, intent(in):: VV(KLON, KLEV) ! (KLON, KLEV) Merid wind at full levels
    73     REAL, intent(in):: PLAT(KLON) ! (KLON) LATITUDE                   
    74 
    75     ! 0.2 OUTPUTS
    76     REAL, intent(out):: zustr(KLON), zvstr(KLON) ! (KLON) Surface Stresses
    77 
    78     REAL, intent(inout):: d_u(KLON, KLEV), d_v(KLON, KLEV)
    79     REAL, intent(inout):: east_gwstress(KLON, KLEV) !  Profile of eastward stress
    80     REAL, intent(inout):: west_gwstress(KLON, KLEV) !  Profile of westward stress
    81     ! (KLON, KLEV) tendencies on winds
    82 
    83     ! O.3 INTERNAL ARRAYS
    84     REAL BVLOW(klon)  !  LOW LEVEL BV FREQUENCY
    85     REAL ROTBA(KLON),CORIO(KLON)  !  BAROTROPIC REL. VORTICITY AND PLANETARY
    86     REAL UZ(KLON, KLEV + 1)
    87 
    88     INTEGER II, JJ, LL
    89 
    90     ! 0.3.0 TIME SCALE OF THE LIFE CYCLE OF THE WAVES PARAMETERIZED
    91 
    92     REAL DELTAT
    93 
    94     ! 0.3.1 GRAVITY-WAVES SPECIFICATIONS
    95 
    96     INTEGER JK, JP, JO, JW
    97     REAL KMIN, KMAX ! Min and Max horizontal wavenumbers
    98     REAL CMIN, CMAX ! Min and Max absolute ph. vel.
    99     REAL CPHA ! absolute PHASE VELOCITY frequency
    100     REAL ZK(KLON, NW) ! Horizontal wavenumber amplitude
    101     REAL ZP(KLON, NW) ! Horizontal wavenumber angle
    102     REAL ZO(KLON,NW) ! Absolute frequency !
    103 
    104     ! Waves Intr. freq. at the 1/2 lev surrounding the full level
    105     REAL ZOM(KLON, NW), ZOP(KLON, NW)
    106 
    107     ! Wave EP-fluxes at the 2 semi levels surrounding the full level
    108     REAL WWM(KLON, NW), WWP(KLON, NW)
    109 
    110     REAL RUW0(KLON, NW) ! Fluxes at launching level
    111 
    112     REAL RUWP(KLON, NW), RVWP(KLON, NW)
    113     ! Fluxes X and Y for each waves at 1/2 Levels
    114 
    115     INTEGER LAUNCH, LTROP ! Launching altitude and tropo altitude
    116 
    117     REAL XLAUNCH ! Controle the launching altitude
    118     REAL XTROP ! SORT of Tropopause altitude
    119     REAL RUW(KLON, KLEV + 1) ! Flux x at semi levels
    120     REAL RVW(KLON, KLEV + 1) ! Flux y at semi levels
    121 
    122     REAL PRMAX ! Maximum value of PREC, and for which our linear formula
    123     ! for GWs parameterisation apply
    124 
    125     ! 0.3.2 PARAMETERS OF WAVES DISSIPATIONS
    126 
    127     REAL RDISS, ZOISEC ! COEFF DE DISSIPATION, SECURITY FOR INTRINSIC FREQ
    128     REAL CORSEC ! SECURITY FOR INTRINSIC CORIOLIS
    129     REAL RUWFRT,SATFRT
    130 
    131     ! 0.3.3 BACKGROUND FLOW AT 1/2 LEVELS AND VERTICAL COORDINATE
    132 
    133     REAL H0 ! Characteristic Height of the atmosphere
    134     REAL DZ ! Characteristic depth of the source!
    135     REAL PR, TR ! Reference Pressure and Temperature
    136 
    137     REAL ZH(KLON, KLEV + 1) ! Log-pressure altitude
    138 
    139     REAL UH(KLON, KLEV + 1), VH(KLON, KLEV + 1) ! Winds at 1/2 levels
    140     REAL PH(KLON, KLEV + 1) ! Pressure at 1/2 levels
    141     REAL PSEC ! Security to avoid division by 0 pressure
    142     REAL PHM1(KLON, KLEV + 1) ! 1/Press at 1/2 levels
    143     REAL BV(KLON, KLEV + 1) ! Brunt Vaisala freq. (BVF) at 1/2 levels
    144     REAL BVSEC ! Security to avoid negative BVF
    145 
    146     REAL, DIMENSION(klev+1) ::HREF
    147 
    148     CHARACTER (LEN=20),PARAMETER :: modname='acama_gwd_rando_m'
    149     CHARACTER (LEN=80) :: abort_message
    150 
     142  ENDIF
    151143
    152144    !-----------------------------------------------------------------
     
    219211!  END ONLINE
    220212
    221     CALL FAKE_CALL(BVLOW) ! to be suppress in future
    222     CALL FAKE_CALL(CORIO) ! to be suppress in future
    223     CALL FAKE_CALL(ROTBA) ! to be suppress in future
    224    
    225213    IF(DELTAT < DTIME)THEN
    226214!       PRINT *, 'flott_gwd_rando: deltat < dtime!'
     
    288276            - TT(:, LL - 1)) / (ZH(:, LL) - ZH(:, LL - 1)) * RD / H0
    289277    end DO
    290     BVLOW(:) = 0.5 * (TT(:, LTROP )+ TT(:, LAUNCH)) &
     278    BVLOW = 0.5 * (TT(:, LTROP )+ TT(:, LAUNCH)) &
    291279         * RD**2 / RCPD / H0**2 + (TT(:, LTROP ) &
    292280         - TT(:, LAUNCH))/(ZH(:, LTROP )- ZH(:, LAUNCH)) * RD / H0
     
    357345             DO II = 1, KLON
    358346                ! Angle (0 or PI so far)
    359                 ! ZP(II,JW) = (SIGN(1., 0.5 - MOD(TT(II, JW) * 10., 1.)) + 1.) &
     347                ! ZP(JW, II) = (SIGN(1., 0.5 - MOD(TT(II, JW) * 10., 1.)) + 1.) &
    360348                !      * RPI / 2.
    361349                ! Angle between 0 and pi
    362                   ZP(II,JW) = MOD(TT(II, JW) * 10., 1.) * RPI
     350                  ZP(JW, II) = MOD(TT(II, JW) * 10., 1.) * RPI
    363351! TEST WITH POSITIVE WAVES ONLY (Part I/II)
    364 !               ZP(II,JW) = 0.
     352!               ZP(JW, II) = 0.
    365353                ! Horizontal wavenumber amplitude
    366                 ZK(II,JW) = KMIN + (KMAX - KMIN) * MOD(TT(II, JW) * 100., 1.)
     354                ZK(JW, II) = KMIN + (KMAX - KMIN) * MOD(TT(II, JW) * 100., 1.)
    367355                ! Horizontal phase speed
    368356                CPHA = 0.
     
    373361                IF (CPHA.LT.0.)  THEN
    374362                   CPHA = -1.*CPHA
    375                    ZP(II,JW) = ZP(II,JW) + RPI
     363                   ZP(JW,II) = ZP(JW,II) + RPI
    376364! TEST WITH POSITIVE WAVES ONLY (Part II/II)
    377 !               ZP(II,JW) = 0.
     365!               ZP(JW, II) = 0.
    378366                ENDIF
    379367                CPHA = CPHA + CMIN !we dont allow |c|<1m/s
    380368                ! Absolute frequency is imposed
    381                 ZO(II, JW) = CPHA * ZK(II,JW)
     369                ZO(JW, II) = CPHA * ZK(JW, II)
    382370                ! Intrinsic frequency is imposed
    383                 ZO(II, JW) = ZO(II, JW) &
    384                      + ZK(II,JW) * COS(ZP(II,JW)) * UH(II, LAUNCH) &
    385                      + ZK(II,JW) * SIN(ZP(II,JW)) * VH(II, LAUNCH)
     371                ZO(JW, II) = ZO(JW, II) &
     372                     + ZK(JW, II) * COS(ZP(JW, II)) * UH(II, LAUNCH) &
     373                     + ZK(JW, II) * SIN(ZP(JW, II)) * VH(II, LAUNCH)
    386374                ! Momentum flux at launch lev
    387375                ! LAUNCHED RANDOM WAVES WITH LOG-NORMAL AMPLITUDE
    388376                !  RIGHT IN THE SH (GWD4 after 1990)
    389                   RUW0(II, JW) = 0.
     377                  RUW0(JW, II) = 0.
    390378                 DO JJ = 1, NA
    391                     RUW0(II, JW) = RUW0(II, JW) + &
     379                    RUW0(JW, II) = RUW0(JW,II) + &
    392380         2.*(MOD(TT(II, JW+4*(JJ-1)+JJ)**2, 1.)-0.5)*SQRT(3.)/SQRT(NA*1.)
    393381                END DO
    394                 RUW0(II,JW) = RUWFRT &
    395                           * EXP(RUW0(II,JW))/1250. &  ! 2 mpa at south pole
     382                RUW0(JW, II) = RUWFRT &
     383                          * EXP(RUW0(JW,II))/1250. &  ! 2 mpa at south pole
    396384       *((1.05+SIN(PLAT(II)*RPI/180.))/(1.01+SIN(PLAT(II)*RPI/180.))-2.05/2.01)
    397                 ! RUW0(II,JW) = RUWFRT
     385                ! RUW0(JW, II) = RUWFRT
    398386             ENDDO
    399387    end DO
     
    409397
    410398       ! Evaluate intrinsic frequency at launching altitude:
    411        ZOP(:, JW) = ZO(:, JW) &
    412             - ZK(:,JW) * COS(ZP(:,JW)) * UH(:, LAUNCH) &
    413             - ZK(:,JW) * SIN(ZP(:,JW)) * VH(:, LAUNCH)
     399       ZOP(JW, :) = ZO(JW, :) &
     400            - ZK(JW, :) * COS(ZP(JW, :)) * UH(:, LAUNCH) &
     401            - ZK(JW, :) * SIN(ZP(JW, :)) * VH(:, LAUNCH)
    414402
    415403       ! VERSION WITH FRONTAL SOURCES
     
    418406
    419407       ! tanh limitation for values above CORIO (inertial instability).
    420        ! WWP(:,JW) = RUW0(:,JW) &
    421        WWP(:,JW) = RUWFRT      &
     408       ! WWP(JW, :) = RUW0(JW, :) &
     409       WWP(JW, :) = RUWFRT      &
    422410       !     * (CORIO(:)*TANH(ROTBA(:)/CORIO(:)))**2 &
    423411       !    * ABS((CORIO(:)*TANH(ROTBA(:)/CORIO(:)))*CORIO(:)) &
     
    425413       !    * (CORIO(:)*CORIO(:)) &
    426414       ! MODERATION BY THE DEPTH OF THE SOURCE (DZ HERE)
    427        !      *EXP(-BVLOW(:)**2/MAX(ABS(ZOP(:,JW)),ZOISEC)**2 &
    428        !      *ZK(:,JW)**2*DZ**2) &
     415       !      *EXP(-BVLOW(:)**2/MAX(ABS(ZOP(JW, :)),ZOISEC)**2 &
     416       !      *ZK(JW, :)**2*DZ**2) &
    429417       ! COMPLETE FORMULA:
    430418            !* CORIO(:)**2*TANH(ROTBA(:)/CORIO(:)**2) &
     
    432420       !  RESTORE DIMENSION OF A FLUX
    433421       !     *RD*TR/PR
    434        !     *1. + RUW0(:,JW)
     422       !     *1. + RUW0(JW, :)
    435423             *1.
    436424
     
    441429       ! Put the stress in the right direction:
    442430
    443         RUWP(:,JW) = SIGN(1., ZOP(:,JW))*COS(ZP(:,JW)) * WWP(:,JW)
    444         RVWP(:,JW) = SIGN(1., ZOP(:,JW))*SIN(ZP(:,JW)) * WWP(:,JW)
     431        RUWP(JW, :) = SIGN(1., ZOP(JW, :))*COS(ZP(JW, :)) * WWP(JW, :)
     432        RVWP(JW, :) = SIGN(1., ZOP(JW, :))*SIN(ZP(JW, :)) * WWP(JW, :)
    445433
    446434    end DO
     
    452440       RVW(:, LL) = 0
    453441       DO JW = 1, NW
    454           RUW(:, LL) = RUW(:, LL) + RUWP(:,JW)
    455           RVW(:, LL) = RVW(:, LL) + RVWP(:,JW)
     442          RUW(:, LL) = RUW(:, LL) + RUWP(JW, :)
     443          RVW(:, LL) = RVW(:, LL) + RVWP(JW, :)
    456444       end DO
    457445    end DO
     
    465453       ! to the next)
    466454       DO JW = 1, NW
    467           ZOM(:, JW) = ZOP(:,JW)
    468           WWM(:,JW) = WWP(:,JW)
     455          ZOM(JW, :) = ZOP(JW, :)
     456          WWM(JW, :) = WWP(JW, :)
    469457          ! Intrinsic Frequency
    470           ZOP(:,JW) = ZO(:, JW) - ZK(:,JW) * COS(ZP(:,JW)) * UH(:, LL + 1) &
    471                - ZK(:,JW) * SIN(ZP(:,JW)) * VH(:, LL + 1)
     458          ZOP(JW, :) = ZO(JW, :) - ZK(JW, :) * COS(ZP(JW, :)) * UH(:, LL + 1) &
     459               - ZK(JW, :) * SIN(ZP(JW, :)) * VH(:, LL + 1)
    472460
    473461          ! No breaking (Eq.6)
    474462          ! Dissipation (Eq. 8)
    475           WWP(:,JW) = WWM(:,JW) * EXP(- 4. * RDISS * PR / (PH(:, LL + 1) &
     463          WWP(JW, :) = WWM(JW, :) * EXP(- 4. * RDISS * PR / (PH(:, LL + 1) &
    476464               + PH(:, LL)) * ((BV(:, LL + 1) + BV(:, LL)) / 2.)**3 &
    477                / MAX(ABS(ZOP(:,JW) + ZOM(:, JW)) / 2., ZOISEC)**4 &
    478                * ZK(:,JW)**3 * (ZH(:, LL + 1) - ZH(:, LL)))
     465               / MAX(ABS(ZOP(JW, :) + ZOM(JW, :)) / 2., ZOISEC)**4 &
     466               * ZK(JW, :)**3 * (ZH(:, LL + 1) - ZH(:, LL)))
    479467
    480468          ! Critical levels (forced to zero if intrinsic frequency changes sign)
    481469          ! Saturation (Eq. 12)
    482           WWP(:,JW) = min(WWP(:,JW), MAX(0., &
    483                SIGN(1., ZOP(:,JW) * ZOM(:, JW))) * ABS(ZOP(:,JW))**3 &
     470          WWP(JW, :) = min(WWP(JW, :), MAX(0., &
     471               SIGN(1., ZOP(JW, :) * ZOM(JW, :))) * ABS(ZOP(JW, :))**3 &
    484472          !    / BV(:, LL + 1) * EXP(- ZH(:, LL + 1) / H0) * SATFRT**2 * KMIN**2 &
    485473               / BV(:, LL + 1) * EXP(- ZH(:, LL + 1) / H0) * KMIN**2 &
    486474!              *(SATFRT*(2.5+1.5*TANH((ZH(:,LL+1)/H0-8.)/2.)))**2 &
    487475               *SATFRT**2       &
    488                / ZK(:,JW)**4)
     476               / ZK(JW, :)**4)
    489477       end DO
    490478
     
    493481
    494482       DO JW = 1, NW
    495           RUWP(:,JW) = SIGN(1., ZOP(:,JW))*COS(ZP(:,JW)) * WWP(:,JW)
    496           RVWP(:,JW) = SIGN(1., ZOP(:,JW))*SIN(ZP(:,JW)) * WWP(:,JW)
     483          RUWP(JW, :) = SIGN(1., ZOP(JW, :))*COS(ZP(JW, :)) * WWP(JW, :)
     484          RVWP(JW, :) = SIGN(1., ZOP(JW, :))*SIN(ZP(JW, :)) * WWP(JW, :)
    497485       end DO
    498486
     
    501489
    502490       DO JW = 1, NW
    503           RUW(:, LL + 1) = RUW(:, LL + 1) + RUWP(:,JW)
    504           RVW(:, LL + 1) = RVW(:, LL + 1) + RVWP(:,JW)
    505           EAST_GWSTRESS(:, LL)=EAST_GWSTRESS(:, LL)+MAX(0.,RUWP(:,JW))/REAL(NW)
    506           WEST_GWSTRESS(:, LL)=WEST_GWSTRESS(:, LL)+MIN(0.,RUWP(:,JW))/REAL(NW)
     491          RUW(:, LL + 1) = RUW(:, LL + 1) + RUWP(JW, :)
     492          RVW(:, LL + 1) = RVW(:, LL + 1) + RVWP(JW, :)
     493          EAST_GWSTRESS(:, LL)=EAST_GWSTRESS(:, LL)+MAX(0.,RUWP(JW,:))/FLOAT(NW)
     494          WEST_GWSTRESS(:, LL)=WEST_GWSTRESS(:, LL)+MIN(0.,RUWP(JW,:))/FLOAT(NW)
    507495       end DO
    508496    end DO
  • LMDZ6/trunk/libf/phylmd/flott_gwd_rando_m.f90

    r5512 r5561  
    66  USE clesphys_mod_h
    77      implicit none
     8
     9contains
     10
     11  SUBROUTINE FLOTT_GWD_rando(DTIME, pp, tt, uu, vv, prec, zustr, zvstr, d_u, &
     12       d_v,east_gwstress,west_gwstress)
     13
     14    ! Parametrization of the momentum flux deposition due to a discrete
     15    ! number of gravity waves.
     16    ! Author: F. Lott
     17    ! July, 12th, 2012
     18    ! Gaussian distribution of the source, source is precipitation
     19    ! Reference: Lott (JGR, vol 118, page 8897, 2013)
     20
     21    !ONLINE:
     22      USE yomcst_mod_h
     23use dimphy, only: klon, klev
     24      use assert_m, only: assert
     25      USE ioipsl_getin_p_mod, ONLY : getin_p
     26      USE vertical_layers_mod, ONLY : presnivs
     27      USE yoegwd_mod_h
     28      CHARACTER (LEN=20) :: modname='flott_gwd_rando'
     29      CHARACTER (LEN=80) :: abort_message
     30
     31    ! OFFLINE:
     32    ! include "dimensions_mod.f90"
     33    ! include "dimphy.h"
     34    ! END OF DIFFERENCE ONLINE-OFFLINE
     35
     36    ! 0. DECLARATIONS:
     37
     38    ! 0.1 INPUTS
     39    REAL, intent(in)::DTIME ! Time step of the Physics
     40    REAL, intent(in):: pp(:, :) ! (KLON, KLEV) Pressure at full levels
     41    REAL, intent(in):: prec(:) ! (klon) Precipitation (kg/m^2/s)
     42    REAL, intent(in):: TT(:, :) ! (KLON, KLEV) Temp at full levels
     43    REAL, intent(in):: UU(:, :) ! (KLON, KLEV) Zonal wind at full levels
     44    REAL, intent(in):: VV(:, :) ! (KLON, KLEV) Merid wind at full levels
     45
     46    ! 0.2 OUTPUTS
     47    REAL, intent(out):: zustr(:), zvstr(:) ! (KLON) Surface Stresses
     48
     49    REAL, intent(inout):: d_u(:, :), d_v(:, :)
     50    REAL, intent(inout):: east_gwstress(:, :) !  Profile of eastward stress
     51    REAL, intent(inout):: west_gwstress(:, :) !  Profile of westward stress
     52
     53    ! (KLON, KLEV) tendencies on winds
     54
     55    ! O.3 INTERNAL ARRAYS
     56    REAL BVLOW(klon)
     57    REAL DZ   !  Characteristic depth of the Source
     58
     59    INTEGER II, JJ, LL
     60
     61    ! 0.3.0 TIME SCALE OF THE LIFE CYCLE OF THE WAVES PARAMETERIZED
     62
     63    REAL DELTAT
     64
     65    ! 0.3.1 GRAVITY-WAVES SPECIFICATIONS
     66
    867    INTEGER, PARAMETER:: NK = 2, NP = 2, NO = 2, NW = NK * NP * NO
     68    INTEGER JK, JP, JO, JW
    969    INTEGER, PARAMETER:: NA = 5  !number of realizations to get the phase speed
     70    REAL KMIN, KMAX ! Min and Max horizontal wavenumbers
     71    REAL CMAX ! standard deviation of the phase speed distribution
     72    REAL RUWMAX,SAT  ! ONLINE SPECIFIED IN run.def
     73    REAL CPHA ! absolute PHASE VELOCITY frequency
     74    REAL ZK(NW, KLON) ! Horizontal wavenumber amplitude
     75    REAL ZP(NW, KLON) ! Horizontal wavenumber angle
     76    REAL ZO(NW, KLON) ! Absolute frequency !
     77
     78    ! Waves Intr. freq. at the 1/2 lev surrounding the full level
     79    REAL ZOM(NW, KLON), ZOP(NW, KLON)
     80
     81    ! Wave EP-fluxes at the 2 semi levels surrounding the full level
     82    REAL WWM(NW, KLON), WWP(NW, KLON)
     83
     84    REAL RUW0(NW, KLON) ! Fluxes at launching level
     85
     86    REAL RUWP(NW, KLON), RVWP(NW, KLON)
     87    ! Fluxes X and Y for each waves at 1/2 Levels
     88
     89    INTEGER LAUNCH, LTROP ! Launching altitude and tropo altitude
     90
     91    REAL XLAUNCH ! Controle the launching altitude
     92    REAL XTROP ! SORT of Tropopause altitude
     93    REAL RUW(KLON, KLEV + 1) ! Flux x at semi levels
     94    REAL RVW(KLON, KLEV + 1) ! Flux y at semi levels
     95
     96    REAL PRMAX ! Maximum value of PREC, and for which our linear formula
     97    ! for GWs parameterisation apply
     98
     99    ! 0.3.2 PARAMETERS OF WAVES DISSIPATIONS
     100
     101    REAL RDISS, ZOISEC ! COEFF DE DISSIPATION, SECURITY FOR INTRINSIC FREQ
     102
     103    ! 0.3.3 BACKGROUND FLOW AT 1/2 LEVELS AND VERTICAL COORDINATE
     104
     105    REAL H0 ! Characteristic Height of the atmosphere
     106    REAL PR, TR ! Reference Pressure and Temperature
     107
     108    REAL ZH(KLON, KLEV + 1) ! Log-pressure altitude
     109
     110    REAL UH(KLON, KLEV + 1), VH(KLON, KLEV + 1) ! Winds at 1/2 levels
     111    REAL PH(KLON, KLEV + 1) ! Pressure at 1/2 levels
     112    REAL PSEC ! Security to avoid division by 0 pressure
     113    REAL BV(KLON, KLEV + 1) ! Brunt Vaisala freq. (BVF) at 1/2 levels
     114    REAL BVSEC ! Security to avoid negative BVF
     115    REAL RAN_NUM_1,RAN_NUM_2,RAN_NUM_3
     116
     117    REAL, DIMENSION(klev+1) ::HREF
     118
    10119    LOGICAL, SAVE :: gwd_reproductibilite_mpiomp=.true.
    11120    LOGICAL, SAVE :: firstcall = .TRUE.
    12    !$OMP THREADPRIVATE(firstcall,gwd_reproductibilite_mpiomp)
    13 
    14 contains
    15 
    16   SUBROUTINE FLOTT_GWD_rando_first
    17   use dimphy, only: klev
    18   USE ioipsl_getin_p_mod, ONLY : getin_p
    19   IMPLICIT NONE
    20     CHARACTER (LEN=20),PARAMETER :: modname='acama_gwd_rando_m'
    21     CHARACTER (LEN=80) :: abort_message
    22  
    23     IF (firstcall) THEN
     121  !$OMP THREADPRIVATE(firstcall,gwd_reproductibilite_mpiomp)
     122
     123
     124  IF (firstcall) THEN
    24125    ! Cle introduite pour resoudre un probleme de non reproductibilite
    25126    ! Le but est de pouvoir tester de revenir a la version precedenete
     
    32133    firstcall=.false.
    33134  ENDIF
    34   END SUBROUTINE FLOTT_GWD_rando_first
    35 
    36 
    37   SUBROUTINE FLOTT_GWD_rando(DTIME, PP, tt, uu, vv, prec, zustr, zvstr, d_u, &
    38        d_v,east_gwstress,west_gwstress)
    39 
    40     ! Parametrization of the momentum flux deposition due to a discrete
    41     ! number of gravity waves.
    42     ! Author: F. Lott
    43     ! July, 12th, 2012
    44     ! Gaussian distribution of the source, source is precipitation
    45     ! Reference: Lott (JGR, vol 118, page 8897, 2013)
    46 
    47     !ONLINE:
    48       USE yomcst_mod_h
    49 use dimphy, only: klon, klev
    50       use assert_m, only: assert
    51       USE ioipsl_getin_p_mod, ONLY : getin_p
    52       USE vertical_layers_mod, ONLY : presnivs
    53       USE yoegwd_mod_h
    54       USE lmdz_fake_call, ONLY : fake_call
    55 
    56       CHARACTER (LEN=20),PARAMETER :: modname='flott_gwd_rando'
    57       CHARACTER (LEN=80) :: abort_message
    58 
    59     ! OFFLINE:
    60     ! include "dimensions_mod.f90"
    61     ! include "dimphy.h"
    62     ! END OF DIFFERENCE ONLINE-OFFLINE
    63 
    64     ! 0. DECLARATIONS:
    65 
    66     ! 0.1 INPUTS
    67     REAL, intent(in)::DTIME ! Time step of the Physics
    68     REAL, intent(in):: pp(KLON, KLEV) ! (KLON, KLEV) Pressure at full levels
    69     REAL, intent(in):: prec(KLON) ! (klon) Precipitation (kg/m^2/s)
    70     REAL, intent(in):: TT(KLON, KLEV) ! (KLON, KLEV) Temp at full levels
    71     REAL, intent(in):: UU(KLON, KLEV) ! (KLON, KLEV) Zonal wind at full levels
    72     REAL, intent(in):: VV(KLON, KLEV) ! (KLON, KLEV) Merid wind at full levels
    73 
    74     ! 0.2 OUTPUTS
    75     REAL, intent(out):: zustr(KLON), zvstr(KLON) ! (KLON) Surface Stresses
    76 
    77     REAL, intent(inout):: d_u(KLON, KLEV), d_v(KLON, KLEV)
    78     REAL, intent(inout):: east_gwstress(KLON, KLEV) !  Profile of eastward stress
    79     REAL, intent(inout):: west_gwstress(KLON, KLEV) !  Profile of westward stress
    80 
    81     ! (KLON, KLEV) tendencies on winds
    82 
    83     ! O.3 INTERNAL ARRAYS
    84     REAL BVLOW(klon)
    85     REAL DZ   !  Characteristic depth of the Source
    86 
    87     INTEGER II, JJ, LL
    88 
    89     ! 0.3.0 TIME SCALE OF THE LIFE CYCLE OF THE WAVES PARAMETERIZED
    90 
    91     REAL DELTAT
    92 
    93     ! 0.3.1 GRAVITY-WAVES SPECIFICATIONS
    94 
    95     INTEGER JK, JP, JO, JW
    96     REAL KMIN, KMAX ! Min and Max horizontal wavenumbers
    97     REAL CMAX ! standard deviation of the phase speed distribution
    98     REAL RUWMAX,SAT  ! ONLINE SPECIFIED IN run.def
    99     REAL CPHA ! absolute PHASE VELOCITY frequency
    100     REAL ZK(KLON, NW) ! Horizontal wavenumber amplitude
    101     REAL ZP(KLON, NW) ! Horizontal wavenumber angle
    102     REAL ZO(KLON, NW) ! Absolute frequency !
    103 
    104     ! Waves Intr. freq. at the 1/2 lev surrounding the full level
    105     REAL ZOM(KLON, NW), ZOP(KLON, NW)
    106 
    107     ! Wave EP-fluxes at the 2 semi levels surrounding the full level
    108     REAL WWM(KLON, NW), WWP(KLON, NW)
    109 
    110     REAL RUW0(KLON, NW) ! Fluxes at launching level
    111 
    112     REAL RUWP(KLON, NW), RVWP(KLON, NW)
    113     ! Fluxes X and Y for each waves at 1/2 Levels
    114 
    115     INTEGER LAUNCH, LTROP ! Launching altitude and tropo altitude
    116 
    117     REAL XLAUNCH ! Controle the launching altitude
    118     REAL XTROP ! SORT of Tropopause altitude
    119     REAL RUW(KLON, KLEV + 1) ! Flux x at semi levels
    120     REAL RVW(KLON, KLEV + 1) ! Flux y at semi levels
    121 
    122     REAL PRMAX ! Maximum value of PREC, and for which our linear formula
    123     ! for GWs parameterisation apply
    124 
    125     ! 0.3.2 PARAMETERS OF WAVES DISSIPATIONS
    126 
    127     REAL RDISS, ZOISEC ! COEFF DE DISSIPATION, SECURITY FOR INTRINSIC FREQ
    128 
    129     ! 0.3.3 BACKGROUND FLOW AT 1/2 LEVELS AND VERTICAL COORDINATE
    130 
    131     REAL H0 ! Characteristic Height of the atmosphere
    132     REAL PR, TR ! Reference Pressure and Temperature
    133 
    134     REAL ZH(KLON, KLEV + 1) ! Log-pressure altitude
    135 
    136     REAL UH(KLON, KLEV + 1), VH(KLON, KLEV + 1) ! Winds at 1/2 levels
    137     REAL PH(KLON, KLEV + 1) ! Pressure at 1/2 levels
    138     REAL PSEC ! Security to avoid division by 0 pressure
    139     REAL BV(KLON, KLEV + 1) ! Brunt Vaisala freq. (BVF) at 1/2 levels
    140     REAL BVSEC ! Security to avoid negative BVF
    141     REAL RAN_NUM_1,RAN_NUM_2,RAN_NUM_3
    142 
    143     REAL, DIMENSION(klev+1) ::HREF
    144135
    145136
     
    206197    !END ONLINE
    207198ENDIF
    208    
     199
    209200    IF(DELTAT < DTIME)THEN
    210201       abort_message='flott_gwd_rando: deltat < dtime!'
     
    216207       CALL abort_physic(modname,abort_message,1)
    217208    ENDIF
    218    
    219     CALL FAKE_CALL(BVLOW)  ! to be suppress in future
    220    
     209
    221210    ! 2. EVALUATION OF THE BACKGROUND FLOW AT SEMI-LEVELS
    222211
     
    303292                RAN_NUM_1=MOD(TT(II, JW) * 10., 1.)
    304293                RAN_NUM_2= MOD(TT(II, JW) * 100., 1.)
    305                 ZP(II, JW) = (SIGN(1., 0.5 - RAN_NUM_1) + 1.) &
     294                ZP(JW, II) = (SIGN(1., 0.5 - RAN_NUM_1) + 1.) &
    306295                     * RPI / 2.
    307296                ! Horizontal wavenumber amplitude
    308                 ZK(II, JW) = KMIN + (KMAX - KMIN) *RAN_NUM_2
     297                ZK(JW, II) = KMIN + (KMAX - KMIN) *RAN_NUM_2
    309298                ! Horizontal phase speed
    310299                CPHA = 0.
     
    316305                IF (CPHA.LT.0.)  THEN
    317306                   CPHA = -1.*CPHA
    318                    ZP(II, JW) = ZP(II, JW) + RPI
     307                   ZP(JW,II) = ZP(JW,II) + RPI
    319308                ENDIF
    320309                ! Absolute frequency is imposed
    321                 ZO(II, JW) = CPHA * ZK(II, JW)
     310                ZO(JW, II) = CPHA * ZK(JW, II)
    322311                ! Intrinsic frequency is imposed
    323                 ZO(II, JW) = ZO(II, JW) &
    324                      + ZK(II, JW) * COS(ZP(II, JW)) * UH(II, LAUNCH) &
    325                      + ZK(II, JW) * SIN(ZP(II, JW)) * VH(II, LAUNCH)
     312                ZO(JW, II) = ZO(JW, II) &
     313                     + ZK(JW, II) * COS(ZP(JW, II)) * UH(II, LAUNCH) &
     314                     + ZK(JW, II) * SIN(ZP(JW, II)) * VH(II, LAUNCH)
    326315                ! Momentum flux at launch lev
    327                 RUW0(II, JW) = RUWMAX
     316                RUW0(JW, II) = RUWMAX
    328317             ENDDO
    329318    ENDDO
     
    337326
    338327       ! Evaluate intrinsic frequency at launching altitude:
    339        ZOP(:,JW) = ZO(:, JW) &
    340             - ZK(:, JW) * COS(ZP(:, JW)) * UH(:, LAUNCH) &
    341             - ZK(:, JW) * SIN(ZP(:, JW)) * VH(:, LAUNCH)
     328       ZOP(JW, :) = ZO(JW, :) &
     329            - ZK(JW, :) * COS(ZP(JW, :)) * UH(:, LAUNCH) &
     330            - ZK(JW, :) * SIN(ZP(JW, :)) * VH(:, LAUNCH)
    342331
    343332       ! VERSION WITH CONVECTIVE SOURCE
     
    348337
    349338       ! tanh limitation to values above prmax:
    350        WWP(:, JW) = RUW0(:, JW) &
     339       WWP(JW, :) = RUW0(JW, :) &
    351340            * (RD / RCPD / H0 * RLVTT * PRMAX * TANH(PREC(:) / PRMAX))**2
    352341
    353342       ! Factor related to the characteristics of the waves:
    354        WWP(:, JW) = WWP(:, JW) * ZK(:, JW)**3 / KMIN / BVLOW(:)  &
    355             / MAX(ABS(ZOP(:, JW)), ZOISEC)**3
     343       WWP(JW, :) = WWP(JW, :) * ZK(JW, :)**3 / KMIN / BVLOW(:)  &
     344            / MAX(ABS(ZOP(JW, :)), ZOISEC)**3
    356345
    357346       ! Moderation by the depth of the source (dz here):
    358        WWP(:, JW) = WWP(:, JW) &
    359             * EXP(- BVLOW(:)**2 / MAX(ABS(ZOP(:, JW)), ZOISEC)**2 * ZK(:, JW)**2 &
     347       WWP(JW, :) = WWP(JW, :) &
     348            * EXP(- BVLOW(:)**2 / MAX(ABS(ZOP(JW, :)), ZOISEC)**2 * ZK(JW, :)**2 &
    360349            * DZ**2)
    361350
    362351       ! Put the stress in the right direction:
    363        RUWP(:, JW) = ZOP(:, JW) / MAX(ABS(ZOP(:, JW)), ZOISEC)**2 &
    364             * BV(:, LAUNCH) * COS(ZP(:, JW)) * WWP(:, JW)**2
    365        RVWP(:, JW) = ZOP(:, JW) / MAX(ABS(ZOP(:, JW)), ZOISEC)**2 &
    366             * BV(:, LAUNCH) * SIN(ZP(:, JW)) * WWP(:, JW)**2
     352       RUWP(JW, :) = ZOP(JW, :) / MAX(ABS(ZOP(JW, :)), ZOISEC)**2 &
     353            * BV(:, LAUNCH) * COS(ZP(JW, :)) * WWP(JW, :)**2
     354       RVWP(JW, :) = ZOP(JW, :) / MAX(ABS(ZOP(JW, :)), ZOISEC)**2 &
     355            * BV(:, LAUNCH) * SIN(ZP(JW, :)) * WWP(JW, :)**2
    367356    end DO
    368357
     
    374363       RVW(:, LL) = 0
    375364       DO JW = 1, NW
    376           RUW(:, LL) = RUW(:, LL) + RUWP(:, JW)
    377           RVW(:, LL) = RVW(:, LL) + RVWP(:, JW)
     365          RUW(:, LL) = RUW(:, LL) + RUWP(JW, :)
     366          RVW(:, LL) = RVW(:, LL) + RVWP(JW, :)
    378367       end DO
    379368    end DO
     
    387376       ! to the next)
    388377       DO JW = 1, NW
    389           ZOM(:, JW) = ZOP(:,JW)
    390           WWM(:, JW) = WWP(:, JW)
     378          ZOM(JW, :) = ZOP(JW, :)
     379          WWM(JW, :) = WWP(JW, :)
    391380          ! Intrinsic Frequency
    392           ZOP(:, JW) = ZO(:, JW) - ZK(:, JW) * COS(ZP(:, JW)) * UH(:, LL + 1) &
    393                - ZK(:, JW) * SIN(ZP(:, JW)) * VH(:, LL + 1)
     381          ZOP(JW, :) = ZO(JW, :) - ZK(JW, :) * COS(ZP(JW, :)) * UH(:, LL + 1) &
     382               - ZK(JW, :) * SIN(ZP(JW, :)) * VH(:, LL + 1)
    394383
    395384          ! No breaking (Eq.6)
    396385          ! Dissipation (Eq. 8)
    397           WWP(:, JW) = WWM(:, JW) * EXP(- 4. * RDISS * PR / (PH(:, LL + 1) &
     386          WWP(JW, :) = WWM(JW, :) * EXP(- 4. * RDISS * PR / (PH(:, LL + 1) &
    398387               + PH(:, LL)) * ((BV(:, LL + 1) + BV(:, LL)) / 2.)**3 &
    399                / MAX(ABS(ZOP(:, JW) + ZOM(:, JW)) / 2., ZOISEC)**4 &
    400                * ZK(:, JW)**3 * (ZH(:, LL + 1) - ZH(:, LL)))
     388               / MAX(ABS(ZOP(JW, :) + ZOM(JW, :)) / 2., ZOISEC)**4 &
     389               * ZK(JW, :)**3 * (ZH(:, LL + 1) - ZH(:, LL)))
    401390
    402391          ! Critical levels (forced to zero if intrinsic frequency changes sign)
    403392          ! Saturation (Eq. 12)
    404           WWP(:, JW) = min(WWP(:, JW), MAX(0., &
    405                SIGN(1., ZOP(:, JW) * ZOM(:, JW))) * ABS(ZOP(:, JW))**3 &
     393          WWP(JW, :) = min(WWP(JW, :), MAX(0., &
     394               SIGN(1., ZOP(JW, :) * ZOM(JW, :))) * ABS(ZOP(JW, :))**3 &
    406395               / BV(:, LL + 1) * EXP(- ZH(:, LL + 1) / H0) * KMIN**2  &
    407                * SAT**2 / ZK(:, JW)**4)
     396               * SAT**2 / ZK(JW, :)**4)
    408397       end DO
    409398
     
    412401
    413402       DO JW = 1, NW
    414           RUWP(:, JW) = SIGN(1., ZOP(:, JW))*COS(ZP(:, JW)) * WWP(:, JW)
    415           RVWP(:, JW) = SIGN(1., ZOP(:, JW))*SIN(ZP(:, JW)) * WWP(:, JW)
     403          RUWP(JW, :) = SIGN(1., ZOP(JW, :))*COS(ZP(JW, :)) * WWP(JW, :)
     404          RVWP(JW, :) = SIGN(1., ZOP(JW, :))*SIN(ZP(JW, :)) * WWP(JW, :)
    416405       end DO
    417406
     
    420409
    421410       DO JW = 1, NW
    422           RUW(:, LL + 1) = RUW(:, LL + 1) + RUWP(:, JW)
    423           RVW(:, LL + 1) = RVW(:, LL + 1) + RVWP(:, JW)
    424           EAST_GWSTRESS(:, LL)=EAST_GWSTRESS(:, LL)+MAX(0.,RUWP(:, JW))/REAL(NW)
    425           WEST_GWSTRESS(:, LL)=WEST_GWSTRESS(:, LL)+MIN(0.,RUWP(:, JW))/REAL(NW)
     411          RUW(:, LL + 1) = RUW(:, LL + 1) + RUWP(JW, :)
     412          RVW(:, LL + 1) = RVW(:, LL + 1) + RVWP(JW, :)
     413          EAST_GWSTRESS(:, LL)=EAST_GWSTRESS(:, LL)+MAX(0.,RUWP(JW,:))/FLOAT(NW)
     414          WEST_GWSTRESS(:, LL)=WEST_GWSTRESS(:, LL)+MIN(0.,RUWP(JW,:))/FLOAT(NW)
    426415       end DO
    427416    end DO
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r5559 r5561  
    2020! PLEASE try to follow this rule
    2121
    22     USE ACAMA_GWD_rando_m, only: ACAMA_GWD_rando, ACAMA_GWD_rando_first
     22    USE ACAMA_GWD_rando_m, only: ACAMA_GWD_rando
    2323    USE aero_mod
    2424    USE add_phys_tend_mod, only : add_pbl_tend, add_phys_tend, diag_phys_tend, prt_enerbil, &
     
    3232    USE dimphy
    3333    USE etat0_limit_unstruct_mod
    34     USE FLOTT_GWD_rando_m, only: FLOTT_GWD_rando, FLOTT_GWD_rando_first
     34    USE FLOTT_GWD_rando_m, only: FLOTT_GWD_rando
    3535    USE fonte_neige_mod, ONLY  : fonte_neige_get_vars
    3636    USE geometry_mod, ONLY: cell_area, latitude_deg, longitude_deg
     
    49704970    IF (.not. ok_hines .and. ok_gwd_rando) then
    49714971       ! ym missing init for east_gwstress & west_gwstress -> added in phys_local_var_mod
    4972        CALL acama_GWD_rando_first()
    49734972       CALL acama_GWD_rando(PHYS_TSTEP, pplay, latitude_deg, t_seri, u_seri, &
    49744973            v_seri, rot, zustr_gwd_front, zvstr_gwd_front, du_gwd_front, &
     
    49894988
    49904989    IF (ok_gwd_rando) THEN
    4991        CALL FLOTT_GWD_rando_first()
    49924990       CALL FLOTT_GWD_rando(PHYS_TSTEP, pplay, t_seri, u_seri, v_seri, &
    49934991            rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, &
Note: See TracChangeset for help on using the changeset viewer.