/// <summary>
        /// Get mapped netcdf data type for array elements, special case for char[]
        /// </summary>
        /// <param name="array"></param>
        /// <returns></returns>
        private NetCdfDataType GetNetCdfDataType(Array array)
        {
            var type = array.GetType().GetElementType();

            if (type == typeof(char[]))
            {
                return(NetCdfDataType.NC_CHAR);
            }
            return(NetCdfWrapper.GetNetCdf3DataType(type));
        }
        public NetCdfVariable AddVariable(string varName, Type type, NetCdfDimension[] ncDimensions)
        {
            int varId;

            CheckResult(NetCdfWrapper.nc_def_var(id, varName, NetCdfWrapper.GetNetCdf3DataType(type), ncDimensions.Length,
                                                 ncDimensions.Select(d => (int)d).ToArray(), out varId));
            var ncVar = new NetCdfVariable(varId);

            // variable name is unique here, guaranteed by nc_def_var call above
            ncVariableLookupByName.Add(varName, ncVar);
            return(ncVar);
        }