subroutine stndz(p, z, t, theta) ! This routine calculates the standard height z (m) from the ! pressure p (mb). The temperature t (K) and potential temperature ! theta (K) at p are also calculated. ! Modifications: ! 4/28/21 (J. Dostalek) Started this Fortran 90 version !------------------------------------------------------------------------------- implicit none real, intent(in) :: p real, intent(out) :: z real, intent(out) :: t real, intent(out) :: theta real, parameter :: g = 9.80665 real, parameter :: r = 287.05 real, parameter :: cp = 1004.0 real, parameter :: b = 0.0065 real, parameter :: p0 = 1013.25 real, parameter :: t0 = 288.15 real, parameter :: p00 = 1000.0 real, parameter :: p1 = 226.32 real, parameter :: t1 = 216.65 real, parameter :: z1 = 11000.0 real, parameter :: z2 = 20000.0 real, parameter :: b2 = -0.0010 real, parameter :: p2 = 54.75 real :: cap real :: a real :: t2 real :: a2 cap = r/cp a = r*b/g t2 = t1 a2 = r*b2/g if (p >= p1) then z = (t0/b)*(1.0 - (p/p0)**a) t = t0 - b*z elseif (p < p1 .and. p >= p2) then z = z1 + (r*t1/g)*alog(p1/p) t = t1 else z = z2 + (t2/b2)*(1.0 - (p/p2)**a2) t = t2 - b2*(z - z2) end if theta = t*((p00/p)**cap) return end subroutine stndz