brodeau / aerobulk

AeroBulk is a modern-FORTRAN-based package/library that gathers state-of-the-art aerodynamic bulk formulae algorithms used to compute turbulent air-sea fluxes of momentum, heat and freshwater.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Adiabatic lapse rate

lizkent opened this issue · comments

Hello,

mod_aerobulk_compute.f90, line 135 calculates the moist adiabatic lapse rate to estimate the potential temperature (theta). The calculation of theta from T normally uses the dry adiabatic lapse rate.

!! Approximate potential temperarure at zt meters above sea surface:
zTzt = t_zt + gamma_moist(t_zt, q_zt)*zt

This can be corrected by either

  1. using the dry adiabatic lapse rate
  2. calculating theta directly

(There is a third option , but probably not well suited to your coding setup- in the COARE algorithm the code adjusts deltaT (using the dry adiabatic lapse rate) and uses T in the iteration.)

The other option is to pass theta into the iteration directly. There may also be some 2nd order effects if theta is used in e.g. humidity calculations that are expecting T.

The effect of different calculations of theta on the fluxes is not large, as the height/pressure changes are small. The DALR is about 2x the MALR so the difference in deltaT (the main effect) is about 0.005*dz

Thanks, Liz
(Elizabeth Kent)

Thank you Liz,

I completely agree!
Working on it at the moment and will come back soon with a detailed comment about my fix.

Cheers, /laurent

Hello Liz,

I pushed the fix a while ago but just realized I hadn't discussed it there.

In order to estimate the potential temperature, instead of using the adiabatic lapse rate I now use the function Theta_from_z_P0_T_q() defined in mod_phymbl.f90:

      !!                           ***  FUNCTION Theta_from_z_P0_T_q  ***                                                                                                                                                                               
      !! ** Purpose : Converts absolute temperature at height `pz` to potential temperature,                                        
      !!              using sea-level pressure and specific humidity at heaight `pz`

This function is a successive call to function Pz_from_P0_tz_qz():

      !!                           ***  FUNCTION Pz_from_P0_tz_qz  ***                                                                                                                                                                       
      !! ** Purpose : compute air pressure at height `pz` m above sea level,                                                        
      !!              based barometric equation, from absolute air temperature                                                      
      !!              and specific humidity at height `pz` and sea-level pressure  

and function pot_temp_sclr():

      !!                           ***  FUNCTION pot_temp  ***                                                                      
      !!                                                                                                                            
      !! Poisson equation to obtain potential temperature from absolute temperature, pressure, and                                  
      !! the reference (sea-level) pressure.                                                                                        

Let me know what you think!

Cheers, /laurent