/nissa

Nissa Is a Set of SU(N) Algorithms

Primary LanguageC++GNU General Public License v3.0GPL-3.0

     
                           iiii                                                      
                          i::::i                                                     
                           iiii                                                      
                                                                                    
      nnnn  nnnnnnnn     iiiiiii      ssssssssss        ssssssssss      aaaaaaaaaaaaa   
      n:::nn::::::::nn   i:::::i    ss::::::::::s     ss::::::::::s     a::::::::::::a  
      n::::::::::::::nn   i::::i  ss:::::::::::::s  ss:::::::::::::s    aaaaaaaaa:::::a 
      nn:::::::::::::::n  i::::i  s::::::ssss:::::s s::::::ssss:::::s            a::::a 
        n:::::nnnn:::::n  i::::i   s:::::s  ssssss   s:::::s  ssssss      aaaaaaa:::::a 
        n::::n    n::::n  i::::i     s::::::s          s::::::s         aa::::::::::::a 
        n::::n    n::::n  i::::i        s::::::s          s::::::s     a::::aaaa::::::a 
        n::::n    n::::n  i::::i  ssssss   s:::::s  ssssss   s:::::s  a::::a    a:::::a 
        n::::n    n::::n i::::::i s:::::ssss::::::s s:::::ssss::::::s a::::a    a:::::a 
        n::::n    n::::n i::::::i s::::::::::::::s  s::::::::::::::s  a:::::aaaa::::::a 
        n::::n    n::::n i::::::i  s:::::::::::ss    s:::::::::::ss    a::::::::::aa:::a
        nnnnnn    nnnnnn iiiiiiii   sssssssssss       sssssssssss       aaaaaaaaaa  aaaa



Introduction
------------

Nissa Is a Set of SU(3) Algorithm

Creator:       	  Francesco Sanfilippo - fr.sanfilippo@gmail.com

Contributors:	  Mariam Atoui
	  	  Benoit Blossier
		  Nuria Carrasco
		  Silvano Simula

Thread pool ideas, SPI and BGQ optimization taken from M.Kruse work

This project is host at: https://github.com/sunpho84/nissa/


Requirements
------------
-MPI distribution (at the moment also when running on scalar machine).
-Support for threads in the compiler.
-gcc >= 6 or intel compiler
-Autotools >= 1.14 to generate configure and Makefile.
-Bison >=3.0 and flex (see scripts in the config folder).

NB: use the scripts in the "config" folder to install the appropriate versions


Compiling and installing
------------------------

Compilation proceeds as customary in autotools:

	    bash config/bootstrap
	    mkdir build
	    cd build
	    ../configure --help       # to see all flags
	    ../configure              # appending all specific flags
	    make                      # -j N to use N threads

The program have to be compiled with C++ including all the libraries and header necessary 
for MPI. Typically you can use some wrapper of the system compiler to avoid having to pass
all the paths and flags needed by MPI. Pass the name of such compiler wrapper through "MPICXX" 
parameter, e.g: "MPICXX=mpicxx". Optionally, pass the flag needed to activate OpenMP through
CXXFLAGS: if none are passed, they will be guessed.


Structure
---------

The package is divided in various piecese, namely the "library", whose source are 
contained in "src" directory, and various projects and tools. This is the content of the 
various directories:

-doc: in principle this should contain documentation to each and everything, but at the moment
 only notes on some particular routine

-src: contains the library and all the routines common to the various programs (see below)

-tools: simple programs like converters, data check, etc

-projects: programs to perform massive computations

-test: dedicated programs to check the library (inside "nissa" sub-drectory),
 and also input files and reference data to check "tools" and "projects" programs

-work_in_prog: scratch area where to develop new programs


Detailed content of "src" directory:

-base: all the routines needed to initialize and close the package and
 communicate data, use vector, debug and generate random numbers; file 
 "global_variables.cpp" contains also all the variables common to the 
 package

-dirac_operators: dirac operators for twisted mass and staggered regularizations,
 in double and quadruple precisions (tm only)

-geometry: routines to move around on the lattice

-hmc: routines to generate new confs with hybrid monte carlo methods, stout staggered and quenched theories only

-inverters: multi-mass (cgm) and single mass (cg) inverters for twisted mass and staggered 
 Dirac operators, in double and quadruple precisions

-IO: routines to read and write ILDG files and to parse input files, and in general 
 to access to the filesystem

-linalgs: some linear algebra (not much indeed)

-new_types: this contains definitions of types (file: src/new_types/new_types_definitions.h)
 and routines working on new types (see various files, e.g. su3.cpp)     

-operations: routines to make contractions, fourier transform and fft, fix the gauge, smear,
 and compute gauge observables


All the files contained in the "src" directory are compiled and put together in the 
"libissa.a" library, in the main nissa directory. The program that want to use the "nissa"
library should link it and include "nissa.h" (located inside "src").


Copyright
---------

Nissa is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Nissa is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License (that you can find in doc/license)
for more details.