******************************************************************** Inheritance Rules A child of an included subunit or unit inherits all functions from the parent, except those for which it has its own implementation. The implementation in the lowest level offspring replaces all implementations that came before. The Config files arbitrate on multiple implementations existing at peer level by specifying ``DEFAULT'' An explicit ``include'' for a particular path in a Config file causes all function implemented in lowest level directory in the path to be selected. An implementation in the problem specific directory of the Simulation unit overrides all implementations elsewhere in the source tree. ****************************************************************** Naming Conventions Units Unit names have their first letter capitalized, for example Grid, Eos, Hydro etc Sub-units Sub-units have composite names that include a full unit name followed by a capitalized word describing the subunit, for example GridMain, GridParticles, HydroMain etc. Every unit has at least one subunit named UnitMain. Sub-units Implementations The directories containing implementations of sub units have the following convention: If there are no implementations of the unit API in any of its child directories, then the current directory name is capilaized, otherwise it is all smallcase. For example in Grid unit the directory "Paramesh 3" is the lowest level directory that has API implementations, so it is capitalized. The directory "paramesh" also has API implementations, but two of its children have more API implementation, so it is all lowercase. Organizational directories These directory are normal unix directories, used for organizational purposes. For example is an organizational directory for all the physics units. All helper and utilities directories are lowercase too, for example directories in various units. Unit API functions: Unit_routineName is the typical format of API function names. The unit name is followed by an underscore. The first word in the remaining part of the name is lowercase and all subsequent words are capitalized. For example, Grid_getPointData, Driver_getDt} etc Private Unit funtions The private functions are named un_routineName, where {un} stands for a short string (usually 2 or 3 letters) derived from the unit name. For example gr_createDomain is a private function in the Grid unit. Kernel functions They are not required to, but encouraged to follow the Private unit function convention. Unit Data modules The main data modules are named Unit_main. For additional data modules, the naming convention is similar to private functions, the unit name is replaced by the short string. There are no such data modules in the current release, but an example would be hy_ppmData, if we needed a data module for the PPM kernel in the Hydro unit. Constants The Constants are mostly defined in the pre-processor format #define CONSTANT_NAME value. They are all uppercase, sometimes multiple words are separated by an underscore. They are avaiable in "name.h" header files Variables The unit-scope variables, defined in Unit_data, begin with "un_'', similar to the convention for private function. For example, gr_myPe and gr_procGrid are variables in the Grid unit. Variables local to a function are not constrained to be named in any specific way. ****************************************************************** Subroutines and Functions Majority of routines are written in Fortran90. Usually a file has only one subroutine, with the same name as that of the file. In rare cases there are functions/routines serving as ancillaries to the major routine in the file. ******************************************************************