Changeset 9ca6e38 in flexpart.git for src/calcmatrix.f90


Ignore:
Timestamp:
Mar 15, 2021, 9:48:30 AM (3 years ago)
Author:
Espen Sollum ATMOS <eso@…>
Branches:
GFS_025, dev
Children:
aa939a9
Parents:
467460a
Message:

minor edits

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/calcmatrix.f90

    r467460a r9ca6e38  
    6767
    6868  phconv(1) = psconv
    69   ! Emanuel subroutine needs pressure in hPa, therefore convert all pressures
    70   do kuvz = 2,nuvz
    71     k = kuvz-1
    72     if (metdata_format.eq.GRIBFILE_CENTRE_ECMWF) then
     69! Emanuel subroutine needs pressure in hPa, therefore convert all pressures
     70  if (metdata_format.eq.GRIBFILE_CENTRE_ECMWF) then
     71    do kuvz = 2,nuvz
     72      k = kuvz-1
    7373      pconv(k) = (akz(kuvz) + bkz(kuvz)*psconv)
    7474      phconv(kuvz) = (akm(kuvz) + bkm(kuvz)*psconv)
    75     else
    76       phconv(kuvz) =  0.5*(pconv(kuvz)+pconv(k))
    77     endif
    78     dpr(k) = phconv(k) - phconv(kuvz)
    79     qsconv(k) = f_qvsat( pconv(k), tconv(k) )
     75      dpr(k) = phconv(k) - phconv(kuvz)
     76      qsconv(k) = f_qvsat( pconv(k), tconv(k) )
     77    end do
     78  else
     79! JMA / SH Bugfix phconv was set in loop with access to undefined pconv(nuvz)
     80    phconv(2:nuvz-1) = 0.5*(pconv(2:nuvz-1)+pconv(1:nuvz-2))
     81    phconv(nuvz) = pconv(nuvz-1)
     82    dpr(1:nuvz-1) = phconv(1:nuvz-1)-phconv(2:nuvz)
    8083
    81   ! initialize mass fractions
    82     do kk=1,nconvlev
    83       fmassfrac(k,kk)=0.
     84    do k = 1,nuvz-1
     85      qsconv(k) = f_qvsat( pconv(k), tconv(k) )
    8486    end do
    85   end do
    86 
     87  end if
     88   
     89! initialize mass fractions
     90  fmassfrac(1:nuvz-1,1:nconvlev)=0.0
    8791
    8892  !note that Emanuel says it is important
     
    9397  !******************
    9498
    95     cbmfold = cbmf
    96   ! Convert pressures to hPa, as required by Emanuel scheme
    97   !********************************************************
     99  cbmfold = cbmf
     100! Convert pressures to hPa, as required by Emanuel scheme
     101!********************************************************
    98102!!$    do k=1,nconvlev     !old
    99     do k=1,nconvlev+1      !bugfix
    100       pconv_hpa(k)=pconv(k)/100.
    101       phconv_hpa(k)=phconv(k)/100.
     103  do k=1,nconvlev+1      !bugfix
     104    pconv_hpa(k)=pconv(k)/100.
     105    phconv_hpa(k)=phconv(k)/100.
     106  end do
     107  phconv_hpa(nconvlev+1)=phconv(nconvlev+1)/100.
     108  call convect(nconvlevmax, nconvlev, delt, iflag, &
     109       precip, wd, tprime, qprime, cbmf)
     110
     111! do not update fmassfrac and cloudbase massflux
     112! if no convection takes place or
     113! if a CFL criterion is violated in convect43c.f
     114  if (iflag .ne. 1 .and. iflag .ne. 4) then
     115    cbmf=cbmfold
     116    goto 200
     117  endif
     118
     119! do not update fmassfrac and cloudbase massflux
     120! if the old and the new cloud base mass
     121! fluxes are zero
     122  if (cbmf.le.0..and.cbmfold.le.0.) then
     123    cbmf=cbmfold
     124    goto 200
     125  endif
     126
     127! Update fmassfrac
     128! account for mass displaced from level k to level k
     129
     130  lconv = .true.
     131  do k=1,nconvtop
     132    rlevmass = dpr(k)/ga
     133    summe = 0.
     134    do kk=1,nconvtop
     135      fmassfrac(k,kk) = delt*fmass(k,kk)
     136      summe = summe + fmassfrac(k,kk)
    102137    end do
    103     phconv_hpa(nconvlev+1)=phconv(nconvlev+1)/100.
    104     call convect(nconvlevmax, nconvlev, delt, iflag, &
    105          precip, wd, tprime, qprime, cbmf)
     138    fmassfrac(k,k)=fmassfrac(k,k) + rlevmass - summe
     139  end do
    106140
    107   ! do not update fmassfrac and cloudbase massflux
    108   ! if no convection takes place or
    109   ! if a CFL criterion is violated in convect43c.f
    110    if (iflag .ne. 1 .and. iflag .ne. 4) then
    111      cbmf=cbmfold
    112      goto 200
    113    endif
    114 
    115   ! do not update fmassfrac and cloudbase massflux
    116   ! if the old and the new cloud base mass
    117   ! fluxes are zero
    118    if (cbmf.le.0..and.cbmfold.le.0.) then
    119      cbmf=cbmfold
    120      goto 200
    121    endif
    122 
    123   ! Update fmassfrac
    124   ! account for mass displaced from level k to level k
    125 
    126    lconv = .true.
    127     do k=1,nconvtop
    128       rlevmass = dpr(k)/ga
    129       summe = 0.
    130       do kk=1,nconvtop
    131         fmassfrac(k,kk) = delt*fmass(k,kk)
    132         summe = summe + fmassfrac(k,kk)
    133       end do
    134       fmassfrac(k,k)=fmassfrac(k,k) + rlevmass - summe
    135     end do
    136 
    137 200   continue
     141200 continue
    138142
    139143end subroutine calcmatrix
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG