<p><b>laura@ucar.edu</b> 2010-11-18 16:08:48 -0700 (Thu, 18 Nov 2010)</p><p>miscellaneous modifications<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_physics/src/core_physics/module_driver_microphysics.F
===================================================================
--- branches/atmos_physics/src/core_physics/module_driver_microphysics.F        2010-11-18 23:04:38 UTC (rev 627)
+++ branches/atmos_physics/src/core_physics/module_driver_microphysics.F        2010-11-18 23:08:48 UTC (rev 628)
@@ -162,7 +162,7 @@
!... initialization of soundings for non-hydrostatic or hydrostatic dynamical cores.
#ifdef non_hydrostatic_core
- call microphysics_from_MPAS(state,diag,mesh)
+ call microphysics_from_MPAS(mesh,state,diag)
#elif hydrostatic_core
call microphysics_from_MPAS(state)
#endif
@@ -220,7 +220,7 @@
! dynamics grid:
#ifdef non_hydrostatic_core
- call microphysics_to_MPAS(state,diag,tend,mesh,itimestep)
+ call microphysics_to_MPAS(mesh,state,diag,tend,itimestep)
#elif hydrostatic_core
call microphysics_to_MPAS(state,tend)
#endif
Modified: branches/atmos_physics/src/core_physics/module_physics_interface_nhyd.F
===================================================================
--- branches/atmos_physics/src/core_physics/module_physics_interface_nhyd.F        2010-11-18 23:04:38 UTC (rev 627)
+++ branches/atmos_physics/src/core_physics/module_physics_interface_nhyd.F        2010-11-18 23:08:48 UTC (rev 628)
@@ -9,88 +9,19 @@
implicit none
private
- public:: nhyd_copy_state_physics, &
- compute_relhum, &
- MPAS_to_physics, &
+ public:: MPAS_to_physics, &
microphysics_from_MPAS, &
microphysics_to_MPAS
contains
!=============================================================================================
- subroutine nhyd_copy_state_physics(src,dest)
+ subroutine MPAS_to_physics(mesh,state,diag)
!=============================================================================================
!input variables:
- type(state_type),intent(in):: src
-!inout variables:
- type(state_type),intent(inout):: dest
-
-!---------------------------------------------------------------------------------------------
-
-!cloud microphysics:
- dest%rainnc%array = src%rainnc%array
- dest%rainncv%array = src%rainncv%array
- dest%snownc%array = src%snownc%array
- dest%snowncv%array = src%snowncv%array
- dest%graupelnc%array = src%graupelnc%array
- dest%graupelncv%array = src%graupelncv%array
- dest%sr%array = src%sr%array
-
-!convection:
- dest%nca%array = src%nca%array
- dest%cubot%array = src%cubot%array
- dest%cutop%array = src%cutop%array
- dest%rainc%array = src%rainc%array
- dest%raincv%array = src%raincv%array
- dest%rthcuten%array = src%rthcuten%array
- dest%rqvcuten%array = src%rqvcuten%array
- dest%rqccuten%array = src%rqccuten%array
- dest%rqrcuten%array = src%rqrcuten%array
- dest%rqicuten%array = src%rqicuten%array
- dest%rqscuten%array = src%rqscuten%array
- dest%w0avg%array = src%w0avg%array
-
-!pbl:
- dest%rublten%array = src%rublten%array
- dest%rvblten%array = src%rvblten%array
- dest%rthblten%array = src%rthblten%array
- dest%rqvblten%array = src%rqvblten%array
- dest%rqcblten%array = src%rqcblten%array
- dest%rqiblten%array = src%rqiblten%array
-
-!surface layer:
- dest%flhc%array = src%flhc%array
- dest%flqc%array = src%flqc%array
- dest%hfx%array = src%hfx%array
- dest%lh%array = src%lh%array
- dest%mavail%array = src%mavail%array
- dest%mol%array = src%mol%array
- dest%pblh%array = src%pblh%array
- dest%q2%array = src%q2%array
- dest%qfx%array = src%qfx%array
- dest%qsfc%array = src%qsfc%array
- dest%regime%array = src%regime%array
- dest%rmol%array = src%rmol%array
- dest%t2%array = src%t2%array
- dest%tsk%array = src%tsk%array
- dest%th2%array = src%th2%array
- dest%u10%array = src%u10%array
- dest%ust%array = src%ust%array
- dest%ustm%array = src%ustm%array
- dest%v10%array = src%v10%array
- dest%xland%array = src%xland%array
- dest%znt%array = src%znt%array
-
- end subroutine nhyd_copy_state_physics
-
-!=============================================================================================
- subroutine MPAS_to_physics(grid,vars,diag)
-!=============================================================================================
-
-!input variables:
- type(mesh_type) ,intent(in):: grid
- type(state_type),intent(in):: vars
+ type(mesh_type) ,intent(in):: mesh
+ type(state_type),intent(in):: state
type(diag_type) ,intent(in):: diag
!local variables:
@@ -106,21 +37,21 @@
write(0,*) '--- enter subroutine MPAS_to_phys:'
!initialization:
- zgrid => grid% zgrid % array
- zz => grid % zz % array
+ zgrid => mesh % zgrid % array
+ zz => mesh % zz % array
exner => diag % exner % array
pressure_b => diag % pressure_base % array
pressure_p => diag % pressure_p % array
rtheta_p => diag % rtheta_p % array
rtheta_b => diag % rtheta_base % array
- rho => vars % rho % array
- theta => vars % theta % array
- qv => vars % scalars % array(vars%index_qv,:,:)
+ rho => state % rho % array
+ theta => state % theta % array
+ qv => state % scalars % array(state%index_qv,:,:)
- w => vars % w % array
- u => diag % uReconstructZonal % array
- v => diag % uReconstructMeridional % array
+ w => state % w % array
+ u => diag % uReconstructZonal % array
+ v => diag % uReconstructMeridional % array
!copy sounding variables from the geodesic grid to the wrf-physics grid:
do j = jts, jtf
@@ -136,11 +67,11 @@
t_p(i,k,j) = theta(k,i) * exner(k,i) / (1. + R_v/R_d * qv(k,i))
pi_p(i,k,j) = exner(k,i)
- pres_p(i,k,j) = pressure_p(k,i) + pressure_p(k,i)
+ pres_p(i,k,j) = pressure_p(k,i) + pressure_b(k,i)
dz_p(i,k,j) = zgrid(k+1,i)-zgrid(k,i)
- qv_p(i,k,j) = max(0.,vars % scalars % array(vars%index_qv,k,i))
+ qv_p(i,k,j) = max(0.,state % scalars % array(state%index_qv,k,i))
enddo
enddo
@@ -153,13 +84,13 @@
end subroutine MPAS_to_physics
!=============================================================================================
- subroutine microphysics_from_MPAS(vars,diag,grid)
+ subroutine microphysics_from_MPAS(mesh,state,diag)
!=============================================================================================
!input variables:
- type(state_type),intent(in):: vars
+ type(state_type),intent(in):: state
type(diag_type) ,intent(in):: diag
- type(mesh_type) ,intent(in):: grid
+ type(mesh_type) ,intent(in):: mesh
!local variables:
integer:: i,k,j
@@ -179,20 +110,20 @@
write(0,*)
write(0,*) '--- enter subroutine microphysics_nhyd_to_phys:'
- zgrid => grid% zgrid % array
+ zgrid => mesh % zgrid % array
+ zz => mesh % zz % array
- zz => grid % zz % array
exner => diag % exner % array
pressure_b => diag % pressure_base % array
+ pressure_p => diag % pressure_p % array
rtheta_p => diag % rtheta_p % array
rtheta_b => diag % rtheta_base % array
- rho => vars % rho % array
- theta => vars % theta % array
+ rho => state % rho % array
+ theta => state % theta % array
rh => diag % rh % array
- pressure_p => diag % pressure_p % array
- qv => vars % scalars % array(vars%index_qv,:,:)
+ qv => state % scalars % array(state%index_qv,:,:)
!copy sounding variables from the geodesic grid to the wrf-physics grid:
do j = jts, jtf
@@ -207,12 +138,12 @@
z_p(i,k,j) = 0.5*(zgrid(k+1,i) + zgrid(k,i))
dz_p(i,k,j) = zgrid(k+1,i) - zgrid(k,i)
-! qv_p(i,k,j) = max(0.,vars % scalars % array(vars%index_qv,k,i))
-! qc_p(i,k,j) = max(0.,vars % scalars % array(vars%index_qc,k,i))
-! qr_p(i,k,j) = max(0.,vars % scalars % array(vars%index_qr,k,i))
- qv_p(i,k,j) = vars % scalars % array(vars%index_qv,k,i)
- qc_p(i,k,j) = vars % scalars % array(vars%index_qc,k,i)
- qr_p(i,k,j) = vars % scalars % array(vars%index_qr,k,i)
+! qv_p(i,k,j) = max(0.,state % scalars % array(state%index_qv,k,i))
+! qc_p(i,k,j) = max(0.,state % scalars % array(state%index_qc,k,i))
+! qr_p(i,k,j) = max(0.,state % scalars % array(state%index_qr,k,i))
+ qv_p(i,k,j) = state % scalars % array(state%index_qv,k,i)
+ qc_p(i,k,j) = state % scalars % array(state%index_qc,k,i)
+ qr_p(i,k,j) = state % scalars % array(state%index_qr,k,i)
enddo
enddo
enddo
@@ -230,15 +161,15 @@
! qi_p(i,k,j) = max(0.,vars % scalars % array(vars%index_qi,k,i))
! qs_p(i,k,j) = max(0.,vars % scalars % array(vars%index_qs,k,i))
! qg_p(i,k,j) = max(0.,vars % scalars % array(vars%index_qg,k,i))
- qi_p(i,k,j) = vars % scalars % array(vars%index_qi,k,i)
- qs_p(i,k,j) = vars % scalars % array(vars%index_qs,k,i)
- qg_p(i,k,j) = vars % scalars % array(vars%index_qg,k,i)
+ qi_p(i,k,j) = state % scalars % array(state%index_qi,k,i)
+ qs_p(i,k,j) = state % scalars % array(state%index_qs,k,i)
+ qg_p(i,k,j) = state % scalars % array(state%index_qg,k,i)
!number concentrations:
-! qnr_p(i,k,j) = max(0., vars % scalars % array(vars%index_qnr,k,i))
-! qni_p(i,k,j) = max(0., vars % scalars % array(vars%index_qni,k,i))
- qnr_p(i,k,j) = vars % scalars % array(vars%index_qnr,k,i)
- qni_p(i,k,j) = vars % scalars % array(vars%index_qni,k,i)
+! qnr_p(i,k,j) = max(0., vars % scalars % array(state%index_qnr,k,i))
+! qni_p(i,k,j) = max(0., vars % scalars % array(state%index_qni,k,i))
+ qnr_p(i,k,j) = state % scalars % array(state%index_qnr,k,i)
+ qni_p(i,k,j) = state % scalars % array(state%index_qni,k,i)
enddo
enddo
@@ -254,15 +185,15 @@
end subroutine microphysics_from_MPAS
!=============================================================================================
- subroutine microphysics_to_MPAS(vars, diag, tend, grid, itimestep)
+ subroutine microphysics_to_MPAS(mesh,state,diag,tend,itimestep)
!=============================================================================================
!input variables:
integer,intent(in):: itimestep
- type(mesh_type),intent(in):: grid
+ type(mesh_type),intent(in):: mesh
!output variables:
- type(state_type),intent(inout):: vars
+ type(state_type),intent(inout):: state
type(diag_type),intent(inout):: diag
type(tend_type),intent(inout):: tend
@@ -284,16 +215,16 @@
write(0,*) '--- enter subroutine microphysics_to_MPAS:'
!initialization:
- zz => grid % zz % array
- exner => diag % exner % array
- exner_b => diag % exner_base % array
- pressure_p => diag % pressure_p % array
+ zz => mesh % zz % array
+ exner => diag % exner % array
+ exner_b => diag % exner_base % array
pressure_b => diag % pressure_base % array
- rtheta_p => diag % rtheta_p % array
- rtheta_b => diag % rtheta_base % array
+ pressure_p => diag % pressure_p % array
+ rtheta_p => diag % rtheta_p % array
+ rtheta_b => diag % rtheta_base % array
- rho => vars % rho % array
- theta => vars % theta % array
+ rho => state % rho % array
+ theta => state % theta % array
rt_diabatic_tend => tend % rt_diabatic_tend % array
@@ -315,14 +246,14 @@
!exner function:
exner(k,i) = (zz(k,i)*(R_d/P0)*(rtheta_p(k,i)+rtheta_b(k,i)))**rcv
- !perturbation pressure:
+ !pertubation pressure:
pressure_p(k,i) = zz(k,i)*R_d*(exner(k,i)*rtheta_p(k,i) &
+ (exner(k,i)-exner_b(k,i))*rtheta_b(k,i))
!mass mixing ratios:
- vars % scalars % array(vars%index_qv,k,i) = qv_p(i,k,j)
- vars % scalars % array(vars%index_qc,k,i) = qc_p(i,k,j)
- vars % scalars % array(vars%index_qr,k,i) = qr_p(i,k,j)
+ state % scalars % array(state%index_qv,k,i) = qv_p(i,k,j)
+ state % scalars % array(state%index_qc,k,i) = qc_p(i,k,j)
+ state % scalars % array(state%index_qr,k,i) = qr_p(i,k,j)
enddo
enddo
@@ -339,13 +270,13 @@
do i = its, itf
!mass mixing ratios:
- vars % scalars % array(vars%index_qi,k,i) = qi_p(i,k,j)
- vars % scalars % array(vars%index_qs,k,i) = qs_p(i,k,j)
- vars % scalars % array(vars%index_qg,k,i) = qg_p(i,k,j)
+ state % scalars % array(state%index_qi,k,i) = qi_p(i,k,j)
+ state % scalars % array(state%index_qs,k,i) = qs_p(i,k,j)
+ state % scalars % array(state%index_qg,k,i) = qg_p(i,k,j)
!number concentrations:
- vars % scalars % array(vars%index_qnr,k,i) = qnr_p(i,k,j)
- vars % scalars % array(vars%index_qni,k,i) = qni_p(i,k,j)
+ state % scalars % array(state%index_qnr,k,i) = qnr_p(i,k,j)
+ state % scalars % array(state%index_qni,k,i) = qni_p(i,k,j)
enddo
enddo
@@ -360,111 +291,6 @@
end subroutine microphysics_to_MPAS
-!--------------------------------------------------------------------------------------------------
- subroutine compute_relhum(grid,diag,vars)
-!--------------------------------------------------------------------------------------------------
-
- type(state_type),intent(in) :: vars
- type(diag_type),intent(inout) :: diag
- type(mesh_type),intent(in) :: grid
-
- real,dimension(:,:),pointer :: theta,pressure_p
- real,dimension(:,:),pointer :: pressure_b,exner
- real,dimension(:,:),pointer :: qv,rh
-
- integer:: iCell,k
- real(kind=RKIND):: tt,pres,qsat
-
- exner => diag % exner % array
- pressure_b => diag % pressure_base % array
-
- theta => vars % theta % array
- pressure_p => diag % pressure_p % array
- rh => diag % rh % array
- qv => vars % scalars % array(vars%index_qv,:,:)
-
- do iCell = 1, grid % nCells
- do k = 1, grid % nVertLevels
- pres = pressure_b(k,iCell) + pressure_p(k,iCell)
- tt = theta(k,iCell)/(1.+1.61*qv(k,iCell))
- tt = tt*exner(k,iCell)
- if(tt .gt. 273.15) then
- qsat = rslf(pres,tt)
- else
- qsat = rsif(pres,tt)
- endif
- rh(k,iCell) = qv(k,iCell)/qsat
- enddo
- enddo
- 201 format(2i6,8(1x,e15.8))
-
- end subroutine compute_relhum
-
-!+---+-----------------------------------------------------------------+
-! THIS FUNCTION CALCULATES THE LIQUID SATURATION VAPOR MIXING RATIO AS
-! A FUNCTION OF TEMPERATURE AND PRESSURE
-!
- REAL FUNCTION RSLF(P,T)
-
- IMPLICIT NONE
- REAL, INTENT(IN):: P, T
- REAL:: ESL,X
- REAL, PARAMETER:: C0= .611583699E03
- REAL, PARAMETER:: C1= .444606896E02
- REAL, PARAMETER:: C2= .143177157E01
- REAL, PARAMETER:: C3= .264224321E-1
- REAL, PARAMETER:: C4= .299291081E-3
- REAL, PARAMETER:: C5= .203154182E-5
- REAL, PARAMETER:: C6= .702620698E-8
- REAL, PARAMETER:: C7= .379534310E-11
- REAL, PARAMETER:: C8=-.321582393E-13
-
- X=MAX(-80.,T-273.16)
-
-! ESL=612.2*EXP(17.67*X/(T-29.65))
- ESL=C0+X*(C1+X*(C2+X*(C3+X*(C4+X*(C5+X*(C6+X*(C7+X*C8)))))))
- RSLF=.622*ESL/(P-ESL)
-
-! ALTERNATIVE
-! ; Source: Murphy and Koop, Review of the vapour pressure of ice and
-! supercooled water for atmospheric applications, Q. J. R.
-! Meteorol. Soc (2005), 131, pp. 1539-1565.
-! ESL = EXP(54.842763 - 6763.22 / T - 4.210 * ALOG(T) + 0.000367 * T
-! + TANH(0.0415 * (T - 218.8)) * (53.878 - 1331.22
-! / T - 9.44523 * ALOG(T) + 0.014025 * T))
-
- END FUNCTION RSLF
-!+---+-----------------------------------------------------------------+
-! THIS FUNCTION CALCULATES THE ICE SATURATION VAPOR MIXING RATIO AS A
-! FUNCTION OF TEMPERATURE AND PRESSURE
-!
- REAL FUNCTION RSIF(P,T)
-
- IMPLICIT NONE
- REAL, INTENT(IN):: P, T
- REAL:: ESI,X
- REAL, PARAMETER:: C0= .609868993E03
- REAL, PARAMETER:: C1= .499320233E02
- REAL, PARAMETER:: C2= .184672631E01
- REAL, PARAMETER:: C3= .402737184E-1
- REAL, PARAMETER:: C4= .565392987E-3
- REAL, PARAMETER:: C5= .521693933E-5
- REAL, PARAMETER:: C6= .307839583E-7
- REAL, PARAMETER:: C7= .105785160E-9
- REAL, PARAMETER:: C8= .161444444E-12
-
- X=MAX(-80.,T-273.16)
- ESI=C0+X*(C1+X*(C2+X*(C3+X*(C4+X*(C5+X*(C6+X*(C7+X*C8)))))))
- RSIF=.622*ESI/(P-ESI)
-
-! ALTERNATIVE
-! ; Source: Murphy and Koop, Review of the vapour pressure of ice and
-! supercooled water for atmospheric applications, Q. J. R.
-! Meteorol. Soc (2005), 131, pp. 1539-1565.
-! ESI = EXP(9.550426 - 5723.265/T + 3.53068*ALOG(T) - 0.00728332*T)
-
- END FUNCTION RSIF
-
!=============================================================================================
end module module_physics_interface_nhyd
!=============================================================================================
Modified: branches/atmos_physics/src/core_physics/module_physics_todynamics.F
===================================================================
--- branches/atmos_physics/src/core_physics/module_physics_todynamics.F        2010-11-18 23:04:38 UTC (rev 627)
+++ branches/atmos_physics/src/core_physics/module_physics_todynamics.F        2010-11-18 23:08:48 UTC (rev 628)
@@ -18,7 +18,8 @@
type(mesh_type),intent(in) :: mesh
type(tend_physics_type),intent(in):: tend_physics
- real(kind=RKIND),dimension(mesh%nCells,mesh%nVertLevels):: mass
+!real(kind=RKIND),dimension(mesh%nCells,mesh%nVertLevels):: mass
+ real(kind=RKIND),dimension(:,:):: mass
!inout variables:
!----------------
</font>
</pre>