[cig-commits] r22622 - in seismo/3D/SPECFEM3D_GLOBE/trunk/src: create_header_file meshfem3D shared specfem3D

dkomati1 at geodynamics.org dkomati1 at geodynamics.org
Mon Jul 15 17:32:13 PDT 2013


Author: dkomati1
Date: 2013-07-15 17:32:13 -0700 (Mon, 15 Jul 2013)
New Revision: 22622

Modified:
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/create_header_file/create_header_file.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/meshfem3D/meshfem3D.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/save_header_file.F90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/locate_sources.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/setup_sources_receivers.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/specfem3D.F90
Log:
switched to static memory allocation for mask_source() and used an "equivalence" statement in order to reuse memory for the mask;
thus now saving the source mask has no additional cost in terms of memory in the case of large runs


Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/create_header_file/create_header_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/create_header_file/create_header_file.f90	2013-07-16 00:06:11 UTC (rev 22621)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/create_header_file/create_header_file.f90	2013-07-16 00:32:13 UTC (rev 22622)
@@ -217,7 +217,7 @@
                   NSPEC_CRUST_MANTLE_STACEY,NSPEC_OUTER_CORE_STACEY, &
                   NGLOB_CRUST_MANTLE_OCEANS,NSPEC_OUTER_CORE_ROTATION, &
                   SIMULATION_TYPE,SAVE_FORWARD,MOVIE_VOLUME,SAVE_REGULAR_KL,NOISE_TOMOGRAPHY, &
-                  ATT1,ATT2,ATT3,ATT4,ATT5,APPROXIMATE_HESS_KL,ANISOTROPIC_KL,PARTIAL_PHYS_DISPERSION_ONLY)
+                  ATT1,ATT2,ATT3,ATT4,ATT5,APPROXIMATE_HESS_KL,ANISOTROPIC_KL,PARTIAL_PHYS_DISPERSION_ONLY,SAVE_SOURCE_MASK)
 
   print *
   print *,'edit file OUTPUT_FILES/values_from_mesher.h to see'

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/meshfem3D/meshfem3D.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/meshfem3D/meshfem3D.f90	2013-07-16 00:06:11 UTC (rev 22621)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/meshfem3D/meshfem3D.f90	2013-07-16 00:32:13 UTC (rev 22622)
@@ -877,7 +877,7 @@
                     NSPEC_CRUST_MANTLE_STACEY,NSPEC_OUTER_CORE_STACEY, &
                     NGLOB_CRUST_MANTLE_OCEANS,NSPEC_OUTER_CORE_ROTATION, &
                     SIMULATION_TYPE,SAVE_FORWARD,MOVIE_VOLUME,SAVE_REGULAR_KL,NOISE_TOMOGRAPHY, &
-                    ATT1,ATT2,ATT3,ATT4,ATT5,APPROXIMATE_HESS_KL,ANISOTROPIC_KL,PARTIAL_PHYS_DISPERSION_ONLY)
+                    ATT1,ATT2,ATT3,ATT4,ATT5,APPROXIMATE_HESS_KL,ANISOTROPIC_KL,PARTIAL_PHYS_DISPERSION_ONLY,SAVE_SOURCE_MASK)
 
   endif   ! end of section executed by main process only
 

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/save_header_file.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/save_header_file.F90	2013-07-16 00:06:11 UTC (rev 22621)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/save_header_file.F90	2013-07-16 00:32:13 UTC (rev 22622)
@@ -52,7 +52,7 @@
                         NSPEC_CRUST_MANTLE_STACEY,NSPEC_OUTER_CORE_STACEY, &
                         NGLOB_CRUST_MANTLE_OCEANS,NSPEC_OUTER_CORE_ROTATION, &
                         SIMULATION_TYPE,SAVE_FORWARD,MOVIE_VOLUME,SAVE_REGULAR_KL,NOISE_TOMOGRAPHY, &
-                        ATT1,ATT2,ATT3,ATT4,ATT5,APPROXIMATE_HESS_KL,ANISOTROPIC_KL,PARTIAL_PHYS_DISPERSION_ONLY)
+                        ATT1,ATT2,ATT3,ATT4,ATT5,APPROXIMATE_HESS_KL,ANISOTROPIC_KL,PARTIAL_PHYS_DISPERSION_ONLY,SAVE_SOURCE_MASK)
 
   implicit none
 
@@ -64,7 +64,7 @@
 
   logical TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
           ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_3D,INCLUDE_CENTRAL_CUBE, &
-          SAVE_REGULAR_KL,APPROXIMATE_HESS_KL,ANISOTROPIC_KL,PARTIAL_PHYS_DISPERSION_ONLY
+          SAVE_REGULAR_KL,APPROXIMATE_HESS_KL,ANISOTROPIC_KL,PARTIAL_PHYS_DISPERSION_ONLY,SAVE_SOURCE_MASK
 
   double precision ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES, &
           CENTER_LONGITUDE_IN_DEGREES,CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH
@@ -573,6 +573,13 @@
   endif
   write(IOUT,*)
 
+  if (SAVE_SOURCE_MASK) then
+    write(IOUT,*) 'integer, parameter :: NSPEC_CRUST_MANTLE_MASK_SOURCE = NSPEC_CRUST_MANTLE'
+  else
+    write(IOUT,*) 'integer, parameter :: NSPEC_CRUST_MANTLE_MASK_SOURCE = 1'
+  endif
+  write(IOUT,*)
+
 !! DK DK Jul 2013: we need that for the part1_*.f90 and part2_*.f90 include files, which some compilers
 !! DK DK Jul 2013: refuse to preprocess even if we rename them *.F90
 #ifdef FORCE_VECTORIZATION

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/locate_sources.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/locate_sources.f90	2013-07-16 00:06:11 UTC (rev 22621)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/locate_sources.f90	2013-07-16 00:32:13 UTC (rev 22622)
@@ -37,7 +37,7 @@
                             islice_selected_source,ispec_selected_source, &
                             xi_source,eta_source,gamma_source, nu_source, &
                             rspl,espl,espl2,nspl,ibathy_topo,NEX_XI,PRINT_SOURCE_TIME_FUNCTION, &
-                            LOCAL_PATH,SIMULATION_TYPE,SAVE_SOURCE_MASK)
+                            LOCAL_PATH,SIMULATION_TYPE,SAVE_SOURCE_MASK,mask_source)
 
   use mpi
 
@@ -171,7 +171,7 @@
   double precision t_cmt_used(NSOURCES)
 
   ! mask source region (mask values are between 0 and 1, with 0 around sources)
-  real(kind=CUSTOM_REAL),dimension(:,:,:,:),allocatable :: mask_source
+  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC) :: mask_source
 
   ! get MPI starting time for all sources
   time_start = MPI_WTIME()
@@ -208,11 +208,7 @@
   call hex_nodes(iaddx,iaddy,iaddr)
 
   ! initializes source mask
-  if( SAVE_SOURCE_MASK .and. SIMULATION_TYPE == 3 ) then
-    allocate(mask_source(NGLLX,NGLLY,NGLLZ,NSPEC),stat=ier)
-    if( ier /= 0 ) call exit_mpi(myrank,'error allocating mask source array')
-    mask_source(:,:,:,:) = 1.0_CUSTOM_REAL
-  endif
+  if( SAVE_SOURCE_MASK .and. SIMULATION_TYPE == 3 ) mask_source(:,:,:,:) = 1.0_CUSTOM_REAL
 
   ! loop on all the sources
   ! gather source information in subsets to reduce memory requirements
@@ -850,7 +846,6 @@
 ! stores source mask
   if( SAVE_SOURCE_MASK .and. SIMULATION_TYPE == 3 ) then
     call save_mask_source(myrank,mask_source,NSPEC,LOCAL_PATH)
-    deallocate( mask_source )
   endif
 
   end subroutine locate_sources

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/setup_sources_receivers.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/setup_sources_receivers.f90	2013-07-16 00:06:11 UTC (rev 22621)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/setup_sources_receivers.f90	2013-07-16 00:32:13 UTC (rev 22622)
@@ -38,7 +38,7 @@
                       stlat,stlon,stele,stbur,nu, &
                       nrec_local,nadj_rec_local,nrec_simulation, &
                       SIMULATION_TYPE,RECEIVERS_CAN_BE_BURIED,MOVIE_SURFACE,MOVIE_VOLUME, &
-                      HDUR_MOVIE,OUTPUT_FILES,LOCAL_PATH,SAVE_SOURCE_MASK)
+                      HDUR_MOVIE,OUTPUT_FILES,LOCAL_PATH,SAVE_SOURCE_MASK,mask_source)
 
   use mpi
 
@@ -59,6 +59,9 @@
 
   logical TOPOGRAPHY,SAVE_SOURCE_MASK
 
+  ! mask source region (mask values are between 0 and 1, with 0 around sources)
+  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE) :: mask_source
+
   double precision sec,DT,t0,min_tshift_cmt_original
 
   double precision, dimension(NSOURCES) :: tshift_cmt,hdur,hdur_gaussian
@@ -136,7 +139,7 @@
             islice_selected_source,ispec_selected_source, &
             xi_source,eta_source,gamma_source, nu_source, &
             rspl,espl,espl2,nspl,ibathy_topo,NEX_XI,PRINT_SOURCE_TIME_FUNCTION, &
-            LOCAL_PATH,SIMULATION_TYPE,SAVE_SOURCE_MASK)
+            LOCAL_PATH,SIMULATION_TYPE,SAVE_SOURCE_MASK,mask_source)
 
   if(abs(minval(tshift_cmt)) > TINYVAL) &
     call exit_MPI(myrank,'one tshift_cmt must be zero, others must be positive')

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/specfem3D.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/specfem3D.F90	2013-07-16 00:06:11 UTC (rev 22621)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/specfem3D.F90	2013-07-16 00:32:13 UTC (rev 22622)
@@ -943,6 +943,11 @@
     cmt_lat_SAC,cmt_lon_SAC,cmt_depth_SAC,cmt_hdur_SAC,sec_SAC
   character(len=20) event_name_SAC
 
+  ! mask source region (mask values are between 0 and 1, with 0 around sources)
+  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_MASK_SOURCE) :: mask_source_crust_mantle
+  ! to save memory in the case of very large runs, equivalence these two arrays that are never used simultaneously
+  equivalence(mask_source_crust_mantle,hess_kl_crust_mantle)
+
 ! this for all the regions
   integer, dimension(MAX_NUM_REGIONS) :: NSPEC2DMAX_XMIN_XMAX,NSPEC2DMAX_YMIN_YMAX, &
                NSPEC2D_BOTTOM,NSPEC2D_TOP, &
@@ -1594,7 +1599,7 @@
                       stlat,stlon,stele,stbur,nu, &
                       nrec_local,nadj_rec_local,nrec_simulation, &
                       SIMULATION_TYPE,RECEIVERS_CAN_BE_BURIED,MOVIE_SURFACE,MOVIE_VOLUME, &
-                      HDUR_MOVIE,OUTPUT_FILES,LOCAL_PATH,SAVE_SOURCE_MASK)
+                      HDUR_MOVIE,OUTPUT_FILES,LOCAL_PATH,SAVE_SOURCE_MASK,mask_source_crust_mantle)
 
   ! allocates source arrays
   if (SIMULATION_TYPE == 1  .or. SIMULATION_TYPE == 3) then



More information about the CIG-COMMITS mailing list