[cig-commits] [commit] devel: fixed three warnings / errors from the gfortran compiler about undefined behavior when aggressive loop vectorization is used by the compiler (026de77)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Wed Apr 9 08:57:25 PDT 2014
Repository : ssh://geoshell/specfem3d_globe
On branch : devel
Link : https://github.com/geodynamics/specfem3d_globe/compare/64e1b38f0c5ebb4056cce0b15d41c0b9f94ab6e5...099a4d330d5b173b21e51ad441f9f429e5d37842
>---------------------------------------------------------------
commit 026de779d7e5d88be0c2d7f504594b682ac0968c
Author: Dimitri Komatitsch <komatitsch at lma.cnrs-mrs.fr>
Date: Tue Apr 8 02:49:31 2014 +0200
fixed three warnings / errors from the gfortran compiler about undefined behavior when aggressive loop vectorization is used by the compiler
>---------------------------------------------------------------
026de779d7e5d88be0c2d7f504594b682ac0968c
src/specfem3D/compute_kernels.F90 | 47 +++++++++++++++++++++++++++++++++---
src/specfem3D/prepare_timerun.f90 | 3 ++-
src/specfem3D/save_kernels.f90 | 43 +++++++++++++++++++++++++--------
src/specfem3D/specfem3D_par.F90 | 8 +++---
src/specfem3D/write_movie_volume.f90 | 21 ++++++++++++----
5 files changed, 97 insertions(+), 25 deletions(-)
diff --git a/src/specfem3D/compute_kernels.F90 b/src/specfem3D/compute_kernels.F90
index 5538bee..bc7740e 100644
--- a/src/specfem3D/compute_kernels.F90
+++ b/src/specfem3D/compute_kernels.F90
@@ -32,13 +32,20 @@
use specfem_par_innercore
use specfem_par_outercore
use specfem_par_movie
+
implicit none
! crust mantle
call compute_kernels_crust_mantle()
! outer core
- call compute_kernels_outer_core()
+ call compute_kernels_outer_core(vector_displ_outer_core,vector_accel_outer_core,b_vector_displ_outer_core, &
+ displ_outer_core,accel_outer_core,b_displ_outer_core,b_accel_outer_core, &
+ rhostore_outer_core,kappavstore_outer_core, &
+ rho_kl_outer_core,alpha_kl_outer_core,beta_kl_outer_core, &
+ xix_outer_core, xiy_outer_core, xiz_outer_core, etax_outer_core, etay_outer_core, etaz_outer_core, &
+ gammax_outer_core, gammay_outer_core, gammaz_outer_core, ibool_outer_core, &
+ nspec_beta_kl_outer_core,deviatoric_outercore)
! inner core
call compute_kernels_inner_core()
@@ -241,16 +248,48 @@
!-------------------------------------------------------------------------------------------------
!
-
- subroutine compute_kernels_outer_core()
+!! DK DK put the list of parameters back here to avoid a warning / error from the gfortran compiler
+!! DK DK about undefined behavior when aggressive loop vectorization is used by the compiler
+ subroutine compute_kernels_outer_core(vector_displ_outer_core,vector_accel_outer_core,b_vector_displ_outer_core, &
+ displ_outer_core,accel_outer_core,b_displ_outer_core,b_accel_outer_core, &
+ rhostore_outer_core,kappavstore_outer_core, &
+ rho_kl_outer_core,alpha_kl_outer_core,beta_kl_outer_core, &
+ xix_outer_core, xiy_outer_core, xiz_outer_core, etax_outer_core, etay_outer_core, etaz_outer_core, &
+ gammax_outer_core, gammay_outer_core, gammaz_outer_core, ibool_outer_core, &
+ nspec_beta_kl_outer_core,deviatoric_outercore)
use constants_solver
use specfem_par,only: deltat,hprime_xx,hprime_yy,hprime_zz,myrank
use specfem_par,only: GPU_MODE,Mesh_pointer
- use specfem_par_outercore
implicit none
+ integer :: nspec_beta_kl_outer_core
+
+ logical :: deviatoric_outercore
+
+ ! velocity potential
+ real(kind=CUSTOM_REAL), dimension(NGLOB_OUTER_CORE) :: displ_outer_core,accel_outer_core
+
+ ! ADJOINT
+ real(kind=CUSTOM_REAL), dimension(NGLOB_OUTER_CORE_ADJOINT) :: b_displ_outer_core,b_accel_outer_core
+
+ real(kind=CUSTOM_REAL), dimension(NDIM,NGLOB_OUTER_CORE_ADJOINT) :: &
+ vector_accel_outer_core,vector_displ_outer_core,b_vector_displ_outer_core
+
+ integer, dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE) :: ibool_outer_core
+
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE) :: &
+ xix_outer_core,xiy_outer_core,xiz_outer_core,&
+ etax_outer_core,etay_outer_core,etaz_outer_core, &
+ gammax_outer_core,gammay_outer_core,gammaz_outer_core
+
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE) :: rhostore_outer_core,kappavstore_outer_core
+
+ ! adjoint kernels
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE_ADJOINT) :: rho_kl_outer_core,alpha_kl_outer_core
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,nspec_beta_kl_outer_core) :: beta_kl_outer_core
+
! local parameters
real(kind=CUSTOM_REAL) :: xixl,xiyl,xizl,etaxl,etayl,etazl,gammaxl,gammayl,gammazl,kappal
real(kind=CUSTOM_REAL) :: tempx1l,tempx2l,tempx3l
diff --git a/src/specfem3D/prepare_timerun.f90 b/src/specfem3D/prepare_timerun.f90
index 25aa9c1..099dbf3 100644
--- a/src/specfem3D/prepare_timerun.f90
+++ b/src/specfem3D/prepare_timerun.f90
@@ -607,7 +607,8 @@
allocate(nu_3dmovie(3,3,npoints_3dmovie),stat=ier)
if( ier /= 0 ) call exit_MPI(myrank,'error allocating nu for 3d movie')
- call write_movie_volume_mesh()
+ call write_movie_volume_mesh(nu_3dmovie,num_ibool_3dmovie,mask_3dmovie,mask_ibool, &
+ muvstore_crust_mantle_3dmovie,npoints_3dmovie)
if(myrank == 0) then
write(IMAIN,*)
diff --git a/src/specfem3D/save_kernels.f90 b/src/specfem3D/save_kernels.f90
index c16d9fb..d32a847 100644
--- a/src/specfem3D/save_kernels.f90
+++ b/src/specfem3D/save_kernels.f90
@@ -27,12 +27,17 @@
subroutine save_kernels()
- use constants_solver,only: SAVE_BOUNDARY_MESH
+ use constants_solver, only: SAVE_BOUNDARY_MESH
- use specfem_par,only: NOISE_TOMOGRAPHY,SIMULATION_TYPE,nrec_local, &
+ use specfem_par, only: NOISE_TOMOGRAPHY,SIMULATION_TYPE,nrec_local, &
APPROXIMATE_HESS_KL,SAVE_REGULAR_KL, &
current_adios_handle,ADIOS_ENABLED,ADIOS_FOR_KERNELS
+ use specfem_par_innercore, only: rhostore_inner_core,muvstore_inner_core,kappavstore_inner_core, &
+ rho_kl_inner_core,alpha_kl_inner_core,beta_kl_inner_core
+
+ use specfem_par_outercore, only: rhostore_outer_core,kappavstore_outer_core,rho_kl_outer_core,alpha_kl_outer_core
+
implicit none
! Open an handler to the ADIOS file in which kernel variables are written.
@@ -56,10 +61,11 @@
endif
! outer core
- call save_kernels_outer_core()
+ call save_kernels_outer_core(rhostore_outer_core,kappavstore_outer_core,rho_kl_outer_core,alpha_kl_outer_core)
! inner core
- call save_kernels_inner_core()
+ call save_kernels_inner_core(rhostore_inner_core,muvstore_inner_core,kappavstore_inner_core, &
+ rho_kl_inner_core,alpha_kl_inner_core,beta_kl_inner_core)
! boundary kernel
if (SAVE_BOUNDARY_MESH) then
@@ -509,19 +515,25 @@
!-------------------------------------------------------------------------------------------------
!
- subroutine save_kernels_outer_core()
+!! DK DK put the list of parameters back here to avoid a warning / error from the gfortran compiler
+!! DK DK about undefined behavior when aggressive loop vectorization is used by the compiler
+ subroutine save_kernels_outer_core(rhostore_outer_core,kappavstore_outer_core,rho_kl_outer_core,alpha_kl_outer_core)
use specfem_par
- use specfem_par_outercore
implicit none
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE) :: rhostore_outer_core,kappavstore_outer_core
+
+ ! adjoint kernels
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE_ADJOINT) :: rho_kl_outer_core,alpha_kl_outer_core
+
! local parameters
real(kind=CUSTOM_REAL):: scale_kl
real(kind=CUSTOM_REAL) :: rhol,kappal,rho_kl,alpha_kl
integer :: ispec,i,j,k
- scale_kl = scale_t/scale_displ * 1.d9
+ scale_kl = scale_t / scale_displ * 1.d9
! outer_core
do ispec = 1, NSPEC_OUTER_CORE
@@ -561,19 +573,30 @@
!-------------------------------------------------------------------------------------------------
!
- subroutine save_kernels_inner_core()
+!! DK DK put the list of parameters back here to avoid a warning / error from the gfortran compiler
+!! DK DK about undefined behavior when aggressive loop vectorization is used by the compiler
+ subroutine save_kernels_inner_core(rhostore_inner_core,muvstore_inner_core,kappavstore_inner_core, &
+ rho_kl_inner_core,alpha_kl_inner_core,beta_kl_inner_core)
use specfem_par
- use specfem_par_innercore
implicit none
+ ! material parameters
+ ! (note: muvstore also needed for attenuation in case of anisotropic inner core)
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_INNER_CORE) :: &
+ rhostore_inner_core,kappavstore_inner_core,muvstore_inner_core
+
+ ! adjoint kernels
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_INNER_CORE_ADJOINT) :: &
+ rho_kl_inner_core,beta_kl_inner_core, alpha_kl_inner_core
+
! local parameters
real(kind=CUSTOM_REAL):: scale_kl
real(kind=CUSTOM_REAL) :: rhol,mul,kappal,rho_kl,alpha_kl,beta_kl
integer :: ispec,i,j,k
- scale_kl = scale_t/scale_displ * 1.d9
+ scale_kl = scale_t / scale_displ * 1.d9
! inner_core
do ispec = 1, NSPEC_INNER_CORE
diff --git a/src/specfem3D/specfem3D_par.F90 b/src/specfem3D/specfem3D_par.F90
index 2557c4f..a728ca6 100644
--- a/src/specfem3D/specfem3D_par.F90
+++ b/src/specfem3D/specfem3D_par.F90
@@ -627,8 +627,7 @@ module specfem_par_outercore
real(kind=CUSTOM_REAL), dimension(NGLOB_OUTER_CORE) :: &
xstore_outer_core,ystore_outer_core,zstore_outer_core
- real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE) :: &
- rhostore_outer_core,kappavstore_outer_core
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE) :: rhostore_outer_core,kappavstore_outer_core
! mass matrix
real(kind=CUSTOM_REAL), dimension(NGLOB_OUTER_CORE), target :: rmass_outer_core
@@ -686,13 +685,12 @@ module specfem_par_outercore
real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLZ,NSPEC2DMAX_YMIN_YMAX_OC) :: jacobian2D_ymin_outer_core,jacobian2D_ymax_outer_core
! adjoint kernels
- real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE_ADJOINT) :: &
- rho_kl_outer_core,alpha_kl_outer_core
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE_ADJOINT) :: rho_kl_outer_core,alpha_kl_outer_core
! check for deviatoric kernel for outer core region
real(kind=CUSTOM_REAL), dimension(:,:,:,:),allocatable :: beta_kl_outer_core
integer :: nspec_beta_kl_outer_core
- logical,parameter:: deviatoric_outercore = .false.
+ logical, parameter :: deviatoric_outercore = .false.
! inner / outer elements outer core region
integer :: num_phase_ispec_outer_core
diff --git a/src/specfem3D/write_movie_volume.f90 b/src/specfem3D/write_movie_volume.f90
index d725f0b..6936aeb 100644
--- a/src/specfem3D/write_movie_volume.f90
+++ b/src/specfem3D/write_movie_volume.f90
@@ -149,16 +149,26 @@
!-------------------------------------------------------------------------------------------------
!
- subroutine write_movie_volume_mesh()
+!! DK DK put the list of parameters back here to avoid a warning / error from the gfortran compiler
+!! DK DK about undefined behavior when aggressive loop vectorization is used by the compiler
+ subroutine write_movie_volume_mesh(nu_3dmovie,num_ibool_3dmovie,mask_3dmovie,mask_ibool, &
+ muvstore_crust_mantle_3dmovie,npoints_3dmovie)
! writes meshfiles to merge with solver snapshots for 3D volume movies. Also computes and outputs
! the rotation matrix nu_3dmovie required to transfer to a geographic coordinate system
use specfem_par
use specfem_par_crustmantle
- use specfem_par_movie
+
implicit none
+ integer :: npoints_3dmovie
+ integer, dimension(NGLOB_CRUST_MANTLE_3DMOVIE) :: num_ibool_3dmovie
+ real(kind=CUSTOM_REAL), dimension(3,3,npoints_3dmovie) :: nu_3dmovie
+ logical, dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_3DMOVIE) :: mask_3dmovie
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_3DMOVIE) :: muvstore_crust_mantle_3dmovie
+ logical, dimension(NGLOB_CRUST_MANTLE_3DMOVIE) :: mask_ibool
+
! local parametes
integer :: ipoints_3dmovie,ispecele,ispec,i,j,k
integer :: iglob,iglob1,iglob2,iglob3,iglob4,iglob5,iglob6,iglob7,iglob8
@@ -176,8 +186,9 @@
iNIT = 1
endif
- ! loops over all elements
ipoints_3dmovie = 0
+
+ ! loops over all elements
do ispec = 1,NSPEC_CRUST_MANTLE
do k = 1,NGLLZ,iNIT
@@ -323,8 +334,7 @@
epsilondev_xx_crust_mantle,epsilondev_yy_crust_mantle,epsilondev_xy_crust_mantle, &
epsilondev_xz_crust_mantle,epsilondev_yz_crust_mantle
- real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_3DMOVIE) :: &
- muvstore_crust_mantle_3dmovie
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_3DMOVIE) :: muvstore_crust_mantle_3dmovie
logical, dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_3DMOVIE) :: mask_3dmovie
@@ -362,6 +372,7 @@
else if(MOVIE_VOLUME_TYPE == 3) then
movie_prefix='P' ! potency, or integral of strain x \mu
endif
+
if(MOVIE_COARSE) then
iNIT = NGLLX-1
else
More information about the CIG-COMMITS
mailing list