PageRenderTime 50ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/phys/module_sf_sfcdiags_ruclsm.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 160 lines | 104 code | 22 blank | 34 comment | 4 complexity | 169f10b8082e86b101edff74dba73f84 MD5 | raw file
Possible License(s): AGPL-1.0
  1. !WRF:MODEL_LAYER:PHYSICS
  2. !
  3. MODULE module_sf_sfcdiags_ruclsm
  4. CONTAINS
  5. SUBROUTINE SFCDIAGS_RUCLSM(HFX,QFX,TSK,QSFC,CHS2,CQS2,T2,TH2,Q2, &
  6. T3D,QV3D,RHO3D,P3D, &
  7. PSFC,CP,R_d,ROVCP, &
  8. ids,ide, jds,jde, kds,kde, &
  9. ims,ime, jms,jme, kms,kme, &
  10. its,ite, jts,jte, kts,kte )
  11. !-------------------------------------------------------------------
  12. IMPLICIT NONE
  13. !-------------------------------------------------------------------
  14. INTEGER, INTENT(IN ) :: ids,ide, jds,jde, kds,kde, &
  15. ims,ime, jms,jme, kms,kme, &
  16. its,ite, jts,jte, kts,kte
  17. REAL, DIMENSION( ims:ime, jms:jme ) , &
  18. INTENT(IN) :: HFX, &
  19. QFX, &
  20. TSK, &
  21. QSFC
  22. REAL, DIMENSION( ims:ime, jms:jme ) , &
  23. INTENT(INOUT) :: Q2, &
  24. TH2, &
  25. T2
  26. REAL, DIMENSION( ims:ime, jms:jme ) , &
  27. INTENT(IN) :: PSFC, &
  28. CHS2, &
  29. CQS2
  30. REAL, DIMENSION( ims:ime, kms:kme, jms:jme ) , &
  31. INTENT(IN ) :: QV3D, &
  32. T3D, &
  33. P3D, &
  34. rho3D
  35. REAL, INTENT(IN ) :: CP,R_d,ROVCP
  36. ! LOCAL VARS
  37. INTEGER :: I,J
  38. REAL :: RHO, x2m, qlev1, tempc, qsat, p2m
  39. DO J=jts,jte
  40. DO I=its,ite
  41. ! RHO = PSFC(I,J)/(R_d * TSK(I,J))
  42. RHO = RHO3D(i,1,j)
  43. P2m = PSFC(I,J)*EXP(-0.068283/t3d(i,1,j))
  44. if(CHS2(I,J).lt.1.E-5) then
  45. ! TH2(I,J) = TSK(I,J)*(1.E5/PSFC(I,J))**ROVCP
  46. TH2(I,J) = t3d(i,1,j)*(1.E5/P2m)**ROVCP
  47. else
  48. TH2(I,J) = TSK(I,J)*(1.E5/PSFC(I,J))**ROVCP - HFX(I,J)/(RHO*CP*CHS2(I,J))
  49. !tgs T2(I,J) = TSK(I,J) - HFX(I,J)/(RHO*CP*CHS2(I,J))
  50. endif
  51. !tgs TH2(I,J) = T2(I,J)*(1.E5/PSFC(I,J))**ROVCP
  52. T2(I,J) = TH2(I,J)*(1.E-5*P2m)**ROVCP
  53. !tgs check that T2 values lie in the range between TSK and T at the 1st level
  54. x2m = MAX(MIN(tsk(i,j),t3d(i,1,j)) , t2(i,j))
  55. t2(i,j) = MIN(MAX(tsk(i,j),t3d(i,1,j)) , x2m)
  56. TH2(I,J) = T2(I,J)*(1.E5/P2m)**ROVCP
  57. !tgs check that Q2 values in the lie between QSFC and Q at the 1st level
  58. qlev1 = qv3d(i,1,j)
  59. !tgs saturation check
  60. tempc=t3d(i,1,j)-273.15
  61. if (tempc .le. 0.0) then
  62. ! qsat - mixing ratio
  63. qsat = rsif(p3d(i,1,j), t3d(i,1,j))
  64. else
  65. qsat = rslf(p3d(i,1,j), t3d(i,1,j))
  66. endif
  67. qlev1 = min(qsat, qlev1)
  68. if(CQS2(I,J).lt.1.E-5) then
  69. !tgs - here Q2 is 2-m water vapor mixing ratio
  70. Q2(I,J)=qlev1
  71. else
  72. x2m = QSFC(I,J) - QFX(I,J)/(RHO*CQS2(I,J))
  73. Q2(I,J)=x2m/(1.-x2m)
  74. endif
  75. x2m = MAX(MIN(qsfc(i,j)/(1.-qsfc(i,j)),qlev1) , q2(i,j))
  76. q2(i,j) = MIN(MAX(qsfc(i,j)/(1.-qsfc(i,j)),qlev1) , x2m)
  77. !tgs saturation check
  78. tempc=t2(i,j)-273.15
  79. if (tempc .le. 0.0) then
  80. ! qsat - mixing ratio
  81. qsat = rsif(psfc(i,j), t2(i,j))
  82. else
  83. qsat = rslf(psfc(i,j), t2(i,j))
  84. endif
  85. q2(i,j) = min(qsat, q2(i,j))
  86. ENDDO
  87. ENDDO
  88. END SUBROUTINE SFCDIAGS_RUCLSM
  89. !tgs - saturation functions are from Thompson microphysics scheme
  90. REAL FUNCTION RSLF(P,T)
  91. IMPLICIT NONE
  92. REAL, INTENT(IN):: P, T
  93. REAL:: ESL,X
  94. REAL, PARAMETER:: C0= .611583699E03
  95. REAL, PARAMETER:: C1= .444606896E02
  96. REAL, PARAMETER:: C2= .143177157E01
  97. REAL, PARAMETER:: C3= .264224321E-1
  98. REAL, PARAMETER:: C4= .299291081E-3
  99. REAL, PARAMETER:: C5= .203154182E-5
  100. REAL, PARAMETER:: C6= .702620698E-8
  101. REAL, PARAMETER:: C7= .379534310E-11
  102. REAL, PARAMETER:: C8=-.321582393E-13
  103. X=MAX(-80.,T-273.16)
  104. ! ESL=612.2*EXP(17.67*X/(T-29.65))
  105. ESL=C0+X*(C1+X*(C2+X*(C3+X*(C4+X*(C5+X*(C6+X*(C7+X*C8)))))))
  106. RSLF=.622*ESL/(P-ESL)
  107. END FUNCTION RSLF
  108. !
  109. ! ALTERNATIVE
  110. ! ; Source: Murphy and Koop, Review of the vapour pressure of ice and
  111. ! supercooled water for atmospheric applications, Q. J. R.
  112. ! Meteorol. Soc (2005), 131, pp. 1539-1565.
  113. ! Psat = EXP(54.842763 - 6763.22 / T - 4.210 * ALOG(T) + 0.000367 * T
  114. ! + TANH(0.0415 * (T - 218.8)) * (53.878 - 1331.22
  115. ! / T - 9.44523 * ALOG(T) + 0.014025 * T))
  116. !
  117. !+---+-----------------------------------------------------------------+
  118. ! THIS FUNCTION CALCULATES THE ICE SATURATION VAPOR MIXING RATIO AS A
  119. ! FUNCTION OF TEMPERATURE AND PRESSURE
  120. !
  121. REAL FUNCTION RSIF(P,T)
  122. IMPLICIT NONE
  123. REAL, INTENT(IN):: P, T
  124. REAL:: ESI,X
  125. REAL, PARAMETER:: C0= .609868993E03
  126. REAL, PARAMETER:: C1= .499320233E02
  127. REAL, PARAMETER:: C2= .184672631E01
  128. REAL, PARAMETER:: C3= .402737184E-1
  129. REAL, PARAMETER:: C4= .565392987E-3
  130. REAL, PARAMETER:: C5= .521693933E-5
  131. REAL, PARAMETER:: C6= .307839583E-7
  132. REAL, PARAMETER:: C7= .105785160E-9
  133. REAL, PARAMETER:: C8= .161444444E-12
  134. X=MAX(-80.,T-273.16)
  135. ESI=C0+X*(C1+X*(C2+X*(C3+X*(C4+X*(C5+X*(C6+X*(C7+X*C8)))))))
  136. RSIF=.622*ESI/(P-ESI)
  137. END FUNCTION RSIF
  138. END MODULE module_sf_sfcdiags_ruclsm