[Dart-dev] [3466] DART/trunk/models/wrf/WRF_BC: Updates from Ryan Torn.

nancy at ucar.edu nancy at ucar.edu
Tue Jul 22 16:19:23 MDT 2008


An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/dart-dev/attachments/20080722/03bb46ba/attachment.html
-------------- next part --------------
Modified: DART/trunk/models/wrf/WRF_BC/module_netcdf_interface.f90
===================================================================
--- DART/trunk/models/wrf/WRF_BC/module_netcdf_interface.f90	2008-07-21 20:27:53 UTC (rev 3465)
+++ DART/trunk/models/wrf/WRF_BC/module_netcdf_interface.f90	2008-07-22 22:19:23 UTC (rev 3466)
@@ -27,7 +27,8 @@
         put_var_3d_real_cdf, &
         put_var_2d_real_cdf, &
         get_times_cdf,       &
-        put_time_cdf
+        put_time_cdf,        & 
+        variable_exist
 
 ! version controlled file description for error handling, do not edit
 character(len=128), parameter :: &
@@ -545,4 +546,34 @@
 
 end subroutine put_time_cdf
 
+function variable_exist( fname, var_name )
+
+  implicit none
+
+  character(len=*), intent(in) :: fname, var_name
+
+  integer :: cdfid, var_id, rcode
+  logical :: variable_exist
+
+  variable_exist = .false.
+  call check( nf90_open(fname, nf90_nowrite, cdfid) )
+  rcode = nf90_inq_varid(cdfid, var_name, var_id)
+  call check( nf90_close(cdfid) )
+  if ( rcode == nf90_noerr )  variable_exist = .true.
+  return 
+ 
+contains
+
+  ! Internal subroutine - checks error status after each netcdf, prints
+  !                       text message each time an error code is returned.
+  subroutine check(istatus)
+    integer, intent (in) :: istatus
+
+    if(istatus /= nf90_noerr) call error_handler(E_ERR, 'variable_exist', &
+       trim(nf90_strerror(istatus)), source, revision, revdate)
+
+  end subroutine check
+
+end function variable_exist
+
 END MODULE module_netcdf_interface

Modified: DART/trunk/models/wrf/WRF_BC/pert_wrf_bc.f90
===================================================================
--- DART/trunk/models/wrf/WRF_BC/pert_wrf_bc.f90	2008-07-21 20:27:53 UTC (rev 3465)
+++ DART/trunk/models/wrf/WRF_BC/pert_wrf_bc.f90	2008-07-22 22:19:23 UTC (rev 3466)
@@ -22,11 +22,11 @@
 use           utilities_mod, only : file_exist, open_file, close_file, &
                                     initialize_utilities, finalize_utilities, &
                                     register_module, error_handler, E_ERR, &
-                                    logfileunit, nmlfileunit, timestamp
+                                    logfileunit, timestamp
 use module_netcdf_interface, only : get_dims_cdf, get_gl_att_real_cdf, put_gl_att_real_cdf, &
                                     get_var_3d_real_cdf, get_var_2d_real_cdf, &
                                     put_var_3d_real_cdf, put_var_2d_real_cdf, &
-                                    get_times_cdf, put_time_cdf
+                                    get_times_cdf, put_time_cdf, variable_exist
 use        module_couple_uv
 use         module_timediff, only : time_diff, find_time_index
 
@@ -39,15 +39,7 @@
    revdate  = "$Date$"
 
 !-----------------------------------------------------------------------
-! Model namelist parameters with default values.
-!-----------------------------------------------------------------------
 
-integer :: mp_physics = 4
-
-namelist /physics/ mp_physics
-
-!-----------------------------------------------------------------------
-
 integer, parameter :: max_3d_variables = 20, &
                       max_2d_variables = 20, &
                       max_times        = 100
@@ -87,7 +79,7 @@
 
 integer :: east_end, north_end
 
-logical, parameter :: debug = .true.
+logical, parameter :: debug = .false.
 
 real(r8) :: bdyfrq_old, bdyfrq, dtnext
 
@@ -98,43 +90,6 @@
 call initialize_utilities('pert_wrf_bc')
 call register_module(source, revision, revdate)
 
-! Reading the namelist input
-if(file_exist('namelist.input')) then
-
-   iunit = open_file('namelist.input', action = 'read')
-   read(iunit, nml = physics, iostat = io )
-   call close_file(iunit)
-
-endif
-
-write(nmlfileunit, nml=physics)
-write(     *     , nml=physics)
-
-select case(mp_physics)
-case (0) ;
-   nmoist = 1
-case (1) ;
-   nmoist = 3
-case (2) ;
-   nmoist = 6
-case (3) ;
-   nmoist = 3
-case (4) ;
-   nmoist = 5
-case (5) ;
-   nmoist = 2
-case (6) ;
-   nmoist = 6
-case (8)
-   nmoist = 7
-case (98) ;
-   nmoist = 3
-case (99) ;
-   nmoist = 5
-case default ;
-   print *, 'Microphysics package unknown. mp_physics = ', mp_physics
-end select
-
 wrf_input_current_file='wrfinput_this'
 wrf_input_next_file='wrfinput_next'
 wrf_bdy_file  ='wrfbdy_this'
@@ -159,7 +114,8 @@
 tenname(4)='_BTYE'
 
 !--3D need update
-num3d = 5 + nmoist
+nmoist = 7 
+num3d  = 5 + nmoist
 var3d(1)='U'
 var3d(2)='V'
 var3d(3)='W'
@@ -484,7 +440,11 @@
 !---------------------------------------------------------------------
 !--For 3D variables
 
-   do n=1,num3d
+   loop3d : do n = 1, num3d
+
+      if ( .not. variable_exist(wrf_input_current_file, trim(var3d(n))) ) cycle loop3d
+      write(6,*) 'Processing',trim(var3d(n))
+
       call get_dims_cdf( wrf_input_current_file, trim(var3d(n)), dims, ndims, debug )
 
       allocate(full3d(dims(1), dims(2), dims(3)))
@@ -624,8 +584,9 @@
 
       deallocate(full3d)
       deallocate(full3d_next)
-   enddo
 
+   enddo loop3d
+
    deallocate(mu)
    deallocate(mu_next)
    deallocate(mub)

Modified: DART/trunk/models/wrf/WRF_BC/update_wrf_bc.f90
===================================================================
--- DART/trunk/models/wrf/WRF_BC/update_wrf_bc.f90	2008-07-21 20:27:53 UTC (rev 3465)
+++ DART/trunk/models/wrf/WRF_BC/update_wrf_bc.f90	2008-07-22 22:19:23 UTC (rev 3466)
@@ -19,11 +19,11 @@
 use               types_mod, only : r8
 use           utilities_mod, only : file_exist, open_file, close_file, &
                                     initialize_utilities, finalize_utilities, register_module, &
-                                    error_handler, E_ERR, logfileunit, nmlfileunit, timestamp
+                                    error_handler, E_ERR, logfileunit, timestamp
 use module_netcdf_interface, only : get_dims_cdf, get_gl_att_real_cdf, put_gl_att_real_cdf, &
                                     get_var_3d_real_cdf, get_var_2d_real_cdf, put_var_3d_real_cdf, &
-                                    put_var_2d_real_cdf, get_times_cdf, put_time_cdf
-use       module_couple_uv
+                                    put_var_2d_real_cdf, get_times_cdf, put_time_cdf, variable_exist
+use        module_couple_uv
 use         module_timediff, only : time_diff, find_time_index
 
 implicit none
@@ -38,10 +38,6 @@
 ! Model namelist parameters with default values.
 !-----------------------------------------------------------------------
 
-integer :: mp_physics = 3
-
-namelist /physics/ mp_physics
-
 !-----------------------------------------------------------------------
 
 integer, parameter :: max_3d_variables = 20, &
@@ -93,43 +89,6 @@
 call initialize_utilities('update_wrf_bc')
 call register_module(source, revision, revdate)
 
-! Reading the namelist input
-if(file_exist('namelist.input')) then
-
-   iunit = open_file('namelist.input', action = 'read')
-   read(iunit, nml = physics, iostat = io )
-   call close_file(iunit)
-
-endif
-
-write(nmlfileunit, nml=physics)
-write(     *     , nml=physics)
-
-select case(mp_physics)
-case (0) ;
-   nmoist = 1
-case (1) ;
-   nmoist = 3
-case (2) ;
-   nmoist = 6
-case (3) ;
-   nmoist = 3
-case (4) ;
-   nmoist = 5
-case (5) ;
-   nmoist = 2
-case (6) ;
-   nmoist = 6
-case (8) ;
-   nmoist = 7
-case (98) ;
-   nmoist = 3
-case (99) ;
-   nmoist = 5
-case default ;
-   print *, 'Microphysics package unknown. mp_physics = ', mp_physics
-end select
-
 wrf_output_file='wrfinput_d01'
 wrf_bdy_file  ='wrfbdy_d01'
 
@@ -165,7 +124,8 @@
 tenname(4)='_BTYE'
 
 !--3D need update
-num3d = 5 + nmoist
+nmoist = 7 
+num3d  = 5 + nmoist
 var3d(1)='U'
 var3d(2)='V'
 var3d(3)='W'
@@ -497,7 +457,10 @@
 !---------------------------------------------------------------------
 !--For 3D variables
 
-   do n=1,num3d
+   loop3d : do n=1,num3d
+
+      if ( .not. variable_exist(wrf_output_file, trim(var3d(n))) ) cycle loop3d
+
       call get_dims_cdf( wrf_output_file, trim(var3d(n)), dims, ndims, debug )
 
       allocate(full3d(dims(1), dims(2), dims(3)))
@@ -654,7 +617,7 @@
 
       deallocate(full3d)
       deallocate(full3d_mean)
-   enddo
+   enddo loop3d
 
    deallocate(mu)
    deallocate(mu_mean)


More information about the Dart-dev mailing list