Skip to content

GEM3D/PDFS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Parallel Distance Field Solver (PDFS)

A three dimensional Eikonal equation solver using the parallel Fast Sweeping Method (FSM) that computes the distance field of the given domain. FSM is an iterative algorithm that uses upwind difference scheme for discretization and Gauss-Seidel iterations with alternating sweeping orderings to solve the discretized system.

DOI

Here, the two different versions of the parallel FSM are implemented.

  • Shared Memory: Single GPU (CUDA)

    Requirements:

    • NVIDIA Graphics Processing Unit (GPU)
    • GCC (GNU C Compiler)
    • NVCC (Nvidia CUDA Compiler)
    • Make
  • Hybrid Memory: MPI/OpenACC

    Requirements:

    • Graphics Processing Unit (GPU)
    • C/OpenACC compiler from PGI Group (pgcc)
    • MPI library from Open MPI Project
    • NetCDF4 | HDF5 | SZIP
    • Make

Code Compilation

Execute the make command from within the folder. Change the location of the directories of the libraries accordingly in the Makefile to correctly build the program.

make

Change the log level, default log level INFO.

make log=[NO|ERROR|INFO|DEBUG]

Code Execution

Once you compile the code the binary executable is created within a folder called bin in the same directory. By default the executable is named as PDFS.

  • Single GPU CUDA

      Usage: ./bin/PDFS <filename.vti> <outputPrefix>
      
      filename.vti: VTI input file for the initial distance field
      outputPrefix: Prefix string to be added to the output file
    
  • MPI/OpenACC

      Usage: mpirun -n <nproc> ./bin/PDFS -i <filename.nc> -p <outputPrefix> [--nx <val>] [--ny <val>] [--nz <val>]
      
         -i: input:  filename.nc:  NetCDF4 input file for the initial distance field
         -p: prefix: outputPrefix: Prefix string to be added to the output file
       --nx: Decomposition in x (Optional, default 1)
       --ny: Decomposition in y (Optional, default 1)
       --nz: Decomposition in z (Optional, default 1)
      nproc: (nx * ny * nz)