My Project
Data Types | Functions/Subroutines | Variables
mod_nctools Module Reference

Data Types

interface  get_file_time
 
interface  nc_connect_avar
 
interface  nc_connect_pvar
 
interface  nc_get_att
 
interface  nc_make_att
 
interface  nc_make_avar
 
interface  nc_make_pvar
 
interface  nc_make_runtime_att_chr
 
interface  nc_point_var
 

Functions/Subroutines

subroutine handle_ncerr (status, programer_msg)
 
subroutine nc_init (NCF, NAME)
 
subroutine nc_open (NCF)
 
subroutine nc_create (NCF)
 
subroutine nc_close (NCF)
 
subroutine nc_refresh (NCF)
 
subroutine nc_load (NCF)
 
subroutine nc_save (NCF)
 
type(ncdim) function, pointer nc_get_dim (NCF, dimid)
 
type(ncdim) function, pointer nc_make_dim (NAME, LEN)
 
type(ncdim) function, pointer nc_make_runtime_dim (NAME, LEN)
 
subroutine nc_def_dim (NCF, DIMID)
 
type(ncatt) function, pointer nc_make_att_chr_scl (NAME, VALUES)
 
type(ncatt) function, pointer nc_make_att_chr_vec (NAME, VALUES)
 
type(ncatt) function, pointer nc_make_runtime_att_chr_scl (NAME, VALUES)
 
type(ncatt) function, pointer nc_make_runtime_att_chr_vec (NAME, VALUES)
 
type(ncatt) function, pointer nc_make_att_int_vec (NAME, values)
 
type(ncatt) function, pointer nc_make_att_int (NAME, values)
 
type(ncatt) function, pointer nc_make_att_flt (NAME, values)
 
type(ncatt) function, pointer nc_make_att_flt_vec (NAME, values)
 
type(ncatt) function, pointer nc_make_att_dbl (NAME, values)
 
type(ncatt) function, pointer nc_make_att_dbl_vec (NAME, values)
 
type(ncatt) function, pointer nc_get_gatt (NCF, attid)
 
type(ncatt) function, pointer nc_get_vatt (VAR, attid)
 
subroutine read_att_type (NCID, VARID, ATT)
 
subroutine char_att_read_helper (NCID, VARID, ATTNAME, CHR, LEN)
 
subroutine write_att_type (ncid, varid, ATT)
 
subroutine char_att_write_helper (NCID, VARID, ATTNAME, CHR, LEN)
 
type(ncvar) function, pointer nc_make_avar_scl_chr (NAME, VALUES, DIM1, DIM2)
 
type(ncvar) function, pointer nc_make_avar_vec_chr (NAME, VALUES, DIM1, DIM2, DIM3)
 
type(ncvar) function, pointer nc_make_avar_scl_dbl (NAME, VALUES, DIM1)
 
type(ncvar) function, pointer nc_make_avar_vec_dbl (NAME, VALUES, DIM1, DIM2)
 
type(ncvar) function, pointer nc_make_avar_arr_dbl (NAME, VALUES, DIM1, DIM2, DIM3)
 
type(ncvar) function, pointer nc_make_avar_cub_dbl (NAME, VALUES, DIM1, DIM2, DIM3, DIM4)
 
type(ncvar) function, pointer nc_make_avar_fda_dbl (NAME, VALUES, DIM1, DIM2, DIM3, DIM4, DIM5)
 
type(ncvar) function, pointer nc_make_avar_scl_flt (NAME, VALUES, DIM1)
 
type(ncvar) function, pointer nc_make_avar_vec_flt (NAME, VALUES, DIM1, DIM2)
 
type(ncvar) function, pointer nc_make_avar_arr_flt (NAME, VALUES, DIM1, DIM2, DIM3)
 
type(ncvar) function, pointer nc_make_avar_cub_flt (NAME, VALUES, DIM1, DIM2, DIM3, DIM4)
 
type(ncvar) function, pointer nc_make_avar_fda_flt (NAME, VALUES, DIM1, DIM2, DIM3, DIM4, DIM5)
 
type(ncvar) function, pointer nc_make_avar_scl_int (NAME, VALUES, DIM1)
 
type(ncvar) function, pointer nc_make_avar_vec_int (NAME, VALUES, DIM1, DIM2)
 
type(ncvar) function, pointer nc_make_avar_arr_int (NAME, VALUES, DIM1, DIM2, DIM3)
 
type(ncvar) function, pointer nc_make_avar_cub_int (NAME, VALUES, DIM1, DIM2, DIM3, DIM4)
 
type(ncvar) function, pointer nc_make_avar_fda_int (NAME, VALUES, DIM1, DIM2, DIM3, DIM4, DIM5)
 
type(ncvar) function, pointer nc_make_pvar_scl_chr (NAME, VALUES, DIM1, DIM2)
 
type(ncvar) function, pointer nc_make_pvar_vec_chr (NAME, VALUES, DIM1, DIM2, DIM3)
 
type(ncvar) function, pointer nc_make_pvar_scl_dbl (NAME, VALUES, DIM1)
 
type(ncvar) function, pointer nc_make_pvar_vec_dbl (NAME, VALUES, DIM1, DIM2)
 
type(ncvar) function, pointer nc_make_pvar_arr_dbl (NAME, VALUES, DIM1, DIM2, DIM3)
 
type(ncvar) function, pointer nc_make_pvar_cub_dbl (NAME, VALUES, DIM1, DIM2, DIM3, DIM4)
 
type(ncvar) function, pointer nc_make_pvar_fda_dbl (NAME, VALUES, DIM1, DIM2, DIM3, DIM4, DIM5)
 
type(ncvar) function, pointer nc_make_pvar_scl_flt (NAME, VALUES, DIM1)
 
type(ncvar) function, pointer nc_make_pvar_vec_flt (NAME, VALUES, DIM1, DIM2)
 
type(ncvar) function, pointer nc_make_pvar_arr_flt (NAME, VALUES, DIM1, DIM2, DIM3)
 
type(ncvar) function, pointer nc_make_pvar_cub_flt (NAME, VALUES, DIM1, DIM2, DIM3, DIM4)
 
type(ncvar) function, pointer nc_make_pvar_fda_flt (NAME, VALUES, DIM1, DIM2, DIM3, DIM4, DIM5)
 
type(ncvar) function, pointer nc_make_pvar_scl_int (NAME, VALUES, DIM1)
 
type(ncvar) function, pointer nc_make_pvar_vec_int (NAME, VALUES, DIM1, DIM2)
 
type(ncvar) function, pointer nc_make_pvar_arr_int (NAME, VALUES, DIM1, DIM2, DIM3)
 
type(ncvar) function, pointer nc_make_pvar_cub_int (NAME, VALUES, DIM1, DIM2, DIM3, DIM4)
 
type(ncvar) function, pointer nc_make_pvar_fda_int (NAME, VALUES, DIM1, DIM2, DIM3, DIM4, DIM5)
 
subroutine nc_disconnect (VAR)
 
subroutine nc_connect_avar_scl_flt (VAR, VALUES)
 
subroutine nc_connect_avar_vec_flt (VAR, VALUES)
 
subroutine nc_connect_avar_arr_flt (VAR, VALUES)
 
subroutine nc_connect_avar_cub_flt (VAR, VALUES)
 
subroutine nc_connect_avar_fda_flt (VAR, VALUES)
 
subroutine nc_connect_avar_scl_int (VAR, VALUES)
 
subroutine nc_connect_avar_vec_int (VAR, VALUES)
 
subroutine nc_connect_avar_arr_int (VAR, VALUES)
 
subroutine nc_connect_avar_cub_int (VAR, VALUES)
 
subroutine nc_connect_avar_fda_int (VAR, VALUES)
 
subroutine nc_connect_avar_scl_dbl (VAR, VALUES)
 
subroutine nc_connect_avar_vec_dbl (VAR, VALUES)
 
subroutine nc_connect_avar_arr_dbl (VAR, VALUES)
 
subroutine nc_connect_avar_cub_dbl (VAR, VALUES)
 
subroutine nc_connect_avar_fda_dbl (VAR, VALUES)
 
subroutine nc_connect_pvar_scl_flt (VAR, VALUES)
 
subroutine nc_connect_pvar_vec_flt (VAR, VALUES)
 
subroutine nc_connect_pvar_arr_flt (VAR, VALUES)
 
subroutine nc_connect_pvar_cub_flt (VAR, VALUES)
 
subroutine nc_connect_pvar_fda_flt (VAR, VALUES)
 
subroutine nc_connect_pvar_scl_int (VAR, VALUES)
 
subroutine nc_connect_pvar_vec_int (VAR, VALUES)
 
subroutine nc_connect_pvar_arr_int (VAR, VALUES)
 
subroutine nc_connect_pvar_cub_int (VAR, VALUES)
 
subroutine nc_connect_pvar_fda_int (VAR, VALUES)
 
subroutine nc_connect_pvar_scl_dbl (VAR, VALUES)
 
subroutine nc_connect_pvar_vec_dbl (VAR, VALUES)
 
subroutine nc_connect_pvar_arr_dbl (VAR, VALUES)
 
subroutine nc_connect_pvar_cub_dbl (VAR, VALUES)
 
subroutine nc_connect_pvar_fda_dbl (VAR, VALUES)
 
subroutine nc_connect_var_scl_chr (VAR, VALUES)
 
subroutine nc_connect_avar_vec_chr (VAR, VALUES)
 
subroutine nc_connect_pvar_scl_chr (VAR, VALUES)
 
subroutine nc_connect_pvar_vec_chr (VAR, VALUES)
 
subroutine nc_point_var_scl_flt (VAR, VALUES)
 
subroutine nc_point_var_vec_flt (VAR, VALUES)
 
subroutine nc_point_var_arr_flt (VAR, VALUES)
 
subroutine nc_point_var_cub_flt (VAR, VALUES)
 
subroutine nc_point_var_fda_flt (VAR, VALUES)
 
subroutine nc_point_var_scl_dbl (VAR, VALUES)
 
subroutine nc_point_var_vec_dbl (VAR, VALUES)
 
subroutine nc_point_var_arr_dbl (VAR, VALUES)
 
subroutine nc_point_var_cub_dbl (VAR, VALUES)
 
subroutine nc_point_var_fda_dbl (VAR, VALUES)
 
subroutine nc_point_var_scl_int (VAR, VALUES)
 
subroutine nc_point_var_vec_int (VAR, VALUES)
 
subroutine nc_point_var_arr_int (VAR, VALUES)
 
subroutine nc_point_var_cub_int (VAR, VALUES)
 
subroutine nc_point_var_fda_int (VAR, VALUES)
 
subroutine nc_point_var_scl_chr (VAR, VALUES)
 
subroutine nc_point_var_vec_chr (VAR, VALUES)
 
type(ncvar) function, pointer nc_get_var (NCF, varid)
 
subroutine nc_def_var (NCF, varid)
 
subroutine nc_write_file (NCF, LOCAL_ONLY, STKCNT, STKRNG)
 
subroutine nc_write_var (VAR, DUMP, COLLECTDATA, COLLECTOR, STKCNT, STKRNG, IOSTART, IOCOUNT, IOSTRIDE)
 
subroutine nc_read_var (VAR, STKCNT, STKRNG, IOSTART, IOCOUNT, IOSTRIDE, DEALERID, PARALLEL)
 
logical function is_valid_datetime (VAR, tzone)
 
type(ncvar) function, pointer datetime_object (DIMSTR, DIMTIME, timezone, size)
 
subroutine update_datetime (VAR, NOW)
 
logical function is_valid_itime (VAR1, VAR2, tzone)
 
type(ncvar) function, pointer itime_object (use_mjd, DIM, size)
 
type(ncvar) function, pointer itime2_object (use_mjd, DIM, size)
 
subroutine update_itime (VAR1, VAR2, NOW)
 
logical function is_valid_float_days (VAR, tzone)
 
logical function is_valid_float_seconds (VAR, tzone)
 
type(ncvar) function, pointer float_time_object (use_mjd, DIM, size)
 
subroutine update_float_time (VAR, NOW)
 
type(ncvar) function, pointer iint_object (DIM, size)
 
recursive subroutine recursive_file_bracket (FTM, NOW, status)
 
subroutine update_file_bracket (NCF, NOW, status)
 
subroutine update_var_bracket (NCF, VPREV, VNEXT, NOW, status, INTERP)
 
integer function set_file_time_type (NCF)
 
type(time) function get_file_time_ncf (NCF, STKCNT)
 
type(time) function get_file_time_ncftime (FTM, STKCNT)
 
subroutine set_file_stack (NCF_IN, NOW, INTERVAL)
 

Variables

character(len=80), parameter seconds_units ='seconds'
 
character(len=80), parameter days_units ='days since 0.0'
 
character(len=80), parameter mjd_units ='days since 1858-11-17 00:00:00'
 
character(len=80), parameter msec_units ='msec since 00:00:00'
 
character(len=80), parameter fmat ='modified julian day (MJD)'
 
character(len=80), parameter rfmat ='defined reference date'
 
type(ncfilelist), pointer, save filehead
 

Function/Subroutine Documentation

◆ char_att_read_helper()

subroutine mod_nctools::char_att_read_helper ( integer, intent(in)  NCID,
integer, intent(in)  VARID,
character(len=*), intent(in)  ATTNAME,
character(len=*), dimension(:), allocatable  CHR,
integer, intent(in)  LEN 
)

Definition at line 988 of file mod_nctools.f90.

988  IMPLICIT NONE
989  INTEGER, INTENT(IN):: NCID, VARID, LEN
990  CHARACTER(LEN=*), INTENT(IN) :: ATTNAME
991 ! CHARACTER(LEN=LEN+1) :: TEMP
992  CHARACTER(LEN=LEN) :: TEMP
993  CHARACTER(LEN=*), ALLOCATABLE :: CHR(:)
994  CHARACTER(LEN=120) :: errmsg
995  INTEGER :: STATUS
996 
997  if(dbg_set(dbg_sbr)) &
998  & write(ipt,*) "START CHAR_ATT_READ_HELPER"
999 
1000  status = nf90_get_att(ncid,varid,attname, temp )
1001  errmsg="Can not get variable attribute (char):" &
1002  & //trim(attname)
1003  call handle_ncerr(status,errmsg)
1004 
1005  ! ACHAR(10) is a carage return!
1006  CALL split_string(temp,achar(10), chr)
1007 
1008  if(dbg_set(dbg_sbr)) &
1009  & write(ipt,*) "END CHAR_ATT_READ_HELPER"
1010 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ char_att_write_helper()

subroutine mod_nctools::char_att_write_helper ( integer, intent(in)  NCID,
integer, intent(in)  VARID,
character(len=*), intent(in)  ATTNAME,
character(len=*), dimension(:), allocatable  CHR,
integer, intent(in)  LEN 
)

Definition at line 1089 of file mod_nctools.f90.

1089  IMPLICIT NONE
1090  INTEGER, INTENT(IN):: NCID, VARID, LEN
1091  CHARACTER(LEN=*), INTENT(IN) :: ATTNAME
1092  CHARACTER(LEN=LEN) :: TEMP
1093  CHARACTER(LEN=*), ALLOCATABLE :: CHR(:)
1094  CHARACTER(LEN=120) :: errmsg
1095  INTEGER :: STATUS, I, csize
1096 
1097  if(dbg_set(dbg_sbr)) &
1098  & write(ipt,*) "START CHAR_ATT_WRITE_HELPER"
1099  temp=""
1100 
1101  csize =size(chr)
1102  DO i = 1,size(chr)
1103  temp = trim(temp)//trim(adjustl(chr(i)))
1104 
1105  ! DO not att charage return to last string
1106  IF(i<csize) temp = trim(temp)//achar(10)
1107  END DO
1108 
1109  status = nf90_put_att(ncid,varid,attname, trim(temp) )
1110  errmsg="Can not put variable attribute (char):" &
1111  & //trim(attname)
1112  call handle_ncerr(status,errmsg)
1113 
1114  if(dbg_set(dbg_sbr)) &
1115  & write(ipt,*) "END CHAR_ATT_WRITE_HELPER"
1116 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ datetime_object()

type(ncvar) function, pointer mod_nctools::datetime_object ( type(ncdim), pointer  DIMSTR,
type(ncdim), optional, pointer  DIMTIME,
character(len=*), optional  timezone,
integer, optional  size 
)

Definition at line 6811 of file mod_nctools.f90.

6811  IMPLICIT NONE
6812  TYPE(NCVAR), POINTER :: VAR
6813  TYPE(NCDIM), POINTER:: DIMSTR
6814  TYPE(NCDIM), POINTER, OPTIONAL :: DIMTIME
6815  INTEGER, OPTIONAL :: SIZE
6816  TYPE(NCATT), POINTER :: ATT
6817  CHARACTER(LEN=80),pointer :: Data_vec(:)
6818  CHARACTER(LEN=80),pointer :: Data_scl
6819  CHARACTER(LEN=*), optional :: timezone
6820 
6821  IF(PRESENT(size)) THEN
6822  ALLOCATE(data_vec(size))
6823  ELSE
6824  ALLOCATE(data_vec(1))
6825  data_scl =>data_vec(1)
6826  END IF
6827 
6828  IF (PRESENT(dimtime)) THEN
6829  var => nc_make_pvar(name='Times', values=data_vec, dim1= dimstr, dim2= dimtime)
6830  var%SCL_CHR => var%VEC_CHR(1)
6831  ELSE
6832  var => nc_make_pvar(name='Times', values=data_scl, dim1= dimstr)
6833  END IF
6834 
6835  IF (PRESENT(timezone))THEN
6836  att => nc_make_att(name='time_zone',values=trim(timezone))
6837  var => add(var,att)
6838  ELSE
6839  att => nc_make_att(name='time_zone',values='UTC')
6840  var => add(var,att)
6841  END IF
6842 
6843 
Here is the caller graph for this function:

◆ float_time_object()

type(ncvar) function, pointer mod_nctools::float_time_object ( logical, intent(in)  use_mjd,
type(ncdim), optional, pointer  DIM,
integer, optional  size 
)

Definition at line 7203 of file mod_nctools.f90.

7203  IMPLICIT NONE
7204  TYPE(NCVAR), POINTER :: VAR
7205  logical, intent(in) :: use_mjd
7206  TYPE(NCDIM), POINTER, OPTIONAL :: DIM
7207  INTEGER, OPTIONAL :: SIZE
7208  TYPE(NCATT), POINTER :: ATT
7209  REAL(SP),pointer :: Data_vec(:)
7210  REAL(SP),pointer :: Data_scl
7211 
7212  IF(PRESENT(size)) THEN
7213  ALLOCATE(data_vec(size))
7214  ELSE
7215  ALLOCATE(data_vec(1))
7216  data_scl =>data_vec(1)
7217  END IF
7218 
7219  IF (PRESENT(dim)) THEN
7220  var => nc_make_pvar(name='time', values=data_vec, dim1= dim)
7221  if(associated(var%vec_flt))then
7222  var%scl_flt => var%vec_flt(1)
7223  else
7224  var%scl_dbl => var%vec_dbl(1)
7225  endif
7226  ELSE
7227  var => nc_make_pvar(name='time', values=data_scl)
7228  END IF
7229 
7230  att => nc_make_att(name='long_name',values='time')
7231  var => add(var,att)
7232 
7233  IF (use_mjd) THEN
7234  IF(date_reference == 'default')THEN
7235 
7236  att => nc_make_att(name='units',values=mjd_units)
7237  var => add(var,att)
7238 
7239  att => nc_make_att(name='format',values=fmat)
7240  var => add(var,att)
7241 
7242  ELSE
7243 
7244  att => nc_make_att(name='units',values='days since '//trim(date_reference))
7245  var => add(var,att)
7246 
7247  att => nc_make_att(name='format',values=rfmat)
7248  var => add(var,att)
7249 
7250  END IF
7251 
7252  att => nc_make_att(name='time_zone',values='UTC')
7253  var => add(var,att)
7254 
7255  ELSE
7256  att => nc_make_att(name='units',values=days_units)
7257  var => add(var,att)
7258 
7259  att => nc_make_att(name='time_zone',values='none')
7260  var => add(var,att)
7261  END IF
7262 
7263 
Here is the caller graph for this function:

◆ get_file_time_ncf()

type(time) function mod_nctools::get_file_time_ncf ( type(ncfile), pointer  NCF,
integer, intent(in)  STKCNT 
)

Definition at line 8035 of file mod_nctools.f90.

8035  IMPLICIT NONE
8036  TYPE(TIME) :: THETIME
8037  TYPE(NCFILE),POINTER :: NCF
8038  INTEGER, intent(in) :: STKCNT
8039  TYPE(NCFTIME), POINTER :: FTM
8040 
8041  IF(.NOT. ASSOCIATED(ncf)) CALL fatal_error &
8042  & ("GET_FILE_TIME_NCF: FILE object argument is not assocaited!")
8043 
8044 
8045  IF(.NOT. ASSOCIATED(ncf%FTIME)) THEN
8046  CALL print_file(ncf)
8047  CALL fatal_error("GET_FILE_TIME_NCF: FILE object's FTIME is not assocaited!")
8048  END IF
8049 
8050  ftm =>ncf%FTIME
8051 
8052  thetime = get_file_time(ftm,stkcnt)
8053 
Here is the call graph for this function:

◆ get_file_time_ncftime()

type(time) function mod_nctools::get_file_time_ncftime ( type(ncftime), pointer  FTM,
integer, intent(in)  STKCNT 
)

Definition at line 8058 of file mod_nctools.f90.

8058  IMPLICIT NONE
8059  TYPE(TIME) :: THETIME
8060  TYPE(NCFTIME),POINTER :: FTM
8061  TYPE(NCVAR), POINTER :: VAR1, VAR2
8062  TYPE(NCATT), POINTER :: ATT
8063  INTEGER, intent(in) :: STKCNT
8064  REAL(SP),target :: float_time
8065  INTEGER, target :: mjd,msec
8066  Character(len=80), target :: dstring
8067  INTEGER :: STATUS
8068  Character(len=80) :: dformat
8069  LOGICAL FOUND
8070 
8071  IF(.NOT. ASSOCIATED(ftm)) THEN
8072  CALL fatal_error("GET_FILE_TIME_NCFTIME: THE ARGUMENT FTM is not assocaited!")
8073  END IF
8074 
8075 
8076  IF(stkcnt .LE. 0) CALL fatal_error&
8077  &('GET_FILE_TIME: YOU CAN NOT GET TIME FOR A STACK COUNT LESS THAN ONE!')
8078 
8079  SELECT CASE(ftm%TMTYPE)
8080  CASE(tmtype_float_days)
8081 
8082  var1 => ftm%TM1
8083 
8084  CALL nc_connect_avar(var1,float_time)
8085  CALL nc_read_var(var1,stkcnt)
8086 
8087  thetime = days2time(float_time) - time_zone(ftm%TIMEZONE,status)
8088 
8089  CASE(tmtype_float_seconds)
8090 
8091  var1 => ftm%TM1
8092 
8093  CALL nc_connect_avar(var1,float_time)
8094  CALL nc_read_var(var1,stkcnt)
8095 
8096  thetime = seconds2time(float_time) - time_zone(ftm%TIMEZONE,status)
8097 
8098  CASE(tmtype_int2_mjd)
8099 
8100  var1 => ftm%TM1
8101 
8102  CALL nc_connect_avar(var1,mjd)
8103  CALL nc_read_var(var1,stkcnt)
8104 
8105  var2 => ftm%TM2
8106 
8107  CALL nc_connect_avar(var2,msec)
8108  CALL nc_read_var(var2,stkcnt)
8109 
8110  thetime%MJD= mjd
8111  thetime%MuSod= int(msec,itime)* int(1000,itime)
8112 
8113  thetime = thetime - time_zone(ftm%TIMEZONE,status)
8114 
8115  CASE(tmtype_char_date)
8116 
8117  dformat = "ymd"
8118 
8119  var1 => ftm%TM1
8120 
8121  CALL nc_connect_avar(var1,dstring)
8122  CALL nc_read_var(var1,stkcnt)
8123 
8124  thetime = read_datetime(dstring,dformat,ftm%TIMEZONE,status)
8125  if(status == 0) THEN
8126  CALL print_ftime(ftm)
8127  CALL fatal_error("GET_FILE_TIME: COULD NOT TRANSLATE TIME STRING",&
8128  "FILE RETURNED: "//trim(dstring))
8129  END if
8130 
8131 
8132  CASE DEFAULT
8133  CALL print_ftime(ftm)
8134  CALL fatal_error("GET_FILE_TIME: FILE object's FTIME is an unrecognized type")
8135  END SELECT
8136 
8137 
8138 
type(time) function read_datetime(timestr, frmt, TZONE, status)
Definition: mod_time.f90:640
type(time) function time_zone(TZONE, status)
Definition: mod_time.f90:444
integer, parameter itime
Definition: mod_time.f90:48
Here is the call graph for this function:

◆ handle_ncerr()

subroutine mod_nctools::handle_ncerr ( integer, intent(in)  status,
character(len=*), intent(in)  programer_msg 
)

Definition at line 210 of file mod_nctools.f90.

210  IMPLICIT NONE
211  INTEGER, intent(in) :: status
212  CHARACTER(len=*), intent(in) :: programer_msg
213  CHARACTER(len=150) :: msg
214  LOGICAL :: ERROR=.false.
215  if(status /=nf90_noerr)&
216  & CALL fatal_error(trim(programer_msg),"NF90ERROR::"//trim(nf90_strerror(status)))
Here is the caller graph for this function:

◆ iint_object()

type(ncvar) function, pointer mod_nctools::iint_object ( type(ncdim), optional, pointer  DIM,
integer, optional  size 
)

Definition at line 7291 of file mod_nctools.f90.

7291  IMPLICIT NONE
7292  TYPE(NCVAR), POINTER :: VAR
7293  TYPE(NCDIM), POINTER, OPTIONAL :: DIM
7294  INTEGER, OPTIONAL :: SIZE
7295  TYPE(NCATT), POINTER :: ATT
7296  INTEGER,POINTER :: Data_vec(:)
7297  INTEGER,POINTER :: Data_scl
7298 
7299  IF(PRESENT(size)) THEN
7300  ALLOCATE(data_vec(size))
7301  ELSE
7302  ALLOCATE(data_vec(1))
7303  data_scl =>data_vec(1)
7304  END IF
7305 
7306  ! IINT
7307  IF (PRESENT(dim)) THEN
7308  var => nc_make_pvar(name='iint', values=data_vec, dim1= dim)
7309  var%SCL_INT => var%VEC_INT(1)
7310  ELSE
7311  var => nc_make_pvar(name='iint', values=data_scl)
7312  END IF
7313 
7314  att => nc_make_att(name='long_name',values='internal mode iteration number')
7315  var => add(var,att)
7316 
Here is the caller graph for this function:

◆ is_valid_datetime()

logical function mod_nctools::is_valid_datetime ( type(ncvar), pointer  VAR,
character(len=80), intent(out)  tzone 
)

Definition at line 6772 of file mod_nctools.f90.

6772  IMPLICIT NONE
6773  TYPE(NCATT), POINTER :: ATT
6774  TYPE(NCVAR), POINTER :: VAR
6775  TYPE(NCDIM), POINTER :: DIM
6776  logical :: found, res
6777  character(len=80), intent(out) :: tzone
6778 
6779  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
6780  & ("IS_VALID_DATETIME: Variable object argument is not assocai&
6781  &ted!")
6782 
6783 
6784  res = .false.
6785 
6786  IF (var%XTYPE /= nf90_char) RETURN
6787 
6788  att => find_att(var,'description',found)
6789  IF (found) THEN
6790  IF (att%CHR(1) == "GMT time")THEN
6791  res =.true.
6792  tzone="UTC"
6793  RETURN
6794  END IF
6795  END IF
6796 
6797  att => find_att(var,'time_zone',found)
6798  IF (found) THEN
6799  IF (.not. is_valid_timezone(att%chr(1))) return
6800  tzone=att%chr(1)
6801  res=.true.
6802  END IF
6803 
6804 
6805  RETURN
6806 
logical function is_valid_timezone(timezone)
Definition: mod_time.f90:628
Here is the caller graph for this function:

◆ is_valid_float_days()

logical function mod_nctools::is_valid_float_days ( type(ncvar), pointer  VAR,
character(len=80), intent(out)  tzone 
)

Definition at line 7099 of file mod_nctools.f90.

7099  IMPLICIT NONE
7100  character(len=80), intent(out) :: tzone
7101  TYPE(NCATT), POINTER :: ATT
7102  TYPE(NCVAR), POINTER :: VAR
7103  TYPE(NCDIM), POINTER :: DIM
7104  logical :: found, res
7105 
7106  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
7107  & ("IS_VALID_FLOAT_MJD: Variable object argument is not assocaited!")
7108 
7109  res = .false.
7110 
7111 !!$ DIM => FIND_DIM(VAR,'time',FOUND)
7112 !!$ IF (.not. FOUND) CALL WARNING &
7113 !!$ & ("IS_VALID_FLOAT_MJD: VARIABLE PASSED DOES NOT HAVE DIMENSION&
7114 !!$ & 'time'", "VARNAME: "//TRIM(VAR%VARNAME))
7115 !!$
7116 !!$ IF (.NOT. DIM%UNLIMITED) CALL WARNING &
7117 !!$ & ("IS_VALID_FLOAT_MJD: VARIABLE PASSED HAS DIMENSION&
7118 !!$ & 'time' BUT IT IS NOT AN 'UNLIMITED' DIMENSION", "VARNAME: "//TRIM(VAR%VARNAME))
7119 
7120 
7121  ! CHECK ATTS FOR THE TIME VARIABLE
7122  att => find_att(var,'units',found)
7123  IF(.not. found) return
7124 
7125  IF(mjd_units .eq. att%chr(1)(1:len_trim(mjd_units)) .or. &
7126  'days since '//trim(date_reference) .eq. att%chr(1)(1:len_trim(mjd_units))) THEN
7127 !JQI IF(mjd_units .eq. ATT%chr(1)(1:len_trim(mjd_units)) ) THEN
7128 
7129  att => find_att(var,'format',found)
7130  IF(.not. found) return
7131 
7132  IF (att%chr(1)(1:len_trim(fmat)) .NE. fmat .and. &
7133  att%chr(1)(1:len_trim(rfmat)) .NE. rfmat) return
7134 !JQI IF (ATT%chr(1)(1:len_trim(fmat)) .NE. fmat ) return
7135 
7136  att => find_att(var,'time_zone',found)
7137  IF(.not. found) return
7138 
7139  IF (.not. is_valid_timezone(att%chr(1))) return
7140  tzone=trim(att%chr(1))
7141 
7142  ELSE IF(days_units .eq. att%chr(1)(1:len_trim(days_units))) THEN
7143 
7144  att => find_att(var,'time_zone',found)
7145  IF(.not. found) return
7146  tzone = trim(att%chr(1))
7147  IF (tzone /= 'none') return
7148 
7149  ELSE
7150  return
7151  END IF
7152 
7153  res = .true.
7154  return
logical function is_valid_timezone(timezone)
Definition: mod_time.f90:628
Here is the caller graph for this function:

◆ is_valid_float_seconds()

logical function mod_nctools::is_valid_float_seconds ( type(ncvar), pointer  VAR,
character(len=80), intent(out)  tzone 
)

Definition at line 7159 of file mod_nctools.f90.

7159  IMPLICIT NONE
7160  character(len=80), intent(out) :: tzone
7161  TYPE(NCATT), POINTER :: ATT
7162  TYPE(NCVAR), POINTER :: VAR
7163  TYPE(NCDIM), POINTER :: DIM
7164  logical :: found, res
7165 
7166  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
7167  & ("IS_VALID_FLOAT_MJD: Variable object argument is not assocaited!")
7168 
7169  res = .false.
7170 
7171 !!$ DIM => FIND_DIM(VAR,'time',FOUND)
7172 !!$ IF (.not. FOUND) CALL WARNING &
7173 !!$ & ("IS_VALID_FLOAT_MJD: VARIABLE PASSED DOES NOT HAVE DIMENSION&
7174 !!$ & 'time'", "VARNAME: "//TRIM(VAR%VARNAME))
7175 !!$
7176 !!$ IF (.NOT. DIM%UNLIMITED) CALL WARNING &
7177 !!$ & ("IS_VALID_FLOAT_MJD: VARIABLE PASSED HAS DIMENSION&
7178 !!$ & 'time' BUT IT IS NOT AN 'UNLIMITED' DIMENSION", "VARNAME: "//TRIM(VAR%VARNAME))
7179 
7180 
7181  ! CHECK ATTS FOR THE TIME VARIABLE
7182  att => find_att(var,'units',found)
7183  IF(.not. found) return
7184 
7185  IF(seconds_units .eq. att%chr(1)(1:len_trim(seconds_units))) THEN
7186 
7187  att => find_att(var,'time_zone',found)
7188  IF(.not. found) THEN
7189  tzone = 'none'
7190  Else
7191  tzone = trim(att%chr(1))
7192  END IF
7193  ELSE
7194  return
7195  END IF
7196 
7197  res = .true.
7198  return
Here is the caller graph for this function:

◆ is_valid_itime()

logical function mod_nctools::is_valid_itime ( type(ncvar), pointer  VAR1,
type(ncvar), pointer  VAR2,
character(len=80), intent(out)  tzone 
)

Definition at line 6874 of file mod_nctools.f90.

6874  IMPLICIT NONE
6875  character(len=80), intent(out) :: tzone
6876  TYPE(NCATT), POINTER :: ATT
6877  TYPE(NCVAR), POINTER :: VAR1,VAR2
6878  TYPE(NCDIM), POINTER :: DIM
6879  logical :: found, res
6880 
6881  IF(.NOT. ASSOCIATED(var1)) CALL fatal_error &
6882  & ("IS_VALID_INT2_MJD: Variable object argument is not assocaited!")
6883 
6884  IF(.NOT. ASSOCIATED(var2)) CALL fatal_error &
6885  & ("IS_VALID_INT2_MJD: Variable object argument is not assocaited!")
6886 
6887  res = .false.
6888 
6889  IF (var1%XTYPE /= nf90_int) RETURN
6890  IF (var2%XTYPE /= nf90_int) RETURN
6891 
6892 !!$ ! CHECK ATTS FOR THE DAYS VARIABLE
6893 !!$ DIM => FIND_DIM(VAR1,'time',FOUND)
6894 !!$ IF (.not. FOUND) CALL WARNING &
6895 !!$ & ("IS_VALID_INT2_MJD: VARIABLE PASSED DOES NOT HAVE DIMENSION&
6896 !!$ & 'time'", "VARNAME: "//TRIM(VAR1%VARNAME))
6897 !!$
6898 !!$ IF (.NOT. DIM%UNLIMITED) CALL WARNING &
6899 !!$ & ("IS_VALID_INT2_MJD: VARIABLE PASSED HAS DIMENSION&
6900 !!$ & 'time' BUT IT IS NOT AN 'UNLIMITED' DIMENSION", "VARNAME: "//TRIM(VAR1%VARNAME))
6901 
6902 
6903  att => find_att(var1,'units',found)
6904  IF(.not. found) return
6905 
6906  IF(mjd_units .eq. att%chr(1)(1:len_trim(mjd_units)) .or. &
6907  'days since '//trim(date_reference) .eq. att%chr(1)(1:len_trim(mjd_units))) THEN
6908 !JQI IF(mjd_units .eq. ATT%chr(1)(1:len_trim(mjd_units))) THEN
6909 
6910  att => find_att(var1,'format',found)
6911  IF(.not. found) return
6912 
6913  IF (att%chr(1)(1:len_trim(fmat)) .NE. fmat .and. &
6914  att%chr(1)(1:len_trim(rfmat)) .NE. rfmat) return
6915 !JQI IF (ATT%chr(1)(1:len_trim(fmat)) .NE. fmat ) return
6916 
6917  att => find_att(var1,'time_zone',found)
6918  IF(.not. found) return
6919  tzone=att%chr(1)
6920 
6921  ELSE IF(days_units .eq. att%chr(1)(1:len_trim(days_units))) THEN
6922 
6923  att => find_att(var1,'time_zone',found)
6924  IF(.not. found) return
6925  tzone = trim(att%chr(1))
6926  IF (tzone /= 'none') return
6927  ELSE
6928  RETURN
6929 
6930  END IF
6931 
6932 
6933 
6934 
6935 !!$ ! CHECK ATTS FOR THE Mili Seconds VARIABLE
6936 !!$ DIM => FIND_DIM(VAR2,'time',FOUND)
6937 !!$ IF (.not. FOUND) CALL WARNING &
6938 !!$ & ("IS_VALID_INT2_MJD: VARIABLE PASSED DOES NOT HAVE DIMENSION&
6939 !!$ & 'time'", "VARNAME: "//TRIM(VAR2%VARNAME))
6940 !!$
6941 !!$ IF (.NOT. DIM%UNLIMITED) CALL WARNING &
6942 !!$ & ("IS_VALID_INT2_MJD: VARIABLE PASSED HAS DIMENSION&
6943 !!$ & 'time' BUT IT IS NOT AN 'UNLIMITED' DIMENSION", "VARNAME: "//TRIM(VAR2%VARNAME))
6944 
6945  att => find_att(var2,'units',found)
6946  IF(.not. found) return
6947 
6948  IF(att%chr(1)(1:len_trim(msec_units)) .NE. msec_units) RETURN
6949 
6950 
6951  att => find_att(var2,'time_zone',found)
6952  IF(.not. found) return
6953 
6954 
6955  ! TIME ZONE MUST BE THE SAME FOR BOTH ITEME'S
6956  IF (trim(att%chr(1)) /= trim(tzone)) RETURN
6957 
6958 
6959  res = .true.
6960  return
6961 
6962 
Here is the caller graph for this function:

◆ itime2_object()

type(ncvar) function, pointer mod_nctools::itime2_object ( logical, intent(in)  use_mjd,
type(ncdim), optional, pointer  DIM,
integer, optional  size 
)

Definition at line 7024 of file mod_nctools.f90.

7024  IMPLICIT NONE
7025  TYPE(NCVAR), POINTER :: VAR
7026  logical, intent(in) :: use_mjd
7027  TYPE(NCDIM), POINTER, OPTIONAL :: DIM
7028  INTEGER, OPTIONAL :: SIZE
7029  TYPE(NCATT), POINTER :: ATT
7030  INTEGER,POINTER :: Data_vec(:)
7031  INTEGER,POINTER :: Data_scl
7032 
7033  IF(PRESENT(size)) THEN
7034  ALLOCATE(data_vec(size))
7035  ELSE
7036  ALLOCATE(data_vec(1))
7037  data_scl =>data_vec(1)
7038  END IF
7039 
7040  IF (PRESENT(dim)) THEN
7041 
7042  var => nc_make_pvar(name='Itime2', values=data_vec, dim1= dim)
7043  var%SCL_INT => var%VEC_INT(1)
7044  ELSE
7045  var => nc_make_pvar(name='Itime2', values=data_scl)
7046  END IF
7047 
7048  IF (use_mjd) THEN
7049  att => nc_make_att(name='units',values=msec_units)
7050  var => add(var,att)
7051 
7052  att => nc_make_att(name='time_zone',values='UTC')
7053  var => add(var,att)
7054  ELSE
7055  att => nc_make_att(name='units',values=msec_units)
7056  var => add(var,att)
7057 
7058  att => nc_make_att(name='time_zone',values='none')
7059  var => add(var,att)
7060  END IF
7061 
7062 
Here is the caller graph for this function:

◆ itime_object()

type(ncvar) function, pointer mod_nctools::itime_object ( logical, intent(in)  use_mjd,
type(ncdim), optional, pointer  DIM,
integer, optional  size 
)

Definition at line 6967 of file mod_nctools.f90.

6967  IMPLICIT NONE
6968  TYPE(NCVAR), POINTER :: VAR
6969  logical, intent(in) :: use_mjd
6970  TYPE(NCDIM), POINTER, OPTIONAL :: DIM
6971  INTEGER, OPTIONAL :: SIZE
6972  TYPE(NCATT), POINTER :: ATT
6973  INTEGER,POINTER :: Data_vec(:)
6974  INTEGER,POINTER :: Data_scl
6975 
6976  IF(PRESENT(size)) THEN
6977  ALLOCATE(data_vec(size))
6978  ELSE
6979  ALLOCATE(data_vec(1))
6980  data_scl =>data_vec(1)
6981  END IF
6982 
6983  ! Itime
6984  IF (PRESENT(dim)) THEN
6985  var => nc_make_pvar(name='Itime', values=data_vec, dim1= dim)
6986  var%SCL_INT => var%VEC_INT(1)
6987  ELSE
6988  var => nc_make_pvar(name='Itime', values=data_scl)
6989  END IF
6990 
6991  IF (use_mjd) THEN
6992  IF(date_reference == 'default')THEN
6993 
6994  att => nc_make_att(name='units',values=mjd_units)
6995  var => add(var,att)
6996 
6997  att => nc_make_att(name='format',values=fmat)
6998  var => add(var,att)
6999 
7000  ELSE
7001 
7002  att => nc_make_att(name='units',values='days since '//trim(date_reference))
7003  var => add(var,att)
7004 
7005  att => nc_make_att(name='format',values=rfmat)
7006  var => add(var,att)
7007 
7008  END IF
7009 
7010  att => nc_make_att(name='time_zone',values='UTC')
7011  var => add(var,att)
7012  ELSE
7013  att => nc_make_att(name='units',values=days_units)
7014  var => add(var,att)
7015 
7016  att => nc_make_att(name='time_zone',values='none')
7017  var => add(var,att)
7018  END IF
7019 
Here is the caller graph for this function:

◆ nc_close()

subroutine mod_nctools::nc_close ( type(ncfile), intent(inout)  NCF)

Definition at line 304 of file mod_nctools.f90.

304  IMPLICIT NONE
305  TYPE(NCFILE), intent(INOUT) :: NCF
306  CHARACTER(LEN=120) :: errmsg
307  integer :: status
308  if(dbg_set(dbg_sbr)) &
309  & write(ipt,*) "STARTING NC_CLOSE"
310  errmsg="File:"//trim(ncf%fname)//"; Not open or Already closed file"
311  status = nf90_close(ncf%ncid)
312  CALL handle_ncerr(status,trim(errmsg))
313  ncf%ncid=-1
314  ncf%OPEN=.false.
315  ncf%INDEFMODE = .false.
316  if(dbg_set(dbg_io)) &
317  & write(ipt,*) "Closed File: ",trim(ncf%FNAME)
318  if(dbg_set(dbg_sbr)) &
319  & write(ipt,*) "END NC_CLOSE"
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_connect_avar_arr_dbl()

subroutine mod_nctools::nc_connect_avar_arr_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), dimension(:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 3024 of file mod_nctools.f90.

3024  IMPLICIT NONE
3025  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3026  real(DP), allocatable, target, intent(in) :: values(:,:)
3027 
3028  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3029  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_DBL)")
3030 
3031  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
3032  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3033  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3034 
3035  var%ARR_DBL => values
3036 

◆ nc_connect_avar_arr_flt()

subroutine mod_nctools::nc_connect_avar_arr_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), dimension(:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 2862 of file mod_nctools.f90.

2862  IMPLICIT NONE
2863  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2864  REAL(SPA), allocatable, target, intent(in) :: values(:,:)
2865 
2866  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2867  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_FLT)")
2868 
2869  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
2870  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2871  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2872 
2873  var%ARR_FLT => values
2874 

◆ nc_connect_avar_arr_int()

subroutine mod_nctools::nc_connect_avar_arr_int ( type(ncvar), intent(inout), pointer  VAR,
integer, dimension(:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 2943 of file mod_nctools.f90.

2943  IMPLICIT NONE
2944  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2945  INTEGER, allocatable, target, intent(in) :: values(:,:)
2946 
2947  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2948  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_INT)")
2949 
2950  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
2951  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2952  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2953 
2954  var%ARR_INT => values
2955 

◆ nc_connect_avar_cub_dbl()

subroutine mod_nctools::nc_connect_avar_cub_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), dimension(:,:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 3041 of file mod_nctools.f90.

3041  IMPLICIT NONE
3042  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3043  real(DP), allocatable, target, intent(in) :: values(:,:,:)
3044 
3045  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3046  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_DBL)")
3047 
3048  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
3049  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3050  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3051 
3052  var%CUB_DBL => values
3053 

◆ nc_connect_avar_cub_flt()

subroutine mod_nctools::nc_connect_avar_cub_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), dimension(:,:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 2879 of file mod_nctools.f90.

2879  IMPLICIT NONE
2880  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2881  REAL(SPA), allocatable, target, intent(in) :: values(:,:,:)
2882 
2883  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2884  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_FLT)")
2885 
2886  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
2887  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2888  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2889 
2890  var%CUB_FLT => values
2891 

◆ nc_connect_avar_cub_int()

subroutine mod_nctools::nc_connect_avar_cub_int ( type(ncvar), intent(inout), pointer  VAR,
integer, dimension(:,:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 2960 of file mod_nctools.f90.

2960  IMPLICIT NONE
2961  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2962  INTEGER, allocatable, target, intent(in) :: values(:,:,:)
2963 
2964  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2965  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_INT)")
2966 
2967  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
2968  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2969  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2970 
2971  var%CUB_INT => values
2972 

◆ nc_connect_avar_fda_dbl()

subroutine mod_nctools::nc_connect_avar_fda_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), dimension(:,:,:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 3058 of file mod_nctools.f90.

3058  IMPLICIT NONE
3059  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3060  real(DP), allocatable, target, intent(in) :: values(:,:,:,:)
3061 
3062  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3063  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_DBL)")
3064 
3065  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
3066  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3067  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3068 
3069  var%FDA_DBL => values
3070 

◆ nc_connect_avar_fda_flt()

subroutine mod_nctools::nc_connect_avar_fda_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), dimension(:,:,:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 2896 of file mod_nctools.f90.

2896  IMPLICIT NONE
2897  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2898  REAL(SPA), allocatable, target, intent(in) :: values(:,:,:,:)
2899 
2900  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2901  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_FLT)")
2902 
2903  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
2904  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2905  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2906 
2907  var%FDA_FLT => values
2908 

◆ nc_connect_avar_fda_int()

subroutine mod_nctools::nc_connect_avar_fda_int ( type(ncvar), intent(inout), pointer  VAR,
integer, dimension(:,:,:,:), intent(in), allocatable, target  VALUES 
)

Definition at line 2977 of file mod_nctools.f90.

2977  IMPLICIT NONE
2978  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2979  INTEGER, allocatable, target, intent(in) :: values(:,:,:,:)
2980 
2981  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2982  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_INT)")
2983 
2984  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
2985  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2986  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2987 
2988  var%FDA_INT => values
2989 

◆ nc_connect_avar_scl_dbl()

subroutine mod_nctools::nc_connect_avar_scl_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), intent(in), target  VALUES 
)

Definition at line 2994 of file mod_nctools.f90.

2994  IMPLICIT NONE
2995  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2996  REAL(DP), target, intent(in) :: values
2997 
2998  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2999  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_DBL)")
3000 
3001  var%SCL_DBL => values
3002 

◆ nc_connect_avar_scl_flt()

subroutine mod_nctools::nc_connect_avar_scl_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), intent(in), target  VALUES 
)

Definition at line 2831 of file mod_nctools.f90.

2831  IMPLICIT NONE
2832  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2833  REAL(SPA), target, intent(in) :: values
2834 
2835  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2836  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_FLT)")
2837 
2838  var%SCL_FLT => values
2839 

◆ nc_connect_avar_scl_int()

subroutine mod_nctools::nc_connect_avar_scl_int ( type(ncvar), intent(inout), pointer  VAR,
integer, intent(in), target  VALUES 
)

Definition at line 2913 of file mod_nctools.f90.

2913  IMPLICIT NONE
2914  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2915  INTEGER, target, intent(in) :: values
2916 
2917  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2918  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_INT)")
2919 
2920  var%SCL_INT => values
2921 

◆ nc_connect_avar_vec_chr()

subroutine mod_nctools::nc_connect_avar_vec_chr ( type(ncvar), intent(inout), pointer  VAR,
character(len=80), dimension(:), intent(in), allocatable, target  VALUES 
)

Definition at line 3346 of file mod_nctools.f90.

3346  IMPLICIT NONE
3347  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3348  CHARACTER(LEN=80), target,ALLOCATABLE, intent(in) :: values(:)
3349 
3350  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3351  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_CHR)")
3352 
3353  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
3354  & ("THE CHARACTER ALLOCATABLE MUST BE ALLOCATED BEFORE BEING PASSE&
3355  &D TO NC_CONNECT_VAR:", var%VARNAME)
3356 
3357  ! DO NO TYPE OR DIMENSION MATCHING HERE... TO COMPLICATED
3358 
3359  var%VEC_CHR => values
3360 
3361 

◆ nc_connect_avar_vec_dbl()

subroutine mod_nctools::nc_connect_avar_vec_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), dimension(:), intent(in), allocatable, target  VALUES 
)

Definition at line 3007 of file mod_nctools.f90.

3007  IMPLICIT NONE
3008  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3009  real(DP), allocatable, target, intent(in) :: values(:)
3010 
3011  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3012  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_DBL)")
3013 
3014  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
3015  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3016  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3017 
3018  var%VEC_DBL => values
3019 

◆ nc_connect_avar_vec_flt()

subroutine mod_nctools::nc_connect_avar_vec_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), dimension(:), intent(in), allocatable, target  VALUES 
)

Definition at line 2844 of file mod_nctools.f90.

2844  IMPLICIT NONE
2845  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2846  REAL(SPA), allocatable, target, intent(in) :: values(:)
2847 
2848  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2849  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_FLT)")
2850 
2851  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
2852  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2853  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2854 
2855 
2856  var%VEC_FLT => values
2857 

◆ nc_connect_avar_vec_int()

subroutine mod_nctools::nc_connect_avar_vec_int ( type(ncvar), intent(inout), pointer  VAR,
integer, dimension(:), intent(in), allocatable, target  VALUES 
)

Definition at line 2926 of file mod_nctools.f90.

2926  IMPLICIT NONE
2927  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2928  INTEGER, allocatable, target, intent(in) :: values(:)
2929 
2930  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2931  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_INT)")
2932 
2933  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
2934  & ("NC_CONNECT_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
2935  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
2936 
2937  var%VEC_INT => values
2938 

◆ nc_connect_pvar_arr_dbl()

subroutine mod_nctools::nc_connect_pvar_arr_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), dimension(:,:), pointer  VALUES 
)

Definition at line 3279 of file mod_nctools.f90.

3279  IMPLICIT NONE
3280  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3281  real(DP), POINTER :: values(:,:)
3282 
3283  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3284  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_DBL)")
3285 
3286  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3287  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3288  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3289 
3290  var%ARR_DBL => values
3291 

◆ nc_connect_pvar_arr_flt()

subroutine mod_nctools::nc_connect_pvar_arr_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), dimension(:,:), pointer  VALUES 
)

Definition at line 3109 of file mod_nctools.f90.

3109  IMPLICIT NONE
3110  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3111  REAL(SPA),POINTER :: values(:,:)
3112 
3113  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3114  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_FLT)")
3115 
3116  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3117  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3118  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3119 
3120  var%ARR_FLT => values
3121 

◆ nc_connect_pvar_arr_int()

subroutine mod_nctools::nc_connect_pvar_arr_int ( type(ncvar), intent(inout), pointer  VAR,
integer, dimension(:,:), pointer  VALUES 
)

Definition at line 3194 of file mod_nctools.f90.

3194  IMPLICIT NONE
3195  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3196  INTEGER, POINTER :: values(:,:)
3197 
3198  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3199  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_INT)")
3200 
3201  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3202  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3203  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3204 
3205  var%ARR_INT => values
3206 

◆ nc_connect_pvar_cub_dbl()

subroutine mod_nctools::nc_connect_pvar_cub_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), dimension(:,:,:), pointer  VALUES 
)

Definition at line 3296 of file mod_nctools.f90.

3296  IMPLICIT NONE
3297  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3298  real(DP), POINTER :: values(:,:,:)
3299 
3300  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3301  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_DBL)")
3302 
3303  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3304  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3305  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3306 
3307  var%CUB_DBL => values
3308 

◆ nc_connect_pvar_cub_flt()

subroutine mod_nctools::nc_connect_pvar_cub_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), dimension(:,:,:), pointer  VALUES 
)

Definition at line 3126 of file mod_nctools.f90.

3126  IMPLICIT NONE
3127  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3128  REAL(SPA),POINTER :: values(:,:,:)
3129 
3130  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3131  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_FLT)")
3132 
3133  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3134  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3135  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3136 
3137  var%CUB_FLT => values
3138 

◆ nc_connect_pvar_cub_int()

subroutine mod_nctools::nc_connect_pvar_cub_int ( type(ncvar), intent(inout), pointer  VAR,
integer, dimension(:,:,:), pointer  VALUES 
)

Definition at line 3211 of file mod_nctools.f90.

3211  IMPLICIT NONE
3212  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3213  INTEGER, POINTER :: values(:,:,:)
3214 
3215  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3216  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_INT)")
3217 
3218  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3219  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3220  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3221 
3222  var%CUB_INT => values
3223 

◆ nc_connect_pvar_fda_dbl()

subroutine mod_nctools::nc_connect_pvar_fda_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), dimension(:,:,:,:), pointer  VALUES 
)

Definition at line 3313 of file mod_nctools.f90.

3313  IMPLICIT NONE
3314  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3315  real(DP), POINTER :: values(:,:,:,:)
3316 
3317  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3318  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_DBL)")
3319 
3320  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3321  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3322  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3323 
3324  var%FDA_DBL => values
3325 

◆ nc_connect_pvar_fda_flt()

subroutine mod_nctools::nc_connect_pvar_fda_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), dimension(:,:,:,:), pointer  VALUES 
)

Definition at line 3143 of file mod_nctools.f90.

3143  IMPLICIT NONE
3144  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3145  REAL(SPA),POINTER :: values(:,:,:,:)
3146 
3147  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3148  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_FLT)")
3149 
3150  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3151  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3152  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3153 
3154  var%FDA_FLT => values
3155 

◆ nc_connect_pvar_fda_int()

subroutine mod_nctools::nc_connect_pvar_fda_int ( type(ncvar), intent(inout), pointer  VAR,
integer, dimension(:,:,:,:), pointer  VALUES 
)

Definition at line 3228 of file mod_nctools.f90.

3228  IMPLICIT NONE
3229  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3230  INTEGER, POINTER :: values(:,:,:,:)
3231 
3232  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3233  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_INT)")
3234 
3235  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3236  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3237  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3238 
3239  var%FDA_INT => values
3240 

◆ nc_connect_pvar_scl_chr()

subroutine mod_nctools::nc_connect_pvar_scl_chr ( type(ncvar), intent(inout), pointer  VAR,
character(len=80), intent(in), pointer  VALUES 
)

Definition at line 3366 of file mod_nctools.f90.

3366  IMPLICIT NONE
3367  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3368  CHARACTER(LEN=80), pointer, intent(in) :: values
3369 
3370  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3371  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_CHR)")
3372 
3373  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3374  & ("THE CHARACTER POINTER MUST BE ASSOCIATED BEFORE BEING PASSE&
3375  &D TO NC_CONNECT_VAR:", var%VARNAME)
3376 
3377  ! DO NO TYPE OR DIMENSION MATCHING HERE... TO COMPLICATED
3378 
3379  var%SCL_CHR => values
3380 
3381 

◆ nc_connect_pvar_scl_dbl()

subroutine mod_nctools::nc_connect_pvar_scl_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), pointer  VALUES 
)

Definition at line 3245 of file mod_nctools.f90.

3245  IMPLICIT NONE
3246  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3247  REAL(DP), POINTER :: values
3248 
3249  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3250  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_DBL)")
3251 
3252  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3253  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3254  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3255 
3256  var%SCL_DBL => values
3257 

◆ nc_connect_pvar_scl_flt()

subroutine mod_nctools::nc_connect_pvar_scl_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), pointer  VALUES 
)

Definition at line 3075 of file mod_nctools.f90.

3075  IMPLICIT NONE
3076  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3077  REAL(SPA), POINTER :: values
3078 
3079  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3080  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_FLT)")
3081 
3082  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3083  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_FLT)")
3084 
3085  var%SCL_FLT => values
3086 

◆ nc_connect_pvar_scl_int()

subroutine mod_nctools::nc_connect_pvar_scl_int ( type(ncvar), intent(inout), pointer  VAR,
integer, pointer  VALUES 
)

Definition at line 3160 of file mod_nctools.f90.

3160  IMPLICIT NONE
3161  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3162  INTEGER, POINTER :: values
3163 
3164  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3165  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_INT)")
3166 
3167  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3168  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3169  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3170 
3171  var%SCL_INT => values
3172 

◆ nc_connect_pvar_vec_chr()

subroutine mod_nctools::nc_connect_pvar_vec_chr ( type(ncvar), intent(inout), pointer  VAR,
character(len=80), dimension(:), intent(in), pointer  VALUES 
)

Definition at line 3386 of file mod_nctools.f90.

3386  IMPLICIT NONE
3387  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3388  CHARACTER(LEN=80), pointer, intent(in) :: values(:)
3389 
3390  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3391  & ("NC_CONNECT_AVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_CHR)")
3392 
3393  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3394  & ("THE CHARACTER POINTER MUST BE ASSOCIATED BEFORE BEING PASSE&
3395  &D TO NC_CONNECT_VAR:", var%VARNAME)
3396 
3397  ! DO NO TYPE OR DIMENSION MATCHING HERE... TO COMPLICATED
3398 
3399  var%VEC_CHR => values
3400 
3401 

◆ nc_connect_pvar_vec_dbl()

subroutine mod_nctools::nc_connect_pvar_vec_dbl ( type(ncvar), intent(inout), pointer  VAR,
real(dp), dimension(:), pointer  VALUES 
)

Definition at line 3262 of file mod_nctools.f90.

3262  IMPLICIT NONE
3263  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3264  real(DP), POINTER :: values(:)
3265 
3266  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3267  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_DBL)")
3268 
3269  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3270  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3271  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3272 
3273  var%VEC_DBL => values
3274 

◆ nc_connect_pvar_vec_flt()

subroutine mod_nctools::nc_connect_pvar_vec_flt ( type(ncvar), intent(inout), pointer  VAR,
real(spa), dimension(:), pointer  VALUES 
)

Definition at line 3091 of file mod_nctools.f90.

3091  IMPLICIT NONE
3092  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3093  REAL(SPA), POINTER :: values(:)
3094 
3095  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3096  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_FLT)")
3097 
3098  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3099  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3100  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3101 
3102 
3103  var%VEC_FLT => values
3104 

◆ nc_connect_pvar_vec_int()

subroutine mod_nctools::nc_connect_pvar_vec_int ( type(ncvar), intent(inout), pointer  VAR,
integer, dimension(:), pointer  VALUES 
)

Definition at line 3177 of file mod_nctools.f90.

3177  IMPLICIT NONE
3178  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3179  INTEGER,POINTER :: values(:)
3180 
3181  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3182  & ("NC_CONNECT_PVAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_INT)")
3183 
3184  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
3185  & ("NC_CONNECT_PVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
3186  & "ERROR CONNECTING VARIABLE: "//trim(var%VARNAME))
3187 
3188  var%VEC_INT => values
3189 

◆ nc_connect_var_scl_chr()

subroutine mod_nctools::nc_connect_var_scl_chr ( type(ncvar), intent(inout), pointer  VAR,
character(len=80), intent(in), target  VALUES 
)

Definition at line 3330 of file mod_nctools.f90.

3330  IMPLICIT NONE
3331  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3332  CHARACTER(LEN=80), target, intent(in) :: values
3333 
3334  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3335  & ("NC_CONNECT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_CHR)")
3336 
3337  ! DO NO TYPE OR DIMENSION MATCHING HERE... TO COMPLICATED
3338 
3339  var%SCL_CHR => values
3340 
3341 

◆ nc_create()

subroutine mod_nctools::nc_create ( type(ncfile), intent(inout)  NCF)

Definition at line 269 of file mod_nctools.f90.

269  IMPLICIT NONE
270  TYPE(NCFILE), intent(inout) :: NCF
271  CHARACTER(LEN=120) :: errmsg
272  integer :: status
273  if(dbg_set(dbg_sbr)) &
274  & write(ipt,*) "STARTING NC_CREATE"
275 
276  errmsg="File named: "//ncf%fname//"; Can not be created by nf90_create"
277  status = nf90_create(trim(ncf%fname),nf90_64bit_offset,ncf%ncid)
278  if(status/= nf90_eexist)then
279  CALL handle_ncerr(status,trim(errmsg))
280  else
281  CALL fatal_error("The file: "//trim(ncf%fname)//"; already exists",&
282  & "FVCOM will not overwrite old output files. You must move&
283  & or delete them first")
284  end if
285  ncf%writable = .true.
286  ncf%OPEN = .true.
287  ncf%INDEFMODE = .true.
288  ncf%CONNECTED=.false.
289 
290  IF (ASSOCIATED(ncf%FTIME) ) THEN
291  ncf%FTIME%NEXT_STKCNT = 0
292  ncf%FTIME%STK_LEN=0
293  END IF
294 
295 
296  if(dbg_set(dbg_io)) &
297  & write(ipt,*) "Created File: ",trim(ncf%FNAME)
298  if(dbg_set(dbg_sbr)) &
299  & write(ipt,*) "END NC_CREATE"
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_def_dim()

subroutine mod_nctools::nc_def_dim ( type(ncfile), intent(inout)  NCF,
integer, intent(in)  DIMID 
)

Definition at line 594 of file mod_nctools.f90.

594  implicit none
595  INTEGER, INTENT(IN) :: DIMID
596  TYPE(NCFILE), INTENT(INOUT):: NCF ! MUST BE ALLOWED TO SET UNLIMDIMID
597  TYPE(NCDIM), POINTER :: DIM
598  INTEGER :: status, tmp
599  LOGICAL FOUND
600 
601  dim => find_dim(ncf,dimid,found)
602 
603  IF (.NOT. found) THEN
604  if (dbg_set(dbg_log)) call print_dim_list(ncf)
605  CALL fatal_error&
606  &("NC_DEF_DIM: COULD NOT FIND THE FILE DIMENSION WITH CORRECT DIMID W&
607  &HILE DEFINING THE DIMENSION IN THE FILE")
608  END IF
609 
610  IF(dim%UNLIMITED) THEN
611  status = nf90_def_dim(ncf%ncid,dim%dimname, nf90_unlimited,tmp)
612  ELSE
613  status = nf90_def_dim(ncf%ncid,dim%dimname, dim%dim, tmp)
614  END IF
615 
616  CALL handle_ncerr(status,"ERROR DURING DEF_DIM, DIMNAME:"//trim(dim%DIMNAME))
617 
618  if (tmp .NE. dim%dimid) CALL fatal_error &
619  &("NC_DEF_DIM: NF90_DEF_DIM returned a dimension id which",&
620  & "is different from that set in the dimension object!",&
621  & trim(ncf%FNAME)//" : "//trim(dim%DIMNAME))
622 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_def_var()

subroutine mod_nctools::nc_def_var ( type(ncfile), intent(in), target  NCF,
integer, intent(in)  varid 
)

Definition at line 3815 of file mod_nctools.f90.

3815  implicit none
3816  TYPE(NCFILE), target,intent(in) :: NCF
3817  integer, intent(in) :: varid
3818  TYPE(NCVAR),pointer :: VAR
3819  TYPE(NCATT),pointer :: ATT
3820  TYPE(NCFILE), pointer :: NCFP
3821 
3822  integer, POINTER :: dimids(:)
3823  integer :: status,i
3824  CHARACTER(LEN=120) :: errmsg
3825  LOGICAL FOUND
3826 
3827  if(dbg_set(dbg_sbr)) &
3828  & write(ipt,*) "START NC_DEF_VAR"
3829 
3830  var => find_var(ncf,varid,found)
3831  IF (.NOT. found) THEN
3832  if (dbg_set(dbg_log)) call print_var_list(ncf)
3833  CALL fatal_error&
3834  &("NC_DEF_VAR: COULD NOT FIND THE FILE VARIABLE WITH CORRECT VARID W&
3835  &HILE DEFINING THE VARIABLE IN THE FILE")
3836  END IF
3837 
3838  ! MAKE AN ARRAY TO HOLD THE DIMIDS
3839  dimids => var_dimids(var)
3840 
3841  status = nf90_def_var(ncf%ncid, trim(var%varname), var%xtype,&
3842  & dimids, i)
3843 
3844 
3845  errmsg="NF90_DEF_VAR: ERROR"
3846  CALL handle_ncerr(status,trim(errmsg))
3847 
3848  DEALLOCATE(dimids)
3849  NULLIFY(dimids)
3850 
3851  IF (varid .NE. i) THEN
3852  CALL print_var(var)
3853  CALL fatal_error&
3854  &("NC_DEF_VAR: THE VARID RETURNED BY NF90_DEF_VAR DOES NOT MATC&
3855  &H THE VARID FOR THE VARIABLE OBJECT")
3856  END IF
3857 
3858 
3859  Do i = 1,count_att_list(var)
3860  att => find_att(var,i,found)
3861  IF (.NOT. found) THEN
3862  if (dbg_set(dbg_log)) call print_att_list(var)
3863  CALL fatal_error&
3864  &("NC_DEF_VAR: COULD NOT FIND THE VARIABLE ATTRIBUTE WITH CORRECT ATTID W&
3865  &HILE PUTTING THE ATTRIBUTE IN THE FILE")
3866  END IF
3867 
3868  CALL write_att_type(ncf%NCID,varid,att)
3869  End Do
3870 
3871  if(dbg_set(dbg_sbr)) &
3872  & write(ipt,*) "END NC_DEF_VAR"
3873 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_disconnect()

subroutine mod_nctools::nc_disconnect ( type(ncvar), intent(inout), pointer  VAR)

Definition at line 2800 of file mod_nctools.f90.

2800  IMPLICIT NONE
2801  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
2802 
2803  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
2804  & ("NC_DISCONNECT: THE VARIABLE ARGUMENT MUST BE ASSOCIATED")
2805 
2806  nullify(var%scl_int)
2807  nullify(var%vec_int)
2808  nullify(var%arr_int)
2809  nullify(var%cub_int)
2810  nullify(var%fda_int)
2811 
2812  nullify(var%scl_flt)
2813  nullify(var%vec_flt)
2814  nullify(var%arr_flt)
2815  nullify(var%cub_flt)
2816  nullify(var%fda_flt)
2817 
2818  nullify(var%scl_dbl)
2819  nullify(var%vec_dbl)
2820  nullify(var%arr_dbl)
2821  nullify(var%cub_dbl)
2822  nullify(var%fda_dbl)
2823 
2824  nullify(var%scl_chr)
2825  nullify(var%vec_chr)
2826 
Here is the caller graph for this function:

◆ nc_get_dim()

type(ncdim) function, pointer mod_nctools::nc_get_dim ( type(ncfile), intent(in)  NCF,
integer, intent(in)  dimid 
)

Definition at line 529 of file mod_nctools.f90.

529  implicit none
530  TYPE(NCFILE), INTENT(IN) :: NCF
531  TYPE(NCDIM), POINTER :: DIM
532  INTEGER, intent(in) :: dimid
533  integer :: status
534  CHARACTER(LEN=120) :: errmsg
535 
536  if(dbg_set(dbg_sbr)) &
537  & write(ipt,*) "START NC_GET_DIM"
538  nullify(dim)
539 
540  dim => new_dim()
541  dim%DIMID=dimid
542  status = nf90_inquire_dimension(ncf%NCID,dimid,dim%DIMNAME, dim%DIM)
543  errmsg="Can not get dimensions: "//trim(ncf%FNAME)
544  call handle_ncerr(status,errmsg)
545 
546 ! if(dimid == NCF%UNLIMDIMID) DIM%UNLIMITED = .TRUE.
547 
548  if(dbg_set(dbg_sbr)) &
549  & write(ipt,*) "END NC_GET_DIM"
550 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_get_gatt()

type(ncatt) function, pointer mod_nctools::nc_get_gatt ( type(ncfile), intent(in)  NCF,
integer, intent(in)  attid 
)

Definition at line 847 of file mod_nctools.f90.

847  implicit none
848  TYPE(NCFILE), INTENT(IN) :: NCF
849  TYPE(NCATT), pointer :: ATT
850  integer, intent(in) :: attid
851  integer :: status
852  CHARACTER(LEN=120) :: errmsg
853  CHARACTER(LEN=NF90_MAX_NAME+1) :: NAME
854 
855  if(dbg_set(dbg_sbr)) &
856  & write(ipt,*) "START NC_GET_GATT"
857 
858  status=nf90_inq_attname(ncf%NCID,nf90_global,attid,name)
859  errmsg="Can not get a file's global attribute name: "//trim(ncf%FNAME)
860  call handle_ncerr(status,errmsg)
861 
862  att => new_att()
863  att%attname=trim(name)
864  att%attID=attid
865 
866  status = nf90_inquire_attribute &
867  & (ncf%NCID,nf90_global,trim(att%ATTNAME),att%XTYPE,att%LEN)
868 
869  call read_att_type(ncf%NCID,nf90_global,att)
870 
871  if(dbg_set(dbg_sbr)) &
872  & write(ipt,*) "END NC_GET_GATT"
Here is the call graph for this function:

◆ nc_get_var()

type(ncvar) function, pointer mod_nctools::nc_get_var ( type(ncfile), intent(in)  NCF,
integer, intent(in)  varid 
)

Definition at line 3729 of file mod_nctools.f90.

3729  implicit none
3730  TYPE(NCFILE), intent(in) :: NCF
3731  integer, intent(in) :: varid
3732  TYPE(NCVAR),pointer :: VAR
3733  TYPE(NCATT),pointer :: ATT
3734  TYPE(NCDIM),pointer :: DIM
3735  integer :: nDims, nAtts, xtype
3736  integer, allocatable :: dimids(:)
3737  integer :: status,i
3738  CHARACTER(LEN=120) :: errmsg
3739  LOGICAL FOUND
3740  CHARACTER(Len=NF90_MAX_NAME+1) :: NAME
3741 
3742  if(dbg_set(dbg_sbr)) &
3743  & write(ipt,*) "START NC_GET_VAR"
3744 
3745  status=nf90_inquire_variable(ncf%NCID,varid,&
3746  & name = name,&
3747  & xtype = xtype, &
3748  & ndims= ndims, &
3749  & natts= natts )
3750  errmsg="Can not get variable info: "//trim(ncf%FNAME)
3751  call handle_ncerr(status,errmsg)
3752 
3753 
3754  var => new_var()
3755  var%varname=trim(name)
3756  var%varid=varid
3757  var%NCID => ncf%NCID
3758  var%XTYPE=xtype
3759 
3760 
3761  if(dbg_set(dbg_io)) write(ipt,*)"====== ADDING VARIABLE ATTRIBUTES: "//trim(var%VARNAME)
3762 
3763 
3764  allocate(dimids(ndims),stat=status)
3765  if(status /= 0) CALL fatal_error("NC_GET_VAR: Can not allocate DIMIDS")
3766 
3767  status=nf90_inquire_variable(ncf%NCID,var%VARID, dimids = dimids)
3768  errmsg="Can not get variable dimids: "//trim(ncf%FNAME)//":"//trim(var%VARNAME)
3769  call handle_ncerr(status,errmsg)
3770 
3771  ! ADD THE VARIABLES DIMENSIONS TO ITS LINKED LIST FROM THE FILES DIMENSIONS
3772  if(dbg_set(dbg_io)) write(ipt,*) "====== ADDING VARIABLE DIMENSIONS:"
3773  do i=1,ndims
3774  dim => find_dim(ncf,dimids(i),found)
3775  IF(.not. found) THEN
3776  CALL print_dim_list(ncf)
3777  CALL fatal_error("NC_GET_VAR: COULD NOT FIND ONE &
3778  &OF THE FILE DIMENSION OBJECTS FOR THE VARIABLE: "//trim(var&
3779  &%VARNAME), "IN THE FILE: "//trim(ncf%FNAME))
3780  END IF
3781 
3782  if(dbg_set(dbg_io)) write(ipt,*) " "//trim(dim%DIMNAME)
3783  var => add(var,dim)
3784  end do
3785  DEALLOCATE(dimids)
3786 
3787  if(ndims /= count_dim_list(var)) then
3788  if(dbg_set(dbg_log)) call print_dim_list(ncf)
3789  if(dbg_set(dbg_log)) call print_dim_list(var)
3790  call fatal_error("The number of dimensions in the variable does not m&
3791  &atch the number loaded in the variable object list.")
3792  end if
3793 
3794 
3795  if(dbg_set(dbg_io)) write(ipt,*) "====== ADDING VARIABLE ATTRIBUTES:"
3796  do i=1,natts
3797  att => nc_get_att(var,i)
3798  if(dbg_set(dbg_io)) write(ipt,*) " "//trim(att%ATTNAME)
3799  var => add(var,att)
3800  end do
3801 
3802  if(natts /= count_att_list(var)) then
3803  if(dbg_set(dbg_log)) call print_att_list(var)
3804  call fatal_error("The number of attributes in the file does not m&
3805  &atch the number loaded in the file object.")
3806  end if
3807 
3808  if(dbg_set(dbg_sbr)) &
3809  & write(ipt,*) "END NC_GET_VAR"
3810 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_get_vatt()

type(ncatt) function, pointer mod_nctools::nc_get_vatt ( type(ncvar), intent(in)  VAR,
integer, intent(in)  attid 
)

Definition at line 877 of file mod_nctools.f90.

877  implicit none
878  TYPE(NCVAR), INTENT(IN) :: VAR
879  TYPE(NCATT), pointer :: ATT
880  integer, intent(in) :: attid
881  integer :: status
882  CHARACTER(LEN=120) :: errmsg
883  CHARACTER(LEN=NF90_MAX_NAME+1) :: NAME
884 
885  if(dbg_set(dbg_sbr)) &
886  & write(ipt,*) "START NC_GET_VATT"
887 
888  status=nf90_inq_attname(var%NCID,var%VARID,attid,name)
889  errmsg="Can not get variable attribute name: "//trim(var%VARNAME)
890  call handle_ncerr(status,errmsg)
891 
892  att => new_att()
893  att%attname=trim(name)
894  att%attID=attid
895 
896  status = nf90_inquire_attribute &
897  & (var%NCID,var%VARID,trim(att%ATTNAME),att%XTYPE,att%LEN)
898 
899  call read_att_type(var%NCID,var%VARID,att)
900 
901  if(dbg_set(dbg_sbr)) &
902  & write(ipt,*) "END NC_GET_VATT"
Here is the call graph for this function:

◆ nc_init()

subroutine mod_nctools::nc_init ( type(ncfile), pointer  NCF,
character(len=*), intent(in)  NAME 
)

Definition at line 221 of file mod_nctools.f90.

221  IMPLICIT NONE
222  TYPE(NCFILE), POINTER :: NCF
223  CHARACTER(LEN=*), INTENT(IN):: NAME
224  LOGICAL FOUND
225 
226  IF (.NOT. ASSOCIATED(filehead))THEN
227  filehead => new_filehead()
228  END IF
229 
230  ncf => find_file(filehead,trim(name),found)
231  IF (found) RETURN
232 
233  ncf => new_file()
234  ncf%FNAME=trim(name)
235 
Here is the call graph for this function:

◆ nc_load()

subroutine mod_nctools::nc_load ( type(ncfile), pointer  NCF)

Definition at line 365 of file mod_nctools.f90.

365  use control
366  IMPLICIT NONE
367  TYPE(NCFILE), POINTER :: NCF
368  TYPE(NCVAR), pointer :: VAR
369  TYPE(NCATT), pointer :: ATT
370  TYPE(NCDIM), pointer :: DIM
371  CHARACTER(LEN=120) :: errmsg
372  integer :: status,i,j, len, nvars, ndims, natts, unlimDimid
373  integer, dimension(NF90_MAX_VAR_DIMS):: dimids
374  if(dbg_set(dbg_sbr)) &
375  & write(ipt,*) "STARTING NC_LOAD"
376 
377  IF(dbg_set(dbg_io)) write(ipt,*) "====== LOADING FILE NAME: "//trim(ncf%FNAME)
378 
379  IF(ncf%CONNECTED) CALL fatal_error("CAN NOT LOAD A FILE WHEN ALREADY&
380  & CONNECTED!", "FILE NAME: "//trim(ncf%FNAME))
381 
382 ! BASIC FILE INFO
383  status = nf90_inquire(ncf%NCID, ndims, nvars, natts, unlimdimid)
384  errmsg="Can not get file contents: "//trim(ncf%FNAME)
385  call handle_ncerr(status,errmsg)
386 
387 
388 ! DIMENSIONS
389  if(dbg_set(dbg_io)) write(ipt,*) "====== READING FILE DIMENSIONS:"
390  do i=1,ndims
391  dim => nc_get_dim(ncf,i)
392  IF(dim%DIMID .EQ. unlimdimid) dim%UNLIMITED = .true.
393  if(dbg_set(dbg_io)) write(ipt,*) " "//trim(dim%DIMNAME)
394  ncf => add(ncf,dim)
395  end do
396 
397  if(unlimdimid .NE. ncf%UNLIMDIMID) then
398  CALL print_file(ncf)
399  CALL print_dim_list(ncf)
400  CALL fatal_error &
401  &("NC_LOAD: UNLIMITED DIMENSION ID FROM nf90_inquire does not m&
402  &atch the file objects UNLIMDIMID?")
403  end if
404 
405  if(ndims /= count_dim_list(ncf) ) then
406  if(dbg_set(dbg_log)) call print_dim_list(ncf)
407  call fatal_error("The number of dimensions in the file does not m&
408  &atch the number loaded in the file object.")
409  end if
410 
411 ! call print_dim_list(NCF)
412 
413 ! ATTRIBUTES
414  if(dbg_set(dbg_io)) write(ipt,*) "====== READING FILE ATTRIBUTES:"
415  do i=1,natts
416  att => nc_get_att(ncf,i)
417  if(dbg_set(dbg_io)) write(ipt,*) " "//trim(att%ATTNAME)
418  ncf => add(ncf,att)
419  end do
420 
421  if(natts /= count_att_list(ncf)) then
422  if(dbg_set(dbg_log)) call print_att_list(ncf)
423  call fatal_error("The number of attributes in the file does not m&
424  &atch the number loaded in the file object.")
425  end if
426 
427 ! call print_att_list(NCF)
428 
429 
430 ! VARIABLES
431  if(dbg_set(dbg_io)) write(ipt,*) "====== READING FILE VARIABLES:"
432  do i=1,nvars
433  var => nc_get_var(ncf,i)
434 ! call print_dim_list(VAR)
435 ! call print_att_list(VAR)
436  ncf => add(ncf,var)
437  end do
438 
439  if(nvars /= count_var_list(ncf)) then
440  if(dbg_set(dbg_log)) call print_var_list(ncf)
441  call fatal_error("The number of variables in the file does not m&
442  &atch the number loaded in the file object.")
443  end if
444 
445 ! call print_var_list(NCF)
446 
447 
448  status = set_file_time_type(ncf)
449  ! SEE 'set_file_time_type' for possible results
450  ! Since this is a generic routine, take no action based on status...
451 
452  ncf%CONNECTED = .true.
453 
454  if(dbg_set(dbg_io)) write(ipt,*) "====== FINISHED LOADING FILE NAME: "//trim(ncf%FNAME)
455 
456  if(dbg_set(dbg_sbr)) &
457  & write(ipt,*) "END NC_LOAD"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_make_att_chr_scl()

type(ncatt) function, pointer mod_nctools::nc_make_att_chr_scl ( character(len=*), intent(in)  NAME,
character(len=*), intent(in)  VALUES 
)

Definition at line 627 of file mod_nctools.f90.

627  IMPLICIT NONE
628  TYPE(NCATT), POINTER :: ATT
629  character(len=*), intent(in) :: name
630  character(len=*), intent(in) :: VALUES
631 
632  att => new_att()
633 
634  att%attid = -1
635  att%ATTname = trim(name)
636  att%xtype = nf90_char
637  att%LEN = len_trim(values)
638  ALLOCATE(att%CHR(1))
639  att%CHR(1) = values
640 
Here is the call graph for this function:

◆ nc_make_att_chr_vec()

type(ncatt) function, pointer mod_nctools::nc_make_att_chr_vec ( character(len=*), intent(in)  NAME,
character(len=*), dimension(:), intent(in), allocatable  VALUES 
)

Definition at line 645 of file mod_nctools.f90.

645  IMPLICIT NONE
646  TYPE(NCATT), POINTER :: ATT
647  character(len=*), intent(in) :: name
648  character(len=*),ALLOCATABLE, intent(in) :: VALUES(:)
649 
650  att => new_att()
651 
652  att%attid = -1
653  att%ATTname = trim(name)
654  att%xtype = nf90_char
655  att%LEN = -1
656  ALLOCATE(att%CHR(size(values)))
657  att%CHR = values
Here is the call graph for this function:

◆ nc_make_att_dbl()

type(ncatt) function, pointer mod_nctools::nc_make_att_dbl ( character(len=*), intent(in)  NAME,
real(dp), intent(in)  values 
)

Definition at line 807 of file mod_nctools.f90.

807  IMPLICIT NONE
808  TYPE(NCATT), POINTER :: ATT
809  character(len=*), intent(in) :: name
810  REAL(DP), intent(in) :: values
811 
812  att => new_att()
813 
814  att%attid = -1
815  att%ATTname = trim(name)
816  att%xtype = nf90_double
817  att%LEN = 1
818  allocate(att%dbl(att%len))
819  att%dbl = values
820 
Here is the call graph for this function:

◆ nc_make_att_dbl_vec()

type(ncatt) function, pointer mod_nctools::nc_make_att_dbl_vec ( character(len=*), intent(in)  NAME,
real(dp), dimension(:), intent(in), allocatable  values 
)

Definition at line 825 of file mod_nctools.f90.

825  IMPLICIT NONE
826  TYPE(NCATT), POINTER :: ATT
827  character(len=*), intent(in) :: name
828  REAL(DP), allocatable, intent(in) :: values(:)
829 
830  if(.not. allocated(values)) &
831  & Call fatal_error("Can not make attribute: "//trim(name),&
832  &"argument 'values' passed must be allocated and contain data")
833 
834  att => new_att()
835 
836  att%attid = -1
837  att%ATTname = trim(name)
838  att%xtype = nf90_double
839  att%LEN = size(values)
840  allocate(att%dbl(att%len))
841  att%dbl = values
842 
Here is the call graph for this function:

◆ nc_make_att_flt()

type(ncatt) function, pointer mod_nctools::nc_make_att_flt ( character(len=*), intent(in)  NAME,
real(spa), intent(in)  values 
)

Definition at line 767 of file mod_nctools.f90.

767  IMPLICIT NONE
768  TYPE(NCATT), POINTER :: ATT
769  character(len=*), intent(in) :: name
770  REAL(SPA), intent(in) :: values
771 
772  att => new_att()
773 
774  att%attid = -1
775  att%ATTname = trim(name)
776  att%xtype = nf90_float
777  att%LEN = 1
778  allocate(att%flt(att%len))
779  att%flt = values
780 
Here is the call graph for this function:

◆ nc_make_att_flt_vec()

type(ncatt) function, pointer mod_nctools::nc_make_att_flt_vec ( character(len=*), intent(in)  NAME,
real(spa), dimension(:), intent(in), allocatable  values 
)

Definition at line 785 of file mod_nctools.f90.

785  IMPLICIT NONE
786  TYPE(NCATT), POINTER :: ATT
787  character(len=*), intent(in) :: name
788  REAL(SPA), allocatable, intent(in) :: values(:)
789 
790  if(.not. allocated(values)) &
791  & Call fatal_error("Can not make attribute: "//trim(name),&
792  &"argument 'values' passed must be allocated and contain data")
793 
794  att => new_att()
795 
796  att%attid = -1
797  att%ATTname = trim(name)
798  att%xtype = nf90_float
799  att%LEN = size(values)
800  allocate(att%flt(att%len))
801  att%flt = values
802 
Here is the call graph for this function:

◆ nc_make_att_int()

type(ncatt) function, pointer mod_nctools::nc_make_att_int ( character(len=*), intent(in)  NAME,
integer, intent(in)  values 
)

Definition at line 749 of file mod_nctools.f90.

749  IMPLICIT NONE
750  TYPE(NCATT), POINTER :: ATT
751  character(len=*), intent(in) :: name
752  INTEGER, intent(in) :: values
753 
754  att => new_att()
755 
756  att%attid = -1
757  att%ATTname = trim(name)
758  att%xtype = nf90_int
759  att%LEN = 1
760  allocate(att%int(att%len))
761  att%int = values
762 
Here is the call graph for this function:

◆ nc_make_att_int_vec()

type(ncatt) function, pointer mod_nctools::nc_make_att_int_vec ( character(len=*), intent(in)  NAME,
integer, dimension(:), intent(in), allocatable  values 
)

Definition at line 727 of file mod_nctools.f90.

727  IMPLICIT NONE
728  TYPE(NCATT), POINTER :: ATT
729  character(len=*), intent(in) :: name
730  INTEGER, allocatable, intent(in) :: values(:)
731 
732  if(.not. allocated(values)) &
733  & Call fatal_error("Can not make attribute: "//trim(name),&
734  &"argument 'values' passed must be allocated and contain data")
735 
736  att => new_att()
737 
738  att%attid = -1
739  att%ATTname = trim(name)
740  att%xtype = nf90_int
741  att%LEN = size(values)
742  allocate(att%int(att%len))
743  att%int = values
744 
Here is the call graph for this function:

◆ nc_make_avar_arr_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_avar_arr_dbl ( character(len=*), intent(in)  NAME,
real(dp), dimension(:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), optional, pointer  DIM3 
)

Definition at line 1297 of file mod_nctools.f90.

1297  IMPLICIT NONE
1298  TYPE(NCVAR), POINTER :: VAR
1299  TYPE(NCDIM), POINTER :: DIM1
1300  TYPE(NCDIM), POINTER :: DIM2
1301  TYPE(NCDIM), OPTIONAL, POINTER :: DIM3
1302  character(len=*), intent(in) :: name
1303  REAL(DP), allocatable, target, intent(in) :: values(:,:)
1304  if(dbg_set(dbg_sbr)) &
1305  & write(ipt,*) "START NC_MAKE_AVAR_ARR_DBL"
1306 
1307  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1308  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1309  & "ERROR MAKING VARIABLE: "//trim(name))
1310  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1311  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1312  &"ERROR MAKING VARIABLE: "//trim(name))
1313  if(dim1%UNLIMITED) CALL fatal_error &
1314  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1315  &"ERROR MAKING VARIABLE: "//trim(name))
1316  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1317  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1318  &"ERROR MAKING VARIABLE: "//trim(name))
1319 ! if(DIM2%UNLIMITED) CALL FATAL_ERROR &
1320 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1321 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1322  var => new_var()
1323 
1324  var%VARID = -1
1325  var%VARNAME = trim(name)
1326  var%xtype = nf90_double
1327  var%arr_dbl => values
1328  var => add(var,copy_dim(dim1))
1329  var => add(var,copy_dim(dim2))
1330  if(present(dim3)) then
1331  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1332  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1333  &"ERROR MAKING VARIABLE: "//trim(name))
1334  if(.NOT. dim3%UNLIMITED) CALL fatal_error &
1335  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1336  &"ERROR MAKING VARIABLE: "//trim(name))
1337  var => add(var,copy_dim(dim3))
1338  end if
1339 
1340  if(dbg_set(dbg_sbr)) &
1341  & write(ipt,*) "END NC_MAKE_AVAR_ARR_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_arr_flt()

type(ncvar) function, pointer mod_nctools::nc_make_avar_arr_flt ( character(len=*), intent(in)  NAME,
real(spa), dimension(:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), optional, pointer  DIM3 
)

Definition at line 1539 of file mod_nctools.f90.

1539  IMPLICIT NONE
1540  TYPE(NCVAR), POINTER :: VAR
1541  TYPE(NCDIM), POINTER :: DIM1
1542  TYPE(NCDIM), POINTER :: DIM2
1543  TYPE(NCDIM), OPTIONAL, POINTER :: DIM3
1544  character(len=*), intent(in) :: name
1545  REAL(SPA), allocatable, target, intent(in) :: values(:,:)
1546  if(dbg_set(dbg_sbr)) &
1547  & write(ipt,*) "START NC_MAKE_AVAR_ARR_FLT"
1548 
1549  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1550  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1551  & "ERROR MAKING VARIABLE: "//trim(name))
1552  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1553  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1554  &"ERROR MAKING VARIABLE: "//trim(name))
1555  if(dim1%UNLIMITED) CALL fatal_error &
1556  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1557  &"ERROR MAKING VARIABLE: "//trim(name))
1558  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1559  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1560  &"ERROR MAKING VARIABLE: "//trim(name))
1561 ! if(DIM2%UNLIMITED) CALL FATAL_ERROR &
1562 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1563 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1564  var => new_var()
1565 
1566  var%VARID = -1
1567  var%VARNAME = trim(name)
1568  var%xtype = nf90_float
1569  var%arr_flt => values
1570  var => add(var,copy_dim(dim1))
1571  var => add(var,copy_dim(dim2))
1572  if(present(dim3)) then
1573  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1574  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1575  &"ERROR MAKING VARIABLE: "//trim(name))
1576  if(.NOT. dim3%UNLIMITED) CALL fatal_error &
1577  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1578  &"ERROR MAKING VARIABLE: "//trim(name))
1579  var => add(var,copy_dim(dim3))
1580  end if
1581 
1582  if(dbg_set(dbg_sbr)) &
1583  & write(ipt,*) "END NC_MAKE_AVAR_ARR_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_arr_int()

type(ncvar) function, pointer mod_nctools::nc_make_avar_arr_int ( character(len=*), intent(in)  NAME,
integer, dimension(:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), optional, pointer  DIM3 
)

Definition at line 1781 of file mod_nctools.f90.

1781  IMPLICIT NONE
1782  TYPE(NCVAR), POINTER :: VAR
1783  TYPE(NCDIM), POINTER :: DIM1
1784  TYPE(NCDIM), POINTER :: DIM2
1785  TYPE(NCDIM), OPTIONAL, POINTER :: DIM3
1786  character(len=*), intent(in) :: name
1787  INTEGER, allocatable, target, intent(in) :: values(:,:)
1788  if(dbg_set(dbg_sbr)) &
1789  & write(ipt,*) "START NC_MAKE_AVAR_ARR_INT"
1790 
1791  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1792  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1793  & "ERROR MAKING VARIABLE: "//trim(name))
1794  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1795  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1796  &"ERROR MAKING VARIABLE: "//trim(name))
1797  if(dim1%UNLIMITED) CALL fatal_error &
1798  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1799  &"ERROR MAKING VARIABLE: "//trim(name))
1800  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1801  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1802  &"ERROR MAKING VARIABLE: "//trim(name))
1803 ! if(DIM2%UNLIMITED) CALL FATAL_ERROR &
1804 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1805 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1806  var => new_var()
1807 
1808  var%VARID = -1
1809  var%VARNAME = trim(name)
1810  var%xtype = nf90_int
1811  var%arr_int => values
1812  var => add(var,copy_dim(dim1))
1813  var => add(var,copy_dim(dim2))
1814  if(present(dim3)) then
1815  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1816  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1817  &"ERROR MAKING VARIABLE: "//trim(name))
1818  if(.NOT. dim3%UNLIMITED) CALL fatal_error &
1819  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1820  &"ERROR MAKING VARIABLE: "//trim(name))
1821  var => add(var,copy_dim(dim3))
1822  end if
1823 
1824  if(dbg_set(dbg_sbr)) &
1825  & write(ipt,*) "END NC_MAKE_AVAR_ARR_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_cub_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_avar_cub_dbl ( character(len=*), intent(in)  NAME,
real(dp), dimension(:,:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), optional, pointer  DIM4 
)

Definition at line 1346 of file mod_nctools.f90.

1346  IMPLICIT NONE
1347  TYPE(NCVAR), POINTER :: VAR
1348  TYPE(NCDIM), POINTER :: DIM1
1349  TYPE(NCDIM), POINTER :: DIM2
1350  TYPE(NCDIM), POINTER :: DIM3
1351  TYPE(NCDIM), OPTIONAL, POINTER :: DIM4
1352  character(len=*), intent(in) :: name
1353  REAL(DP), allocatable, target, intent(in) :: values(:,:,:)
1354  if(dbg_set(dbg_sbr)) &
1355  & write(ipt,*) "START NC_MAKE_AVAR_CUB_DBL"
1356 
1357  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1358  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1359  & "ERROR MAKING VARIABLE: "//trim(name))
1360  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1361  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1362  &"ERROR MAKING VARIABLE: "//trim(name))
1363  if(dim1%UNLIMITED) CALL fatal_error &
1364  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1365  &"ERROR MAKING VARIABLE: "//trim(name))
1366  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1367  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1368  &"ERROR MAKING VARIABLE: "//trim(name))
1369  if(dim2%UNLIMITED) CALL fatal_error &
1370  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1371  &"ERROR MAKING VARIABLE: "//trim(name))
1372  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1373  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1374  &"ERROR MAKING VARIABLE: "//trim(name))
1375 ! if(DIM3%UNLIMITED) CALL FATAL_ERROR &
1376 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1377 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1378  var => new_var()
1379 
1380  var%VARID = -1
1381  var%VARNAME = trim(name)
1382  var%xtype = nf90_double
1383  var%cub_dbl => values
1384  var => add(var,copy_dim(dim1))
1385  var => add(var,copy_dim(dim2))
1386  var => add(var,copy_dim(dim3))
1387  if(present(dim4)) then
1388  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
1389  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1390  &"ERROR MAKING VARIABLE: "//trim(name))
1391  if(.NOT. dim4%UNLIMITED) CALL fatal_error &
1392  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1393  &"ERROR MAKING VARIABLE: "//trim(name))
1394  var => add(var,copy_dim(dim4))
1395  end if
1396 
1397  if(dbg_set(dbg_sbr)) &
1398  & write(ipt,*) "END NC_MAKE_AVAR_CUB_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_cub_flt()

type(ncvar) function, pointer mod_nctools::nc_make_avar_cub_flt ( character(len=*), intent(in)  NAME,
real(spa), dimension(:,:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), optional, pointer  DIM4 
)

Definition at line 1588 of file mod_nctools.f90.

1588  IMPLICIT NONE
1589  TYPE(NCVAR), POINTER :: VAR
1590  TYPE(NCDIM), POINTER :: DIM1
1591  TYPE(NCDIM), POINTER :: DIM2
1592  TYPE(NCDIM), POINTER :: DIM3
1593  TYPE(NCDIM), OPTIONAL, POINTER :: DIM4
1594  character(len=*), intent(in) :: name
1595  REAL(SPA), allocatable, target, intent(in) :: values(:,:,:)
1596  if(dbg_set(dbg_sbr)) &
1597  & write(ipt,*) "START NC_MAKE_AVAR_CUB_FLT"
1598 
1599  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1600  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1601  & "ERROR MAKING VARIABLE: "//trim(name))
1602  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1603  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1604  &"ERROR MAKING VARIABLE: "//trim(name))
1605  if(dim1%UNLIMITED) CALL fatal_error &
1606  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1607  &"ERROR MAKING VARIABLE: "//trim(name))
1608  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1609  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1610  &"ERROR MAKING VARIABLE: "//trim(name))
1611  if(dim2%UNLIMITED) CALL fatal_error &
1612  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1613  &"ERROR MAKING VARIABLE: "//trim(name))
1614  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1615  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1616  &"ERROR MAKING VARIABLE: "//trim(name))
1617 ! if(DIM3%UNLIMITED) CALL FATAL_ERROR &
1618 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1619 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1620  var => new_var()
1621 
1622  var%VARID = -1
1623  var%VARNAME = trim(name)
1624  var%xtype = nf90_float
1625  var%cub_flt => values
1626  var => add(var,copy_dim(dim1))
1627  var => add(var,copy_dim(dim2))
1628  var => add(var,copy_dim(dim3))
1629  if(present(dim4)) then
1630  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
1631  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1632  &"ERROR MAKING VARIABLE: "//trim(name))
1633  if(.NOT. dim4%UNLIMITED) CALL fatal_error &
1634  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1635  &"ERROR MAKING VARIABLE: "//trim(name))
1636  var => add(var,copy_dim(dim4))
1637  end if
1638 
1639  if(dbg_set(dbg_sbr)) &
1640  & write(ipt,*) "END NC_MAKE_AVAR_CUB_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_cub_int()

type(ncvar) function, pointer mod_nctools::nc_make_avar_cub_int ( character(len=*), intent(in)  NAME,
integer, dimension(:,:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), optional, pointer  DIM4 
)

Definition at line 1830 of file mod_nctools.f90.

1830  IMPLICIT NONE
1831  TYPE(NCVAR), POINTER :: VAR
1832  TYPE(NCDIM), POINTER :: DIM1
1833  TYPE(NCDIM), POINTER :: DIM2
1834  TYPE(NCDIM), POINTER :: DIM3
1835  TYPE(NCDIM), OPTIONAL, POINTER :: DIM4
1836  character(len=*), intent(in) :: name
1837  INTEGER, allocatable, target, intent(in) :: values(:,:,:)
1838  if(dbg_set(dbg_sbr)) &
1839  & write(ipt,*) "START NC_MAKE_AVAR_CUB_INT"
1840 
1841  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1842  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1843  & "ERROR MAKING VARIABLE: "//trim(name))
1844  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1845  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1846  &"ERROR MAKING VARIABLE: "//trim(name))
1847  if(dim1%UNLIMITED) CALL fatal_error &
1848  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1849  &"ERROR MAKING VARIABLE: "//trim(name))
1850  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1851  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1852  &"ERROR MAKING VARIABLE: "//trim(name))
1853  if(dim2%UNLIMITED) CALL fatal_error &
1854  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1855  &"ERROR MAKING VARIABLE: "//trim(name))
1856  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1857  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1858  &"ERROR MAKING VARIABLE: "//trim(name))
1859 ! if(DIM3%UNLIMITED) CALL FATAL_ERROR &
1860 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1861 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1862  var => new_var()
1863 
1864  var%VARID = -1
1865  var%VARNAME = trim(name)
1866  var%xtype = nf90_int
1867  var%cub_int => values
1868  var => add(var,copy_dim(dim1))
1869  var => add(var,copy_dim(dim2))
1870  var => add(var,copy_dim(dim3))
1871  if(present(dim4)) then
1872  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
1873  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1874  &"ERROR MAKING VARIABLE: "//trim(name))
1875  if(.NOT. dim4%UNLIMITED) CALL fatal_error &
1876  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1877  &"ERROR MAKING VARIABLE: "//trim(name))
1878  var => add(var,copy_dim(dim4))
1879  end if
1880 
1881  if(dbg_set(dbg_sbr)) &
1882  & write(ipt,*) "END NC_MAKE_AVAR_CUB_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_fda_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_avar_fda_dbl ( character(len=*), intent(in)  NAME,
real(dp), dimension(:,:,:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), pointer  DIM4,
type(ncdim), optional, pointer  DIM5 
)

Definition at line 1403 of file mod_nctools.f90.

1403  IMPLICIT NONE
1404  TYPE(NCVAR), POINTER :: VAR
1405  TYPE(NCDIM), POINTER :: DIM1
1406  TYPE(NCDIM), POINTER :: DIM2
1407  TYPE(NCDIM), POINTER :: DIM3
1408  TYPE(NCDIM), POINTER :: DIM4
1409  TYPE(NCDIM), OPTIONAL, POINTER :: DIM5
1410  character(len=*), intent(in) :: name
1411  REAL(DP), allocatable, target, intent(in) :: values(:,:,:,:)
1412  if(dbg_set(dbg_sbr)) &
1413  & write(ipt,*) "START NC_MAKE_AVAR_FDA_DBL"
1414 
1415  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1416  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1417  & "ERROR MAKING VARIABLE: "//trim(name))
1418  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1419  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1420  &"ERROR MAKING VARIABLE: "//trim(name))
1421  if(dim1%UNLIMITED) CALL fatal_error &
1422  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1423  &"ERROR MAKING VARIABLE: "//trim(name))
1424  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1425  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1426  &"ERROR MAKING VARIABLE: "//trim(name))
1427  if(dim2%UNLIMITED) CALL fatal_error &
1428  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1429  &"ERROR MAKING VARIABLE: "//trim(name))
1430  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1431  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1432  &"ERROR MAKING VARIABLE: "//trim(name))
1433  if(dim3%UNLIMITED) CALL fatal_error &
1434  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1435  &"ERROR MAKING VARIABLE: "//trim(name))
1436  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
1437  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1438  &"ERROR MAKING VARIABLE: "//trim(name))
1439 ! if(DIM4%UNLIMITED) CALL FATAL_ERROR &
1440 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1441 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1442  var => new_var()
1443 
1444  var%VARID = -1
1445  var%VARNAME = trim(name)
1446  var%xtype = nf90_double
1447  var%fda_dbl => values
1448  var => add(var,copy_dim(dim1))
1449  var => add(var,copy_dim(dim2))
1450  var => add(var,copy_dim(dim3))
1451  var => add(var,copy_dim(dim4))
1452  if(present(dim5)) then
1453  if(.NOT. ASSOCIATED(dim5)) CALL fatal_error &
1454  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1455  &"ERROR MAKING VARIABLE: "//trim(name))
1456  if(.NOT. dim5%UNLIMITED) CALL fatal_error &
1457  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1458  &"ERROR MAKING VARIABLE: "//trim(name))
1459  var => add(var,copy_dim(dim5))
1460  end if
1461 
1462  if(dbg_set(dbg_sbr)) &
1463  & write(ipt,*) "END NC_MAKE_AVAR_FDA_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_fda_flt()

type(ncvar) function, pointer mod_nctools::nc_make_avar_fda_flt ( character(len=*), intent(in)  NAME,
real(spa), dimension(:,:,:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), pointer  DIM4,
type(ncdim), optional, pointer  DIM5 
)

Definition at line 1645 of file mod_nctools.f90.

1645  IMPLICIT NONE
1646  TYPE(NCVAR), POINTER :: VAR
1647  TYPE(NCDIM), POINTER :: DIM1
1648  TYPE(NCDIM), POINTER :: DIM2
1649  TYPE(NCDIM), POINTER :: DIM3
1650  TYPE(NCDIM), POINTER :: DIM4
1651  TYPE(NCDIM), OPTIONAL, POINTER :: DIM5
1652  character(len=*), intent(in) :: name
1653  REAL(SPA), allocatable, target, intent(in) :: values(:,:,:,:)
1654  if(dbg_set(dbg_sbr)) &
1655  & write(ipt,*) "START NC_MAKE_AVAR_FDA_FLT"
1656 
1657  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1658  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1659  & "ERROR MAKING VARIABLE: "//trim(name))
1660  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1661  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1662  &"ERROR MAKING VARIABLE: "//trim(name))
1663  if(dim1%UNLIMITED) CALL fatal_error &
1664  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1665  &"ERROR MAKING VARIABLE: "//trim(name))
1666  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1667  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1668  &"ERROR MAKING VARIABLE: "//trim(name))
1669  if(dim2%UNLIMITED) CALL fatal_error &
1670  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1671  &"ERROR MAKING VARIABLE: "//trim(name))
1672  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1673  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1674  &"ERROR MAKING VARIABLE: "//trim(name))
1675  if(dim3%UNLIMITED) CALL fatal_error &
1676  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1677  &"ERROR MAKING VARIABLE: "//trim(name))
1678  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
1679  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1680  &"ERROR MAKING VARIABLE: "//trim(name))
1681 ! if(DIM4%UNLIMITED) CALL FATAL_ERROR &
1682 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1683 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1684  var => new_var()
1685 
1686  var%VARID = -1
1687  var%VARNAME = trim(name)
1688  var%xtype = nf90_float
1689  var%fda_flt => values
1690  var => add(var,copy_dim(dim1))
1691  var => add(var,copy_dim(dim2))
1692  var => add(var,copy_dim(dim3))
1693  var => add(var,copy_dim(dim4))
1694  if(present(dim5)) then
1695  if(.NOT. ASSOCIATED(dim5)) CALL fatal_error &
1696  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1697  &"ERROR MAKING VARIABLE: "//trim(name))
1698  if(.NOT. dim5%UNLIMITED) CALL fatal_error &
1699  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1700  &"ERROR MAKING VARIABLE: "//trim(name))
1701  var => add(var,copy_dim(dim5))
1702  end if
1703 
1704  if(dbg_set(dbg_sbr)) &
1705  & write(ipt,*) "END NC_MAKE_AVAR_FDA_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_fda_int()

type(ncvar) function, pointer mod_nctools::nc_make_avar_fda_int ( character(len=*), intent(in)  NAME,
integer, dimension(:,:,:,:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), pointer  DIM4,
type(ncdim), optional, pointer  DIM5 
)

Definition at line 1887 of file mod_nctools.f90.

1887  IMPLICIT NONE
1888  TYPE(NCVAR), POINTER :: VAR
1889  TYPE(NCDIM), POINTER :: DIM1
1890  TYPE(NCDIM), POINTER :: DIM2
1891  TYPE(NCDIM), POINTER :: DIM3
1892  TYPE(NCDIM), POINTER :: DIM4
1893  TYPE(NCDIM), OPTIONAL, POINTER :: DIM5
1894  character(len=*), intent(in) :: name
1895  INTEGER, allocatable, target, intent(in) :: values(:,:,:,:)
1896  if(dbg_set(dbg_sbr)) &
1897  & write(ipt,*) "START NC_MAKE_AVAR_FDA_INT"
1898 
1899  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1900  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1901  & "ERROR MAKING VARIABLE: "//trim(name))
1902  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1903  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1904  &"ERROR MAKING VARIABLE: "//trim(name))
1905  if(dim1%UNLIMITED) CALL fatal_error &
1906  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1907  &"ERROR MAKING VARIABLE: "//trim(name))
1908  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1909  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1910  &"ERROR MAKING VARIABLE: "//trim(name))
1911  if(dim2%UNLIMITED) CALL fatal_error &
1912  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1913  &"ERROR MAKING VARIABLE: "//trim(name))
1914  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1915  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1916  &"ERROR MAKING VARIABLE: "//trim(name))
1917  if(dim3%UNLIMITED) CALL fatal_error &
1918  & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1919  &"ERROR MAKING VARIABLE: "//trim(name))
1920  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
1921  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1922  &"ERROR MAKING VARIABLE: "//trim(name))
1923 ! if(DIM4%UNLIMITED) CALL FATAL_ERROR &
1924 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1925 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1926  var => new_var()
1927 
1928  var%VARID = -1
1929  var%VARNAME = trim(name)
1930  var%xtype = nf90_int
1931  var%fda_int => values
1932  var => add(var,copy_dim(dim1))
1933  var => add(var,copy_dim(dim2))
1934  var => add(var,copy_dim(dim3))
1935  var => add(var,copy_dim(dim4))
1936  if(present(dim5)) then
1937  if(.NOT. ASSOCIATED(dim5)) CALL fatal_error &
1938  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1939  &"ERROR MAKING VARIABLE: "//trim(name))
1940  if(.NOT. dim5%UNLIMITED) CALL fatal_error &
1941  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1942  &"ERROR MAKING VARIABLE: "//trim(name))
1943  var => add(var,copy_dim(dim5))
1944  end if
1945 
1946  if(dbg_set(dbg_sbr)) &
1947  & write(ipt,*) "END NC_MAKE_AVAR_FDA_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_scl_chr()

type(ncvar) function, pointer mod_nctools::nc_make_avar_scl_chr ( character(len=*), intent(in)  NAME,
character(len=80), intent(in), target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), optional, pointer  DIM2 
)

Definition at line 1121 of file mod_nctools.f90.

1121  IMPLICIT NONE
1122  TYPE(NCVAR), POINTER :: VAR
1123  TYPE(NCDIM), POINTER :: DIM1 ! MUST BE STR LENGTH
1124  TYPE(NCDIM), OPTIONAL, POINTER :: DIM2 ! IF PRESENT THIS MUST BE UNLIMITED
1125  character(len=*), intent(in) :: name
1126  character(len=80), target, intent(in) :: values
1127  if(dbg_set(dbg_sbr)) &
1128  & write(ipt,*) "START NC_MAKE_AVAR_SCL_CHR"
1129 
1130  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1131  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1132  &"ERROR MAKING VARIABLE: "//trim(name))
1133 
1134 
1135  if(dim1%UNLIMITED) CALL fatal_error &
1136  & ("NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
1137  & "MUST BE THE STING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
1138  &"VARIABLE NAME: "//trim(name))
1139 
1140  var => new_var()
1141 
1142  var%VARID = -1
1143  var%VARNAME = trim(name)
1144  var%xtype = nf90_char
1145  var%scl_chr => values
1146  var => add(var,copy_dim(dim1))
1147  IF(present(dim2)) THEN
1148  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1149  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1150  &"ERROR MAKING VARIABLE: "//trim(name))
1151 
1152  IF(.NOT. dim2%UNLIMITED) CALL fatal_error &
1153  & ("NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE LAST DIMENSION",&
1154  & "MUST BE THE UNLIMITED DIMENSION",&
1155  & "VARIABLE NAME: "//trim(name))
1156 
1157  var => add(var,copy_dim(dim2))
1158  END IF
1159 
1160  if(dbg_set(dbg_sbr)) &
1161  & write(ipt,*) "END NC_MAKE_AVAR_SCL_CHR"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_scl_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_avar_scl_dbl ( character(len=*), intent(in)  NAME,
real(dp), intent(in), target  VALUES,
type(ncdim), optional, pointer  DIM1 
)

Definition at line 1226 of file mod_nctools.f90.

1226  IMPLICIT NONE
1227  TYPE(NCVAR), POINTER :: VAR
1228  TYPE(NCDIM), OPTIONAL, POINTER :: DIM1
1229  character(len=*), intent(in) :: name
1230  REAL(DP), target, intent(in) :: values
1231  if(dbg_set(dbg_sbr)) &
1232  & write(ipt,*) "START NC_MAKE_AVAR_SCL_DBL"
1233 
1234  var => new_var()
1235 
1236  var%VARID = -1
1237  var%VARNAME = trim(name)
1238  var%xtype = nf90_double
1239  var%scl_dbl => values
1240  IF(present(dim1)) THEN
1241  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1242  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1243  &"ERROR MAKING VARIABLE: "//trim(name))
1244  if(.NOT. dim1%UNLIMITED) CALL fatal_error &
1245  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1246  &"ERROR MAKING VARIABLE: "//trim(name))
1247  var => add(var,copy_dim(dim1))
1248  END IF
1249 
1250  if(dbg_set(dbg_sbr)) &
1251  & write(ipt,*) "END NC_MAKE_AVAR_SCL_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_scl_flt()

type(ncvar) function, pointer mod_nctools::nc_make_avar_scl_flt ( character(len=*), intent(in)  NAME,
real(spa), intent(in), target  VALUES,
type(ncdim), optional, pointer  DIM1 
)

Definition at line 1468 of file mod_nctools.f90.

1468  IMPLICIT NONE
1469  TYPE(NCVAR), POINTER :: VAR
1470  TYPE(NCDIM), OPTIONAL, POINTER :: DIM1
1471  character(len=*), intent(in) :: name
1472  REAL(SPA), target, intent(in) :: values
1473  if(dbg_set(dbg_sbr)) &
1474  & write(ipt,*) "START NC_MAKE_AVAR_SCL_FLT"
1475 
1476  var => new_var()
1477 
1478  var%VARID = -1
1479  var%VARNAME = trim(name)
1480  var%xtype = nf90_float
1481  var%scl_flt => values
1482  IF(present(dim1)) THEN
1483  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1484  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1485  &"ERROR MAKING VARIABLE: "//trim(name))
1486  if(.NOT. dim1%UNLIMITED) CALL fatal_error &
1487  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1488  &"ERROR MAKING VARIABLE: "//trim(name))
1489  var => add(var,copy_dim(dim1))
1490  END IF
1491 
1492  if(dbg_set(dbg_sbr)) &
1493  & write(ipt,*) "END NC_MAKE_AVAR_SCL_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_scl_int()

type(ncvar) function, pointer mod_nctools::nc_make_avar_scl_int ( character(len=*), intent(in)  NAME,
integer, intent(in), target  VALUES,
type(ncdim), optional, pointer  DIM1 
)

Definition at line 1710 of file mod_nctools.f90.

1710  IMPLICIT NONE
1711  TYPE(NCVAR), POINTER :: VAR
1712  TYPE(NCDIM), OPTIONAL, POINTER :: DIM1
1713  character(len=*), intent(in) :: name
1714  INTEGER, target, intent(in) :: values
1715  if(dbg_set(dbg_sbr)) &
1716  & write(ipt,*) "START NC_MAKE_AVAR_SCL_INT"
1717 
1718  var => new_var()
1719 
1720  var%VARID = -1
1721  var%VARNAME = trim(name)
1722  var%xtype = nf90_int
1723  var%scl_int => values
1724  IF(present(dim1)) THEN
1725  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1726  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1727  &"ERROR MAKING VARIABLE: "//trim(name))
1728  if(.NOT. dim1%UNLIMITED) CALL fatal_error &
1729  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1730  &"ERROR MAKING VARIABLE: "//trim(name))
1731  var => add(var,copy_dim(dim1))
1732  END IF
1733 
1734  if(dbg_set(dbg_sbr)) &
1735  & write(ipt,*) "END NC_MAKE_AVAR_SCL_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_vec_chr()

type(ncvar) function, pointer mod_nctools::nc_make_avar_vec_chr ( character(len=*), intent(in)  NAME,
character(len=80), dimension(:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), optional, pointer  DIM3 
)

Definition at line 1166 of file mod_nctools.f90.

1166  IMPLICIT NONE
1167  TYPE(NCVAR), POINTER :: VAR
1168  TYPE(NCDIM), POINTER :: DIM1 ! MUST BE STR LENGTH
1169  TYPE(NCDIM), POINTER :: DIM2 ! Number of strings
1170  TYPE(NCDIM), OPTIONAL, POINTER :: DIM3 ! IF PRESENT THIS MUST BE UNLIMITED
1171  character(len=*), intent(in) :: name
1172  character(len=80), target,allocatable, intent(in) :: values(:)
1173  if(dbg_set(dbg_sbr)) &
1174  & write(ipt,*) "START NC_MAKE_AVAR_VEC_CHR"
1175 
1176  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1177  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1178  & "ERROR MAKING VARIABLE: "//trim(name))
1179 
1180  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1181  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1182  &"ERROR MAKING VARIABLE: "//trim(name))
1183 
1184  if(dim1%UNLIMITED) CALL fatal_error &
1185  & ("NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
1186  & "MUST BE THE STRING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
1187  &"VARIABLE NAME: "//trim(name))
1188 
1189 
1190  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1191  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1192  &"ERROR MAKING VARIABLE: "//trim(name))
1193 
1194 ! if(DIM2%UNLIMITED) CALL FATAL_ERROR &
1195 ! & ("NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
1196 ! & "MUST BE THE STRING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
1197 ! &"VARIABLE NAME: "//TRIM(NAME))
1198 
1199  var => new_var()
1200 
1201  var%VARID = -1
1202  var%VARNAME = trim(name)
1203  var%xtype = nf90_char
1204  var%vec_chr => values
1205  var => add(var,copy_dim(dim1))
1206  var => add(var,copy_dim(dim2))
1207  IF(present(dim3)) THEN
1208  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
1209  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1210  &"ERROR MAKING VARIABLE: "//trim(name))
1211 
1212  IF(.NOT. dim3%UNLIMITED) CALL fatal_error &
1213  & ("NC_MAKE_AVAR: WHEN MAKING CHARACTER DATA, THE LAST DIMENSION",&
1214  & "MUST BE THE UNLIMITED DIMENSION",&
1215  & "VARIABLE NAME: "//trim(name))
1216 
1217  var => add(var,copy_dim(dim3))
1218  END IF
1219 
1220  if(dbg_set(dbg_sbr)) &
1221  & write(ipt,*) "END NC_MAKE_AVAR_VEC_CHR"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_vec_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_avar_vec_dbl ( character(len=*), intent(in)  NAME,
real(dp), dimension(:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), optional, pointer  DIM2 
)

Definition at line 1256 of file mod_nctools.f90.

1256  IMPLICIT NONE
1257  TYPE(NCVAR), POINTER :: VAR
1258  TYPE(NCDIM), POINTER :: DIM1
1259  TYPE(NCDIM), OPTIONAL, POINTER :: DIM2
1260  character(len=*), intent(in) :: name
1261  REAL(DP), allocatable, target, intent(in) :: values(:)
1262  if(dbg_set(dbg_sbr)) &
1263  & write(ipt,*) "START NC_MAKE_AVAR_VEC_DBL"
1264 
1265  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1266  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1267  & "ERROR MAKING VARIABLE: "//trim(name))
1268  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1269  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1270  &"ERROR MAKING VARIABLE: "//trim(name))
1271 ! if(DIM1%UNLIMITED) CALL FATAL_ERROR &
1272 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1273 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1274  var => new_var()
1275 
1276  var%VARID = -1
1277  var%VARNAME = trim(name)
1278  var%xtype = nf90_double
1279  var%vec_dbl => values
1280  var => add(var,copy_dim(dim1))
1281  if(present(dim2)) then
1282  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1283  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1284  &"ERROR MAKING VARIABLE: "//trim(name))
1285  if(.NOT. dim2%UNLIMITED) CALL fatal_error &
1286  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1287  &"ERROR MAKING VARIABLE: "//trim(name))
1288  var => add(var,copy_dim(dim2))
1289  end if
1290 
1291  if(dbg_set(dbg_sbr)) &
1292  & write(ipt,*) "END NC_MAKE_AVAR_VEC_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_vec_flt()

type(ncvar) function, pointer mod_nctools::nc_make_avar_vec_flt ( character(len=*), intent(in)  NAME,
real(spa), dimension(:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), optional, pointer  DIM2 
)

Definition at line 1498 of file mod_nctools.f90.

1498  IMPLICIT NONE
1499  TYPE(NCVAR), POINTER :: VAR
1500  TYPE(NCDIM), POINTER :: DIM1
1501  TYPE(NCDIM), OPTIONAL, POINTER :: DIM2
1502  character(len=*), intent(in) :: name
1503  REAL(SPA), allocatable, target, intent(in) :: values(:)
1504  if(dbg_set(dbg_sbr)) &
1505  & write(ipt,*) "START NC_MAKE_AVAR_VEC_FLT"
1506 
1507  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1508  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1509  & "ERROR MAKING VARIABLE: "//trim(name))
1510  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1511  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1512  &"ERROR MAKING VARIABLE: "//trim(name))
1513 ! if(DIM1%UNLIMITED) CALL FATAL_ERROR &
1514 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1515 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1516  var => new_var()
1517 
1518  var%VARID = -1
1519  var%VARNAME = trim(name)
1520  var%xtype = nf90_float
1521  var%vec_flt => values(1:)
1522  var => add(var,copy_dim(dim1))
1523  if(present(dim2)) then
1524  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1525  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1526  &"ERROR MAKING VARIABLE: "//trim(name))
1527  if(.NOT. dim2%UNLIMITED) CALL fatal_error &
1528  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1529  &"ERROR MAKING VARIABLE: "//trim(name))
1530  var => add(var,copy_dim(dim2))
1531  end if
1532 
1533  if(dbg_set(dbg_sbr)) &
1534  & write(ipt,*) "END NC_MAKE_AVAR_VEC_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_avar_vec_int()

type(ncvar) function, pointer mod_nctools::nc_make_avar_vec_int ( character(len=*), intent(in)  NAME,
integer, dimension(:), intent(in), allocatable, target  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), optional, pointer  DIM2 
)

Definition at line 1740 of file mod_nctools.f90.

1740  IMPLICIT NONE
1741  TYPE(NCVAR), POINTER :: VAR
1742  TYPE(NCDIM), POINTER :: DIM1
1743  TYPE(NCDIM), OPTIONAL, POINTER :: DIM2
1744  character(len=*), intent(in) :: name
1745  INTEGER, allocatable, target, intent(in) :: values(:)
1746  if(dbg_set(dbg_sbr)) &
1747  & write(ipt,*) "START NC_MAKE_AVAR_VEC_INT"
1748 
1749  IF(.NOT. ALLOCATED(values)) CALL fatal_error &
1750  & ("NC_MAKE_AVAR: VALUES ARGUMENT MUST ALREADY BE ALLOCATED!",&
1751  & "ERROR MAKING VARIABLE: "//trim(name))
1752  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1753  & ("NC_MAKE_AVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1754  &"ERROR MAKING VARIABLE: "//trim(name))
1755 ! if(DIM1%UNLIMITED) CALL FATAL_ERROR &
1756 ! & ("NC_MAKE_AVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
1757 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
1758  var => new_var()
1759 
1760  var%VARID = -1
1761  var%VARNAME = trim(name)
1762  var%xtype = nf90_int
1763  var%vec_int => values
1764  var => add(var,copy_dim(dim1))
1765  if(present(dim2)) then
1766  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1767  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1768  &"ERROR MAKING VARIABLE: "//trim(name))
1769  if(.NOT. dim2%UNLIMITED) CALL fatal_error &
1770  & ("NC_MAKE_AVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
1771  &"ERROR MAKING VARIABLE: "//trim(name))
1772  var => add(var,copy_dim(dim2))
1773  end if
1774 
1775  if(dbg_set(dbg_sbr)) &
1776  & write(ipt,*) "END NC_MAKE_AVAR_VEC_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_dim()

type(ncdim) function, pointer mod_nctools::nc_make_dim ( character(len=*), intent(in)  NAME,
integer, intent(in)  LEN 
)

Definition at line 555 of file mod_nctools.f90.

555  IMPLICIT NONE
556  TYPE(NCDIM), POINTER :: DIM
557  INTEGER, INTENT(IN) :: LEN
558 ! logical, intent(in) :: UNLIMITED
559  character(len=*), intent(in) :: name
560  dim => new_dim()
561  dim%dimid=-1
562  dim%dimname=name
563  dim%dim=len
564  IF(len == nf90_unlimited) dim%UNLIMITED=.true.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_make_pvar_arr_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_arr_dbl ( character(len=*), intent(in)  NAME,
real(dp), dimension(:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), optional, pointer  DIM3 
)

Definition at line 2137 of file mod_nctools.f90.

2137  IMPLICIT NONE
2138  TYPE(NCVAR), POINTER :: VAR
2139  TYPE(NCDIM), POINTER :: DIM1
2140  TYPE(NCDIM), POINTER :: DIM2
2141  TYPE(NCDIM), OPTIONAL, POINTER :: DIM3
2142  character(len=*), intent(in) :: name
2143  REAL(DP), POINTER, intent(in) :: values(:,:)
2144  if(dbg_set(dbg_sbr)) &
2145  & write(ipt,*) "START NC_MAKE_PVAR_ARR_DBL"
2146 
2147  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2148  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2149  & "ERROR MAKING VARIABLE: "//trim(name))
2150  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2151  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2152  &"ERROR MAKING VARIABLE: "//trim(name))
2153  if(dim1%UNLIMITED) CALL fatal_error &
2154  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2155  &"ERROR MAKING VARIABLE: "//trim(name))
2156  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2157  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2158  &"ERROR MAKING VARIABLE: "//trim(name))
2159 ! if(DIM2%UNLIMITED) CALL FATAL_ERROR &
2160 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2161 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2162  var => new_var()
2163 
2164  var%VARID = -1
2165  var%VARNAME = trim(name)
2166  var%xtype = nf90_double
2167  var%arr_dbl => values
2168  var => add(var,copy_dim(dim1))
2169  var => add(var,copy_dim(dim2))
2170  if(present(dim3)) then
2171  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2172  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2173  &"ERROR MAKING VARIABLE: "//trim(name))
2174  if(.NOT. dim3%UNLIMITED) CALL fatal_error &
2175  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2176  &"ERROR MAKING VARIABLE: "//trim(name))
2177  var => add(var,copy_dim(dim3))
2178  end if
2179 
2180  if(dbg_set(dbg_sbr)) &
2181  & write(ipt,*) "END NC_MAKE_PVAR_ARR_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_arr_flt()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_arr_flt ( character(len=*), intent(in)  NAME,
real(spa), dimension(:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), optional, pointer  DIM3 
)

Definition at line 2383 of file mod_nctools.f90.

2383  IMPLICIT NONE
2384  TYPE(NCVAR), POINTER :: VAR
2385  TYPE(NCDIM), POINTER :: DIM1
2386  TYPE(NCDIM), POINTER :: DIM2
2387  TYPE(NCDIM), OPTIONAL, POINTER :: DIM3
2388  character(len=*), intent(in) :: name
2389  REAL(SPA), POINTER, intent(in) :: values(:,:)
2390  if(dbg_set(dbg_sbr)) &
2391  & write(ipt,*) "START NC_MAKE_PVAR_ARR_FLT"
2392 
2393  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2394  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2395  & "ERROR MAKING VARIABLE: "//trim(name))
2396  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2397  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2398  &"ERROR MAKING VARIABLE: "//trim(name))
2399  if(dim1%UNLIMITED) CALL fatal_error &
2400  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2401  &"ERROR MAKING VARIABLE: "//trim(name))
2402  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2403  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2404  &"ERROR MAKING VARIABLE: "//trim(name))
2405 ! if(DIM2%UNLIMITED) CALL FATAL_ERROR &
2406 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2407 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2408  var => new_var()
2409 
2410  var%VARID = -1
2411  var%VARNAME = trim(name)
2412  var%xtype = nf90_float
2413  var%arr_flt => values
2414  var => add(var,copy_dim(dim1))
2415  var => add(var,copy_dim(dim2))
2416  if(present(dim3)) then
2417  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2418  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2419  &"ERROR MAKING VARIABLE: "//trim(name))
2420  if(.NOT. dim3%UNLIMITED) CALL fatal_error &
2421  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2422  &"ERROR MAKING VARIABLE: "//trim(name))
2423  var => add(var,copy_dim(dim3))
2424  end if
2425 
2426  if(dbg_set(dbg_sbr)) &
2427  & write(ipt,*) "END NC_MAKE_PVAR_ARR_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_arr_int()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_arr_int ( character(len=*), intent(in)  NAME,
integer, dimension(:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), optional, pointer  DIM3 
)

Definition at line 2629 of file mod_nctools.f90.

2629  IMPLICIT NONE
2630  TYPE(NCVAR), POINTER :: VAR
2631  TYPE(NCDIM), POINTER :: DIM1
2632  TYPE(NCDIM), POINTER :: DIM2
2633  TYPE(NCDIM), OPTIONAL, POINTER :: DIM3
2634  character(len=*), intent(in) :: name
2635  INTEGER, POINTER, intent(in) :: values(:,:)
2636  if(dbg_set(dbg_sbr)) &
2637  & write(ipt,*) "START NC_MAKE_PVAR_ARR_INT"
2638 
2639  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2640  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2641  & "ERROR MAKING VARIABLE: "//trim(name))
2642  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2643  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2644  &"ERROR MAKING VARIABLE: "//trim(name))
2645  if(dim1%UNLIMITED) CALL fatal_error &
2646  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2647  &"ERROR MAKING VARIABLE: "//trim(name))
2648  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2649  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2650  &"ERROR MAKING VARIABLE: "//trim(name))
2651 ! if(DIM2%UNLIMITED) CALL FATAL_ERROR &
2652 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2653 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2654  var => new_var()
2655 
2656  var%VARID = -1
2657  var%VARNAME = trim(name)
2658  var%xtype = nf90_int
2659  var%arr_int => values
2660  var => add(var,copy_dim(dim1))
2661  var => add(var,copy_dim(dim2))
2662  if(present(dim3)) then
2663  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2664  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2665  &"ERROR MAKING VARIABLE: "//trim(name))
2666  if(.NOT. dim3%UNLIMITED) CALL fatal_error &
2667  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2668  &"ERROR MAKING VARIABLE: "//trim(name))
2669  var => add(var,copy_dim(dim3))
2670  end if
2671 
2672  if(dbg_set(dbg_sbr)) &
2673  & write(ipt,*) "END NC_MAKE_PVAR_ARR_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_cub_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_cub_dbl ( character(len=*), intent(in)  NAME,
real(dp), dimension(:,:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), optional, pointer  DIM4 
)

Definition at line 2186 of file mod_nctools.f90.

2186  IMPLICIT NONE
2187  TYPE(NCVAR), POINTER :: VAR
2188  TYPE(NCDIM), POINTER :: DIM1
2189  TYPE(NCDIM), POINTER :: DIM2
2190  TYPE(NCDIM), POINTER :: DIM3
2191  TYPE(NCDIM), OPTIONAL, POINTER :: DIM4
2192  character(len=*), intent(in) :: name
2193  REAL(DP), POINTER, intent(in) :: values(:,:,:)
2194  if(dbg_set(dbg_sbr)) &
2195  & write(ipt,*) "START NC_MAKE_PVAR_CUB_DBL"
2196 
2197  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2198  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2199  & "ERROR MAKING VARIABLE: "//trim(name))
2200  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2201  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2202  &"ERROR MAKING VARIABLE: "//trim(name))
2203  if(dim1%UNLIMITED) CALL fatal_error &
2204  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2205  &"ERROR MAKING VARIABLE: "//trim(name))
2206  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2207  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2208  &"ERROR MAKING VARIABLE: "//trim(name))
2209  if(dim2%UNLIMITED) CALL fatal_error &
2210  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2211  &"ERROR MAKING VARIABLE: "//trim(name))
2212  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2213  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2214  &"ERROR MAKING VARIABLE: "//trim(name))
2215 ! if(DIM3%UNLIMITED) CALL FATAL_ERROR &
2216 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2217 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2218  var => new_var()
2219 
2220  var%VARID = -1
2221  var%VARNAME = trim(name)
2222  var%xtype = nf90_double
2223  var%cub_dbl => values
2224  var => add(var,copy_dim(dim1))
2225  var => add(var,copy_dim(dim2))
2226  var => add(var,copy_dim(dim3))
2227  if(present(dim4)) then
2228  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
2229  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2230  &"ERROR MAKING VARIABLE: "//trim(name))
2231  if(.NOT. dim4%UNLIMITED) CALL fatal_error &
2232  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2233  &"ERROR MAKING VARIABLE: "//trim(name))
2234  var => add(var,copy_dim(dim4))
2235  end if
2236 
2237  if(dbg_set(dbg_sbr)) &
2238  & write(ipt,*) "END NC_MAKE_PVAR_CUB_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_cub_flt()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_cub_flt ( character(len=*), intent(in)  NAME,
real(spa), dimension(:,:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), optional, pointer  DIM4 
)

Definition at line 2432 of file mod_nctools.f90.

2432  IMPLICIT NONE
2433  TYPE(NCVAR), POINTER :: VAR
2434  TYPE(NCDIM), POINTER :: DIM1
2435  TYPE(NCDIM), POINTER :: DIM2
2436  TYPE(NCDIM), POINTER :: DIM3
2437  TYPE(NCDIM), OPTIONAL, POINTER :: DIM4
2438  character(len=*), intent(in) :: name
2439  REAL(SPA), POINTER, intent(in) :: values(:,:,:)
2440  if(dbg_set(dbg_sbr)) &
2441  & write(ipt,*) "START NC_MAKE_PVAR_CUB_FLT"
2442 
2443  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2444  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2445  & "ERROR MAKING VARIABLE: "//trim(name))
2446  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2447  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2448  &"ERROR MAKING VARIABLE: "//trim(name))
2449  if(dim1%UNLIMITED) CALL fatal_error &
2450  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2451  &"ERROR MAKING VARIABLE: "//trim(name))
2452  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2453  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2454  &"ERROR MAKING VARIABLE: "//trim(name))
2455  if(dim2%UNLIMITED) CALL fatal_error &
2456  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2457  &"ERROR MAKING VARIABLE: "//trim(name))
2458  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2459  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2460  &"ERROR MAKING VARIABLE: "//trim(name))
2461 ! if(DIM3%UNLIMITED) CALL FATAL_ERROR &
2462 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2463 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2464  var => new_var()
2465 
2466  var%VARID = -1
2467  var%VARNAME = trim(name)
2468  var%xtype = nf90_float
2469  var%cub_flt => values
2470  var => add(var,copy_dim(dim1))
2471  var => add(var,copy_dim(dim2))
2472  var => add(var,copy_dim(dim3))
2473  if(present(dim4)) then
2474  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
2475  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2476  &"ERROR MAKING VARIABLE: "//trim(name))
2477  if(.NOT. dim4%UNLIMITED) CALL fatal_error &
2478  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2479  &"ERROR MAKING VARIABLE: "//trim(name))
2480  var => add(var,copy_dim(dim4))
2481  end if
2482 
2483  if(dbg_set(dbg_sbr)) &
2484  & write(ipt,*) "END NC_MAKE_PVAR_CUB_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_cub_int()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_cub_int ( character(len=*), intent(in)  NAME,
integer, dimension(:,:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), optional, pointer  DIM4 
)

Definition at line 2678 of file mod_nctools.f90.

2678  IMPLICIT NONE
2679  TYPE(NCVAR), POINTER :: VAR
2680  TYPE(NCDIM), POINTER :: DIM1
2681  TYPE(NCDIM), POINTER :: DIM2
2682  TYPE(NCDIM), POINTER :: DIM3
2683  TYPE(NCDIM), OPTIONAL, POINTER :: DIM4
2684  character(len=*), intent(in) :: name
2685  INTEGER, POINTER, intent(in) :: values(:,:,:)
2686  if(dbg_set(dbg_sbr)) &
2687  & write(ipt,*) "START NC_MAKE_PVAR_CUB_INT"
2688 
2689  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2690  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2691  & "ERROR MAKING VARIABLE: "//trim(name))
2692  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2693  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2694  &"ERROR MAKING VARIABLE: "//trim(name))
2695  if(dim1%UNLIMITED) CALL fatal_error &
2696  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2697  &"ERROR MAKING VARIABLE: "//trim(name))
2698  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2699  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2700  &"ERROR MAKING VARIABLE: "//trim(name))
2701  if(dim2%UNLIMITED) CALL fatal_error &
2702  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2703  &"ERROR MAKING VARIABLE: "//trim(name))
2704  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2705  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2706  &"ERROR MAKING VARIABLE: "//trim(name))
2707 ! if(DIM3%UNLIMITED) CALL FATAL_ERROR &
2708 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2709 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2710  var => new_var()
2711 
2712  var%VARID = -1
2713  var%VARNAME = trim(name)
2714  var%xtype = nf90_int
2715  var%cub_int => values
2716  var => add(var,copy_dim(dim1))
2717  var => add(var,copy_dim(dim2))
2718  var => add(var,copy_dim(dim3))
2719  if(present(dim4)) then
2720  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
2721  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2722  &"ERROR MAKING VARIABLE: "//trim(name))
2723  if(.NOT. dim4%UNLIMITED) CALL fatal_error &
2724  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2725  &"ERROR MAKING VARIABLE: "//trim(name))
2726  var => add(var,copy_dim(dim4))
2727  end if
2728 
2729  if(dbg_set(dbg_sbr)) &
2730  & write(ipt,*) "END NC_MAKE_PVAR_CUB_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_fda_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_fda_dbl ( character(len=*), intent(in)  NAME,
real(dp), dimension(:,:,:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), pointer  DIM4,
type(ncdim), optional, pointer  DIM5 
)

Definition at line 2243 of file mod_nctools.f90.

2243  IMPLICIT NONE
2244  TYPE(NCVAR), POINTER :: VAR
2245  TYPE(NCDIM), POINTER :: DIM1
2246  TYPE(NCDIM), POINTER :: DIM2
2247  TYPE(NCDIM), POINTER :: DIM3
2248  TYPE(NCDIM), POINTER :: DIM4
2249  TYPE(NCDIM), OPTIONAL, POINTER :: DIM5
2250  character(len=*), intent(in) :: name
2251  REAL(DP), POINTER, intent(in) :: values(:,:,:,:)
2252  if(dbg_set(dbg_sbr)) &
2253  & write(ipt,*) "START NC_MAKE_PVAR_FDA_DBL"
2254 
2255  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2256  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2257  & "ERROR MAKING VARIABLE: "//trim(name))
2258  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2259  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2260  &"ERROR MAKING VARIABLE: "//trim(name))
2261  if(dim1%UNLIMITED) CALL fatal_error &
2262  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2263  &"ERROR MAKING VARIABLE: "//trim(name))
2264  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2265  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2266  &"ERROR MAKING VARIABLE: "//trim(name))
2267  if(dim2%UNLIMITED) CALL fatal_error &
2268  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2269  &"ERROR MAKING VARIABLE: "//trim(name))
2270  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2271  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2272  &"ERROR MAKING VARIABLE: "//trim(name))
2273  if(dim3%UNLIMITED) CALL fatal_error &
2274  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2275  &"ERROR MAKING VARIABLE: "//trim(name))
2276  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
2277  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2278  &"ERROR MAKING VARIABLE: "//trim(name))
2279 ! if(DIM4%UNLIMITED) CALL FATAL_ERROR &
2280 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2281 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2282  var => new_var()
2283 
2284  var%VARID = -1
2285  var%VARNAME = trim(name)
2286  var%xtype = nf90_double
2287  var%fda_dbl => values
2288  var => add(var,copy_dim(dim1))
2289  var => add(var,copy_dim(dim2))
2290  var => add(var,copy_dim(dim3))
2291  var => add(var,copy_dim(dim4))
2292  if(present(dim5)) then
2293  if(.NOT. ASSOCIATED(dim5)) CALL fatal_error &
2294  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2295  &"ERROR MAKING VARIABLE: "//trim(name))
2296  if(.NOT. dim5%UNLIMITED) CALL fatal_error &
2297  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2298  &"ERROR MAKING VARIABLE: "//trim(name))
2299  var => add(var,copy_dim(dim5))
2300  end if
2301 
2302  if(dbg_set(dbg_sbr)) &
2303  & write(ipt,*) "END NC_MAKE_PVAR_FDA_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_fda_flt()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_fda_flt ( character(len=*), intent(in)  NAME,
real(spa), dimension(:,:,:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), pointer  DIM4,
type(ncdim), optional, pointer  DIM5 
)

Definition at line 2489 of file mod_nctools.f90.

2489  IMPLICIT NONE
2490  TYPE(NCVAR), POINTER :: VAR
2491  TYPE(NCDIM), POINTER :: DIM1
2492  TYPE(NCDIM), POINTER :: DIM2
2493  TYPE(NCDIM), POINTER :: DIM3
2494  TYPE(NCDIM), POINTER :: DIM4
2495  TYPE(NCDIM), OPTIONAL, POINTER :: DIM5
2496  character(len=*), intent(in) :: name
2497  REAL(SPA), POINTER, intent(in) :: values(:,:,:,:)
2498  if(dbg_set(dbg_sbr)) &
2499  & write(ipt,*) "START NC_MAKE_PVAR_FDA_FLT"
2500 
2501  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2502  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2503  & "ERROR MAKING VARIABLE: "//trim(name))
2504  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2505  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2506  &"ERROR MAKING VARIABLE: "//trim(name))
2507  if(dim1%UNLIMITED) CALL fatal_error &
2508  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2509  &"ERROR MAKING VARIABLE: "//trim(name))
2510  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2511  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2512  &"ERROR MAKING VARIABLE: "//trim(name))
2513  if(dim2%UNLIMITED) CALL fatal_error &
2514  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2515  &"ERROR MAKING VARIABLE: "//trim(name))
2516  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2517  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2518  &"ERROR MAKING VARIABLE: "//trim(name))
2519  if(dim3%UNLIMITED) CALL fatal_error &
2520  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2521  &"ERROR MAKING VARIABLE: "//trim(name))
2522  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
2523  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2524  &"ERROR MAKING VARIABLE: "//trim(name))
2525 ! if(DIM4%UNLIMITED) CALL FATAL_ERROR &
2526 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2527 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2528  var => new_var()
2529 
2530  var%VARID = -1
2531  var%VARNAME = trim(name)
2532  var%xtype = nf90_float
2533  var%fda_flt => values
2534  var => add(var,copy_dim(dim1))
2535  var => add(var,copy_dim(dim2))
2536  var => add(var,copy_dim(dim3))
2537  var => add(var,copy_dim(dim4))
2538  if(present(dim5)) then
2539  if(.NOT. ASSOCIATED(dim5)) CALL fatal_error &
2540  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2541  &"ERROR MAKING VARIABLE: "//trim(name))
2542  if(.NOT. dim5%UNLIMITED) CALL fatal_error &
2543  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2544  &"ERROR MAKING VARIABLE: "//trim(name))
2545  var => add(var,copy_dim(dim5))
2546  end if
2547 
2548  if(dbg_set(dbg_sbr)) &
2549  & write(ipt,*) "END NC_MAKE_PVAR_FDA_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_fda_int()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_fda_int ( character(len=*), intent(in)  NAME,
integer, dimension(:,:,:,:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), pointer  DIM3,
type(ncdim), pointer  DIM4,
type(ncdim), optional, pointer  DIM5 
)

Definition at line 2735 of file mod_nctools.f90.

2735  IMPLICIT NONE
2736  TYPE(NCVAR), POINTER :: VAR
2737  TYPE(NCDIM), POINTER :: DIM1
2738  TYPE(NCDIM), POINTER :: DIM2
2739  TYPE(NCDIM), POINTER :: DIM3
2740  TYPE(NCDIM), POINTER :: DIM4
2741  TYPE(NCDIM), OPTIONAL, POINTER :: DIM5
2742  character(len=*), intent(in) :: name
2743  INTEGER, POINTER, intent(in) :: values(:,:,:,:)
2744  if(dbg_set(dbg_sbr)) &
2745  & write(ipt,*) "START NC_MAKE_PVAR_FDA_INT"
2746 
2747  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2748  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2749  & "ERROR MAKING VARIABLE: "//trim(name))
2750  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2751  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2752  &"ERROR MAKING VARIABLE: "//trim(name))
2753  if(dim1%UNLIMITED) CALL fatal_error &
2754  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2755  &"ERROR MAKING VARIABLE: "//trim(name))
2756  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2757  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2758  &"ERROR MAKING VARIABLE: "//trim(name))
2759  if(dim2%UNLIMITED) CALL fatal_error &
2760  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2761  &"ERROR MAKING VARIABLE: "//trim(name))
2762  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2763  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2764  &"ERROR MAKING VARIABLE: "//trim(name))
2765  if(dim3%UNLIMITED) CALL fatal_error &
2766  & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2767  &"ERROR MAKING VARIABLE: "//trim(name))
2768  if(.NOT. ASSOCIATED(dim4)) CALL fatal_error &
2769  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2770  &"ERROR MAKING VARIABLE: "//trim(name))
2771 ! if(DIM4%UNLIMITED) CALL FATAL_ERROR &
2772 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2773 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2774  var => new_var()
2775 
2776  var%VARID = -1
2777  var%VARNAME = trim(name)
2778  var%xtype = nf90_int
2779  var%fda_int => values
2780  var => add(var,copy_dim(dim1))
2781  var => add(var,copy_dim(dim2))
2782  var => add(var,copy_dim(dim3))
2783  var => add(var,copy_dim(dim4))
2784  if(present(dim5)) then
2785  if(.NOT. ASSOCIATED(dim5)) CALL fatal_error &
2786  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2787  &"ERROR MAKING VARIABLE: "//trim(name))
2788  if(.NOT. dim5%UNLIMITED) CALL fatal_error &
2789  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2790  &"ERROR MAKING VARIABLE: "//trim(name))
2791  var => add(var,copy_dim(dim5))
2792  end if
2793 
2794  if(dbg_set(dbg_sbr)) &
2795  & write(ipt,*) "END NC_MAKE_PVAR_FDA_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_scl_chr()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_scl_chr ( character(len=*), intent(in)  NAME,
character(len=80), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), optional, pointer  DIM2 
)

Definition at line 1952 of file mod_nctools.f90.

1952  IMPLICIT NONE
1953  TYPE(NCVAR), POINTER :: VAR
1954  TYPE(NCDIM), POINTER :: DIM1 ! MUST BE STR LENGTH
1955  TYPE(NCDIM), OPTIONAL, POINTER :: DIM2 ! IF PRESENT THIS MUST BE UNLIMITED
1956  character(len=*), intent(in) :: name
1957  character(len=80), POINTER, intent(in) :: values
1958  if(dbg_set(dbg_sbr)) &
1959  & write(ipt,*) "START NC_MAKE_PVAR_SCL_CHR"
1960 
1961  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
1962  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
1963  & "ERROR MAKING VARIABLE: "//trim(name))
1964 
1965  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
1966  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1967  &"ERROR MAKING VARIABLE: "//trim(name))
1968 
1969 
1970  if(dim1%UNLIMITED) CALL fatal_error &
1971  & ("NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
1972  & "MUST BE THE STING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
1973  &"VARIABLE NAME: "//trim(name))
1974 
1975  var => new_var()
1976 
1977  var%VARID = -1
1978  var%VARNAME = trim(name)
1979  var%xtype = nf90_char
1980  var%scl_chr => values
1981  var => add(var,copy_dim(dim1))
1982  IF(present(dim2)) THEN
1983  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
1984  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
1985  &"ERROR MAKING VARIABLE: "//trim(name))
1986 
1987  IF(.NOT. dim2%UNLIMITED) CALL fatal_error &
1988  & ("NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE LAST DIMENSION",&
1989  & "MUST BE THE UNLIMITED DIMENSION",&
1990  & "VARIABLE NAME: "//trim(name))
1991 
1992  var => add(var,copy_dim(dim2))
1993  END IF
1994 
1995  if(dbg_set(dbg_sbr)) &
1996  & write(ipt,*) "END NC_MAKE_PVAR_SCL_CHR"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_scl_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_scl_dbl ( character(len=*), intent(in)  NAME,
real(dp), intent(in), pointer  VALUES,
type(ncdim), optional, pointer  DIM1 
)

Definition at line 2060 of file mod_nctools.f90.

2060  IMPLICIT NONE
2061  TYPE(NCVAR), POINTER :: VAR
2062  TYPE(NCDIM), OPTIONAL, POINTER :: DIM1
2063  character(len=*), intent(in) :: name
2064  REAL(DP), POINTER, intent(in) :: values
2065  if(dbg_set(dbg_sbr)) &
2066  & write(ipt,*) "START NC_MAKE_PVAR_SCL_DBL"
2067 
2068  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2069  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2070  & "ERROR MAKING VARIABLE: "//trim(name))
2071 
2072  var => new_var()
2073 
2074  var%VARID = -1
2075  var%VARNAME = trim(name)
2076  var%xtype = nf90_double
2077  var%scl_dbl => values
2078  IF(present(dim1)) THEN
2079  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2080  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2081  &"ERROR MAKING VARIABLE: "//trim(name))
2082  if(.NOT. dim1%UNLIMITED) CALL fatal_error &
2083  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2084  &"ERROR MAKING VARIABLE: "//trim(name))
2085  var => add(var,copy_dim(dim1))
2086  END IF
2087 
2088  if(dbg_set(dbg_sbr)) &
2089  & write(ipt,*) "END NC_MAKE_PVAR_SCL_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_scl_flt()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_scl_flt ( character(len=*), intent(in)  NAME,
real(spa), intent(in), pointer  VALUES,
type(ncdim), optional, pointer  DIM1 
)

Definition at line 2308 of file mod_nctools.f90.

2308  IMPLICIT NONE
2309  TYPE(NCVAR), POINTER :: VAR
2310  TYPE(NCDIM), OPTIONAL, POINTER :: DIM1
2311  character(len=*), intent(in) :: name
2312  REAL(SPA), POINTER, intent(in) :: values
2313  if(dbg_set(dbg_sbr)) &
2314  & write(ipt,*) "START NC_MAKE_PVAR_SCL_FLT"
2315 
2316  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2317  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2318  & "ERROR MAKING VARIABLE: "//trim(name))
2319 
2320  var => new_var()
2321 
2322  var%VARID = -1
2323  var%VARNAME = trim(name)
2324  var%xtype = nf90_float
2325  var%scl_flt => values
2326  IF(present(dim1)) THEN
2327  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2328  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2329  &"ERROR MAKING VARIABLE: "//trim(name))
2330  if(.NOT. dim1%UNLIMITED) CALL fatal_error &
2331  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2332  &"ERROR MAKING VARIABLE: "//trim(name))
2333  var => add(var,copy_dim(dim1))
2334  END IF
2335 
2336  if(dbg_set(dbg_sbr)) &
2337  & write(ipt,*) "END NC_MAKE_PVAR_SCL_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_scl_int()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_scl_int ( character(len=*), intent(in)  NAME,
integer, intent(in), pointer  VALUES,
type(ncdim), optional, pointer  DIM1 
)

Definition at line 2554 of file mod_nctools.f90.

2554  IMPLICIT NONE
2555  TYPE(NCVAR), POINTER :: VAR
2556  TYPE(NCDIM), OPTIONAL, POINTER :: DIM1
2557  character(len=*), intent(in) :: name
2558  INTEGER, POINTER, intent(in) :: values
2559  if(dbg_set(dbg_sbr)) &
2560  & write(ipt,*) "START NC_MAKE_PVAR_SCL_INT"
2561 
2562  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2563  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2564  & "ERROR MAKING VARIABLE: "//trim(name))
2565 
2566  var => new_var()
2567 
2568  var%VARID = -1
2569  var%VARNAME = trim(name)
2570  var%xtype = nf90_int
2571  var%scl_int => values
2572  IF(present(dim1)) THEN
2573  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2574  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2575  &"ERROR MAKING VARIABLE: "//trim(name))
2576  if(.NOT. dim1%UNLIMITED) CALL fatal_error &
2577  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2578  &"ERROR MAKING VARIABLE: "//trim(name))
2579  var => add(var,copy_dim(dim1))
2580  END IF
2581 
2582  if(dbg_set(dbg_sbr)) &
2583  & write(ipt,*) "END NC_MAKE_PVAR_SCL_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_vec_chr()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_vec_chr ( character(len=*), intent(in)  NAME,
character(len=80), dimension(:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), pointer  DIM2,
type(ncdim), optional, pointer  DIM3 
)

Definition at line 2001 of file mod_nctools.f90.

2001  IMPLICIT NONE
2002  TYPE(NCVAR), POINTER :: VAR
2003  TYPE(NCDIM), POINTER :: DIM1 ! MUST BE STR LENGTH
2004  TYPE(NCDIM), POINTER :: DIM2 ! Number of strings
2005  TYPE(NCDIM), OPTIONAL, POINTER :: DIM3 ! IF PRESENT THIS MUST BE UNLIMITED
2006  character(len=*), intent(in) :: name
2007  character(len=80), POINTER, intent(in) :: values(:)
2008  if(dbg_set(dbg_sbr)) &
2009  & write(ipt,*) "START NC_MAKE_PVAR_VEC_CHR"
2010 
2011  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2012  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2013  & "ERROR MAKING VARIABLE: "//trim(name))
2014 
2015  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2016  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2017  &"ERROR MAKING VARIABLE: "//trim(name))
2018 
2019  if(dim1%UNLIMITED) CALL fatal_error &
2020  & ("NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
2021  & "MUST BE THE STRING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
2022  &"VARIABLE NAME: "//trim(name))
2023 
2024  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2025  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2026  &"ERROR MAKING VARIABLE: "//trim(name))
2027 
2028 ! if(DIM2%UNLIMITED) CALL WARNING &
2029 ! & ("NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE FIRST DIMENSION",&
2030 ! & "MUST BE THE STRING LENGTH. THE LAST DIMENSION (IF PRESENT) MUST BE UNLIMITED",&
2031 ! &"VARIABLE NAME: "//TRIM(NAME))
2032 
2033  var => new_var()
2034 
2035  var%VARID = -1
2036  var%VARNAME = trim(name)
2037  var%xtype = nf90_char
2038  var%vec_chr => values
2039  var => add(var,copy_dim(dim1))
2040  var => add(var,copy_dim(dim2))
2041  IF(present(dim3)) THEN
2042  if(.NOT. ASSOCIATED(dim3)) CALL fatal_error &
2043  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2044  &"ERROR MAKING VARIABLE: "//trim(name))
2045 
2046  IF(.NOT. dim3%UNLIMITED) CALL fatal_error &
2047  & ("NC_MAKE_PVAR: WHEN MAKING CHARACTER DATA, THE LAST DIMENSION",&
2048  & "MUST BE THE UNLIMITED DIMENSION",&
2049  & "VARIABLE NAME: "//trim(name))
2050 
2051  var => add(var,copy_dim(dim3))
2052  END IF
2053 
2054  if(dbg_set(dbg_sbr)) &
2055  & write(ipt,*) "END NC_MAKE_PVAR_VEC_CHR"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_vec_dbl()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_vec_dbl ( character(len=*), intent(in)  NAME,
real(dp), dimension(:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), optional, pointer  DIM2 
)

Definition at line 2094 of file mod_nctools.f90.

2094  IMPLICIT NONE
2095  TYPE(NCVAR), POINTER :: VAR
2096  TYPE(NCDIM), POINTER :: DIM1
2097  TYPE(NCDIM), OPTIONAL, POINTER :: DIM2
2098  character(len=*), intent(in) :: name
2099  REAL(DP), POINTER, intent(in) :: values(:)
2100  if(dbg_set(dbg_sbr)) &
2101  & write(ipt,*) "START NC_MAKE_PVAR_VEC_DBL"
2102 
2103  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2104  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2105  & "ERROR MAKING VARIABLE: "//trim(name))
2106  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2107  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2108  &"ERROR MAKING VARIABLE: "//trim(name))
2109 ! if(DIM1%UNLIMITED) CALL FATAL_ERROR &
2110 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2111 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2112 
2113 
2114  var => new_var()
2115 
2116  var%VARID = -1
2117  var%VARNAME = trim(name)
2118  var%xtype = nf90_double
2119  var%vec_dbl => values
2120  var => add(var,copy_dim(dim1))
2121  if(present(dim2)) then
2122  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2123  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2124  &"ERROR MAKING VARIABLE: "//trim(name))
2125  if(.NOT. dim2%UNLIMITED) CALL fatal_error &
2126  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2127  &"ERROR MAKING VARIABLE: "//trim(name))
2128  var => add(var,copy_dim(dim2))
2129  end if
2130 
2131  if(dbg_set(dbg_sbr)) &
2132  & write(ipt,*) "END NC_MAKE_PVAR_VEC_DBL"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_vec_flt()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_vec_flt ( character(len=*), intent(in)  NAME,
real(spa), dimension(:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), optional, pointer  DIM2 
)

Definition at line 2342 of file mod_nctools.f90.

2342  IMPLICIT NONE
2343  TYPE(NCVAR), POINTER :: VAR
2344  TYPE(NCDIM), POINTER :: DIM1
2345  TYPE(NCDIM), OPTIONAL, POINTER :: DIM2
2346  character(len=*), intent(in) :: name
2347  REAL(SPA), POINTER, intent(in) :: values(:)
2348  if(dbg_set(dbg_sbr)) &
2349  & write(ipt,*) "START NC_MAKE_PVAR_VEC_FLT"
2350 
2351  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2352  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2353  & "ERROR MAKING VARIABLE: "//trim(name))
2354  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2355  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2356  &"ERROR MAKING VARIABLE: "//trim(name))
2357 ! if(DIM1%UNLIMITED) CALL WARNING &
2358 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2359 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2360  var => new_var()
2361 
2362  var%VARID = -1
2363  var%VARNAME = trim(name)
2364  var%xtype = nf90_float
2365  var%vec_flt => values(1:)
2366  var => add(var,copy_dim(dim1))
2367  if(present(dim2)) then
2368  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2369  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2370  &"ERROR MAKING VARIABLE: "//trim(name))
2371  if(.NOT. dim2%UNLIMITED) CALL fatal_error &
2372  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2373  &"ERROR MAKING VARIABLE: "//trim(name))
2374  var => add(var,copy_dim(dim2))
2375  end if
2376 
2377  if(dbg_set(dbg_sbr)) &
2378  & write(ipt,*) "END NC_MAKE_PVAR_VEC_FLT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_pvar_vec_int()

type(ncvar) function, pointer mod_nctools::nc_make_pvar_vec_int ( character(len=*), intent(in)  NAME,
integer, dimension(:), intent(in), pointer  VALUES,
type(ncdim), pointer  DIM1,
type(ncdim), optional, pointer  DIM2 
)

Definition at line 2588 of file mod_nctools.f90.

2588  IMPLICIT NONE
2589  TYPE(NCVAR), POINTER :: VAR
2590  TYPE(NCDIM), POINTER :: DIM1
2591  TYPE(NCDIM), OPTIONAL, POINTER :: DIM2
2592  character(len=*), intent(in) :: name
2593  INTEGER, POINTER, intent(in) :: values(:)
2594  if(dbg_set(dbg_sbr)) &
2595  & write(ipt,*) "START NC_MAKE_PVAR_VEC_INT"
2596 
2597  IF(.NOT. ASSOCIATED(values)) CALL fatal_error &
2598  & ("NC_MAKE_PVAR: VALUES ARGUMENT MUST ALREADY BE ASSOCIATED!",&
2599  & "ERROR MAKING VARIABLE: "//trim(name))
2600  if(.NOT. ASSOCIATED(dim1)) CALL fatal_error &
2601  & ("NC_MAKE_PVAR: THE DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2602  &"ERROR MAKING VARIABLE: "//trim(name))
2603 ! if(DIM1%UNLIMITED) CALL WARNING &
2604 ! & ("NC_MAKE_PVAR: NON-OPTIONAL DIMENSION ARGUMENT MUST BE NOT BE UNLIMITED (TIME)",&
2605 ! &"ERROR MAKING VARIABLE: "//TRIM(NAME))
2606  var => new_var()
2607 
2608  var%VARID = -1
2609  var%VARNAME = trim(name)
2610  var%xtype = nf90_int
2611  var%vec_int => values
2612  var => add(var,copy_dim(dim1))
2613  if(present(dim2)) then
2614  if(.NOT. ASSOCIATED(dim2)) CALL fatal_error &
2615  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE ASSOCIATED",&
2616  &"ERROR MAKING VARIABLE: "//trim(name))
2617  if(.NOT. dim2%UNLIMITED) CALL fatal_error &
2618  & ("NC_MAKE_PVAR: OPTIONAL DIMENSION ARGUMENT MUST BE UNLIMITED (TIME)",&
2619  &"ERROR MAKING VARIABLE: "//trim(name))
2620  var => add(var,copy_dim(dim2))
2621  end if
2622 
2623  if(dbg_set(dbg_sbr)) &
2624  & write(ipt,*) "END NC_MAKE_PVAR_VEC_INT"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_make_runtime_att_chr_scl()

type(ncatt) function, pointer mod_nctools::nc_make_runtime_att_chr_scl ( character(len=*), intent(in)  NAME,
character(len=*), intent(in)  VALUES 
)

Definition at line 662 of file mod_nctools.f90.

662  ! NAME IS FIXED, BUT VALUES ARE SENT BY MPI IF NEEDED
663  USE control
664  IMPLICIT NONE
665  TYPE(NCATT), POINTER :: ATT
666  character(len=*), intent(in) :: name
667  character(len=*), intent(in) :: VALUES
668  integer :: ierr, len, DEST,SOURCE
669  integer, parameter :: tag = 40004
670 
671  att => new_att()
672 
673  att%attid = -1
674  att%ATTname = trim(name)
675  att%xtype = nf90_char
676 
677  IF (.NOT. ioproc) THEN
678  ALLOCATE(att%CHR(1))
679  att%CHR = trim(values)
680  att%LEN = len_trim(values)
681  END IF
682 
683  IF (use_mpi_io_mode) THEN
684  END IF
685 
686  IF(att%len==0) CALL kill_att(att)
687 
688 
logical use_mpi_io_mode
Definition: mod_main.f90:188
logical ioproc
Definition: mod_main.f90:103
Here is the call graph for this function:

◆ nc_make_runtime_att_chr_vec()

type(ncatt) function, pointer mod_nctools::nc_make_runtime_att_chr_vec ( character(len=*), intent(in)  NAME,
character(len=*), dimension(:), intent(in), allocatable  VALUES 
)

Definition at line 693 of file mod_nctools.f90.

693  ! NAME IS FIXED, BUT VALUES ARE SENT BY MPI IF NEEDED
694  USE control
695  IMPLICIT NONE
696  TYPE(NCATT), POINTER :: ATT
697  character(len=*), intent(in) :: name
698  character(len=*),ALLOCATABLE, intent(in) :: VALUES(:)
699  integer :: ierr, len, DEST,SOURCE,I,csize
700  integer, parameter :: tag = 40004
701 
702 ! if(len_trim(VALUES) .GT. Char_max_attlen) &
703 ! & Call fatal_error("Can not make attribute: "//trim(NAME),&
704 ! &"attribute string is too long. Increase 'char_max_attlen' in mod_ncll.F")
705  att => new_att()
706 
707  att%attid = -1
708  att%ATTname = trim(name)
709  att%xtype = nf90_char
710 
711  IF (.NOT. ioproc .and. allocated(values)) THEN
712  ALLOCATE(att%CHR(SIZE(values)))
713  att%CHR = values
714  att%LEN = -1
715  END IF
716 
717  IF (use_mpi_io_mode) THEN
718  END IF
719 
720  IF(.not.allocated(att%chr)) call kill_att(att)
721 
722 
logical use_mpi_io_mode
Definition: mod_main.f90:188
logical ioproc
Definition: mod_main.f90:103
Here is the call graph for this function:

◆ nc_make_runtime_dim()

type(ncdim) function, pointer mod_nctools::nc_make_runtime_dim ( character(len=*), intent(in)  NAME,
integer, intent(in)  LEN 
)

Definition at line 569 of file mod_nctools.f90.

569  USE control
570  IMPLICIT NONE
571  TYPE(NCDIM), POINTER :: DIM
572  INTEGER, INTENT(IN) :: LEN
573 ! logical, intent(in) :: UNLIMITED
574  INTEGER, PARAMETER :: TAG = 40003
575  INTEGER :: SOURCE, DEST, IERR
576 
577  character(len=*), intent(in) :: name
578  dim => new_dim()
579  dim%dimid=-1
580  dim%dimname=name
581 
582  IF (.NOT. ioproc) THEN
583  dim%dim=len
584  IF(len == nf90_unlimited) dim%UNLIMITED=.true.
585  END IF
586 
587  IF (use_mpi_io_mode) THEN
588  END IF
589 
logical use_mpi_io_mode
Definition: mod_main.f90:188
logical ioproc
Definition: mod_main.f90:103
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_open()

subroutine mod_nctools::nc_open ( type(ncfile), intent(inout)  NCF)

Definition at line 240 of file mod_nctools.f90.

240  IMPLICIT NONE
241  TYPE(NCFILE), intent(inout) :: NCF
242  CHARACTER(LEN=120) :: errmsg
243  integer :: status
244  if(dbg_set(dbg_sbr)) &
245  & write(ipt,*) "STARTING NC_OPEN"
246 
247  if (ncf%WRITABLE) then
248  errmsg="File named: "//ncf%fname//"; Can not be opend by nf90_open"
249  status = nf90_open(trim(ncf%fname), nf90_write, ncf%ncid)
250  CALL handle_ncerr(status,trim(errmsg))
251 
252  else ! default is open with nf90_nowrite
253  errmsg="File: "//trim(ncf%fname)//"; Can not be opend by nf90_open"
254  status = nf90_open(trim(ncf%fname), nf90_nowrite, ncf%ncid)
255  CALL handle_ncerr(status,trim(errmsg))
256  end if
257 
258  ncf%OPEN = .true.
259 
260  if(dbg_set(dbg_io)) &
261  & write(ipt,*) "Opened File: ",trim(ncf%FNAME)
262 
263  if(dbg_set(dbg_sbr)) &
264  & write(ipt,*) "END NC_OPEN"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_point_var_arr_dbl()

subroutine mod_nctools::nc_point_var_arr_dbl ( type(ncvar), intent(in), pointer  VAR,
real(dp), dimension(:,:), pointer  VALUES 
)

Definition at line 3539 of file mod_nctools.f90.

3539  IMPLICIT NONE
3540  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3541  REAL(DP), POINTER :: values(:,:)
3542 
3543  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3544  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_DBL)")
3545 
3546  IF(.NOT. ASSOCIATED(var%ARR_DBL)) THEN
3547  call print_var(var)
3548  CALL fatal_error &
3549  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (ARR_DBL)")
3550  END IF
3551 
3552  values => var%ARR_DBL
3553 
Here is the call graph for this function:

◆ nc_point_var_arr_flt()

subroutine mod_nctools::nc_point_var_arr_flt ( type(ncvar), intent(in), pointer  VAR,
real(spa), dimension(:,:), pointer  VALUES 
)

Definition at line 3444 of file mod_nctools.f90.

3444  IMPLICIT NONE
3445  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3446  REAL(SPA), POINTER :: values(:,:)
3447 
3448  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3449  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_FLT)")
3450 
3451  IF(.NOT. ASSOCIATED(var%ARR_FLT)) THEN
3452  call print_var(var)
3453  CALL fatal_error &
3454  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (ARR_FLT)")
3455  END IF
3456 
3457  values => var%ARR_FLT
3458 
Here is the call graph for this function:

◆ nc_point_var_arr_int()

subroutine mod_nctools::nc_point_var_arr_int ( type(ncvar), intent(in), pointer  VAR,
integer, dimension(:,:), pointer  VALUES 
)

Definition at line 3634 of file mod_nctools.f90.

3634  IMPLICIT NONE
3635  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3636  INTEGER, POINTER :: values(:,:)
3637 
3638  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3639  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (ARR_INT)")
3640 
3641  IF(.NOT. ASSOCIATED(var%ARR_INT)) THEN
3642  call print_var(var)
3643  CALL fatal_error &
3644  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (ARR_INT)")
3645  END IF
3646 
3647  values => var%ARR_INT
3648 
Here is the call graph for this function:

◆ nc_point_var_cub_dbl()

subroutine mod_nctools::nc_point_var_cub_dbl ( type(ncvar), intent(in), pointer  VAR,
real(dp), dimension(:,:,:), pointer  VALUES 
)

Definition at line 3558 of file mod_nctools.f90.

3558  IMPLICIT NONE
3559  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3560  REAL(DP), POINTER :: values(:,:,:)
3561 
3562  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3563  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_DBL)")
3564 
3565  IF(.NOT. ASSOCIATED(var%CUB_DBL)) THEN
3566  call print_var(var)
3567  CALL fatal_error &
3568  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (CUB_DBL)")
3569  END IF
3570 
3571  values => var%CUB_DBL
3572 
Here is the call graph for this function:

◆ nc_point_var_cub_flt()

subroutine mod_nctools::nc_point_var_cub_flt ( type(ncvar), intent(in), pointer  VAR,
real(spa), dimension(:,:,:), pointer  VALUES 
)

Definition at line 3463 of file mod_nctools.f90.

3463  IMPLICIT NONE
3464  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3465  REAL(SPA), POINTER :: values(:,:,:)
3466 
3467  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3468  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_FLT)")
3469 
3470  IF(.NOT. ASSOCIATED(var%CUB_FLT)) THEN
3471  call print_var(var)
3472  CALL fatal_error &
3473  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (CUB_FLT)")
3474  END IF
3475 
3476  values => var%CUB_FLT
3477 
Here is the call graph for this function:

◆ nc_point_var_cub_int()

subroutine mod_nctools::nc_point_var_cub_int ( type(ncvar), intent(in), pointer  VAR,
integer, dimension(:,:,:), pointer  VALUES 
)

Definition at line 3653 of file mod_nctools.f90.

3653  IMPLICIT NONE
3654  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3655  INTEGER, POINTER :: values(:,:,:)
3656 
3657  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3658  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (CUB_INT)")
3659 
3660  IF(.NOT. ASSOCIATED(var%CUB_INT)) THEN
3661  call print_var(var)
3662  CALL fatal_error &
3663  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (CUB_INT)")
3664  END IF
3665 
3666  values => var%CUB_INT
3667 
Here is the call graph for this function:

◆ nc_point_var_fda_dbl()

subroutine mod_nctools::nc_point_var_fda_dbl ( type(ncvar), intent(in), pointer  VAR,
real(dp), dimension(:,:,:,:), pointer  VALUES 
)

Definition at line 3577 of file mod_nctools.f90.

3577  IMPLICIT NONE
3578  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3579  REAL(DP), POINTER :: values(:,:,:,:)
3580 
3581  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3582  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_DBL)")
3583 
3584  IF(.NOT. ASSOCIATED(var%FDA_DBL)) THEN
3585  call print_var(var)
3586  CALL fatal_error &
3587  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (FDA_DBL)")
3588  END IF
3589 
3590  values => var%FDA_DBL
3591 
Here is the call graph for this function:

◆ nc_point_var_fda_flt()

subroutine mod_nctools::nc_point_var_fda_flt ( type(ncvar), intent(in), pointer  VAR,
real(spa), dimension(:,:,:,:), pointer  VALUES 
)

Definition at line 3482 of file mod_nctools.f90.

3482  IMPLICIT NONE
3483  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3484  REAL(SPA), POINTER :: values(:,:,:,:)
3485 
3486  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3487  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_FLT)")
3488 
3489  IF(.NOT. ASSOCIATED(var%FDA_FLT)) THEN
3490  call print_var(var)
3491  CALL fatal_error &
3492  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (FDA_FLT)")
3493  END IF
3494 
3495  values => var%FDA_FLT
3496 
Here is the call graph for this function:

◆ nc_point_var_fda_int()

subroutine mod_nctools::nc_point_var_fda_int ( type(ncvar), intent(in), pointer  VAR,
integer, dimension(:,:,:,:), pointer  VALUES 
)

Definition at line 3672 of file mod_nctools.f90.

3672  IMPLICIT NONE
3673  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3674  INTEGER, POINTER :: values(:,:,:,:)
3675 
3676  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3677  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (FDA_INT)")
3678 
3679  IF(.NOT. ASSOCIATED(var%FDA_INT)) THEN
3680  call print_var(var)
3681  CALL fatal_error &
3682  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (FDA_INT)")
3683  END IF
3684 
3685  values => var%FDA_INT
3686 
Here is the call graph for this function:

◆ nc_point_var_scl_chr()

subroutine mod_nctools::nc_point_var_scl_chr ( type(ncvar), intent(inout), pointer  VAR,
character(len=80), pointer  VALUES 
)

Definition at line 3691 of file mod_nctools.f90.

3691  IMPLICIT NONE
3692  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3693  CHARACTER(LEN=80), POINTER :: values
3694 
3695  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3696  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_CHR)")
3697 
3698  IF(.NOT. ASSOCIATED(var%SCL_CHR)) THEN
3699  call print_var(var)
3700  CALL fatal_error &
3701  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (SCL_CHR)")
3702  END IF
3703 
3704  values => var%SCL_CHR
3705 
Here is the call graph for this function:

◆ nc_point_var_scl_dbl()

subroutine mod_nctools::nc_point_var_scl_dbl ( type(ncvar), intent(in), pointer  VAR,
real(dp), pointer  VALUES 
)

Definition at line 3501 of file mod_nctools.f90.

3501  IMPLICIT NONE
3502  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3503  REAL(DP), POINTER :: values
3504 
3505  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3506  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_DBL)")
3507 
3508  IF(.NOT. ASSOCIATED(var%SCL_DBL)) THEN
3509  call print_var(var)
3510  CALL fatal_error &
3511  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (SCL_DBL)")
3512  END IF
3513 
3514  values => var%SCL_DBL
3515 
Here is the call graph for this function:

◆ nc_point_var_scl_flt()

subroutine mod_nctools::nc_point_var_scl_flt ( type(ncvar), intent(in), pointer  VAR,
real(spa), pointer  VALUES 
)

Definition at line 3406 of file mod_nctools.f90.

3406  IMPLICIT NONE
3407  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3408  REAL(SPA), POINTER :: values
3409 
3410  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3411  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_FLT)")
3412 
3413  IF(.NOT. ASSOCIATED(var%SCL_FLT)) THEN
3414  call print_var(var)
3415  CALL fatal_error &
3416  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (SCL_FLT)")
3417  END IF
3418 
3419  values => var%SCL_FLT
3420 
Here is the call graph for this function:

◆ nc_point_var_scl_int()

subroutine mod_nctools::nc_point_var_scl_int ( type(ncvar), intent(in), pointer  VAR,
integer, pointer  VALUES 
)

Definition at line 3596 of file mod_nctools.f90.

3596  IMPLICIT NONE
3597  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3598  INTEGER, POINTER :: values
3599 
3600  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3601  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (SCL_INT)")
3602 
3603  IF(.NOT. ASSOCIATED(var%SCL_INT)) THEN
3604  call print_var(var)
3605  CALL fatal_error &
3606  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (SCL_INT)")
3607  END IF
3608 
3609  values => var%SCL_INT
3610 
Here is the call graph for this function:

◆ nc_point_var_vec_chr()

subroutine mod_nctools::nc_point_var_vec_chr ( type(ncvar), intent(inout), pointer  VAR,
character(len=80), dimension(:), pointer  VALUES 
)

Definition at line 3710 of file mod_nctools.f90.

3710  IMPLICIT NONE
3711  TYPE(NCVAR), POINTER, INTENT(INOUT) :: VAR
3712  CHARACTER(LEN=80), POINTER :: values(:)
3713 
3714  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3715  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_CHR)")
3716 
3717  IF(.NOT. ASSOCIATED(var%VEC_CHR)) THEN
3718  call print_var(var)
3719  CALL fatal_error &
3720  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (VEC_CHR)")
3721  END IF
3722 
3723  values => var%VEC_CHR
3724 
Here is the call graph for this function:

◆ nc_point_var_vec_dbl()

subroutine mod_nctools::nc_point_var_vec_dbl ( type(ncvar), intent(in), pointer  VAR,
real(dp), dimension(:), pointer  VALUES 
)

Definition at line 3520 of file mod_nctools.f90.

3520  IMPLICIT NONE
3521  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3522  REAL(DP), POINTER :: values(:)
3523 
3524  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3525  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_DBL)")
3526 
3527  IF(.NOT. ASSOCIATED(var%VEC_DBL)) THEN
3528  call print_var(var)
3529  CALL fatal_error &
3530  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (VEC_DBL)")
3531  END IF
3532 
3533  values => var%VEC_DBL
3534 
Here is the call graph for this function:

◆ nc_point_var_vec_flt()

subroutine mod_nctools::nc_point_var_vec_flt ( type(ncvar), intent(in), pointer  VAR,
real(spa), dimension(:), pointer  VALUES 
)

Definition at line 3425 of file mod_nctools.f90.

3425  IMPLICIT NONE
3426  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3427  REAL(SPA), POINTER :: values(:)
3428 
3429  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3430  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_FLT)")
3431 
3432  IF(.NOT. ASSOCIATED(var%VEC_FLT)) THEN
3433  call print_var(var)
3434  CALL fatal_error &
3435  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (VEC_FLT)")
3436  END IF
3437 
3438  values => var%VEC_FLT
3439 
Here is the call graph for this function:

◆ nc_point_var_vec_int()

subroutine mod_nctools::nc_point_var_vec_int ( type(ncvar), intent(in), pointer  VAR,
integer, dimension(:), pointer  VALUES 
)

Definition at line 3615 of file mod_nctools.f90.

3615  IMPLICIT NONE
3616  TYPE(NCVAR), POINTER, INTENT(IN) :: VAR
3617  INTEGER, POINTER :: values(:)
3618 
3619  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
3620  & ("NC_POINT_VAR: THE VARIABLE ARGUMENT MUST BE ASSOCIATED (VEC_INT)")
3621 
3622  IF(.NOT. ASSOCIATED(var%VEC_INT)) THEN
3623  call print_var(var)
3624  CALL fatal_error &
3625  & ("NC_POINT_VAR: THE VARIABLE DATA MUST BE ASSOCIATED (VEC_INT)")
3626  END IF
3627 
3628  values => var%VEC_INT
3629 
Here is the call graph for this function:

◆ nc_read_var()

subroutine mod_nctools::nc_read_var ( type(ncvar), pointer  VAR,
integer, intent(in), optional  STKCNT,
integer, dimension(2), intent(in), optional  STKRNG,
integer, dimension(:), optional, allocatable, target  IOSTART,
integer, dimension(:), optional, allocatable, target  IOCOUNT,
integer, dimension(:), optional, allocatable, target  IOSTRIDE,
integer, intent(in), optional  DEALERID,
logical, intent(in), optional  PARALLEL 
)

Definition at line 5385 of file mod_nctools.f90.

5385  USE control
5386  implicit none
5387  TYPE(NCVAR), POINTER :: VAR
5388  INTEGER, INTENT(IN), OPTIONAL :: STKCNT
5389  INTEGER, INTENT(IN), OPTIONAL :: STKRNG(2)
5390  INTEGER, INTENT(IN), OPTIONAL :: DEALERID
5391  LOGICAL, INTENT(IN), OPTIONAL :: PARALLEL
5392  INTEGER, ALLOCATABLE,TARGET, OPTIONAL :: IOSTART(:), IOCOUNT(:), IOSTRIDE(:)
5393 
5394  ! LOCAL CONTROL VARIALBES
5395  INTEGER :: DEALER
5396  LOGICAL :: PAR_READ
5397  LOGICAL :: SER_READ
5398 
5399  ! NF90 SUBSET VARIABLES
5400  INTEGER, POINTER :: NSTART(:), NCOUNT(:), NSTRIDE(:)
5401 
5402  ! The size of the data returned by nf90_get/put_var
5403  INTEGER, POINTER :: RDIMS(:)
5404  ! For use in put/get_var for vector character data
5405  INTEGER, POINTER :: NSTRT(:), NCNT(:), NSTRD(:)
5406 
5407  INTEGER :: CODE
5408  INTEGER :: XTYPE
5409  INTEGER :: CNT,DIMCNT
5410  INTEGER :: NSIZE, MYSIZE
5411 ! integer :: dim1,dim2,dim3,dim4
5412 
5413  ! POINTERS AND SUCH
5414  TYPE(NCDIM), POINTER :: DIM
5415  TYPE(NCDIMP), POINTER :: DIMLINK
5416  TYPE(NCFILE), POINTER :: NCF
5417  LOGICAL FOUND
5418 
5419 
5420  INTEGER, PARAMETER :: case_scl_int = 1
5421  INTEGER, PARAMETER :: case_vec_int = 2
5422  INTEGER, PARAMETER :: case_arr_int = 3
5423  INTEGER, PARAMETER :: case_cub_int = 4
5424  INTEGER, PARAMETER :: case_fda_int = 5
5425 
5426  INTEGER, PARAMETER :: case_scl_flt = 6
5427  INTEGER, PARAMETER :: case_vec_flt = 7
5428  INTEGER, PARAMETER :: case_arr_flt = 8
5429  INTEGER, PARAMETER :: case_cub_flt = 9
5430  INTEGER, PARAMETER :: case_fda_flt = 10
5431 
5432  INTEGER, PARAMETER :: case_scl_dbl = 11
5433  INTEGER, PARAMETER :: case_vec_dbl = 12
5434  INTEGER, PARAMETER :: case_arr_dbl = 13
5435  INTEGER, PARAMETER :: case_cub_dbl = 14
5436  INTEGER, PARAMETER :: case_fda_dbl = 15
5437 
5438  INTEGER, PARAMETER :: case_scl_chr = 16
5439  INTEGER, PARAMETER :: case_vec_chr = 17
5440 
5441  ! TEMPORARY STORAGE FOR DATA IF COLLECTED TO MASTER PROC
5442  INTEGER, POINTER :: SCL_INT
5443  INTEGER, POINTER,DIMENSION(:) :: GVEC_INT
5444  INTEGER, POINTER,DIMENSION(:,:) :: GARR_INT
5445  INTEGER, POINTER,DIMENSION(:,:,:) :: GCUB_INT
5446  INTEGER, POINTER,DIMENSION(:,:,:,:) :: GFDA_INT
5447 
5448  INTEGER, POINTER,DIMENSION(:) :: LVEC_INT
5449  INTEGER, POINTER,DIMENSION(:,:) :: LARR_INT
5450  INTEGER, POINTER,DIMENSION(:,:,:) :: LCUB_INT
5451  INTEGER, POINTER,DIMENSION(:,:,:,:) :: LFDA_INT
5452 
5453  REAL(SPA), POINTER :: SCL_FLT
5454  REAL(SPA), POINTER,DIMENSION(:) :: LVEC_FLT
5455  REAL(SPA), POINTER,DIMENSION(:,:) :: LARR_FLT
5456  REAL(SPA), POINTER,DIMENSION(:,:,:) :: LCUB_FLT
5457  REAL(SPA), POINTER,DIMENSION(:,:,:,:) :: LFDA_FLT
5458 
5459  REAL(SPA), POINTER,DIMENSION(:) :: GVEC_FLT
5460  REAL(SPA), POINTER,DIMENSION(:,:) :: GARR_FLT
5461  REAL(SPA), POINTER,DIMENSION(:,:,:) :: GCUB_FLT
5462  REAL(SPA), POINTER,DIMENSION(:,:,:,:) :: GFDA_FLT
5463 
5464  REAL(DP), POINTER :: SCL_DBL
5465  REAL(DP), POINTER,DIMENSION(:) :: GVEC_DBL
5466  REAL(DP), POINTER,DIMENSION(:,:) :: GARR_DBL
5467  REAL(DP), POINTER,DIMENSION(:,:,:) :: GCUB_DBL
5468  REAL(DP), POINTER,DIMENSION(:,:,:,:) :: GFDA_DBL
5469 
5470  REAL(DP), POINTER,DIMENSION(:) :: LVEC_DBL
5471  REAL(DP), POINTER,DIMENSION(:,:) :: LARR_DBL
5472  REAL(DP), POINTER,DIMENSION(:,:,:) :: LCUB_DBL
5473  REAL(DP), POINTER,DIMENSION(:,:,:,:) :: LFDA_DBL
5474 
5475  CHARACTER(LEN=80), POINTER :: SCL_CHR
5476  CHARACTER(LEN=80), POINTER :: VEC_CHR(:)
5477  INTEGER :: nlen
5478 
5479  CHARACTER(len=3) :: char1,char2,char3
5480  ! DATA FOR PUT VAR COMMANDS:
5481  INTEGER :: STATUS, I
5482  CHARACTER(LEN=120) :: errmsg
5483 
5484  IF(dbg_set(dbg_sbr)) WRITE(ipt,*) "START NC_READ_VAR:"
5485 
5486  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
5487  & ("NC_READ_VAR: Variable object argument is not assocaited!")
5488 
5489  ! INITIALIZE SOME MEMORY
5490  nlen=0
5491  status=0
5492  i=0
5493  code=0
5494  xtype=0
5495  cnt=0
5496  dimcnt=0
5497  nsize=0
5498  mysize=0
5499  dealer=0
5500  par_read=.false.
5501  ser_read=.false.
5502  found=.false.
5503 
5504 
5505 
5506  !NULLIFY POINTERS
5507  NULLIFY(nstart,ncount,nstride)
5508  NULLIFY(rdims,nstrt,ncnt,nstrd)
5509  NULLIFY(dim,dimlink,ncf)
5510  NULLIFY(scl_int,gvec_int,garr_int,gcub_int,gfda_int,lvec_int,larr_int,lcub_int,lfda_int)
5511 
5512  NULLIFY(scl_flt,gvec_flt,garr_flt,gcub_flt,gfda_flt,lvec_flt,larr_flt,lcub_flt,lfda_flt)
5513  NULLIFY(scl_dbl,gvec_dbl,garr_dbl,gcub_dbl,gfda_dbl,lvec_dbl,larr_dbl,lcub_dbl,lfda_dbl)
5514  NULLIFY(scl_chr,vec_chr)
5515 
5516  ! CHECK TO SEE IF A DEALER ID WAS SPECIFIED?
5517  IF (PRESENT(dealerid)) THEN
5518  dealer = dealerid
5519  ELSE
5520  dealer = msrid ! FOR SERIAL CASE DEALER MUST BE MASTER,
5521  END IF
5522 
5523 
5524 ! THIS IS HARD TO DO - YOU CAN'T RELIABLE GET THE NCF POINTER?
5525 ! NOT ALL FILES ARE ADDED TO THE FILEHEAD BEFORE CALLING READ/WRITE
5526 !!$ ! MAKE SURE THE FILE IS OPEN
5527 !!$ IF(DEALER == MYID) THEN
5528 !!$ IF(.NOT. Associated(VAR%NCID)) THEN
5529 !!$ Call Print_var(VAR)
5530 !!$ Call Fatal_error&
5531 !!$ &("NC_READ_VAR: VARIABLE NCID NOT ASSOCIATED?")
5532 !!$ END IF
5533 !!$
5534 !!$ NCF => FIND_FILE_BYNCID(FILEHEAD ,VAR%NCID,FOUND)
5535 !!$ IF (.NOT. FOUND)THEN
5536 !!$ CALL PRINT_FILE_LIST(FILEHEAD)
5537 !!$ Call Print_var(VAR)
5538 !!$ Call Fatal_error&
5539 !!$ &(" NC_READ_VAR: FILE NOT FOUND IN FILE THE FILEHEAD?")
5540 !!$ END IF
5541 !!$
5542 !!$ IF(.NOT. NCF%OPEN) CALL NC_OPEN(NCF)
5543 !!$
5544 !!$ IF(.NOT. NCF%CONNECTED) THEN
5545 !!$ CALL PRINT_FILE(NCF)
5546 !!$ CALL FATAL_ERROR("NC_READ_VAR: Attempt to read variable from file which is not connected?",&
5547 !!$ & "You must call 'nc_save' or 'nc_load' before trying to read data!")
5548 !!$ END IF
5549 !!$
5550 !!$ END IF
5551 
5552 
5553  ! CHECK TO SEE IF GLOBAL PAR/SERIAL IS OVER-RIDDEN FOR THIS READ?
5554  IF (PRESENT(parallel)) THEN
5555  IF(serial .and. parallel)THEN
5556  CALL print_var(var)
5557  CALL fatal_error("NC_READ_VAR: PARALLEL ERROR!",&
5558  & "The model is running on a single processor,",&
5559  & "but asked to do a parallel NC_READ_VAR operation!")
5560  END IF
5561  par_read= parallel ! SET THE LOCAL PASSED OPTION
5562  ELSE
5563  par_read= par ! SET THE GLOBAL
5564  END IF
5565  ser_read=.NOT. par_read
5566 
5567  ! COUNT THE NUMBER OF DIMENSIONS IN THE VARIABLE
5568  dimcnt = count_dim_list(var)
5569 
5570  IF(dbg_set(dbg_sbrio)) THEN
5571 
5572  write(char2,'(I3.3)')dealer
5573  write(char3,'(I3.3)')myid
5574  WRITE(ipt,*)"NC_READ_VAR Arguments:"
5575  call print_var(var)
5576  WRITE(ipt,*)"; DEALER="//char2//"; MYID="//char3//"; PAR_READ=",par_read
5577 
5578 
5579  IF(PRESENT(stkcnt)) THEN
5580  WRITE(ipt,*) "STKCNT=",stkcnt
5581  ELSE
5582  WRITE(ipt,*) "STKCNT= NONE"
5583  END IF
5584 
5585  IF(PRESENT(stkrng)) THEN
5586  WRITE(ipt,*) "STKRNG=",stkrng
5587  ELSE
5588  WRITE(ipt,*) "STKRNG= NONE"
5589  END IF
5590 
5591  IF(PRESENT(iostart)) THEN
5592  WRITE(ipt,*) "IOSTART=",iostart
5593  ELSE
5594  WRITE(ipt,*) "IOSTART= NONE"
5595  END IF
5596 
5597  IF(PRESENT(iocount)) THEN
5598  WRITE(ipt,*) "IOCOUNT=",iocount
5599  ELSE
5600  WRITE(ipt,*) "IOCOUNT= NONE"
5601  END IF
5602 
5603  IF(PRESENT(iostride)) THEN
5604  WRITE(ipt,*) "IOSTRIDE=",iostride
5605  ELSE
5606  WRITE(ipt,*) "IOSTRIDE= NONE"
5607  END IF
5608 
5609  END IF
5610 
5611  IF(var%NCID == -1 .and. dealer == myid) THEN
5612  CALL print_var(var)
5613  CALL fatal_error("NC_READ_VAR: CAN NOT READ FILE, IT IS NOT OPEN!")
5614  END IF
5615 
5616 
5617 
5618  IF ( PRESENT(stkcnt) ) THEN
5619 
5620  IF (PRESENT(stkrng) .or. PRESENT(iostart) .or. PRESENT(iocount) .or. PRESENT(iostride))THEN
5621  CALL print_var(var)
5622  CALL fatal_error("NC_READ_VAR: You can not pass both STKCNT and STKRNG/START/COUNT/STRIDE !",&
5623  &"Set STKCNT to read a time slice filling all other dimensions. OR",&
5624  &"Set IOSTART/IOCOUNT/(IOSTRIDE) to read a specific range.")
5625  END IF
5626 
5627  dim => find_unlimited(var,found)
5628  IF(.NOT.found) THEN
5629  CALL print_var(var)
5630  CALL fatal_error&
5631  &("NC_READ_VAR: CALLED WITH STKCNT ARGUMENT BUT VARIABLE IS NOT UNLIMITED?")
5632  END IF
5633  NULLIFY(dim)
5634 
5635 
5636  ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
5637 
5638 
5639  ! SET THE VARIABLES CURRENT STACK COUNT
5640  var%CURR_STKCNT = stkcnt
5641 
5642  ! SET THE NF90_PUT_VAR DIMENSIONS
5643  nstart=1 ! START AT ONE, EXCEPT FOR THE TIME VARIABLE
5644  nstart(dimcnt) = stkcnt
5645 
5646 
5647  dimlink => var%DIMS%NEXT
5648  DO i = 1,dimcnt ! GET THE OUTPUT VARIABLE DIMENSIONS
5649  dim => dimlink%DIM
5650  ncount(i)= dim%DIM
5651  dimlink => dimlink%NEXT
5652  END DO
5653  ncount(dimcnt)=1 ! SET THE TIME OUTPUT DIMENSION TO 1
5654 
5655  nstride=1 ! ALWAYS USE STRIDE 1 FOR STKCNT INPUT
5656 
5657  ! FOR TIME DEPENDANT DATA THE RANK OF THE ALLOCATED MEMORY IS
5658  ! ONE LESS THAN THE RANK OF THE FILE's VARIALBE!
5659  dimcnt = dimcnt -1
5660 
5661  ! THE DIMENSIONS READ WILL BE THE VALUES OF NCOUNT, NOT
5662  ! INCLUDING TIME
5663  IF(dimcnt > 0)THEN
5664  ALLOCATE(rdims(dimcnt))
5665  rdims(1:dimcnt)=ncount(1:dimcnt)
5666  ELSE IF (dimcnt == 0) THEN
5667  ALLOCATE(rdims(1))
5668  rdims(1)=ncount(1)
5669  ELSE
5670  nullify(rdims)
5671  END IF
5672 
5673  ELSEIF ( PRESENT(stkrng) ) THEN
5674 
5675  IF (PRESENT(stkcnt) .or. PRESENT(iostart) .or. PRESENT(iocount) .or. PRESENT(iostride))THEN
5676  CALL print_var(var)
5677  CALL fatal_error("NC_READ_VAR: You can not pass both STKRNG and STKCNT/START/COUNT/STRIDE !",&
5678  &"Set STKRNG to read a time range filling all other dimensions. OR",&
5679  &"Set IOSTART/IOCOUNT/(IOSTRIDE) to read a specific range.")
5680  END IF
5681 
5682  dim => find_unlimited(var,found)
5683  IF(.NOT.found) THEN
5684  CALL print_var(var)
5685  CALL fatal_error&
5686  &("NC_READ_VAR: CALLED WITH STKRNG ARGUMENT BUT VARIABLE IS NOT UNLIMITED?")
5687  END IF
5688  NULLIFY(dim)
5689 
5690 
5691  ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
5692 
5693 
5694  ! SET THE VARIABLES CURRENT STACK COUNT
5695  var%CURR_STKCNT = -1
5696 
5697  ! SET THE NF90_PUT_VAR DIMENSIONS
5698  nstart=1 ! START AT ONE, EXCEPT FOR THE TIME VARIABLE
5699  nstart(dimcnt) = stkrng(1)
5700 
5701 
5702  dimlink => var%DIMS%NEXT
5703  DO i = 1,dimcnt ! GET THE OUTPUT VARIABLE DIMENSIONS
5704  dim => dimlink%DIM
5705  ncount(i)= dim%DIM
5706  dimlink => dimlink%NEXT
5707  END DO
5708  ncount(dimcnt)=stkrng(2)-stkrng(1)+1 ! SET THE TIME RANGE
5709 
5710  nstride=1 ! ALWAYS USE STRIDE 1 FOR STKRNG INPUT
5711 
5712  ! FOR A TIME RANGE THE RANK OF THE ALLOCATED MEMORY IS
5713  ! THE SAME AS THE RANK OF THE FILE's VARIALBE!
5714 ! DIMCNT = DIMCNT
5715 
5716  ! THE DIMENSIONS READ WILL BE THE VALUES OF NCOUNT, NOT
5717  ! INCLUDING TIME
5718  rdims=>ncount
5719 
5720  ELSE IF( PRESENT(iostart) .and. PRESENT(iocount)) THEN
5721 
5722  nstart=>iostart
5723  ncount=>iocount
5724 
5725  IF(.not. PRESENT(iostride)) THEN
5726  ALLOCATE(nstride(dimcnt))
5727  nstride=1
5728  ELSE
5729  nstride=>iostride
5730  END IF
5731 
5732  IF(dimcnt /= size(nstart) .or. &
5733  & dimcnt /= size(ncount) .or. &
5734  & dimcnt /= size(nstride) ) THEN
5735  CALL print_var(var)
5736  CALL fatal_error&
5737  & ("NC_READ_VAR: Variable's # of file dimensions does not matach size(NSTART/NCOUNT/NSTRIDE) arugments?")
5738  END IF
5739 
5740  ! SET THE VARIABLES CURRENT STACK COUNT: not defined for this
5741  ! kind of read/write
5742  var%CURR_STKCNT = -1
5743 
5744  ! ONLY COUNT THE NONE SINGLETON DIMENSIONS OF A VARIABLE.
5745  cnt = 0
5746  DO i = 1,dimcnt
5747  IF(ncount(i)>1) cnt=cnt+1
5748  END DO
5749 
5750  ! NOW RECORD THE DIMENSIONS OF THE DATA THAT WILL BE READ INTO MEMORY
5751  IF (cnt > 0) THEN
5752 
5753  ALLOCATE(rdims(cnt))
5754  cnt = 0
5755  DO i = 1,dimcnt
5756  IF(ncount(i)>1) THEN
5757  cnt=cnt+1
5758  rdims(cnt)=ncount(i)
5759  END IF
5760  END DO
5761 
5762  ELSE
5763  ALLOCATE(rdims(1))
5764  rdims(1) = 1
5765  END IF
5766 
5767 
5768  ! NOW SET THE DIMENSION OF THE DATA VARIABLE IN MEMORY
5769  dimcnt=cnt
5770 
5771  ELSE IF( .not. (PRESENT(iostart) .or. PRESENT(iocount) .or.&
5772  & PRESENT(stkcnt) .or. PRESENT(iostride))) THEN
5773 
5774  ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
5775 
5776  ! SET THE VARIABLES CURRENT STACK COUNT
5777  var%CURR_STKCNT = -1
5778 
5779  ! SET THE NF90_PUT_VAR DIMENSIONS
5780  nstart=1 ! START AT ONE, EXCEPT FOR THE TIME VARIABLE
5781 
5782  dimlink => var%DIMS%NEXT
5783  DO i = 1,dimcnt ! GET THE OUTPUT VARIABLE DIMENSIONS
5784  dim => dimlink%DIM
5785  ncount(i)= dim%DIM
5786  dimlink => dimlink%NEXT
5787  END DO
5788 
5789  nstride=1 ! ALWAYS USE STRIDE 1 IF NO ARGUMENTS ARE PASSED
5790 
5791  ! ONLY COUNT THE NONE SINGLETON DIMENSIONS OF A VARIABLE.
5792  cnt = 0
5793  DO i = 1,dimcnt
5794  IF(ncount(i)>1) cnt=cnt+1
5795  END DO
5796 
5797  ! NOW RECORD THE DIMENSIONS OF THE DATA THAT WILL BE READ INTO MEMORY
5798  IF (cnt > 0) THEN
5799 
5800  ALLOCATE(rdims(cnt))
5801  cnt = 0
5802  DO i = 1,dimcnt
5803  IF(ncount(i)>1) THEN
5804  cnt=cnt+1
5805  rdims(cnt)=ncount(i)
5806  END IF
5807  END DO
5808 
5809  ELSE
5810  ALLOCATE(rdims(1))
5811  rdims(1) = 1
5812  END IF
5813 
5814 
5815  ! NOW SET THE DIMENSION OF THE DATA VARIABLE IN MEMORY
5816  dimcnt=cnt
5817 
5818  ELSE
5819 
5820  IF(dbg_set(dbg_log)) THEN
5821  write(ipt,*) "# IOSTART ::",PRESENT(iostart)
5822  write(ipt,*) "# IOCOUNT ::",PRESENT(iocount)
5823  write(ipt,*) "# IOSTRIDE ::",PRESENT(iostride)
5824  write(ipt,*) "# STKCNT ::",PRESENT(stkcnt)
5825  write(ipt,*) "# STKRNG ::",PRESENT(stkrng)
5826  END IF
5827 
5828  CALL fatal_error("NC_READ_VAR: YOU SPECIFIED AN ILLEGAL COMBINATION OF AGUMENTS?",&
5829  & "Valid choices are STKCNT or STKRNG or NSTART,NCOUNT,(NSTRIDE) or none")
5830  END IF
5831 
5832  IF(dbg_set(dbg_sbrio)) THEN
5833  write(ipt,*) "FILE DIMENSION COUNT IS ::", count_dim_list(var)
5834  write(ipt,*) "MEMORY DIMENSION COUNT IS ::",dimcnt
5835  END IF
5836 
5837 
5838 
5839  !DETERMIN WHICH CASE WE ARE WRITING DATA FOR
5840  code = -1
5841 
5842  select case(var%XTYPE)
5843  case(nf90_byte)
5844  call fatal_error("NC_READ_VAR: NOT SET UP TO WRITE BYTE DATA")
5845  case(nf90_short)
5846  call fatal_error("NC_READ_VAR: NOT SET UP TO WRITE SHORT DATA")
5847  case(nf90_int)
5848  if (dimcnt == 0) code = case_scl_int
5849  if (dimcnt == 1) code = case_vec_int
5850  if (dimcnt == 2) code = case_arr_int
5851  if (dimcnt == 3) code = case_cub_int
5852  if (dimcnt == 4) code = case_fda_int
5853  case(nf90_float)
5854 !--Single Precision Coding------------------------------------------------------!
5855  ! READ SINGLE VARIABLES INTO SINGLE MEMORY POINTERS
5856  if (dimcnt == 0) code = case_scl_flt
5857  if (dimcnt == 1) code = case_vec_flt
5858  if (dimcnt == 2) code = case_arr_flt
5859  if (dimcnt == 3) code = case_cub_flt
5860  if (dimcnt == 4) code = case_fda_flt
5861 
5862  case(nf90_double)
5863  ! ALWAYS READ DOUBLE VARIABLES INTO DOUBLE MEMORY POINTERS
5864  if (dimcnt == 0) code = case_scl_dbl
5865  if (dimcnt == 1) code = case_vec_dbl
5866  if (dimcnt == 2) code = case_arr_dbl
5867  if (dimcnt == 3) code = case_cub_dbl
5868  if (dimcnt == 4) code = case_fda_dbl
5869  case(nf90_char)
5870 
5871  IF(ncount(1) == 1) THEN
5872  WRITE(ipt,*) "SINGLETON CHARACTER DATA!"
5873  IF(.not. ASSOCIATED(rdims,ncount)) THEN
5874  DEALLOCATE(rdims)
5875  ELSE
5876  NULLIFY(rdims)
5877  END IF
5878 
5879  dimcnt = dimcnt+1
5880 
5881  ALLOCATE(rdims(dimcnt))
5882  cnt = 1
5883  rdims(1) = ncount(1)
5884  DO i = 2,size(ncount)
5885  IF(ncount(i)>1) THEN
5886  cnt=cnt+1
5887  rdims(cnt)=ncount(i)
5888  END IF
5889  END DO
5890  END IF
5891 
5892 
5893  if (dimcnt == 1) code = case_scl_chr
5894  if (dimcnt == 2) code = case_vec_chr
5895  ! First dim is length of string
5896  ! Second dim is time
5897  case default
5898  call fatal_error("NC_READ_VAR: Unkown data type?")
5899  end select
5900 
5901  ! BASED ON CODE WRITE THE DATA
5902  errmsg="NC_READ_VAR: VARIABLE: "//var%varname//"; Can not be read by nf90_get_var!"
5903 
5904  SELECT CASE(code)
5905 !********************************************************************
5906 ! ===== SCALAR FLOATING POINT DATA
5907 !********************************************************************
5908  CASE(case_scl_flt)
5909 
5910  IF(.NOT. ASSOCIATED(var%SCL_FLT))THEN
5911 
5912  IF(ASSOCIATED(var%VEC_FLT))THEN
5913  IF(size(var%VEC_FLT)==1) var%SCL_FLT=>var%VEC_FLT(1)
5914  ELSE IF(ASSOCIATED(var%ARR_FLT))THEN
5915  IF(size(var%ARR_FLT)==1) var%SCL_FLT=>var%ARR_FLT(1,1)
5916  ELSE IF(ASSOCIATED(var%CUB_FLT))THEN
5917  IF(size(var%CUB_FLT)==1) var%SCL_FLT=>var%CUB_FLT(1,1,1)
5918  ELSE IF(ASSOCIATED(var%FDA_FLT))THEN
5919  IF(size(var%FDA_FLT)==1) var%SCL_FLT=>var%FDA_FLT(1,1,1,1)
5920  ELSE
5921  CALL print_var(var)
5922  CALL fatal_error("NC_READ_VAR: Variable objects SCL_FLT data is NOT assocaited!")
5923  END IF
5924 
5925  END IF
5926 
5927  IF (ser_read .OR. dealer .EQ. myid) THEN
5928 
5929 
5930  IF (SIZE(nstart) .GT. 0) THEN
5931 
5932  if (product(ncount) .NE. 1) CALL fatal_error&
5933  & ("NC_READ_VAR: NCOUNT dimension invalid while reading scl_flt?")
5934 
5935  allocate(gvec_flt(1))
5936  status = nf90_get_var(var%NCID,var%VARID,gvec_flt,nstart,ncount,nstride)
5937  CALL handle_ncerr(status,trim(errmsg))
5938 
5939  var%SCL_FLT = gvec_flt(1)
5940  deallocate(gvec_flt)
5941  ELSE
5942 
5943  status = nf90_get_var(var%NCID,var%VARID,var%SCL_FLT)
5944  CALL handle_ncerr(status,trim(errmsg))
5945 
5946  END IF
5947  END IF
5948 
5949  IF (par_read) THEN
5950  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
5951 
5952  END IF
5953 
5954  nullify(gvec_flt)
5955 
5956 !********************************************************************
5957 ! ===== VECTOR FLOATING POINT DATA
5958 !********************************************************************
5959  CASE(case_vec_flt)
5960 
5961  IF(.NOT. ASSOCIATED(var%VEC_FLT))THEN
5962 
5963  IF(ASSOCIATED(var%ARR_FLT))THEN
5964  IF(size(var%ARR_FLT,1)==1) var%VEC_FLT=>var%ARR_FLT(1,1:)
5965  IF(size(var%ARR_FLT,2)==1) var%VEC_FLT=>var%ARR_FLT(1:,1)
5966  ELSE IF(ASSOCIATED(var%CUB_FLT))THEN
5967  IF(size(var%CUB_FLT,1)==1) THEN
5968  IF(size(var%CUB_FLT,2)==1) var%VEC_FLT=>var%CUB_FLT(1,1,1:)
5969  IF(size(var%CUB_FLT,3)==1) var%VEC_FLT=>var%CUB_FLT(1,1:,1)
5970  END IF
5971  IF(size(var%CUB_FLT,1)==2) THEN
5972  IF(size(var%CUB_FLT,3)==1) var%VEC_FLT=>var%CUB_FLT(1:,1,1)
5973  END IF
5974  ELSE
5975 
5976  CALL print_var(var)
5977  CALL fatal_error("NC_READ_VAR: Variable objects VEC_FLT data is NOT assocaited!")
5978  END IF
5979  END IF
5980 
5981 
5982  IF (ser_read) THEN
5983 
5984  IF (ubound(var%VEC_FLT,1) .NE. rdims(1)) CALL fatal_error &
5985  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
5986  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
5987  & "varname: "//trim(var%VARNAME))
5988 
5989  gvec_flt => var%VEC_FLT(1:rdims(1))
5990 
5991  status = nf90_get_var(var%NCID,var%VARID,gvec_flt,nstart,ncount,nstride)
5992  CALL handle_ncerr(status,trim(errmsg))
5993 
5994  ELSE ! PAR CASE
5995 
5996  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
5997  END IF
5998 
5999  nullify(gvec_flt)
6000  nullify(lvec_flt)
6001 
6002 !********************************************************************
6003 ! ===== ARRAY FLOATING POINT DATA
6004 !********************************************************************
6005  CASE(case_arr_flt)
6006 
6007  IF(.NOT. ASSOCIATED(var%ARR_FLT))THEN
6008 
6009  IF(ASSOCIATED(var%CUB_FLT))THEN
6010  IF(size(var%CUB_FLT,1)==1) var%ARR_FLT=>var%CUB_FLT(1,1:,1:)
6011  IF(size(var%CUB_FLT,2)==1) var%ARR_FLT=>var%CUB_FLT(1:,1,1:)
6012  IF(size(var%CUB_FLT,3)==1) var%ARR_FLT=>var%CUB_FLT(1:,1:,1)
6013  ELSE
6014 
6015  CALL print_var(var)
6016  CALL fatal_error("NC_READ_VAR: Variable objects ARR_FLT data is NOT assocaited!")
6017  END IF
6018  END IF
6019 
6020 
6021  IF (ser_read) THEN
6022 
6023  IF (ubound(var%ARR_FLT,1) .NE. rdims(1)) CALL fatal_error &
6024  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6025  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6026  & "varname: "//trim(var%VARNAME),&
6027  & "DIM1 does not match!")
6028 
6029 
6030  IF (ubound(var%ARR_FLT,2) .LT. rdims(2)) CALL fatal_error &
6031  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6032  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6033  & "varname: "//trim(var%VARNAME),&
6034  & "DIM2 does not match!")
6035 
6036  garr_flt => var%ARR_FLT(1:rdims(1),1:rdims(2))
6037 
6038 
6039  status = nf90_get_var(var%NCID,var%VARID,garr_flt,nstart,ncount,nstride)
6040  CALL handle_ncerr(status,trim(errmsg))
6041 
6042 
6043  ELSE ! PAR CASE
6044 
6045  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6046  END IF
6047 
6048  nullify(garr_flt)
6049  nullify(larr_flt)
6050 
6051 !********************************************************************
6052 ! ===== CUBE FLOATING POINT DATA
6053 !********************************************************************
6054  CASE(case_cub_flt)
6055 
6056  IF(.NOT. ASSOCIATED(var%CUB_FLT))THEN
6057  CALL print_var(var)
6058  CALL fatal_error("NC_READ_VAR: Variable objects CUB_FLT data is NOT assocaited!")
6059  END IF
6060 
6061 
6062  IF (ser_read) THEN
6063 
6064  IF (ubound(var%CUB_FLT,1) .NE. rdims(1)) CALL fatal_error &
6065  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6066  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6067  & "varname: "//trim(var%VARNAME),&
6068  & "DIM1 does not match!")
6069 
6070  IF (ubound(var%CUB_FLT,2) .LT. rdims(2)) CALL fatal_error &
6071  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6072  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6073  & "varname: "//trim(var%VARNAME),&
6074  & "DIM2 does not match!")
6075 
6076  IF (ubound(var%CUB_FLT,3) .LT. rdims(3)) CALL fatal_error &
6077  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6078  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6079  & "varname: "//trim(var%VARNAME),&
6080  & "DIM3 does not match!")
6081 
6082  gcub_flt => var%CUB_FLT(1:rdims(1),1:rdims(2),1:rdims(3))
6083 
6084 
6085  status = nf90_get_var(var%NCID,var%VARID,gcub_flt,nstart,ncount,nstride)
6086  CALL handle_ncerr(status,trim(errmsg))
6087 
6088 
6089  ELSE ! PAR CASE
6090 
6091  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6092  END IF
6093 
6094  nullify(gcub_flt)
6095  nullify(lcub_flt)
6096 
6097 !********************************************************************
6098 ! ===== FOUR DIMENSION ARRAY FLOATING POINT DATA
6099 !********************************************************************
6100  CASE(case_fda_flt)
6101 
6102  IF(.NOT. ASSOCIATED(var%FDA_FLT))THEN
6103  CALL print_var(var)
6104  CALL fatal_error("NC_READ_VAR: Variable objects FDA_FLT data is NOT assocaited!")
6105  END IF
6106 
6107 
6108  IF (ser_read) THEN
6109 
6110  IF (ubound(var%FDA_FLT,1) .NE. rdims(1)) CALL fatal_error &
6111  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6112  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6113  & "varname: "//trim(var%VARNAME),&
6114  & "DIM1 does not match!")
6115 
6116  IF (ubound(var%FDA_FLT,2) .LT. rdims(2)) CALL fatal_error &
6117  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6118  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6119  & "varname: "//trim(var%VARNAME),&
6120  & "DIM2 does not match!")
6121 
6122  IF (ubound(var%FDA_FLT,3) .LT. rdims(3)) CALL fatal_error &
6123  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6124  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6125  & "varname: "//trim(var%VARNAME),&
6126  & "DIM3 does not match!")
6127 
6128  IF (ubound(var%FDA_FLT,4) .LT. rdims(4)) CALL fatal_error &
6129  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6130  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6131  & "varname: "//trim(var%VARNAME),&
6132  & "DIM4 does not match!")
6133 
6134  gfda_flt => var%FDA_FLT(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
6135 
6136 
6137  status = nf90_get_var(var%NCID,var%VARID,gfda_flt,nstart,ncount,nstride)
6138  CALL handle_ncerr(status,trim(errmsg))
6139 
6140 
6141  ELSE ! PAR CASE
6142 
6143  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6144  END IF
6145 
6146  nullify(gfda_flt)
6147  nullify(lfda_flt)
6148 
6149 !********************************************************************
6150 ! ===== SCALAR DOUBLE DATA
6151 !********************************************************************
6152  CASE(case_scl_dbl)
6153 
6154  IF(.NOT. ASSOCIATED(var%SCL_DBL))THEN
6155 
6156  IF(ASSOCIATED(var%VEC_DBL))THEN
6157  IF(size(var%VEC_DBL)==1) var%SCL_DBL=>var%VEC_DBL(1)
6158  ELSE IF(ASSOCIATED(var%ARR_DBL))THEN
6159  IF(size(var%ARR_DBL)==1) var%SCL_DBL=>var%ARR_DBL(1,1)
6160  ELSE IF(ASSOCIATED(var%CUB_DBL))THEN
6161  IF(size(var%CUB_DBL)==1) var%SCL_DBL=>var%CUB_DBL(1,1,1)
6162  ELSE
6163 
6164  CALL print_var(var)
6165  CALL fatal_error("NC_READ_VAR: Variable objects SCL_DBL data is NOT assocaited!")
6166  END IF
6167 
6168  END IF
6169 
6170  IF (ser_read .OR. dealer .EQ. myid) THEN
6171 
6172 
6173  IF (SIZE(nstart).GT.0) THEN
6174 
6175  if (product(ncount) .NE. 1) CALL fatal_error&
6176  & ("NC_READ_VAR: NCOUNT dimension size invalid while reading scl_dbl?")
6177 
6178  allocate(gvec_dbl(1))
6179  !gvec_flt = VAR%SCL_FLT ! Was this here for a reason?
6180  status = nf90_get_var(var%NCID,var%VARID,gvec_dbl,nstart,ncount,nstride)
6181  CALL handle_ncerr(status,trim(errmsg))
6182 
6183  var%SCL_DBL = gvec_dbl(1)
6184  deallocate(gvec_dbl)
6185 
6186  ELSE
6187 
6188  status = nf90_get_var(var%NCID,var%VARID,var%SCL_DBL)
6189  CALL handle_ncerr(status,trim(errmsg))
6190 
6191  END IF
6192  END IF
6193 
6194  IF (par_read) THEN
6195  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6196 
6197  END IF
6198 
6199  nullify(gvec_dbl)
6200 
6201 !********************************************************************
6202 ! ===== VECTOR DOUBLE DATA
6203 !********************************************************************
6204  CASE(case_vec_dbl)
6205 
6206  IF(.NOT. ASSOCIATED(var%VEC_DBL))THEN
6207 
6208  IF(ASSOCIATED(var%ARR_DBL))THEN
6209  IF(size(var%ARR_DBL,1)==1) var%VEC_DBL=>var%ARR_DBL(1,1:)
6210  IF(size(var%ARR_DBL,2)==1) var%VEC_DBL=>var%ARR_DBL(1:,1)
6211  ELSE IF(ASSOCIATED(var%CUB_DBL))THEN
6212  IF(size(var%CUB_DBL,1)==1) THEN
6213  IF(size(var%CUB_DBL,2)==1) var%VEC_DBL=>var%CUB_DBL(1,1,1:)
6214  IF(size(var%CUB_DBL,3)==1) var%VEC_DBL=>var%CUB_DBL(1,1:,1)
6215  END IF
6216  IF(size(var%CUB_DBL,1)==2) THEN
6217  IF(size(var%CUB_DBL,3)==1) var%VEC_DBL=>var%CUB_DBL(1:,1,1)
6218  END IF
6219  ELSE
6220 
6221  CALL print_var(var)
6222  CALL fatal_error("NC_READ_VAR: Variable objects VEC_DBL data is NOT assocaited!")
6223  END IF
6224  END IF
6225 
6226  IF (ser_read) THEN
6227 
6228  IF (ubound(var%VEC_DBL,1) .NE. rdims(1)) CALL fatal_error &
6229  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6230  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6231  & "varname: "//trim(var%VARNAME))
6232 
6233  gvec_dbl => var%VEC_DBL(1:rdims(1))
6234 
6235  status = nf90_get_var(var%NCID,var%VARID,gvec_dbl,nstart,ncount,nstride)
6236  CALL handle_ncerr(status,trim(errmsg))
6237 
6238  ELSE ! PAR CASE
6239 
6240  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6241  END IF
6242 
6243  nullify(gvec_dbl)
6244  nullify(lvec_dbl)
6245 
6246 
6247 !********************************************************************
6248 ! ===== ARRAY DOUBLE DATA
6249 !********************************************************************
6250  CASE(case_arr_dbl)
6251 
6252  IF(.NOT. ASSOCIATED(var%ARR_DBL))THEN
6253 
6254  IF(ASSOCIATED(var%CUB_DBL))THEN
6255  IF(size(var%CUB_DBL,1)==1) var%ARR_DBL=>var%CUB_DBL(1,1:,1:)
6256  IF(size(var%CUB_DBL,2)==1) var%ARR_DBL=>var%CUB_DBL(1:,1,1:)
6257  IF(size(var%CUB_DBL,3)==1) var%ARR_DBL=>var%CUB_DBL(1:,1:,1)
6258  ELSE
6259 
6260  CALL print_var(var)
6261  CALL fatal_error("NC_READ_VAR: Variable objects ARR_DBL data is NOT assocaited!")
6262  END IF
6263  END IF
6264 
6265  IF (ser_read) THEN
6266 
6267  IF (ubound(var%ARR_DBL,1) .NE. rdims(1)) CALL fatal_error &
6268  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6269  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6270  & "varname: "//trim(var%VARNAME),&
6271  & "DIM1 does not match!")
6272 
6273  IF (ubound(var%ARR_DBL,2) .LT. rdims(2)) CALL fatal_error &
6274  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6275  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6276  & "varname: "//trim(var%VARNAME),&
6277  & "DIM2 does not match!")
6278 
6279  garr_dbl => var%ARR_DBL(1:rdims(1),1:rdims(2))
6280 
6281  status = nf90_get_var(var%NCID,var%VARID,garr_dbl,nstart,ncount,nstride)
6282  CALL handle_ncerr(status,trim(errmsg))
6283 
6284  ELSE ! PAR CASE
6285 
6286  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6287  END IF
6288 
6289  NULLIFY(garr_dbl)
6290  NULLIFY(larr_dbl)
6291 
6292 
6293 !********************************************************************
6294 ! ===== CUBE DOUBLE DATA
6295 !********************************************************************
6296  CASE(case_cub_dbl)
6297 
6298  IF(.NOT. ASSOCIATED(var%CUB_DBL))THEN
6299  CALL print_var(var)
6300  CALL fatal_error("NC_READ_VAR: Variable objects CUB_DBL data is NOT assocaited!")
6301  END IF
6302 
6303  IF (ser_read) THEN
6304 
6305  IF (ubound(var%CUB_DBL,1) .NE. rdims(1)) CALL fatal_error &
6306  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6307  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6308  & "varname: "//trim(var%VARNAME),&
6309  & "DIM1 does not match!")
6310 
6311  IF (ubound(var%CUB_DBL,2) .LT. rdims(2)) CALL fatal_error &
6312  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6313  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6314  & "varname: "//trim(var%VARNAME),&
6315  & "DIM2 does not match!")
6316 
6317  IF (ubound(var%CUB_DBL,3) .LT. rdims(3)) CALL fatal_error &
6318  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6319  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6320  & "varname: "//trim(var%VARNAME),&
6321  & "DIM3 does not match!")
6322 
6323  gcub_dbl => var%CUB_DBL(1:rdims(1),1:rdims(2),1:rdims(3))
6324 
6325  status = nf90_get_var(var%NCID,var%VARID,gcub_dbl,nstart,ncount,nstride)
6326  CALL handle_ncerr(status,trim(errmsg))
6327 
6328  ELSE ! PAR CASE
6329 
6330  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6331  END IF
6332 
6333  nullify(gcub_dbl)
6334  nullify(lcub_dbl)
6335 
6336 !********************************************************************
6337 ! ===== FOUR DIMENSION ARRAY DOUBLE DATA
6338 !********************************************************************
6339  CASE(case_fda_dbl)
6340 
6341  IF(.NOT. ASSOCIATED(var%FDA_DBL))THEN
6342  CALL print_var(var)
6343  CALL fatal_error("NC_READ_VAR: Variable objects FDA_DBL data is NOT assocaited!")
6344  END IF
6345 
6346  IF (ser_read) THEN
6347 
6348  IF (ubound(var%FDA_DBL,1) .NE. rdims(1)) CALL fatal_error &
6349  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6350  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6351  & "varname: "//trim(var%VARNAME),&
6352  & "DIM1 does not match!")
6353 
6354  IF (ubound(var%FDA_DBL,2) .LT. rdims(2)) CALL fatal_error &
6355  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6356  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6357  & "varname: "//trim(var%VARNAME),&
6358  & "DIM2 does not match!")
6359 
6360  IF (ubound(var%FDA_DBL,3) .LT. rdims(3)) CALL fatal_error &
6361  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6362  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6363  & "varname: "//trim(var%VARNAME),&
6364  & "DIM3 does not match!")
6365 
6366  IF (ubound(var%FDA_DBL,4) .LT. rdims(4)) CALL fatal_error &
6367  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6368  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6369  & "varname: "//trim(var%VARNAME),&
6370  & "DIM4 does not match!")
6371 
6372  gfda_dbl => var%FDA_DBL(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
6373 
6374  status = nf90_get_var(var%NCID,var%VARID,gfda_dbl,nstart,ncount,nstride)
6375  CALL handle_ncerr(status,trim(errmsg))
6376 
6377  ELSE ! PAR CASE
6378 
6379  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6380  END IF
6381 
6382  nullify(gfda_dbl)
6383  nullify(lfda_dbl)
6384 
6385 !********************************************************************
6386 ! ===== SCALAR INTEGER DATA
6387 !********************************************************************
6388  CASE(case_scl_int)
6389 
6390  IF(.NOT. ASSOCIATED(var%SCL_INT))THEN
6391 
6392  IF(ASSOCIATED(var%VEC_INT))THEN
6393  IF(size(var%VEC_INT)==1) var%SCL_INT=>var%VEC_INT(1)
6394  ELSE IF(ASSOCIATED(var%ARR_INT))THEN
6395  IF(size(var%ARR_INT)==1) var%SCL_INT=>var%ARR_INT(1,1)
6396  ELSE IF(ASSOCIATED(var%CUB_INT))THEN
6397  IF(size(var%CUB_INT)==1) var%SCL_INT=>var%CUB_INT(1,1,1)
6398  ELSE
6399 
6400  CALL print_var(var)
6401  CALL fatal_error("NC_READ_VAR: Variable objects SCL_INT data is NOT assocaited!")
6402  END IF
6403  END IF
6404 
6405  IF (ser_read .OR. dealer .EQ. myid) THEN
6406 
6407 
6408  IF (SIZE(nstart).GT.0) THEN
6409 
6410  if (product(ncount) .NE. 1) CALL fatal_error&
6411  & ("NC_READ_VAR: NCOUNT dimension invalid while reading scl_int?")
6412 
6413  allocate(gvec_int(1))
6414  gvec_int = var%SCL_INT
6415  status = nf90_get_var(var%NCID,var%VARID,gvec_int,nstart,ncount,nstride)
6416  CALL handle_ncerr(status,trim(errmsg))
6417 
6418  var%SCL_INT = gvec_int(1)
6419  deallocate(gvec_int)
6420 
6421  ELSE
6422  status = nf90_get_var(var%NCID,var%VARID,var%SCL_INT)
6423  CALL handle_ncerr(status,trim(errmsg))
6424 
6425  END IF
6426  END IF
6427 
6428  IF (par_read) THEN
6429  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6430 
6431  END IF
6432  nullify(gvec_int)
6433 
6434 !********************************************************************
6435 ! ===== VECTOR INTEGER DATA
6436 !********************************************************************
6437  CASE(case_vec_int)
6438 
6439  IF(.NOT. ASSOCIATED(var%VEC_INT))THEN
6440 
6441  IF(ASSOCIATED(var%ARR_INT))THEN
6442  IF(size(var%ARR_INT,1)==1) var%VEC_INT=>var%ARR_INT(1,1:)
6443  IF(size(var%ARR_INT,2)==1) var%VEC_INT=>var%ARR_INT(1:,1)
6444  ELSE IF(ASSOCIATED(var%CUB_INT))THEN
6445  IF(size(var%CUB_INT,1)==1) THEN
6446  IF(size(var%CUB_INT,2)==1) var%VEC_INT=>var%CUB_INT(1,1,1:)
6447  IF(size(var%CUB_INT,3)==1) var%VEC_INT=>var%CUB_INT(1,1:,1)
6448  END IF
6449  IF(size(var%CUB_INT,1)==2) THEN
6450  IF(size(var%CUB_INT,3)==1) var%VEC_INT=>var%CUB_INT(1:,1,1)
6451  END IF
6452  ELSE
6453 
6454  CALL print_var(var)
6455  CALL fatal_error("NC_READ_VAR: Variable objects VEC_INT data is NOT assocaited!")
6456  END IF
6457  END IF
6458 
6459  IF (ser_read) THEN
6460 
6461  IF (ubound(var%VEC_INT,1) .NE. rdims(1)) CALL fatal_error &
6462  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6463  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6464  & "varname: "//trim(var%VARNAME))
6465 
6466  gvec_int => var%VEC_INT(1:rdims(1))
6467 
6468  status = nf90_get_var(var%NCID,var%VARID,gvec_int,nstart,ncount,nstride)
6469  CALL handle_ncerr(status,trim(errmsg))
6470 
6471  ELSE ! PAR CASE
6472 
6473  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6474  END IF
6475 
6476  nullify(lvec_int)
6477  nullify(gvec_int)
6478 !********************************************************************
6479 ! ===== ARRAY INTEGER DATA
6480 !********************************************************************
6481  CASE(case_arr_int)
6482 
6483  IF(.NOT. ASSOCIATED(var%ARR_INT))THEN
6484 
6485  IF(ASSOCIATED(var%CUB_INT))THEN
6486  IF(size(var%CUB_INT,1)==1) var%ARR_INT=>var%CUB_INT(1,1:,1:)
6487  IF(size(var%CUB_INT,2)==1) var%ARR_INT=>var%CUB_INT(1:,1,1:)
6488  IF(size(var%CUB_INT,3)==1) var%ARR_INT=>var%CUB_INT(1:,1:,1)
6489  ELSE
6490 
6491  CALL print_var(var)
6492  CALL fatal_error("NC_READ_VAR: Variable objects ARR_INT data is NOT assocaited!")
6493  END IF
6494  END IF
6495 
6496  IF (ser_read) THEN
6497 
6498  IF (ubound(var%ARR_INT,1) .NE. rdims(1)) CALL fatal_error &
6499  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6500  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6501  & "varname: "//trim(var%VARNAME),&
6502  & "DIM1 does not match!")
6503 
6504  IF (ubound(var%ARR_INT,2) .LT. rdims(2)) CALL fatal_error &
6505  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6506  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6507  & "varname: "//trim(var%VARNAME),&
6508  & "DIM2 does not match!")
6509 
6510  garr_int => var%ARR_INT(1:rdims(1),1:rdims(2))
6511 
6512  status = nf90_get_var(var%NCID,var%VARID,garr_int,nstart,ncount,nstride)
6513  CALL handle_ncerr(status,trim(errmsg))
6514 
6515  ELSE ! PAR CASE
6516 
6517  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6518  END IF
6519 
6520  nullify(larr_int)
6521  nullify(garr_int)
6522 
6523 !********************************************************************
6524 ! ===== CUBE INTEGER DATA
6525 !********************************************************************
6526  CASE(case_cub_int)
6527 
6528  IF(.NOT. ASSOCIATED(var%CUB_INT))THEN
6529  CALL print_var(var)
6530  CALL fatal_error("NC_READ_VAR: Variable objects CUB_INT data is NOT assocaited!")
6531  END IF
6532 
6533  IF (ser_read) THEN
6534 
6535  IF (ubound(var%CUB_INT,1) .NE. rdims(1)) CALL fatal_error &
6536  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6537  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6538  & "varname: "//trim(var%VARNAME),&
6539  & "DIM1 does not match!")
6540 
6541  IF (ubound(var%CUB_INT,2) .LT. rdims(2)) CALL fatal_error &
6542  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6543  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6544  & "varname: "//trim(var%VARNAME),&
6545  & "DIM2 does not match!")
6546 
6547  IF (ubound(var%CUB_INT,3) .LT. rdims(3)) CALL fatal_error &
6548  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6549  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6550  & "varname: "//trim(var%VARNAME),&
6551  & "DIM3 does not match!")
6552 
6553  gcub_int => var%CUB_INT(1:rdims(1),1:rdims(2),1:rdims(3))
6554 
6555  status = nf90_get_var(var%NCID,var%VARID,gcub_int,nstart,ncount,nstride)
6556  CALL handle_ncerr(status,trim(errmsg))
6557 
6558  ELSE ! PAR CASE
6559 
6560  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6561  END IF
6562 
6563  nullify(lcub_int)
6564  nullify(gcub_int)
6565 
6566 !********************************************************************
6567 ! ===== FOUR DIMENSION ARRAY INTEGER DATA
6568 !********************************************************************
6569  CASE(case_fda_int)
6570 
6571  IF(.NOT. ASSOCIATED(var%FDA_INT))THEN
6572  CALL print_var(var)
6573  CALL fatal_error("NC_READ_VAR: Variable objects FDA_INT data is NOT assocaited!")
6574  END IF
6575 
6576  IF (ser_read) THEN
6577 
6578  IF (ubound(var%FDA_INT,1) .NE. rdims(1)) CALL fatal_error &
6579  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6580  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6581  & "varname: "//trim(var%VARNAME),&
6582  & "DIM1 does not match!")
6583 
6584  IF (ubound(var%FDA_INT,2) .LT. rdims(2)) CALL fatal_error &
6585  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6586  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6587  & "varname: "//trim(var%VARNAME),&
6588  & "DIM2 does not match!")
6589 
6590  IF (ubound(var%FDA_INT,3) .LT. rdims(3)) CALL fatal_error &
6591  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6592  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6593  & "varname: "//trim(var%VARNAME),&
6594  & "DIM3 does not match!")
6595 
6596  IF (ubound(var%FDA_INT,4) .LT. rdims(4)) CALL fatal_error &
6597  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6598  & THE DIMENSIONS OF THE FILE DATA IN SERIAL CASE",&
6599  & "varname: "//trim(var%VARNAME),&
6600  & "DIM4 does not match!")
6601 
6602  gfda_int => var%FDA_INT(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
6603 
6604  status = nf90_get_var(var%NCID,var%VARID,gfda_int,nstart,ncount,nstride)
6605  CALL handle_ncerr(status,trim(errmsg))
6606 
6607  ELSE ! PAR CASE
6608 
6609  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6610  END IF
6611 
6612  nullify(lfda_int)
6613  nullify(gfda_int)
6614 
6615 !********************************************************************
6616 ! ===== SCALAR STRING DATA
6617 !********************************************************************
6618  CASE(case_scl_chr)
6619 
6620  IF(.NOT. ASSOCIATED(var%scl_chr))THEN
6621 
6622  IF (ASSOCIATED(var%vec_chr))THEN
6623  IF(SIZE(var%vec_chr)==1) var%scl_chr => var%vec_chr(1)
6624  ELSE
6625  CALL print_var(var)
6626  CALL fatal_error("NC_READ_VAR: Variable objects scl_chr&
6627  & data is NOT assocaited!")
6628  END IF
6629 
6630  END IF
6631 
6632 
6633  IF (ser_read .OR. dealer .EQ. myid) THEN
6634 
6635  IF (len(var%SCL_CHR) .LT. rdims(1)) CALL fatal_error &
6636  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6637  & THE DIMENSIONS OF THE FILE CHARACTER DATA",&
6638  & "varname: "//trim(var%VARNAME))
6639 
6640  var%scl_chr = achar(0) ! INITIALIZE with null char
6641 ! scl_chr => var%scl_chr(1:RDIMS(1))
6642  scl_chr => var%scl_chr
6643 
6644 ! NOTE: TO PRINT POINTER CHARACTER YOU MUST USE TRIM(chr) OR chr(:) !
6645 ! scl_chr = "testing"
6646 ! write(ipt,*) "a test: '"//scl_chr(:)//"'"
6647 
6648  status = nf90_get_var(var%NCID,var%VARID,scl_chr,nstart,ncount,nstride)
6649  CALL handle_ncerr(status,trim(errmsg))
6650 
6651  nlen = index(scl_chr,achar(0))
6652  ! If no null byte is found use the whole string
6653  if (nlen == 0) then
6654  nlen = rdims(1)
6655  else
6656  nlen = nlen -1
6657  scl_chr = scl_chr(1:nlen)
6658  end if
6659 
6660  END IF
6661 
6662  IF(par_read) THEN
6663  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6664  END IF
6665  nullify(scl_chr)
6666 
6667 !********************************************************************
6668 ! ===== VECTOR STRING DATA
6669 !********************************************************************
6670  CASE(case_vec_chr)
6671 
6672  IF(.NOT. ASSOCIATED(var%vec_chr))THEN
6673  CALL print_var(var)
6674  CALL fatal_error("NC_READ_VAR: Variable objects vec_chr&
6675  & data is NOT assocaited!")
6676  END IF
6677 
6678  IF (ser_read .OR. dealer .EQ. myid) THEN
6679 
6680  IF (SIZE(var%VEC_CHR) .NE. rdims(2)) CALL fatal_error &
6681  & ("NC_READ_VAR: FILE OBJECT ALLOCATED Character array DOES NOT MATCH&
6682  & THE DIMENSIONS OF THE FILE CHARACTER DATA",&
6683  & "varname: "//trim(var%VARNAME))
6684 
6685  IF (len(var%VEC_CHR(1)) .LT. rdims(1)) CALL fatal_error &
6686  & ("NC_READ_VAR: FILE OBJECT ALLOCATED SPACE DOES NOT MATCH&
6687  & THE DIMENSIONS OF THE FILE CHARACTER DATA",&
6688  & "varname: "//trim(var%VARNAME))
6689 
6690  cnt=SIZE(ncount)
6691  allocate(nstrt(cnt),ncnt(cnt),nstrd(cnt))
6692  nstrt=nstart
6693  ncnt=ncount
6694  nstrd=nstride
6695 
6696  Do i = 1,rdims(2)
6697 
6698 
6699  var%vec_chr(i) = achar(0) ! INITIALIZE with null char
6700  scl_chr => var%vec_chr(i)
6701 
6702  ! READ THE I'th Entry (one entry)
6703  nstrt(2)=i
6704  ncnt(2)=1
6705 
6706  status = nf90_get_var(var%NCID,var%VARID,scl_chr,nstrt,ncnt,nstrd)
6707  CALL handle_ncerr(status,trim(errmsg))
6708 
6709  nlen = index(scl_chr,achar(0))
6710  ! If no null byte is found use the whole string
6711  if (nlen == 0) then
6712  nlen = rdims(1)
6713  else
6714  nlen = nlen -1
6715  scl_chr = scl_chr(1:nlen)
6716  end if
6717 
6718  nullify(scl_chr)
6719 
6720  END DO
6721  deallocate(nstrt,ncnt,nstrd)
6722 
6723  END IF
6724 
6725  IF(par) THEN
6726  CALL fatal_error("NC_READ_VAR: TRIED TO ENTER PARALLEL OPTION IN SERIAL CODING!")
6727  END IF
6728 
6729  nullify(scl_chr)
6730 
6731  CASE default
6732  call print_var(var)
6733  call fatal_error("NC_WRITE_VAR: UNKNOWN CASE")
6734 
6735  END SELECT
6736 
6737 
6738  !Only deallocate if it is not pointing to Ncount
6739  IF(.not.ASSOCIATED(rdims,ncount)) THEN
6740  IF(ASSOCIATED(rdims)) DEALLOCATE(rdims)
6741  ELSE
6742  NULLIFY(rdims)
6743  END IF
6744 
6745 
6746  IF(PRESENT(iostart)) THEN
6747  nullify(nstart)
6748  ELSE
6749  deallocate(nstart)
6750  END IF
6751 
6752  IF(PRESENT(iocount)) THEN
6753  nullify(ncount)
6754  ELSE
6755  deallocate(ncount)
6756  END IF
6757 
6758  IF(PRESENT(iostride)) THEN
6759  nullify(nstride)
6760  ELSE
6761  deallocate(nstride)
6762  END IF
6763 
6764 
6765  IF(dbg_set(dbg_sbr)) WRITE(ipt,*) "END NC_READ_VAR:"
6766 
6767 
logical serial
Definition: mod_main.f90:100
integer myid
Definition: mod_main.f90:67
logical par
Definition: mod_main.f90:102
integer msrid
Definition: mod_main.f90:68
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_refresh()

subroutine mod_nctools::nc_refresh ( type(ncfile), pointer  NCF)

Definition at line 324 of file mod_nctools.f90.

324  use control
325  IMPLICIT NONE
326  TYPE(NCFILE), POINTER :: NCF
327  TYPE(NCDIM), pointer :: DIM
328  integer :: status
329  LOGICAL :: FOUND
330  CHARACTER(LEN=120) :: errmsg
331 
332  if(dbg_set(dbg_sbr)) &
333  & write(ipt,*) "STARTING NC_REFRESH"
334 
335  IF(.NOT.ASSOCIATED(ncf)) CALL fatal_error&
336  ("NC_REFRESH: NCF NOT ASSICATED!")
337 
338  IF(dbg_set(dbg_io)) write(ipt,*) "====== REFRESHING FILE NAME: "//trim(ncf%FNAME)
339 
340 
341  IF(ncf%OPEN) CALL nc_close(ncf)
342  CALL nc_open(ncf)
343  dim => find_unlimited(ncf,found)
344  IF(.not. found) RETURN
345 
346  status = nf90_inquire_dimension(ncf%NCID,dim%DIMID,dim%DIMNAME, dim%DIM)
347  errmsg="Can not get dimensions: "//trim(ncf%FNAME)
348  call handle_ncerr(status,errmsg)
349 
350  IF(ASSOCIATED(ncf%FTIME)) THEN
351  ncf%FTIME%STK_LEN = dim%DIM
352  ELSE
353  CALL fatal_error("NC_REFRESH: FTIME NOT ASSOCIATED FOR FILE:"//&
354  & trim(ncf%FNAME))
355  END IF
356 
357 
358  if(dbg_set(dbg_sbr)) &
359  & write(ipt,*) "END NC_REFRESH"
360 
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:

◆ nc_save()

subroutine mod_nctools::nc_save ( type(ncfile)  NCF)

Definition at line 462 of file mod_nctools.f90.

462  IMPLICIT NONE
463  TYPE(NCFILE) :: NCF
464  TYPE(NCVAR), pointer :: VAR
465  TYPE(NCATT), pointer :: ATT
466  TYPE(NCDIM), pointer :: DIM
467  integer :: attid, dimid, varid
468  CHARACTER(LEN=120) :: errmsg
469  integer :: status,i,j, len
470  LOGICAL :: FOUND
471 
472  if(dbg_set(dbg_sbr)) &
473  & write(ipt,*) "STARTING NC_SAVE"
474 
475  IF(ncf%CONNECTED) CALL fatal_error("CAN NOT SAVE A FILE WHEN ALREADY&
476  & CONNECTED!", "FILE NAME: "//trim(ncf%FNAME))
477 
478  IF(.not. ncf%WRITABLE) CALL fatal_error("CAN NOT SAVE A FILE WHEN ALREADY&
479  & CONNECTED!", "FILE NAME: "//trim(ncf%FNAME))
480 
481  IF (.NOT. ncf%INDEFMODE) THEN ! FILE MAY COME FROM CREATE OR OPEN...
482  status = nf90_redef(ncf%ncid)
483  if(status /= nf90_noerr) &
484  & CALL fatal_error("EXPECTED FILE: "//trim(ncf%FNAME)//"; to be available &
485  &for REDEF from an open statement.")
486  ncf%INDEFMODE = .true.
487  END IF
488 
489 
490 ! DIMENSIONS
491  if(dbg_set(dbg_io)) write(ipt,*) "====== WRITING FILE DIMENSIONS:"
492  do i=1,count_dim_list(ncf)
493  CALL nc_def_dim(ncf,i)
494  end do
495 
496 
497  if(dbg_set(dbg_io)) write(ipt,*) "====== WRITING FILE GLOBAL ATTRIBUTES:"
498  Do i = 1,count_att_list(ncf)
499  att => find_att(ncf,i,found)
500  IF (.NOT. found) THEN
501  if (dbg_set(dbg_log)) call print_att_list(ncf)
502  CALL fatal_error&
503  &("NC_SAVE: COULD NOT FIND THE GLOBAL ATTRIBUTE WITH CORRECT ATTID W&
504  &HILE PUTTING THE ATTRIBUTE IN THE FILE")
505  END IF
506 
507  CALL write_att_type(ncf%NCID,nf90_global,att)
508  End Do
509 
510 
511  if(dbg_set(dbg_io)) write(ipt,*) "====== DEFINE FILE VARIABLES:"
512  do i=1,count_var_list(ncf)
513  CALL nc_def_var(ncf,i)
514  end do
515 
516  status = nf90_enddef(ncf%NCID)
517  errmsg="Can not ENDDEF MODE for file: "//trim(ncf%FNAME)
518  call handle_ncerr(status,errmsg)
519 
520  ncf%INDEFMODE = .false.
521  ncf%CONNECTED = .true.
522 
523  if(dbg_set(dbg_sbr)) &
524  & write(ipt,*) "END NC_SAVE"
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_write_file()

subroutine mod_nctools::nc_write_file ( type(ncfile), pointer  NCF,
logical, optional  LOCAL_ONLY,
integer, optional  STKCNT,
integer, dimension(2), optional  STKRNG 
)

Definition at line 3878 of file mod_nctools.f90.

3878  USE control
3879  implicit none
3880 
3881  LOGICAL, OPTIONAL :: LOCAL_ONLY
3882  INTEGER, OPTIONAL :: STKCNT ! TO SPECIFY THE STACK TO WRITE
3883  INTEGER, OPTIONAL :: STKRNG(2)! TO SPECIFY THE STACK RANGE TO WRITE
3884 
3885  LOGICAL :: MY_LOCAL
3886  TYPE(NCFILE), pointer :: NCF
3887 
3888  CHARACTER(LEN=80) :: FNAME,PATH,EXTENSION
3889  INTEGER :: FCNT,I
3890 
3891  TYPE(NCVAR), pointer :: VAR
3892  TYPE(NCDIM), pointer :: DIM
3893  type(NCVARP), POINTER :: CURRENT
3894  TYPE(NCFTIME), POINTER :: FTM
3895 
3896  LOGICAL :: COLLECTDATA = .false.
3897  INTEGER :: COLLECTOR
3898  INTEGER :: NEXT_STKCNT
3899  LOGICAL :: DUMP = .false.
3900  LOGICAL :: FOUND = .false.
3901 
3902  if(dbg_set(dbg_sbr)) &
3903  & write(ipt,*) "STARTING NC_WRITE_FILE"
3904 
3905  if(dbg_set(dbg_sbrio)) CALL print_file(ncf)
3906 
3907 
3908  my_local = .false.
3909  IF(PRESENT(local_only)) my_local = local_only
3910 
3911  IF(serial .or. my_local) THEN
3912  collectdata = .false.
3913  dump = .true.
3914  collector = msrid
3915 
3916  ELSE ! (IF PARALLEL)
3917 
3918  collectdata = .true.
3919 
3920  IF (use_mpi_io_mode) then
3921  collector = ioprocid
3922  dump = .false.
3923  ELSE
3924  collector = msrid ! MASTER
3925  IF(msr)THEN
3926  dump = .true.
3927  ELSE
3928  dump = .false.
3929  END IF
3930  END IF
3931 
3932  END IF
3933 
3934  IF(PRESENT(stkcnt) .AND. PRESENT(stkrng)) CALL fatal_error&
3935  &("NC_WRITE_FILE: CAN NOT CALL WITH BOTH IDX AND RNG!")
3936 
3937 
3938  if(dbg_set(dbg_sbrio)) then
3939  write(ipt,*)"==========================================="
3940  write(ipt,*)"= NC_WRITE_FILE: CONTROL STATE"
3941  write(ipt,*)"= NC_WRITE_FILE: COLLECT DATA:",collectdata
3942  write(ipt,*)"= NC_WRITE_FILE: DUMP:",dump
3943  write(ipt,*)"= NC_WRITE_FILE: COLLECTOR:",collector
3944  write(ipt,*)"= NC_WRITE_FILE: MYID:",myid
3945  write(ipt,*)"= NC_WRITE_FILE: IOPROC:",ioproc
3946  write(ipt,*)"= NC_WRITE_FILE:USE_MPI_IO_MODE:",use_mpi_io_mode
3947  IF(PRESENT(local_only))THEN
3948  write(ipt,*)"= NC_WRITE_FILE: LOCAL_ONLY:",local_only
3949  END IF
3950  IF(PRESENT(stkcnt))THEN
3951  write(ipt,*)"= NC_WRITE_FILE: STKCNT:",stkcnt
3952  END IF
3953  IF(PRESENT(stkrng))THEN
3954  write(ipt,*)"= NC_WRITE_FILE: STKRNG:",stkrng
3955  END IF
3956 
3957  write(ipt,*)"==========================================="
3958  end if
3959 
3960  IF(len_trim(ncf%FNAME) == 0) THEN
3961  CALL print_file(ncf)
3962  CALL fatal_error("NC_WRITE_FILE: CALLED WRITE WITH NO FILE NAME!")
3963  END IF
3964 
3965  CALL path_split(ncf%FNAME,path,fname,extension)
3966 
3967  IF (collector .EQ. myid) THEN
3968 
3969  IF(ncf%CONNECTED) THEN
3970 
3971  CALL nc_open(ncf)
3972 
3973  ! ADD CHECK FOR STK_LEN VS FILE UNLIMDIM?
3974  ELSE
3975 
3976  IF(dbg_set(dbg_log)) WRITE(ipt,*) "! CREATING FILE: "//trim(ncf%FNAME)
3977 
3978  CALL nc_create(ncf)
3979  CALL nc_save(ncf)
3980  END IF
3981  ELSE
3982 
3983  ncf%CONNECTED = .true.
3984 
3985  END IF
3986 
3987  IF(ASSOCIATED(ncf%FTIME)) THEN
3988  ftm => ncf%FTIME
3989 
3990  IF(PRESENT(stkcnt) )THEN
3991 
3992  next_stkcnt = stkcnt
3993  ftm%NEXT_STKCNT = stkcnt+1
3994  ftm%PREV_STKCNT =stkcnt
3995 
3996  ELSEIF(PRESENT(stkrng))THEN
3997  next_stkcnt = stkrng(2)
3998  ftm%NEXT_STKCNT = stkrng(2)
3999  ftm%PREV_STKCNT = stkrng(1)
4000 
4001  ELSE ! DEFAULT CASE - NO SPECIFED FILE STACK, USE FTM%NEXT_STKCNT
4002 
4003  next_stkcnt = ftm%NEXT_STKCNT
4004 
4005  END IF
4006 
4007  IF(ftm%NEXT_STKCNT .LT. 0) CALL fatal_error &
4008  &("NC_WRITE_FILE: FILE OBJECT STKCNT LESS THAN ZERO",&
4009  &"FILE NAME: "//trim(ncf%FNAME))
4010 
4011 
4012  ! IF WE ARE MAKING THE FILE LONGER INCRIMENT THE STK_LEN
4013  ftm%STK_LEN = max(ftm%NEXT_STKCNT,ftm%STK_LEN)
4014  ELSE
4015 
4016  IF(PRESENT(stkcnt) .OR. PRESENT(stkrng)) CALL fatal_error&
4017  &("IT IS NONSENSE TO PASS A STK OR RNG TO NC_WRITE_FILE",&
4018  & "WITH A FILE THAT DOES NOT HAVE AN ASSOCIATED FILETIME!")
4019 
4020  ! NOT A TIME VARRYING FILE... WRITE IT ANYWAY!
4021  next_stkcnt = 0
4022 
4023 
4024 ! CALL PRINT_FILE(NCF)
4025 ! CALL FATAL_ERROR ("NC_WRITE_FILE: FILE OBJECT FTIME IS NOT ALLOCATED ")
4026 
4027  END IF
4028 
4029 
4030  IF (next_stkcnt == 0) THEN
4031  IF(dbg_set(dbg_log)) WRITE(ipt,*) "! DUMPING STATIC DATA TO FILE: "&
4032  &//trim(fname)
4033  ELSE
4034 
4035  IF(PRESENT(stkrng)) THEN
4036 
4037  IF(dbg_set(dbg_log)) WRITE(ipt,*) "! DUMPING DATA TO FILE: "&
4038  &//trim(fname)//"; Records#",stkrng
4039  ELSE
4040  IF(dbg_set(dbg_log)) WRITE(ipt,*) "! DUMPING DATA TO FILE: "&
4041  &//trim(fname)//"; Record#",next_stkcnt
4042  END IF
4043  END IF
4044 
4045 
4046  current => ncf%VARS%NEXT
4047 
4048  IF(.NOT. ASSOCIATED(current)) &
4049  & CALL fatal_error("NC_WRITE_FILE: FILE OBJECT HAS NO VARIABLES",&
4050  &"FILE NAME: "//trim(ncf%FNAME))
4051 
4052 
4053 ! LOOP THROUGH VARIABLES AND WRITE THE DATA
4054 ! =====================================================================
4055  DO
4056  IF(.NOT. ASSOCIATED(current)) THEN
4057 
4058  IF (ioproc .AND. collectdata) THEN
4059  ! JUST FINISHED COLLECTING - NOW DUMP
4060  collectdata = .false.
4061  dump = .true.
4062  !START LOOP OVER AND DUMP THE DATA
4063  current => ncf%VARS%NEXT
4064  ELSE
4065 ! YOUR DONE!
4066 ! FVCOM GROUP ALWAYS GOES THROUGH THE LIST ONCE
4067 ! IOPROC GOES THROUGH TWICE - COLLECT ONCE
4068 ! - DUMP ONCE
4069  IF (collector .EQ. myid) CALL nc_close(ncf)
4070 
4071  if(dbg_set(dbg_sbr)) &
4072  & write(ipt,*) "END NC_WRITE_FILE"
4073 
4074  RETURN
4075  END IF
4076 
4077  END IF
4078 
4079  IF(.NOT. ASSOCIATED(current%VAR)) CALL fatal_error &
4080  &("NC_WRITE_FILE:",&
4081  & "FILE OBJECT HAS UNASSOCIATED VARIBLE OBJECT IN LINK LIST",&
4082  &"FILE NAME: "//trim(ncf%FNAME))
4083 
4084  var => current%VAR
4085 
4086 
4087  ! DECIDE WHETHER THIS IS A DYNAMIC OR STATIC VARIABLE
4088  found = has_unlimited(var)
4089 
4090  IF (found .AND. (next_stkcnt .GT. 0) ) THEN
4091  ! THIS IS A TIME STEP OUT PUT - WRITE THE VARIABLE
4092  IF(PRESENT(stkrng)) THEN
4093  CALL nc_write_var(var,dump,collectdata,collector,stkrng=stkrng)
4094  ELSE
4095  CALL nc_write_var(var,dump,collectdata,collector,stkcnt=next_stkcnt)
4096  END IF
4097  ELSEIF (.NOT. found .AND. (next_stkcnt .EQ. 0) ) THEN
4098  ! STKCNT == 0 - JUST WROTE NEW FILE ADD STATIC VARIABLES
4099  CALL nc_write_var(var,dump,collectdata,collector)
4100  END IF
4101 
4102  current => current%NEXT
4103  END DO
4104 
4105  CALL fatal_error("NC_WRITE_FILE REACHED AN IMPOSSIBLE STATE",&
4106  &"PLEASE SET YOUR COMPUTER ON FIRE AND EXIT THE BUILDING QUICKLY")
4107 
logical serial
Definition: mod_main.f90:100
logical msr
Definition: mod_main.f90:101
integer myid
Definition: mod_main.f90:67
logical use_mpi_io_mode
Definition: mod_main.f90:188
integer ioprocid
Definition: mod_main.f90:69
logical ioproc
Definition: mod_main.f90:103
integer msrid
Definition: mod_main.f90:68
integer ipt
Definition: mod_main.f90:922
Here is the call graph for this function:
Here is the caller graph for this function:

◆ nc_write_var()

subroutine mod_nctools::nc_write_var ( type(ncvar), pointer  VAR,
logical, intent(in)  DUMP,
logical, intent(in)  COLLECTDATA,
integer, intent(in)  COLLECTOR,
integer, optional  STKCNT,
integer, dimension(2), optional  STKRNG,
integer, dimension(:), optional, allocatable, target  IOSTART,
integer, dimension(:), optional, allocatable, target  IOCOUNT,
integer, dimension(:), optional, allocatable, target  IOSTRIDE 
)

Definition at line 4113 of file mod_nctools.f90.

4113 ! DUMP - If T, write the data to the disk
4114 ! COLLECTDATA - If T, Collect data to the processor specified by COLLECTOR
4115 ! COLLECTOR - The Processor which does write/collect
4116 
4118  implicit none
4119  TYPE(NCVAR), POINTER :: VAR
4120  INTEGER, OPTIONAL :: STKCNT
4121  INTEGER, OPTIONAL :: STKRNG(2)
4122  INTEGER, ALLOCATABLE,TARGET, OPTIONAL :: IOSTART(:), IOCOUNT(:), IOSTRIDE(:)
4123  LOGICAL, INTENT(IN) ::DUMP
4124  LOGICAL, INTENT(IN) :: COLLECTDATA
4125  INTEGER, INTENT(IN) :: COLLECTOR
4126 
4127  INTEGER :: CODE
4128  INTEGER :: XTYPE
4129  INTEGER :: CNT,DIMCNT
4130  INTEGER :: NSIZE
4131 ! integer :: dim1,dim2,dim3,dim4
4132 
4133  ! NF90 SUBSET VARIABLES
4134  INTEGER, POINTER :: NSTART(:), NCOUNT(:), NSTRIDE(:)
4135  ! The size of the data returned by nf90_get/put_var
4136  INTEGER, POINTER :: RDIMS(:)
4137  ! TEMPORARY VARIABLES ONLY USED FOR VEC_CHR
4138  INTEGER, POINTER :: NSTRT(:), NCNT(:), NSTRD(:)
4139 
4140  ! POINTERS AND SUCH
4141  TYPE(NCDIM), POINTER :: DIM
4142  TYPE(NCDIMP), POINTER :: DIMLINK
4143  LOGICAL :: FOUND
4144 
4145 
4146  INTEGER, PARAMETER :: case_scl_int = 1
4147  INTEGER, PARAMETER :: case_vec_int = 2
4148  INTEGER, PARAMETER :: case_arr_int = 3
4149  INTEGER, PARAMETER :: case_cub_int = 4
4150  INTEGER, PARAMETER :: case_fda_int = 5
4151 
4152  INTEGER, PARAMETER :: case_scl_flt = 6
4153  INTEGER, PARAMETER :: case_vec_flt = 7
4154  INTEGER, PARAMETER :: case_arr_flt = 8
4155  INTEGER, PARAMETER :: case_cub_flt = 9
4156  INTEGER, PARAMETER :: case_fda_flt = 10
4157 
4158  INTEGER, PARAMETER :: case_scl_dbl = 11
4159  INTEGER, PARAMETER :: case_vec_dbl = 12
4160  INTEGER, PARAMETER :: case_arr_dbl = 13
4161  INTEGER, PARAMETER :: case_cub_dbl = 14
4162  INTEGER, PARAMETER :: case_fda_dbl = 15
4163 
4164  INTEGER, PARAMETER :: case_scl_chr = 16
4165  INTEGER, PARAMETER :: case_vec_chr = 17
4166 
4167  ! TEMPORARY STORAGE FOR DATA IF COLLECTED TO MASTER PROC
4168  INTEGER, POINTER :: SCL_INT
4169  INTEGER, POINTER,DIMENSION(:) :: GVEC_INT
4170  INTEGER, POINTER,DIMENSION(:,:) :: GARR_INT
4171  INTEGER, POINTER,DIMENSION(:,:,:) :: GCUB_INT
4172  INTEGER, POINTER,DIMENSION(:,:,:,:) :: GFDA_INT
4173 
4174  INTEGER, POINTER,DIMENSION(:) :: LVEC_INT
4175  INTEGER, POINTER,DIMENSION(:,:) :: LARR_INT
4176  INTEGER, POINTER,DIMENSION(:,:,:) :: LCUB_INT
4177  INTEGER, POINTER,DIMENSION(:,:,:,:) :: LFDA_INT
4178 
4179  REAL(SPA), POINTER :: SCL_FLT
4180  REAL(SPA), POINTER,DIMENSION(:) :: LVEC_FLT
4181  REAL(SPA), POINTER,DIMENSION(:,:) :: LARR_FLT
4182  REAL(SPA), POINTER,DIMENSION(:,:,:) :: LCUB_FLT
4183  REAL(SPA), POINTER,DIMENSION(:,:,:,:) :: LFDA_FLT
4184 
4185  REAL(SPA), POINTER,DIMENSION(:) :: GVEC_FLT
4186  REAL(SPA), POINTER,DIMENSION(:,:) :: GARR_FLT
4187  REAL(SPA), POINTER,DIMENSION(:,:,:) :: GCUB_FLT
4188  REAL(SPA), POINTER,DIMENSION(:,:,:,:) :: GFDA_FLT
4189 
4190  REAL(DP), POINTER :: SCL_DBL
4191  REAL(DP), POINTER,DIMENSION(:) :: GVEC_DBL
4192  REAL(DP), POINTER,DIMENSION(:,:) :: GARR_DBL
4193  REAL(DP), POINTER,DIMENSION(:,:,:) :: GCUB_DBL
4194  REAL(DP), POINTER,DIMENSION(:,:,:,:) :: GFDA_DBL
4195 
4196  REAL(DP), POINTER,DIMENSION(:) :: LVEC_DBL
4197  REAL(DP), POINTER,DIMENSION(:,:) :: LARR_DBL
4198  REAL(DP), POINTER,DIMENSION(:,:,:) :: LCUB_DBL
4199  REAL(DP), POINTER,DIMENSION(:,:,:,:) :: LFDA_DBL
4200 
4201  CHARACTER(LEN=80), POINTER :: SCL_CHR
4202  CHARACTER(LEN=80), POINTER,DIMENSION(:) :: VEC_CHR
4203 
4204  CHARACTER(len=3) :: char1,char2,char3
4205  ! DATA FOR PUT VAR COMMANDS:
4206  INTEGER :: STATUS, I
4207  CHARACTER(LEN=120) :: errmsg
4208 
4209  IF(dbg_set(dbg_sbr)) WRITE(ipt,*) "START NC_WRITE_VAR:"
4210 
4211  IF(.NOT. ASSOCIATED(var)) CALL fatal_error &
4212  & ("NC_WRITE_VAR: Variable object argument is not assocaited!")
4213 
4214  ! INITIALIZE SOME MEMORY
4215  status=0
4216  i=0
4217 
4218  code=0
4219  xtype=0
4220  cnt=0
4221  dimcnt=0
4222  nsize=0
4223  found=.false.
4224 
4225  !NULLIFY POINTERS
4226  NULLIFY(nstart,ncount,nstride)
4227  NULLIFY(rdims,nstrt,ncnt,nstrd)
4228  NULLIFY(dim,dimlink)
4229  NULLIFY(scl_int,gvec_int,garr_int,gcub_int,gfda_int,lvec_int,larr_int,lcub_int,lfda_int)
4230 
4231  NULLIFY(scl_flt,gvec_flt,garr_flt,gcub_flt,gfda_flt,lvec_flt,larr_flt,lcub_flt,lfda_flt)
4232  NULLIFY(scl_dbl,gvec_dbl,garr_dbl,gcub_dbl,gfda_dbl,lvec_dbl,larr_dbl,lcub_dbl,lfda_dbl)
4233  NULLIFY(scl_chr,vec_chr)
4234 
4235 
4236  ! COUNT THE NUMBER OF DIMENSIONS IN THE VARIABLE
4237  dimcnt = count_dim_list(var)
4238 
4239 
4240  IF (serial .and. (collector .NE. myid .OR. collectdata)) THEN
4241  CALL print_var(var)
4242  CALL fatal_error("NC_WRITE_VAR: SERIAL JOB CALLED A PARALLEL WRITE?")
4243  END IF
4244 
4245  IF (.NOT. dump .and. .NOT. collectdata) THEN
4246  CALL print_var(var)
4247  CALL fatal_error("NC_WRITE_VAR: CALLED WITH BAD ARGUMENTS;",&
4248  & "DUMP or COLLECTDATA or both must be true?")
4249  END IF
4250 
4251  IF(dbg_set(dbg_sbrio)) THEN
4252 
4253  write(char2,'(I3.3)')collector
4254  write(char3,'(I3.3)')myid
4255  WRITE(ipt,*)"NC_WRITE_VAR Arguments:"
4256  call print_var(var)
4257  WRITE(ipt,*)"DUMP=",dump,"; COLLECTDATA=",collectdata,"; COLLECTOR="//char2//"; MYID="//char3
4258  IF(PRESENT(stkcnt)) THEN
4259  WRITE(ipt,*) "STKCNT=",stkcnt
4260  ELSE
4261  WRITE(ipt,*) "STKCNT= NONE"
4262  END IF
4263 
4264  IF(PRESENT(stkrng)) THEN
4265  WRITE(ipt,*) "STKRNG=",stkrng
4266  ELSE
4267  WRITE(ipt,*) "STKRNG= NONE"
4268  END IF
4269 
4270  IF(PRESENT(iostart)) THEN
4271  WRITE(ipt,*) "IOSTART=",iostart
4272  ELSE
4273  WRITE(ipt,*) "IOSTART= NONE"
4274  END IF
4275 
4276  IF(PRESENT(iocount)) THEN
4277  WRITE(ipt,*) "IOCOUNT=",iocount
4278  ELSE
4279  WRITE(ipt,*) "IOCOUNT= NONE"
4280  END IF
4281 
4282  IF(PRESENT(iostride)) THEN
4283  WRITE(ipt,*) "IOSTRIDE=",iostride
4284  ELSE
4285  WRITE(ipt,*) "IOSTRIDE= NONE"
4286  END IF
4287 
4288  END IF
4289 
4290 
4291  IF(var%NCID == -1 .and. dump) THEN
4292  CALL print_var(var)
4293  CALL fatal_error("NC_WRITE_VAR: CAN NOT WRITE TO FILE, IT IS NOT OPEN!")
4294  END IF
4295 
4296 
4297  IF ( PRESENT(stkcnt) ) THEN
4298 
4299  IF ( PRESENT(stkrng) .or. PRESENT(iostart) .or. PRESENT(iocount) .or. PRESENT(iostride))THEN
4300  CALL print_var(var)
4301  CALL fatal_error("NC_WRITE_VAR: You can not pass both STKCNT and STKRNG/START/COUNT/STRIDE !",&
4302  &"Set STKCNT to write a time slice filling all other dimensions. OR",&
4303  &"Set IOSTART/IOCOUNT/(IOSTRIDE) to read a specific range.")
4304  END IF
4305 
4306  dim => find_unlimited(var,found)
4307  IF(.NOT.found) THEN
4308  CALL print_var(var)
4309  CALL fatal_error&
4310  &("NC_WRITE_VAR: CALLED WITH STKCNT ARGUMENT BUT VARIABLE IS NOT UNLIMITED?")
4311  END IF
4312  NULLIFY(dim)
4313 
4314  ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
4315 
4316 
4317  ! SET THE VARIABLES CURRENT STACK COUNT
4318  var%CURR_STKCNT = stkcnt
4319 
4320  ! SET THE NF90_PUT_VAR DIMENSIONS
4321  nstart=1 ! START AT ONE, EXCEPT FOR THE TIME VARIABLE
4322  nstart(dimcnt) = stkcnt
4323 
4324 
4325  dimlink => var%DIMS%NEXT
4326  DO i = 1,dimcnt ! GET THE OUTPUT VARIABLE DIMENSIONS
4327  dim => dimlink%DIM
4328  ncount(i)= dim%DIM
4329  dimlink => dimlink%NEXT
4330  END DO
4331  ncount(dimcnt)=1 ! SET THE TIME OUTPUT DIMENSION TO 1
4332 
4333  nstride=1 ! ALWAYS USE STRIDE 1 FOR STKCNT INPUT
4334 
4335  ! FOR TIME DEPENDANT DATA THE RANK OF THE ALLOCATED MEMORY IS
4336  ! ONE LESS THAN THE RANK OF THE FILE's VARIALBE!
4337  dimcnt = dimcnt -1
4338 
4339  ! THE DIMENSIONS WRITTEN WILL BE THE VALUES OF NCOUNT, NOT
4340  ! INCLUDING TIME
4341  IF(dimcnt > 0)THEN
4342  ALLOCATE(rdims(dimcnt))
4343  rdims(1:dimcnt)=ncount(1:dimcnt)
4344  ELSE IF (dimcnt == 0) THEN
4345  ALLOCATE(rdims(1))
4346  rdims(1)=ncount(1)
4347  ELSE
4348  nullify(rdims)
4349  END IF
4350 
4351  ELSEIF ( PRESENT(stkrng) ) THEN
4352 
4353  IF ( PRESENT(stkcnt) .or. PRESENT(iostart) .or. PRESENT(iocount) .or. PRESENT(iostride))THEN
4354  CALL print_var(var)
4355  CALL fatal_error("NC_WRITE_VAR: You can not pass both STKRNG and STKCNT/START/COUNT/STRIDE !",&
4356  &"Set STKRNG to write a time range filling all other dimensions. OR",&
4357  &"Set IOSTART/IOCOUNT/(IOSTRIDE) to read a specific range.")
4358  END IF
4359 
4360  dim => find_unlimited(var,found)
4361  IF(.NOT.found) THEN
4362  CALL print_var(var)
4363  CALL fatal_error&
4364  &("NC_WRITE_VAR: CALLED WITH STKRNG ARGUMENT BUT VARIABLE IS NOT UNLIMITED?")
4365  END IF
4366  NULLIFY(dim)
4367 
4368  ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
4369 
4370 
4371  ! SET THE VARIABLES CURRENT STACK COUNT
4372  var%CURR_STKCNT = -1
4373 
4374  ! SET THE NF90_PUT_VAR DIMENSIONS
4375  nstart=1 ! START AT ONE, EXCEPT FOR THE TIME VARIABLE
4376  nstart(dimcnt) = stkrng(1)
4377 
4378 
4379  dimlink => var%DIMS%NEXT
4380  DO i = 1,dimcnt ! GET THE OUTPUT VARIABLE DIMENSIONS
4381  dim => dimlink%DIM
4382  ncount(i)= dim%DIM
4383  dimlink => dimlink%NEXT
4384  END DO
4385  ncount(dimcnt)=stkrng(2) - stkrng(1)+1 ! SET THE TIME OUTPUT
4386  ! DIMENSION TO NUMBER OF STATES IN THE RANGE
4387 
4388  nstride=1 ! ALWAYS USE STRIDE 1 FOR STKCNT INPUT
4389 
4390  ! THE DIMENSIONS WRITTEN WILL BE THE VALUES OF NCOUNT, NOT
4391  ! INCLUDING TIME
4392  rdims=>ncount
4393 
4394  ELSE IF( PRESENT(iostart) .and. PRESENT(iocount)) THEN
4395 
4396  nstart=>iostart
4397  ncount=>iocount
4398 
4399  IF(.not. PRESENT(iostride)) THEN
4400  ALLOCATE(nstride(dimcnt))
4401  nstride=1
4402  ELSE
4403  nstride=>iostride
4404  END IF
4405 
4406  IF(dimcnt /= size(nstart) .or. &
4407  & dimcnt /= size(ncount) .or. &
4408  & dimcnt /= size(nstride) ) THEN
4409  CALL print_var(var)
4410  CALL fatal_error&
4411  & ("NC_WRITE_VAR: Variable's # of file dimensions does not matach size(NSTART/NCOUNT/NSTRIDE) arugments?")
4412  END IF
4413 
4414  ! SET THE VARIABLES CURRENT STACK COUNT: not defined for this
4415  ! kind of read/write
4416  var%CURR_STKCNT = -1
4417 
4418  ! ONLY COUNT THE NONE SINGLETON DIMENSIONS OF A VARIABLE.
4419  cnt = 0
4420  DO i = 1,dimcnt
4421  IF(ncount(i)>1) cnt=cnt+1
4422  END DO
4423  ! NOW RECORD THE DIMENSIONS OF THE DATA THAT WILL BE READ INTO MEMORY
4424  IF (cnt > 0) THEN
4425 
4426  ALLOCATE(rdims(cnt))
4427  cnt = 0
4428  DO i = 1,dimcnt
4429  IF(ncount(i)>1) THEN
4430  cnt=cnt+1
4431  rdims(cnt)=ncount(i)
4432  END IF
4433  END DO
4434 
4435  ELSE
4436  ALLOCATE(rdims(1))
4437  rdims(1) = 1
4438  END IF
4439 
4440 
4441  ! NOW SET THE DIMENSION OF THE DATA VARIABLE IN MEMORY
4442  dimcnt=cnt
4443 
4444  ELSE IF( .not. (PRESENT(iostart) .or. PRESENT(iocount) .or.&
4445  & PRESENT(stkcnt) .or. PRESENT(stkrng) .or. PRESENT(iostride))) THEN
4446 
4447  ALLOCATE(nstart(dimcnt),ncount(dimcnt),nstride(dimcnt))
4448 
4449  ! SET THE VARIABLES CURRENT STACK COUNT
4450  var%CURR_STKCNT = 0
4451 
4452  ! SET THE NF90_PUT_VAR DIMENSIONS
4453  nstart=1 ! START AT ONE, EXCEPT FOR THE TIME VARIABLE
4454 
4455  dimlink => var%DIMS%NEXT
4456  DO i = 1,dimcnt ! GET THE OUTPUT VARIABLE DIMENSIONS
4457  dim => dimlink%DIM
4458  ncount(i)= dim%DIM
4459  dimlink => dimlink%NEXT
4460  END DO
4461 
4462  nstride=1 ! ALWAYS USE STRIDE 1 IF NO ARGUMENTS ARE PASSED
4463 
4464  ! ONLY COUNT THE NONE SINGLETON DIMENSIONS OF A VARIABLE.
4465  cnt = 0
4466  DO i = 1,dimcnt
4467  IF(ncount(i)>1) cnt=cnt+1
4468  END DO
4469  ! NOW RECORD THE DIMENSIONS OF THE DATA THAT WILL BE READ INTO MEMORY
4470  IF (cnt > 0) THEN
4471 
4472  ALLOCATE(rdims(cnt))
4473  cnt = 0
4474  DO i = 1,dimcnt
4475  IF(ncount(i)>1) THEN
4476  cnt=cnt+1
4477  rdims(cnt)=ncount(i)
4478  END IF
4479  END DO
4480 
4481  ELSE
4482  ALLOCATE(rdims(1))
4483  rdims(1) = 1
4484  END IF
4485 
4486 
4487  ! NOW SET THE DIMENSION OF THE DATA VARIABLE IN MEMORY
4488  dimcnt=cnt
4489 
4490  ELSE
4491 
4492  IF(dbg_set(dbg_log)) THEN
4493  write(ipt,*) "# IOSTART ::",PRESENT(iostart)
4494  write(ipt,*) "# IOCOUNT ::",PRESENT(iocount)
4495  write(ipt,*) "# IOSTRIDE ::",PRESENT(iostride)
4496  write(ipt,*) "# STKCNT ::",PRESENT(stkcnt)
4497  write(ipt,*) "# STKRNG ::",PRESENT(stkrng)
4498  END IF
4499 
4500  CALL fatal_error("NC_WRITE_VAR: YOU SPECIFIED AN ILLEGAL COMBINATION OF AGUMENTS?",&
4501  & "Valid choices are STKCNT or STKRNG or NSTART,NCOUNT,(NSTRIDE) or none")
4502  END IF
4503 
4504  IF(dbg_set(dbg_sbrio)) THEN
4505  write(ipt,*) "FILE DIMENSION COUNT IS::", count_dim_list(var)
4506  write(ipt,*) "MEMORY DIMENSION COUNT IS::",dimcnt
4507  END IF
4508 
4509  !DETERMIN WHICH CASE WE ARE WRITING DATA FOR
4510  code = -1
4511 
4512  select case(var%XTYPE)
4513  case(nf90_byte)
4514  call fatal_error("NC_WRITE_VAR: NOT SET UP TO WRITE BYTE DATA")
4515  case(nf90_short)
4516  call fatal_error("NC_WRITE_VAR: NOT SET UP TO WRITE SHORT DATA")
4517  case(nf90_int)
4518  if (dimcnt == 0) code = case_scl_int
4519  if (dimcnt == 1) code = case_vec_int
4520  if (dimcnt == 2) code = case_arr_int
4521  if (dimcnt == 3) code = case_cub_int
4522  if (dimcnt == 4) code = case_fda_int
4523  case(nf90_float)
4524  if (dimcnt == 0) code = case_scl_flt
4525  if (dimcnt == 1) code = case_vec_flt
4526  if (dimcnt == 2) code = case_arr_flt
4527  if (dimcnt == 3) code = case_cub_flt
4528  if (dimcnt == 4) code = case_fda_flt
4529  case(nf90_double)
4530  if (dimcnt == 0) code = case_scl_dbl
4531  if (dimcnt == 1) code = case_vec_dbl
4532  if (dimcnt == 2) code = case_arr_dbl
4533  if (dimcnt == 3) code = case_cub_dbl
4534  if (dimcnt == 4) code = case_fda_dbl
4535  case(nf90_char)
4536 
4537  IF(ncount(1) == 1) THEN
4538  WRITE(ipt,*) "SINGLETON CHARACTER DATA!"
4539  IF(.not. ASSOCIATED(rdims,ncount)) THEN
4540  DEALLOCATE(rdims)
4541  ELSE
4542  NULLIFY(rdims)
4543  END IF
4544 
4545  dimcnt = dimcnt+1
4546 
4547  ALLOCATE(rdims(dimcnt))
4548  cnt = 1
4549  rdims(1) = ncount(1)
4550  DO i = 2,size(ncount)
4551  IF(ncount(i)>1) THEN
4552  cnt=cnt+1
4553  rdims(cnt)=ncount(i)
4554  END IF
4555  END DO
4556  END IF
4557 
4558  if (dimcnt == 1) code = case_scl_chr
4559  if (dimcnt == 2) code = case_vec_chr
4560  ! First dim is length of string
4561  ! Second dim is time
4562  case default
4563  call fatal_error("NC_WRITE_VAR: Unkown data type?")
4564  end select
4565 
4566  ! BASED ON CODE WRITE THE DATA
4567  errmsg="NC_WRITE_VAR: VARIABLE: "//var%varname//"; Can not be writen by nf90_put_var!"
4568 
4569  SELECT CASE(code)
4570 !********************************************************************
4571 ! ===== SCALAR INTEGER DATA
4572 !********************************************************************
4573  CASE(case_scl_int)
4574 
4575  IF(.NOT. ASSOCIATED(var%SCL_INT))THEN
4576 
4577  IF(ASSOCIATED(var%VEC_INT))THEN
4578  IF(size(var%VEC_INT)==1) var%SCL_INT=>var%VEC_INT(1)
4579  ELSE IF(ASSOCIATED(var%ARR_INT))THEN
4580  IF(size(var%ARR_INT)==1) var%SCL_INT=>var%ARR_INT(1,1)
4581  ELSE IF(ASSOCIATED(var%CUB_INT))THEN
4582  IF(size(var%CUB_INT)==1) var%SCL_INT=>var%CUB_INT(1,1,1)
4583  ELSE IF(ASSOCIATED(var%FDA_INT))THEN
4584  IF(size(var%FDA_INT)==1) var%SCL_INT=>var%FDA_INT(1,1,1,1)
4585  ELSE
4586 
4587  CALL print_var(var)
4588  CALL fatal_error("NC_WRITE_VAR: Variable objects SCL_INT data is NOT assocaited!")
4589  END IF
4590  END IF
4591 
4592  scl_int => var%SCL_INT
4593 
4594  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4595  IF(collectdata .AND. use_mpi_io_mode) THEN
4596  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4597  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4598  END IF
4599 
4600  IF (dump) THEN
4601 
4602  IF (SIZE(nstart) .GT. 0) THEN
4603 
4604  if (product(ncount) .NE. 1) CALL fatal_error&
4605  & ("NC_WRITE_VAR: NCOUNT dimension invalid while reading scl_int?")
4606 
4607  ! ARGUMENT TO NF90_PUT_VAR MUST BE A VECTOR
4608  allocate(gvec_int(1)); gvec_int(1) = scl_int
4609 
4610  status = nf90_put_var(var%NCID,var%VARID,gvec_int,nstart,ncount,nstride)
4611  CALL handle_ncerr(status,trim(errmsg))
4612 
4613  deallocate(gvec_int)
4614  ELSE
4615  status = nf90_put_var(var%NCID,var%VARID,scl_int)
4616  CALL handle_ncerr(status,trim(errmsg))
4617  END IF
4618 
4619  END IF
4620 
4621  NULLIFY(scl_int)
4622 
4623 !********************************************************************
4624 ! ===== VECTOR INTEGER DATA
4625 !********************************************************************
4626  CASE(case_vec_int)
4627 
4628  IF(.NOT. ASSOCIATED(var%VEC_INT))THEN
4629 
4630  IF(ASSOCIATED(var%ARR_INT))THEN
4631  IF(size(var%ARR_INT,1)==1) var%VEC_INT=>var%ARR_INT(1,1:)
4632  IF(size(var%ARR_INT,2)==1) var%VEC_INT=>var%ARR_INT(1:,1)
4633  ELSE IF(ASSOCIATED(var%CUB_INT))THEN
4634  IF(size(var%CUB_INT,1)==1) THEN
4635  IF(size(var%CUB_INT,2)==1) var%VEC_INT=>var%CUB_INT(1,1,1:)
4636  IF(size(var%CUB_INT,3)==1) var%VEC_INT=>var%CUB_INT(1,1:,1)
4637  END IF
4638  IF(size(var%CUB_INT,1)==2) THEN
4639  IF(size(var%CUB_INT,3)==1) var%VEC_INT=>var%CUB_INT(1:,1,1)
4640  END IF
4641 ! ELSE IF(ASSOCIATED(VAR%FDA_INT))THEN
4642 ! IF(size(VAR%FDA_INT,1)==1) THEN
4643 ! IF(size(VAR%FDA_INT,2)==1) VAR%VEC_INT=>VAR%FDA_INT(1,1,1,1:)
4644 ! IF(size(VAR%FDA_INT,3)==1) VAR%VEC_INT=>VAR%FDA_INT(1,1,1:,1)
4645 ! IF(size(VAR%FDA_INT,4)==1) VAR%VEC_INT=>VAR%FDA_INT(1,1:,1,1)
4646 ! END IF
4647 ! IF(size(VAR%FDA_INT,1)==2) THEN
4648 ! IF(size(VAR%FDA_INT,4)==1) VAR%VEC_INT=>VAR%FDA_INT(1:,1,1,1)
4649 ! END IF
4650  ELSE
4651 
4652  CALL print_var(var)
4653  CALL fatal_error("NC_WRITE_VAR: Variable objects VEC_FLT data is NOT assocaited!")
4654  END IF
4655  END IF
4656 
4657  nsize=ubound(var%VEC_INT,1)
4658 
4659  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4660  IF(collectdata) THEN
4661  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4662  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4663  END IF
4664 
4665 
4666  IF (dump) THEN
4667 
4668  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
4669  If(.NOT. collectdata) gvec_int => var%VEC_INT(1:rdims(1))
4670 
4671  status = nf90_put_var(var%NCID,var%VARID,gvec_int,nstart,ncount,nstride)
4672  CALL handle_ncerr(status,trim(errmsg))
4673 
4674  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
4675  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
4676  IF (collectdata) deallocate(gvec_int)
4677 
4678 
4679  END IF
4680 
4681  nullify(gvec_int)
4682  nullify(lvec_int)
4683 
4684 
4685 !********************************************************************
4686 ! ===== ARRAY INTEGER DATA
4687 !********************************************************************
4688  CASE(case_arr_int)
4689 
4690  IF(.NOT. ASSOCIATED(var%ARR_INT))THEN
4691 
4692  IF(ASSOCIATED(var%CUB_INT))THEN
4693  IF(size(var%CUB_INT,1)==1) var%ARR_INT=>var%CUB_INT(1,1:,1:)
4694  IF(size(var%CUB_INT,2)==1) var%ARR_INT=>var%CUB_INT(1:,1,1:)
4695  IF(size(var%CUB_INT,3)==1) var%ARR_INT=>var%CUB_INT(1:,1:,1)
4696  ELSE
4697 
4698  CALL print_var(var)
4699  CALL fatal_error("NC_WRITE_VAR: Variable objects ARR_INT data is NOT assocaited!")
4700  END IF
4701  END IF
4702  nsize=ubound(var%ARR_INT,1)
4703 
4704  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4705  IF(collectdata) THEN
4706  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4707  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4708  END IF
4709 
4710 
4711  IF (dump) THEN
4712 
4713  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
4714  If(.NOT. collectdata) garr_int => var%ARR_INT(1:rdims(1),1:rdims(2))
4715 ! write(ipt,*)VAR%ARR_INT(1:DIM1,1:DIM2)
4716 
4717  status = nf90_put_var(var%NCID,var%VARID,garr_int,nstart,ncount,nstride)
4718  CALL handle_ncerr(status,trim(errmsg))
4719 
4720  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
4721  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
4722  IF (collectdata) deallocate(garr_int)
4723 
4724  END IF
4725 
4726  nullify(garr_int)
4727  nullify(larr_int)
4728 
4729 
4730 !********************************************************************
4731 ! ===== CUBE INTEGER DATA
4732 !********************************************************************
4733  CASE(case_cub_int)
4734 
4735  IF(.NOT. ASSOCIATED(var%cub_INT))THEN
4736  CALL print_var(var)
4737  CALL fatal_error("NC_WRITE_VAR: Variable objects CUB_INT data is NOT assocaited!")
4738  END IF
4739 
4740  nsize=ubound(var%CUB_INT,1)
4741 
4742  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4743  IF(collectdata) THEN
4744  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4745  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4746  END IF
4747 
4748 
4749  IF (dump) THEN
4750 
4751  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
4752  If(.NOT. collectdata) gcub_int => var%CUB_INT(1:rdims(1),1:rdims(2),1:rdims(3))
4753 
4754  status = nf90_put_var(var%NCID,var%VARID,gcub_int,nstart,ncount,nstride)
4755  CALL handle_ncerr(status,trim(errmsg))
4756 
4757  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
4758  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
4759  IF (collectdata) deallocate(gcub_int)
4760 
4761 
4762  END IF
4763 
4764 
4765  nullify(gcub_int)
4766  nullify(lcub_int)
4767 
4768 !********************************************************************
4769 ! ===== FOUR DIMENSION ARRAY INTEGER DATA
4770 !********************************************************************
4771  CASE(case_fda_int)
4772 
4773  IF(.NOT. ASSOCIATED(var%fda_INT))THEN
4774  CALL print_var(var)
4775  CALL fatal_error("NC_WRITE_VAR: Variable objects FDA_INT data is NOT assocaited!")
4776  END IF
4777 
4778  nsize=ubound(var%FDA_INT,1)
4779 
4780  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4781  IF(collectdata) THEN
4782  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4783  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4784  END IF
4785 
4786 
4787  IF (dump) THEN
4788 
4789  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
4790  If(.NOT. collectdata) gfda_int => var%FDA_INT(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
4791 
4792  status = nf90_put_var(var%NCID,var%VARID,gfda_int,nstart,ncount,nstride)
4793  CALL handle_ncerr(status,trim(errmsg))
4794 
4795  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
4796  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
4797  IF (collectdata) deallocate(gfda_int)
4798 
4799 
4800  END IF
4801 
4802 
4803  nullify(gfda_int)
4804  nullify(lfda_int)
4805 
4806 !********************************************************************
4807 ! ===== SCALAR FLOATING POINT DATA
4808 !********************************************************************
4809  CASE(case_scl_flt)
4810 
4811  IF(.NOT. ASSOCIATED(var%SCL_FLT))THEN
4812 
4813  IF(ASSOCIATED(var%VEC_FLT))THEN
4814  IF(size(var%VEC_FLT)==1) var%SCL_FLT=>var%VEC_FLT(1)
4815  ELSE IF(ASSOCIATED(var%ARR_FLT))THEN
4816  IF(size(var%ARR_FLT)==1) var%SCL_FLT=>var%ARR_FLT(1,1)
4817  ELSE IF(ASSOCIATED(var%CUB_FLT))THEN
4818  IF(size(var%CUB_FLT)==1) var%SCL_FLT=>var%CUB_FLT(1,1,1)
4819  ELSE
4820 
4821  CALL print_var(var)
4822  CALL fatal_error("NC_WRITE_VAR: Variable objects SCL_FLT data is NOT assocaited!")
4823  END IF
4824  END IF
4825 
4826  scl_flt => var%SCL_FLT
4827 
4828  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4829  IF(collectdata .AND. use_mpi_io_mode) THEN
4830  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4831  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4832  END IF
4833 
4834  IF (dump) THEN
4835 
4836  IF (SIZE(nstart) .GT. 0) THEN
4837 
4838  if (product(ncount) .NE. 1) CALL fatal_error&
4839  & ("NC_WRITE_VAR: NCOUNT dimension invalid while reading scl_flt?")
4840 
4841  ! ARGUMENT TO NF90_PUT_VAR MUST BE A VECTOR
4842  allocate(gvec_flt(1)); gvec_flt(1) = scl_flt
4843  status = nf90_put_var(var%NCID,var%VARID,gvec_flt,nstart,ncount,nstride)
4844  CALL handle_ncerr(status,trim(errmsg))
4845 
4846  deallocate(gvec_flt)
4847  ELSE
4848  status = nf90_put_var(var%NCID,var%VARID,scl_flt)
4849  CALL handle_ncerr(status,trim(errmsg))
4850  END IF
4851  END IF
4852 
4853  NULLIFY(scl_flt)
4854 
4855 !********************************************************************
4856 ! ===== VECTOR FLOATING POINT DATA
4857 !********************************************************************
4858  CASE(case_vec_flt)
4859 
4860  IF(.NOT. ASSOCIATED(var%VEC_FLT))THEN
4861 
4862  IF(ASSOCIATED(var%ARR_FLT))THEN
4863  IF(size(var%ARR_FLT,1)==1) var%VEC_FLT=>var%ARR_FLT(1,1:)
4864  IF(size(var%ARR_FLT,2)==1) var%VEC_FLT=>var%ARR_FLT(1:,1)
4865  ELSE IF(ASSOCIATED(var%CUB_FLT))THEN
4866  IF(size(var%CUB_FLT,1)==1) THEN
4867  IF(size(var%CUB_FLT,2)==1) var%VEC_FLT=>var%CUB_FLT(1,1,1:)
4868  IF(size(var%CUB_FLT,3)==1) var%VEC_FLT=>var%CUB_FLT(1,1:,1)
4869  END IF
4870  IF(size(var%CUB_FLT,1)==2) THEN
4871  IF(size(var%CUB_FLT,3)==1) var%VEC_FLT=>var%CUB_FLT(1:,1,1)
4872  END IF
4873  ELSE
4874 
4875  CALL print_var(var)
4876  CALL fatal_error("NC_WRITE_VAR: Variable objects VEC_FLT data is NOT assocaited!")
4877  END IF
4878  END IF
4879 
4880  nsize=ubound(var%VEC_FLT,1)
4881 
4882  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4883  IF(collectdata) THEN
4884  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4885  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4886  END IF
4887 
4888 
4889  IF (dump) THEN
4890 
4891  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
4892  If(.NOT. collectdata) gvec_flt => var%VEC_FLT(1:rdims(1))
4893 
4894 
4895  status = nf90_put_var(var%NCID,var%VARID,gvec_flt,nstart,ncount,nstride)
4896  CALL handle_ncerr(status,trim(errmsg))
4897 
4898  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
4899  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
4900  IF (collectdata) deallocate(gvec_flt)
4901 
4902  END IF
4903 
4904  nullify(gvec_flt)
4905  nullify(lvec_flt)
4906 
4907 
4908 !********************************************************************
4909 ! ===== ARRAY FLOATING POINT DATA
4910 !********************************************************************
4911  CASE(case_arr_flt)
4912 
4913  IF(.NOT. ASSOCIATED(var%ARR_FLT))THEN
4914 
4915  IF(ASSOCIATED(var%CUB_FLT))THEN
4916  IF(size(var%CUB_FLT,1)==1) var%ARR_FLT=>var%CUB_FLT(1,1:,1:)
4917  IF(size(var%CUB_FLT,2)==1) var%ARR_FLT=>var%CUB_FLT(1:,1,1:)
4918  IF(size(var%CUB_FLT,3)==1) var%ARR_FLT=>var%CUB_FLT(1:,1:,1)
4919  ELSE
4920 
4921  CALL print_var(var)
4922  CALL fatal_error("NC_WRITE_VAR: Variable objects ARR_FLT data is NOT assocaited!")
4923  END IF
4924  END IF
4925 
4926  nsize=ubound(var%ARR_FLT,1)
4927 
4928  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4929  IF(collectdata) THEN
4930  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4931  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4932  END IF
4933 
4934 
4935  IF (dump) THEN
4936 
4937  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
4938  If(.NOT. collectdata) garr_flt => var%ARR_FLT(1:rdims(1),1:rdims(2))
4939 
4940  status = nf90_put_var(var%NCID,var%VARID,garr_flt,nstart,ncount,nstride)
4941  CALL handle_ncerr(status,trim(errmsg))
4942 
4943 
4944  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
4945  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
4946  IF (collectdata) deallocate(garr_flt)
4947 
4948 
4949  END IF
4950 
4951  nullify(larr_flt)
4952  nullify(garr_flt)
4953 
4954 
4955 !********************************************************************
4956 ! ===== CUBE FLOATING POINT DATA
4957 !********************************************************************
4958  CASE(case_cub_flt)
4959 
4960  IF(.NOT. ASSOCIATED(var%cub_FLT))THEN
4961  CALL print_var(var)
4962  CALL fatal_error("NC_WRITE_VAR: Variable objects CUB_FLT data is NOT assocaited!")
4963  END IF
4964 
4965  nsize=ubound(var%CUB_FLT,1)
4966 
4967  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
4968  IF(collectdata) THEN
4969  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
4970  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
4971  END IF
4972 
4973 
4974  IF (dump) THEN
4975 
4976  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
4977  If(.NOT. collectdata) gcub_flt => var%CUB_FLT(1:rdims(1),1:rdims(2),1:rdims(3))
4978 
4979  status = nf90_put_var(var%NCID,var%VARID,gcub_flt,nstart,ncount,nstride)
4980  CALL handle_ncerr(status,trim(errmsg))
4981 
4982  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
4983  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
4984  IF (collectdata) deallocate(gcub_flt)
4985 
4986  END IF
4987 
4988  nullify(lcub_flt)
4989  nullify(gcub_flt)
4990 
4991 
4992 !********************************************************************
4993 ! ===== FOUR DIMENSION ARRAY FLOATING POINT DATA
4994 !********************************************************************
4995  CASE(case_fda_flt)
4996 
4997  IF(.NOT. ASSOCIATED(var%fda_FLT))THEN
4998  CALL print_var(var)
4999  CALL fatal_error("NC_WRITE_VAR: Variable objects FDA_FLT data is NOT assocaited!")
5000  END IF
5001 
5002  nsize=ubound(var%FDA_FLT,1)
5003 
5004  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
5005  IF(collectdata) THEN
5006  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
5007  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5008  END IF
5009 
5010 
5011  IF (dump) THEN
5012 
5013  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
5014  If(.NOT. collectdata) gfda_flt => var%FDA_FLT(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
5015 
5016  status = nf90_put_var(var%NCID,var%VARID,gfda_flt,nstart,ncount,nstride)
5017  CALL handle_ncerr(status,trim(errmsg))
5018 
5019  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
5020  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
5021  IF (collectdata) deallocate(gfda_flt)
5022 
5023  END IF
5024 
5025  nullify(lfda_flt)
5026  nullify(gfda_flt)
5027 
5028 
5029 !********************************************************************
5030 ! ===== SCALAR DOUBLE DATA
5031 !********************************************************************
5032  CASE(case_scl_dbl)
5033 
5034  IF(.NOT. ASSOCIATED(var%SCL_DBL))THEN
5035 
5036  IF(ASSOCIATED(var%VEC_DBL))THEN
5037  IF(size(var%VEC_DBL)==1) var%SCL_DBL=>var%VEC_DBL(1)
5038  ELSE IF(ASSOCIATED(var%ARR_DBL))THEN
5039  IF(size(var%ARR_DBL)==1) var%SCL_DBL=>var%ARR_DBL(1,1)
5040  ELSE IF(ASSOCIATED(var%CUB_DBL))THEN
5041  IF(size(var%CUB_DBL)==1) var%SCL_DBL=>var%CUB_DBL(1,1,1)
5042  ELSE
5043 
5044  CALL print_var(var)
5045  CALL fatal_error("NC_WRITE_VAR: Variable objects SCL_DBL data is NOT assocaited!")
5046  END IF
5047  END IF
5048 
5049  scl_dbl => var%SCL_DBL
5050 
5051  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
5052  IF(collectdata .AND. use_mpi_io_mode) THEN
5053  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
5054  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5055  END IF
5056 
5057  IF (dump) THEN
5058  IF (SIZE(nstart) .GT. 0) THEN
5059 
5060  if (product(ncount) .NE. 1) CALL fatal_error&
5061  & ("NC_WRITE_VAR: NCOUNT dimension invalid while reading scl_dbl?")
5062 
5063  ! ARGUMENT TO NF90_PUT_VAR MUST BE A VECTOR
5064  allocate(gvec_dbl(1)); gvec_dbl(1) = scl_dbl
5065  status = nf90_put_var(var%NCID,var%VARID,gvec_dbl,nstart,ncount,nstride)
5066  CALL handle_ncerr(status,trim(errmsg))
5067 
5068  deallocate(gvec_dbl)
5069  ELSE
5070  status = nf90_put_var(var%NCID,var%VARID,scl_dbl)
5071  CALL handle_ncerr(status,trim(errmsg))
5072  END IF
5073  END IF
5074 
5075  NULLIFY(scl_dbl)
5076 
5077 !********************************************************************
5078 ! ===== VECTOR DOUBLE DATA
5079 !********************************************************************
5080  CASE(case_vec_dbl)
5081 
5082 
5083  IF(.NOT. ASSOCIATED(var%VEC_DBL))THEN
5084 
5085  IF(ASSOCIATED(var%ARR_DBL))THEN
5086  IF(size(var%ARR_DBL,1)==1) var%VEC_DBL=>var%ARR_DBL(1,1:)
5087  IF(size(var%ARR_DBL,2)==1) var%VEC_DBL=>var%ARR_DBL(1:,1)
5088  ELSE IF(ASSOCIATED(var%CUB_DBL))THEN
5089  IF(size(var%CUB_DBL,1)==1) THEN
5090  IF(size(var%CUB_DBL,2)==1) var%VEC_DBL=>var%CUB_DBL(1,1,1:)
5091  IF(size(var%CUB_DBL,3)==1) var%VEC_DBL=>var%CUB_DBL(1,1:,1)
5092  END IF
5093  IF(size(var%CUB_DBL,1)==2) THEN
5094  IF(size(var%CUB_DBL,3)==1) var%VEC_DBL=>var%CUB_DBL(1:,1,1)
5095  END IF
5096  ELSE
5097 
5098  CALL print_var(var)
5099  CALL fatal_error("NC_WRITE_VAR: Variable objects VEC_DBL data is NOT assocaited!")
5100  END IF
5101  END IF
5102 
5103  nsize=ubound(var%VEC_DBL,1)
5104 
5105  IF(collectdata) THEN
5106  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
5107  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5108  END IF
5109 
5110 
5111  IF (dump) THEN
5112 
5113 
5114  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
5115  If(.NOT. collectdata) gvec_dbl => var%VEC_DBL(1:rdims(1))
5116 
5117  status = nf90_put_var(var%NCID,var%VARID,gvec_dbl,nstart,ncount,nstride)
5118  CALL handle_ncerr(status,trim(errmsg))
5119 
5120  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
5121  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
5122  IF (collectdata) deallocate(gvec_dbl)
5123 
5124  END IF
5125 
5126  nullify(gvec_dbl)
5127  nullify(lvec_dbl)
5128 
5129 
5130 !********************************************************************
5131 ! ===== ARRAY DOUBLE DATA
5132 !********************************************************************
5133  CASE(case_arr_dbl)
5134 
5135  IF(.NOT. ASSOCIATED(var%ARR_DBL))THEN
5136 
5137  IF(ASSOCIATED(var%CUB_DBL))THEN
5138  IF(size(var%CUB_DBL,1)==1) var%ARR_DBL=>var%CUB_DBL(1,1:,1:)
5139  IF(size(var%CUB_DBL,2)==1) var%ARR_DBL=>var%CUB_DBL(1:,1,1:)
5140  IF(size(var%CUB_DBL,3)==1) var%ARR_DBL=>var%CUB_DBL(1:,1:,1)
5141  ELSE
5142 
5143  CALL print_var(var)
5144  CALL fatal_error("NC_WRITE_VAR: Variable objects ARR_DBL data is NOT assocaited!")
5145  END IF
5146  END IF
5147 
5148  nsize=ubound(var%ARR_DBL,1)
5149 
5150  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
5151  IF(collectdata) THEN
5152  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
5153  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5154  END IF
5155 
5156 
5157  IF (dump) THEN
5158 
5159  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
5160  If(.NOT. collectdata) garr_dbl => var%ARR_DBL(1:rdims(1),1:rdims(2))
5161 
5162  status = nf90_put_var(var%NCID,var%VARID,garr_dbl,nstart,ncount,nstride)
5163  CALL handle_ncerr(status,trim(errmsg))
5164 
5165  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
5166  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
5167  IF (collectdata) deallocate(garr_dbl)
5168 
5169  END IF
5170 
5171  nullify(larr_dbl)
5172  nullify(garr_dbl)
5173 
5174 !********************************************************************
5175 ! ===== CUBE DOUBLE DATA
5176 !********************************************************************
5177  CASE(case_cub_dbl)
5178 
5179  IF(.NOT. ASSOCIATED(var%CUB_DBL))THEN
5180  CALL print_var(var)
5181  CALL fatal_error("NC_WRITE_VAR: Variable objects CUB_DBL data is NOT assocaited!")
5182  END IF
5183 
5184  nsize=ubound(var%CUB_DBL,1)
5185 
5186  IF(collectdata) THEN
5187  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
5188  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5189  END IF
5190 
5191 
5192  IF (dump) THEN
5193 
5194  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
5195  If(.NOT. collectdata) gcub_dbl => var%CUB_DBL(1:rdims(1),1:rdims(2),1:rdims(3))
5196 
5197  status = nf90_put_var(var%NCID,var%VARID,gcub_dbl,nstart,ncount,nstride)
5198  CALL handle_ncerr(status,trim(errmsg))
5199 
5200  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
5201  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
5202  IF (collectdata) deallocate(gcub_dbl)
5203 
5204  END IF
5205 
5206  nullify(lcub_dbl)
5207  nullify(gcub_dbl)
5208 
5209 !********************************************************************
5210 ! ===== FOUR DIMENSION ARRAY DOUBLE DATA
5211 !********************************************************************
5212  CASE(case_fda_dbl)
5213 
5214  IF(.NOT. ASSOCIATED(var%FDA_DBL))THEN
5215  CALL print_var(var)
5216  CALL fatal_error("NC_WRITE_VAR: Variable objects FDA_DBL data is NOT assocaited!")
5217  END IF
5218 
5219  nsize=ubound(var%FDA_DBL,1)
5220 
5221  IF(collectdata) THEN
5222  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
5223  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5224  END IF
5225 
5226 
5227  IF (dump) THEN
5228 
5229  ! IF YOU ARE THE IOPROC REASSIGN THE POINTER
5230  If(.NOT. collectdata) gfda_dbl => var%FDA_DBL(1:rdims(1),1:rdims(2),1:rdims(3),1:rdims(4))
5231 
5232  status = nf90_put_var(var%NCID,var%VARID,gfda_dbl,nstart,ncount,nstride)
5233  CALL handle_ncerr(status,trim(errmsg))
5234 
5235  ! IF YOU ARE COLLECTING AN DUMPING IN THE SAME PASS
5236  ! DEALLOCATE THE MEMORY YOU COLLECTED INTO
5237  IF (collectdata) deallocate(gfda_dbl)
5238 
5239  END IF
5240 
5241  nullify(lfda_dbl)
5242  nullify(gfda_dbl)
5243 
5244 !********************************************************************
5245 ! ===== SCALAR CHARACTER STRING DATA
5246 !********************************************************************
5247  CASE(case_scl_chr)
5248 
5249  IF(.NOT. ASSOCIATED(var%SCL_CHR))THEN
5250 
5251  IF (ASSOCIATED(var%vec_chr))THEN
5252  IF(SIZE(var%vec_chr)==1) var%scl_chr => var%vec_chr(1)
5253  ELSE
5254 
5255  CALL print_var(var)
5256  CALL fatal_error("NC_WRITE_VAR: Variable objects SCL_CHR data is NOT assocaited!")
5257  END IF
5258  END IF
5259 
5260  scl_chr => var%SCL_CHR
5261 
5262  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
5263  IF(collectdata .AND. use_mpi_io_mode) THEN
5264  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
5265  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5266  END IF
5267 
5268  IF (dump) THEN
5269  ! IF THE STRING IS SMALLER THAN THE DIMENSION
5270  ! AND NCOUNT IS TOO BIG
5271  nsize = len_trim(scl_chr)
5272  IF(nsize < rdims(1)) ncount(1)=nsize
5273 
5274  status = nf90_put_var(var%NCID,var%VARID,scl_chr,nstart,ncount,nstride)
5275  CALL handle_ncerr(status,trim(errmsg))
5276 
5277  END IF
5278 
5279  NULLIFY(scl_chr)
5280 !********************************************************************
5281 ! ===== VECTOR CHARACTER STRING DATA
5282 !********************************************************************
5283  CASE(case_vec_chr)
5284 
5285  IF(.NOT. ASSOCIATED(var%VEC_CHR))THEN
5286  CALL print_var(var)
5287  CALL fatal_error("NC_WRITE_VAR: Variable objects VEC_CH&
5288  &R data is NOT assocaited!")
5289  END IF
5290 
5291  vec_chr => var%VEC_CHR
5292 
5293  ! ONLY COLLECT SCLs IF USING IOPROC: MSR SHOULD ALREADY HAVE THE DATA...
5294  IF(collectdata .AND. use_mpi_io_mode) THEN
5295  CALL fatal_error("NC_WRITE_VAR: COLLECT DATA FLAG IS T&
5296  &RUE BUT THIS IS NOT A MULTIPROCESSOR CASE?")
5297  END IF
5298 
5299  ! WRITING CHARACTER VECTORS IS A PROBLEM
5300  ! THE LENGTH HAS TO BE SET FOR EACH WRITE IN A DO LOOP
5301  ! POINT THE SCL_CHR TO EACH STRING AND DO A SEPERATE WRITE...
5302  IF (dump) THEN
5303 
5304  cnt=SIZE(ncount)
5305  allocate(nstrt(cnt),ncnt(cnt),nstrd(cnt))
5306  nstrt=nstart
5307  ncnt=ncount
5308  nstrd=nstride
5309 
5310 
5311  DO i = 1,rdims(2)
5312 
5313  scl_chr => vec_chr(i)
5314 
5315  ! IF THE STRING IS SMALLER THAN THE DIMENSION
5316  ! AND NCOUNT IS TOO BIG
5317  nsize = len_trim(scl_chr)
5318  IF(nsize < rdims(1))THEN
5319  ncnt(1)=nsize
5320  ELSE
5321  ncnt(1)= rdims(1)
5322  END IF
5323 
5324  ! WRITE THE I'th Entry (one entry)
5325  nstrt(2)=i
5326  ncnt(2)=1
5327 
5328  status = nf90_put_var(var%NCID,var%VARID,scl_chr,nstrt,ncnt,nstrd)
5329  CALL handle_ncerr(status,trim(errmsg))
5330 
5331  nullify(scl_chr)
5332 
5333  END DO
5334  deallocate(nstrt,ncnt,nstrd)
5335 
5336  END IF
5337 
5338  NULLIFY(vec_chr)
5339 
5340  CASE default
5341  call print_var(var)
5342  call fatal_error("NC_WRITE_VAR: UNKNOWN CASE")
5343  END SELECT
5344 
5345  IF(dump) THEN
5346  status = nf90_sync(var%ncid)
5347  CALL handle_ncerr(status,trim(errmsg))
5348  END IF
5349 
5350  !Only deallocate if it is not pointing to Ncount
5351  IF(.not.ASSOCIATED(rdims,ncount)) THEN
5352  IF(ASSOCIATED(rdims)) DEALLOCATE(rdims)
5353  ELSE
5354  NULLIFY(rdims)
5355  END IF
5356 
5357 
5358  IF(PRESENT(iostart)) THEN
5359  nullify(nstart)
5360  ELSE
5361  deallocate(nstart)
5362  END IF
5363 
5364  IF(PRESENT(iocount)) THEN
5365  nullify(ncount)
5366  ELSE
5367  deallocate(ncount)
5368  END IF
5369 
5370  IF(PRESENT(iostride)) THEN
5371  nullify(nstride)
5372  ELSE
5373  deallocate(nstride)
5374  END IF
5375 
5376 
5377 
5378  IF(dbg_set(dbg_sbr)) WRITE(ipt,*) "END NC_WRITE_VAR:"
5379 
logical serial
Definition: mod_main.f90:100
logical msr
Definition: mod_main.f90:101
integer myid
Definition: mod_main.f90:67
logical use_mpi_io_mode
Definition: mod_main.f90:188
logical ioproc
Definition: mod_main.f90:103
Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_att_type()

subroutine mod_nctools::read_att_type ( integer, intent(in)  NCID,
integer, intent(in)  VARID,
type(ncatt), pointer  ATT 
)

Definition at line 907 of file mod_nctools.f90.

907  implicit none
908  integer, intent(in) :: ncid
909  integer, intent(in) :: varid
910  type(ncatt),pointer :: ATT
911  integer len, status
912  CHARACTER(LEN=120) :: errmsg
913  CHARACTER(LEN=4) :: clen
914 
915  if(dbg_set(dbg_sbr)) &
916  & write(ipt,*) "START READ_ATT_TYPE"
917 
918  len=att%LEN
919  write(clen,'(I4.4)') len
920  status = 1
921  select case(att%XTYPE)
922  case(nf90_byte)
923  allocate(att%int(len),stat=status)
924  if(status/=0) CALL fatal_error("READ_ATT_TYPE could not allocate integer("//clen//")")
925  status = nf90_get_att(ncid,varid,&
926  & att%ATTNAME, &
927  & att%int )
928  errmsg="Can not get variable attribute (byte):"&
929  & //trim(att%ATTNAME)
930  call handle_ncerr(status,errmsg)
931 
932  case(nf90_short)
933  allocate(att%int(len),stat=status)
934  if(status/=0) CALL fatal_error("READ_ATT_TYPE could not allocate integer("//clen//")")
935  status = nf90_get_att(ncid,varid,&
936  & att%ATTNAME, &
937  & att%int )
938  errmsg="Can not get variable attribute&
939  & (short):"//trim(att%ATTNAME)
940  call handle_ncerr(status,errmsg)
941 
942  case(nf90_int)
943  allocate(att%int(len),stat=status)
944  if(status/=0) CALL fatal_error("READ_ATT_TYPE could not allocate integer("//clen//")")
945  status = nf90_get_att(ncid,varid,&
946  & att%ATTNAME, &
947  & att%int )
948  errmsg="Can not get variable attribute (int):"&
949  & //trim(att%ATTNAME)
950  call handle_ncerr(status,errmsg)
951 
952  case(nf90_float)
953  allocate(att%flt(len),stat=status)
954  if(status/=0) CALL fatal_error("READ_ATT_TYPE could not allocate float("//clen//")")
955  status = nf90_get_att(ncid,varid,&
956  & att%ATTNAME, &
957  & att%flt )
958  errmsg="Can not get variable attribute&
959  & (float):"//trim(att%ATTNAME)
960  call handle_ncerr(status,errmsg)
961 
962  case(nf90_double)
963  allocate(att%DBL(len),stat=status)
964  if(status/=0) CALL fatal_error("READ_ATT_TYPE could not allocate double("//clen//")")
965  status = nf90_get_att(ncid,varid,&
966  & att%ATTNAME, &
967  & att%dbl )
968  errmsg="Can not get variable attribute (double):"&
969  & //trim(att%ATTNAME)
970  call handle_ncerr(status,errmsg)
971 
972  case(nf90_char)
973 
974  CALL char_att_read_helper(ncid,varid,att%ATTNAME,att%chr,len)
975 
976  case default
977  if(status/=0) CALL fatal_error("READ_ATT_TYPE hit default case: b&
978  &ad att type")
979  end select
980 
981  if(dbg_set(dbg_sbr)) &
982  & write(ipt,*) "END READ_ATT_TYPE"
983 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ recursive_file_bracket()

recursive subroutine mod_nctools::recursive_file_bracket ( type(ncftime), pointer  FTM,
type(time)  NOW,
integer  status 
)

Definition at line 7321 of file mod_nctools.f90.

7321  IMPLICIT NONE
7322  TYPE(NCFTIME), POINTER :: FTM
7323  TYPE(TIME) :: NOW
7324  INTEGER :: STATUS
7325 
7326  REAL(SP) :: DF
7327  INTEGER :: FRAME
7328  TYPE(TIME) :: CTIME
7329 
7330  IF (dbg_set(dbg_sbrio))THEN
7331  WRITE(ipt,*) "%%%%%%%%%%%% RECURSIVE_FILE_BRACK INPUT %%%%%%%%%%%%%%"
7332  CALL print_ftime(ftm)
7333  WRITE(ipt,*) "%%%%%%%%%%%%"
7334  CALL print_real_time(now,ipt,"NOW")
7335  WRITE(ipt,*) "%%%%%%%%%%%% ========================== %%%%%%%%%%%%%%"
7336 
7337  END IF
7338 
7339  ! DO SOME ERROR CHECKING FOR BAD VALUES
7340  IF (ftm%NEXT_STKCNT == ftm%PREV_STKCNT) THEN
7341 
7342  CALL fatal_error("PREVIOUS STKCNT IS EQUAL TO NEXT!")
7343 
7344  ELSE IF (ftm%NEXT_STKCNT < ftm%PREV_STKCNT) THEN
7345 
7346  CALL fatal_error("PREVIOUS STKCNT IS GREATER THAN NEXT!")
7347 
7348  END IF
7349 
7350  IF ( ftm%PREV_IO == ftm%NEXT_IO ) THEN
7351 
7352  CALL fatal_error("IT SEEMS YOUR FILE HAS DUPLICATE TIME VALUES!")
7353 
7354  ELSEIF ( ftm%PREV_IO > ftm%NEXT_IO ) THEN
7355 
7356  CALL fatal_error("IT SEEMS YOUR FILE HAS NONE MONOTONIC TIME!")
7357 
7358  END IF
7359 
7360 
7361  ! DECIDE WHAT TO DO BASED ON THE CURRENT BRACKET!
7362 
7363  ! IF PREV AND NEXT BRACK THE CURRENT VALUE
7364  IF( ftm%PREV_IO < now .AND. now < ftm%NEXT_IO ) THEN
7365 
7366 ! IF (dbg_set(dbg_log)) write(IPT,*) "PREVIOUS AND NEXT BRACKET NOW"
7367 
7368  IF(ftm%NEXT_STKCNT == ftm%PREV_STKCNT+1) THEN
7369 ! IF (dbg_set(dbg_log)) write(IPT,*) "PREVIOUS AND NEXT ARE CONTIGUOUS FRAMES"
7370 
7371  status = 0
7372  RETURN ! WE FOUND IT
7373  END IF
7374 
7375  ! CUT THE FRAME DIFFERENCE IN HALF AND TRY AGAIN
7376  df = ftm%NEXT_STKCNT - ftm%PREV_STKCNT
7377  ! NOTE: DF WILL ALWAYS BE GREATER THAN OR EQUAL TO 2
7378  frame = ftm%PREV_STKCNT + ceiling(df/2.0_sp)
7379  ctime = get_file_time(ftm,frame)
7380 
7381  IF( ctime < now) THEN
7382  ftm%PREV_STKCNT = frame
7383  ftm%PREV_IO = ctime
7384 
7385  CALL recursive_file_bracket(ftm,now,status)
7386  ELSE IF (ctime > now) THEN
7387  ftm%NEXT_STKCNT = frame
7388  ftm%NEXT_IO = ctime
7389 
7390  CALL recursive_file_bracket(ftm,now,status)
7391  ELSE IF (ctime == now) THEN
7392 
7393  ! FRAM CAN NEVER BE EQUAL TO ONE
7394  ! NO NEED TO CHECK
7395 
7396  ftm%PREV_STKCNT = frame-1
7397  ftm%PREV_IO = get_file_time(ftm,frame-1)
7398 
7399  ftm%NEXT_STKCNT = frame
7400  ftm%NEXT_IO = ctime
7401 
7402  status = 0
7403  RETURN
7404 
7405  ELSE
7406  CALL fatal_error("YOU SHOULD NOT BE HERE - I MEAN IT!")
7407  END IF
7408 
7409  ELSE IF( ftm%PREV_IO == now ) THEN
7410 
7411 ! IF (dbg_set(dbg_log)) write(IPT,*) "PREVIOUS EQUAL TO NOW"
7412  ! WE HAVE THE ANSWER
7413  ftm%NEXT_STKCNT = ftm%PREV_STKCNT + 1
7414  ftm%NEXT_IO = get_file_time(ftm,ftm%NEXT_STKCNT)
7415 
7416  status = 0
7417  RETURN
7418 
7419  ELSE IF( ftm%NEXT_IO == now ) THEN
7420 
7421 ! IF (dbg_set(dbg_log)) write(IPT,*) "NEXT EQUAL TO NOW"
7422  ! WE HAVE THE ANSWER
7423  ftm%PREV_STKCNT = ftm%NEXT_STKCNT - 1
7424  ftm%PREV_IO = get_file_time(ftm,ftm%PREV_STKCNT)
7425 
7426  status = 0
7427  RETURN
7428 
7429  ELSE IF( now > ftm%NEXT_IO ) THEN
7430 
7431 ! IF (dbg_set(dbg_log)) write(IPT,*) "NOW GREATER THAN NEXT"
7432 
7433  IF (ftm%NEXT_STKCNT .GE. ftm%STK_LEN) THEN
7434  ! THE TIME EXCEEDS THE FILE TIME
7435  status = 1
7436  return
7437  END IF
7438 
7439  df = (ftm%STK_LEN - ftm%NEXT_STKCNT)
7440  frame = ftm%NEXT_STKCNT + ceiling(df/2.0_sp)
7441  ctime = get_file_time(ftm,frame)
7442 
7443  ! IS THE RESULTANT TIME LESS THAN EQUAL TO OR GREATER THAN NOW?
7444  IF( ctime < now) THEN
7445  ftm%PREV_STKCNT = frame
7446  ftm%PREV_IO = ctime
7447 
7448  ftm%NEXT_STKCNT = ftm%STK_LEN
7449  ftm%NEXT_IO = get_file_time(ftm,ftm%STK_LEN)
7450  CALL recursive_file_bracket(ftm,now,status)
7451 
7452  ELSE IF (ctime > now) THEN
7453 
7454  ftm%PREV_STKCNT = ftm%NEXT_STKCNT
7455  ftm%PREV_IO = ftm%NEXT_IO
7456 
7457  ftm%NEXT_STKCNT = frame
7458  ftm%NEXT_IO = ctime
7459 
7460  CALL recursive_file_bracket(ftm,now,status)
7461 
7462  ELSE IF (ctime == now) THEN
7463  ! WE HAVE THE ANSWER
7464 
7465  ftm%PREV_STKCNT = frame-1
7466  ftm%PREV_IO = get_file_time(ftm,frame-1)
7467 
7468  ftm%NEXT_STKCNT = frame
7469  ftm%NEXT_IO = ctime
7470 
7471  status = 0
7472  RETURN
7473 
7474 
7475  ELSE
7476  CALL fatal_error("YOU SHOULD NOT BE HERE - YOU DON'T LIKE ME, DO YOU!")
7477  END IF
7478 
7479 
7480 
7481  ELSE IF ( ftm%PREV_IO > now) THEN
7482 
7483 ! IF (dbg_set(dbg_log)) write(IPT,*) "PREVIOUS GREATER THAN NOW"
7484 
7485  IF (ftm%PREV_STKCNT .LE. 1) THEN
7486  ! THE TIME PRECEEDS THE FILE TIME
7487  status = -1
7488  return
7489  END IF
7490 
7491  df = (ftm%PREV_STKCNT)
7492  frame = ceiling(df/2.0_sp)
7493  ctime = get_file_time(ftm,frame)
7494 
7495  ! IS THE RESULTANT TIME LESS THAN EQUAL TO OR GREATER THAN NOW?
7496  IF( ctime < now) THEN
7497 
7498  ftm%NEXT_STKCNT = ftm%PREV_STKCNT
7499  ftm%NEXT_IO = ftm%PREV_IO
7500 
7501  ftm%PREV_STKCNT = frame
7502  ftm%PREV_IO = ctime
7503  CALL recursive_file_bracket(ftm,now,status)
7504 
7505  ELSE IF (ctime > now) THEN
7506 
7507  ftm%PREV_STKCNT = 1
7508  ftm%PREV_IO = get_file_time(ftm,1)
7509 
7510  ftm%NEXT_STKCNT = frame
7511  ftm%NEXT_IO = ctime
7512 
7513  CALL recursive_file_bracket(ftm,now,status)
7514 
7515  ELSE IF (ctime == now) THEN
7516  ! WE HAVE THE ANSWER
7517  ftm%PREV_STKCNT = frame
7518  ftm%PREV_IO = ctime
7519 
7520  ftm%NEXT_STKCNT = frame+1
7521  ftm%NEXT_IO = get_file_time(ftm,frame+1)
7522 
7523  status = 0
7524  RETURN
7525 
7526  ELSE
7527 
7528  CALL fatal_error("YOU SHOULD NOT BE HERE - WHY OH WHY")
7529  END IF
7530 
7531  ELSE
7532 
7533  CALL fatal_error("YOU SHOULD NOT BE HERE - THIS ONE IS NOT GOOD EITHER!")
7534  END IF
7535 
7536 
7537 
subroutine print_real_time(mjd, IPT, char, TZONE)
Definition: mod_time.f90:1201
Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_file_stack()

subroutine mod_nctools::set_file_stack ( type(ncfile), pointer  NCF_IN,
type(time)  NOW,
type(time)  INTERVAL 
)

Definition at line 8145 of file mod_nctools.f90.

8145  ! THIS IS A STRICT FILE TIME MATCHING PROGRAM. IT WILL MATCH A
8146  ! TIME IN A EXISTING FILE TO THE NCF WITH THE SAME FILE NAME.
8147  ! IF THE EXACT TIME PASSED DOES NOT EXIST IN THE FILE, IT RETURNS
8148  ! AN ERROR.
8149  IMPLICIT NONE
8150  TYPE(NCFILE), POINTER :: NCF_IN,NCF_TMP
8151  TYPE(TIME) :: Ttest,NOW,INTERVAL
8152  INTEGER :: IDX
8153 
8154  ncf_tmp => new_file()
8155  ncf_tmp%FNAME = ncf_in%FNAME
8156 
8157  Call nc_open(ncf_tmp)
8158  CALL nc_load(ncf_tmp)
8159 
8160  idx = ncf_tmp%FTIME%STK_LEN
8161 
8162  IF(idx == 0) CALL fatal_error&
8163  &("THERE IS NO DATA IN THE FILE:"//trim(ncf_in%FNAME),&
8164  & "(STK_LEN == 0) WHEN THE MODEL CRASHED, SO HOTSTART IS IMPOSSIBLE.",&
8165  & "BETTER LUCK NEXT TIME!")
8166 
8167  ttest = get_file_time(ncf_tmp,idx)
8168 
8169  DO WHILE(ttest > now)
8170 
8171  idx = idx -1
8172  IF(idx ==0) THEN
8173  CALL print_time(now,ipt,"NOW")
8174  CALL print_time(ttest,ipt,"EARLIEST FILE TIME")
8175 
8176  CALL fatal_error&
8177  &("SET_FILE_STACK: SEARCHING FOR TIME IN FILE NAME:",&
8178  & trim(ncf_in%FNAME),&
8179  & "ALL TIMES IN FILE ARE GREATER THAN NOW?")
8180  END IF
8181 
8182  ttest = get_file_time(ncf_tmp,idx)
8183 
8184  END DO
8185 
8186  IF(ttest /= now) THEN
8187  CALL print_time(now,ipt,"NOW")
8188  CALL print_time(ttest,ipt,"NEAREST TIME IN FILE")
8189 
8190  CALL fatal_error&
8191  &("SET_FILE_STACK: SEARCHING FOR TIME IN FILE NAME:",&
8192  & trim(ncf_in%FNAME),&
8193  & "CAN'T FIND EXACT MATCHING TIME IN FILE")
8194  END IF
8195 
8196  CALL kill_file(ncf_tmp)
8197 
8198  ncf_in%FTIME%PREV_STKCNT=idx
8199  ncf_in%FTIME%NEXT_STKCNT=idx+1
8200  ncf_in%FTIME%PREV_IO=ttest
8201  ncf_in%FTIME%NEXT_IO=ttest+interval
8202 
8203 
subroutine print_time(mjd, IPT, char)
Definition: mod_time.f90:1166
Here is the call graph for this function:

◆ set_file_time_type()

integer function mod_nctools::set_file_time_type ( type(ncfile), pointer  NCF)

Definition at line 7822 of file mod_nctools.f90.

7822 ! RETURN VALUES:
7823 ! -1 UNKNOWN TIME VARIABLE TYPE
7824 ! -2 NOT AN IDENTIFABLE TIME VARIABLE FILE
7825 ! 0 SUCESSES!
7826  IMPLICIT NONE
7827  TYPE(NCFILE), pointer :: NCF
7828  TYPE(NCFTIME), POINTER :: FTM
7829  INTEGER :: RES
7830 
7831  type(time) :: TEST
7832  Character(len=80) :: tzone
7833  TYPE(NCDIM), pointer :: DIM
7834  TYPE(NCATT), pointer :: ATT
7835  TYPE(NCVAR), pointer :: VAR1, VAR2
7836  LOGICAL :: FOUND, VALID
7837 
7838  IF(.NOT. ASSOCIATED(ncf)) CALL fatal_error &
7839  & ("SET_FILE_TIME_TYPE: FILE object argument is not assocaited!")
7840 
7841  res = -1
7842 
7843 
7844  IF(ASSOCIATED(ncf%FTIME))THEN
7845  IF(ncf%FTIME%TMTYPE /= tmtype_unknown) THEN
7846  res = 0
7847  RETURN
7848  END IF
7849  END IF
7850 
7851  ! LOOK FOR CHARACTER STRING DATE
7852  var1 => find_var(ncf,'Times',found)
7853  IF (found) THEN
7854 
7855  valid = is_valid_datetime(var1,tzone)
7856  IF (valid) THEN
7857 
7858  ! WE HAVE AN IDENTIFIED TIME VARIABLE FILE
7859  IF(.NOT. ASSOCIATED(ncf%FTIME)) ncf%FTIME=>new_ftime()
7860 
7861 
7862  ! SET THE LEGNTH OF THE TIME DIMENSION
7863  dim => find_dim(var1,'Time',found)
7864  IF (.not. found) dim => find_dim(var1,'time',found)
7865 
7866  IF (.not. found) THEN
7867  CALL print_file(ncf)
7868  CALL print_dim_list(ncf)
7869  CALL fatal_error("SET_FILE_TIME_TYPE: CAN NOT FIND THE TIME DIMENSION")
7870  END IF
7871 
7872  ncf%FTIME%STK_LEN = dim%DIM
7873 
7874  ! COPY THE TIME VARIABLE FOR SPACE TO LOAD IT
7875  ncf%FTIME%TM1 => reference_var(var1)
7876 
7877  ! SET THE TYPE
7878  ncf%FTIME%TMTYPE = tmtype_char_date
7879  ncf%FTIME%TimeZone=tzone
7880 
7881  res = 0
7882 
7883  IF (dim%DIM == 0) THEN
7884  CALL warning("THE NETCDF FILE"//trim(ncf%FNAME),&
7885  & "Has a Time variable but the dimension is zero!")
7886  RETURN
7887  END IF
7888 
7889  if(dbg_set(dbg_io)) write(ipt,*) "Testing get time for file:"//trim(ncf%FNAME)
7890  test=get_file_time(ncf,1)
7891  if(dbg_set(dbg_io)) write(ipt,*) "Test Passed!"
7892  RETURN
7893  ELSE
7894  CALL warning ("SET_FILE_TIME_TYPE: FOUND VARIABLE NAMED: 'Times'&
7895  & BUT IT IS NOT VALID ACCORDING TO IS_VALID_DATETIME")
7896  END IF
7897  END IF
7898 
7899 
7900  ! LOOK FOR 2 INTEGER MODIFIED JULIAN DAY SECOND
7901  var1 => find_var(ncf,'Itime',found)
7902  IF (found) THEN
7903  var2 => find_var(ncf,'Itime2',found)
7904 
7905  IF (found) THEN
7906  valid = is_valid_itime( var1, var2,tzone)
7907 
7908  IF (valid) THEN
7909  ! WE HAVE A TIME VARIABLE FILE
7910  IF(.NOT. ASSOCIATED(ncf%FTIME)) ncf%FTIME=>new_ftime()
7911 
7912  ! SET THE LEGNTH OF THE TIME DIMENSION
7913  dim => find_dim(var1,'time',found)
7914  IF (found) THEN
7915  dim => find_dim(var2,'time',found) ! CHECK BOTH VARIABLES
7916  IF (.not. found) THEN
7917  CALL print_file(ncf)
7918  CALL print_dim_list(ncf)
7919  CALL fatal_error("SET_FILE_TIME_TYPE: CAN NOT FIND THE TIME DIMENSION")
7920  END IF
7921  END IF
7922  ncf%FTIME%STK_LEN = dim%DIM
7923 
7924  ! COPY THE TIME VARIABLE FOR SPACE TO LOAD IT
7925  ncf%FTIME%TM1 => reference_var(var1)
7926  ncf%FTIME%TM2 => reference_var(var2)
7927 
7928  ! SET THE TYPE
7929  ncf%FTIME%TMTYPE = tmtype_int2_mjd
7930 
7931  ncf%FTIME%TimeZone=tzone
7932 
7933  res = 0
7934 
7935  IF (dim%DIM == 0) THEN
7936  CALL warning("THE NETCDF FILE"//trim(ncf%FNAME),&
7937  & "Has a Time variable but the dimension is zero!")
7938  RETURN
7939  END IF
7940 
7941  if(dbg_set(dbg_io)) write(ipt,*) "Testing get time for file:"//trim(ncf%FNAME)
7942  test=get_file_time(ncf,1)
7943  if(dbg_set(dbg_io)) write(ipt,*) "Test Passed!"
7944  RETURN
7945  ELSE
7946  CALL warning ("SET_FILE_TIME_TYPE: FOUND VARIABLE NAMES: Itime&
7947  & and Itime2 BUT THEY ARE NOT VALID ACCORDING TO IS_VALID_ITIME")
7948  END IF
7949 
7950  ELSE
7951  CALL warning ("SET_FILE_TIME_TYPE: FOUND ONLY ONE OF TWO INTEGER TIME VARIABLES?")
7952  END IF
7953  END IF
7954 
7955  ! LOOK FOR FLOATING POINT MODIFIED JULIAN DAY
7956  var1 => find_var(ncf,'time',found)
7957  IF (found) THEN
7958 
7959  IF (is_valid_float_days( var1, tzone) ) THEN
7960  ! WE HAVE A TIME VARIABLE FILE
7961  IF(.NOT. ASSOCIATED(ncf%FTIME)) ncf%FTIME=>new_ftime()
7962 
7963  ! SET THE LEGNTH OF THE TIME DIMENSION
7964  dim => find_dim(var1,'time',found)
7965  IF (.NOT.found) THEN
7966  CALL print_file(ncf)
7967  CALL print_dim_list(ncf)
7968  CALL fatal_error("SET_FILE_TIME_TYPE: CAN NOT FIND THE TIME DIMENSION")
7969  END IF
7970  ncf%FTIME%STK_LEN = dim%DIM
7971 
7972  ! COPY THE TIME VARIABLE FOR SPACE TO LOAD IT
7973  ncf%FTIME%TM1 => reference_var(var1)
7974 
7975  ncf%FTIME%TMTYPE = tmtype_float_days
7976 
7977  ncf%FTIME%TimeZone=tzone
7978 
7979  res = 0
7980 
7981  IF (dim%DIM == 0) THEN
7982  CALL warning("THE NETCDF FILE"//trim(ncf%FNAME),&
7983  & "Has a Time variable but the dimension is zero!")
7984  RETURN
7985  END IF
7986 
7987  if(dbg_set(dbg_io)) write(ipt,*) "Testing get time for file:"//trim(ncf%FNAME)
7988  test=get_file_time(ncf,1)
7989  if(dbg_set(dbg_io)) write(ipt,*) "Test Passed!"
7990  RETURN
7991 
7992  ELSE IF(is_valid_float_seconds( var1, tzone) ) THEN
7993 
7994  ! WE HAVE A TIME VARIABLE FILE
7995  IF(.NOT. ASSOCIATED(ncf%FTIME)) ncf%FTIME=>new_ftime()
7996 
7997  ! SET THE LEGNTH OF THE TIME DIMENSION
7998  dim => find_dim(var1,'time',found)
7999  IF (.NOT.found) THEN
8000  CALL print_file(ncf)
8001  CALL print_dim_list(ncf)
8002  CALL fatal_error("SET_FILE_TIME_TYPE: CAN NOT FIND THE TIME DIMENSION")
8003  END IF
8004  ncf%FTIME%STK_LEN = dim%DIM
8005 
8006  !COPY THE TIME VARIABLE FOR SPACE TO LOAD IT
8007  ncf%FTIME%TM1 => reference_var(var1)
8008 
8009  ncf%FTIME%TMTYPE = tmtype_float_seconds
8010 
8011  ncf%FTIME%TimeZone=tzone
8012 
8013  res = 0
8014  IF (dim%DIM == 0) THEN
8015  CALL warning("THE NETCDF FILE"//trim(ncf%FNAME),&
8016  & "Has a Time variable but the dimension is zero!")
8017  RETURN
8018  END IF
8019 
8020 
8021  if(dbg_set(dbg_io)) write(ipt,*) "Testing get time for file:"//trim(ncf%FNAME)
8022  test=get_file_time(ncf,1)
8023  if(dbg_set(dbg_io)) write(ipt,*) "Test Passed!"
8024  RETURN
8025  ELSE
8026  CALL warning ("SET_FILE_TIME_TYPE: FOUND VARIABLE NAMEd: 'time'&
8027  & BUT IT IS NOT VALID ACCORDING TO IS_VALID_FLOAT_DAYS/SECONDS")
8028  END IF
8029  END IF
8030 
8031 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_datetime()

subroutine mod_nctools::update_datetime ( type(ncvar), pointer  VAR,
type(time), intent(in)  NOW 
)

Definition at line 6848 of file mod_nctools.f90.

6848  IMPLICIT NONE
6849  TYPE(NCVAR), POINTER :: VAR
6850  TYPE(NCATT), POINTER :: ATT
6851  TYPE(TIME), INTENT(in) :: NOW
6852  CHARACTER(len=80), POINTER :: Data
6853  LOGICAL :: TEST
6854  CHARACTER(len=80):: TZONE
6855  CHARACTER(len=80):: TEMP
6856 
6857 
6858  test = is_valid_datetime(var,tzone)
6859  IF(.not. test) THEN
6860  CALL print_var(var)
6861  CALL fatal_error &
6862  ("CAN NOT UPDATE TIME FOR INVALID DATE TIME VARIABLE")
6863  END IF
6864 
6865  CALL nc_point_var(var,data)
6866 
6867  temp = write_datetime(now,timeprec,tzone)
6868  Data = trim(temp)
6869 
character(len=80) function write_datetime(mjdin, prec, TZONE)
Definition: mod_time.f90:682
Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_file_bracket()

subroutine mod_nctools::update_file_bracket ( type(ncfile), pointer  NCF,
type(time)  NOW,
integer  status 
)

Definition at line 7542 of file mod_nctools.f90.

7542  IMPLICIT NONE
7543  TYPE(NCFILE), POINTER:: NCF
7544  TYPE(NCFTIME), POINTER :: FTM
7545  TYPE(TIME) :: NOW
7546 
7547  TYPE(TIME) :: TIMETEST,dtime
7548  REAL(DP) :: denom, numer
7549  INTEGER :: STATUS
7550 
7551  IF(.NOT. ASSOCIATED(ncf)) CALL fatal_error &
7552  & ("UPDATE_FILE_BRACKET: FILE object argument is not assocaited!")
7553 
7554  IF (.NOT. ASSOCIATED(ncf%FTIME)) THEN
7555  CALL print_file(ncf)
7556  CALL fatal_error("UPDATE_FILE_BRACKET: FILE object's FTIME is not assocaited!")
7557  END IF
7558 
7559  ftm => ncf%FTIME
7560 
7561  IF (ftm%STK_LEN == 1) THEN
7562  CALL print_file(ncf)
7563  CALL fatal_error ("FILE BRACKET DOES NOT WORK IF THE TIME DIMENSI&
7564  &ON LENGTH IS ONE!")
7565  END IF
7566 
7567  IF (ftm%NEXT_STKCNT == ftm%PREV_STKCNT .or. &
7568  & ftm%PREV_IO == ftm%NEXT_IO ) THEN
7569 
7570  ftm%NEXT_STKCNT = ftm%STK_LEN
7571  ftm%NEXT_IO = get_file_time(ftm,ftm%STK_LEN)
7572 
7573 
7574  ftm%PREV_STKCNT = 1
7575  ftm%PREV_IO = get_file_time(ftm,1)
7576 
7577  IF(now > ftm%NEXT_IO) THEN
7578  status = 1
7579  RETURN
7580  END IF
7581 
7582 
7583  IF( now < ftm%PREV_IO) THEN
7584  status = -1
7585  RETURN
7586  END IF
7587 
7588  CALL recursive_file_bracket(ftm,now,status)
7589 
7590  END IF
7591 
7592 
7593  ! SET STATUS BASED ON FINDING THE CORRECT FILE TIMES
7594  IF( ftm%PREV_IO < now .AND. now <= ftm%NEXT_IO .AND. &
7595  & ftm%NEXT_STKCNT .EQ. ftm%PREV_STKCNT+1 ) THEN
7596 
7597  status = 0
7598  ! UPDATE THE WEIGHTS AND EXIT
7599 
7600  ELSE IF( ftm%PREV_IO <= now .AND. now < ftm%NEXT_IO .AND. &
7601  & ftm%NEXT_STKCNT .EQ. ftm%PREV_STKCNT+1 ) THEN
7602 
7603  status = 0
7604  ! UPDATE THE WEIGHTS AND EXIT
7605 
7606  ELSE IF( now > ftm%NEXT_IO ) THEN
7607 
7608  !TRY ADVANCING STACK COUNT ONE FIRST
7609 
7610  IF (ftm%NEXT_STKCNT == ftm%STK_LEN) THEN
7611  status =1
7612  RETURN
7613  END IF
7614 
7615  timetest = get_file_time(ftm,ftm%NEXT_STKCNT+1)
7616  IF (timetest >= now) THEN
7617  ftm%PREV_STKCNT = ftm%NEXT_STKCNT
7618  ftm%PREV_IO = ftm%NEXT_IO
7619 
7620  ftm%NEXT_STKCNT = ftm%NEXT_STKCNT +1
7621  ftm%NEXT_IO = timetest
7622 
7623  status = 0
7624 
7625  ELSE
7626  CALL recursive_file_bracket(ftm,now,status)
7627  if (status /= 0) return
7628 
7629  END IF
7630 
7631  ELSE IF ( ftm%PREV_IO > now) THEN
7632 
7633  IF (ftm%PREV_STKCNT == 1) THEN
7634  status = -1
7635  RETURN
7636  END IF
7637 
7638  timetest = get_file_time(ftm,ftm%PREV_STKCNT-1)
7639  IF (timetest <= now) THEN
7640  ftm%NEXT_STKCNT = ftm%PREV_STKCNT
7641  ftm%NEXT_IO = ftm%PREV_IO
7642 
7643  ftm%PREV_STKCNT = ftm%PREV_STKCNT-1
7644  ftm%PREV_IO = timetest
7645 
7646  status = 0
7647 
7648  ELSE
7649 
7650  CALL recursive_file_bracket(ftm,now,status)
7651  if (status /= 0) return
7652 
7653  END IF
7654 
7655  ELSE
7656  CALL fatal_error &
7657  & ("And you may ask yourself", &
7658  & "How do I work this?", &
7659  & "And you may ask yourself" , &
7660  & "Where is that fvcom manual? - The Talking Heads")
7661  END IF
7662 
7663  ! NOW SET THE WGHT VALUES
7664 
7665  ! CALCULATE THE TIME DIFFERENCE IN MICROSECONDS AND CONVERT TO
7666  ! DOUBLE THEN DIVIDE BY ONE MILLION
7667  ! dtime = NOW - FTM%PREV_IO
7668  ! NUMER = REAL((dtime%MuSod + MUSPD * dtime%MJD), DP)/1000000.0_DP
7669 
7670  ! NUMER = REAL_TIME_DIFF(NOW,FTM%PREV_IO)
7671  numer = seconds(now - ftm%PREV_IO)
7672 
7673  ! dtime = FTM%NEXT_IO - FTM%PREV_IO
7674  ! DENOM = REAL((dtime%MuSod + MUSPD * dtime%MJD), DP)/1000000.0_DP
7675 
7676  ! DENOM = REAL_TIME_DIFF(FTM%NEXT_IO,FTM%PREV_IO)
7677  denom = seconds(ftm%NEXT_IO - ftm%PREV_IO)
7678 
7679 
7680  ! TAKE THE RATIO IN DOUBLE PRECISION AND CONVERT IF MODEL IS NOT DOUBLE
7681  ftm%NEXT_WGHT = numer/denom
7682 
7683  ftm%PREV_WGHT = 1.0_dp - numer/denom
7684 
7685 
real(dp) function seconds(MJD)
Definition: mod_time.f90:742
Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_float_time()

subroutine mod_nctools::update_float_time ( type(ncvar), pointer  VAR,
type(time), intent(in)  NOW 
)

Definition at line 7268 of file mod_nctools.f90.

7268  IMPLICIT NONE
7269  TYPE(NCVAR), POINTER :: VAR
7270  TYPE(TIME), INTENT(in) :: NOW
7271  REAL(SP), POINTER :: Data
7272  LOGICAL :: TEST
7273  CHARACTER(len=80):: TZONE
7274 
7275  test = is_valid_float_days(var,tzone)
7276  IF(.not. test) THEN
7277  CALL print_var(var)
7278  call print_att_list(var)
7279  CALL fatal_error &
7280  ("CAN NOT UPDATE TIME FOR INVALID FLOATING POINT TIME VARIABLE")
7281  END IF
7282 
7283  CALL nc_point_var(var,data)
7284 
7285  Data = days(now) - days(referencedate)
7286 
real(dp) function days(MJD)
Definition: mod_time.f90:749
Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_itime()

subroutine mod_nctools::update_itime ( type(ncvar), pointer  VAR1,
type(ncvar), pointer  VAR2,
type(time), intent(in)  NOW 
)

Definition at line 7067 of file mod_nctools.f90.

7067  IMPLICIT NONE
7068  TYPE(NCVAR), POINTER :: VAR1
7069  TYPE(NCVAR), POINTER :: VAR2
7070  TYPE(NCATT), POINTER :: ATT
7071  TYPE(TIME), INTENT(in) :: NOW
7072  INTEGER, POINTER :: D1,D2
7073  LOGICAL :: TEST2
7074  INTEGER :: TEST
7075  CHARACTER(len=80):: TZONE
7076 
7077  test2 = is_valid_itime(var1,var2,tzone)
7078  IF(.not. test2) THEN
7079  CALL print_var(var1)
7080  CALL print_var(var2)
7081  CALL fatal_error &
7082  ("CAN NOT UPDATE TIME FOR INVALID INTEGER TIME VARIABLES")
7083  END IF
7084 
7085  CALL nc_point_var(var1,d1)
7086 
7087  CALL nc_point_var(var2,d2)
7088 
7089  test = time2ncitime(now,referencedate,d1,d2)
7090 
7091 ! if(.not. TEST) call fatal_error("That is bad times man!")
7092  if(test==0) call fatal_error("That is bad times man!")
7093  ! THIS SHOULD NEVER HAPPEN?
7094 
real(sp), dimension(:), allocatable, target d1
Definition: mod_main.f90:1116
integer function time2ncitime(MJD, RJD, D, MS)
Definition: mod_time.f90:345
Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_var_bracket()

subroutine mod_nctools::update_var_bracket ( type(ncfile), pointer  NCF,
type(ncvar), pointer  VPREV,
type(ncvar), pointer  VNEXT,
type(time)  NOW,
integer  status,
type(interp_weights), optional, pointer  INTERP 
)

Definition at line 7690 of file mod_nctools.f90.

7690  !
7691  ! RETURN STATUS VALUES:
7692  ! -1 NOW is before the first forcing time
7693  ! 0 The data is current
7694  ! 1 NOW is after the last forcing time
7695  !
7696  !
7697  IMPLICIT NONE
7698  TYPE(NCVAR), POINTER :: VNEXT,VPREV, VTMP
7699  TYPE(TIME) :: NOW
7700  TYPE(NCFILE), POINTER :: NCF
7701  INTEGER :: STATUS
7702  TYPE(INTERP_WEIGHTS),POINTER, OPTIONAL :: INTERP
7703 
7704  REAL(SP), POINTER :: VARRP(:,:),VVECP(:)
7705  TYPE(NCFTIME),POINTER :: FTM
7706 
7707  LOGICAL :: FOUND
7708 
7709 
7710  IF(.not. ASSOCIATED(ncf)) CALL fatal_error&
7711  & ("UPDATE_VAR_BRACKET: FILE OBJECT ARGUMENT IS NOT ASSOCIATED!")
7712 
7713  IF(.not. ASSOCIATED(vnext)) CALL fatal_error&
7714  & ("UPDATE_VAR_BRACKET: FIRST VARIABLE ARGUMENT IS NOT ASSOCIATED!")
7715 
7716  IF(.not. ASSOCIATED(vprev)) CALL fatal_error&
7717  & ("UPDATE_VAR_BRACKET: SECOND VARIABLE ARGUMENT IS NOT ASSOCIATED!")
7718 
7719  IF(PRESENT(interp)) THEN
7720  IF (.not. ASSOCIATED(interp)) CALL fatal_error&
7721  & ("UPDATE_VAR_BRACKET: THE INTERP ARGUMENT IS NOT ASSOCIATED!")
7722  END IF
7723 
7724  NULLIFY(vtmp)
7725 
7726 
7727  IF(.not.ASSOCIATED(vprev%ncid, target = vnext%ncid)) THEN
7728  call print_var(vprev)
7729  call print_var(vnext)
7730  CALL fatal_error ("UPDATE_VAR_BRACKET: ", &
7731  &" VARIABLE ARGUMENTS DO NOT POINT TO THE SAME NETCDF FILE!")
7732  END IF
7733 
7734  IF(.not.ASSOCIATED(vprev%ncid, target = ncf%ncid)) THEN
7735  call print_var(vprev)
7736  call print_file(ncf)
7737  CALL fatal_error ("UPDATE_VAR_BRACKET: ", &
7738  &" VARIABLE ARGUMENTS DOES NOT POINT TO THE NETCDF FILE!")
7739  END IF
7740 
7741 
7742 
7743 
7744  CALL update_file_bracket(ncf,now,status)
7745  if (status /= 0) RETURN
7746 
7747 
7748  ftm => ncf%FTIME
7749 
7750  IF(ftm%NEXT_STKCNT .EQ. vnext%CURR_STKCNT) THEN
7751 
7752  IF(ftm%PREV_STKCNT .NE. vprev%CURR_STKCNT) THEN
7753  CALL nc_read_var(vprev,ftm%PREV_STKCNT)
7754 
7755  IF(PRESENT(interp)) THEN
7756  CALL nc_point_var(vprev,vvecp)
7757  CALL nc_point_var(vprev,varrp)
7758  CALL interp_bilinear_p(varrp,interp,vvecp)
7759  END IF
7760 
7761  ! status = -2
7762  END IF
7763 
7764  ELSE IF (ftm%PREV_STKCNT .EQ. vprev%CURR_STKCNT) THEN
7765  ! NEXT MUST NEED UPDATE
7766  CALL nc_read_var(vnext,ftm%NEXT_STKCNT)
7767  IF(PRESENT(interp)) THEN
7768  CALL nc_point_var(vnext,vvecp)
7769  CALL nc_point_var(vnext,varrp)
7770  CALL interp_bilinear_p(varrp,interp,vvecp)
7771  END IF
7772  ! status = 2
7773 
7774  ELSE ! IF THEY ARE BOTH WRONG: SEE IF WE CAN JUST INCRIMENT BY ONE CNT?
7775 
7776  IF(ftm%PREV_STKCNT .EQ. vnext%CURR_STKCNT) THEN
7777  vtmp => vprev
7778  vprev => vnext
7779  vnext => vtmp
7780  CALL nc_read_var(vnext,ftm%NEXT_STKCNT)
7781  IF(PRESENT(interp)) THEN
7782  CALL nc_point_var(vnext,vvecp)
7783  CALL nc_point_var(vnext,varrp)
7784  CALL interp_bilinear_p(varrp,interp,vvecp)
7785  END IF
7786  ! status = 2
7787  ELSE IF ( ftm%NEXT_STKCNT .EQ. vprev%CURR_STKCNT) THEN
7788  vtmp => vnext
7789  vnext => vprev
7790  vprev => vtmp
7791  CALL nc_read_var(vprev,ftm%PREV_STKCNT)
7792  IF(PRESENT(interp)) THEN
7793  CALL nc_point_var(vprev,vvecp)
7794  CALL nc_point_var(vprev,varrp)
7795  CALL interp_bilinear_p(varrp,interp,vvecp)
7796  END IF
7797  ELSE ! MUST LOAD BOTH FROM THE FILE
7798 
7799  CALL nc_read_var(vnext,ftm%NEXT_STKCNT)
7800 
7801  IF(PRESENT(interp)) THEN
7802  CALL nc_point_var(vnext,vvecp)
7803  CALL nc_point_var(vnext,varrp)
7804  CALL interp_bilinear_p(varrp,interp,vvecp)
7805  END IF
7806 
7807  CALL nc_read_var(vprev,ftm%PREV_STKCNT)
7808 
7809  IF(PRESENT(interp)) THEN
7810  CALL nc_point_var(vprev,vvecp)
7811  CALL nc_point_var(vprev,varrp)
7812  CALL interp_bilinear_p(varrp,interp,vvecp)
7813  END IF
7814 
7815  END IF
7816  END IF
7817 
Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_att_type()

subroutine mod_nctools::write_att_type ( integer, intent(in)  ncid,
integer, intent(in)  varid,
type(ncatt), intent(in)  ATT 
)

Definition at line 1015 of file mod_nctools.f90.

1015  implicit none
1016  integer, intent(in) :: ncid
1017  integer, intent(in) :: varid
1018  TYPE(NCATT), intent(in) :: ATT
1019  integer len, status, I,slen
1020  CHARACTER(LEN=120) :: errmsg
1021 
1022  if(dbg_set(dbg_sbr)) &
1023  & write(ipt,*) "START WRITE_ATT_TYPE"
1024 
1025  len=att%LEN
1026  status=1
1027  select case(att%XTYPE)
1028  case(nf90_byte)
1029  status = nf90_put_att(ncid,varid,&
1030  & att%ATTNAME, &
1031  & att%int )
1032  errmsg="Can not set variable attribute (byte):"&
1033  & //trim(att%ATTNAME)
1034  call handle_ncerr(status,errmsg)
1035 
1036  case(nf90_short)
1037  status = nf90_put_att(ncid,varid,&
1038  & att%ATTNAME, &
1039  & att%int )
1040  errmsg="Can not set variable attribute&
1041  & (short):"//trim(att%ATTNAME)
1042  call handle_ncerr(status,errmsg)
1043 
1044  case(nf90_int)
1045  status = nf90_put_att(ncid,varid,&
1046  & att%ATTNAME, &
1047  & att%int )
1048  errmsg="Can not set variable attribute (int):"&
1049  & //trim(att%ATTNAME)
1050  call handle_ncerr(status,errmsg)
1051 
1052  case(nf90_float)
1053  status = nf90_put_att(ncid,varid,&
1054  & att%ATTNAME, &
1055  & att%flt )
1056  errmsg="Can not set variable attribute&
1057  & (float):"//trim(att%ATTNAME)
1058  call handle_ncerr(status,errmsg)
1059 
1060  case(nf90_double)
1061  status = nf90_put_att(ncid,varid,&
1062  & att%ATTNAME, &
1063  & att%dbl )
1064  errmsg="Can not set variable attribute (double):"&
1065  & //trim(att%ATTNAME)
1066  call handle_ncerr(status,errmsg)
1067 
1068  case(nf90_char)
1069 
1070  slen = 0
1071  DO i = 1,size(att%chr)
1072  slen = slen + len_trim(adjustl(att%chr(i))) + 1
1073  END DO
1074 
1075  CALL char_att_write_helper(ncid,varid, att%ATTNAME,att%chr,slen)
1076 
1077  case default
1078  if(status/=0) CALL fatal_error("WRITE_ATT_TYPE hit default case: b&
1079  &ad att type")
1080  end select
1081 
1082  if(dbg_set(dbg_sbr)) &
1083  & write(ipt,*) "END WRITE_ATT_TYPE"
1084 
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ days_units

character(len=80), parameter mod_nctools::days_units ='days since 0.0'

Definition at line 52 of file mod_nctools.f90.

52  character(len=80), parameter :: days_units ='days since 0.0'

◆ filehead

type(ncfilelist), pointer, save mod_nctools::filehead

Definition at line 203 of file mod_nctools.f90.

203  TYPE(NCFILELIST), POINTER, SAVE :: FILEHEAD

◆ fmat

character(len=80), parameter mod_nctools::fmat ='modified julian day (MJD)'

Definition at line 55 of file mod_nctools.f90.

55  character(len=80), parameter :: fmat ='modified julian day (MJD)'

◆ mjd_units

character(len=80), parameter mod_nctools::mjd_units ='days since 1858-11-17 00:00:00'

Definition at line 53 of file mod_nctools.f90.

53  character(len=80), parameter :: mjd_units ='days since 1858-11-17 00:00:00'

◆ msec_units

character(len=80), parameter mod_nctools::msec_units ='msec since 00:00:00'

Definition at line 54 of file mod_nctools.f90.

54  character(len=80), parameter :: msec_units ='msec since 00:00:00'

◆ rfmat

character(len=80), parameter mod_nctools::rfmat ='defined reference date'

Definition at line 56 of file mod_nctools.f90.

56  character(len=80), parameter :: rfmat ='defined reference date'

◆ seconds_units

character(len=80), parameter mod_nctools::seconds_units ='seconds'

Definition at line 51 of file mod_nctools.f90.

51  character(len=80), parameter :: seconds_units ='seconds'