Ignore:
Timestamp:
Oct 16, 2016, 6:10:59 PM (8 years ago)
Author:
jyg
Message:

Bug fix in cv3_routine.F90 (cv3_unsat could create
a precipitating downdraught when convection was
off) and in wake.F90 and calwake.F90 (some array
dimensions were incompatible and some
initializations were missing)

Location:
LMDZ5/trunk/libf/phylmd
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/calwake.F90

    r2635 r2671  
    7171  REAL                                               :: aire
    7272  REAL, DIMENSION(klon, klev)                        :: p,  pi
    73   REAL, DIMENSION(klon, klev+1)                      ::  ph, omgbe
     73  REAL, DIMENSION(klon, klev+1)                      ::  ph
     74  REAL, DIMENSION(klon, klev)                        ::  omgbe
    7475  REAL, DIMENSION(klon, klev)                        :: te, qe
    7576  REAL, DIMENSION(klon, klev)                        :: dtdwn, dqdwn
     
    8182  REAL, DIMENSION(klon)                              :: hw, wape, fip, gfl
    8283  REAL, DIMENSION(klon)                              :: sigmaw, wdens
    83   REAL, DIMENSION(klon, klev+1)                      :: omgbdth
     84  REAL, DIMENSION(klon, klev                      :: omgbdth
    8485  REAL, DIMENSION(klon, klev)                        :: dp_omgb
    8586  REAL, DIMENSION(klon, klev)                        :: dtke, dqke
    86   REAL, DIMENSION(klon, klev+1)                      :: omg
     87  REAL, DIMENSION(klon, klev                      :: omg
    8788  REAL, DIMENSION(klon, klev)                        :: dp_deltomg, spread
    8889  REAL, DIMENSION(klon)                              :: cstar
     
    122123    END DO
    123124  END DO
    124 
    125   omgbe(:, klev+1) = 0.
    126125
    127126  DO i = 1, klon
  • LMDZ5/trunk/libf/phylmd/cv3_routines.F90

    r2638 r2671  
    23542354
    23552355! ------------------------------------------------------
     2356IF (prt_level .GE. 10) print *,' ->cv3_unsat, iflag(1) ', iflag(1)
    23562357
    23572358! =============================
     
    23592360! =============================
    23602361!  (loops up to nl+1)
     2362mp(:,:) = 0.
     2363rp(:,:) = 0.
     2364up(:,:) = 0.
     2365vp(:,:) = 0.
     2366water(:,:) = 0.
     2367evap(:,:) = 0.
     2368wt(:,:) = 0.
     2369ice(:,:) = 0.
     2370fondue(:,:) = 0.
     2371faci(:,:) = 0.
     2372b(:,:) = 0.
     2373sigd(:) = 0.
     2374!! RomP >>>
     2375wdtrainA(:,:) = 0.
     2376wdtrainM(:,:) = 0.
     2377!! RomP <<<
    23612378
    23622379  DO i = 1, nlp
    23632380    DO il = 1, ncum
    2364       mp(il, i) = 0.0
    23652381      rp(il, i) = rr(il, i)
    23662382      up(il, i) = u(il, i)
    23672383      vp(il, i) = v(il, i)
    23682384      wt(il, i) = 0.001
    2369       water(il, i) = 0.0
    2370       faci(il, i) = 0.0
    2371       ice(il, i) = 0.0
    2372       fondue(il, i) = 0.0
    2373       evap(il, i) = 0.0
    2374       b(il, i) = 0.0
    2375     END DO
    2376   END DO
    2377 !! RomP >>>
    2378   DO i = 1, nlp
    2379     DO il = 1, ncum
    2380       wdtrainA(il, i) = 0.0
    2381       wdtrainM(il, i) = 0.0
    2382     END DO
    2383   END DO
    2384 !! RomP <<<
     2385    END DO
     2386  END DO
    23852387
    23862388! ***  Set the fractionnal area sigd of precipitating downdraughts
     
    24222424!!          lwork(il)=.TRUE.
    24232425!!          if(ep(il,inb(il)).lt.0.0001)lwork(il)=.FALSE.
    2424     lwork(il) = ep(il, inb(il)) >= 0.0001
     2426!jyg<
     2427!!    lwork(il) = ep(il, inb(il)) >= 0.0001
     2428    lwork(il) = ep(il, inb(il)) >= 0.0001 .AND. iflag(il) <= 2
    24252429  END DO
    24262430
     
    27252729
    27262730      END IF !(i.le.inb(il) .and. lwork(il) .and. i.ne.1)
     2731      IF (prt_level .GE. 20) THEN
     2732        PRINT *,'cv3_unsat, mp hydrostatic ', i, mp(il,i)
     2733      ENDIF
    27272734    END DO
    27282735! ----------------------------------------------------------------
     
    27712778          END IF
    27722779          mp(il, i) = max(0.0, mp(il,i))
     2780          IF (prt_level .GE. 20) THEN
     2781            PRINT *,'cv3_unsat, mp cubic ', i, mp(il,i)
     2782          ENDIF
    27732783
    27742784          IF (cvflag_ice) THEN
  • LMDZ5/trunk/libf/phylmd/wake.F90

    r2635 r2671  
    125125
    126126  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: p, pi
    127   REAL, DIMENSION (klon, klev+1),   INTENT(IN)          :: ph, omgb
     127  REAL, DIMENSION (klon, klev+1),   INTENT(IN)          :: ph
     128  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: omgb
    128129  REAL,                             INTENT(IN)          :: dtime
    129130  REAL, DIMENSION (klon, klev),     INTENT(IN)          :: te0, qe0
     
    148149  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dtke, dqke
    149150  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: spread
    150   REAL, DIMENSION (klon, klev+1),   INTENT(OUT)         :: omgbdth, omg
     151  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: omgbdth, omg
    151152  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: dp_omgb, dp_deltomg
    152153  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltat_gw
     
    161162
    162163  ! Variables à fixer
     164  INTEGER, SAVE                                         :: igout
     165  !$OMP THREADPRIVATE(igout)
    163166  REAL                                                  :: alon
    164167  LOGICAL, SAVE                                         :: first = .TRUE.
     
    182185  REAL, DIMENSION (klon, klev)                          :: deltaqw0
    183186  REAL, DIMENSION (klon, klev)                          :: te, qe
    184   REAL, DIMENSION (klon)                                :: sigmaw0, sigmaw1
     187  REAL, DIMENSION (klon)                                :: sigmaw0
     188!!  REAL, DIMENSION (klon)                                :: sigmaw1
    185189
    186190  ! Variables pour les GW
     
    228232  REAL, DIMENSION (klon, klev)                          :: the, thu
    229233
    230   REAL, DIMENSION (klon, klev+1)                        :: omgbw
     234  REAL, DIMENSION (klon, klev                        :: omgbw
    231235  REAL, DIMENSION (klon)                                :: pupper
    232236  REAL, DIMENSION (klon)                                :: omgtop
     
    250254
    251255  ! cc nrlmd
    252   REAL, DIMENSION (klon)                                :: death_rate, nat_rate
     256  REAL, DIMENSION (klon)                                :: death_rate
     257!!  REAL, DIMENSION (klon)                                :: nat_rate
    253258  REAL, DIMENSION (klon, klev)                          :: entr
    254259  REAL, DIMENSION (klon, klev)                          :: detr
     
    296301
    297302 if (first) then
     303
     304  igout = klon/2+1/klon
     305
    298306  crep_upper = 0.9
    299307  crep_sol = 1.0
     
    332340  delta_t_min = 0.2
    333341
    334   ! 1. - Save initial values and initialize tendencies
    335   ! --------------------------------------------------
    336 
    337   DO k = 1, klev
    338     DO i = 1, klon
    339       ppi(i, k) = pi(i, k)
    340       deltatw0(i, k) = deltatw(i, k)
    341       deltaqw0(i, k) = deltaqw(i, k)
    342       te(i, k) = te0(i, k)
    343       qe(i, k) = qe0(i, k)
    344       dtls(i, k) = 0.
    345       dqls(i, k) = 0.
    346       d_deltat_gw(i, k) = 0.
    347       d_te(i, k) = 0.
    348       d_qe(i, k) = 0.
    349       d_deltatw(i, k) = 0.
    350       d_deltaqw(i, k) = 0.
    351       ! IM 060508 beg
    352       d_deltatw2(i, k) = 0.
    353       d_deltaqw2(i, k) = 0.
    354       ! IM 060508 end
    355     END DO
    356   END DO
    357   DO i = 1, klon
    358    sigmaw_in(i) = sigmaw(i)
    359   END DO
     342  ! 1. - Save initial values, initialize tendencies, initialize output fields
     343  ! ------------------------------------------------------------------------
     344
     345!jyg<
     346!!  DO k = 1, klev
     347!!    DO i = 1, klon
     348!!      ppi(i, k) = pi(i, k)
     349!!      deltatw0(i, k) = deltatw(i, k)
     350!!      deltaqw0(i, k) = deltaqw(i, k)
     351!!      te(i, k) = te0(i, k)
     352!!      qe(i, k) = qe0(i, k)
     353!!      dtls(i, k) = 0.
     354!!      dqls(i, k) = 0.
     355!!      d_deltat_gw(i, k) = 0.
     356!!      d_te(i, k) = 0.
     357!!      d_qe(i, k) = 0.
     358!!      d_deltatw(i, k) = 0.
     359!!      d_deltaqw(i, k) = 0.
     360!!      ! IM 060508 beg
     361!!      d_deltatw2(i, k) = 0.
     362!!      d_deltaqw2(i, k) = 0.
     363!!      ! IM 060508 end
     364!!    END DO
     365!!  END DO
     366      ppi(:,:) = pi(:,:)
     367      deltatw0(:,:) = deltatw(:,:)
     368      deltaqw0(:,:) = deltaqw(:,:)
     369      te(:,:) = te0(:,:)
     370      qe(:,:) = qe0(:,:)
     371      dtls(:,:) = 0.
     372      dqls(:,:) = 0.
     373      d_deltat_gw(:,:) = 0.
     374      d_te(:,:) = 0.
     375      d_qe(:,:) = 0.
     376      d_deltatw(:,:) = 0.
     377      d_deltaqw(:,:) = 0.
     378      d_deltatw2(:,:) = 0.
     379      d_deltaqw2(:,:) = 0.
     380!!  DO i = 1, klon
     381!!   sigmaw_in(i) = sigmaw(i)
     382!!  END DO
     383   sigmaw_in(:) = sigmaw(:)
     384!>jyg
     385
    360386  ! sigmaw1=sigmaw
    361387  ! IF (sigd_con.GT.sigmaw1) THEN
     
    378404    ktopw(i) = 0
    379405  END DO
    380 
     406!
     407!<jyg
     408dth(:,:) = 0.
     409tu(:,:) = 0.
     410qu(:,:) = 0.
     411dtke(:,:) = 0.
     412dqke(:,:) = 0.
     413spread(:,:) = 0.
     414omgbdth(:,:) = 0.
     415omg(:,:) = 0.
     416dp_omgb(:,:) = 0.
     417dp_deltomg(:,:) = 0.
     418hw(:) = 0.
     419wape(:) = 0.
     420fip(:) = 0.
     421gfl(:) = 0.
     422cstar(:) = 0.
     423ktopw(:) = 0
     424!
     425!  Vertical advection local variables
     426omgbw(:,:) = 0.
     427omgtop(:) = 0
     428dp_omgbw(:,:) = 0.
     429omgbdq(:,:) = 0.
     430!>jyg
     431!
     432  IF (prt_level>=10) THEN
     433    PRINT *, 'wake-1, sigmaw(igout) ', sigmaw(igout)
     434    PRINT *, 'wake-1, deltatw(igout,k) ', (k,deltatw(igout,k), k=1,klev)
     435    PRINT *, 'wake-1, deltaqw(igout,k) ', (k,deltaqw(igout,k), k=1,klev)
     436    PRINT *, 'wake-1, dowwdraughts, amdwn(igout,k) ', (k,amdwn(igout,k), k=1,klev)
     437    PRINT *, 'wake-1, dowwdraughts, dtdwn(igout,k) ', (k,dtdwn(igout,k), k=1,klev)
     438    PRINT *, 'wake-1, dowwdraughts, dqdwn(igout,k) ', (k,dqdwn(igout,k), k=1,klev)
     439    PRINT *, 'wake-1, updraughts, amup(igout,k) ', (k,amup(igout,k), k=1,klev)
     440    PRINT *, 'wake-1, updraughts, dta(igout,k) ', (k,dta(igout,k), k=1,klev)
     441    PRINT *, 'wake-1, updraughts, dqa(igout,k) ', (k,dqa(igout,k), k=1,klev)
     442  ENDIF
    381443
    382444  ! 2. - Prognostic part
     
    570632  END DO
    571633
     634  IF (prt_level>=10) THEN
     635    PRINT *, 'wake-2, ptop_provis(igout), ptop(igout) ', ptop_provis(igout), ptop(igout)
     636  ENDIF
     637
    572638
    573639  ! -5/ Determination de ktop et kupper
     
    611677    END DO
    612678  END DO
     679
     680  IF (prt_level>=10) THEN
     681    PRINT *, 'wake-3, ktop(igout), kupper(igout) ', ktop(igout), kupper(igout)
     682  ENDIF
    613683
    614684  ! -5/ Set deltatw & deltaqw to 0 above kupper
     
    753823  END DO
    754824
     825  IF (prt_level>=10) THEN
     826    PRINT *, 'wake-4, sigmaw(igout), cstar(igout), wape(igout) ', &
     827                      sigmaw(igout), cstar(igout), wape(igout)
     828  ENDIF
     829
     830
    755831  ! C -----------------------------------------------------------------
    756832  ! Sub-time-stepping
     
    769845      wk_adv(i) = ok_qx_qw(i) .AND. alpha(i) >= 1.
    770846    END DO
     847    IF (prt_level>=10) THEN
     848      PRINT *, 'wake-4.1, isubstep,wk_adv(igout),cstar(igout),wape(igout) ', &
     849                          isubstep,wk_adv(igout),cstar(igout),wape(igout)
     850    ENDIF
    771851
    772852    ! cc nrlmd   Ajout d'un recalcul de wdens dans le cas d'un entrainement
     
    835915    ! calcul de la difference de vitesse verticale poche - zone non perturbee
    836916    ! IM 060208 differences par rapport au code initial; init. a 0 dp_deltomg
    837     ! IM 060208 et omg sur les niveaux de 1 a klev+1, alors que avant l'on
    838     ! definit
     917    ! IM 060208 et omg sur les niveaux de 1 a klev+1, alors que avant l'on definit
    839918    ! IM 060208 au niveau k=1..?
     919    !JYG 161013 Correction : maintenant omg est dimensionne a klev.
    840920    DO k = 1, klev
    841921      DO i = 1, klon
     
    845925      END DO
    846926    END DO
    847     DO k = 1, klev + 1
     927    DO k = 1, klev
    848928      DO i = 1, klon
    849929        IF (wk_adv(i)) THEN !!! nrlmd
     
    879959      END IF
    880960    END DO
     961
     962    IF (prt_level>=10) THEN
     963      PRINT *, 'wake-4.2, omg(igout,k) ', (k,omg(igout,k), k=1,klev)
     964      PRINT *, 'wake-4.2, omgtop(igout) ', omgtop(igout)
     965    ENDIF
    881966
    882967    ! -----------------
     
    9261011      END DO
    9271012    END DO
     1013!!    print *,'omg(igout,k) ', (k,omg(igout,k),k=1,klev)
    9281014    ! cc nrlmd
    9291015    ! c      DO i=1,klon
     
    9361022
    9371023
    938     DO k = 1, klev + 1
     1024    DO k = 1, klev
    9391025      DO i = 1, klon
    9401026        IF (wk_adv(i)) THEN
     
    9451031    ! --    and its vertical gradient dp_omgbw
    9461032
    947     DO k = 1, klev
     1033    DO k = 1, klev-1
    9481034      DO i = 1, klon
    9491035        IF (wk_adv(i)) THEN
     
    9511037        END IF
    9521038      END DO
     1039    END DO
     1040    DO i = 1, klon
     1041      IF (wk_adv(i)) THEN
     1042          dp_omgbw(i, klev) = 0.
     1043      END IF
    9531044    END DO
    9541045
     
    10301121    END DO
    10311122
     1123    IF (prt_level>=10) THEN
     1124      PRINT *, 'wake-4.3, th1(igout,k) ', (k,th1(igout,k), k=1,klev)
     1125      PRINT *, 'wake-4.3, th2(igout,k) ', (k,th2(igout,k), k=1,klev)
     1126      PRINT *, 'wake-4.3, dth(igout,k) ', (k,dth(igout,k), k=1,klev)
     1127      PRINT *, 'wake-4.3, omgbdth(igout,k) ', (k,omgbdth(igout,k), k=1,klev)
     1128    ENDIF
     1129
    10321130    ! -----------------------------------------------------------------
    1033     DO k = 1, klev
     1131    DO k = 1, klev-1
    10341132      DO i = 1, klon
    10351133        IF (wk_adv(i) .AND. k<=kupper(i)-1) THEN
     
    10431141             (1.-alpha_up(i,k))*omgbdth(i,k)- &
    10441142             alpha_up(i,k+1)*omgbdth(i,k+1))*ppi(i, k)
    1045           ! print*,'d_deltatw=',d_deltatw(i,k)
     1143!           print*,'d_deltatw=', k, d_deltatw(i,k)
    10461144
    10471145          d_deltaqw(i, k) = dtimesub/(ph(i,k)-ph(i,k+1))* &
     
    10501148             (1.-alpha_up(i,k))*omgbdq(i,k)- &
    10511149             alpha_up(i,k+1)*omgbdq(i,k+1))
    1052           ! print*,'d_deltaqw=',d_deltaqw(i,k)
     1150!           print*,'d_deltaqw=', k, d_deltaqw(i,k)
    10531151
    10541152          ! and increment large scale tendencies
     
    10801178    END DO
    10811179    ! ------------------------------------------------------------------
     1180
     1181    IF (prt_level>=10) THEN
     1182      PRINT *, 'wake-4.3, d_deltatw(igout,k) ', (k,d_deltatw(igout,k), k=1,klev)
     1183      PRINT *, 'wake-4.3, d_deltaqw(igout,k) ', (k,d_deltaqw(igout,k), k=1,klev)
     1184    ENDIF
    10821185
    10831186    ! Increment state variables
     
    15051608  END DO ! end sub-timestep loop
    15061609
     1610  IF (prt_level>=10) THEN
     1611    PRINT *, 'wake-5, sigmaw(igout), cstar(igout), wape(igout) ', &
     1612                      sigmaw(igout), cstar(igout), wape(igout)
     1613  ENDIF
    15071614
    15081615
     
    17611868    ! c     $          wape(i),wape2(i),ktopw(i),OK_qx_qw(i)
    17621869  END DO
     1870
     1871  IF (prt_level>=10) THEN
     1872    PRINT *, 'wake-6, wape wape2 ktopw OK_qx_qw =', &
     1873                      wape(igout),wape2(igout),ktopw(igout),OK_qx_qw(igout)
     1874  ENDIF
     1875
    17631876
    17641877  ! -----------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.