ncfile_get_var_dims Function

public function ncfile_get_var_dims(sf, varname_in, ndims_in, transpose_in) result(dims_out)

get the size of a ulti-dimensional array for all dimensions ndims

Type Bound

t_ncfile

Arguments

Type IntentOptional Attributes Name
class(t_ncfile), intent(inout) :: sf

self

character(len=*), intent(in) :: varname_in

name of the multi-dimensional array (can include "/" for groups)

integer, intent(in) :: ndims_in

number of dimensions in the array

logical, intent(in), optional :: transpose_in

transpose the data array, default is true, because of fortran ordering

Return Value integer, (ndims_in)

size of each dimension of the array


Calls

proc~~ncfile_get_var_dims~~CallsGraph proc~ncfile_get_var_dims t_ncfile%ncfile_get_var_dims proc~mpi_check_single_access mpi_check_single_access proc~ncfile_get_var_dims->proc~mpi_check_single_access proc~ncfile_enter_groups t_ncfile%ncfile_enter_groups proc~ncfile_get_var_dims->proc~ncfile_enter_groups proc~ncfile_enter_groups->proc~mpi_check_single_access proc~ncfile_openfile t_ncfile%ncfile_openfile proc~ncfile_enter_groups->proc~ncfile_openfile proc~ncfile_openfile->proc~mpi_check_single_access

Source Code

  FUNCTION ncfile_get_var_dims(sf,varname_in,ndims_in,transpose_in) RESULT(dims_out)
    ! MODULES
    IMPLICIT NONE
    !-------------------------------------------------------------------------------------------------------------------------------
    ! INPUT VARIABLES
    CHARACTER(LEN=*),INTENT(IN) :: varname_in  !! name of the multi-dimensional array (can include "/" for groups)
    INTEGER,INTENT(IN)          :: ndims_in    !! number of dimensions in the array
    LOGICAL,INTENT(IN),OPTIONAL :: transpose_in !! transpose the data array, default is true, because of fortran ordering
    !-------------------------------------------------------------------------------------------------------------------------------
    ! OUTPUT VARIABLES
    CLASS(t_ncfile),INTENT(INOUT)        :: sf !! self
    INTEGER                              :: dims_out(ndims_in)  !! size of each dimension of the array
    !-------------------------------------------------------------------------------------------------------------------------------
    ! LOCAL VARIABLES
    CHARACTER(LEN=255) :: varname,dimname
    INTEGER :: grpid,varid,ndims_var,dim_ids(1:ndims_in),i
    LOGICAL :: exists,transpose
    !===============================================================================================================================
    CALL mpi_check_single_access()
    IF(PRESENT(transpose_in))THEN
      transpose=transpose_in
    ELSE
      transpose=.TRUE.
    END IF
    CALL sf%enter_groups(varname_in,grpid,varname,exists)
#if NETCDF
    IF(.NOT.exists) CALL sf%handle_error("finding group in '"//TRIM(varname_in)//"'")
    sf%ioError = nf90_INQ_VARID(grpid, TRIM(varname), varid)
    CALL sf%handle_error("finding of variable '"//TRIM(varname_in)//"'")
    sf%ioError = nf90_inquire_variable(grpid,  varid, ndims=ndims_var)
    CALL sf%handle_error("finding ndims & dimids of variable '"//TRIM(varname_in)//"'")
    IF(ndims_var.NE.ndims_in) &
      CALL sf%handle_error("ndims_in not correct for variable '"//TRIM(varname_in)//"'")
    sf%ioError = nf90_inquire_variable(grpid,  varid, dimids=dim_ids)
    DO i=1,ndims_var
      sf%ioError = nf90_inquire_dimension(grpid, dim_ids(i),name=dimname, len=dims_out(i))
      CALL sf%handle_error("finding size of dimension  '"//TRIM(dimname)//"'")
    END DO
    IF(transpose) dims_out=dims_out(ndims_var:1:-1)
#endif /*NETCDF*/
  END FUNCTION ncfile_get_var_dims