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

dkomati1 at geodynamics.org dkomati1 at geodynamics.org
Wed Aug 6 14:15:54 PDT 2008


Author: dkomati1
Date: 2008-08-06 14:15:54 -0700 (Wed, 06 Aug 2008)
New Revision: 12556

Modified:
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/locate_sources.f90
Log:
converted locate_sources.f90 from heap to stack


Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/locate_sources.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/locate_sources.f90	2008-08-06 21:06:16 UTC (rev 12555)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/locate_sources.f90	2008-08-06 21:15:54 UTC (rev 12556)
@@ -108,7 +108,6 @@
   double precision dgamma
 
   double precision final_distance_source(NSOURCES)
-  double precision, dimension(:), allocatable :: final_distance_source_subset
 
   double precision x_target_source,y_target_source,z_target_source
   double precision r_target_source
@@ -120,17 +119,11 @@
 
   integer isources_already_done,isource_in_this_subset
   integer ispec_selected_source(NSOURCES)
-  integer, dimension(:), allocatable :: ispec_selected_source_subset
 
-  integer, dimension(:,:), allocatable :: ispec_selected_source_all
-  double precision, dimension(:,:), allocatable :: xi_source_all,eta_source_all,gamma_source_all, &
-     final_distance_source_all,x_found_source_all,y_found_source_all,z_found_source_all
-
   double precision hdur(NSOURCES)
 
   double precision, dimension(NSOURCES) :: Mxx,Myy,Mzz,Mxy,Mxz,Myz
   double precision, dimension(NSOURCES) :: xi_source,eta_source,gamma_source
-  double precision, dimension(:), allocatable :: xi_source_subset,eta_source_subset,gamma_source_subset
 
   double precision, dimension(NSOURCES) :: lat,long,depth
   double precision scalar_moment
@@ -139,7 +132,6 @@
 
   character(len=150) OUTPUT_FILES,plot_file
 
-  double precision, dimension(:), allocatable :: x_found_source,y_found_source,z_found_source
   double precision r_found_source
   double precision st,ct,sp,cp
   double precision Mrr,Mtt,Mpp,Mrt,Mrp,Mtp
@@ -161,6 +153,20 @@
   integer iorientation
   double precision stazi,stdip,thetan,phin,n(3)
 
+! allocate these automatic arrays in the memory stack to avoid memory fragmentation with "allocate()"
+  double precision, dimension(NSOURCES_SUBSET_MAX) :: final_distance_source_subset
+
+  integer, dimension(NSOURCES_SUBSET_MAX) :: ispec_selected_source_subset
+
+  integer, dimension(NSOURCES_SUBSET_MAX,0:NPROCTOT-1) :: ispec_selected_source_all
+
+  double precision, dimension(NSOURCES_SUBSET_MAX,0:NPROCTOT-1) :: xi_source_all,eta_source_all,gamma_source_all, &
+     final_distance_source_all,x_found_source_all,y_found_source_all,z_found_source_all
+
+  double precision, dimension(NSOURCES_SUBSET_MAX) :: xi_source_subset,eta_source_subset,gamma_source_subset
+
+  double precision, dimension(NSOURCES_SUBSET_MAX) :: x_found_source,y_found_source,z_found_source
+
 ! **************
 
 ! make sure we clean the future final array
@@ -209,31 +215,6 @@
 ! or if there are fewer sources than the maximum size of a subset)
   NSOURCES_SUBSET_current_size = min(NSOURCES_SUBSET_MAX, NSOURCES - isources_already_done)
 
-! allocate arrays specific to each subset
-  allocate(final_distance_source_subset(NSOURCES_SUBSET_current_size))
-
-  allocate(ispec_selected_source_subset(NSOURCES_SUBSET_current_size))
-
-  allocate(ispec_selected_source_all(NSOURCES_SUBSET_current_size,0:NPROCTOT-1))
-
-  allocate(xi_source_all(NSOURCES_SUBSET_current_size,0:NPROCTOT-1))
-  allocate(eta_source_all(NSOURCES_SUBSET_current_size,0:NPROCTOT-1))
-  allocate(gamma_source_all(NSOURCES_SUBSET_current_size,0:NPROCTOT-1))
-
-  allocate(final_distance_source_all(NSOURCES_SUBSET_current_size,0:NPROCTOT-1))
-
-  allocate(x_found_source_all(NSOURCES_SUBSET_current_size,0:NPROCTOT-1))
-  allocate(y_found_source_all(NSOURCES_SUBSET_current_size,0:NPROCTOT-1))
-  allocate(z_found_source_all(NSOURCES_SUBSET_current_size,0:NPROCTOT-1))
-
-  allocate(xi_source_subset(NSOURCES_SUBSET_current_size))
-  allocate(eta_source_subset(NSOURCES_SUBSET_current_size))
-  allocate(gamma_source_subset(NSOURCES_SUBSET_current_size))
-
-  allocate(x_found_source(NSOURCES_SUBSET_current_size))
-  allocate(y_found_source(NSOURCES_SUBSET_current_size))
-  allocate(z_found_source(NSOURCES_SUBSET_current_size))
-
 ! make sure we clean the subset array before the gather
   ispec_selected_source_subset(:) = 0
 
@@ -666,15 +647,6 @@
 
   endif ! end of section executed by main process only
 
-! deallocate arrays specific to each subset
-  deallocate(final_distance_source_subset)
-  deallocate(ispec_selected_source_subset)
-  deallocate(ispec_selected_source_all)
-  deallocate(xi_source_all,eta_source_all,gamma_source_all,final_distance_source_all)
-  deallocate(x_found_source_all,y_found_source_all,z_found_source_all)
-  deallocate(xi_source_subset,eta_source_subset,gamma_source_subset)
-  deallocate(x_found_source,y_found_source,z_found_source)
-
   enddo ! end of loop over all source subsets
 
 ! display maximum error in location estimate



More information about the cig-commits mailing list