\chapter{The EXODUS Database Format} \label{a:exodus} The following code segment reads an EXODUS database. The first segment is the GENESIS database format. \begin{verbatim} C --Open the EXODUS database file NDB = 9 OPEN (UNIT=NDB, ..., STATUS='OLD', FORM='UNFORMATTED') C --Read the title READ (NDB) TITLE C --TITLE - the title of the database (CHARACTER*80) C --Read the database sizing parameters READ (NDB) NUMNP, NDIM, NUMEL, NELBLK, & NUMNPS, LNPSNL, NUMESS, LESSEL, LESSNL, NVERSN C --NUMNP - the number of nodes C --NDIM - the number of coordinates per node C --NUMEL - the number of elements C --NELBLK - the number of element blocks C --NUMNPS - the number of node sets C --LNPSNL - the length of the node sets node list C --NUMESS - the number of side sets C --LESSEL - the length of the side sets element list C --LESSNL - the length of the side sets node list C --NVERSN - the file format version number C --Read the nodal coordinates READ (NDB) ((CORD(INP,I), INP=1,NUMNP), I=1,NDIM) C --Read the element order map (each element must be listed once) READ (NDB) (MAPEL(IEL), IEL=1,NUMEL) \end{verbatim} \newpage \begin{verbatim} C --Read the element blocks DO 100 IEB = 1, NELBLK C --Read the sizing parameters for this element block READ (NDB) IDELB, NUMELB, NUMLNK, NATRIB C --IDELB - the element block identification (must be unique) C --NUMELB - the number of elements in this block C -- (the sum of NUMELB for all blocks must equal NUMEL) C --NUMLNK - the number of nodes defining the connectivity C -- for an element in this block C --NATRIB - the number of element attributes for an element C -- in this block C --Read the connectivity for all elements in this block READ (NDB) ((LINK(J,I), J=1,NUMLNK, I=1,NUMELB) C --Read the attributes for all elements in this block READ (NDB) ((ATRIB(J,I), J=1,NATRIB, I=1,NUMELB) 100 CONTINUE \end{verbatim} \newpage \begin{verbatim} C --Read the node sets READ (NDB) (IDNPS(I), I=1,NUMNPS) C --IDNPS - the ID of each node set READ (NDB) (NNNPS(I), I=1,NUMNPS) C --NNNPS - the number of nodes in each node set READ (NDB) (IXNNPS(I), I=1,NUMNPS) C --IXNNPS - the index of the first node in each node set C -- (in LTNNPS and FACNPS) READ (NDB) (LTNNPS(I), I=1,LNPSNL) C --LTNNPS - the nodes in all the node sets READ (NDB) (FACNPS(I), I=1,LNPSNL) C --FACNPS - the factor for each node in LTNNPS C --Read the side sets READ (NDB) (IDESS(I), I=1,NUMESS) C --IDESS - the ID of each side set READ (NDB) (NEESS(I), I=1,NUMESS) C --NEESS - the number of elements in each side set READ (NDB) (NNESS(I), I=1,NUMESS) C --NNESS - the number of nodes in each side set READ (NDB) (IXEESS(I), I=1,NUMESS) C --IXEESS - the index of the first element in each side set C -- (in LTEESS) READ (NDB) (IXNESS(I), I=1,NUMESS) C --IXNESS - the index of the first node in each side set C -- (in LTNESS and FACESS) READ (NDB) (LTEESS(I), I=1,LESSEL) C --LTEESS - the elements in all the side sets READ (NDB) (LTNESS(I), I=1,LESSNL) C --LTNESS - the nodes in all the side sets READ (NDB) (FACESS(I), I=1,LESSNL) C --FACESS - the factor for each node in LTNESS \end{verbatim} \newpage A valid GENESIS database may end at this point or at any point until the number of variables is read. \begin{verbatim} C --Read the QA header information READ (NDB, END=900) NQAREC C --NQAREC - the number of QA records (must be at least 1) DO 110 IQA = 1, MAX(1,NQAREC) READ (NDB) (QATITL(I,IQA), I=1,4) C --QATITL - the QA title records; each record contains: C -- 1) analysis code name (CHARACTER*8) C -- 2) analysis code qa descriptor (CHARACTER*8) C -- 3) analysis date (CHARACTER*8) C -- 4) analysis time (CHARACTER*8) 110 CONTINUE C --Read the optional header text READ (NDB, END=900) NINFO C --NINFO - the number of information records DO 120 I = 1, NINFO READ (NDB) INFO(I) C --INFO - extra information records (optional) that contain C -- any supportive documentation that the analysis code C -- developer wishes (CHARACTER*80) 120 CONTINUE C --Read the coordinate names READ (NDB, END=900) (NAMECO(I), I=1,NDIM) C --NAMECO - the coordinate names (CHARACTER*8) C --Read the element type names READ (NDB, END=900) (NAMELB(I), I=1,NELBLK) C --NAMELB - the element type names (CHARACTER*8) \end{verbatim} The GENESIS section of the database ends at this point. \newpage \begin{verbatim} C --Read the history, global, nodal, and element variable information READ (NDB, END=900) NVARHI, NVARGL, NVARNP, NVAREL C --NVARHI - the number of history variables C --NVARGL - the number of global variables C --NVARNP - the number of nodal variables C --NVAREL - the number of element variables READ (NDB) & (NAMEHV(I), I=1,NVARHI), & (NAMEGV(I), I=1,NVARGL), & (NAMENV(I), I=1,NVARNP), & (NAMEEV(I), I=1,NVAREL) C --NAMEHI - the history variable names (CHARACTER*8) C --NAMEGV - the global variable names (CHARACTER*8) C --NAMENV - the nodal variable names (CHARACTER*8) C --NAMEEV - the element variable names (CHARACTER*8) READ (NDB) ((ISEVOK(I,J), I=1,NVAREL), J=1,NELBLK) C --ISEVOK - the name truth table for the element blocks; C -- ISEVOK(i,j) refers to variable i of element block j; C -- the value is 0 if and only if data will NOT be output for C -- variable i for element block j (otherwise the value is 1) \end{verbatim} \newpage \begin{verbatim} C --Read the time steps 130 CONTINUE READ (NDB, END=900) TIME, HISTFL C --TIME - the time step value C --HISTFL - the time step type flag: C -- 0.0 for all variables output ("whole" time step) else C -- only history variables output ("history-only" time step) READ (NDB) (VALHV(IVAR), IVAR=1,NVARGL) C --VALHV - the history values for the current time step IF (HISTFL .EQ. 0.0) THEN READ (NDB) (VALGV(IVAR), IVAR=1,NVARGL) C --VALGV - the global values for the current time step DO 140 IVAR = 1, NVARNP READ (NDB) (VALNV(INP,IVAR), INP=1,NUMNP) C --VALNV - the nodal variables at each node C -- for the current time step 140 CONTINUE DO 160 IBLK = 1, NELBLK DO 150 IVAR = 1, NVAREL IF (ISEVOK(IVAR,IBLK) .NE. 0) THEN READ (NDB) (VALEV(IEL,IVAR,IBLK), & IEL=1,NUMELB(IBLK)) C --VALEV - the element variables at each element C -- for the current time step END IF 150 CONTINUE 160 CONTINUE END IF C --Handle time step data GOTO 130 900 CONTINUE C --Handle end of file on database \end{verbatim}