| Class | netcdf_wrapper | 
| In: | io/netcdf_wrapper.F90 | 
Note that Japanese and English are described in parallel.
gtool で扱わない部分をカバーする NetCDF のラッパープログラム.
The wrapper routines in this module treat NetCDF input/output that are not covered by gtool.
| NWInqDimLen : | 軸の長さを問い合わせる | 
| ———— : | ———— | 
| NWInqDimLen : | Inquire length of a dimension | 
| Subroutine : | |||
| ncfn : | character(*), intent(in ) 
 | ||
| varname : | character(*), intent(in ) 
 | ||
| attname : | character(*), intent(in ) 
 | ||
| att : | character(*), intent(out) 
 | 
Alias for NWGetAttChar
| Subroutine : | |||
| ncfn : | character(*), intent(in ) 
 | ||
| varname : | character(*), intent(in ) 
 | ||
| attname : | character(*), intent(in ) 
 | ||
| att : | integer , intent(out) 
 | 
Alias for NWGetAttInteger
| Subroutine : | |||
| ncfn : | character(*), intent(in ) 
 | ||
| dimname : | character(*), intent(in ) 
 | ||
| len : | integer , intent(out) 
 | 
軸の長さを問い合わせます.
Inquire length of a dimension.
  subroutine NWInqDimLen( ncfn, dimname, len )
    !
    ! 軸の長さを問い合わせます. 
    !
    ! Inquire length of a dimension. 
    !
    character(*), intent(in ) :: ncfn
                                  ! NetCDF filename
    character(*), intent(in ) :: dimname
                                  ! Dimension name
    integer     , intent(out) :: len
                                  ! Length of a dimension
    !
    ! Local variables
    !
    character(STRING) :: mode
    integer           :: ncid
    integer           :: dimid
    integer           :: status
    character(STRING) :: err_mes
    err_mes = "In NWInqDimLen"
    mode = "read"
    call NWOpen( NWMkNCFN(ncfn), mode, ncid )
    status = NF90_inq_dimid( ncid, dimname, dimid )
    call NWHandleErr( status, err_mes )
    status = NF90_Inquire_Dimension( ncid, dimid, len = len )
    call NWHandleErr( status, err_mes )
    call NWClose( ncid )
  end subroutine NWInqDimLen
          | Subroutine : | |
| ncid : | integer, intent(in) | 
  subroutine NWClose( ncid )
    integer, intent(in) :: ncid
    ! Local variables
    !
    integer           :: status
    character(STRING) :: err_mes
    err_mes = "In NWClose"
    status = nf90_close( ncid )
    call NWHandleErr( status, err_mes )
  end subroutine NWClose
          | Subroutine : | |
| ncid : | integer, intent(in) | 
  subroutine NWEndDef( ncid )
    integer, intent(in) :: ncid
    ! Local variables
    !
    integer           :: status
    character(STRING) :: err_mes
    err_mes = "In NWEndDef"
    status = nf90_enddef( ncid )
    if( ( status .ne. nf90_noerr ) .and. ( status .ne. nf90_enotindefine ) ) call NWHandleErr( status, err_mes )
  end subroutine NWEndDef
          | Subroutine : | |||
| ncfn : | character(*), intent(in ) 
 | ||
| varname : | character(*), intent(in ) 
 | ||
| attname : | character(*), intent(in ) 
 | ||
| att : | character(*), intent(out) 
 | 
  subroutine NWGetAttChar( ncfn, varname, attname, att )
    character(*), intent(in ) :: ncfn
                                  ! NetCDF filename
    character(*), intent(in ) :: varname
                                  ! Variable name
    character(*), intent(in ) :: attname
                                  ! Attribute name
    character(*), intent(out) :: att
                                  ! Attribute
    ! Local variables
    !
    character(STRING) :: mode
    integer           :: ncid
    integer           :: varid
    integer           :: status
    character(STRING) :: err_mes
    err_mes = "In NWGetAttChar"
    err_mes = trim( err_mes ) // ', Var: ' // trim( varname ) // ', Att: ' // trim( attname )
    mode = "read"
    call NWOpen( NWMkNCFN(ncfn), mode, ncid )
    if ( ( varname == 'global' ) .or. ( varname == 'GLOBAL' ) ) then
      varid = NF90_GLOBAL
    else
      status = nf90_inq_varid( ncid, varname, varid )
      call NWHandleErr( status, err_mes )
    end if
    status = nf90_get_att( ncid, varid, attname, att )
    call NWHandleErr( status, err_mes )
    call NWClose( ncid )
  end subroutine NWGetAttChar
          | Subroutine : | |||
| ncfn : | character(*), intent(in ) 
 | ||
| varname : | character(*), intent(in ) 
 | ||
| attname : | character(*), intent(in ) 
 | ||
| att : | integer , intent(out) 
 | 
  subroutine NWGetAttInteger( ncfn, varname, attname, att )
    character(*), intent(in ) :: ncfn
                                  ! NetCDF filename
    character(*), intent(in ) :: varname
                                  ! Variable name
    character(*), intent(in ) :: attname
                                  ! Attribute name
    integer     , intent(out) :: att
                                  ! Attribute
    ! Local variables
    !
    character(STRING) :: mode
    integer           :: ncid
    integer           :: varid
    integer           :: status
    character(STRING) :: err_mes
    err_mes = "In NWGetAttInteger"
    err_mes = trim( err_mes ) // ', Var: ' // trim( varname ) // ', Att: ' // trim( attname )
    mode = "read"
    call NWOpen( NWMkNCFN(ncfn), mode, ncid )
    if ( ( varname == 'global' ) .or. ( varname == 'GLOBAL' ) ) then
      varid = NF90_GLOBAL
    else
      status = nf90_inq_varid( ncid, varname, varid )
      call NWHandleErr( status, err_mes )
    end if
    status = nf90_get_att( ncid, varid, attname, att )
    call NWHandleErr( status, err_mes )
    call NWClose( ncid )
  end subroutine NWGetAttInteger
          | Subroutine : | |
| status : | integer , intent(in) | 
| err_mes : | character(*), intent(in), optional | 
  subroutine NWHandleErr( status, err_mes )
    integer     , intent(in)           :: status
    character(*), intent(in), optional :: err_mes
    if( status .ne. nf90_noerr ) then
      if( present( err_mes ) ) print *, trim( err_mes )
      print *, trim( nf90_strerror( status ) )
      stop "STOP"
    end if
  end subroutine NWHandleErr
          | Function : | |||
| ncfn_out : | character(STRING) | ||
| ncfn_in : | character(*), intent(in ) 
 | 
  character(STRING) function NWMkNCFN( ncfn_in ) result( ncfn_out )
    ! MPI wrapper
    !
    use mpi_wrapper, only : myrank
    character(*), intent(in ) :: ncfn_in
                                  ! NetCDF filename
#ifdef LIB_MPI
    if ( ncfn_in(len_trim(ncfn_in)-2:len_trim(ncfn_in)) /= '.nc' ) then
      write( 6, * ) trim(ncfn_in), ' is inappropriate.'
      stop
    end if
    write( ncfn_out, '(a,a,i6.6,a)' ) ncfn_in(1:len_trim(ncfn_in)-3), '_rank', myrank, '.nc'
#else
    ncfn_out = ncfn_in
#endif
  end function NWMkNCFN
          | Subroutine : | |
| path : | character(*), intent(in ) | 
| mode : | character(*), intent(in ) | 
| ncid : | integer , intent(out) | 
  subroutine NWOpen( path, mode, ncid )
    character(*), intent(in ) :: path
    character(*), intent(in ) :: mode
    integer     , intent(out) :: ncid
    ! Local variables
    !
    integer           :: cmode, omode
    integer           :: status
    character(STRING) :: err_mes
    err_mes = "In NWOpen"
    err_mes = trim( err_mes ) // ', path: ' // trim( path ) // ', mode: ' // trim( mode )
    if( ( mode .eq. "new" ) .or. ( mode .eq. "NEW" ) ) then
      cmode = NF90_CLOBBER
      status = nf90_create( path, cmode, ncid )
      call NWHandleErr( status, err_mes )
    else
      if( ( mode .eq. "read" ) .or. ( mode .eq. "READ" ) ) then
        omode = NF90_NOWRITE
      else if( ( mode .eq. "write" ) .or. ( mode .eq. "WRITE" ) ) then
        omode = NF90_WRITE
      else
        write( 6, * ) "Inproper argument, mode"
        write( 6, * ) "Argument mode should be either of words below."
        write( 6, * ) " 'new', 'NEW', 'read', 'READ', 'write', or 'WRITE'"
        stop
      end if
      status = nf90_open( path, omode, ncid )
      call NWHandleErr( status, err_mes )
    end if
  end subroutine NWOpen
          | Subroutine : | |
| ncid : | integer, intent(in) | 
  subroutine NWReDef( ncid )
    integer, intent(in) :: ncid
    ! Local variables
    !
    integer           :: status
    character(STRING) :: err_mes
    err_mes = "In NWReDef"
    status = nf90_redef( ncid )
    if( ( status .ne. nf90_noerr ) .and. ( status .ne. nf90_eindefine ) ) call NWHandleErr( status, err_mes )
  end subroutine NWReDef