get the size of a ulti-dimensional array for all dimensions ndims
| Type | Intent | Optional | 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 |
size of each dimension of the array
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