[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