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@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))) )