[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