[Dart-dev] [4460] DART/trunk/models/NCOMMAS: ncommas_to_dart actually runs ... but I hav
nancy at ucar.edu
nancy at ucar.edu
Tue Aug 3 17:52:27 MDT 2010
Revision: 4460
Author: thoar
Date: 2010-08-03 17:52:27 -0600 (Tue, 03 Aug 2010)
Log Message:
-----------
ncommas_to_dart actually runs ... but I have not tested
any of the routines that MOVE the data.
Modified Paths:
--------------
DART/trunk/models/NCOMMAS/model_mod.f90
DART/trunk/models/NCOMMAS/ncommas_to_dart.f90
DART/trunk/models/NCOMMAS/work/input.nml
-------------- next part --------------
Modified: DART/trunk/models/NCOMMAS/model_mod.f90
===================================================================
--- DART/trunk/models/NCOMMAS/model_mod.f90 2010-08-03 23:13:38 UTC (rev 4459)
+++ DART/trunk/models/NCOMMAS/model_mod.f90 2010-08-03 23:52:27 UTC (rev 4460)
@@ -50,14 +50,14 @@
KIND_ICE_MIXING_RATIO, & ! index 11
KIND_SNOW_MIXING_RATIO, & ! index 12
KIND_GRAUPEL_MIXING_RATIO, & ! index 13
- get_obs_kind_name
+ get_raw_obs_kind_name
use mpi_utilities_mod, only: my_task_id
use random_seq_mod, only: random_seq_type, init_random_seq, random_gaussian
-use dart_ncommas_mod, only: set_model_time_step, grid_type, &
- get_grid_dims, get_grid, get_base_time, get_state_time, &
+use dart_ncommas_mod, only: set_model_time_step, grid_type, get_grid, &
+ get_grid_dims, get_base_time, get_state_time, &
get_ncommas_restart_filename, write_ncommas_namelist
use typesizes
@@ -501,10 +501,11 @@
progvar(ivar)%indexN = index1 + varsize - 1
index1 = index1 + varsize ! sets up for next variable
progvar(ivar)%dart_kind = progvarkinds(ivar)
- progvar(ivar)%kind_string = get_obs_kind_name(progvar(ivar)%dart_kind)
+ progvar(ivar)%kind_string = get_raw_obs_kind_name(progvar(ivar)%dart_kind)
if (do_output()) then
- write(logfileunit,*) ivar,trim(progvar(ivar)%varname)
+ write(logfileunit,*)
+ write(logfileunit,*) trim(progvar(ivar)%varname),' variable number ',ivar
write(logfileunit,*) ' long_name ',trim(progvar(ivar)%long_name)
write(logfileunit,*) ' units ',trim(progvar(ivar)%units)
write(logfileunit,*) ' numdims ',progvar(ivar)%numdims
@@ -515,7 +516,8 @@
write(logfileunit,*) ' dart_kind ',progvar(ivar)%dart_kind
write(logfileunit,*) ' kind_string ',progvar(ivar)%kind_string
- write( * ,*) ivar,trim(progvar(ivar)%varname)
+ write( * ,*)
+ write( * ,*) trim(progvar(ivar)%varname),' variable number ',ivar
write( * ,*) ' long_name ',trim(progvar(ivar)%long_name)
write( * ,*) ' units ',trim(progvar(ivar)%units)
write( * ,*) ' numdims ',progvar(ivar)%numdims
@@ -1109,13 +1111,18 @@
integer, intent(in) :: timeindex
integer :: ierr ! return value of function
+integer, dimension(NF90_MAX_VAR_DIMS) :: dimIDs
+character(len=NF90_MAX_NAME) :: varname
integer :: nDimensions, nVariables, nAttributes, unlimitedDimID
-integer :: VarID
+integer :: i, ivar, VarID, numdims, dimlen
-real(r8), dimension(nxc,nyc,nzc) :: data_3d
-real(r8), dimension(nxc,nyc) :: data_2d
-character(len=128) :: filename
+real(r8), allocatable, dimension(:) :: data_1d
+real(r8), allocatable, dimension(:,:) :: data_2d
+real(r8), allocatable, dimension(:,:,:) :: data_3d
+real(r8), allocatable, dimension(:,:,:,:) :: data_4d
+character(len=128) :: filename
+
if ( .not. module_initialized ) call static_init_model
ierr = -1 ! assume things go poorly
@@ -1148,44 +1155,50 @@
!----------------------------------------------------------------------------
! We need to process the prognostic variables.
! Replace missing values (0.0) with netcdf missing value.
- ! Staggered grid causes some logistical problems.
!----------------------------------------------------------------------------
- call vector_to_prog_var(statevec, 0, data_3d)
- where (data_3d == 0.0_r8) data_3d = NF90_FILL_REAL
- call nc_check(NF90_inq_varid(ncFileID, 'SALT', VarID), &
- 'nc_write_model_vars', 'S inq_varid '//trim(filename))
- call nc_check(nf90_put_var(ncFileID,VarID,data_3d,start=(/1,1,1,copyindex,timeindex/)),&
- 'nc_write_model_vars', 'S put_var '//trim(filename))
+ do ivar = 1,nfields
- call vector_to_prog_var(statevec, 0, data_3d)
- where (data_3d == 0.0_r8) data_3d = NF90_FILL_REAL
- call nc_check(NF90_inq_varid(ncFileID, 'TEMP', VarID), &
- 'nc_write_model_vars', 'T inq_varid '//trim(filename))
- call nc_check(nf90_put_var(ncFileID,VarID,data_3d,start=(/1,1,1,copyindex,timeindex/)),&
- 'nc_write_model_vars', 'T put_var '//trim(filename))
+ varname = trim(progvar(ivar)%varname)
+ string2 = trim(filename)//' '//trim(varname)
- call vector_to_prog_var(statevec, 0, data_3d)
- where (data_3d == 0.0_r8) data_3d = NF90_FILL_REAL
- call nc_check(NF90_inq_varid(ncFileID, 'UVEL', VarID), &
- 'nc_write_model_vars', 'U inq_varid '//trim(filename))
- call nc_check(nf90_put_var(ncFileID,VarID,data_3d,start=(/1,1,1,copyindex,timeindex/)),&
- 'nc_write_model_vars', 'U put_var '//trim(filename))
+ ! ensure netCDF variable is conformable
+ ! the TIME (unlimited) dimension will be skipped
- call vector_to_prog_var(statevec, 0, data_3d)
- where (data_3d == 0.0_r8) data_3d = NF90_FILL_REAL
- call nc_check(NF90_inq_varid(ncFileID, 'VVEL', VarID), &
- 'nc_write_model_vars', 'V inq_varid '//trim(filename))
- call nc_check(nf90_put_var(ncFileID,VarID,data_3d,start=(/1,1,1,copyindex,timeindex/)),&
- 'nc_write_model_vars', 'V put_var '//trim(filename))
+ call nc_check(nf90_inq_varid(ncFileID, varname, VarID), &
+ 'nc_write_model_vars', 'inq_varid '//trim(string2))
- call vector_to_prog_var(statevec, 0, data_2d)
- where (data_2d == 0.0_r8) data_2d = NF90_FILL_REAL
- call nc_check(NF90_inq_varid(ncFileID, 'PSURF', VarID), &
- 'nc_write_model_vars', 'PSURF inq_varid '//trim(filename))
- call nc_check(nf90_put_var(ncFileID,VarID,data_2d,start=(/1,1,copyindex,timeindex/)),&
- 'nc_write_model_vars', 'PSURF put_var '//trim(filename))
+ call nc_check(nf90_inquire_variable(ncFileID,VarId,dimids=dimIDs,ndims=numdims), &
+ 'nc_write_model_vars', 'inquire '//trim(string2))
+ ConformableDimensions : do i = 1,numdims
+ if ( dimIDs(i) == unlimitedDimID ) cycle ConformableDimensions
+
+ write(string1,'(''inquire dimension'',i2,A)') i,trim(string2)
+ call nc_check(nf90_inquire_dimension(ncFileID, dimIDs(i), len=dimlen), &
+ 'nc_write_model_vars', string1)
+
+ if ( dimlen /= progvar(ivar)%dimlens(i) ) then
+ write(string1,*) trim(string2),'dim/dimlen',i,dimlen,'not',progvar(ivar)%dimlens(i)
+ call error_handler(E_ERR,'nc_write_model_vars',string1,source,revision,revdate)
+ endif
+ enddo ConformableDimensions
+
+! if ( progvar(ivar)%numdims == 1) then
+! elseif ( progvar(ivar)%numdims == 1) then
+! else
+! endif
+
+! call vector_to_prog_var(statevec, S_index, data_3d)
+! where (data_3d == 0.0_r8) data_3d = NF90_FILL_REAL
+! call nc_check(NF90_inq_varid(ncFileID, 'SALT', VarID), &
+! 'nc_write_model_vars', 'S inq_varid '//trim(filename))
+! call nc_check(nf90_put_var(ncFileID,VarID,data_3d,start=(/1,1,1,copyindex,timeindex/)),&
+! 'nc_write_model_vars', 'S put_var '//trim(filename))
+
+ enddo
+
+
endif
!-------------------------------------------------------------------------------
@@ -1402,8 +1415,7 @@
call error_handler(E_ERR,'restart_file_to_sv',string1,source,revision,revdate)
endif
-
-call nc_check(nf90_open(trim(filename), nf90_nowrite, ncid), &
+call nc_check(nf90_open(trim(filename), NF90_NOWRITE, ncid), &
'restart_file_to_sv','open '//trim(filename))
model_time = get_state_time(ncid, filename)
@@ -1413,7 +1425,6 @@
if (do_output()) &
call print_date(model_time,'date for restart file '//trim(filename))
-
! Start counting and filling the state vector one item at a time,
! repacking the Nd arrays into a single 1d list of numbers.
Modified: DART/trunk/models/NCOMMAS/ncommas_to_dart.f90
===================================================================
--- DART/trunk/models/NCOMMAS/ncommas_to_dart.f90 2010-08-03 23:13:38 UTC (rev 4459)
+++ DART/trunk/models/NCOMMAS/ncommas_to_dart.f90 2010-08-03 23:52:27 UTC (rev 4460)
@@ -57,10 +57,10 @@
! global storage
!----------------------------------------------------------------------
+logical :: verbose = .TRUE.
integer :: io, iunit, x_size
type(time_type) :: model_time
real(r8), allocatable :: statevector(:)
-logical :: verbose = .FALSE.
!----------------------------------------------------------------------
Modified: DART/trunk/models/NCOMMAS/work/input.nml
===================================================================
--- DART/trunk/models/NCOMMAS/work/input.nml 2010-08-03 23:13:38 UTC (rev 4459)
+++ DART/trunk/models/NCOMMAS/work/input.nml 2010-08-03 23:52:27 UTC (rev 4460)
@@ -154,7 +154,7 @@
&ncommas_to_dart_nml
- ncommas_to_dart_output_file = 'dart.ud',
+ ncommas_to_dart_output_file = 'dart.ud'
/
More information about the Dart-dev
mailing list