Ignore:
Timestamp:
Feb 6, 2019, 2:06:01 PM (6 years ago)
Author:
mvals
Message:

Mars GCM:

  • follow-up of the last change in rocketduststorm_mod.F90: corrections in vector definitions

MV

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/rocketduststorm_mod.F90

    r2090 r2091  
    9292      REAL zdtsw1(ngrid,nlayer)    ! (K/s) storm
    9393      REAL zt(ngrid,nlayer)        ! actual temperature at mid-layer (K)
    94       REAL zdtvert(nlayer)   ! dT/dz , lapse rate
    95       REAL ztlev(nlayer)     ! temperature at intermediate levels l+1/2 without last level
     94      REAL zdtvert(ngrid,nlayer)   ! dT/dz , lapse rate
     95      REAL ztlev(ngrid,nlayer)     ! temperature at intermediate levels l+1/2 without last level
    9696
    9797      REAL zdtlw1_lev(nlayer),zdtsw1_lev(nlayer) ! rad. heating rate at intermediate levels l+1/2 for stormdust
     
    193193      wqmass(:,:)=0.
    194194      wqnumber(:,:)=0.
     195      zdtvert(:,:)=0.
    195196      lapserate(:,:)=0.
    196197      deltahr(:,:)=0.
     
    251252        !! gradient at boundaries of each layer, start from surface
    252253        DO ig=1,ngrid
    253           zdtvert(1)=0. !This is the env. lapse rate
    254           DO l=1,nlayer-1
    255             zdtvert(l+1)=(zt(ig,l+1)-zt(ig,l))/(pzlay(ig,l+1)-pzlay(ig,l))
    256             lapserate(ig,l+1)=zdtvert(l+1) !for diagnosing
    257           ENDDO
    258      
    259           ! computing heating rates gradient at boundraies of each layer
    260           ! start from surface
    261           zdtlw1_lev(1)=0.
    262           zdtsw1_lev(1)=0.
    263           zdtlw_lev(1)=0.
    264           zdtsw_lev(1)=0.
    265           ztlev(1)=zt(ig,1)
    266 
    267           DO l=1,nlayer-1
    268             ! Calculation for the dust storm fraction
    269             zdtlw1_lev(l+1)=(zdtlw1(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+ &
    270                          zdtlw1(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /  &
    271                             (pzlay(ig,l+1)-pzlay(ig,l))
     254          IF (storm(ig)) THEN
     255
     256            scheme(ig)=2
     257            !! This is the env. lapse rate
     258            zdtvert(ig,1)=0.
     259            DO l=1,nlayer-1
     260              zdtvert(ig,l+1)=(zt(ig,l+1)-zt(ig,l))/(pzlay(ig,l+1)-pzlay(ig,l))
     261              lapserate(ig,l+1)=zdtvert(ig,l+1)
     262            ENDDO
     263     
     264            !! computing heating rates gradient at boundraies of each layer
     265            !! start from surface
     266            zdtlw1_lev(1)=0.
     267            zdtsw1_lev(1)=0.
     268            zdtlw_lev(1)=0.
     269            zdtsw_lev(1)=0.
     270            ztlev(ig,1)=zt(ig,1)
     271
     272            DO l=1,nlayer-1
     273              !! Calculation for the dust storm fraction
     274              zdtlw1_lev(l+1)=(zdtlw1(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+ &
     275                           zdtlw1(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /  &
     276                              (pzlay(ig,l+1)-pzlay(ig,l))
     277           
     278              zdtsw1_lev(l+1)=(zdtsw1(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+ &
     279                           zdtsw1(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /  &
     280                              (pzlay(ig,l+1)-pzlay(ig,l))
     281              !! Calculation for the background dust fraction
     282              zdtlw_lev(l+1)=(pdtlw(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+   &
     283                           pdtlw(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /   &
     284                              (pzlay(ig,l+1)-pzlay(ig,l))
    272285           
    273             zdtsw1_lev(l+1)=(zdtsw1(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+ &
    274                          zdtsw1(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /  &
    275                             (pzlay(ig,l+1)-pzlay(ig,l))
    276             !! Calculation for the background dust fraction
    277             zdtlw_lev(l+1)=(pdtlw(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+   &
    278                          pdtlw(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /   &
    279                             (pzlay(ig,l+1)-pzlay(ig,l))
     286              zdtsw_lev(l+1)=(pdtsw(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+   &
     287                           pdtsw(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /   &
     288                              (pzlay(ig,l+1)-pzlay(ig,l))
    280289           
    281             zdtsw_lev(l+1)=(pdtsw(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+   &
    282                          pdtsw(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /   &
    283                             (pzlay(ig,l+1)-pzlay(ig,l))
    284            
    285             ztlev(l+1)=(zt(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+          &
    286                          zt(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /      &
    287                             (pzlay(ig,l+1)-pzlay(ig,l))
    288           ENDDO ! DO l=1,nlayer-1
    289         ENDDO ! DO ig=1,ngrid     
    290 
    291         !! **********************************************************************
    292         !! 2.3 Calculation of the vertical velocity : extra heating
    293         !! balanced by adiabatic cooling
    294         DO ig=1,ngrid
    295           IF (storm(ig)) THEN       
    296             scheme(ig)=2         
     290              ztlev(ig,l+1)=(zt(ig,l)*(pzlay(ig,l+1)-pzlev(ig,l+1))+          &
     291                           zt(ig,l+1)*(pzlev(ig,l+1)-pzlay(ig,l)))  /      &
     292                              (pzlay(ig,l+1)-pzlay(ig,l))
     293            ENDDO ! DO l=1,nlayer-1   
     294
     295            !! **********************************************************************
     296            !! 2.3 Calculation of the vertical velocity : extra heating
     297            !! balanced by adiabatic cooling
     298           
    297299            DO l=1,nlayer
    298300              deltahr(ig,l)=(zdtlw1_lev(l)+zdtsw1_lev(l))  &
    299301                                          -(zdtlw_lev(l)+zdtsw_lev(l))
    300302              wrad(ig,l)=-deltahr(ig,l)/(g/cpp+   &
    301                                          max(zdtvert(l),-0.99*g/cpp))       
     303                                         max(zdtvert(ig,l),-0.99*g/cpp))       
    302304              !! Limit vertical wind in case of lapse rate close to adiabatic
    303305              wrad(ig,l)=max(wrad(ig,l),-wmax)
    304306              wrad(ig,l)=min(wrad(ig,l),wmax)
    305307            ENDDO
     308
    306309          ENDIF ! IF (storm(ig))
    307310        ENDDO ! DO ig=1,ngrid
     
    337340            !! Mass flux in kg/m2
    338341            DO l=1,nlayer
    339                w(ig,l)=wrad(ig,l)*(pplev(ig,l)/(r*ztlev(l)))*ptimestep
     342               w(ig,l)=wrad(ig,l)*(pplev(ig,l)/(r*ztlev(ig,l)))*ptimestep
    340343            ENDDO
    341344           
Note: See TracChangeset for help on using the changeset viewer.