[cig-commits] r15579 - seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src

dkomati1 at geodynamics.org dkomati1 at geodynamics.org
Sun Aug 23 12:12:51 PDT 2009


Author: dkomati1
Date: 2009-08-23 12:12:51 -0700 (Sun, 23 Aug 2009)
New Revision: 15579

Modified:
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/specfem3D.F90
Log:
replaced loops on global arrays with (:,:) array syntax to allow compilers to replace
them with memory copies (calls to memcpy()), which are faster.


Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/specfem3D.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/specfem3D.F90	2009-08-23 16:28:36 UTC (rev 15578)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/specfem3D.F90	2009-08-23 19:12:51 UTC (rev 15579)
@@ -1889,22 +1889,16 @@
     seismo_current = seismo_current + 1
 
 ! mantle
-  do i=1,NGLOB_CRUST_MANTLE
-    displ_crust_mantle(:,i) = displ_crust_mantle(:,i) + deltat*veloc_crust_mantle(:,i) + deltatsqover2*accel_crust_mantle(:,i)
-    veloc_crust_mantle(:,i) = veloc_crust_mantle(:,i) + deltatover2*accel_crust_mantle(:,i)
-  enddo
+    displ_crust_mantle(:,:) = displ_crust_mantle(:,:) + deltat*veloc_crust_mantle(:,:) + deltatsqover2*accel_crust_mantle(:,:)
+    veloc_crust_mantle(:,:) = veloc_crust_mantle(:,:) + deltatover2*accel_crust_mantle(:,:)
 
 ! outer core
-  do i=1,NGLOB_OUTER_CORE
-    displ_outer_core(i) = displ_outer_core(i) + deltat*veloc_outer_core(i) + deltatsqover2*accel_outer_core(i)
-    veloc_outer_core(i) = veloc_outer_core(i) + deltatover2*accel_outer_core(i)
-  enddo
+    displ_outer_core(:) = displ_outer_core(:) + deltat*veloc_outer_core(:) + deltatsqover2*accel_outer_core(:)
+    veloc_outer_core(:) = veloc_outer_core(:) + deltatover2*accel_outer_core(:)
 
 ! inner core
-  do i=1,NGLOB_INNER_CORE
-    displ_inner_core(:,i) = displ_inner_core(:,i) + deltat*veloc_inner_core(:,i) + deltatsqover2*accel_inner_core(:,i)
-    veloc_inner_core(:,i) = veloc_inner_core(:,i) + deltatover2*accel_inner_core(:,i)
-  enddo
+    displ_inner_core(:,:) = displ_inner_core(:,:) + deltat*veloc_inner_core(:,:) + deltatsqover2*accel_inner_core(:,:)
+    veloc_inner_core(:,:) = veloc_inner_core(:,:) + deltatover2*accel_inner_core(:,:)
 
 ! compute the maximum of the norm of the displacement
 ! in all the slices using an MPI reduction
@@ -2376,10 +2370,8 @@
 #endif
 
 ! multiply by the inverse of the mass matrix and update velocity
-  do i=1,NGLOB_OUTER_CORE
-    accel_outer_core(i) = accel_outer_core(i)*rmass_outer_core(i)
-    veloc_outer_core(i) = veloc_outer_core(i) + deltatover2*accel_outer_core(i)
-  enddo
+    accel_outer_core(:) = accel_outer_core(:)*rmass_outer_core(:)
+    veloc_outer_core(:) = veloc_outer_core(:) + deltatover2*accel_outer_core(:)
 
 ! ****************************************************
 !   big loop over all spectral elements in the solid
@@ -2791,18 +2783,16 @@
   if(mod(it,100) == 0) write(IMAIN,*) 'suppressing OCEANS from the serial test because they can be unstable on a small surface'
 #endif
 
-  do i=1,NGLOB_CRUST_MANTLE
-    veloc_crust_mantle(:,i) = veloc_crust_mantle(:,i) + deltatover2*accel_crust_mantle(:,i)
-  enddo
+  veloc_crust_mantle(:,:) = veloc_crust_mantle(:,:) + deltatover2*accel_crust_mantle(:,:)
 
   do i=1,NGLOB_INNER_CORE
     accel_inner_core(1,i) = accel_inner_core(1,i)*rmass_inner_core(i)
     accel_inner_core(2,i) = accel_inner_core(2,i)*rmass_inner_core(i)
     accel_inner_core(3,i) = accel_inner_core(3,i)*rmass_inner_core(i)
-
-    veloc_inner_core(:,i) = veloc_inner_core(:,i) + deltatover2*accel_inner_core(:,i)
   enddo
 
+  veloc_inner_core(:,:) = veloc_inner_core(:,:) + deltatover2*accel_inner_core(:,:)
+
 ! write the seismograms with time shift
 
 ! store the seismograms only if there is at least one receiver located in this slice



More information about the CIG-COMMITS mailing list