Ignore:
Timestamp:
Nov 5, 2018, 3:24:59 PM (6 years ago)
Author:
Laurent Fairhead
Message:

Undoing merge with trunk (r3356) to properly register Yann's latest modifications

Location:
LMDZ6/branches/DYNAMICO-conv
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/DYNAMICO-conv

  • LMDZ6/branches/DYNAMICO-conv/libf/phylmd/flott_gwd_rando_m.F90

    r3356 r3411  
    1818      use dimphy, only: klon, klev
    1919      use assert_m, only: assert
    20       USE ioipsl_getin_p_mod, ONLY : getin_p
    21       USE vertical_layers_mod, ONLY : presnivs
    22 
    2320      include "YOMCST.h"
    2421      include "clesphys.h"
     
    106103    REAL PH(KLON, KLEV + 1) ! Pressure at 1/2 levels
    107104    REAL PSEC ! Security to avoid division by 0 pressure
     105    REAL PHM1(KLON, KLEV + 1) ! 1/Press at 1/2 levels
    108106    REAL BV(KLON, KLEV + 1) ! Brunt Vaisala freq. (BVF) at 1/2 levels
    109107    REAL BVSEC ! Security to avoid negative BVF
    110     REAL RAN_NUM_1,RAN_NUM_2,RAN_NUM_3
    111 
    112     REAL, DIMENSION(klev+1) ::HREF
    113 
    114     LOGICAL, SAVE :: gwd_reproductibilite_mpiomp=.true.
    115     LOGICAL, SAVE :: firstcall = .TRUE.
    116   !$OMP THREADPRIVATE(firstcall,gwd_reproductibilite_mpiomp)
    117 
    118     CHARACTER (LEN=20) :: modname='flott_gwd_rando'
    119     CHARACTER (LEN=80) :: abort_message
    120 
    121 
    122 
    123   IF (firstcall) THEN
    124     ! Cle introduite pour resoudre un probleme de non reproductibilite
    125     ! Le but est de pouvoir tester de revenir a la version precedenete
    126     ! A eliminer rapidement
    127     CALL getin_p('gwd_reproductibilite_mpiomp',gwd_reproductibilite_mpiomp)
    128     IF (NW+3*NA>=KLEV) THEN
    129        abort_message = 'NW+3*NA>=KLEV Probleme pour generation des ondes'
    130        CALL abort_physic (modname,abort_message,1)
    131     ENDIF
    132     firstcall=.false.
    133   ENDIF
    134 
    135108
    136109    !-----------------------------------------------------------------
     
    183156    ZOISEC = 1.E-6 ! Security FOR 0 INTRINSIC FREQ
    184157
    185 IF (1==0) THEN
    186158    !ONLINE
    187159        call assert(klon == (/size(pp, 1), size(tt, 1), size(uu, 1), &
     
    195167          "FLOTT_GWD_RANDO klev")
    196168    !END ONLINE
    197 ENDIF
    198169
    199170    IF(DELTAT < DTIME)THEN
     
    212183    DO LL = 2, KLEV
    213184       PH(:, LL) = EXP((LOG(PP(:, LL)) + LOG(PP(:, LL - 1))) / 2.)
    214     end DO
     185       PHM1(:, LL) = 1. / PH(:, LL)
     186    end DO
     187
    215188    PH(:, KLEV + 1) = 0.
     189    PHM1(:, KLEV + 1) = 1. / PSEC
    216190    PH(:, 1) = 2. * PP(:, 1) - PH(:, 2)
    217191
    218192    ! Launching altitude
    219 
    220     !Pour revenir a la version non reproductible en changeant le nombre de process
    221     IF (gwd_reproductibilite_mpiomp) THEN
    222        ! Reprend la formule qui calcule PH en fonction de PP=play
    223        DO LL = 2, KLEV
    224           HREF(LL) = EXP((LOG(presnivs(LL)) + LOG(presnivs(LL - 1))) / 2.)
    225        end DO
    226        HREF(KLEV + 1) = 0.
    227        HREF(1) = 2. * presnivs(1) - HREF(2)
    228     ELSE
    229        HREF(1:KLEV)=PH(KLON/2,1:KLEV)
    230     ENDIF
    231193
    232194    LAUNCH=0
    233195    LTROP =0
    234196    DO LL = 1, KLEV
    235        IF (HREF(LL) / HREF(1) > XLAUNCH) LAUNCH = LL
     197       IF (PH(KLON / 2, LL) / PH(KLON / 2, 1) > XLAUNCH) LAUNCH = LL
    236198    ENDDO
    237199    DO LL = 1, KLEV
    238        IF (HREF(LL) / HREF(1) > XTROP) LTROP = LL
     200       IF (PH(KLON / 2, LL) / PH(KLON / 2, 1) > XTROP) LTROP = LL
    239201    ENDDO
    240     !LAUNCH=22 ; LTROP=33
    241 !   print*,'LAUNCH=',LAUNCH,'LTROP=',LTROP
    242202
    243203    ! Log pressure vert. coordinate
     
    285245    ! waves characteristics in an almost stochastic way
    286246
    287     DO JW = 1, NW
     247    JW = 0
     248    DO JP = 1, NP
     249       DO JK = 1, NK
     250          DO JO = 1, NO
     251             JW = JW + 1
    288252             ! Angle
    289253             DO II = 1, KLON
    290254                ! Angle (0 or PI so far)
    291                 RAN_NUM_1=MOD(TT(II, JW) * 10., 1.)
    292                 RAN_NUM_2= MOD(TT(II, JW) * 100., 1.)
    293                 ZP(JW, II) = (SIGN(1., 0.5 - RAN_NUM_1) + 1.) &
     255                ZP(JW, II) = (SIGN(1., 0.5 - MOD(TT(II, JW) * 10., 1.)) + 1.) &
    294256                     * RPI / 2.
    295257                ! Horizontal wavenumber amplitude
    296                 ZK(JW, II) = KMIN + (KMAX - KMIN) *RAN_NUM_2
     258                ZK(JW, II) = KMIN + (KMAX - KMIN) * MOD(TT(II, JW) * 100., 1.)
    297259                ! Horizontal phase speed
    298260                CPHA = 0.
    299261                DO JJ = 1, NA
    300                     RAN_NUM_3=MOD(TT(II, JW+3*JJ)**2, 1.)
    301262                    CPHA = CPHA + &
    302                     CMAX*2.*(RAN_NUM_3 -0.5)*SQRT(3.)/SQRT(NA*1.)
     263         CMAX*2.*(MOD(TT(II, JW+3*JJ)**2, 1.)-0.5)*SQRT(3.)/SQRT(NA*1.)
    303264                END DO
    304265                IF (CPHA.LT.0.)  THEN
     
    315276                RUW0(JW, II) = RUWMAX
    316277             ENDDO
    317     ENDDO
     278          end DO
     279       end DO
     280    end DO
    318281
    319282    ! 4. COMPUTE THE FLUXES
     
    454417    ENDDO
    455418
    456 
    457419  END SUBROUTINE FLOTT_GWD_RANDO
    458420
Note: See TracChangeset for help on using the changeset viewer.