Data Type Structures¶
Structures can be defined in five data types (byte, short, integer, float, double) and in up to 4-dimensions.
The FPL structure namming follow the sintax below:
Namming Structures¶
nc [2d,3d,4d] _ [byte,short,int,float,double] _ll [f,d] _t [i,f,d] _l [i,f]¶
nc[2d,3d,4d]: dimension nominations. Change [2d,3d,4d]to one of the nominations2d,3d, or4d._[byte,short,int,float,double]: variable nominations. Change [byte,short,int,float,double]to one of the type nominations:byte,short,int,floatordouble._ll[f,d]: coordinates [longitude, latitude] nomination. Change [f,d]to one of the coordinates nominations:ffor float anddfor double._t[i,f,d]: time nomination (used when 3d denomination is set). Change [i,f,d]to one of the time nomination:ifor integer,ffor float anddfor double._l[i,f]: level nomination (used when 4d denomination is set). Change [i,f]to one of the level nomination:ifor integer,ffor float.some examples in fortran 90
Structure Fields¶
- 
nc[2d,3d,4d]_[byte,short,int,float,double]_ll[f,d]_t[i,f,d]_l[i,f]
- Dimension naming: - 2d, 3d, 4d [1] - Type naming: - byte, short, int, float, double [1] - Coordinates naming: - f, d [1] - Time naming: - i, f, d - [3d and 4d datasets][1]- Level naming: - i, f - [4d datasets][1]- Type fields: - %- varname:: variable name [character] [1]
- %- timename:: time name [character]- [3d and 4d datasets][1]
- %- levelname:: level name [character]- [4d datasets][1]
- %- lonname:: longitude name [character] [1]
- %- latname:: latitude name [character] [1]
- %- long_name:: [long name dataset title] [1] [2]
- %- dimnames:: array of dimension names [character] [2]
- %- varunits:: variable units [character] [1] [2]
- %- lonunits:: longitude units [character] [1] [2]
- %- latunits:: latitude units [character] [1] [2]
- %- timeunits:: time units [character]- [3d and 4d datasets][1] [2]
- %- levelunits:: level units [character]- [4d datasets][1] [2]
- %- dimunits:: dimension units array [character] [2]
- %- ndims:: number of variable dimensions [integer] [2]
- %- dims:: dimension IDs corresponding to the variable dimensions [integer] [2]
- %- dimid:: array of dimension IDs [integer] [2]
- %- dimsize:: array of size of dimensions [integer] [2]
- %- nlons:: number of dataset longitudes [integer] [1] [2]
- %- nlats:: number of dataset latitudes [integer] [1] [2]
- %- ntimes:: number of dataset times [integer]- [3d and 4d datasets][1] [2]
- %- nlevels:: number of dataset level [integer]- [4d datasets][1] [2]
- %- vartype:: type number for NetCDF-fortran library [integer] [2]
- %- varids:: array of variables IDs [integer] [2]
- %- FillValue:: fill value [byte, short, integer, float, double] [1] [2]
- %- levels:: levels array [integer, float]- [4d datasets][1] [2]
- %- times:: times array [integer, float, double]- [3d and 4d datasets][1] [2]
- %- longitudes:: longitudes array [float, double] [1] [2]
- %- latitudes:: latitudes array [float, double] [1] [2]
- %- ncdata:: data array [byte, short, integer, float, double] [1] [2]
 
| [1] | (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26) Defined by user | 
| [2] | (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24) Defined on read and/or write data | 
[Code example] Set dataset fields¶
program main
  use fpl
  implicit none
  !Definition of dataset structures
  type(nc4d_float_llf_ti_li) :: grid4d
 
  !Grid 4d definitions
  grid4d%long_name = "My Grid  ~ 1 degree"
  
  grid4d%varname = "grid"
  grid4d%lonname = "lon"
  grid4d%latname = "lat"
  grid4d%timename = "time"
  grid4d%levelname = "level"
  grid4d%varunits = "dimensionless"
  grid4d%lonunits = "degrees_east"
  grid4d%latunits = "degrees_north"
  grid4d%timeunits = "hour"
  grid4d%levelunits = "m"
  grid4d%ntimes = 10
  grid4d%nlevels = 5
  grid4d%FillValue = -9999
  
  write(*,*) "Grid 4d info ================================="
  write(*,'(a13,a20)')   "varname:    ", grid4d%varname  
  write(*,'(a13,a20)')   "timename:   ", grid4d%timename
  write(*,'(a13,a20)')   "levelname:  ", grid4d%levelname
  write(*,'(a13,a20)')   "latname:    ", grid4d%latname
  write(*,'(a13,a20)')   "lonname:    ", grid4d%lonname
  write(*,'(a13,a20)')   "long_name:  ", grid4d%long_name
  write(*,'(a13,a20)')   "varunits:   ", grid4d%varunits 
  write(*,'(a13,a20)')   "timeunits:  ", grid4d%timeunits
  write(*,'(a13,a20)')   "levelunits: ", grid4d%levelunits
  write(*,'(a13,a20)')   "lonunits:   ", grid4d%lonunits
  write(*,'(a13,a20)')   "latunits:   ", grid4d%latunits
  write(*,'(a13,i4)')    "nlons:      ", grid4d%nlons
  write(*,'(a13,i4)')    "nlats:      ", grid4d%nlats
  write(*,'(a13,i4)')    "nlevels:    ", grid4d%nlevels
  write(*,'(a13,i4)')    "ntimes:     ", grid4d%ntimes
  write(*,'(a13,f10.4)') "FillValue:  ", grid4d%FillValue
end program main
Save as file (setfields.f90) and compiling using gfortran.
#RedHat based systems
gfortran -o setfields.out setfields.f90 -I/usr/lib64/gfortran/modules/ -lFPL
#Debian based systems
gfortran -o setfields.out setfields.f90 -I/usr/include/ -lFPL
Important
-I<dir> This option specifies where to put .mod files for compiled modules. It is also added to the list of directories to Influencing the linking step. See the GNU Fortran Compiler Documentation .
<dir> is defined in Makefile as $(FPL_moddir). See Build Library.
After compilation run the program ./setfields.out