<p><b>laura@ucar.edu</b> 2010-05-20 13:56:57 -0600 (Thu, 20 May 2010)</p><p>Initialization of physics variables, and allocation (de-allocation) of all physics arrays.<br>
</p><hr noshade><pre><font color="gray">Added: branches/atmos_physics/src/core_hyd_phys/module_physics_manager.F
===================================================================
--- branches/atmos_physics/src/core_hyd_phys/module_physics_manager.F         (rev 0)
+++ branches/atmos_physics/src/core_hyd_phys/module_physics_manager.F        2010-05-20 19:56:57 UTC (rev 288)
@@ -0,0 +1,184 @@
+!==============================================================================
+ MODULE module_physics_manager
+ USE configure
+ USE grid_types
+ USE module_physics_vars
+
+ IMPLICIT NONE
+ PRIVATE
+ PUBLIC:: physics_timetracker,physics_wrf_allocate,physics_wrf_deallocate
+
+ CONTAINS
+
+!==============================================================================
+ SUBROUTINE physics_timetracker(itimestep,l_physics)
+!==============================================================================
+
+!INPUT ARGUMENTS:
+!----------------
+ INTEGER,INTENT(in):: itimestep
+
+!INOUT ARGUMENTS:
+!----------------
+ LOGICAL,INTENT(inout):: l_physics
+
+!==============================================================================
+ write(6,*)
+ write(6,*) '--- enter subroutine PHYSICS_TIMETRACKER'
+ write(6,*) '--- itimestep=', itimestep
+
+ if(mod(itimestep-1,config_n_physics) == 0) l_physics = .true.
+ write(6,*) '--- PHYSICS_CONTROL:',itimestep,config_n_physics,l_physics
+ write(6,*)
+
+ END SUBROUTINE physics_timetracker
+
+!==============================================================================
+ SUBROUTINE physics_wrf_allocate(grid)
+!==============================================================================
+
+!INPUT ARGUMENTS:
+!----------------
+ TYPE(grid_meta),INTENT(in):: grid
+
+!==============================================================================
+ write(6,*)
+ write(6,*) '--- enter subroutine PHYSICS_WRF_ALLOCATE:'
+
+!INITIALIZATION OF WRF DIMENSIONS:
+ ims=1 ; ime=grid%nCellsSolve
+ jms=1 ; jme=1
+ kms=1 ; kme=grid%nVertLevels+1
+
+ ids=ims ; jds=jms ; kds=kms ; its=ims ; jts=jms ; kts=kms
+ ide=ime ; jde=jme ; kde=kme ; ite=ime ; jte=jme ; kte=kme
+!ide=ime+1 ; jde=jme+1 ; kde=kme ; ite=ime ; jte=jme ; kte=kme
+
+ 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
+
+!INITIALIZATION OF PHYSICS, AND CONVECTION TIME-STEPS:
+ dt_dyn = config_dt
+ n_physics = config_n_physics
+ n_microp = config_n_microp
+ dt_physics = dt_dyn*n_physics
+ dt_microp = nint(dt_dyn/n_microp)
+
+!ALLOCATION OF ALL PHYSICS ARRAYS:
+!CALL physics_allocate_all
+
+!INITIALIZATION OF VARIABLES AND ALLOCATION OF ARRAYS RELATED TO CONVECTION:
+ adapt_step_flag = .false.
+ warm_rain = .false.
+ cu_act_flag = .false.
+ n_cu = n_physics !FOR NOW.
+ dt_cu = dt_physics !FOR NOW.
+
+ write(6,*) '--- end subroutine PHYSICS_WRF_ALLOCATE:'
+!CALL physics_allocate_convection
+
+ END SUBROUTINE physics_wrf_allocate
+
+!==============================================================================
+ SUBROUTINE physics_allocate_all
+!==============================================================================
+ IF(.NOT.ALLOCATED(u_phy) ) ALLOCATE(u_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(v_phy) ) ALLOCATE(v_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(w_phy) ) ALLOCATE(w_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(p_phy) ) ALLOCATE(p_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(pi_phy) ) ALLOCATE(pi_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(dz_phy) ) ALLOCATE(dz_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(t_phy) ) ALLOCATE(t_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(th_phy) ) ALLOCATE(th_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(al_phy) ) ALLOCATE(al_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(rho_phy) ) ALLOCATE(rho_phy(ims:ime,kms:kme,jms:jme) )
+
+ IF(.NOT.ALLOCATED(qv_phy) ) ALLOCATE(qv_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(qc_phy) ) ALLOCATE(qc_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(qr_phy) ) ALLOCATE(qr_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(qi_phy) ) ALLOCATE(qi_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(qs_phy) ) ALLOCATE(qs_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(qg_phy) ) ALLOCATE(qg_phy(ims:ime,kms:kme,jms:jme) )
+
+ IF(.NOT.ALLOCATED(qnr_phy) ) ALLOCATE(qnr_phy(ims:ime,kms:kme,jms:jme) )
+ IF(.NOT.ALLOCATED(qni_phy) ) ALLOCATE(qni_phy(ims:ime,kms:kme,jms:jme) )
+
+ END SUBROUTINE physics_allocate_all
+
+!==============================================================================
+ SUBROUTINE physics_allocate_convection
+!==============================================================================
+ IF(.NOT.ALLOCATED(cu_act_flag) ) ALLOCATE(cu_act_flag(ims:ime,jms:jme) )
+ IF(.NOT.ALLOCATED(cubot_phy) ) ALLOCATE(cubot_phy(ims:ime,jms:jme) )
+ IF(.NOT.ALLOCATED(cutop_phy) ) ALLOCATE(cutop_phy(ims:ime,jms:jme) )
+ IF(.NOT.ALLOCATED(raincv_phy) ) ALLOCATE(raincv_phy(ims:ime,jms:jme) )
+ IF(.NOT.ALLOCATED(pratec_phy) ) ALLOCATE(pratec_phy(ims:ime,jms:jme) )
+
+ IF(.NOT.ALLOCATED(nca_phy) ) ALLOCATE(nca_phy(ims:ime,jms:jme) )
+ IF(.NOT.ALLOCATED(w0avg_phy) ) ALLOCATE(w0avg_phy(ims:ime,kms:kme,jms:jme))
+
+ IF(.NOT.ALLOCATED(rthcuten_phy)) ALLOCATE(rthcuten_phy(ims:ime,kms:kme,jms:jme))
+ IF(.NOT.ALLOCATED(rqvcuten_phy)) ALLOCATE(rqvcuten_phy(ims:ime,kms:kme,jms:jme))
+ IF(.NOT.ALLOCATED(rqccuten_phy)) ALLOCATE(rqccuten_phy(ims:ime,kms:kme,jms:jme))
+ IF(.NOT.ALLOCATED(rqrcuten_phy)) ALLOCATE(rqrcuten_phy(ims:ime,kms:kme,jms:jme))
+ IF(.NOT.ALLOCATED(rqicuten_phy)) ALLOCATE(rqicuten_phy(ims:ime,kms:kme,jms:jme))
+ IF(.NOT.ALLOCATED(rqscuten_phy)) ALLOCATE(rqscuten_phy(ims:ime,kms:kme,jms:jme))
+
+ END SUBROUTINE physics_allocate_convection
+
+!==============================================================================
+ SUBROUTINE physics_wrf_deallocate
+!==============================================================================
+
+!DE-ALLOCATION OF ALL PHYSICS ARRAYS:
+ IF(ALLOCATED(u_phy) ) DEALLOCATE(u_phy )
+ IF(ALLOCATED(v_phy) ) DEALLOCATE(v_phy )
+ IF(ALLOCATED(w_phy) ) DEALLOCATE(w_phy )
+ IF(ALLOCATED(p_phy) ) DEALLOCATE(p_phy )
+ IF(ALLOCATED(pi_phy) ) DEALLOCATE(pi_phy )
+ IF(ALLOCATED(dz_phy) ) DEALLOCATE(dz_phy )
+ IF(ALLOCATED(t_phy) ) DEALLOCATE(t_phy )
+ IF(ALLOCATED(th_phy) ) DEALLOCATE(th_phy )
+ IF(ALLOCATED(al_phy) ) DEALLOCATE(al_phy )
+ IF(ALLOCATED(rho_phy) ) DEALLOCATE(rho_phy )
+
+ IF(ALLOCATED(qv_phy) ) DEALLOCATE(qv_phy )
+ IF(ALLOCATED(qc_phy) ) DEALLOCATE(qc_phy )
+ IF(ALLOCATED(qr_phy) ) DEALLOCATE(qr_phy )
+ IF(ALLOCATED(qi_phy) ) DEALLOCATE(qi_phy )
+ IF(ALLOCATED(qs_phy) ) DEALLOCATE(qs_phy )
+ IF(ALLOCATED(qg_phy) ) DEALLOCATE(qg_phy )
+
+ IF(ALLOCATED(qnr_phy) ) DEALLOCATE(qnr_phy )
+ IF(ALLOCATED(qni_phy) ) DEALLOCATE(qni_phy )
+
+ IF(ALLOCATED(cu_act_flag) ) DEALLOCATE(cu_act_flag )
+ IF(ALLOCATED(cubot_phy) ) DEALLOCATE(cubot_phy )
+ IF(ALLOCATED(cutop_phy) ) DEALLOCATE(cutop_phy )
+ IF(ALLOCATED(raincv_phy) ) DEALLOCATE(raincv_phy )
+ IF(ALLOCATED(pratec_phy) ) DEALLOCATE(pratec_phy )
+ IF(ALLOCATED(nca_phy) ) DEALLOCATE(nca_phy )
+ IF(ALLOCATED(w0avg_phy) ) DEALLOCATE(w0avg_phy )
+
+ IF(ALLOCATED(rthcuten_phy)) DEALLOCATE(rthcuten_phy)
+ IF(ALLOCATED(rqvcuten_phy)) DEALLOCATE(rqvcuten_phy)
+ IF(ALLOCATED(rqccuten_phy)) DEALLOCATE(rqccuten_phy)
+ IF(ALLOCATED(rqrcuten_phy)) DEALLOCATE(rqrcuten_phy)
+ IF(ALLOCATED(rqicuten_phy)) DEALLOCATE(rqicuten_phy)
+ IF(ALLOCATED(rqscuten_phy)) DEALLOCATE(rqscuten_phy)
+
+ END SUBROUTINE physics_wrf_deallocate
+
+!==============================================================================
+ END MODULE module_physics_manager
+!==============================================================================
+
</font>
</pre>