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)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.