!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
module io_ccsm 1,11
!BOP
! !MODULE: io_ccsm
!
! !DESCRIPTION:
! This module provides a kludge interface for writing nonstandard
! ccsm fields (eg, variables that are not on lat/lon grids and
! thus are unable to be defined via the construct_io_field function)
! to ccsm netCDF output files
!
! !REVISION HISTORY:
! SVN:$Id: io_ccsm.F90 9555 2008-04-17 19:30:26Z njn01 $
!
!
! !USES:
use kinds_mod
use blocks
use communicate
use broadcast
use exit_mod
use domain
use constants
use io_netcdf
use io_binary
use io_types
use io_tools
implicit none
public ! to get io_types without having to explicitly use io_types
! module directly
save
! !PUBLIC MEMBER FUNCTIONS:
public :: &
data_set_nstd_ccsm
!EOP
!BOC
!EOC
!***********************************************************************
contains
!***********************************************************************
!BOP
! !IROUTINE: data_set_nstd_ccsm
! !INTERFACE:
subroutine data_set_nstd_ccsm (data_file,operation,field_id, & 6,4
ndims,io_dims,nftype, &
short_name,long_name,units, &
coordinates,missing_value, &
fill_value, &
implied_time_dim, &
data_1d_r8, &
data_2d_r8, &
data_2d_r4, &
data_3d_r4, &
data_4d_r4, &
data_1d_ch, &
data_2d_ch )
! !DESCRIPTION:
! This routine is kludge interface to defining and writing the nonstandard
! ccsm fields (eg, those not constructed via construct_io_field)
! to a netCDF file
!
! !REVISION HISTORY:
! same as module
! !INPUT PARAMETERS:
integer (int_kind), intent(in) :: &
ndims
character (*), intent(in) :: &
operation, &
short_name, &
long_name, &
units, &
coordinates, &
nftype
real (r4), dimension (:,:,:,:), intent(in) :: &
data_4d_r4
real (r4), dimension (:,:,:), intent(in) :: &
data_3d_r4
real (r4), dimension (:,:), intent(in) :: &
data_2d_r4
real (r8), dimension (:,:), intent(in) :: &
data_2d_r8
real (r8), dimension (:), intent(in) :: &
data_1d_r8
character (*), dimension (:,:), intent(in) :: &
data_2d_ch
character (*), dimension (:), intent(in) :: &
data_1d_ch
real (rtavg), intent(in) :: &
fill_value, &
missing_value
type (datafile),intent(inout) :: &
data_file
! !INPUT/OUTPUT PARAMETERS:
integer (i4), intent(inout) :: &
field_id
type (io_dim), intent(inout) :: &
io_dims(:)
logical (log_kind), intent(inout) :: &
implied_time_dim
optional :: &
implied_time_dim, &
short_name, &
long_name, &
units, &
coordinates, &
missing_value, &
fill_value, &
data_1d_r8, &
data_2d_r8, &
data_2d_r4, &
data_3d_r4, &
data_4d_r4, &
data_1d_ch, &
data_2d_ch
!EOP
!BOC
!-----------------------------------------------------------------------
!
! local variables
!
!-----------------------------------------------------------------------
integer (int_kind) :: num_writes ! place-holder until more than one
! time level written to a single file
logical (log_kind) :: supported
!-----------------------------------------------------------------------
!
! Must be netCDF format -- binary version does not exist
!
!-----------------------------------------------------------------------
if (data_file%data_format=='bin') then
call exit_POP
(sigAbort, &
'(data_set_nstd_ccsm) ERROR: cannot call this routine with bin format')
endif
!-----------------------------------------------------------------------
!
! select operation to perform
!
!-----------------------------------------------------------------------
select case (trim(operation))
!-----------------------------------------------------------------------
!
! define an io field
!
!-----------------------------------------------------------------------
case ('define')
call define_nstd_netcdf
(data_file, ndims, io_dims, field_id, &
short_name, long_name, units, &
coordinates=coordinates, &
missing_value=missing_value, &
fill_value=fill_value, &
nftype=nftype )
!-----------------------------------------------------------------------
!
! write an io field
!
!-----------------------------------------------------------------------
case ('write')
num_writes = 1 ! for now, only support one time value per output file
call write_nstd_netcdf
( &
data_file, field_id,num_writes, &
ndims, io_dims,nftype, &
implied_time_dim=implied_time_dim, &
indata_1d_r8=data_1d_r8, & ! pass all data arrays
indata_2d_r8=data_2d_r8, & ! to write_nstd_netcdf
indata_2d_r4=data_2d_r4, &
indata_3d_r4=data_3d_r4, &
indata_4d_r4=data_4d_r4, &
indata_1d_ch=data_1d_ch, &
indata_2d_ch=data_2d_ch )
!-----------------------------------------------------------------------
!
! unknown operation
!
!-----------------------------------------------------------------------
case default
if (my_task == master_task) &
write(stdout,*) 'data_set_nstd_ccsm operation: ',trim(operation)
call exit_POP
(sigAbort,'data_set_nstd_ccsm: Unknown operation')
end select
!-----------------------------------------------------------------------
!EOC
end subroutine data_set_nstd_ccsm
!***********************************************************************
end module io_ccsm
!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||