[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