<p><b>laura@ucar.edu</b> 2010-05-20 13:51:37 -0600 (Thu, 20 May 2010)</p><p>Driver for cloud microphysics parameterizations. Called at the bottom of the RK loop of the dynamical core.<br>
</p><hr noshade><pre><font color="gray">Added: branches/atmos_physics/src/core_hyd_phys/module_microphysics_driver.F
===================================================================
--- branches/atmos_physics/src/core_hyd_phys/module_microphysics_driver.F         (rev 0)
+++ branches/atmos_physics/src/core_hyd_phys/module_microphysics_driver.F        2010-05-20 19:51:37 UTC (rev 285)
@@ -0,0 +1,168 @@
+!==============================================================================
+ MODULE module_microphysics_driver
+ USE grid_types
+ USE constants, g => gravity
+
+ USE module_mp_thompson
+ USE module_physics_vars
+
+ IMPLICIT NONE
+ PRIVATE
+ PUBLIC:: microphysics_driver
+
+ REAL(KIND=RKIND),PARAMETER,PRIVATE:: p0 = 100000.
+
+ CONTAINS
+
+!==============================================================================
+ SUBROUTINE microphysics_driver(grid,vars,itimestep)
+!==============================================================================
+
+!INPUT ARGUMENTS:
+!----------------
+ TYPE(grid_meta),INTENT(in) :: grid
+ INTEGER,INTENT(in):: itimestep
+
+!INOUT ARGUMENTS:
+!----------------
+ TYPE(grid_state),INTENT(inout):: vars
+
+!LOCAL VARIABLES AND ARRAYS:
+!---------------------------
+ INTEGER:: nCells,nCellsSolve,nLevels
+ INTEGER:: itf,jtf,ktf
+ INTEGER:: i,icount,istep,j,k,kk
+
+ REAL(KIND=RKIND),DIMENSION(:,:),ALLOCATABLE:: &
+ rainnc,& !
+ snownc,& !
+ graupelnc,& !
+ sr !
+
+ REAL(KIND=RKIND),DIMENSION(:,:),ALLOCATABLE:: &
+ rainncv,& !
+ snowncv,& !
+ graupelncv !
+
+!==============================================================================
+ write(6,*)
+ write(6,*) '--- enter subroutine MICROPHYSICS_DRIVER: itimestep=', itimestep
+ write(6,*) ' dt_microp=',dt_microp
+
+ nCells = grid%nCells
+ nCellsSolve = grid%nCellsSolve
+ nLevels = grid%nVertLevels
+
+!write(6,*) '--- nCells =', nCells
+!write(6,*) '--- nCellsSolve =', nCellsSolve
+!write(6,*) '--- nLevels =', nLevels
+
+!write(6,*) '--- num_scalars =', num_scalars
+!write(6,*) '--- moist_start =', moist_start
+!write(6,*) '--- moist_end =', moist_end
+!write(6,*) '--- number_start =', number_start
+!write(6,*) '--- number_end =', number_end
+!write(6,*)
+
+!INITIALIZATION:
+ itf = ite
+ jtf = jte
+ ktf = kte-1
+
+ write(6,*) ' IMS= ',ims,' IME=',ime
+ write(6,*) ' JMS= ',jms,' JME=',jme
+ write(6,*) ' KMS= ',kms,' KME=',kme
+ write(6,*)
+ write(6,*) ' IDS= ',ids,' IDE=',ide
+ write(6,*) ' JDS= ',jds,' JDE=',jde
+ write(6,*) ' KDS= ',kds,' KDE=',kde
+ write(6,*)
+ write(6,*) ' ITS= ',its,' ITE=',ite
+ write(6,*) ' JTS= ',jts,' JTE=',jte
+ write(6,*) ' KTS= ',kts,' KTE=',kte
+ write(6,*)
+
+!ALLOCATE LOCAL ARRAYS:
+ ALLOCATE(rainnc(ims:ime,jms:jme) )
+ ALLOCATE(rainncv(ims:ime,jms:jme) )
+ ALLOCATE(snownc(ims:ime,jms:jme) )
+ ALLOCATE(snowncv(ims:ime,jms:jme) )
+ ALLOCATE(graupelnc(ims:ime,jms:jme) )
+ ALLOCATE(graupelncv(ims:ime,jms:jme) )
+ ALLOCATE(sr(ims:ime,jms:jme) )
+
+!CALCULATES PHYSICS VARIABLES:
+ DO j = jts, jtf
+ DO k = kts, ktf
+ DO i = its, itf
+ dz_phy(i,k,j) = (vars%geopotential%array(k+1,i) &
+ - vars%geopotential%array(k,i)) / g
+ p_phy(i,k,j) = (vars%pressure%array(k+1,i) &
+ + vars%pressure%array(k,i)) / 2
+ th_phy(i,k,j) = vars%theta%array(k,i)
+
+ pi_phy(i,k,j) = (p_phy(i,k,j)/p0)**(rgas/cp)
+
+ qv_phy(i,k,j) = vars%scalars%array(index_qv,k,i)
+ qc_phy(i,k,j) = vars%scalars%array(index_qc,k,i)
+ qr_phy(i,k,j) = vars%scalars%array(index_qr,k,i)
+ qi_phy(i,k,j) = vars%scalars%array(index_qi,k,i)
+ qs_phy(i,k,j) = vars%scalars%array(index_qs,k,i)
+ qg_phy(i,k,j) = vars%scalars%array(index_qr,k,i)
+
+ qnr_phy(i,k,j) = vars%scalars%array(index_qnr,k,i)
+ qni_phy(i,k,j) = vars%scalars%array(index_qni,k,i)
+ ENDDO
+ ENDDO
+ ENDDO
+
+!CALL TO THOMPSON CLOUD MICROPHYSICS:
+ istep = 1
+ DO WHILE (istep .LE. n_microp)
+ write(6,*) '--- istep=',istep
+ CALL mp_gt_driver(qv_phy ,qc_phy,qr_phy,qi_phy,qs_phy,qg_phy,qni_phy, &
+ qnr_phy,th_phy,pi_phy,p_phy ,dz_phy,dt_microp,itimestep,&
+ rainnc,rainncv,snownc,snowncv,graupelnc,graupelncv,sr, &
+! refl_10cm,grid_clock,grid_alarms, &
+ ids,ide,jds,jde,kds,kde, & ! domain dimensions
+ ims,ime,jms,jme,kms,kme, & ! memory dimensions
+ its,itf,jts,jtf,kts,ktf) ! tile dimensions
+ istep = istep + 1
+ ENDDO
+
+!BACK TO DYNAMICAL CORE:
+ DO j = jts, jtf
+ DO k = kts, ktf
+ DO i = its, itf
+ vars%theta%array(k,i) = th_phy(i,k,j)
+ vars%scalars%array(index_qv,k,i) = qv_phy(i,k,j)
+ vars%scalars%array(index_qc,k,i) = qc_phy(i,k,j)
+ vars%scalars%array(index_qr,k,i) = qr_phy(i,k,j)
+ vars%scalars%array(index_qi,k,i) = qi_phy(i,k,j)
+ vars%scalars%array(index_qs,k,i) = qs_phy(i,k,j)
+ vars%scalars%array(index_qr,k,i) = qg_phy(i,k,j)
+ vars%scalars%array(index_qnr,k,i) = qnr_phy(i,k,j)
+ vars%scalars%array(index_qni,k,i) = qni_phy(i,k,j)
+ ENDDO
+ ENDDO
+ ENDDO
+
+!DEALLOCATE LOCAL ARRAYS:
+ DEALLOCATE(rainnc )
+ DEALLOCATE(rainncv )
+ DEALLOCATE(snownc )
+ DEALLOCATE(snowncv )
+ DEALLOCATE(graupelnc )
+ DEALLOCATE(graupelncv )
+ DEALLOCATE(sr )
+
+!FORMATS:
+ 201 format(i3,10(1x,e15.8))
+ 202 format(i3,1x,i6,1x,i3,10(1x,e15.8))
+ 203 format(i6,1x,i3,10(1x,e15.8))
+
+ END SUBROUTINE microphysics_driver
+
+!==============================================================================
+ END MODULE module_microphysics_driver
+!==============================================================================
</font>
</pre>