  =================================
      SMASH Programmer's manual
             version 2.2.0
  =================================

  Programming rules in SMASH
  --------------------------
   1. The programming language is Fortran90/95 with MPI and OpenMP for
      inter-node and intra-node parallelization, respectively.
  
   2. Check your code by diagnostic options of compilers.
        ex) ifort -warn all -check bounds
            gfortran -Wall -fbounds-check
            pgf90 -Minform=inform -Mbounds
  
   3. Use MPI wrappers written in src/parallel.F90 for data communication
      amoung processes. Do not call MPI routines directly. 
  
       MPI_bcast(real(8))     : para_bcastr
       MPI_bcast(integer)     : para_bcasti
       MPI_bcast(character)   : para_bcastc
       MPI_bcast(logical)     : para_bcastl
       MPI_allreduce(real(8)) : para_allreducer
       MPI_allreduce(integer) : para_allreducei
       MPI_allgatherv(real(8)): para_allgathervr
       MPI_sendrecv(real(8))  : para_sendrecvr
  
   4. Use "noMPI" macro in src/parallel.F90 to compile without MPI.
  
   5. Use implicit none and define all variables starting with the letters
      i-n as integers and all others as double presision reals.
  
   6. When you allocate arrays, call "memset" subroutine to count the used
      memory size. When you deallocate them, call "memunset".
  
   7. Use module variables only for parameters, thresholds, and input data.
  
   8. Call "iabort" subroutine with error messages to stop the program .
  
   9. Write subroutines which read input and checkpoint files in fileio.F90.
