Naming Convention
Contents
Naming Convention¶
General guidelines¶
Prefer long variable names;
Do not use the same name for different entities;
Lower case: Fortran keywords, variables, procedures, modules, filenames;
Upper case: preprocessor macros;
Exposed interface must always begin with
sll_
.
Exposed Fortran interface¶
When any SeLaLib Fortran entity is public and exposed to other modules, its name must be chosen according to this rule:
sll_m_[..]
for modules;sll_c_[..]
for abstract classes;sll_t_[..]
for types;sll_s_[..]
for subroutines (not attached to a type);sll_f_[..]
for functions (not attached to a type);sll_i_[..]
for procedure interfaces (defined in an ‘abstract interface’ block).
No strict rule is enforced for private entities in a module.
Nevertheless, we recommend using m_[..]
, c_[..]
, t_[..]
, s_[..]
,
f_[..]
, and i_[..]
where appropriate.
Files and directories¶
SeLaLib is a collection of smaller libraries, each one defined in a separate (sub)directory. Each library may be composed of multiple Fortran modules, and each of these is defined in a separate source file. In order to reflect this logic, we must:
Define one module per file and give both the same name: the module name is
sll_m_[MODNAME]
and the file name issll_m_[MODNAME].F90
;Define one library per (sub)directory and give both the same name: the directory name is
LIBNAME
and the library name issll_[LIBNAME]
;In each (sub)directory define the ‘interface module’
sll_[LIBNAME]
(contained insll_[LIBNAME].F90
) that acts as a unique ‘entry point’ to the library: here we declare all public variables in the library by means of multipleuse sll_m_[MODNAME], only :: [..]
statements, with a very short inline comment about each exposed name.
We note that each (sub)directory in SeLaLib should contain exactly one
‘CMakeLists.txt’ file, and that this file should contain exactly one
‘ADD_LIBRARY(\(\dots\))’ instruction. The compiled library will have name
libsll_[LIBNAME].a
(if static) or libsll_[LIBNAME].so
(if shared).
Simulations¶
SeLaLib simulations are independent of each other, but they naturally depend on many SeLaLib libraries. A simulation usually consists of:
A module containing a new simulation type that is derived from an abstract simulation class (methods exist for initializing from file and running the numerical simulation);
One or more programs that instantiate a simulation object of the new type, initialize it, and run the numerical simulation;
One or more input files.
We define some additional naming conventions that are specific to the simulations:
The simulation name must follow the pattern
SIMNAME = [METHOD]_[DIMC]d[DIMV]v_[EQN]_[COORDS]_[EXTRA]
, whereMETHOD
describes the class of numerical method employed (e.g.pic
for particle-in-cell,sl
for semi-Lagrangian);DIMC
is the number of dimensions in configuration space;DIMV
is the number of dimensions in velocity space;EQN
is the equation that is solved (e.g.adv
for advection,vp
for Vlasov-Poisson,vm
for Vlasov-Maxwell and );COORDS
is the type of coordinates used (e.g.cart
for a Cartesian grid,polar
for a polar grid, andunstr
for an unstructured grid);EXTRA
is an additional description that distinguishes this specific simulation from the others;
The simulation module must be named
sll_m_sim_[SIMNAME]
, and the file containing it must be namedsll_m_sim_[SIMNAME].F90
as usual;The simulation directory must be named
src/simulations/sequential/[SIMNAME]/
for sequential simulations;src/simulations/parallel/[SIMNAME]/
for parallel simulations;
The executable should have name :
Program name is
sim_SIMNAME
;Program file name is
sim_SIMNAME.F90
;Executable name is
sim_SIMNAME
;CTest name (if any) is
sim_SIMNAME
.
Unit tests¶
General guidelines¶
Always test against some a-priori solution, set a tolerance if needed;
Each function in a module should be tested;
If possible, a failing test should indicate the function that originated the error;
Input parameters should be varied across the widest possible admissible range;
Tests execution time should be as short as possible (seconds, not minutes!);
Exactly 1 CTest per module, with name
[MODNAME]
;All files connected to tests should be inside of a library subdirectory called
[LIBNAME]/testing/[MODNAME]/
Naming convention¶
Fortran file name is
test_[TESTNAME].F90
;Fortran program name is
test_[TESTNAME]
;Executable name is
test_[TESTNAME]
;CTest name is
[TESTNAME]
;
NOTE: In the future, only one CTest should exist for each module, and
this CTest may call multiple executables (see guidelines in previous
section); in such a situation we should have [TESTNAME]=[MODNAME]
.