The SMOKE modeling system consists of several core programs (described in Chapter 6, SMOKE Core Programs), several utility programs (described in Chapter 5, SMOKE Utility Tools, and the quality assurance program Smkreport (described in Chapter 7, SMOKE Quality Assurance). The source code for all programs is available in the $SMKROOT/src
SMOKE also uses several libraries for shared functionality. The I/O API and NetCDF libraries were discussed in Chapter 12, Downloading, Installing, and Compiling SMOKE. In addition, SMOKE is distributed with the FileSetAPI library (Section 11.1.1, “FileSetAPI library”), and the EDSS Tools library (Section 11.1.2, “EDSS Tools library”).
$SMK_SUBSYSThis library is used to open multiple I/O API files to avoid the limit of 120 variables per I/O API file. The source code
                  in found in the $SMK_SUBSYS/filesetapiFS_ROOT environment variable), which contains the following source code and Makefiles.
               
$FS_ROOT/appendname.f$FS_ROOT/chkfileset.f$FS_ROOT/chksetdesc.f$FS_ROOT/cleanup.f$FS_ROOT/closeset.f$FS_ROOT/createset.f$FS_ROOT/descset.f$FS_ROOT/Makefile$FS_ROOT/Makeit$FS_ROOT/modfileset.f$FS_ROOT/modmake.inc$FS_ROOT/openset.f$FS_ROOT/promptset.f$FS_ROOT/readset.F$FS_ROOT/SETDECL.EXT$FS_ROOT/writeset.FThe EDSS Tools library is built on the EDSS framework and contains a variety of routines used for accessing I/O API data and
                  other Models-3 conventions. The main directory for the EDSS Tools library is $SMK_SUBSYS/edss_toolsTOOLS_ROOT environment variable. The source code for the EDSS Tools library is in the $TOOLS_ROOT/src
$ETINC/IOCNST3.EXT$ETINC/IOPRVT3.EXT$ETINC/IOSTRG3.EXT$ETLSRC/checkmem.f$ETLSRC/chkgrid.f$ETLSRC/chkint.f$ETLSRC/chkreal.f$ETLSRC/dscm3grd.f$ETLSRC/dscm3lay.f$ETLSRC/flterr.f$ETLSRC/fltrneg.f$ETLSRC/getcfdsc.f$ETLSRC/getfline.f$ETLSRC/getifdsc.f$ETLSRC/getm3epi.f$ETLSRC/getnlist.f$ETLSRC/hdrmiss3.f$ETLSRC/ioapi_grd_size.f$ETLSRC/m3mesg.F$ETLSRC/Makefile$ETLSRC/Makeit$ETLSRC/multunit.f$ETLSRC/nextime.f$ETLSRC/openphys.f$ETLSRC/padnzero.f$ETLSRC/padzero.f$ETLSRC/parsline.f$ETLSRC/polmesg.f$ETLSRC/rd3mask.f$ETLSRC/rdsetmask.f$ETLSRC/unitfac.f$ETLSRC/unitmatch.f$ETDSRC/modgrid.f$ETDSRC/modmake.incThe source code needed for the SMOKE programs is in the $SMKROOT/src
Table 11.1. SMOKE programs and source code directories
| SMOKE Program | Source Code Directory | Environment Variable | 
|---|---|---|
| Cntlmat |  | CL_SRC | 
| Elevpoint |  | PT_SRC | 
| Extractida |  | UT_SRC | 
| Geofac |  | UT_SRC | 
| Grdmat |  | GD_SRC | 
| Grwinven |  | IV_SRC | 
| Invsplit |  | UT_SRC | 
| Laypoint |  | PT_SRC | 
| Metcombine |  | UT_SRC | 
| Metscan |  | UT_SRC | 
| Met4moves |  | MV_SRC | 
| Movesmrg |  | MV_SRC | 
| Mrggrid |  | MG_SRC | 
| Normbeis3 |  | BG_SRC | 
| Pktreduc |  | UT_SRC | 
| Smk2emis |  | UT_SRC | 
| Smkinven |  | IV_SRC | 
| Smkmerge |  | MG_SRC | 
| Smkreport |  | QA_SRC | 
| Spcmat |  | SP_SRC | 
| Surgtool |  | UT_SRC | 
| Temporal |  | TM_SRC | 
| Tmpbeis3 |  | BG_SRC | 
| Uam2ncf |  | UT_SRC | 
There are three additional directories in the $SMKROOT/src
$SMKROOT/src/emmodMD_SRC): Contains modules for shared program variables
                        
$SMKROOT/src/incINC): Contains include files (discussed in Section 11.2, “Include Files”)
                        
$SMKROOT/src/libEL_SRC): Contains source code for the main SMOKE library