CNV3D
Back to Applications
Principal Contact Person and Organization (including e-mail address):
Ernesto Bonomi, Head of Geophysics Area, CRS4, Sardinia, Italy
ernesto@crs4.it
Brief Description of Application:
A Post-stack 3D Seismic Depth Migration Code for imaging of inhomogeneous subsurface with a split convolutional approach. The depth extrapolation of the seismic stack is achieved by the convolution with a filter in the space-frequency domain. The filter is designed as an interpolation of 1D filters for a set of reference, constant velocities, choosen by an information-theoretical criterion.
Number of Lines of Code: 2000
Target Platforms and HPF Compilers Used:
IBM SP2, SGI PowerChallenge and SGI/Cray Origin 2000; homogeneous cluster of IBM RS/6000 or SGI workstations; pghpf (The Portland Group, Inc) compiler
Coding Styles (data decompositions, computational methods):
The computational domain is a regular, uniform, rectangular 3D mesh for both the seismic stack in the space-frequency domain and for the velocity model (x,y,z). The BLOCK distribution is adopted for the frequency axis only. The only phase relevant for communications (apart from I/O) is the so-called imaging i.e. a sum over the frequencies. The selection of the reference velocities, which is done once before the migration loop, involve reduce operations related to the calculation of a frequency histogram.
Extrinsic Interfaces Used (and reasons):
F77_LOCAL has been adopted to optimize concurrent operations acting on local data
Please comment on any aspects of the application that might be interesting, including any problems using HPF effectively:
- the memory requirement of the executable is much larger than
simple estimates based on the large multidimensional arrays used in the HPF source (which, in turn, are close to the memory requested by executables compiled by Fortran 90 + MPI calls);
- the single processor performance for most routines or code segments involving pure concurrent operations is disappointing, therefore F77_LOCAL has been used in many cases simply to get a better sequential optimization from the native compiler