[RegCNET] calculation of Monin–Obukhov Length

flyks flyyks at gmail.com
Fri Nov 11 05:41:35 CET 2011


Hi Travis,

Thanks for your reply. I find that equation, but where does that
empirical formula for temperature at surface layer (th10) come from?
Maybe it needs some iterations in the calculation? Do you know any
other method for calculating L?

HAN

2011/11/10 Travis O'Brien <travis.obrien at gmail.com>:
> Hello Flyks,
>
> The Obukhov length scale comes about from non-dimensionalizing the
> turbulence kinetic energy budget equation.  Stull (2009; pg 181) defines it
> in equation 5.7c.  The length scale in the Holtslag code is defined
> identically. I believe the dsign(...) part in the denominator is a numerical
> trick to avoid dividing by zero (or overflow) when the buoyancy flux becomes
> too small.
>
> Regards,
> -Travis-
>
> On Thu, Nov 10, 2011 at 2:54 PM, flyks <flyyks at gmail.com> wrote:
>>
>> Dear all,
>>
>> I want to know the reference for calculating Monin–Obukhov Length in
>> RegCM. Thank you.
>>
>> Following is code taken from PBL module,
>>
>>         sh10 = qx(i,kx)/(qx(i,kx)+1)
>> c "virtual" potential temperature
>>         if (sflux(i).ge. 0.) then
>>            th10 = thvx(i,kx)
>>         else
>> c----   first approximation for obhukov length
>>            oblen=-0.5*(thx(i,kx)+tg(i))
>>     &           *(1.0+ep1*sh10)*ust(i)**3
>>     &      /(g*karman*(sflux(i)+dsign(1.d-10,sflux(i))))
>>            if (oblen.ge.za(i,kx)) then
>>              th10=thvx(i,kx)+sflux(i)/(karman*ust(i))
>>     &            *(dlog(za(i,kx)/10.)+5./oblen*(za(i,kx)-10.))
>>            else if (oblen.lt.za(i,kx).and.oblen.gt.10.) then
>>              th10=thvx(i,kx)+sflux(i)/(karman*ust(i))
>>     &            *(dlog(oblen/10.)+5./oblen*(oblen-10.)
>>     &                   +6*dlog(za(i,kx)/oblen))
>>            else if (oblen.le.10.) then
>>              th10=thvx(i,kx)+sflux(i)/(karman*ust(i))
>>     &            *6*dlog(za(i,kx)/10.)
>>            end if
>>            th10=max(th10,tg(i))
>>         end if
>> c       compute obukhov length
>>         oblen=-th10*ust(i)**3
>>     &         /( g*karman*(sflux(i)+dsign(1.d-10,sflux(i))) )
>
>


More information about the RegCNET mailing list