Practical: Working environment
------------------------------ 

 1. Your working directory: cd ~/CG/{nr}  with {nr} = number of your group (01..19)
 
 2. Choose your task: {task} (out of 01 02 03 04 05 06 07 08 09 10 11 12 15)
 
 3. Fetch your skeleton:   cp  ~/CG/skel/cg_{task}.c  . 
 
 4. Add your code, compile, run and test it (correct result?, same as serial result?)
 
 5. If your task works:
    extract your part (from   /*== task_ii begin ==*/  to  /*== task_ii end ==*/ )
    into  cgp{task}.c
 
 6. When all groups have finished, everyone can check the total result with:
    ls -l ../*/cgp*.c
    cat ../00/cgp00.c ../*/cgp01.c  ../*/cgp02.c  ../*/cgp03.c ../*/cgp04.c  ../*/cgp05.c \
        ../*/cgp06.c  ../*/cgp07.c  ../*/cgp08.c  ../*/cgp09.c ../*/cgp10.c  ../*/cgp11.c \
        ../*/cgp12.c  ../00/cgp13.c ../00/cgp14.c ../*/cgp15.c ../00/cgp16.c > cg_all.c
 
    Caution: - duplicate parts must be selected by hand ({nr} instead of *)
             - missing parts may be fetched also from ../source/parts/cgp{task}.c

 7. Compile and run cg_all.c

    - on T3E:
      cc -o cg_all cg_all.c -lm          (compile)
      fpart                              (to look whether there are free CPUs)
      mpirun -np 4 ./cg_all              (run parallel)

    - on many other platforms
      cc -o cg_all cg_all.c -lm -lmpi    (compile)
      mpirun -np 4 ./cg_all              (run parallel)
 
    - on non-MPI platforms:
      cc -Dserial -o cg_all cg_all.c -lm (compile)
      ./cg_all                           (run serial)
 

Practical: Options
------------------ 

Compile-time options [default]:
-Dserial              compile without MPI and without distribution [parallel]
Run-time options [default]:
-m {m}                vertical dimension of physical heat area [4]
-n {n}                horizontal dimension  [4]
-imax {iter_max}      maximum number of iterations in the CG solver [500]
-eps {epsilon}        abort criterion of the solver for residual vector [1e-6]
-twodims              choose 2-dimensional domain decomposition [1-dim]
-mprocs {m_procs}     choose number of processors, vertical, (-twodims needed) 
-nprocs  {n_procs}    and horizontal [given by MPI_Dims_create]
-prtlev  0|1|2|3|4|5  printing and debug level [1]:
                        1 = only || result – exact solution || and partial result matrix
                        2 = and residual norm after each iteration
                        3 = and result of physical heat matrix
                        4 = and all vector and matrix information in 1st iteration
                        5 = and in all iterations

Example: mpirun -np 4 ./cg_all -m 200 -n 200 -twodims