AWP-ODC GPU

From SCECpedia
Jump to navigationJump to search

Overview

Jun has a CUDA-MPI code more or less ready to explore the full capability. The current code is based on AWP-ODC Fortran version, but restructured to C and CUDA over the last a year or so. The code uses Cerjan et al. boundary method, capable to read partitioned mesh, but no direct MPI-IO for mesh partitioning so far. You have expertise in mesh generation, and are ideal to help us develop the mesh partitioning feature. Technically the IO is the same as we used for Fortran code, but will need to port current Fortran version structure.f to C, the IO in the GPU code is done on CPU side, that means no direct GPU porting is needed for this project.


Software

I put the latest AWP-ODC on kraken:

/lustre/scratch/junz/For_Patrick/AWP-ODC-v2.0
  1. Document is located at /lustre/scratch/junz/For_Patrick/AWP-ODC-v2.0/doc/README, you can start to read and got some idea about what the code looks like.
  2. Source code is located at /lustre/scratch/junz/For_Patrick/AWP-ODC-v2.0/src-v1.1
  3. The mesh I/O is mainly in structure.f. The subroutine "inimesh". We have four options to read the mesh. "readoption=2" is the large scale MPI-IO. And I think your work is to help us translate this part to C code.


Current Progress

  • Translate existing AWP-ODC Fortran mesh reading routines (structure.f) to C


Notes

  • Found bug in original AWP-ODC structure.f, aproximately line 659. The mu/d1 value for one corner was being incorrectly assigned to lam. The corrected version follows:
      ! 8 Corners
      lam(0,0,0)= lam(1,1,1)
      mu(0,0,0)= mu(1,1,1)
      d1(0,0,0)= d1(1,1,1)
C     fixed bug here
      lam(nxt+1,0,0)= lam(nxt,1,1)
      mu(nxt+1,0,0)= mu(nxt,1,1)
      d1(nxt+1,0,0)= d1(nxt,1,1)
C     fixed bug here