<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='DA_AD_MODEL'><A href='../../html_code/4dvar/da_ad_model.inc.html#DA_AD_MODEL' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>

subroutine da_ad_model () 2,2

   !-----------------------------------------------------------------------
   ! Purpose: Acrivate nonlinear model
   !    Author: Xin Zhang,  MMM/ESSL/NCAR,  Date: 05/19/2010
   !-----------------------------------------------------------------------

   implicit none

   integer :: time_step, alarmid, gwd_opt

   if (trace_use_dull) call da_trace_entry("da_ad_model")

#ifdef _OPENMP
   call setfeenv()
#endif

   ! Set the file names and interval for reading basic states.
   model_config_rec%auxinput6_inname = "auxhist6_d&lt;domain&gt;_&lt;date&gt;"
   call nl_get_time_step ( head_grid%id, time_step )
   call nl_set_auxinput6_interval_s (head_grid%id, time_step )
   call nl_set_io_form_auxinput6 ( head_grid%id, 2 )
   call nl_set_frames_per_auxinput6 ( head_grid%id, 1 )

   ! Set the file names and interval for reading adjoint forcing.
   model_config_rec%auxinput7_inname = "af_d&lt;domain&gt;_&lt;date&gt;"
   call nl_set_auxinput7_interval_s ( head_grid%id, var4d_bin )
   call nl_set_io_form_auxinput7 ( head_grid%id, 2 )
   call nl_set_frames_per_auxinput7 ( head_grid%id, 1 )
   call nl_get_gwd_opt ( head_grid%id, gwd_opt )

   ! Set all perturbation to ZERO

   head_grid%a_h_diabatic = 0.0

   head_grid%a_rainnc  = 0.0
   head_grid%a_rainncv = 0.0
   head_grid%a_rainc  = 0.0
   head_grid%a_raincv = 0.0
   head_grid%a_pratec = 0.0

! I&amp;O variables
   head_grid%a_scalar = 0.0
   head_grid%a_tke_2 = 0.0
   head_grid%a_p=0.0
   head_grid%a_al=0.0

! O variables
   head_grid%a_tke_1 = 0.0

   head_grid%a_ru = 0.0
   head_grid%a_rv = 0.0
   head_grid%a_rw = 0.0
   head_grid%a_ww = 0.0
   head_grid%a_alt = 0.0
   head_grid%a_php = 0.0
   head_grid%a_mut = 0.0
   head_grid%a_muu = 0.0
   head_grid%a_muv = 0.0
   head_grid%a_p_hyd_w = 0.0
   head_grid%a_p_hyd = 0.0
   head_grid%a_z_at_w = 0.0
   head_grid%a_z = 0.0
   head_grid%a_zx = 0.0
   head_grid%a_zy = 0.0
   head_grid%a_rdz = 0.0
   head_grid%a_rdzw = 0.0
   head_grid%a_div = 0.0
   head_grid%a_nba_mij = 0.0
   head_grid%a_nba_rij = 0.0
   head_grid%a_defor11 = 0.0
   head_grid%a_defor22 = 0.0
   head_grid%a_defor33 = 0.0
   head_grid%a_defor12 = 0.0
   head_grid%a_defor13 = 0.0
   head_grid%a_defor23 = 0.0
   head_grid%a_bn2 = 0.0
   head_grid%a_xkmh = 0.0
   head_grid%a_xkmv = 0.0
   head_grid%a_xkhh = 0.0
   head_grid%a_xkhv = 0.0
   head_grid%a_ru_tend = 0.0
   head_grid%a_rv_tend = 0.0
   head_grid%a_u_save = 0.0
   head_grid%a_v_save = 0.0
   head_grid%a_t_save = 0.0
   head_grid%a_rthften = 0.0
   head_grid%a_rqvften = 0.0
   head_grid%a_rthcuten = 0.0
   head_grid%a_rqvcuten = 0.0
   head_grid%a_muts = 0.0
   head_grid%a_mudf = 0.0
   head_grid%a_ru_m = 0.0
   head_grid%a_rv_m = 0.0
   head_grid%a_ww_m = 0.0

! I variables
   head_grid%a_ustm=0.0
   head_grid%a_hfx=0.0
   head_grid%a_qfx=0.0

   IF ( gwd_opt .EQ. 1 ) THEN
      head_grid%a_dtaux3d = 0.0
      head_grid%a_dtauy3d = 0.0
      head_grid%a_dusfcg = 0.0
      head_grid%a_dvsfcg = 0.0
   ENDIF

   head_grid%a_u_1 = 0.0
   head_grid%a_v_1 = 0.0
   head_grid%a_w_1 = 0.0
   head_grid%a_t_1 = 0.0
   head_grid%a_ph_1 = 0.0
   head_grid%a_mu_1 = 0.0

   head_grid%a_u_2 = 0.0
   head_grid%a_v_2 = 0.0
   head_grid%a_w_2 = 0.0
   head_grid%a_t_2 = 0.0
   head_grid%a_ph_2 = 0.0
   head_grid%a_mu_2 = 0.0

   head_grid%a_moist = 0.0

   head_grid%a_u_bxs = 0.0; head_grid%a_u_bxe = 0.0; head_grid%a_u_bys = 0.0; head_grid%a_u_bye = 0.0
   head_grid%a_v_bxs = 0.0; head_grid%a_v_bxe = 0.0; head_grid%a_v_bys = 0.0; head_grid%a_v_bye = 0.0
   head_grid%a_w_bxs = 0.0; head_grid%a_w_bxe = 0.0; head_grid%a_w_bys = 0.0; head_grid%a_w_bye = 0.0
   head_grid%a_ph_bxs = 0.0; head_grid%a_ph_bxe = 0.0; head_grid%a_ph_bys = 0.0; head_grid%a_ph_bye = 0.0
   head_grid%a_t_bxs = 0.0; head_grid%a_t_bxe = 0.0; head_grid%a_t_bys = 0.0; head_grid%a_t_bye = 0.0
   head_grid%a_mu_bxs = 0.0; head_grid%a_mu_bxe = 0.0; head_grid%a_mu_bys = 0.0; head_grid%a_mu_bye = 0.0
   head_grid%a_moist_bxs = 0.0; head_grid%a_moist_bxe = 0.0; head_grid%a_moist_bys = 0.0; head_grid%a_moist_bye = 0.0
   head_grid%a_scalar_bxs = 0.0; head_grid%a_scalar_bxe = 0.0; head_grid%a_scalar_bys = 0.0; head_grid%a_scalar_bye = 0.0

   head_grid%a_u_btxs = 0.0; head_grid%a_u_btxe = 0.0; head_grid%a_u_btys = 0.0; head_grid%a_u_btye = 0.0
   head_grid%a_v_btxs = 0.0; head_grid%a_v_btxe = 0.0; head_grid%a_v_btys = 0.0; head_grid%a_v_btye = 0.0
   head_grid%a_w_btxs = 0.0; head_grid%a_w_btxe = 0.0; head_grid%a_w_btys = 0.0; head_grid%a_w_btye = 0.0
   head_grid%a_ph_btxs = 0.0; head_grid%a_ph_btxe = 0.0; head_grid%a_ph_btys = 0.0; head_grid%a_ph_btye = 0.0
   head_grid%a_t_btxs = 0.0; head_grid%a_t_btxe = 0.0; head_grid%a_t_btys = 0.0; head_grid%a_t_btye = 0.0
   head_grid%a_mu_btxs = 0.0; head_grid%a_mu_btxe = 0.0; head_grid%a_mu_btys = 0.0; head_grid%a_mu_btye = 0.0
   head_grid%a_moist_btxs = 0.0; head_grid%a_moist_btxe = 0.0; head_grid%a_moist_btys = 0.0; head_grid%a_moist_btye = 0.0
   head_grid%a_scalar_btxs = 0.0; head_grid%a_scalar_btxe = 0.0; head_grid%a_scalar_btys = 0.0; head_grid%a_scalar_btye = 0.0

   head_grid%g_u_1 = 0.0  
   head_grid%g_v_1 = 0.0
   head_grid%g_w_1 = 0.0
   head_grid%g_t_1 = 0.0
   head_grid%g_ph_1 = 0.0
   head_grid%g_mu_1 = 0.0

   head_grid%g_u_2 = 0.0
   head_grid%g_v_2 = 0.0
   head_grid%g_w_2 = 0.0
   head_grid%g_t_2 = 0.0
   head_grid%g_ph_2 = 0.0
   head_grid%g_mu_2 = 0.0

   head_grid%g_p = 0.0

   head_grid%g_moist = 0.0

   head_grid%g_scalar = 0.0
   head_grid%g_rainnc  = 0.0
   head_grid%g_rainncv = 0.0
   head_grid%g_rainc  = 0.0
   head_grid%g_raincv = 0.0
   head_grid%g_pratec = 0.0

   ! Set the physics options to what they are in TL and AD
   if (original_mp_physics .NE. 0 .and. original_mp_physics .NE. 98 .and. original_mp_physics .NE. 99) &amp;
      call nl_set_mp_physics (head_grid%id, original_mp_physics_ad) 
   call nl_set_ra_lw_physics (head_grid%id, 0)
   call nl_set_ra_sw_physics (head_grid%id, 0)
   call nl_set_sf_sfclay_physics (head_grid%id, 0)
   if ( original_bl_pbl_physics .gt. 0 ) &amp;
      call nl_set_bl_pbl_physics (head_grid%id, 98)
   if ( original_cu_physics .gt. 0 ) then
      call nl_set_cu_physics (head_grid%id, 98) 
      head_grid%cudt =0
   endif
   !call nl_set_mp_zero_out (head_grid%id, 0)
   !call nl_set_sf_surface_physics (head_grid%id, 1)
   call nl_set_ifsnow (head_grid%id, 1)
   call nl_set_icloud (head_grid%id, 0)
   !call nl_set_isfflx (head_grid%id, 0)

   if ( model_config_rec%var4d_detail_out ) gradient_out = .true.

   ! WRF model time-stepping.  Calls integrate().
   call nl_set_var4d_run (head_grid%id, .true.)
   call wrf_run_ad
	
   ! restore the physics options to the originals
   call nl_set_mp_physics (head_grid%id, original_mp_physics)
   call nl_set_ra_lw_physics (head_grid%id, original_ra_lw_physics)
   call nl_set_ra_sw_physics (head_grid%id, original_ra_sw_physics)
   call nl_set_sf_sfclay_physics (head_grid%id, original_sf_sfclay_physics)
   call nl_set_bl_pbl_physics (head_grid%id, original_bl_pbl_physics)
   call nl_set_cu_physics (head_grid%id, original_cu_physics)
   head_grid%cudt = original_cudt
   !call nl_set_mp_zero_out (head_grid%id, original_mp_zero_out)
   !call nl_set_sf_surface_physics (head_grid%id, original_sf_surface_physics)
   call nl_set_ifsnow (head_grid%id, original_ifsnow)
   call nl_set_icloud (head_grid%id, original_icloud)
   !call nl_set_isfflx (head_grid%id, original_isfflx)

   ! Turn off auxinput6,7 reading and auxhist7 output

   call nl_set_auxinput6_interval_s (head_grid%id, 0 )
   call nl_set_auxinput7_interval_s ( head_grid%id, 0 )

   IF ( ASSOCIATED( head_grid%domain_clock ) ) THEN
     IF ( head_grid%domain_clock_created ) THEN
       CALL WRFU_ClockDestroy( head_grid%domain_clock )
       head_grid%domain_clock_created = .FALSE.
     ENDIF
   ENDIF
   IF ( ASSOCIATED( head_grid%alarms ) .AND. &amp;
        ASSOCIATED( head_grid%alarms_created ) ) THEN
     DO alarmid = 1, MAX_WRF_ALARMS
       IF ( head_grid%alarms_created( alarmid ) ) THEN
         CALL WRFU_AlarmDestroy( head_grid%alarms( alarmid ) )
         head_grid%alarms_created( alarmid ) = .FALSE.
       ENDIF
     ENDDO
   ENDIF
   call Setup_Timekeeping ( head_grid )

   if (trace_use_dull) call da_trace_exit("da_ad_model")

end subroutine da_ad_model