<p><b>laura@ucar.edu</b> 2012-03-26 10:06:44 -0600 (Mon, 26 Mar 2012)</p><p>added the call to the Tiedtke parameterization of convection. added initial sourcecode to include the new option kain_fritsch_trigger which is currenly being tested.<br>
</p><hr noshade><pre><font color="gray">Modified: branches/atmos_physics/src/core_atmos_physics/mpas_atmphys_driver_convection_deep.F
===================================================================
--- branches/atmos_physics/src/core_atmos_physics/mpas_atmphys_driver_convection_deep.F        2012-03-26 16:01:40 UTC (rev 1720)
+++ branches/atmos_physics/src/core_atmos_physics/mpas_atmphys_driver_convection_deep.F        2012-03-26 16:06:44 UTC (rev 1721)
@@ -8,14 +8,15 @@
 
 !wrf physics:
  use module_cu_kfeta
+ use module_cu_kfeta_trigger
  use module_cu_tiedtke
 
  implicit none
  private
- public:: allocate_convection_deep,       &amp;
-          deallocate_convection_deep,     &amp;
-          init_convection_deep,           &amp;
-          driver_convection_deep,         &amp;
+ public:: allocate_convection_deep,   &amp;
+          deallocate_convection_deep, &amp;
+          init_convection_deep,       &amp;
+          driver_convection_deep,     &amp;
           update_convection_step1,        &amp;
           update_convection_step2
 
@@ -35,20 +36,79 @@
  if(.not.allocated(pratec_p)   ) allocate(pratec_p(ims:ime,jms:jme)          )
  if(.not.allocated(raincv_p)   ) allocate(raincv_p(ims:ime,jms:jme)          )
 
+ do i = its,ite
+ do j = jts,jte
+    pratec_p(i,j) = 0._RKIND
+    raincv_p(i,j) = 0._RKIND
+ enddo
+ enddo
+
+ do i = its,ite
+ do k = kts,kte
+ do j = jts,jte
+    rthcuten_p(i,k,j) = 0._RKIND
+    rqvcuten_p(i,k,j) = 0._RKIND
+    rqccuten_p(i,k,j) = 0._RKIND
+    rqicuten_p(i,k,j) = 0._RKIND
+ enddo
+ enddo
+ enddo
+
  convection_select: select case(conv_deep_scheme)
 
     case (&quot;kain_fritsch&quot;)
-       if(.not.allocated(area_p)       ) allocate(area_p(ims:ime,jms:jme)               )
-       if(.not.allocated(nca_p)        ) allocate(nca_p(ims:ime,jms:jme)                )
-       if(.not.allocated(w0avg_p)      ) allocate(w0avg_p(ims:ime,kms:kme,jms:jme)      )
+       if(.not.allocated(area_p)     ) allocate(area_p(ims:ime,jms:jme)            )
+       if(.not.allocated(nca_p)      ) allocate(nca_p(ims:ime,jms:jme)             )
+       if(.not.allocated(cubot_p)    ) allocate(cubot_p(ims:ime,jms:jme)           )
+       if(.not.allocated(cutop_p)    ) allocate(cutop_p(ims:ime,jms:jme)           ) 
+       if(.not.allocated(w0avg_p)    ) allocate(w0avg_p(ims:ime,kms:kme,jms:jme)   )
+       if(.not.allocated(rqrcuten_p) ) allocate(rqrcuten_p(ims:ime,kms:kme,jms:jme))
+       if(.not.allocated(rqscuten_p) ) allocate(rqscuten_p(ims:ime,kms:kme,jms:jme))
 
-       if(.not.allocated(cubot_p)      ) allocate(cubot_p(ims:ime,jms:jme)              )
-       if(.not.allocated(cutop_p)      ) allocate(cutop_p(ims:ime,jms:jme)              )
-       if(.not.allocated(rqrcuten_p)   ) allocate(rqrcuten_p(ims:ime,kms:kme,jms:jme)   )
-       if(.not.allocated(rqscuten_p)   ) allocate(rqscuten_p(ims:ime,kms:kme,jms:jme)   )
+       do i = its,ite
+       do j = jts,jte
+          cubot_p(i,j) = DBLE(kte+1)
+          cutop_p(i,j) = DBLE(kts)
+       enddo
+       enddo
 
+       do i = its,ite
+       do k = kts,kte
+       do j = jts,jte
+          rqrcuten_p(i,k,j) = 0._RKIND
+          rqscuten_p(i,k,j) = 0._RKIND
+       enddo
+       enddo
+       enddo
+
+    case (&quot;kain_fritsch_trigger&quot;)
+       if(.not.allocated(area_p)     ) allocate(area_p(ims:ime,jms:jme)             )
+       if(.not.allocated(nca_p)      ) allocate(nca_p(ims:ime,jms:jme)              )
+       if(.not.allocated(cubot_p)    ) allocate(cubot_p(ims:ime,jms:jme)            )
+       if(.not.allocated(cutop_p)    ) allocate(cutop_p(ims:ime,jms:jme)            ) 
+       if(.not.allocated(w0avg_p)    ) allocate(w0avg_p(ims:ime,kms:kme,jms:jme)    )
+       if(.not.allocated(rqvdynten_p)) allocate(rqvdynten_p(ims:ime,kms:kme,jms:jme))
+       if(.not.allocated(rqrcuten_p) ) allocate(rqrcuten_p(ims:ime,kms:kme,jms:jme) )
+       if(.not.allocated(rqscuten_p) ) allocate(rqscuten_p(ims:ime,kms:kme,jms:jme) )
+
+       do i = its,ite
+       do j = jts,jte
+          cubot_p(i,j) = DBLE(kte+1)
+          cutop_p(i,j) = DBLE(kts)
+       enddo
+       enddo
+
+       do i = its,ite
+       do k = kts,kte
+       do j = jts,jte
+          rqrcuten_p(i,k,j)  = 0._RKIND
+          rqscuten_p(i,k,j)  = 0._RKIND
+          rqvdynten_p(i,k,j) = 0._RKIND
+       enddo
+       enddo
+       enddo
+
     case (&quot;tiedtke&quot;)
-       if(.not.allocated(znu_p)        ) allocate(znu_p(kms:kme)                        )
        if(.not.allocated(qfx_p)        ) allocate(qfx_p(ims:ime,jms:jme)                )
        if(.not.allocated(xland_p)      ) allocate(xland_p(ims:ime,jms:jme)              )
        if(.not.allocated(rqvdynten_p)  ) allocate(rqvdynten_p(ims:ime,kms:kme,jms:jme)  )
@@ -56,6 +116,24 @@
        if(.not.allocated(rucuten_p)    ) allocate(rucuten_p(ims:ime,kms:kme,jms:jme)    )
        if(.not.allocated(rvcuten_p)    ) allocate(rvcuten_p(ims:ime,kms:kme,jms:jme)    )
 
+       do i = its,ite
+       do j = jts,jte
+          qfx_p(i,j)   = 0._RKIND
+          xland_p(i,j) = 0._RKIND
+       enddo
+       enddo
+
+       do i = its,ite
+       do k = kts,kte
+       do j = jts,jte
+          rqvdynten_p(i,k,j)   = 0._RKIND
+          rqvdynblten_p(i,k,j) = 0._RKIND
+          rucuten_p(i,k,j)     = 0._RKIND
+          rvcuten_p(i,k,j)     = 0._RKIND
+       enddo
+       enddo
+       enddo
+
     case default
 
  end select convection_select
@@ -79,15 +157,23 @@
     case (&quot;kain_fritsch&quot;)
        if(allocated(area_p)       ) deallocate(area_p       )
        if(allocated(nca_p)        ) deallocate(nca_p        )
+       if(allocated(cubot_p)      ) deallocate(cubot_p      )
+       if(allocated(cutop_p)      ) deallocate(cutop_p      ) 
        if(allocated(w0avg_p)      ) deallocate(w0avg_p      )
+       if(allocated(rqrcuten_p)   ) deallocate(rqrcuten_p   )
+       if(allocated(rqscuten_p)   ) deallocate(rqscuten_p   )
 
+    case (&quot;kain_fritsch_trigger&quot;)
+       if(allocated(area_p)       ) deallocate(area_p       )
+       if(allocated(nca_p)        ) deallocate(nca_p        )
+       if(allocated(w0avg_p)      ) deallocate(w0avg_p      )
        if(allocated(cubot_p)      ) deallocate(cubot_p      )
        if(allocated(cutop_p)      ) deallocate(cutop_p      )
+       if(allocated(rqvdynten_p)  ) deallocate(rqvdynten_p  )
        if(allocated(rqrcuten_p)   ) deallocate(rqrcuten_p   )
        if(allocated(rqscuten_p)   ) deallocate(rqscuten_p   )
 
     case (&quot;tiedtke&quot;)
-       if(allocated(znu_p)        ) deallocate(znu_p        )
        if(allocated(qfx_p)        ) deallocate(qfx_p        )
        if(allocated(xland_p)      ) deallocate(xland_p      )
        if(allocated(rqvdynten_p)  ) deallocate(rqvdynten_p  )
@@ -133,9 +219,9 @@
 
     case (&quot;tiedtke&quot;)
        write(0,*) '    enter tiedtke initialization:'
-       write(mpas_err_message,'(A,A10)') &amp;
-         'Tiedtke is being tested. Do not use right now. Thanks '
-       call physics_error_fatal(mpas_err_message)
+!      write(mpas_err_message,'(A,A10)') &amp;
+!        'Tiedtke is being tested. Do not use right now. Thanks '
+!      call physics_error_fatal(mpas_err_message)
 
     case default
 
@@ -170,6 +256,10 @@
  real(kind=RKIND):: cudt
  real(kind=RKIND):: cudtacttime
 
+!temp:
+ real(kind=RKIND):: max_rthcuten
+ real(kind=RKIND):: min_rthcuten
+
 !=============================================================================================
  write(0,*)
  write(0,*) '--- enter convection_driver: dt_cu=',dt_cu
@@ -234,9 +324,31 @@
 
     case(&quot;tiedtke&quot;)
        write(0,*) '--- enter subroutine cu_tiedtke:'
-       write(mpas_err_message,'(A,A10)') &amp;
-         'Tiedtke is being tested. Do not use right now. Thanks '
-       call physics_error_fatal(mpas_err_message)
+       call cu_tiedtke ( &amp;
+             dt          = dt_dyn      , itimestep       = itimestep       ,         &amp;
+             stepcu      = n_cu        , raincv          = raincv_p        ,         &amp;
+             pratec      = pratec_p    , qfx             = qfx_p           ,         &amp;
+             znu         = znu_p       , u3d             = u_p             ,         &amp;
+             v3d         = v_p         , w               = w_p             ,         &amp;
+             t3d         = t_p         , qv3d            = qv_p            ,         &amp;
+             qc3d        = qc_p        , qi3d            = qi_p            ,         &amp;
+             pi3d        = pi_p        , rho3d           = rho_p           ,         &amp;
+             qvften      = rqvdynten_p , qvpblten        = rqvdynblten_p   ,         &amp;
+             dz8w        = dz_p        , pcps            = pres_p          ,         &amp;
+             p8w         = pres2_p     , xland           = xland_p         ,         &amp;
+             cu_act_flag = cu_act_flag , cudt            = dt_cu           ,         &amp;
+!            curr_secs   = curr_secs   , adapt_step_flag = adapt_step_flag ,         &amp;
+!            cudtacttime = cudtacttime , f_qv            = f_qv            ,         &amp;
+             f_qv        = f_qv        ,                                             &amp;
+             f_qc        = f_qc        , f_qr            = f_qr            ,         &amp;
+             f_qi        = f_qi        , f_qs            = f_qs            ,         &amp;        
+             rthcuten    = rthcuten_p  , rqvcuten        = rqvcuten_p      ,         &amp;
+             rqccuten    = rqccuten_p  , rqicuten        = rqicuten_p      ,         &amp;
+             rucuten     = rucuten_p   , rvcuten         = rvcuten_p       ,         &amp;
+             ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , &amp;
+             ims = ims , ime = ime , jms = jms , jme = jme , kms = kds , kme = kme , &amp;
+             its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte   &amp;
+                    )
 
     case default
 
@@ -261,10 +373,6 @@
  type(tend_physics_type),intent(in):: tend_physics
  real(kind=RKIND),intent(in):: dt_dyn
 
-!local variables:
- real(kind=RKIND):: tem
- real(kind=RKIND),dimension(:),allocatable:: zw
-
 !---------------------------------------------------------------------------------------------
  write(0,*)
  write(0,*) '--- enter subroutine convection_from_MPAS:'
@@ -288,6 +396,7 @@
 
        do j = jts,jte
        do i = its,ite
+          !area of grid-cell:       
           area_p(i,j)  = mesh % areaCell % array(i)
           cubot_p(i,j) = diag_physics % cubot % array(i)
           cutop_p(i,j) = diag_physics % cutop % array(i)
@@ -327,17 +436,58 @@
        enddo
        enddo
 
-    case (&quot;tiedtke&quot;)
-       if(.not.allocated(zw)) allocate(zw(kms:kme))
-       zw(kts) = 0.
+    case (&quot;kain_fritsch_trigger&quot;)
+
+       do j = jts,jte
+       do i = its,ite
+          area_p(i,j)  = mesh % areaCell % array(i)
+          cubot_p(i,j) = diag_physics % cubot % array(i)
+          cutop_p(i,j) = diag_physics % cutop % array(i)
+
+          do k = kts,kte
+             rqrcuten_p(i,k,j) = tend_physics % rqrcuten % array(k,i)
+             rqscuten_p(i,k,j) = tend_physics % rqscuten % array(k,i)
+          enddo
+
+          !decreases the characteristic time period that convection remains active. When nca_p
+          !becomes less than the convective timestep, convective tendencies and precipitation
+          !are reset to zero (note that this is also done in subroutine kf_eta_cps).
+          nca_p(i,j) = diag_physics % nca % array(i)
+
+          if(nca_p(i,j) .gt. 0.) then
+             nca_p(i,j) = nca_p(i,j) - dt_dyn
+             
+             if(nca_p(i,j) .lt. 0.5*dt_dyn) then
+                do k = kts,kte
+                   rthcuten_p(i,k,j) = 0.
+                   rqvcuten_p(i,k,j) = 0.
+                   rqccuten_p(i,k,j) = 0.
+                   rqrcuten_p(i,k,j) = 0.
+                   rqicuten_p(i,k,j) = 0.
+                   rqscuten_p(i,k,j) = 0.
+                enddo
+                raincv_p(i,j) = 0.
+                pratec_p(i,j) = 0.
+                cubot_p(i,j)  = kte+1
+                cutop_p(i,j)  = kts
+             endif
+          endif
+
+          do k = kts,kte
+             w0avg_p(i,k,j) = diag_physics % w0avg % array(k,i)
+          enddo
+       enddo
+       enddo
+
+       do j = jts,jte
        do k = kts,kte
-          tem = 1./mesh % rdzw % array(k)
-          zw(k+1)  = zw(k) + tem
-          znu_p(k) = 0.5*(zw(k+1)+zw(k))
-          write(0,*) k,zw(k+1),znu_p(k)
+       do i = its,ite
+          rqvdynten_p(i,k,j) = tend_physics % rqvdynten % array(k,i)
        enddo
-       if(allocated(zw)) deallocate(zw)
+       enddo
+       enddo
 
+    case (&quot;tiedtke&quot;)
        do j = jts,jte
        do i = its,ite
           xland_p(i,j) = sfc_input % xland % array(i)
@@ -353,10 +503,10 @@
        enddo
        enddo
        enddo
-       write(0,*) '--- max rqvdynblten = ',maxval(rqvdynblten_p(:,:,:))
-       write(0,*) '--- min rqvdynblten = ',minval(rqvdynblten_p(:,:,:))
-       write(0,*) '--- max rqvdynten   = ',maxval(rqvdynten_p(:,:,:))
-       write(0,*) '--- min rqvdynten   = ',minval(rqvdynten_p(:,:,:))
+!      write(0,*) '--- max rqvdynblten = ',maxval(rqvdynblten_p(its:ite,kts:kte,jts:jte))
+!      write(0,*) '--- min rqvdynblten = ',minval(rqvdynblten_p(its:ite,kts:kte,jts:jte))
+!      write(0,*) '--- max rqvdynten   = ',maxval(rqvdynten_p(its:ite,kts:kte,jts:jte))
+!      write(0,*) '--- min rqvdynten   = ',minval(rqvdynten_p(its:ite,kts:kte,jts:jte))
        
     case default
 
@@ -388,7 +538,7 @@
 
  convection_select: select case(conv_deep_scheme)
 
-    case (&quot;kain_fritsch&quot;)
+    case (&quot;kain_fritsch&quot;,&quot;kain_fritsch_trigger&quot;)
        do j = jts,jte
        do i = its,ite
           diag_physics % cubot % array(i) = cubot_p(i,j)

</font>
</pre>