[cig-commits] r20040 - in seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER: DATA EXAMPLES/regional_Greece_small/DATA src/create_header_file src/cuda src/meshfem3D src/shared src/specfem3D

joseph.charles at geodynamics.org joseph.charles at geodynamics.org
Fri May 4 04:55:58 PDT 2012


Author: joseph.charles
Date: 2012-05-04 04:55:57 -0700 (Fri, 04 May 2012)
New Revision: 20040

Modified:
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/DATA/Par_file
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/EXAMPLES/regional_Greece_small/DATA/Par_file
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/create_header_file/create_header_file.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/compute_forces_crust_mantle_cuda.cu
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/compute_forces_inner_core_cuda.cu
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/mesh_constants_cuda.h
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/prepare_mesh_constants_cuda.cu
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/finalize_mesher.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/initialize_mesher.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/meshfem3D_models.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/broadcast_compute_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_compute_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_parameter_file.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/save_header_file.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_crust_mantle.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_crust_mantle_Dev.F90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_inner_core.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_inner_core_Dev.F90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/initialize_simulation.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/prepare_timerun.f90
Log:
updates routines for attenuation handling: adds "ATTENUATION_NEW" flag in Par_file for switching between old/new version

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/DATA/Par_file	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/DATA/Par_file	2012-05-04 11:55:57 UTC (rev 20040)
@@ -42,6 +42,7 @@
 GRAVITY                         = .false.
 ROTATION                        = .false.
 ATTENUATION                     = .false.
+ATTENUATION_NEW			= .false.
 
 # absorbing boundary conditions for a regional simulation
 ABSORBING_CONDITIONS            = .true.

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/EXAMPLES/regional_Greece_small/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/EXAMPLES/regional_Greece_small/DATA/Par_file	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/EXAMPLES/regional_Greece_small/DATA/Par_file	2012-05-04 11:55:57 UTC (rev 20040)
@@ -41,7 +41,8 @@
 TOPOGRAPHY                      = .false.
 GRAVITY                         = .false.
 ROTATION                        = .false.
-ATTENUATION                     = .false.
+ATTENUATION                     = .true.
+ATTENUATION_NEW                 = .false.
 
 # absorbing boundary conditions for a regional simulation
 ABSORBING_CONDITIONS            = .true.

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/create_header_file/create_header_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/create_header_file/create_header_file.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/create_header_file/create_header_file.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -54,7 +54,7 @@
           CRUSTAL,ELLIPTICITY,GRAVITY,ONE_CRUST,ROTATION,ISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE, &
           TOPOGRAPHY,OCEANS,MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_COARSE,ATTENUATION_3D, &
           RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
-          SAVE_MESH_FILES,ATTENUATION,CASE_3D, &
+          SAVE_MESH_FILES,ATTENUATION,ATTENUATION_NEW,CASE_3D, &
           ABSORBING_CONDITIONS,INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE,SAVE_FORWARD, &
           OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
           ROTATE_SEISMOGRAMS_RT,HONOR_1D_SPHERICAL_MOHO,WRITE_SEISMOGRAMS_BY_MASTER,&
@@ -127,7 +127,7 @@
          ROTATION,ISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE,TOPOGRAPHY,OCEANS,MOVIE_SURFACE, &
          MOVIE_VOLUME,MOVIE_COARSE,ATTENUATION_3D,RECEIVERS_CAN_BE_BURIED, &
          PRINT_SOURCE_TIME_FUNCTION,SAVE_MESH_FILES, &
-         ATTENUATION,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
+         ATTENUATION,ATTENUATION_NEW,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
          INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE, &
          LOCAL_PATH,LOCAL_TMP_PATH,MODEL, &
          SIMULATION_TYPE,SAVE_FORWARD, &
@@ -182,8 +182,7 @@
 ! create include file for the solver
   call save_header_file(NSPEC,nglob,NEX_XI,NEX_ETA,NPROC,NPROCTOT, &
                   TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
-                  ELLIPTICITY,GRAVITY,ROTATION, &
-                  TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_3D, &
+                  ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D, &
                   ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,NCHUNKS, &
                   INCLUDE_CENTRAL_CUBE,CENTER_LONGITUDE_IN_DEGREES, &
                   CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,NSOURCES,NSTEP,&

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/compute_forces_crust_mantle_cuda.cu
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/compute_forces_crust_mantle_cuda.cu	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/compute_forces_crust_mantle_cuda.cu	2012-05-04 11:55:57 UTC (rev 20040)
@@ -913,6 +913,7 @@
                                           realw* epsilon_trace_over_3,
                                           int SIMULATION_TYPE,
                                           int ATTENUATION,
+                                          int ATTENUATION_NEW,
                                           int USE_ATTENUATION_MIMIC,
                                           realw* one_minus_sum_beta,realw* factor_common,
                                           realw* R_xx, realw* R_yy, realw* R_xy, realw* R_xz, realw* R_yz,
@@ -1030,20 +1031,28 @@
       s_dummyz_loc[tx] = d_displ[iglob*3 + 2];
 #endif
 
-      if( ATTENUATION){
-  // use first order Taylor expansion of displacement for local storage of stresses
-  // at this current time step, to fix attenuation in a consistent way
+      if(ATTENUATION){
+	if(ATTENUATION_NEW){
+	  // takes new routines
+	  // use first order Taylor expansion of displacement for local storage of stresses 
+	  // at this current time step, to fix attenuation in a consistent way
 #ifdef USE_TEXTURES
-  s_dummyx_loc_att[tx] = s_dummyx_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob);
-  s_dummyy_loc_att[tx] = s_dummyy_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob + NGLOB);
-  s_dummyz_loc_att[tx] = s_dummyz_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob + 2*NGLOB);
+	  s_dummyx_loc_att[tx] = s_dummyx_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob);
+	  s_dummyy_loc_att[tx] = s_dummyy_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob + NGLOB);
+	  s_dummyz_loc_att[tx] = s_dummyz_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob + 2*NGLOB);
 #else
-  s_dummyx_loc_att[tx] = s_dummyx_loc[tx] + d_deltat * d_veloc[iglob*3];
-  s_dummyy_loc_att[tx] = s_dummyy_loc[tx] + d_deltat * d_veloc[iglob*3 + 1];
-  s_dummyz_loc_att[tx] = s_dummyz_loc[tx] + d_deltat * d_veloc[iglob*3 + 2];
+	  s_dummyx_loc_att[tx] = s_dummyx_loc[tx] + d_deltat * d_veloc[iglob*3];
+	  s_dummyy_loc_att[tx] = s_dummyy_loc[tx] + d_deltat * d_veloc[iglob*3 + 1];
+	  s_dummyz_loc_att[tx] = s_dummyz_loc[tx] + d_deltat * d_veloc[iglob*3 + 2];
 #endif
+	}
+	else{
+	  // takes old routines
+	  s_dummyx_loc_att[tx] = s_dummyx_loc[tx];
+	  s_dummyy_loc_att[tx] = s_dummyy_loc[tx];
+	  s_dummyz_loc_att[tx] = s_dummyz_loc[tx];
+	}
       }
-
     }
 
 // synchronize all the threads (one thread for each of the NGLL grid points of the
@@ -1712,6 +1721,7 @@
                                   d_epsilon_trace_over_3,
                                   mp->simulation_type,
                                   mp->attenuation,
+                                  mp->attenuation_new,
                                   mp->use_attenuation_mimic,
                                   d_one_minus_sum_beta,d_factor_common,
                                   d_R_xx,d_R_yy,d_R_xy,d_R_xz,d_R_yz,
@@ -1758,6 +1768,7 @@
                                      d_b_epsilon_trace_over_3,
                                      mp->simulation_type,
                                      mp->attenuation,
+                                     mp->attenuation_new,
                                      mp->use_attenuation_mimic,
                                      d_one_minus_sum_beta,d_factor_common,
                                      d_b_R_xx,d_b_R_yy,d_b_R_xy,d_b_R_xz,d_b_R_yz,

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/compute_forces_inner_core_cuda.cu
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/compute_forces_inner_core_cuda.cu	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/compute_forces_inner_core_cuda.cu	2012-05-04 11:55:57 UTC (rev 20040)
@@ -317,6 +317,7 @@
                                         realw* epsilon_trace_over_3,
                                         int SIMULATION_TYPE,
                                         int ATTENUATION,
+                                        int ATTENUATION_NEW,
                                         int USE_ATTENUATION_MIMIC,
                                         realw* one_minus_sum_beta,realw* factor_common,
                                         realw* R_xx, realw* R_yy, realw* R_xy, realw* R_xz, realw* R_yz,
@@ -433,20 +434,28 @@
         s_dummyz_loc[tx] = d_displ[iglob*3 + 2];
 #endif
 
-  if( ATTENUATION ){
-    // use first order Taylor expansion of displacement for local storage of stresses
-    // at this current time step, to fix attenuation in a consistent way
+	if(ATTENUATION){
+	  if(ATTENUATION_NEW){
+	    // takes new routines
+	    // use first order Taylor expansion of displacement for local storage of stresses 
+	    // at this current time step, to fix attenuation in a consistent way
 #ifdef USE_TEXTURES
-    s_dummyx_loc_att[tx] = s_dummyx_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob);
-    s_dummyy_loc_att[tx] = s_dummyy_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob + NGLOB);
-    s_dummyz_loc_att[tx] = s_dummyz_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob + 2*NGLOB);
+	    s_dummyx_loc_att[tx] = s_dummyx_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob);
+	    s_dummyy_loc_att[tx] = s_dummyy_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob + NGLOB);
+	    s_dummyz_loc_att[tx] = s_dummyz_loc[tx] + d_deltat * tex1Dfetch(tex_veloc, iglob + 2*NGLOB);
 #else
-    s_dummyx_loc_att[tx] = s_dummyx_loc[tx] + d_deltat * d_veloc[iglob*3];
-    s_dummyy_loc_att[tx] = s_dummyy_loc[tx] + d_deltat * d_veloc[iglob*3 + 1];
-    s_dummyz_loc_att[tx] = s_dummyz_loc[tx] + d_deltat * d_veloc[iglob*3 + 2];
+	    s_dummyx_loc_att[tx] = s_dummyx_loc[tx] + d_deltat * d_veloc[iglob*3];
+	    s_dummyy_loc_att[tx] = s_dummyy_loc[tx] + d_deltat * d_veloc[iglob*3 + 1];
+	    s_dummyz_loc_att[tx] = s_dummyz_loc[tx] + d_deltat * d_veloc[iglob*3 + 2];
 #endif
-  }
-
+	  }
+	  else{
+	    // takes old routines
+	    s_dummyx_loc_att[tx] = s_dummyx_loc[tx];
+	    s_dummyy_loc_att[tx] = s_dummyy_loc[tx];
+	    s_dummyz_loc_att[tx] = s_dummyz_loc[tx];
+	  }
+	}
       }
     }
 
@@ -679,41 +688,41 @@
       duzdxl_plus_duxdzl = duzdxl + duxdzl;
       duzdyl_plus_duydzl = duzdyl + duydzl;
 
-      if( ATTENUATION ){
-  // temporary variables used for fixing attenuation in a consistent way
+      if(ATTENUATION){
+	// temporary variables used for fixing attenuation in a consistent way
 
-  duxdxl_att = xixl*tempx1l_att + etaxl*tempx2l_att + gammaxl*tempx3l_att;
-  duxdyl_att = xiyl*tempx1l_att + etayl*tempx2l_att + gammayl*tempx3l_att;
-  duxdzl_att = xizl*tempx1l_att + etazl*tempx2l_att + gammazl*tempx3l_att;
+	duxdxl_att = xixl*tempx1l_att + etaxl*tempx2l_att + gammaxl*tempx3l_att;
+	duxdyl_att = xiyl*tempx1l_att + etayl*tempx2l_att + gammayl*tempx3l_att;
+	duxdzl_att = xizl*tempx1l_att + etazl*tempx2l_att + gammazl*tempx3l_att;
 
-  duydxl_att = xixl*tempy1l_att + etaxl*tempy2l_att + gammaxl*tempy3l_att;
-  duydyl_att = xiyl*tempy1l_att + etayl*tempy2l_att + gammayl*tempy3l_att;
-  duydzl_att = xizl*tempy1l_att + etazl*tempy2l_att + gammazl*tempy3l_att;
+	duydxl_att = xixl*tempy1l_att + etaxl*tempy2l_att + gammaxl*tempy3l_att;
+	duydyl_att = xiyl*tempy1l_att + etayl*tempy2l_att + gammayl*tempy3l_att;
+	duydzl_att = xizl*tempy1l_att + etazl*tempy2l_att + gammazl*tempy3l_att;
 
-  duzdxl_att = xixl*tempz1l_att + etaxl*tempz2l_att + gammaxl*tempz3l_att;
-  duzdyl_att = xiyl*tempz1l_att + etayl*tempz2l_att + gammayl*tempz3l_att;
-  duzdzl_att = xizl*tempz1l_att + etazl*tempz2l_att + gammazl*tempz3l_att;
+	duzdxl_att = xixl*tempz1l_att + etaxl*tempz2l_att + gammaxl*tempz3l_att;
+	duzdyl_att = xiyl*tempz1l_att + etayl*tempz2l_att + gammayl*tempz3l_att;
+	duzdzl_att = xizl*tempz1l_att + etazl*tempz2l_att + gammazl*tempz3l_att;
 
-  // precompute some sums to save CPU time
-  duxdyl_plus_duydxl_att = duxdyl_att + duydxl_att;
-  duzdxl_plus_duxdzl_att = duzdxl_att + duxdzl_att;
-  duzdyl_plus_duydzl_att = duzdyl_att + duydzl_att;
+	// precompute some sums to save CPU time
+	duxdyl_plus_duydxl_att = duxdyl_att + duydxl_att;
+	duzdxl_plus_duxdzl_att = duzdxl_att + duxdzl_att;
+	duzdyl_plus_duydzl_att = duzdyl_att + duydzl_att;
 
-  // computes deviatoric strain attenuation and/or for kernel calculations
-  if(COMPUTE_AND_STORE_STRAIN) {
-    realw templ = 0.33333333333333333333f * (duxdxl_att + duydyl_att + duzdzl_att); // 1./3. = 0.33333
+	// computes deviatoric strain attenuation and/or for kernel calculations
+	if(COMPUTE_AND_STORE_STRAIN) {
+	  realw templ = 0.33333333333333333333f * (duxdxl_att + duydyl_att + duzdzl_att); // 1./3. = 0.33333
 
-    // local storage: stresses at this current time step
-    epsilondev_xx_loc = duxdxl_att - templ;
-    epsilondev_yy_loc = duydyl_att - templ;
-    epsilondev_xy_loc = 0.5f * duxdyl_plus_duydxl_att;
-    epsilondev_xz_loc = 0.5f * duzdxl_plus_duxdzl_att;
-    epsilondev_yz_loc = 0.5f * duzdyl_plus_duydzl_att;
+	  // local storage: stresses at this current time step
+	  epsilondev_xx_loc = duxdxl_att - templ;
+	  epsilondev_yy_loc = duydyl_att - templ;
+	  epsilondev_xy_loc = 0.5f * duxdyl_plus_duydxl_att;
+	  epsilondev_xz_loc = 0.5f * duzdxl_plus_duxdzl_att;
+	  epsilondev_yz_loc = 0.5f * duzdyl_plus_duydzl_att;
 
-    if(SIMULATION_TYPE == 3) {
-      epsilon_trace_over_3[tx + working_element*NGLL3] = templ;
-    }
-  }
+	  if(SIMULATION_TYPE == 3) {
+	    epsilon_trace_over_3[tx + working_element*NGLL3] = templ;
+	  }
+	}
       }else{
   // computes deviatoric strain attenuation and/or for kernel calculations
   if(COMPUTE_AND_STORE_STRAIN) {
@@ -1126,6 +1135,7 @@
                                   d_epsilon_trace_over_3,
                                   mp->simulation_type,
                                   mp->attenuation,
+                                  mp->attenuation_new,
                                   mp->use_attenuation_mimic,
                                   d_one_minus_sum_beta,
                                   d_factor_common,
@@ -1171,6 +1181,7 @@
                                      d_b_epsilon_trace_over_3,
                                      mp->simulation_type,
                                      mp->attenuation,
+                                     mp->attenuation_new,
                                      mp->use_attenuation_mimic,
                                      d_one_minus_sum_beta,
                                      d_factor_common,

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/mesh_constants_cuda.h
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/mesh_constants_cuda.h	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/mesh_constants_cuda.h	2012-05-04 11:55:57 UTC (rev 20040)
@@ -460,6 +460,7 @@
   int save_forward;
   int absorbing_conditions;
   int attenuation;
+  int attenuation_new;
   int use_attenuation_mimic;
   int compute_and_store_strain;
   int anisotropic_3D_mantle;

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/prepare_mesh_constants_cuda.cu
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/prepare_mesh_constants_cuda.cu	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/cuda/prepare_mesh_constants_cuda.cu	2012-05-04 11:55:57 UTC (rev 20040)
@@ -208,6 +208,7 @@
                                         int* GRAVITY_f,
                                         int* ROTATION_f,
                                         int* ATTENUATION_f,
+                                        int* ATTENUATION_NEW_f,
                                         int* USE_ATTENUATION_MIMIC_f,
                                         int* COMPUTE_AND_STORE_STRAIN_f,
                                         int* ANISOTROPIC_3D_MANTLE_f,
@@ -261,6 +262,7 @@
   mp->gravity = *GRAVITY_f;
   mp->rotation = *ROTATION_f;
   mp->attenuation = *ATTENUATION_f;
+  mp->attenuation_new = *ATTENUATION_NEW_f;
   mp->use_attenuation_mimic = *USE_ATTENUATION_MIMIC_f;
   mp->compute_and_store_strain = *COMPUTE_AND_STORE_STRAIN_f;
   mp->anisotropic_3D_mantle = *ANISOTROPIC_3D_MANTLE_f;

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/finalize_mesher.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/finalize_mesher.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/finalize_mesher.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -122,8 +122,7 @@
     ! create include file for the solver
     call save_header_file(NSPEC,nglob,NEX_XI,NEX_ETA,NPROC,NPROCTOT, &
                     TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
-                    ELLIPTICITY,GRAVITY,ROTATION, &
-                    TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_3D, &
+                    ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D, &
                     ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,NCHUNKS, &
                     INCLUDE_CENTRAL_CUBE,CENTER_LONGITUDE_IN_DEGREES,&
                     CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,NSOURCES,NSTEP, &

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/initialize_mesher.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/initialize_mesher.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/initialize_mesher.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -81,7 +81,7 @@
           ROTATION,ISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE,TOPOGRAPHY,OCEANS,MOVIE_SURFACE, &
           MOVIE_VOLUME,MOVIE_COARSE,ATTENUATION_3D,RECEIVERS_CAN_BE_BURIED, &
           PRINT_SOURCE_TIME_FUNCTION,SAVE_MESH_FILES, &
-          ATTENUATION,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
+          ATTENUATION,ATTENUATION_NEW,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
           INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE, &
           LOCAL_PATH,LOCAL_TMP_PATH,MODEL, &
           SIMULATION_TYPE,SAVE_FORWARD, &
@@ -135,7 +135,7 @@
                 REFERENCE_1D_MODEL,THREE_D_MODEL,ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS, &
                 HONOR_1D_SPHERICAL_MOHO,CRUSTAL,ONE_CRUST,CASE_3D,TRANSVERSE_ISOTROPY, &
                 ISOTROPIC_3D_MANTLE,ANISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE, &
-                ATTENUATION,ATTENUATION_3D,ANISOTROPIC_INNER_CORE,NOISE_TOMOGRAPHY)
+                ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,ANISOTROPIC_INNER_CORE,NOISE_TOMOGRAPHY)
 
   ! check that the code is running with the requested number of processes
   if(sizeprocs /= NPROCTOT) call exit_MPI(myrank,'wrong number of MPI processes')

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/meshfem3D_models.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/meshfem3D_models.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/meshfem3D/meshfem3D_models.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -435,7 +435,7 @@
 
   logical ISOTROPIC_3D_MANTLE,ANISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE
 
-  logical ATTENUATION,ATTENUATION_3D
+  logical ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D
 
   logical ANISOTROPIC_INNER_CORE
 

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/broadcast_compute_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/broadcast_compute_parameters.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/broadcast_compute_parameters.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -56,7 +56,7 @@
                 REFERENCE_1D_MODEL,THREE_D_MODEL,ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS, &
                 HONOR_1D_SPHERICAL_MOHO,CRUSTAL,ONE_CRUST,CASE_3D,TRANSVERSE_ISOTROPY, &
                 ISOTROPIC_3D_MANTLE,ANISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE, &
-                ATTENUATION,ATTENUATION_3D,ANISOTROPIC_INNER_CORE,NOISE_TOMOGRAPHY)
+                ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,ANISOTROPIC_INNER_CORE,NOISE_TOMOGRAPHY)
 
   implicit none
 
@@ -121,12 +121,12 @@
   logical ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS, &
     HONOR_1D_SPHERICAL_MOHO,CRUSTAL,ONE_CRUST,CASE_3D,TRANSVERSE_ISOTROPY, &
     ISOTROPIC_3D_MANTLE,ANISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE, &
-    ATTENUATION,ATTENUATION_3D,ANISOTROPIC_INNER_CORE
+    ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,ANISOTROPIC_INNER_CORE
 
   ! local parameters
   double precision, dimension(31) :: bcast_double_precision
   integer, dimension(39) :: bcast_integer
-  logical, dimension(35) :: bcast_logical
+  logical, dimension(36) :: bcast_logical
   integer ier
 
   ! master process prepares broadcasting arrays
@@ -157,7 +157,7 @@
             CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,SAVE_ALL_SEISMOS_IN_ONE_FILE, &
             HONOR_1D_SPHERICAL_MOHO,MOVIE_COARSE, &
             OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY,&
-            ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,USE_BINARY_FOR_LARGE_FILE/)
+            ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,USE_BINARY_FOR_LARGE_FILE,ATTENUATION_NEW/)
 
     bcast_double_precision = (/DT,ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,CENTER_LONGITUDE_IN_DEGREES, &
             CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,ROCEAN,RMIDDLE_CRUST, &
@@ -170,7 +170,7 @@
   ! broadcasts the information read on the master to the nodes
   call MPI_BCAST(bcast_integer,39,MPI_INTEGER,0,MPI_COMM_WORLD,ier)
   call MPI_BCAST(bcast_double_precision,31,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier)
-  call MPI_BCAST(bcast_logical,35,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
+  call MPI_BCAST(bcast_logical,36,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
 
   ! broadcasts non-single value parameters
   call MPI_BCAST(LOCAL_PATH,150,MPI_CHARACTER,0,MPI_COMM_WORLD,ier)
@@ -281,6 +281,7 @@
     ROTATE_SEISMOGRAMS_RT= bcast_logical(33)
     WRITE_SEISMOGRAMS_BY_MASTER= bcast_logical(34)
     USE_BINARY_FOR_LARGE_FILE= bcast_logical(35)
+    ATTENUATION_NEW = bcast_logical(36)
 
     ! double precisions
     DT = bcast_double_precision(1)

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_compute_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_compute_parameters.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_compute_parameters.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -43,7 +43,7 @@
                         ROTATION,ISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE,TOPOGRAPHY,OCEANS,MOVIE_SURFACE, &
                         MOVIE_VOLUME,MOVIE_COARSE,ATTENUATION_3D,RECEIVERS_CAN_BE_BURIED, &
                         PRINT_SOURCE_TIME_FUNCTION,SAVE_MESH_FILES, &
-                        ATTENUATION,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
+                        ATTENUATION,ATTENUATION_NEW,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
                         INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE, &
                         LOCAL_PATH,LOCAL_TMP_PATH,MODEL, &
                         SIMULATION_TYPE,SAVE_FORWARD, &
@@ -81,7 +81,7 @@
   logical ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,&
          MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_COARSE, &
          RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
-         SAVE_MESH_FILES,ATTENUATION, &
+         SAVE_MESH_FILES,ATTENUATION,ATTENUATION_NEW, &
          ABSORBING_CONDITIONS,SAVE_FORWARD, &
          OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
          ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,&
@@ -165,7 +165,7 @@
                           ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,&
                           MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_COARSE, &
                           RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
-                          SAVE_MESH_FILES,ATTENUATION,ABSORBING_CONDITIONS,SAVE_FORWARD, &
+                          SAVE_MESH_FILES,ATTENUATION,ATTENUATION_NEW,ABSORBING_CONDITIONS,SAVE_FORWARD, &
                           OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
                           ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,&
                           SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,NOISE_TOMOGRAPHY)
@@ -251,7 +251,7 @@
   call rcp_check_parameters(NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA, &
                         NCHUNKS,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
                         ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES, &
-                        ATTENUATION_3D,ATTENUATION,ABSORBING_CONDITIONS, &
+                        ATTENUATION_3D,ATTENUATION,ATTENUATION_NEW,ABSORBING_CONDITIONS, &
                         INCLUDE_CENTRAL_CUBE,OUTPUT_SEISMOS_SAC_ALPHANUM)
 
   ! check that mesh can be coarsened in depth three or four times
@@ -362,7 +362,7 @@
   subroutine rcp_check_parameters(NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA, &
                         NCHUNKS,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
                         ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES, &
-                        ATTENUATION_3D,ATTENUATION,ABSORBING_CONDITIONS, &
+                        ATTENUATION_3D,ATTENUATION,ATTENUATION_NEW,ABSORBING_CONDITIONS, &
                         INCLUDE_CENTRAL_CUBE,OUTPUT_SEISMOS_SAC_ALPHANUM)
 
   implicit none
@@ -373,7 +373,7 @@
 
   double precision ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES
 
-  logical ATTENUATION_3D,ATTENUATION,ABSORBING_CONDITIONS,&
+  logical ATTENUATION_3D,ATTENUATION,ATTENUATION_NEW,ABSORBING_CONDITIONS,&
         INCLUDE_CENTRAL_CUBE,OUTPUT_SEISMOS_SAC_ALPHANUM
 
 
@@ -399,6 +399,9 @@
   if(ATTENUATION_3D .and. .not. ATTENUATION) &
     stop 'need ATTENUATION to use ATTENUATION_3D'
 
+  if(ATTENUATION_NEW .and. .not. ATTENUATION) &
+    stop 'need ATTENUATION to use ATTENUATION_NEW'
+
   if (OUTPUT_SEISMOS_SAC_ALPHANUM .and. (mod(NTSTEP_BETWEEN_OUTPUT_SEISMOS,5)/=0)) &
     stop 'if OUTPUT_SEISMOS_SAC_ALPHANUM = .true. then NTSTEP_BETWEEN_OUTPUT_SEISMOS must be a multiple of 5, check the Par_file'
 

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_parameter_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_parameter_file.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_parameter_file.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -39,7 +39,7 @@
                                 ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,&
                                 MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_COARSE, &
                                 RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
-                                SAVE_MESH_FILES,ATTENUATION,ABSORBING_CONDITIONS,SAVE_FORWARD, &
+                                SAVE_MESH_FILES,ATTENUATION,ATTENUATION_NEW,ABSORBING_CONDITIONS,SAVE_FORWARD, &
                                 OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
                                 ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,&
                                 SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,NOISE_TOMOGRAPHY)
@@ -63,7 +63,7 @@
   logical ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,&
          MOVIE_SURFACE,MOVIE_VOLUME,MOVIE_COARSE, &
          RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
-         SAVE_MESH_FILES,ATTENUATION, &
+         SAVE_MESH_FILES,ATTENUATION,ATTENUATION_NEW, &
          ABSORBING_CONDITIONS,SAVE_FORWARD, &
          OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
          ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,&
@@ -120,6 +120,8 @@
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ROTATION'
   call read_value_logical(ATTENUATION, 'model.ATTENUATION')
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ATTENUATION'
+  call read_value_logical(ATTENUATION_NEW, 'model.ATTENUATION_NEW')
+  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ATTENUATION_NEW'
   call read_value_logical(ABSORBING_CONDITIONS, 'solver.ABSORBING_CONDITIONS')
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ABSORBING_CONDITIONS'
   ! define the velocity model

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/save_header_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/save_header_file.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/save_header_file.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -29,8 +29,7 @@
 
   subroutine save_header_file(NSPEC,nglob,NEX_XI,NEX_ETA,NPROC,NPROCTOT, &
                         TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
-                        ELLIPTICITY,GRAVITY,ROTATION, &
-                        TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_3D, &
+                        ELLIPTICITY,GRAVITY,TOPOGRAPHY,ROTATION,OCEANS,ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D, &
                         ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,NCHUNKS, &
                         INCLUDE_CENTRAL_CUBE,CENTER_LONGITUDE_IN_DEGREES, &
                         CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,NSOURCES,NSTEP,&
@@ -61,8 +60,7 @@
   integer NEX_XI,NEX_ETA,NPROC,NPROCTOT,NCHUNKS,NSOURCES,NSTEP
 
   logical TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
-          ELLIPTICITY,GRAVITY,ROTATION, &
-          TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_3D,INCLUDE_CENTRAL_CUBE
+       ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,INCLUDE_CENTRAL_CUBE
 
   double precision ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES, &
           CENTER_LONGITUDE_IN_DEGREES,CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH
@@ -360,6 +358,13 @@
   endif
   write(IOUT,*)
 
+  if(ATTENUATION_NEW) then
+    write(IOUT,*) 'logical, parameter :: ATTENUATION_NEW_VAL = .true.'
+  else
+    write(IOUT,*) 'logical, parameter :: ATTENUATION_NEW_VAL = .false.'
+  endif
+  write(IOUT,*)
+
   if(ATTENUATION_3D) then
     write(IOUT,*) 'logical, parameter :: ATTENUATION_3D_VAL = .true.'
   else

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_crust_mantle.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_crust_mantle.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_crust_mantle.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -231,7 +231,7 @@
             tempz3l = tempz3l + displ_crust_mantle(3,iglob)*hp3
           enddo
 
-          if( ATTENUATION_VAL ) then
+          if(ATTENUATION_VAL) then
              ! temporary variables used for fixing attenuation in a consistent way
 
              tempx1l_att = 0._CUSTOM_REAL
@@ -246,40 +246,57 @@
              tempz2l_att = 0._CUSTOM_REAL
              tempz3l_att = 0._CUSTOM_REAL
 
-             ! use first order Taylor expansion of displacement for local storage of stresses
-             ! at this current time step, to fix attenuation in a consistent way
-             do l=1,NGLLX
-                hp1 = hprime_xx(i,l)
-                iglob = ibool(l,j,k,ispec)
-                tempx1l_att = tempx1l_att + &
-                     (displ_crust_mantle(1,iglob) + deltat*veloc_crust_mantle(1,iglob))*hp1
-                tempy1l_att = tempy1l_att + &
-                     (displ_crust_mantle(2,iglob) + deltat*veloc_crust_mantle(2,iglob))*hp1
-                tempz1l_att = tempz1l_att + &
-                     (displ_crust_mantle(3,iglob) + deltat*veloc_crust_mantle(3,iglob))*hp1
+             if(ATTENUATION_NEW_VAL) then
+                ! takes new routines
+                ! use first order Taylor expansion of displacement for local storage of stresses 
+                ! at this current time step, to fix attenuation in a consistent way
+                do l=1,NGLLX
+                   hp1 = hprime_xx(i,l)
+                   iglob = ibool(l,j,k,ispec)
+                   tempx1l_att = tempx1l_att + &
+                        (displ_crust_mantle(1,iglob) + deltat*veloc_crust_mantle(1,iglob))*hp1
+                   tempy1l_att = tempy1l_att + &
+                        (displ_crust_mantle(2,iglob) + deltat*veloc_crust_mantle(2,iglob))*hp1
+                   tempz1l_att = tempz1l_att + &
+                        (displ_crust_mantle(3,iglob) + deltat*veloc_crust_mantle(3,iglob))*hp1
+
 !!! can merge these loops because NGLLX = NGLLY = NGLLZ          enddo
 
 !!! can merge these loops because NGLLX = NGLLY = NGLLZ          do l=1,NGLLY
-                hp2 = hprime_yy(j,l)
-                iglob = ibool(i,l,k,ispec)
-                tempx2l_att = tempx2l_att + &
-                     (displ_crust_mantle(1,iglob) + deltat*veloc_crust_mantle(1,iglob))*hp2
-                tempy2l_att = tempy2l_att + &
-                     (displ_crust_mantle(2,iglob) + deltat*veloc_crust_mantle(2,iglob))*hp2
-                tempz2l_att = tempz2l_att + &
-                     (displ_crust_mantle(3,iglob) + deltat*veloc_crust_mantle(3,iglob))*hp2
+                   hp2 = hprime_yy(j,l)
+                   iglob = ibool(i,l,k,ispec)
+                   tempx2l_att = tempx2l_att + &
+                        (displ_crust_mantle(1,iglob) + deltat*veloc_crust_mantle(1,iglob))*hp2
+                   tempy2l_att = tempy2l_att + &
+                        (displ_crust_mantle(2,iglob) + deltat*veloc_crust_mantle(2,iglob))*hp2
+                   tempz2l_att = tempz2l_att + &
+                        (displ_crust_mantle(3,iglob) + deltat*veloc_crust_mantle(3,iglob))*hp2
 !!! can merge these loops because NGLLX = NGLLY = NGLLZ          enddo
 
 !!! can merge these loops because NGLLX = NGLLY = NGLLZ          do l=1,NGLLZ
-                hp3 = hprime_zz(k,l)
-                iglob = ibool(i,j,l,ispec)
-                tempx3l_att = tempx3l_att + &
-                     (displ_crust_mantle(1,iglob) + deltat*veloc_crust_mantle(1,iglob))*hp3
-                tempy3l_att = tempy3l_att + &
-                     (displ_crust_mantle(2,iglob) + deltat*veloc_crust_mantle(2,iglob))*hp3
-                tempz3l_att = tempz3l_att + &
-                     (displ_crust_mantle(3,iglob) + deltat*veloc_crust_mantle(3,iglob))*hp3
-             enddo
+                   hp3 = hprime_zz(k,l)
+                   iglob = ibool(i,j,l,ispec)
+                   tempx3l_att = tempx3l_att + &
+                        (displ_crust_mantle(1,iglob) + deltat*veloc_crust_mantle(1,iglob))*hp3
+                   tempy3l_att = tempy3l_att + &
+                        (displ_crust_mantle(2,iglob) + deltat*veloc_crust_mantle(2,iglob))*hp3
+                   tempz3l_att = tempz3l_att + &
+                        (displ_crust_mantle(3,iglob) + deltat*veloc_crust_mantle(3,iglob))*hp3
+                enddo
+             endif
+          else 
+             ! takes old routines
+             tempx1l_att = tempx1l
+             tempy1l_att = tempy1l
+             tempz1l_att = tempz1l
+
+             tempx2l_att = tempx2l
+             tempy2l_att = tempy2l
+             tempz2l_att = tempz2l
+
+             tempx3l_att = tempx3l
+             tempy3l_att = tempy3l
+             tempz3l_att = tempz3l
           endif
 
 !         get derivatives of ux, uy and uz with respect to x, y and z
@@ -319,7 +336,7 @@
           duzdxl_plus_duxdzl = duzdxl + duxdzl
           duzdyl_plus_duydzl = duzdyl + duydzl
 
-          if( ATTENUATION_VAL ) then
+          if(ATTENUATION_VAL) then
              ! temporary variables used for fixing attenuation in a consistent way
              duxdxl_att = xixl*tempx1l_att + etaxl*tempx2l_att + gammaxl*tempx3l_att
              duxdyl_att = xiyl*tempx1l_att + etayl*tempx2l_att + gammayl*tempx3l_att

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_crust_mantle_Dev.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_crust_mantle_Dev.F90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_crust_mantle_Dev.F90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -256,49 +256,85 @@
       enddo
     enddo
 
-    if( ATTENUATION_VAL ) then
-       ! use first order Taylor expansion of displacement for local storage of stresses
-       ! at this current time step, to fix attenuation in a consistent way
+    if(ATTENUATION_VAL) then
+       if(ATTENUATION_NEW_VAL) then
+          ! takes new routines
+          ! use first order Taylor expansion of displacement for local storage of stresses 
+          ! at this current time step, to fix attenuation in a consistent way
 
-       do k=1,NGLLZ
-          do j=1,NGLLY
+          do k=1,NGLLZ
+             do j=1,NGLLY
 
 #ifdef _HANDOPT
-             ! way 2:
-             ! since we know that NGLLX = 5, this should help pipelining
-             iglobv5(:) = ibool(:,j,k,ispec)
+                ! way 2:
+                ! since we know that NGLLX = 5, this should help pipelining
+                iglobv5(:) = ibool(:,j,k,ispec)
 
-             dummyx_loc_att(1,j,k) = displ_crust_mantle(1,iglobv5(1)) + deltat*veloc_crust_mantle(1,iglobv5(1))
-             dummyy_loc_att(1,j,k) = displ_crust_mantle(2,iglobv5(1)) + deltat*veloc_crust_mantle(2,iglobv5(1))
-             dummyz_loc_att(1,j,k) = displ_crust_mantle(3,iglobv5(1)) + deltat*veloc_crust_mantle(3,iglobv5(1))
+                dummyx_loc_att(1,j,k) = displ_crust_mantle(1,iglobv5(1)) + deltat*veloc_crust_mantle(1,iglobv5(1))
+                dummyy_loc_att(1,j,k) = displ_crust_mantle(2,iglobv5(1)) + deltat*veloc_crust_mantle(2,iglobv5(1))
+                dummyz_loc_att(1,j,k) = displ_crust_mantle(3,iglobv5(1)) + deltat*veloc_crust_mantle(3,iglobv5(1))
 
-             dummyx_loc_att(2,j,k) = displ_crust_mantle(1,iglobv5(2)) + deltat*veloc_crust_mantle(1,iglobv5(2))
-             dummyy_loc_att(2,j,k) = displ_crust_mantle(2,iglobv5(2)) + deltat*veloc_crust_mantle(2,iglobv5(2))
-             dummyz_loc_att(2,j,k) = displ_crust_mantle(3,iglobv5(2)) + deltat*veloc_crust_mantle(3,iglobv5(2))
+                dummyx_loc_att(2,j,k) = displ_crust_mantle(1,iglobv5(2)) + deltat*veloc_crust_mantle(1,iglobv5(2))
+                dummyy_loc_att(2,j,k) = displ_crust_mantle(2,iglobv5(2)) + deltat*veloc_crust_mantle(2,iglobv5(2))
+                dummyz_loc_att(2,j,k) = displ_crust_mantle(3,iglobv5(2)) + deltat*veloc_crust_mantle(3,iglobv5(2))
 
-             dummyx_loc_att(3,j,k) = displ_crust_mantle(1,iglobv5(3)) + deltat*veloc_crust_mantle(1,iglobv5(3))
-             dummyy_loc_att(3,j,k) = displ_crust_mantle(2,iglobv5(3)) + deltat*veloc_crust_mantle(2,iglobv5(3))
-             dummyz_loc_att(3,j,k) = displ_crust_mantle(3,iglobv5(3)) + deltat*veloc_crust_mantle(3,iglobv5(3))
+                dummyx_loc_att(3,j,k) = displ_crust_mantle(1,iglobv5(3)) + deltat*veloc_crust_mantle(1,iglobv5(3))
+                dummyy_loc_att(3,j,k) = displ_crust_mantle(2,iglobv5(3)) + deltat*veloc_crust_mantle(2,iglobv5(3))
+                dummyz_loc_att(3,j,k) = displ_crust_mantle(3,iglobv5(3)) + deltat*veloc_crust_mantle(3,iglobv5(3))
 
-             dummyx_loc_att(4,j,k) = displ_crust_mantle(1,iglobv5(4)) + deltat*veloc_crust_mantle(1,iglobv5(4))
-             dummyy_loc_att(4,j,k) = displ_crust_mantle(2,iglobv5(4)) + deltat*veloc_crust_mantle(2,iglobv5(4))
-             dummyz_loc_att(4,j,k) = displ_crust_mantle(3,iglobv5(4)) + deltat*veloc_crust_mantle(3,iglobv5(4))
+                dummyx_loc_att(4,j,k) = displ_crust_mantle(1,iglobv5(4)) + deltat*veloc_crust_mantle(1,iglobv5(4))
+                dummyy_loc_att(4,j,k) = displ_crust_mantle(2,iglobv5(4)) + deltat*veloc_crust_mantle(2,iglobv5(4))
+                dummyz_loc_att(4,j,k) = displ_crust_mantle(3,iglobv5(4)) + deltat*veloc_crust_mantle(3,iglobv5(4))
 
-             dummyx_loc_att(5,j,k) = displ_crust_mantle(1,iglobv5(5)) + deltat*veloc_crust_mantle(1,iglobv5(5))
-             dummyy_loc_att(5,j,k) = displ_crust_mantle(2,iglobv5(5)) + deltat*veloc_crust_mantle(2,iglobv5(5))
-             dummyz_loc_att(5,j,k) = displ_crust_mantle(3,iglobv5(5)) + deltat*veloc_crust_mantle(3,iglobv5(5))
+                dummyx_loc_att(5,j,k) = displ_crust_mantle(1,iglobv5(5)) + deltat*veloc_crust_mantle(1,iglobv5(5))
+                dummyy_loc_att(5,j,k) = displ_crust_mantle(2,iglobv5(5)) + deltat*veloc_crust_mantle(2,iglobv5(5))
+                dummyz_loc_att(5,j,k) = displ_crust_mantle(3,iglobv5(5)) + deltat*veloc_crust_mantle(3,iglobv5(5))
 
 #else
-             ! way 1:
-             do i=1,NGLLX
-                iglob1 = ibool(i,j,k,ispec)
-                dummyx_loc_att(i,j,k) = displ_crust_mantle(1,iglob1) + deltat*veloc_crust_mantle(1,iglob1)
-                dummyy_loc_att(i,j,k) = displ_crust_mantle(2,iglob1) + deltat*veloc_crust_mantle(2,iglob1)
-                dummyz_loc_att(i,j,k) = displ_crust_mantle(3,iglob1) + deltat*veloc_crust_mantle(3,iglob1)
-             enddo
+                ! way 1:
+                do i=1,NGLLX
+                   iglob1 = ibool(i,j,k,ispec)
+                   dummyx_loc_att(i,j,k) = displ_crust_mantle(1,iglob1) + deltat*veloc_crust_mantle(1,iglob1)
+                   dummyy_loc_att(i,j,k) = displ_crust_mantle(2,iglob1) + deltat*veloc_crust_mantle(2,iglob1)
+                   dummyz_loc_att(i,j,k) = displ_crust_mantle(3,iglob1) + deltat*veloc_crust_mantle(3,iglob1)
+                enddo
 
 #endif
+             enddo
           enddo
+       endif
+    else 
+       ! takes old routines
+       do k=1,NGLLZ
+          do j=1,NGLLY
+#ifdef _HANDOPT
+             dummyx_loc_att(1,j,k) = dummyx_loc(1,j,k)
+             dummyy_loc_att(1,j,k) = dummyx_loc(1,j,k)
+             dummyz_loc_att(1,j,k) = dummyx_loc(1,j,k)
+
+             dummyx_loc_att(2,j,k) = dummyx_loc(2,j,k)
+             dummyy_loc_att(2,j,k) = dummyx_loc(2,j,k)
+             dummyz_loc_att(2,j,k) = dummyx_loc(2,j,k)
+
+             dummyx_loc_att(3,j,k) = dummyx_loc(3,j,k)
+             dummyy_loc_att(3,j,k) = dummyx_loc(3,j,k)
+             dummyz_loc_att(3,j,k) = dummyx_loc(3,j,k)
+
+             dummyx_loc_att(4,j,k) = dummyx_loc(4,j,k)
+             dummyy_loc_att(4,j,k) = dummyx_loc(4,j,k)
+             dummyz_loc_att(4,j,k) = dummyx_loc(4,j,k)
+
+             dummyx_loc_att(5,j,k) = dummyx_loc(5,j,k)
+             dummyy_loc_att(5,j,k) = dummyx_loc(5,j,k)
+             dummyz_loc_att(5,j,k) = dummyx_loc(5,j,k)
+#else  
+             do i=1,NGLLX
+                dummyx_loc_att(i,j,k) = dummyx_loc(i,j,k)
+                dummyy_loc_att(i,j,k) = dummyy_loc(i,j,k)
+                dummyz_loc_att(i,j,k) = dummyz_loc(i,j,k)
+             enddo
+#endif    
+          enddo
        enddo
     endif
 
@@ -324,7 +360,7 @@
        enddo
     enddo
 
-    if( ATTENUATION_VAL ) then
+    if(ATTENUATION_VAL) then
        ! temporary variables used for fixing attenuation in a consistent way
        do j=1,m2
           do i=1,m1
@@ -374,7 +410,7 @@
        enddo
     enddo
 
-    if( ATTENUATION_VAL ) then
+    if(ATTENUATION_VAL) then
        ! temporary variables used for fixing attenuation in a consistent way
        do j=1,m1
           do i=1,m1
@@ -424,7 +460,7 @@
        enddo
     enddo
 
-    if( ATTENUATION_VAL ) then
+    if(ATTENUATION_VAL) then
        ! temporary variables used for fixing attenuation in a consistent way
        do j=1,m1
           do i=1,m2
@@ -455,7 +491,7 @@
     if(ANISOTROPIC_3D_MANTLE_VAL) then
       ! anisotropic element
 
-       if( ATTENUATION_VAL ) then
+       if(ATTENUATION_VAL) then
           call compute_element_aniso(ispec, &
                minus_gravity_table,density_table,minus_deriv_gravity_table, &
                xstore,ystore,zstore, &
@@ -492,7 +528,7 @@
       if( .not. ispec_is_tiso(ispec) ) then
         ! isotropic element
 
-         if( ATTENUATION_VAL ) then
+         if(ATTENUATION_VAL) then
             call compute_element_iso(ispec, &
                  minus_gravity_table,density_table,minus_deriv_gravity_table, &
                  xstore,ystore,zstore, &
@@ -525,7 +561,7 @@
       else
         ! transverse isotropic element
 
-         if( ATTENUATION_VAL ) then
+         if(ATTENUATION_VAL) then
             call compute_element_tiso(ispec, &
                  minus_gravity_table,density_table,minus_deriv_gravity_table, &
                  xstore,ystore,zstore, &

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_inner_core.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_inner_core.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_inner_core.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -212,7 +212,7 @@
             tempz3l = tempz3l + displ_inner_core(3,iglob)*hp3
           enddo
 
-          if( ATTENUATION_VAL ) then
+          if(ATTENUATION_VAL) then
              ! temporary variables used for fixing attenuation in a consistent way
 
              tempx1l_att = 0._CUSTOM_REAL
@@ -227,40 +227,57 @@
              tempz2l_att = 0._CUSTOM_REAL
              tempz3l_att = 0._CUSTOM_REAL
 
-             ! use first order Taylor expansion of displacement for local storage of stresses
-             ! at this current time step, to fix attenuation in a consistent way
-             do l=1,NGLLX
-                hp1 = hprime_xx(i,l)
-                iglob = ibool(l,j,k,ispec)
-                tempx1l_att = tempx1l_att + &
-                     (displ_inner_core(1,iglob) + deltat*veloc_inner_core(1,iglob))*hp1
-                tempy1l_att = tempy1l_att + &
-                     (displ_inner_core(2,iglob) + deltat*veloc_inner_core(2,iglob))*hp1
-                tempz1l_att = tempz1l_att + &
-                     (displ_inner_core(3,iglob) + deltat*veloc_inner_core(3,iglob))*hp1
+             if(ATTENUATION_NEW_VAL) then
+                ! takes new routines
+                ! use first order Taylor expansion of displacement for local storage of stresses 
+                ! at this current time step, to fix attenuation in a consistent way
+                do l=1,NGLLX
+                   hp1 = hprime_xx(i,l)
+                   iglob = ibool(l,j,k,ispec)
+                   tempx1l_att = tempx1l_att + &
+                        (displ_inner_core(1,iglob) + deltat*veloc_inner_core(1,iglob))*hp1
+                   tempy1l_att = tempy1l_att + &
+                        (displ_inner_core(2,iglob) + deltat*veloc_inner_core(2,iglob))*hp1
+                   tempz1l_att = tempz1l_att + &
+                        (displ_inner_core(3,iglob) + deltat*veloc_inner_core(3,iglob))*hp1
+
 !!! can merge these loops because NGLLX = NGLLY = NGLLZ          enddo
 
 !!! can merge these loops because NGLLX = NGLLY = NGLLZ          do l=1,NGLLY
-                hp2 = hprime_yy(j,l)
-                iglob = ibool(i,l,k,ispec)
-                tempx2l_att = tempx2l_att + &
-                     (displ_inner_core(1,iglob) + deltat*veloc_inner_core(1,iglob))*hp2
-                tempy2l_att = tempy2l_att + &
-                     (displ_inner_core(2,iglob) + deltat*veloc_inner_core(2,iglob))*hp2
-                tempz2l_att = tempz2l_att + &
-                     (displ_inner_core(3,iglob) + deltat*veloc_inner_core(3,iglob))*hp2
+                   hp2 = hprime_yy(j,l)
+                   iglob = ibool(i,l,k,ispec)
+                   tempx2l_att = tempx2l_att + &
+                        (displ_inner_core(1,iglob) + deltat*veloc_inner_core(1,iglob))*hp2
+                   tempy2l_att = tempy2l_att + &
+                        (displ_inner_core(2,iglob) + deltat*veloc_inner_core(2,iglob))*hp2
+                   tempz2l_att = tempz2l_att + &
+                        (displ_inner_core(3,iglob) + deltat*veloc_inner_core(3,iglob))*hp2
 !!! can merge these loops because NGLLX = NGLLY = NGLLZ          enddo
 
 !!! can merge these loops because NGLLX = NGLLY = NGLLZ          do l=1,NGLLZ
-                hp3 = hprime_zz(k,l)
-                iglob = ibool(i,j,l,ispec)
-                tempx3l_att = tempx3l_att + &
-                     (displ_inner_core(1,iglob) + deltat*veloc_inner_core(1,iglob))*hp3
-                tempy3l_att = tempy3l_att + &
-                     (displ_inner_core(2,iglob) + deltat*veloc_inner_core(2,iglob))*hp3
-                tempz3l_att = tempz3l_att + &
-                     (displ_inner_core(3,iglob) + deltat*veloc_inner_core(3,iglob))*hp3
-             enddo
+                   hp3 = hprime_zz(k,l)
+                   iglob = ibool(i,j,l,ispec)
+                   tempx3l_att = tempx3l_att + &
+                        (displ_inner_core(1,iglob) + deltat*veloc_inner_core(1,iglob))*hp3
+                   tempy3l_att = tempy3l_att + &
+                        (displ_inner_core(2,iglob) + deltat*veloc_inner_core(2,iglob))*hp3
+                   tempz3l_att = tempz3l_att + &
+                        (displ_inner_core(3,iglob) + deltat*veloc_inner_core(3,iglob))*hp3
+                enddo
+             endif
+          else 
+             ! takes old routines
+             tempx1l_att = tempx1l
+             tempy1l_att = tempy1l
+             tempz1l_att = tempz1l
+
+             tempx2l_att = tempx2l
+             tempy2l_att = tempy2l
+             tempz2l_att = tempz2l
+
+             tempx3l_att = tempx3l
+             tempy3l_att = tempy3l
+             tempz3l_att = tempz3l
           endif
 
 !         get derivatives of ux, uy and uz with respect to x, y and z
@@ -300,7 +317,7 @@
           duzdxl_plus_duxdzl = duzdxl + duxdzl
           duzdyl_plus_duydzl = duzdyl + duydzl
 
-          if( ATTENUATION_VAL ) then
+          if(ATTENUATION_VAL) then
              ! temporary variables used for fixing attenuation in a consistent way
              duxdxl_att = xixl*tempx1l_att + etaxl*tempx2l_att + gammaxl*tempx3l_att
              duxdyl_att = xiyl*tempx1l_att + etayl*tempx2l_att + gammayl*tempx3l_att

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_inner_core_Dev.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_inner_core_Dev.F90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/compute_forces_inner_core_Dev.F90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -275,50 +275,86 @@
 #endif
         enddo
       enddo
+      
+      if(ATTENUATION_VAL) then
+         if(ATTENUATION_NEW_VAL) then
+            ! takes new routines
+            ! use first order Taylor expansion of displacement for local storage of stresses 
+            ! at this current time step, to fix attenuation in a consistent way
 
-      if( ATTENUATION_VAL ) then
-         ! use first order Taylor expansion of displacement for local storage of stresses
-         ! at this current time step, to fix attenuation in a consistent way
+            do k=1,NGLLZ
+               do j=1,NGLLY
 
-         do k=1,NGLLZ
-            do j=1,NGLLY
-
 #ifdef _HANDOPT
-               ! way 2:
-               ! since we know that NGLLX = 5, this should help pipelining
-               iglobv5(:) = ibool(:,j,k,ispec)
+                  ! way 2:
+                  ! since we know that NGLLX = 5, this should help pipelining
+                  iglobv5(:) = ibool(:,j,k,ispec)
 
-               dummyx_loc_att(1,j,k) = displ_inner_core(1,iglobv5(1)) + deltat*veloc_inner_core(1,iglobv5(1))
-               dummyy_loc_att(1,j,k) = displ_inner_core(2,iglobv5(1)) + deltat*veloc_inner_core(2,iglobv5(1))
-               dummyz_loc_att(1,j,k) = displ_inner_core(3,iglobv5(1)) + deltat*veloc_inner_core(3,iglobv5(1))
+                  dummyx_loc_att(1,j,k) = displ_inner_core(1,iglobv5(1)) + deltat*veloc_inner_core(1,iglobv5(1))
+                  dummyy_loc_att(1,j,k) = displ_inner_core(2,iglobv5(1)) + deltat*veloc_inner_core(2,iglobv5(1))
+                  dummyz_loc_att(1,j,k) = displ_inner_core(3,iglobv5(1)) + deltat*veloc_inner_core(3,iglobv5(1))
 
-               dummyx_loc_att(2,j,k) = displ_inner_core(1,iglobv5(2)) + deltat*veloc_inner_core(1,iglobv5(2))
-               dummyy_loc_att(2,j,k) = displ_inner_core(2,iglobv5(2)) + deltat*veloc_inner_core(2,iglobv5(2))
-               dummyz_loc_att(2,j,k) = displ_inner_core(3,iglobv5(2)) + deltat*veloc_inner_core(3,iglobv5(2))
+                  dummyx_loc_att(2,j,k) = displ_inner_core(1,iglobv5(2)) + deltat*veloc_inner_core(1,iglobv5(2))
+                  dummyy_loc_att(2,j,k) = displ_inner_core(2,iglobv5(2)) + deltat*veloc_inner_core(2,iglobv5(2))
+                  dummyz_loc_att(2,j,k) = displ_inner_core(3,iglobv5(2)) + deltat*veloc_inner_core(3,iglobv5(2))
 
-               dummyx_loc_att(3,j,k) = displ_inner_core(1,iglobv5(3)) + deltat*veloc_inner_core(1,iglobv5(3))
-               dummyy_loc_att(3,j,k) = displ_inner_core(2,iglobv5(3)) + deltat*veloc_inner_core(2,iglobv5(3))
-               dummyz_loc_att(3,j,k) = displ_inner_core(3,iglobv5(3)) + deltat*veloc_inner_core(3,iglobv5(3))
+                  dummyx_loc_att(3,j,k) = displ_inner_core(1,iglobv5(3)) + deltat*veloc_inner_core(1,iglobv5(3))
+                  dummyy_loc_att(3,j,k) = displ_inner_core(2,iglobv5(3)) + deltat*veloc_inner_core(2,iglobv5(3))
+                  dummyz_loc_att(3,j,k) = displ_inner_core(3,iglobv5(3)) + deltat*veloc_inner_core(3,iglobv5(3))
 
-               dummyx_loc_att(4,j,k) = displ_inner_core(1,iglobv5(4)) + deltat*veloc_inner_core(1,iglobv5(4))
-               dummyy_loc_att(4,j,k) = displ_inner_core(2,iglobv5(4)) + deltat*veloc_inner_core(2,iglobv5(4))
-               dummyz_loc_att(4,j,k) = displ_inner_core(3,iglobv5(4)) + deltat*veloc_inner_core(3,iglobv5(4))
+                  dummyx_loc_att(4,j,k) = displ_inner_core(1,iglobv5(4)) + deltat*veloc_inner_core(1,iglobv5(4))
+                  dummyy_loc_att(4,j,k) = displ_inner_core(2,iglobv5(4)) + deltat*veloc_inner_core(2,iglobv5(4))
+                  dummyz_loc_att(4,j,k) = displ_inner_core(3,iglobv5(4)) + deltat*veloc_inner_core(3,iglobv5(4))
 
-               dummyx_loc_att(5,j,k) = displ_inner_core(1,iglobv5(5)) + deltat*veloc_inner_core(1,iglobv5(5))
-               dummyy_loc_att(5,j,k) = displ_inner_core(2,iglobv5(5)) + deltat*veloc_inner_core(2,iglobv5(5))
-               dummyz_loc_att(5,j,k) = displ_inner_core(3,iglobv5(5)) + deltat*veloc_inner_core(3,iglobv5(5))
+                  dummyx_loc_att(5,j,k) = displ_inner_core(1,iglobv5(5)) + deltat*veloc_inner_core(1,iglobv5(5))
+                  dummyy_loc_att(5,j,k) = displ_inner_core(2,iglobv5(5)) + deltat*veloc_inner_core(2,iglobv5(5))
+                  dummyz_loc_att(5,j,k) = displ_inner_core(3,iglobv5(5)) + deltat*veloc_inner_core(3,iglobv5(5))
 
 #else
-               ! way 1:
-               do i=1,NGLLX
-                  iglob1 = ibool(i,j,k,ispec)
-                  dummyx_loc_att(i,j,k) = displ_inner_core(1,iglob1) + deltat*veloc_inner_core(1,iglob1)
-                  dummyy_loc_att(i,j,k) = displ_inner_core(2,iglob1) + deltat*veloc_inner_core(2,iglob1)
-                  dummyz_loc_att(i,j,k) = displ_inner_core(3,iglob1) + deltat*veloc_inner_core(3,iglob1)
-               enddo
+                  ! way 1:
+                  do i=1,NGLLX
+                     iglob1 = ibool(i,j,k,ispec)
+                     dummyx_loc_att(i,j,k) = displ_inner_core(1,iglob1) + deltat*veloc_inner_core(1,iglob1)
+                     dummyy_loc_att(i,j,k) = displ_inner_core(2,iglob1) + deltat*veloc_inner_core(2,iglob1)
+                     dummyz_loc_att(i,j,k) = displ_inner_core(3,iglob1) + deltat*veloc_inner_core(3,iglob1)
+                  enddo
 
 #endif
+               enddo
             enddo
+         endif
+      else 
+         ! takes old routines
+         do k=1,NGLLZ
+            do j=1,NGLLY
+#ifdef _HANDOPT
+               dummyx_loc_att(1,j,k) = dummyx_loc(1,j,k)
+               dummyy_loc_att(1,j,k) = dummyx_loc(1,j,k)
+               dummyz_loc_att(1,j,k) = dummyx_loc(1,j,k)
+
+               dummyx_loc_att(2,j,k) = dummyx_loc(2,j,k)
+               dummyy_loc_att(2,j,k) = dummyx_loc(2,j,k)
+               dummyz_loc_att(2,j,k) = dummyx_loc(2,j,k)
+
+               dummyx_loc_att(3,j,k) = dummyx_loc(3,j,k)
+               dummyy_loc_att(3,j,k) = dummyx_loc(3,j,k)
+               dummyz_loc_att(3,j,k) = dummyx_loc(3,j,k)
+
+               dummyx_loc_att(4,j,k) = dummyx_loc(4,j,k)
+               dummyy_loc_att(4,j,k) = dummyx_loc(4,j,k)
+               dummyz_loc_att(4,j,k) = dummyx_loc(4,j,k)
+
+               dummyx_loc_att(5,j,k) = dummyx_loc(5,j,k)
+               dummyy_loc_att(5,j,k) = dummyx_loc(5,j,k)
+               dummyz_loc_att(5,j,k) = dummyx_loc(5,j,k)
+#else  
+               do i=1,NGLLX
+                  dummyx_loc_att(i,j,k) = dummyx_loc(i,j,k)
+                  dummyy_loc_att(i,j,k) = dummyy_loc(i,j,k)
+                  dummyz_loc_att(i,j,k) = dummyz_loc(i,j,k)
+               enddo
+#endif    
+            enddo
          enddo
       endif
 
@@ -344,7 +380,7 @@
          enddo
       enddo
 
-      if( ATTENUATION_VAL ) then
+      if(ATTENUATION_VAL) then
          ! temporary variables used for fixing attenuation in a consistent way
          do j=1,m2
             do i=1,m1
@@ -394,7 +430,7 @@
          enddo
       enddo
 
-      if( ATTENUATION_VAL ) then
+      if(ATTENUATION_VAL) then
          ! temporary variables used for fixing attenuation in a consistent way
          do j=1,m1
             do i=1,m1
@@ -444,7 +480,7 @@
          enddo
       enddo
 
-      if( ATTENUATION_VAL ) then
+      if(ATTENUATION_VAL) then
          ! temporary variables used for fixing attenuation in a consistent way
          do j=1,m1
             do i=1,m2
@@ -509,7 +545,7 @@
             duzdxl_plus_duxdzl = duzdxl + duxdzl
             duzdyl_plus_duydzl = duzdyl + duydzl
 
-            if( ATTENUATION_VAL ) then
+            if(ATTENUATION_VAL) then
                ! temporary variables used for fixing attenuation in a consistent way
                duxdxl_att = xixl*tempx1_att(i,j,k) + etaxl*tempx2_att(i,j,k) + gammaxl*tempx3_att(i,j,k)
                duxdyl_att = xiyl*tempx1_att(i,j,k) + etayl*tempx2_att(i,j,k) + gammayl*tempx3_att(i,j,k)

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/initialize_simulation.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/initialize_simulation.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/initialize_simulation.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -48,7 +48,7 @@
     GAMMA_ROTATION_AZIMUTH
   integer :: REFERENCE_1D_MODEL,THREE_D_MODEL
   logical :: TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE,OCEANS, &
-    ATTENUATION,ATTENUATION_3D,ROTATION,ELLIPTICITY,GRAVITY,CASE_3D,ISOTROPIC_3D_MANTLE, &
+    ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,ROTATION,ELLIPTICITY,GRAVITY,CASE_3D,ISOTROPIC_3D_MANTLE, &
     HETEROGEN_3D_MANTLE,CRUSTAL,INFLATE_CENTRAL_CUBE
   character(len=150) :: dummystring
   integer, external :: err_occurred
@@ -81,7 +81,7 @@
          ROTATION,ISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE,TOPOGRAPHY,OCEANS,MOVIE_SURFACE, &
          MOVIE_VOLUME,MOVIE_COARSE,ATTENUATION_3D,RECEIVERS_CAN_BE_BURIED, &
          PRINT_SOURCE_TIME_FUNCTION,SAVE_MESH_FILES, &
-         ATTENUATION,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
+         ATTENUATION,ATTENUATION_NEW,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
          INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE, &
          LOCAL_PATH,LOCAL_TMP_PATH,MODEL, &
          SIMULATION_TYPE,SAVE_FORWARD, &
@@ -140,7 +140,7 @@
                 REFERENCE_1D_MODEL,THREE_D_MODEL,ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS, &
                 HONOR_1D_SPHERICAL_MOHO,CRUSTAL,ONE_CRUST,CASE_3D,TRANSVERSE_ISOTROPY, &
                 ISOTROPIC_3D_MANTLE,ANISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE, &
-                ATTENUATION,ATTENUATION_3D,ANISOTROPIC_INNER_CORE,NOISE_TOMOGRAPHY)
+                ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,ANISOTROPIC_INNER_CORE,NOISE_TOMOGRAPHY)
 
   ! broadcasts optional GPU_MODE
   call broadcast_gpu_parameters(myrank,GPU_MODE)
@@ -241,7 +241,7 @@
 
   ! checks flags
   call initialize_simulation_check(sizeprocs,NPROCTOT,NSPEC_COMPUTED, &
-                                  ATTENUATION,ATTENUATION_3D,NCHUNKS,GRAVITY,ROTATION, &
+                                  ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,NCHUNKS,GRAVITY,ROTATION, &
                                   ELLIPTICITY,OCEANS,NPROC_XI,NPROC_ETA, &
                                   TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE, &
                                   ANISOTROPIC_INNER_CORE)
@@ -276,7 +276,7 @@
 !
 
   subroutine initialize_simulation_check(sizeprocs,NPROCTOT,NSPEC_COMPUTED, &
-                                        ATTENUATION,ATTENUATION_3D,NCHUNKS,GRAVITY,ROTATION, &
+                                        ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,NCHUNKS,GRAVITY,ROTATION, &
                                         ELLIPTICITY,OCEANS,NPROC_XI,NPROC_ETA, &
                                         TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE, &
                                         ANISOTROPIC_INNER_CORE)
@@ -289,7 +289,7 @@
   integer, dimension(MAX_NUM_REGIONS) :: NSPEC_computed
 
   logical :: TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE,OCEANS, &
-    ATTENUATION,ATTENUATION_3D,ROTATION,ELLIPTICITY,GRAVITY
+    ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,ROTATION,ELLIPTICITY,GRAVITY
 
 
   ! check that the code is running with the requested nb of processes
@@ -328,6 +328,10 @@
       write(IMAIN,*) 'ATTENUATION:',ATTENUATION,ATTENUATION_VAL
       call exit_MPI(myrank,'error in compiled parameters ATTENUATION, please recompile solver')
   endif
+  if (ATTENUATION_NEW .NEQV. ATTENUATION_NEW_VAL) then
+      write(IMAIN,*) 'ATTENUATION_NEW:',ATTENUATION_NEW,ATTENUATION_NEW_VAL
+      call exit_MPI(myrank,'error in compiled parameters ATTENUATION_NEW, please recompile solver')
+  endif
   if (ELLIPTICITY .NEQV. ELLIPTICITY_VAL) then
       write(IMAIN,*) 'ELLIPTICITY:',ELLIPTICITY,ELLIPTICITY_VAL
       call exit_MPI(myrank,'error in compiled parameters ELLIPTICITY, please recompile solver')

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/prepare_timerun.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/prepare_timerun.f90	2012-05-04 00:46:29 UTC (rev 20039)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/specfem3D/prepare_timerun.f90	2012-05-04 11:55:57 UTC (rev 20040)
@@ -1097,7 +1097,7 @@
                                   SIMULATION_TYPE,NOISE_TOMOGRAPHY, &
                                   SAVE_FORWARD,ABSORBING_CONDITIONS, &
                                   OCEANS_VAL,GRAVITY_VAL,ROTATION_VAL, &
-                                  ATTENUATION_VAL,USE_ATTENUATION_MIMIC, &
+                                  ATTENUATION_VAL,ATTENUATION_NEW_VAL,USE_ATTENUATION_MIMIC, &
                                   COMPUTE_AND_STORE_STRAIN, &
                                   ANISOTROPIC_3D_MANTLE_VAL,ANISOTROPIC_INNER_CORE_VAL, &
                                   SAVE_BOUNDARY_MESH, &



More information about the CIG-COMMITS mailing list