[Dart-dev] [4473] DART/trunk/models/NCOMMAS: The netcdf routines in model_mod. f90 are good to go.
nancy at ucar.edu
nancy at ucar.edu
Tue Aug 10 11:44:41 MDT 2010
Revision: 4473
Author: thoar
Date: 2010-08-10 11:44:41 -0600 (Tue, 10 Aug 2010)
Log Message:
-----------
The netcdf routines in model_mod.f90 are good to go.
I compared the True_State.nc against the original wk01.000.nc
and there were no differences. By extension, this also clears
ncommas_to_dart.f90 since it was used to convert wk01.000.nc
into perfect_ics to start off perfect_model_obs.
Modified Paths:
--------------
DART/trunk/models/NCOMMAS/model_mod.f90
Added Paths:
-----------
DART/trunk/models/NCOMMAS/matlab/Check_ncommas_to_dart.m
-------------- next part --------------
Added: DART/trunk/models/NCOMMAS/matlab/Check_ncommas_to_dart.m
===================================================================
--- DART/trunk/models/NCOMMAS/matlab/Check_ncommas_to_dart.m (rev 0)
+++ DART/trunk/models/NCOMMAS/matlab/Check_ncommas_to_dart.m 2010-08-10 17:44:41 UTC (rev 4473)
@@ -0,0 +1,66 @@
+function [dart modl] = Check_ncommas_to_dart(modlfile, dartfile )
+%% Check_ncommas_to_dart : check ncommas_to_dart.f90 ... the conversion of a NCOMMAS restart to a DART state vector file.
+%
+% modlfile = 'ncommas_restart.nc';
+% dartfile = 'True_State.nc';
+%
+% [dart modl] = Check_ncommas_to_dart(modlfile, dartfile );
+
+%% DART software - Copyright \xA9 2004 - 2010 UCAR. This open source software is
+% provided by UCAR, "as is", without charge, subject to all terms of use at
+% http://www.image.ucar.edu/DAReS/DART/DART_download
+%
+% <next few lines under version control, do not edit>
+% $URL$
+% $Id$
+% $Revision$
+% $Date$
+
+% Read the original NCOMMAS file values.
+if (exist(modlfile,'file') ~= 2)
+ error('NCOMMAS file %s does not exist.',modlfile)
+end
+if (exist(dartfile,'file') ~= 2)
+ error('DART file %s does not exist.',dartfile)
+end
+
+iyear = nc_attget(modlfile,nc_global,'YEAR');
+imonth = nc_attget(modlfile,nc_global,'MONTH');
+iday = nc_attget(modlfile,nc_global,'DAY');
+ihour = nc_attget(modlfile,nc_global,'HOUR');
+iminute = nc_attget(modlfile,nc_global,'MINUTE');
+isecond = nc_attget(modlfile,nc_global,'SECOND');
+
+fprintf('NCOMMAS year month day hour minute second %d %d %d %d %d %d\n', ...
+ iyear,imonth,iday,ihour,iminute,isecond);
+
+% The nc_varget() function returns the variables with the fastest
+% varying dimension on the right. This is opposite to the Fortran
+% convention of the fastest varying dimension on the left ... so
+% one of the variables must be permuted in order to be compared.
+
+U = nc_varget(modlfile, 'U'); modl.U = permute( U, [4 3 2 1]);
+V = nc_varget(modlfile, 'V'); modl.V = permute( V, [4 3 2 1]);
+W = nc_varget(modlfile, 'W'); modl.W = permute( W, [4 3 2 1]);
+QS = nc_varget(modlfile, 'QS'); modl.QS = permute(QS, [4 3 2 1]);
+
+disp(sprintf('modl.W min/max are %0.8g %0.8g',min(modl.W(:)),max(modl.W(:))))
+
+[nx ny nz nt] = size(modl.U);
+fprintf('vert dimension size is %d\n',nz)
+fprintf('N-S dimension size is %d\n',ny)
+fprintf('E-W dimension size is %d\n',nx)
+
+% And now for the DART-generated netCDF files - that have the copy dimension
+% nc_varget squeezes out singleton dimensions ...
+
+dU = nc_varget(dartfile, 'U'); dart.U = permute( dU, [3 2 1]);
+dV = nc_varget(dartfile, 'V'); dart.V = permute( dV, [3 2 1]);
+dW = nc_varget(dartfile, 'W'); dart.W = permute( dW, [3 2 1]);
+dQS = nc_varget(dartfile, 'QS'); dart.QS = permute(dQS, [3 2 1]);
+
+ Udiffs = modl.U(:,:,:,2) - dart.U; [min( Udiffs(:)) max( Udiffs(:))]
+ Vdiffs = modl.V(:,:,:,2) - dart.V; [min( Vdiffs(:)) max( Vdiffs(:))]
+ Wdiffs = modl.W(:,:,:,2) - dart.W; [min( Wdiffs(:)) max( Wdiffs(:))]
+QSdiffs = modl.QS(:,:,:,2) - dart.QS; [min(QSdiffs(:)) max(QSdiffs(:))]
+
Property changes on: DART/trunk/models/NCOMMAS/matlab/Check_ncommas_to_dart.m
___________________________________________________________________
Added: svn:mime-type
+ text/x-matlab
Added: svn:keywords
+ Date Rev Author HeadURL Id
Added: svn:eol-style
+ native
Modified: DART/trunk/models/NCOMMAS/model_mod.f90
===================================================================
--- DART/trunk/models/NCOMMAS/model_mod.f90 2010-08-10 03:22:10 UTC (rev 4472)
+++ DART/trunk/models/NCOMMAS/model_mod.f90 2010-08-10 17:44:41 UTC (rev 4473)
@@ -732,6 +732,8 @@
integer :: ulonVarID, ulatVarID
integer :: vlonVarID, vlatVarID
integer :: wlonVarID, wlatVarID
+integer :: XEVarID, XCVarID
+integer :: YEVarID, YCVarID
integer :: ZEVarID, ZCVarID
! for the prognostic variables
@@ -1003,32 +1005,88 @@
call nc_check(nf90_put_att(ncFileID, wlatVarID, 'valid_range', (/ -90.0_r8, 90.0_r8 /)), &
'nc_write_model_atts', 'wlat valid_range '//trim(filename))
- ! heights
- call nc_check(nf90_def_var(ncFileID,name='ZE', xtype=nf90_real, &
- dimids=NzeDimID, varid= ZEVarID), &
- 'nc_write_model_atts', 'ZE def_var '//trim(filename))
- call nc_check(nf90_put_att(ncFileID, ZEVarID, 'long_name', 'height at grid edges'), &
- 'nc_write_model_atts', 'ZE long_name '//trim(filename))
- call nc_check(nf90_put_att(ncFileID, ZEVarID, 'cartesian_axis', 'Z'), &
- 'nc_write_model_atts', 'ZE cartesian_axis '//trim(filename))
- call nc_check(nf90_put_att(ncFileID, ZEVarID, 'units', 'meters'), &
- 'nc_write_model_atts', 'ZE units '//trim(filename))
- call nc_check(nf90_put_att(ncFileID, ZEVarID, 'positive', 'up'), &
- 'nc_write_model_atts', 'ZE units '//trim(filename))
+ ! X-Grid Centers
+ call nc_check(nf90_def_var(ncFileID,name='XC',xtype=nf90_real, &
+ dimids=NxcDimID,varid=XCVarID), &
+ 'nc_write_model_atts', 'XC def_var '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, XCVarID, 'type', 'x1d'), &
+ 'nc_write_model_atts','XC type '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, XCVarID, 'long_name', 'SCALAR GRID POSITION IN X'), &
+ 'nc_write_model_atts','XC long_name '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, XCVarID, 'units', 'meters'), &
+ 'nc_write_model_atts','XC units '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, XCVarID, 'cartesian_axis', 'X'), &
+ 'nc_write_model_atts','XC cartesian_axis '//trim(filename))
- ! heights
+ ! X-Grid Edges
+ call nc_check(nf90_def_var(ncFileID,name='XE', xtype=nf90_real, &
+ dimids=NxeDimID, varid= XEVarID), &
+ 'nc_write_model_atts', 'XE def_var '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, XEVarID, 'type', 'x1d'), &
+ 'nc_write_model_atts','XE type '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, XEVarID, 'long_name', 'STAGGERED GRID POSITION IN X'), &
+ 'nc_write_model_atts','XE long_name '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, XEVarID, 'units', 'meters'), &
+ 'nc_write_model_atts','XE units '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, XEVarID, 'cartesian_axis', 'X'), &
+ 'nc_write_model_atts','XE cartesian_axis '//trim(filename))
+
+ ! Y-Grid Centers
+ call nc_check(nf90_def_var(ncFileID,name='YC', xtype=nf90_real, &
+ dimids=NycDimID, varid= YCVarID), &
+ 'nc_write_model_atts', 'YC def_var '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, YCVarID, 'type', 'y1d'), &
+ 'nc_write_model_atts','YC type '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, YCVarID, 'long_name', 'SCALAR GRID POSITION IN Y'), &
+ 'nc_write_model_atts','YC long_name '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, YCVarID, 'units', 'meters'), &
+ 'nc_write_model_atts','YC units '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, YCVarID, 'cartesian_axis', 'Y'), &
+ 'nc_write_model_atts','YC cartesian_axis '//trim(filename))
+
+ ! Y-Grid Edges
+ call nc_check(nf90_def_var(ncFileID,name='YE',xtype=nf90_real, &
+ dimids=NyeDimID,varid=YEVarID), &
+ 'nc_write_model_atts', 'YE def_var '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, YEVarID, 'type', 'y1d'), &
+ 'nc_write_model_atts','YE type '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, YEVarID, 'long_name', 'STAGGERED GRID POSITION IN Y'), &
+ 'nc_write_model_atts','YE long_name '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, YEVarID, 'units', 'meters'), &
+ 'nc_write_model_atts','YE units '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, YEVarID, 'cartesian_axis', 'Y'), &
+ 'nc_write_model_atts','YE cartesian_axis '//trim(filename))
+
+ ! Z-Grid Centers
call nc_check(nf90_def_var(ncFileID,name='ZC',xtype=nf90_real, &
- dimids=NzcDimID,varid=ZCVarID), &
- 'nc_write_model_atts', 'ZC def_var '//trim(filename))
- call nc_check(nf90_put_att(ncFileID, ZCVarID, 'long_name', 'height at grid centroids'), &
- 'nc_write_model_atts', 'ZC long_name '//trim(filename))
- call nc_check(nf90_put_att(ncFileID, ZCVarID, 'cartesian_axis', 'Z'), &
- 'nc_write_model_atts', 'ZC cartesian_axis '//trim(filename))
+ dimids=NzcDimID,varid=ZCVarID), &
+ 'nc_write_model_atts', 'ZC def_var '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, ZCVarID, 'type', 'z1d'), &
+ 'nc_write_model_atts','ZC type '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, ZCVarID, 'long_name', 'SCALAR GRID POSITION IN Z'), &
+ 'nc_write_model_atts','ZC long_name '//trim(filename))
call nc_check(nf90_put_att(ncFileID, ZCVarID, 'units', 'meters'), &
- 'nc_write_model_atts', 'ZC units '//trim(filename))
+ 'nc_write_model_atts','ZC units '//trim(filename))
call nc_check(nf90_put_att(ncFileID, ZCVarID, 'positive', 'up'), &
- 'nc_write_model_atts', 'ZC units '//trim(filename))
+ 'nc_write_model_atts','ZC units '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, ZCVarID, 'cartesian_axis', 'Z'), &
+ 'nc_write_model_atts','ZC cartesian_axis '//trim(filename))
+ ! Z-Grid Edges
+ call nc_check(nf90_def_var(ncFileID,name='ZE', xtype=nf90_real, &
+ dimids=NzeDimID, varid= ZEVarID), &
+ 'nc_write_model_atts', 'ZE def_var '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, ZEVarID, 'type', 'z1d'), &
+ 'nc_write_model_atts','ZE type '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, ZEVarID, 'long_name', 'STAGGERED GRID POSITION IN Z'), &
+ 'nc_write_model_atts','ZE long_name '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, ZEVarID, 'units', 'meters'), &
+ 'nc_write_model_atts','ZE units '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, ZEVarID, 'positive', 'up'), &
+ 'nc_write_model_atts','ZE units '//trim(filename))
+ call nc_check(nf90_put_att(ncFileID, ZEVarID, 'cartesian_axis', 'Z'), &
+ 'nc_write_model_atts','ZE cartesian_axis '//trim(filename))
+
!----------------------------------------------------------------------------
! Create the (empty) Prognostic Variables and the Attributes
!----------------------------------------------------------------------------
@@ -1088,6 +1146,16 @@
call nc_check(nf90_put_var(ncFileID, wlatVarID, WLAT ), &
'nc_write_model_atts', 'WLAT put_var '//trim(filename))
+ call nc_check(nf90_put_var(ncFileID, XCVarID, XC ), &
+ 'nc_write_model_atts', 'XC put_var '//trim(filename))
+ call nc_check(nf90_put_var(ncFileID, XEVarID, XE ), &
+ 'nc_write_model_atts', 'XE put_var '//trim(filename))
+
+ call nc_check(nf90_put_var(ncFileID, YCVarID, YC ), &
+ 'nc_write_model_atts', 'YC put_var '//trim(filename))
+ call nc_check(nf90_put_var(ncFileID, YEVarID, YE ), &
+ 'nc_write_model_atts', 'YE put_var '//trim(filename))
+
call nc_check(nf90_put_var(ncFileID, ZCVarID, ZC ), &
'nc_write_model_atts', 'ZC put_var '//trim(filename))
call nc_check(nf90_put_var(ncFileID, ZEVarID, ZE ), &
More information about the Dart-dev
mailing list