/// <summary> /// /// </summary> /// <returns></returns> protected override int[] ReadShape() { if (initializing) { return(null); } int res; IntPtr len; int[] shape = new int[dimids.Length]; for (int i = 0; i < dimids.Length; i++) { res = NetCDF.nc_inq_dimlen(NcId, dimids[i], out len); NetCDFDataSet.HandleResult(res); shape[i] = (int)len; } if (isPresentedAttrActualShape) { // Actual shape of the variable is in the special attribute // for the NetCDF doesn't support variables like A[0,10] NetCDFDataSet nc = ((NetCDFDataSet)DataSet); NcType type; res = NetCDF.nc_inq_atttype(nc.NcId, varid, AttributeTypeMap.AttributeVarActualShape, out type); if (res == (int)ResultCode.NC_NOERR) { if (type != NcType.NC_INT) { throw new NetCDFException("Reserved attribute " + AttributeTypeMap.AttributeVarActualShape + " has wrong type"); } AttributeTypeMap atm = new AttributeTypeMap(nc.NcId, varid); atm[AttributeTypeMap.AttributeVarActualShape] = typeof(int[]); shape = (int[])nc.ReadNetCdfAttribute(varid, AttributeTypeMap.AttributeVarActualShape, atm); if (shape.Length != Rank) { throw new NetCDFException("Value of reserved attribute " + AttributeTypeMap.AttributeVarActualShape + " has wrong length"); } } else if (res != (int)ResultCode.NC_ENOTATT) { NetCDFDataSet.HandleResult(res); } } return(shape); }