<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>