# Mapping of exodus entities onto NetCDF

***If you are using NetCDF-4.5.1 or later, then you can ignore the information in this file.***

The distributed version of netcdf sets the following limits
on dimensions and variables:
 * `#define NC_MAX_DIMS	1024`
 * `#define NC_MAX_VARS	8192`

For use with Exodus, it is recommended that these be increased to:
 * `#define NC_MAX_DIMS  65536`
 * `#define NC_MAX_VARS 524288`

The reason for these increases is due to the mapping of Exodus onto
NetCDF. The sections below show the number of Dimensions (controlled
by NC_MAX_DIMS) and Variables (controlled by NC_MAX_VARS) that are
used in an Exodus file.

## Entities
 * A mesh-entity is an individual node, edge, face, or element.
 * An entity is a set or block consisting of a single mesh-entity type.
 * Each entity can have variables, maps, and attributes which contain an entry per mesh-entity.
 * Each entity has an optional name and a required id (32-bit or 64-bit )which is non-negative.
 * A mesh-entity can be in one and only one entity block,
 * A mesh-entity can be in zero or more entity sets.
 * Currently there is only a single implicit node block containing all nodes in the model.

## Dimensions: (NC_MAX_DIMS)
* There are about 10 standard dimensions in every file.
* plus one for each set plus one if any attributes
* plus two for each block plus one if any attributes
* plus one for each transient variable on an entity (node, node set, element
block, element set, ...)

## Variables: (NC_MAX_VARS)
* There are a few standard dimensions
  * times
  * names of each entity type (block set)
  * ids of each entity type (block set)
  * status of each entity type (block set)
  * #ndim coordinates (1,2,3)

* Each block adds 1 + 2*#attr_on_block + #var_on_block
* Each set adds 2 + 2*#attr_on_set + #var_on_set
* Each sideset add 3 + 2*#attr_on_sset + #var_on_sset
* Each map adds 1

## Example
If we have an exodus file with:
 * Nodes
 * 5 Element blocks
   * 4 transient variables per element block
   * 2 attributes per element block
 * 4 Node Sets
   * Distribution Factors defined on each set
   * 3 transient variables
 * 3 Side Sets
   * Distribution Factors defined on each set
   * 2 transient variables

Then there would be about:
 `10 + 5*(2+1) + 4*(2) + 3*(2) + 1 + 1 + 1 = 42` Dimensions

There would be about:
 `5*(1+2*2+4) + 4*(2+3) + 3*(3+2) + 3*(5+4+3) + 3 + 1 = 120` Variables.

From this, you can see that a moderately complicated model would
quickly overflow the standard values for `NC_MAX_DIMS` and `NC_MAX_VARS`.
