[Dart-dev] [3671] DART/trunk/models/wrf/model_mod.f90: Using the
utilities_mod: nc_check() routine to provide
nancy at ucar.edu
nancy at ucar.edu
Tue Nov 25 13:58:05 MST 2008
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/dart-dev/attachments/20081125/61abaed6/attachment-0001.html
-------------- next part --------------
Modified: DART/trunk/models/wrf/model_mod.f90
===================================================================
--- DART/trunk/models/wrf/model_mod.f90 2008-11-25 18:30:27 UTC (rev 3670)
+++ DART/trunk/models/wrf/model_mod.f90 2008-11-25 20:58:05 UTC (rev 3671)
@@ -38,7 +38,7 @@
use utilities_mod, only : file_exist, open_file, close_file, &
register_module, error_handler, E_ERR, E_WARN, &
- E_MSG, nmlfileunit, do_output, &
+ E_MSG, nmlfileunit, do_output, nc_check, &
find_namelist_in_file, check_namelist_read
use obs_kind_mod, only : KIND_U_WIND_COMPONENT, KIND_V_WIND_COMPONENT, &
@@ -244,7 +244,7 @@
integer :: var_id, ind, i, j, k, id, dart_index, model_type
integer :: proj_code
-real(r8) :: stdlon,truelat1,truelat2,dt,latinc,loninc
+real(r8) :: stdlon,truelat1,truelat2,latinc,loninc
character(len=129) :: errstring
!----------------------------------------------------------------------
@@ -321,7 +321,8 @@
if(file_exist('wrfinput_d0'//idom)) then
- call check( nf90_open('wrfinput_d0'//idom, NF90_NOWRITE, ncid) )
+ call nc_check( nf90_open('wrfinput_d0'//idom, NF90_NOWRITE, ncid), &
+ 'static_init_model','open wrfinput_d0'//idom )
else
@@ -334,26 +335,40 @@
! get wrf grid dimensions
- call check( nf90_inq_dimid(ncid, "bottom_top", var_id) )
- call check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%bt) )
+ call nc_check( nf90_inq_dimid(ncid, "bottom_top", var_id), &
+ 'static_init_model','inq_dimid bottom_top')
+ call nc_check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%bt), &
+ 'static_init_model','inquire_dimension '//trim(name))
- call check( nf90_inq_dimid(ncid, "bottom_top_stag", var_id) ) ! reuse var_id, no harm
- call check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%bts) )
+ call nc_check( nf90_inq_dimid(ncid, "bottom_top_stag", var_id), &
+ 'static_init_model','inq_dimid bottom_top_stag') ! reuse var_id, no harm
+ call nc_check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%bts), &
+ 'static_init_model','inquire_dimension '//trim(name))
- call check( nf90_inq_dimid(ncid, "south_north", var_id) )
- call check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%sn) )
+ call nc_check( nf90_inq_dimid(ncid, "south_north", var_id), &
+ 'static_init_model','inq_dimid south_north')
+ call nc_check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%sn), &
+ 'static_init_model','inquire_dimension '//trim(name))
- call check( nf90_inq_dimid(ncid, "south_north_stag", var_id)) ! reuse var_id, no harm
- call check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%sns) )
+ call nc_check( nf90_inq_dimid(ncid, "south_north_stag", var_id), &
+ 'static_init_model','inq_dimid south_north_stag') ! reuse var_id, no harm
+ call nc_check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%sns), &
+ 'static_init_model','inquire_dimension '//trim(name))
- call check( nf90_inq_dimid(ncid, "west_east", var_id) )
- call check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%we) )
+ call nc_check( nf90_inq_dimid(ncid, "west_east", var_id), &
+ 'static_init_model','inq_dimid west_east')
+ call nc_check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%we), &
+ 'static_init_model','inquire_dimension '//trim(name))
- call check( nf90_inq_dimid(ncid, "west_east_stag", var_id) ) ! reuse var_id, no harm
- call check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%wes) )
+ call nc_check( nf90_inq_dimid(ncid, "west_east_stag", var_id), &
+ 'static_init_model','inq_dimid west_east_stag') ! reuse var_id, no harm
+ call nc_check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%wes), &
+ 'static_init_model','inquire_dimension '//trim(name))
- call check( nf90_inq_dimid(ncid, "soil_layers_stag", var_id) ) ! reuse var_id, no harm
- call check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%sls) )
+ call nc_check( nf90_inq_dimid(ncid, "soil_layers_stag", var_id), &
+ 'static_init_model','inq_dimid soil_layers_stag') ! reuse var_id, no harm
+ call nc_check( nf90_inquire_dimension(ncid, var_id, name, wrf%dom(id)%sls), &
+ 'static_init_model','inquire_dimension '//trim(name))
if(debug) then
write(*,*) ' dimensions bt, sn, we are ',wrf%dom(id)%bt, &
@@ -364,29 +379,38 @@
! get meta data and static data we need
- call check( nf90_get_att(ncid, nf90_global, 'DX', wrf%dom(id)%dx) )
- call check( nf90_get_att(ncid, nf90_global, 'DY', wrf%dom(id)%dy) )
- call check( nf90_get_att(ncid, nf90_global, 'DT', wrf%dom(id)%dt) )
+ call nc_check( nf90_get_att(ncid, nf90_global, 'DX', wrf%dom(id)%dx), &
+ 'static_init_model', 'get_att DX')
+ call nc_check( nf90_get_att(ncid, nf90_global, 'DY', wrf%dom(id)%dy), &
+ 'static_init_model', 'get_att DY')
+ call nc_check( nf90_get_att(ncid, nf90_global, 'DT', wrf%dom(id)%dt), &
+ 'static_init_model', 'get_att DT')
if (do_output()) print*,'dt from wrfinput file is: ', wrf%dom(id)%dt
if(debug) write(*,*) ' dx, dy, dt are ',wrf%dom(id)%dx, &
wrf%dom(id)%dy, wrf%dom(id)%dt
- call check( nf90_get_att(ncid, nf90_global, 'MAP_PROJ', wrf%dom(id)%map_proj) )
+ call nc_check( nf90_get_att(ncid, nf90_global, 'MAP_PROJ', wrf%dom(id)%map_proj), &
+ 'static_init_model', 'get_att MAP_PROJ')
if(debug) write(*,*) ' map_proj is ',wrf%dom(id)%map_proj
- call check( nf90_get_att(ncid, nf90_global, 'CEN_LAT', wrf%dom(id)%cen_lat) )
+ call nc_check( nf90_get_att(ncid, nf90_global, 'CEN_LAT', wrf%dom(id)%cen_lat), &
+ 'static_init_model', 'get_att CEN_LAT')
if(debug) write(*,*) ' cen_lat is ',wrf%dom(id)%cen_lat
- call check( nf90_get_att(ncid, nf90_global, 'CEN_LON', wrf%dom(id)%cen_lon) )
+ call nc_check( nf90_get_att(ncid, nf90_global, 'CEN_LON', wrf%dom(id)%cen_lon), &
+ 'static_init_model', 'get_att CEN_LON')
if(debug) write(*,*) ' cen_lon is ',wrf%dom(id)%cen_lon
- call check( nf90_get_att(ncid, nf90_global, 'TRUELAT1', truelat1) )
+ call nc_check( nf90_get_att(ncid, nf90_global, 'TRUELAT1', truelat1), &
+ 'static_init_model', 'get_att TRUELAT1')
if(debug) write(*,*) ' truelat1 is ',truelat1
- call check( nf90_get_att(ncid, nf90_global, 'TRUELAT2', truelat2) )
+ call nc_check( nf90_get_att(ncid, nf90_global, 'TRUELAT2', truelat2), &
+ 'static_init_model', 'get_att TRUELAT2')
if(debug) write(*,*) ' truelat2 is ',truelat2
- call check( nf90_get_att(ncid, nf90_global, 'STAND_LON', stdlon) )
+ call nc_check( nf90_get_att(ncid, nf90_global, 'STAND_LON', stdlon), &
+ 'static_init_model', 'get_att STAND_LON')
if(debug) write(*,*) ' stdlon is ',stdlon
@@ -422,35 +446,47 @@
if(debug) write(*,*) ' scm ',wrf%dom(id)%scm
- call check( nf90_inq_varid(ncid, "P_TOP", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%p_top) )
+ call nc_check( nf90_inq_varid(ncid, "P_TOP", var_id), &
+ 'static_init_model','inq_varid P_TOP')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%p_top), &
+ 'static_init_model','get_var P_TOP')
! get 1D (z) static data defining grid levels
allocate(wrf%dom(id)%dn(1:wrf%dom(id)%bt))
- call check( nf90_inq_varid(ncid, "DN", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%dn) )
+ call nc_check( nf90_inq_varid(ncid, "DN", var_id), &
+ 'static_init_model','inq_varid DN')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%dn), &
+ 'static_init_model','get_var DN')
if(debug) write(*,*) ' dn ',wrf%dom(id)%dn
allocate(wrf%dom(id)%znu(1:wrf%dom(id)%bt))
- call check( nf90_inq_varid(ncid, "ZNU", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%znu) )
+ call nc_check( nf90_inq_varid(ncid, "ZNU", var_id), &
+ 'static_init_model','inq_varid ZNU')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%znu), &
+ 'static_init_model','get_var ZNU')
if(debug) write(*,*) ' znu is ',wrf%dom(id)%znu
allocate(wrf%dom(id)%dnw(1:wrf%dom(id)%bt))
- call check( nf90_inq_varid(ncid, "DNW", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%dnw) )
+ call nc_check( nf90_inq_varid(ncid, "DNW", var_id), &
+ 'static_init_model','inq_varid DNW')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%dnw), &
+ 'static_init_model','get_var DNW')
if(debug) write(*,*) ' dnw is ',wrf%dom(id)%dnw
allocate(wrf%dom(id)%zs(1:wrf%dom(id)%sls))
- call check( nf90_inq_varid(ncid, "ZS", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%zs) )
+ call nc_check( nf90_inq_varid(ncid, "ZS", var_id), &
+ 'static_init_model','inq_varid ZS')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%zs), &
+ 'static_init_model','get_var ZS')
! get 2D (x,y) base state for mu, latitude, longitude
allocate(wrf%dom(id)%mub(1:wrf%dom(id)%we,1:wrf%dom(id)%sn))
- call check( nf90_inq_varid(ncid, "MUB", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%mub) )
+ call nc_check( nf90_inq_varid(ncid, "MUB", var_id), &
+ 'static_init_model','inq_varid MUB')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%mub), &
+ 'static_init_model','get_var MUB')
if(debug) then
write(*,*) ' corners of mub '
write(*,*) wrf%dom(id)%mub(1,1),wrf%dom(id)%mub(wrf%dom(id)%we,1), &
@@ -459,16 +495,22 @@
end if
allocate(wrf%dom(id)%longitude(1:wrf%dom(id)%we,1:wrf%dom(id)%sn))
- call check( nf90_inq_varid(ncid, "XLONG", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%longitude) )
+ call nc_check( nf90_inq_varid(ncid, "XLONG", var_id), &
+ 'static_init_model','inq_varid XLONG')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%longitude), &
+ 'static_init_model','get_var XLONG')
allocate(wrf%dom(id)%latitude(1:wrf%dom(id)%we,1:wrf%dom(id)%sn))
- call check( nf90_inq_varid(ncid, "XLAT", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%latitude) )
+ call nc_check( nf90_inq_varid(ncid, "XLAT", var_id), &
+ 'static_init_model','inq_varid XLAT')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%latitude), &
+ 'static_init_model','get_var XLAT')
allocate(wrf%dom(id)%land(1:wrf%dom(id)%we,1:wrf%dom(id)%sn))
- call check( nf90_inq_varid(ncid, "XLAND", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%land) )
+ call nc_check( nf90_inq_varid(ncid, "XLAND", var_id), &
+ 'static_init_model','inq_varid XLAND')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%land), &
+ 'static_init_model','get_var XLAND')
if(debug) then
write(*,*) ' corners of land '
write(*,*) wrf%dom(id)%land(1,1),wrf%dom(id)%land(wrf%dom(id)%we,1), &
@@ -491,26 +533,36 @@
!nc -- MAPFACs in the x and y directions
! allocate(wrf%dom(id)%mapfac_m(1:wrf%dom(id)%we,1:wrf%dom(id)%sn))
-! call check( nf90_inq_varid(ncid, "MAPFAC_M", var_id) )
-! call check( nf90_get_var(ncid, var_id, wrf%dom(id)%mapfac_m) )
+! call nc_check( nf90_inq_varid(ncid, "MAPFAC_M", var_id), &
+! 'static_init_model','inq_varid MAPFAC_M')
+! call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%mapfac_m), &
+! 'static_init_model','get_var MAPFAC_M')
allocate(wrf%dom(id)%hgt(1:wrf%dom(id)%we,1:wrf%dom(id)%sn))
- call check( nf90_inq_varid(ncid, "HGT", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%hgt) )
+ call nc_check( nf90_inq_varid(ncid, "HGT", var_id), &
+ 'static_init_model','inq_varid HGT')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%hgt), &
+ 'static_init_model','get_var HGT')
! allocate(wrf%dom(id)%mapfac_u(1:wrf%dom(id)%wes,1:wrf%dom(id)%sn))
-! call check( nf90_inq_varid(ncid, "MAPFAC_U", var_id) )
-! call check( nf90_get_var(ncid, var_id, wrf%dom(id)%mapfac_u) )
+! call nc_check( nf90_inq_varid(ncid, "MAPFAC_U", var_id), &
+! 'static_init_model','inq_varid MAPFAC_U')
+! call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%mapfac_u), &
+! 'static_init_model','get_var MAPFAC_U')
! allocate(wrf%dom(id)%mapfac_v(1:wrf%dom(id)%we,1:wrf%dom(id)%sns))
-! call check( nf90_inq_varid(ncid, "MAPFAC_V", var_id) )
-! call check( nf90_get_var(ncid, var_id, wrf%dom(id)%mapfac_v) )
+! call nc_check( nf90_inq_varid(ncid, "MAPFAC_V", var_id), &
+! 'static_init_model','inq_varid MAPFAC_V')
+! call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%mapfac_v), &
+! 'static_init_model','get_var MAPFAC_V')
! get 3D base state geopotential
allocate(wrf%dom(id)%phb(1:wrf%dom(id)%we,1:wrf%dom(id)%sn,1:wrf%dom(id)%bts))
- call check( nf90_inq_varid(ncid, "PHB", var_id) )
- call check( nf90_get_var(ncid, var_id, wrf%dom(id)%phb) )
+ call nc_check( nf90_inq_varid(ncid, "PHB", var_id), &
+ 'static_init_model','inq_varid PHB')
+ call nc_check( nf90_get_var(ncid, var_id, wrf%dom(id)%phb), &
+ 'static_init_model','get_var PHB')
if(debug) then
write(*,*) ' corners of phb '
write(*,*) wrf%dom(id)%phb(1,1,1),wrf%dom(id)%phb(wrf%dom(id)%we,1,1), &
@@ -524,7 +576,7 @@
! close data file, we have all we need
- call check( nf90_close(ncid) )
+ call nc_check(nf90_close(ncid),'static_init_model','close wrfinput_d0'//idom)
! Initializes the map projection structure to missing values
@@ -961,18 +1013,6 @@
allocate (ens_mean(wrf%model_size))
if(debug) write(*,*) ' wrf model size is ',wrf%model_size
-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, 'static_init_model', &
- trim(nf90_strerror(istatus)), source, revision, revdate)
-
- end subroutine check
-
end subroutine static_init_model
@@ -3137,15 +3177,18 @@
! and then put into define mode.
!-----------------------------------------------------------------
-call check(nf90_Inquire(ncFileID, nDimensions, nVariables, nAttributes, unlimitedDimID))
-call check(nf90_Redef(ncFileID))
+call nc_check(nf90_Inquire(ncFileID, nDimensions, nVariables, nAttributes, unlimitedDimID), &
+ 'nc_write_model_atts','inquire')
+call nc_check(nf90_Redef(ncFileID),'nc_write_model_atts','redef')
!-----------------------------------------------------------------
! We need the dimension ID for the number of copies
!-----------------------------------------------------------------
-call check(nf90_inq_dimid(ncid=ncFileID, name="copy", dimid=MemberDimID))
-call check(nf90_inq_dimid(ncid=ncFileID, name="time", dimid= TimeDimID))
+call nc_check(nf90_inq_dimid(ncid=ncFileID, name="copy", dimid=MemberDimID), &
+ 'nc_write_model_atts','inq_dimid copy')
+call nc_check(nf90_inq_dimid(ncid=ncFileID, name="time", dimid= TimeDimID), &
+ 'nc_write_model_atts','inq_dimid time')
if ( TimeDimID /= unlimitedDimId ) then
write(errstring,*)'Time Dimension ID ',TimeDimID, &
@@ -3156,8 +3199,9 @@
!-----------------------------------------------------------------
! Define the model size, state variable dimension ... whatever ...
!-----------------------------------------------------------------
-call check(nf90_def_dim(ncid=ncFileID, name="StateVariable", &
- len=wrf%model_size, dimid = StateVarDimID))
+call nc_check(nf90_def_dim(ncid=ncFileID, name="StateVariable", &
+ len=wrf%model_size, dimid = StateVarDimID), &
+ 'nc_write_model_atts','def_dim StateVariable')
!-----------------------------------------------------------------
! Write Global Attributes
@@ -3166,11 +3210,16 @@
write(str1,'(''YYYY MM DD HH MM SS = '',i4,5(1x,i2.2))') &
values(1), values(2), values(3), values(5), values(6), values(7)
-call check(nf90_put_att(ncFileID, NF90_GLOBAL, "creation_date",str1))
-call check(nf90_put_att(ncFileID, NF90_GLOBAL, "model","WRF"))
-call check(nf90_put_att(ncFileID, NF90_GLOBAL, "model_source",source))
-call check(nf90_put_att(ncFileID, NF90_GLOBAL, "model_revision",revision))
-call check(nf90_put_att(ncFileID, NF90_GLOBAL, "model_revdate",revdate))
+call nc_check(nf90_put_att(ncFileID, NF90_GLOBAL, "creation_date",str1), &
+ 'nc_write_model_atts','put_att creation_date')
+call nc_check(nf90_put_att(ncFileID, NF90_GLOBAL, "model","WRF"), &
+ 'nc_write_model_atts','put_att model')
+call nc_check(nf90_put_att(ncFileID, NF90_GLOBAL, "model_source",source), &
+ 'nc_write_model_atts','put_att model_source')
+call nc_check(nf90_put_att(ncFileID, NF90_GLOBAL, "model_revision",revision), &
+ 'nc_write_model_atts','put_att model_revision')
+call nc_check(nf90_put_att(ncFileID, NF90_GLOBAL, "model_revdate",revdate), &
+ 'nc_write_model_atts','put_att model_revdate')
! how about namelist input? might be nice to save ...
@@ -3178,25 +3227,33 @@
! Define the dimensions IDs
!-----------------------------------------------------------------
-call check(nf90_def_dim(ncid=ncFileID, name="domain", &
- len = num_domains, dimid = DomDimID))
+call nc_check(nf90_def_dim(ncid=ncFileID, name="domain", &
+ len = num_domains, dimid = DomDimID), &
+ 'nc_write_model_atts','def_dim domain')
do id=1,num_domains
write( idom , '(I1)') id
- call check(nf90_def_dim(ncid=ncFileID, name="west_east_d0"//idom, &
- len = wrf%dom(id)%we, dimid = weDimID(id)))
- call check(nf90_def_dim(ncid=ncFileID, name="west_east_stag_d0"//idom, &
- len = wrf%dom(id)%wes, dimid = weStagDimID(id)))
- call check(nf90_def_dim(ncid=ncFileID, name="south_north_d0"//idom, &
- len = wrf%dom(id)%sn, dimid = snDimID(id)))
- call check(nf90_def_dim(ncid=ncFileID, name="south_north_stag_d0"//idom, &
- len = wrf%dom(id)%sns, dimid = snStagDimID(id)))
- call check(nf90_def_dim(ncid=ncFileID, name="bottom_top_d0"//idom, &
- len = wrf%dom(id)%bt, dimid = btDimID(id)))
- call check(nf90_def_dim(ncid=ncFileID, name="bottom_top_stag_d0"//idom, &
- len = wrf%dom(id)%bts, dimid = btStagDimID(id)))
- call check(nf90_def_dim(ncid=ncFileID, name="soil_layers_stag_d0"//idom, &
- len = wrf%dom(id)%sls, dimid = slSDimID(id)))
+ call nc_check(nf90_def_dim(ncid=ncFileID, name="west_east_d0"//idom, &
+ len = wrf%dom(id)%we, dimid = weDimID(id)), &
+ 'nc_write_model_atts','def_dim west_east_d0'//idom)
+ call nc_check(nf90_def_dim(ncid=ncFileID, name="west_east_stag_d0"//idom, &
+ len = wrf%dom(id)%wes, dimid = weStagDimID(id)), &
+ 'nc_write_model_atts','def_dim west_east_stag_d0'//idom)
+ call nc_check(nf90_def_dim(ncid=ncFileID, name="south_north_d0"//idom, &
+ len = wrf%dom(id)%sn, dimid = snDimID(id)), &
+ 'nc_write_model_atts','def_dim south_north_d0'//idom)
+ call nc_check(nf90_def_dim(ncid=ncFileID, name="south_north_stag_d0"//idom, &
+ len = wrf%dom(id)%sns, dimid = snStagDimID(id)), &
+ 'nc_write_model_atts','def_dim south_north_stag_d0'//idom)
+ call nc_check(nf90_def_dim(ncid=ncFileID, name="bottom_top_d0"//idom, &
+ len = wrf%dom(id)%bt, dimid = btDimID(id)), &
+ 'nc_write_model_atts','def_dim bottom_top_d0'//idom)
+ call nc_check(nf90_def_dim(ncid=ncFileID, name="bottom_top_stag_d0"//idom, &
+ len = wrf%dom(id)%bts, dimid = btStagDimID(id)), &
+ 'nc_write_model_atts','def_dim bottom_top_stag_d0'//idom)
+ call nc_check(nf90_def_dim(ncid=ncFileID, name="soil_layers_stag_d0"//idom, &
+ len = wrf%dom(id)%sls, dimid = slSDimID(id)), &
+ 'nc_write_model_atts','def_dim soil_layers_stag_d0'//idom)
enddo
!-----------------------------------------------------------------
@@ -3208,147 +3265,203 @@
! Commented block is from wrfinput
!-----------------------------------------------------------------
-call check(nf90_def_var(ncFileID, name="DX", xtype=nf90_real, &
- dimids= DomDimID, varid=DXVarID) )
-call check(nf90_put_att(ncFileID, DXVarID, "long_name", &
- "X HORIZONTAL RESOLUTION"))
-call check(nf90_put_att(ncFileID, DXVarID, "units", "m"))
+call nc_check(nf90_def_var(ncFileID, name="DX", xtype=nf90_real, &
+ dimids= DomDimID, varid=DXVarID), &
+ 'nc_write_model_atts','def_var DX')
+call nc_check(nf90_put_att(ncFileID, DXVarID, "long_name", "X HORIZONTAL RESOLUTION"), &
+ 'nc_write_model_atts','put_att DX long_name')
+call nc_check(nf90_put_att(ncFileID, DXVarID, "units", "m"), &
+ 'nc_write_model_atts','put_att DX units')
-call check(nf90_def_var(ncFileID, name="DY", xtype=nf90_real, &
- dimids= DomDimID, varid=DYVarID) )
-call check(nf90_put_att(ncFileID, DYVarID, "long_name", &
- "Y HORIZONTAL RESOLUTION"))
-call check(nf90_put_att(ncFileID, DYVarID, "units", "m"))
+call nc_check(nf90_def_var(ncFileID, name="DY", xtype=nf90_real, &
+ dimids= DomDimID, varid=DYVarID), &
+ 'nc_write_model_atts','def_var DY')
+call nc_check(nf90_put_att(ncFileID, DYVarID, "long_name", "Y HORIZONTAL RESOLUTION"), &
+ 'nc_write_model_atts','put_att DY long_name')
+call nc_check(nf90_put_att(ncFileID, DYVarID, "units", "m"), &
+ 'nc_write_model_atts','put_att DY units')
-call check(nf90_def_var(ncFileID, name="TRUELAT1", xtype=nf90_real, &
- dimids= DomDimID, varid=TRUELAT1VarID) )
-call check(nf90_put_att(ncFileID, TRUELAT1VarID, "long_name", &
- "first standard parallel"))
-call check(nf90_put_att(ncFileID, TRUELAT1VarID, "units", &
- "degrees, negative is south"))
+call nc_check(nf90_def_var(ncFileID, name="TRUELAT1", xtype=nf90_real, &
+ dimids= DomDimID, varid=TRUELAT1VarID), &
+ 'nc_write_model_atts','def_var TRUELAT1')
+call nc_check(nf90_put_att(ncFileID, TRUELAT1VarID, "long_name", &
+ "first standard parallel"), &
+ 'nc_write_model_atts','put_att TRUELAT1 long_name')
+call nc_check(nf90_put_att(ncFileID, TRUELAT1VarID, "units", &
+ "degrees, negative is south"), &
+ 'nc_write_model_atts','put_att TRUELAT1 units')
-call check(nf90_def_var(ncFileID, name="TRUELAT2", xtype=nf90_real, &
- dimids= DomDimID, varid=TRUELAT2VarID) )
-call check(nf90_put_att(ncFileID, TRUELAT2VarID, "long_name", &
- "second standard parallel"))
-call check(nf90_put_att(ncFileID, TRUELAT2VarID, "units", &
- "degrees, negative is south"))
+call nc_check(nf90_def_var(ncFileID, name="TRUELAT2", xtype=nf90_real, &
+ dimids= DomDimID, varid=TRUELAT2VarID), &
+ 'nc_write_model_atts','def_var TRUELAT2')
+call nc_check(nf90_put_att(ncFileID, TRUELAT2VarID, "long_name", &
+ "second standard parallel"), &
+ 'nc_write_model_atts','put_att TRUELAT2 long_name')
+call nc_check(nf90_put_att(ncFileID, TRUELAT2VarID, "units", &
+ "degrees, negative is south"), &
+ 'nc_write_model_atts','put_att TRUELAT2 units')
-call check(nf90_def_var(ncFileID, name="STAND_LON", xtype=nf90_real, &
- dimids= DomDimID, varid=STAND_LONVarID) )
-call check(nf90_put_att(ncFileID, STAND_LONVarID, "long_name", &
- "standard longitude"))
-call check(nf90_put_att(ncFileID, STAND_LONVarID, "units", &
- "degrees, negative is west"))
+call nc_check(nf90_def_var(ncFileID, name="STAND_LON", xtype=nf90_real, &
+ dimids= DomDimID, varid=STAND_LONVarID), &
+ 'nc_write_model_atts','def_var STAND_LON')
+call nc_check(nf90_put_att(ncFileID, STAND_LONVarID, "long_name", &
+ "standard longitude"), &
+ 'nc_write_model_atts','put_att STAND_LON long_name')
+call nc_check(nf90_put_att(ncFileID, STAND_LONVarID, "units", &
+ "degrees, negative is west"), &
+ 'nc_write_model_atts','put_att STAND_LON units')
-call check(nf90_def_var(ncFileID, name="CEN_LAT", xtype=nf90_real, &
- dimids= DomDimID, varid=CEN_LATVarID) )
-call check(nf90_put_att(ncFileID, CEN_LATVarID, "long_name", &
- "center latitude"))
-call check(nf90_put_att(ncFileID, CEN_LATVarID, "units", &
- "degrees, negative is south"))
+call nc_check(nf90_def_var(ncFileID, name="CEN_LAT", xtype=nf90_real, &
+ dimids= DomDimID, varid=CEN_LATVarID), &
+ 'nc_write_model_atts','def_var CEN_LAT')
+call nc_check(nf90_put_att(ncFileID, CEN_LATVarID, "long_name", &
+ "center latitude"), &
+ 'nc_write_model_atts','put_att CEN_LAT long_name')
+call nc_check(nf90_put_att(ncFileID, CEN_LATVarID, "units", &
+ "degrees, negative is south"), &
+ 'nc_write_model_atts','put_att CEN_LAT units')
-call check(nf90_def_var(ncFileID, name="CEN_LON", xtype=nf90_real, &
- dimids= DomDimID, varid=CEN_LONVarID) )
-call check(nf90_put_att(ncFileID, CEN_LONVarID, "long_name", &
- "central longitude"))
-call check(nf90_put_att(ncFileID, CEN_LONVarID, "units", &
- "degrees, negative is west"))
+call nc_check(nf90_def_var(ncFileID, name="CEN_LON", xtype=nf90_real, &
+ dimids= DomDimID, varid=CEN_LONVarID), &
+ 'nc_write_model_atts','def_var CEN_LON')
+call nc_check(nf90_put_att(ncFileID, CEN_LONVarID, "long_name", &
+ "central longitude"), &
+ 'nc_write_model_atts','put_att CEN_LON long_name')
+call nc_check(nf90_put_att(ncFileID, CEN_LONVarID, "units", &
+ "degrees, negative is west"), &
+ 'nc_write_model_atts','put_att CEN_LON units')
-call check(nf90_def_var(ncFileID, name="MAP_PROJ", xtype=nf90_real, &
- dimids= DomDimID, varid=MAP_PROJVarID) )
-call check(nf90_put_att(ncFileID, MAP_PROJVarID, "long_name", &
- "domain map projection"))
-call check(nf90_put_att(ncFileID, MAP_PROJVarID, "units", &
- "0=none, 1=Lambert, 2=polar, 3=Mercator, 5=Cylindrical, 6=Cassini"))
+call nc_check(nf90_def_var(ncFileID, name="MAP_PROJ", xtype=nf90_real, &
+ dimids= DomDimID, varid=MAP_PROJVarID), &
+ 'nc_write_model_atts','def_var MAP_PROJ')
+call nc_check(nf90_put_att(ncFileID, MAP_PROJVarID, "long_name", &
+ "domain map projection"), &
+ 'nc_write_model_atts','put_att MAP_PROJ long_name')
+call nc_check(nf90_put_att(ncFileID, MAP_PROJVarID, "units", &
+ "0=none, 1=Lambert, 2=polar, 3=Mercator, 5=Cylindrical, 6=Cassini"), &
+ 'nc_write_model_atts','put_att MAP_PROJ units')
!nc -- we need to add in code here to report the domain values for the
! boundary condition flags periodic_x and polar. Since these are
! carried internally as logicals, they will first need to be
! converted back to integers.
-call check(nf90_def_var(ncFileID, name="PERIODIC_X", xtype=nf90_int, &
- dimids= DomDimID, varid=PERIODIC_XVarID) )
-call check(nf90_put_att(ncFileID, PERIODIC_XVarID, "long_name", &
- "Longitudinal periodic b.c. flag"))
-call check(nf90_put_att(ncFileID, PERIODIC_XVarID, "units", &
- "logical: 1 = .true., 0 = .false."))
+call nc_check(nf90_def_var(ncFileID, name="PERIODIC_X", xtype=nf90_int, &
+ dimids= DomDimID, varid=PERIODIC_XVarID), &
+ 'nc_write_model_atts','def_var PERIODIC_X')
+call nc_check(nf90_put_att(ncFileID, PERIODIC_XVarID, "long_name", &
+ "Longitudinal periodic b.c. flag"), &
+ 'nc_write_model_atts','put_att PERIODIC_X long_name')
+call nc_check(nf90_put_att(ncFileID, PERIODIC_XVarID, "units", &
+ "logical: 1 = .true., 0 = .false."), &
+ 'nc_write_model_atts','put_att PERIODIC_X units')
-call check(nf90_def_var(ncFileID, name="POLAR", xtype=nf90_int, &
- dimids= DomDimID, varid=POLARVarID) )
-call check(nf90_put_att(ncFileID, POLARVarID, "long_name", &
- "Polar periodic b.c. flag"))
-call check(nf90_put_att(ncFileID, POLARVarID, "units", &
- "logical: 1 = .true., 0 = .false."))
+call nc_check(nf90_def_var(ncFileID, name="POLAR", xtype=nf90_int, &
+ dimids= DomDimID, varid=POLARVarID), &
+ 'nc_write_model_atts','def_var POLAR')
+call nc_check(nf90_put_att(ncFileID, POLARVarID, "long_name", &
+ "Polar periodic b.c. flag"), &
+ 'nc_write_model_atts','put_att POLAR long_name')
+call nc_check(nf90_put_att(ncFileID, POLARVarID, "units", &
+ "logical: 1 = .true., 0 = .false."), &
+ 'nc_write_model_atts','put_att POLAR units')
do id=1,num_domains
write( idom , '(I1)') id
- call check(nf90_def_var(ncFileID, name="DN_d0"//idom, xtype=nf90_real, &
- dimids= btDimID(id), varid=DNVarID(id)) )
- call check(nf90_put_att(ncFileID, DNVarID(id), "long_name", &
- "dn values on half (mass) levels"))
- call check(nf90_put_att(ncFileID, DNVarID(id), "units", "dimensionless"))
+ call nc_check(nf90_def_var(ncFileID, name="DN_d0"//idom, xtype=nf90_real, &
+ dimids= btDimID(id), varid=DNVarID(id)), &
+ 'nc_write_model_atts','def_var DN_do'//idom)
+ call nc_check(nf90_put_att(ncFileID, DNVarID(id), "long_name", &
+ "dn values on half (mass) levels"), &
+ 'nc_write_model_atts','put_att DN_do'//idom//' long_name')
+ call nc_check(nf90_put_att(ncFileID, DNVarID(id), "units", &
+ "dimensionless"), &
+ 'nc_write_model_atts','put_att DN_do'//idom//' units')
- call check(nf90_def_var(ncFileID, name="ZNU_d0"//idom, xtype=nf90_real, &
- dimids= btDimID(id), varid=ZNUVarID(id)) )
- call check(nf90_put_att(ncFileID, ZNUVarID(id), "long_name", &
- "eta values on half (mass) levels"))
- call check(nf90_put_att(ncFileID, ZNUVarID(id), "units", "dimensionless"))
+ call nc_check(nf90_def_var(ncFileID, name="ZNU_d0"//idom, xtype=nf90_real, &
+ dimids= btDimID(id), varid=ZNUVarID(id)), &
+ 'nc_write_model_atts','def_var ZNU_d0'//idom)
+ call nc_check(nf90_put_att(ncFileID, ZNUVarID(id), "long_name", &
+ "eta values on half (mass) levels"), &
+ 'nc_write_model_atts','put_att ZNU_d0'//idom//' long_name')
+ call nc_check(nf90_put_att(ncFileID, ZNUVarID(id), "units", &
+ "dimensionless"), &
+ 'nc_write_model_atts','put_att ZNU_d0'//idom//' units')
- call check(nf90_def_var(ncFileID, name="DNW_d0"//idom, xtype=nf90_real, &
- dimids= btDimID(id), varid=DNWVarID(id)) )
- call check(nf90_put_att(ncFileID, DNWVarID(id), "long_name", &
- "dn values on full (w) levels"))
- call check(nf90_put_att(ncFileID, DNWVarID(id), "units", "dimensionless"))
+ call nc_check(nf90_def_var(ncFileID, name="DNW_d0"//idom, xtype=nf90_real, &
+ dimids= btDimID(id), varid=DNWVarID(id)), &
+ 'nc_write_model_atts','def_var DNW_d0'//idom)
+ call nc_check(nf90_put_att(ncFileID, DNWVarID(id), "long_name", &
+ "dn values on full (w) levels"), &
+ 'nc_write_model_atts','def_var DNW_d0'//idom//' long_name')
+ call nc_check(nf90_put_att(ncFileID, DNWVarID(id), "units", &
+ "dimensionless"), &
+ 'nc_write_model_atts','def_var DNW_d0'//idom//' units')
!
! float MUB(Time, south_north, west_east) ;
! MUB:FieldType = 104 ;
! MUB:MemoryOrder = "XY " ;
! MUB:stagger = "" ;
- call check(nf90_def_var(ncFileID, name="MUB_d0"//idom, xtype=nf90_real, &
- dimids= (/ weDimID(id), snDimID(id) /), varid=MubVarID(id)) )
- call check(nf90_put_att(ncFileID, MubVarID(id), "long_name", &
- "base state dry air mass in column"))
- call check(nf90_put_att(ncFileID, MubVarID(id), "units", "Pa"))
+ call nc_check(nf90_def_var(ncFileID, name="MUB_d0"//idom, xtype=nf90_real, &
+ dimids= (/ weDimID(id), snDimID(id) /), varid=MubVarID(id)), &
+ 'nc_write_model_atts','def_var MUB_d0'//idom)
+ call nc_check(nf90_put_att(ncFileID, MubVarID(id), "long_name", &
+ "base state dry air mass in column"), &
+ 'nc_write_model_atts','put_att MUB_d0'//idom//' long_name')
+ call nc_check(nf90_put_att(ncFileID, MubVarID(id), "units", "Pa"), &
+ 'nc_write_model_atts','put_att MUB_d0'//idom//' long_name')
! Longitudes
! float XLONG(Time, south_north, west_east) ;
! XLONG:FieldType = 104 ;
! XLONG:MemoryOrder = "XY " ;
! XLONG:stagger = "" ;
- call check(nf90_def_var(ncFileID, name="XLON_d0"//idom, xtype=nf90_real, &
- dimids= (/ weDimID(id), snDimID(id) /), varid=LonVarID(id)) )
- call check(nf90_put_att(ncFileID, LonVarID(id), "long_name", "longitude"))
- call check(nf90_put_att(ncFileID, LonVarID(id), "units", "degrees_east"))
- call check(nf90_put_att(ncFileID, LonVarID(id), "valid_range", &
- (/ -180.0_r8, 180.0_r8 /)))
- call check(nf90_put_att(ncFileID, LonVarID(id), "description", &
- "LONGITUDE, WEST IS NEGATIVE"))
+ call nc_check(nf90_def_var(ncFileID, name="XLON_d0"//idom, xtype=nf90_real, &
+ dimids= (/ weDimID(id), snDimID(id) /), varid=LonVarID(id)), &
+ 'nc_write_model_atts','def_var XLON_d0'//idom)
+ call nc_check(nf90_put_att(ncFileID, LonVarID(id), "long_name", "longitude"), &
+ 'nc_write_model_atts','put_att XLON_d0'//idom//' long_name')
+ call nc_check(nf90_put_att(ncFileID, LonVarID(id), "units", "degrees_east"), &
+ 'nc_write_model_atts','put_att XLON_d0'//idom//' units')
+ call nc_check(nf90_put_att(ncFileID, LonVarID(id), "valid_range", &
+ (/ -180.0_r8, 180.0_r8 /)), &
+ 'nc_write_model_atts','put_att XLON_d0'//idom//' valid_range')
+ call nc_check(nf90_put_att(ncFileID, LonVarID(id), "description", &
+ "LONGITUDE, WEST IS NEGATIVE"), &
+ 'nc_write_model_atts','put_att XLON_d0'//idom//' description')
! Latitudes
! float XLAT(Time, south_north, west_east) ;
! XLAT:FieldType = 104 ;
! XLAT:MemoryOrder = "XY " ;
! XLAT:stagger = "" ;
- call check(nf90_def_var(ncFileID, name="XLAT_d0"//idom, xtype=nf90_real, &
- dimids=(/ weDimID(id), snDimID(id) /), varid=LatVarID(id)) )
- call check(nf90_put_att(ncFileID, LatVarID(id), "long_name", "latitude"))
- call check(nf90_put_att(ncFileID, LatVarID(id), "units", "degrees_north"))
- call check(nf90_put_att(ncFileID, LatVarID(id), "valid_range", &
- (/ -90.0_r8, 90.0_r8 /)))
- call check(nf90_put_att(ncFileID, LatVarID(id), "description", &
- "LATITUDE, SOUTH IS NEGATIVE"))
+ call nc_check(nf90_def_var(ncFileID, name="XLAT_d0"//idom, xtype=nf90_real, &
+ dimids=(/ weDimID(id), snDimID(id) /), varid=LatVarID(id)), &
+ 'nc_write_model_atts','def_var XLAT_d0'//idom)
+ call nc_check(nf90_put_att(ncFileID, LatVarID(id), "long_name", "latitude"), &
+ 'nc_write_model_atts','put_att XLAT_d0'//idom//' long_name')
+ call nc_check(nf90_put_att(ncFileID, LatVarID(id), "units", "degrees_north"), &
+ 'nc_write_model_atts','put_att XLAT_d0'//idom//' units')
+ call nc_check(nf90_put_att(ncFileID, LatVarID(id), "valid_range", &
+ (/ -90.0_r8, 90.0_r8 /)), &
+ 'nc_write_model_atts','put_att XLAT_d0'//idom//' valid_range')
+ call nc_check(nf90_put_att(ncFileID, LatVarID(id), "description", &
+ "LATITUDE, SOUTH IS NEGATIVE"), &
+ 'nc_write_model_atts','put_att XLAT_d0'//idom//' description')
! grid levels
- call check(nf90_def_var(ncFileID, name="level_d0"//idom, xtype=nf90_short, &
- dimids=btDimID(id), varid=ilevVarID(id)) )
- call check(nf90_put_att(ncFileID, ilevVarID(id), "long_name", &
- "placeholder for level"))
- call check(nf90_put_att(ncFileID, ilevVarID(id), "units", &
- "at this point, indexical"))
+ call nc_check(nf90_def_var(ncFileID, name="level_d0"//idom, xtype=nf90_short, &
+ dimids=btDimID(id), varid=ilevVarID(id)), &
+ 'nc_write_model_atts','def_var level_d0'//idom)
+ call nc_check(nf90_put_att(ncFileID, ilevVarID(id), "long_name", &
+ "placeholder for level"), &
+ 'nc_write_model_atts','put_att level_d0'//idom//' long_name')
+ call nc_check(nf90_put_att(ncFileID, ilevVarID(id), "units", &
+ "at this point, indexical"), &
+ 'nc_write_model_atts','put_att level_d0'//idom//' units')
! Land Mask
! float XLAND(Time, south_north, west_east) ;
@@ -3356,13 +3469,18 @@
! XLAND:MemoryOrder = "XY " ;
! XLAND:units = "NA" ;
! XLAND:stagger = "" ;
- call check(nf90_def_var(ncFileID, name="XLAND_d0"//idom, xtype=nf90_short, &
- dimids= (/ weDimID(id), snDimID(id) /), varid=XlandVarID(id)) )
- call check(nf90_put_att(ncFileID, XlandVarID(id), "long_name", "land mask"))
- call check(nf90_put_att(ncFileID, XlandVarID(id), "units", "NA"))
- call check(nf90_put_att(ncFileID, XlandVarID(id), "valid_range", (/ 1, 2 /)))
- call check(nf90_put_att(ncFileID, XlandVarID(id), "description", &
- "1 = LAND, 2 = WATER"))
+ call nc_check(nf90_def_var(ncFileID, name="XLAND_d0"//idom, xtype=nf90_short, &
+ dimids= (/ weDimID(id), snDimID(id) /), varid=XlandVarID(id)), &
+ 'nc_write_model_atts','def_var XLAND_d0'//idom)
+ call nc_check(nf90_put_att(ncFileID, XlandVarID(id), "long_name", "land mask"), &
+ 'nc_write_model_atts','put_att XLAND_d0'//idom//' long_name')
+ call nc_check(nf90_put_att(ncFileID, XlandVarID(id), "units", "NA"), &
+ 'nc_write_model_atts','put_att XLAND_d0'//idom//' units')
+ call nc_check(nf90_put_att(ncFileID, XlandVarID(id), "valid_range", (/ 1, 2 /)), &
+ 'nc_write_model_atts','put_att XLAND_d0'//idom//' valid_range')
+ call nc_check(nf90_put_att(ncFileID, XlandVarID(id), "description", &
+ "1 = LAND, 2 = WATER"), &
+ 'nc_write_model_atts','put_att XLAND_d0'//idom//' description')
!nc -- eliminated the reading in of MAPFACs since global WRF will have different
!nc -- MAPFACs in the x and y directions
@@ -3372,51 +3490,68 @@
! MAPFAC_M:FieldType = 104 ;
! MAPFAC_M:MemoryOrder = "XY " ;
! MAPFAC_M:stagger = "" ;
-! call check(nf90_def_var(ncFileID, name="MAPFAC_M_d0"//idom, xtype=nf90_real, &
-! dimids= (/ weDimID(id), snDimID(id) /), varid=MapFacMVarID(id)) )
-! call check(nf90_put_att(ncFileID, MapFacMVarID(id), "long_name", &
-! "Map scale factor on mass grid"))
-! call check(nf90_put_att(ncFileID, MapFacMVarID(id), "units", "dimensionless"))
+! call nc_check(nf90_def_var(ncFileID, name="MAPFAC_M_d0"//idom, xtype=nf90_real, &
+! dimids= (/ weDimID(id), snDimID(id) /), varid=MapFacMVarID(id)), &
+! 'nc_write_model_atts','def_var MAPFAC_M_d0'//idom)
+! call nc_check(nf90_put_att(ncFileID, MapFacMVarID(id), "long_name", &
+! "Map scale factor on mass grid"), &
+! 'nc_write_model_atts','put_att MAPFAC_M_d0'//idom//' long_name')
+! call nc_check(nf90_put_att(ncFileID, MapFacMVarID(id), "units", "dimensionless"), &
@@ Diff output truncated at 40000 characters. @@
More information about the Dart-dev
mailing list