Atlassian uses cookies to improve your browsing experience, perform analytics and research, and conduct advertising. Accept all cookies to indicate that you agree to our use of cookies on your device. Atlassian cookies and tracking notice, (opens new window)
User Manual

User Manual
Results will update as you type.
  • Application Guide
  • Status of System
  • Usage Guide
  • Compute partitions
  • Software
    • AI Frameworks and Tools
    • Bring your own license
    • Chemistry
    • Data Manipulation
      • AEC library
      • CDO
      • ECCODES
      • HDF5 libraries / binaries
      • libtiff
      • libz
      • NCO
      • netCDF
        • Install netCDF
        • Linking with the netcdf library
          • Example netcdf program
      • pigz
      • PROJ
      • R
      • Szip
      • UDUNITS2
    • Engineering
    • Environment Modules
    • Miscellaneous
    • Numerics
    • Virtualization
    • Devtools Compiler Debugger
    • Visualisation Tools
  • FAQ
  • NHR Community
  • Contact

    You‘re viewing this with anonymous access, so some content might be blocked.
    /
    Example netcdf program

    Example netcdf program

    Juli 24, 2020
    program test_netcdf
    ! -----------------------------------------------------------------------
    ! The drunken divers testcase
    ! some lines are stolen from unidata - netcdf testprograms
    ! -----------------------------------------------------------------------
    
      use netcdf
      
      implicit none
      
      character*256     :: outputfile='divers_birth_day_drink.nc'
     
      integer :: stdout=6
    
    !  include 'netcdf.inc'
      integer           :: ncid, k
      integer           :: latdim, londim, depthdim, timedim
      integer           :: vardims(4)
      integer           :: latid, lonid, depthid, timeid, ndepth=5
      integer           :: varid
      real              :: depth(5), drinks(1,1,5,1), degeast, degnorth
      real*8            :: rdays
      character (len = *), parameter :: varunit = "glasses"
      character (len = *), parameter :: varname = "number of drinks"
      character (len = *), parameter :: varshort = "drinks" 
      character (len = *), parameter :: units = "units"
      character (len = *), parameter :: long_name = "long_name"
      character (len = *), parameter :: lat_name = "latitude"
      character (len = *), parameter :: lon_name = "longitude"
      character (len = *), parameter :: lat_units = "degrees_north"
      character (len = *), parameter :: lon_units = "degrees_east"
      character (len = *), parameter :: depth_units = "m"
      character (len = *), parameter :: time_units = "days since 2000-01-01 00:00:00"
      character (len = *), parameter :: origin = "time_origin"
      character (len = *), parameter :: origin_val = "1-jan-2000 00:00:00" 
    ! -----------------------------------------------------------------------
    !   define where and when the diver dives and 
    !   in which depth he has how much birthday drinks
    ! -----------------------------------------------------------------------
    
        degnorth = 57.02
        degeast  = 20.3
        rdays    = 10.0
        do k=1, 5
          depth(k)  = float(k)*float(k)
          drinks(1,1,k,1) = depth(k)
        enddo
     
    ! -----------------------------------------------------------------------
    !   create the file
    ! -----------------------------------------------------------------------
        
        call check( nf90_create(outputfile, nf90_clobber, ncid))
        write(stdout,*) 'file ',trim(outputfile),' has been created '
    ! -----------------------------------------------------------------------
    !   define axis
    ! -----------------------------------------------------------------------
    
        call check( nf90_def_dim(ncid, 'longitude', 1, londim))
        call check( nf90_def_dim(ncid, 'latitude' , 1, latdim))
        call check( nf90_def_dim(ncid, 'depth' ,    ndepth, depthdim))
        call check( nf90_def_dim(ncid, 'time'     , nf90_unlimited, timedim))
        call check( nf90_def_var(ncid, lon_name, nf90_real, londim, lonid))
        call check( nf90_def_var(ncid, lat_name, nf90_real, latdim, latid))
        call check( nf90_def_var(ncid, 'depth',     nf90_real, depthdim, depthid))
        call check( nf90_def_var(ncid, 'time',      nf90_real, timedim, timeid))
    
        call check( nf90_put_att(ncid, latid, units, lat_units) )
        call check( nf90_put_att(ncid, lonid, units, lon_units) )
        call check( nf90_put_att(ncid, depthid, units, depth_units))
        call check( nf90_put_att(ncid, timeid,  units, time_units))
        call check( nf90_put_att(ncid, timeid,  origin, origin_val))
     
        vardims(1) = londim
        vardims(2) = latdim
        vardims(3) = depthdim
        vardims(4) = timedim
        
    ! -----------------------------------------------------------------------
    !   define variables
    ! -----------------------------------------------------------------------
        call check( nf90_def_var(ncid, trim(varshort), nf90_real, vardims, varid))
        call check( nf90_put_att(ncid, varid, units ,trim(varunit)))
        call check( nf90_put_att(ncid, varid, long_name, trim(varname)))
    
        call check( nf90_enddef(ncid))
    ! -----------------------------------------------------------------------
    !   now write something
    ! -----------------------------------------------------------------------
    
        call check( nf90_put_var(ncid, latid, degnorth))
        call check( nf90_put_var(ncid, lonid, degeast))
        call check( nf90_put_var(ncid, depthid, depth))
        
        call check( nf90_put_var(ncid, timeid, rdays))
        
        call check( nf90_put_var(ncid, varid, drinks))
    !-----------------------------------------------------------------------
    !   ready
    !-----------------------------------------------------------------------
        call check( nf90_close(ncid))
    
    contains
      subroutine check(status)
        integer, intent ( in) :: status
        
        if(status /= nf90_noerr) then 
          print *, trim(nf90_strerror(status))
          stop "stopped"
        end if
      end subroutine check  
    end program test_netcdf
    
    , multiple selections available,
    {"serverDuration": 10, "requestCorrelationId": "9ce6e0d682c4456bbe50cee3b0f506f2"}