[cig-commits] r16558 - in seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY: . DATA
yangl at geodynamics.org
yangl at geodynamics.org
Sat Apr 17 15:00:09 PDT 2010
Author: yangl
Date: 2010-04-17 15:00:08 -0700 (Sat, 17 Apr 2010)
New Revision: 16558
Modified:
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/DATA/Par_file.default
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/DATA/Par_file.in
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/Makefile.in
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/broadcast_compute_parameters.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/check_buffers_1D.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/combine_AVS_DX.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_header_file.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_movie_AVS_DX.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_movie_GMT_global.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/initialize_simulation.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/meshfem3D.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/read_compute_parameters.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/read_parameter_file.f90
seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/specfem3D.f90
Log:
adding noise tomography capability, draft version
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/DATA/Par_file.default
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/DATA/Par_file.default 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/DATA/Par_file.default 2010-04-17 22:00:08 UTC (rev 16558)
@@ -1,7 +1,8 @@
# forward or adjoint simulation
SIMULATION_TYPE = 1
-SAVE_FORWARD = .false. # save last frame of forward simulation or not
+NOISE_TOMOGRAPHY = 1 # flag of noise tomography, three steps (1,2,3). If earthquake simulation, set it to 0.
+SAVE_FORWARD = .true. # save last frame of forward simulation or not
# number of chunks (1,2,3 or 6)
NCHUNKS = 6
@@ -15,12 +16,12 @@
# number of elements at the surface along the two sides of the first chunk
# (must be multiple of 16 and 8 * multiple of NPROC below)
-NEX_XI = 240
-NEX_ETA = 240
+NEX_XI = 160
+NEX_ETA = 160
# number of MPI processors along the two sides of the first chunk
-NPROC_XI = 5
-NPROC_ETA = 5
+NPROC_XI = 10
+NPROC_ETA = 10
# 1D models with real structure:
# 1D_isotropic_prem, 1D_transversely_isotropic_prem, 1D_iasp91, 1D_1066a, 1D_ak135, 1D_ref, 1D_ref_iso, 1D_jp3d,1D_sea99
@@ -37,26 +38,26 @@
# to take the 1D crustal model from the
# associated reference model rather than the default 3D crustal model
# e.g. s20rts_1Dcrust, s362ani_1Dcrust, etc.
-MODEL = s362ani
+MODEL = 1D_isotropic_prem
# parameters describing the Earth model
-OCEANS = .true.
-ELLIPTICITY = .true.
-TOPOGRAPHY = .true.
-GRAVITY = .true.
-ROTATION = .true.
-ATTENUATION = .true.
+OCEANS = .false.
+ELLIPTICITY = .false.
+TOPOGRAPHY = .false.
+GRAVITY = .false.
+ROTATION = .false.
+ATTENUATION = .false.
# absorbing boundary conditions for a regional simulation
ABSORBING_CONDITIONS = .false.
# record length in minutes
-RECORD_LENGTH_IN_MINUTES = 15.0d0
+RECORD_LENGTH_IN_MINUTES = 5.0d0
# save AVS or OpenDX movies
#MOVIE_COARSE saves movie only at corners of elements (SURFACE OR VOLUME)
#MOVIE_COARSE does not work with create_movie_AVS_DX
-MOVIE_SURFACE = .false.
+MOVIE_SURFACE = .true.
MOVIE_VOLUME = .false.
MOVIE_COARSE = .false.
NTSTEP_BETWEEN_FRAMES = 100
@@ -86,7 +87,8 @@
NUMBER_OF_THIS_RUN = 1
# path to store the local database files on each node
-LOCAL_PATH = ./DATABASES_MPI
+LOCAL_PATH = /scratch/yangl/DATABASES_MPI
+#/scratch/yangl/DATABASES_MPI
# interval at which we output time step info and max of norm of displacement
NTSTEP_BETWEEN_OUTPUT_INFO = 1000
@@ -115,5 +117,4 @@
RECEIVERS_CAN_BE_BURIED = .true.
# print source time function
-PRINT_SOURCE_TIME_FUNCTION = .false.
-
+PRINT_SOURCE_TIME_FUNCTION = .true.
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/DATA/Par_file.in
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/DATA/Par_file.in 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/DATA/Par_file.in 2010-04-17 22:00:08 UTC (rev 16558)
@@ -1,7 +1,8 @@
# forward or adjoint simulation
SIMULATION_TYPE = 1
-SAVE_FORWARD = .false. # save last frame of forward simulation or not
+NOISE_TOMOGRAPHY = 1 # flag of noise tomography, three steps (1,2,3). If earthquake simulation, set it to 0.
+SAVE_FORWARD = .true. # save last frame of forward simulation or not
# number of chunks (1,2,3 or 6)
NCHUNKS = 6
@@ -15,12 +16,12 @@
# number of elements at the surface along the two sides of the first chunk
# (must be multiple of 16 and 8 * multiple of NPROC below)
-NEX_XI = 240
-NEX_ETA = 240
+NEX_XI = 160
+NEX_ETA = 160
# number of MPI processors along the two sides of the first chunk
-NPROC_XI = 5
-NPROC_ETA = 5
+NPROC_XI = 10
+NPROC_ETA = 10
# 1D models with real structure:
# 1D_isotropic_prem, 1D_transversely_isotropic_prem, 1D_iasp91, 1D_1066a, 1D_ak135, 1D_ref, 1D_ref_iso, 1D_jp3d,1D_sea99
@@ -37,26 +38,26 @@
# to take the 1D crustal model from the
# associated reference model rather than the default 3D crustal model
# e.g. s20rts_1Dcrust, s362ani_1Dcrust, etc.
-MODEL = s362ani
+MODEL = 1D_isotropic_prem
# parameters describing the Earth model
-OCEANS = .true.
-ELLIPTICITY = .true.
-TOPOGRAPHY = .true.
-GRAVITY = .true.
-ROTATION = .true.
-ATTENUATION = .true.
+OCEANS = .false.
+ELLIPTICITY = .false.
+TOPOGRAPHY = .false.
+GRAVITY = .false.
+ROTATION = .false.
+ATTENUATION = .false.
# absorbing boundary conditions for a regional simulation
ABSORBING_CONDITIONS = .false.
# record length in minutes
-RECORD_LENGTH_IN_MINUTES = 15.0d0
+RECORD_LENGTH_IN_MINUTES = 5.0d0
# save AVS or OpenDX movies
#MOVIE_COARSE saves movie only at corners of elements (SURFACE OR VOLUME)
#MOVIE_COARSE does not work with create_movie_AVS_DX
-MOVIE_SURFACE = .false.
+MOVIE_SURFACE = .true.
MOVIE_VOLUME = .false.
MOVIE_COARSE = .false.
NTSTEP_BETWEEN_FRAMES = 100
@@ -86,7 +87,8 @@
NUMBER_OF_THIS_RUN = 1
# path to store the local database files on each node
-LOCAL_PATH = ./DATABASES_MPI
+LOCAL_PATH = /scratch/yangl/DATABASES_MPI
+#/scratch/yangl/DATABASES_MPI
# interval at which we output time step info and max of norm of displacement
NTSTEP_BETWEEN_OUTPUT_INFO = 1000
@@ -115,5 +117,4 @@
RECEIVERS_CAN_BE_BURIED = .true.
# print source time function
-PRINT_SOURCE_TIME_FUNCTION = .false.
-
+PRINT_SOURCE_TIME_FUNCTION = .true.
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/Makefile.in
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/Makefile.in 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/Makefile.in 2010-04-17 22:00:08 UTC (rev 16558)
@@ -229,6 +229,7 @@
$O/specfem3D.o \
$O/write_movie_volume.o \
$O/write_movie_surface.o \
+ $O/noise_tomography.o \
$(EMPTY_MACRO)
XCREATE_HEADER_OBJECTS = \
@@ -735,6 +736,9 @@
$O/write_movie_volume.o: constants.h OUTPUT_FILES/values_from_mesher.h $S/write_movie_volume.f90
${MPIFCCOMPILE_NO_CHECK} -c -o $O/write_movie_volume.o ${FCFLAGS_f90} $S/write_movie_volume.f90
+$O/noise_tomography.o: constants.h OUTPUT_FILES/values_from_mesher.h $S/noise_tomography.f90
+ ${MPIFCCOMPILE_NO_CHECK} -c -o $O/noise_tomography.o ${FCFLAGS_f90} $S/noise_tomography.f90
+
### non-dependent on values from mesher here
$O/assemble_MPI_scalar.o: constants.h $S/assemble_MPI_scalar.f90
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/broadcast_compute_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/broadcast_compute_parameters.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/broadcast_compute_parameters.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -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)
+ ATTENUATION,ATTENUATION_3D,ANISOTROPIC_INNER_CORE,NOISE_TOMOGRAPHY)
implicit none
@@ -75,7 +75,7 @@
NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
- MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
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, &
@@ -125,7 +125,7 @@
! local parameters
double precision, dimension(31) :: bcast_double_precision
- integer, dimension(38) :: bcast_integer
+ integer, dimension(39) :: bcast_integer
logical, dimension(35) :: bcast_logical
integer ier
@@ -146,7 +146,7 @@
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,&
SIMULATION_TYPE,REFERENCE_1D_MODEL,THREE_D_MODEL,NPROC,NPROCTOT, &
NEX_PER_PROC_XI,NEX_PER_PROC_ETA,ratio_divide_central_cube,&
- MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NSOURCES/)
+ MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NSOURCES,NOISE_TOMOGRAPHY/)
bcast_logical = (/TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
CRUSTAL,ELLIPTICITY,GRAVITY,ONE_CRUST,ROTATION,ISOTROPIC_3D_MANTLE,HETEROGEN_3D_MANTLE, &
@@ -168,7 +168,7 @@
endif
! broadcasts the information read on the master to the nodes
- call MPI_BCAST(bcast_integer,38,MPI_INTEGER,0,MPI_COMM_WORLD,ier)
+ 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)
@@ -242,6 +242,7 @@
MOVIE_START = bcast_integer(36)
MOVIE_STOP = bcast_integer(37)
NSOURCES = bcast_integer(38)
+ NOISE_TOMOGRAPHY = bcast_integer(39)
! logicals
TRANSVERSE_ISOTROPY = bcast_logical(1)
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/check_buffers_1D.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/check_buffers_1D.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/check_buffers_1D.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -60,7 +60,7 @@
NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS, &
- NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE,REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE,REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
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, &
@@ -148,7 +148,7 @@
OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
ROTATE_SEISMOGRAMS_RT,ratio_divide_central_cube,HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
- WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,.false.)
+ WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,.false.,NOISE_TOMOGRAPHY)
! get the base pathname for output files
call get_value_string(OUTPUT_FILES, 'OUTPUT_FILES', 'OUTPUT_FILES')
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/combine_AVS_DX.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/combine_AVS_DX.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/combine_AVS_DX.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -130,7 +130,7 @@
NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
- REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
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, &
@@ -224,7 +224,7 @@
HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,&
- USE_BINARY_FOR_LARGE_FILE,.false.)
+ USE_BINARY_FOR_LARGE_FILE,.false.,NOISE_TOMOGRAPHY)
if(.not. SAVE_MESH_FILES) stop 'AVS or DX files were not saved by the mesher'
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_header_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_header_file.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_header_file.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -42,7 +42,7 @@
NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
- REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
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, &
@@ -137,7 +137,7 @@
OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
ROTATE_SEISMOGRAMS_RT,ratio_divide_central_cube,HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
- WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,.false.)
+ WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,.false.,NOISE_TOMOGRAPHY)
! count the total number of sources in the CMTSOLUTION file
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_movie_AVS_DX.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_movie_AVS_DX.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_movie_AVS_DX.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -546,7 +546,7 @@
write(11,"(f10.7,1x,f10.7,1x,f10.7)") &
xp_save(ilocnum+ieoff),yp_save(ilocnum+ieoff),zp_save(ilocnum+ieoff)
else if(USE_AVS) then
- write(11,"(i6,1x,f10.7,1x,f10.7,1x,f10.7)") ireorder(ibool_number), &
+ write(11,"(i10,1x,f10.7,1x,f10.7,1x,f10.7)") ireorder(ibool_number), &
xp_save(ilocnum+ieoff),yp_save(ilocnum+ieoff),zp_save(ilocnum+ieoff)
endif
endif
@@ -717,7 +717,7 @@
NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
- REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
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, &
@@ -791,7 +791,7 @@
OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
ROTATE_SEISMOGRAMS_RT,ratio_divide_central_cube,HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
- WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,.false.)
+ WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,.false.,NOISE_TOMOGRAPHY)
if(MOVIE_COARSE) stop 'create_movie_AVS_DX does not work with MOVIE_COARSE'
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_movie_GMT_global.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_movie_GMT_global.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/create_movie_GMT_global.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -108,7 +108,7 @@
NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
- REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
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, &
@@ -195,7 +195,7 @@
OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
ROTATE_SEISMOGRAMS_RT,ratio_divide_central_cube,HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
- WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,.false.)
+ WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,.false.,NOISE_TOMOGRAPHY)
if(.not. MOVIE_SURFACE) stop 'movie frames were not saved by the solver'
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/initialize_simulation.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/initialize_simulation.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/initialize_simulation.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -55,7 +55,7 @@
hprime_xx,hprime_yy,hprime_zz,hprime_xxT, &
hprimewgll_xx,hprimewgll_yy,hprimewgll_zz,hprimewgll_xxT, &
wgllwgll_xy,wgllwgll_xz,wgllwgll_yz, &
- rec_filename,STATIONS,nrec)
+ rec_filename,STATIONS,nrec,NOISE_TOMOGRAPHY)
implicit none
@@ -73,7 +73,7 @@
NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,SIMULATION_TYPE, &
- MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
double precision DT,ROCEAN,RMIDDLE_CRUST, &
RMOHO,R80,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &
@@ -191,7 +191,7 @@
HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE, &
- USE_BINARY_FOR_LARGE_FILE,.false.)
+ USE_BINARY_FOR_LARGE_FILE,.false.,NOISE_TOMOGRAPHY)
if(err_occurred() /= 0) then
call exit_MPI(myrank,'an error occurred while reading the parameter file')
@@ -232,7 +232,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)
+ ATTENUATION,ATTENUATION_3D,ANISOTROPIC_INNER_CORE,NOISE_TOMOGRAPHY)
! get the base pathname for output files
call get_value_string(OUTPUT_FILES, 'OUTPUT_FILES', 'OUTPUT_FILES')
@@ -329,7 +329,7 @@
endif
! check that the code is running with the requested nb of processes
- if(sizeprocs /= NPROCTOT) call exit_MPI(myrank,'wrong number of MPI processes')
+ if(sizeprocs /= NPROCTOT) call exit_MPI(myrank,'wrong number of MPI processes(initialization specfem)')
! check that the code has been compiled with the right values
if (NSPEC_computed(IREGION_CRUST_MANTLE) /= NSPEC_CRUST_MANTLE) then
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/meshfem3D.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/meshfem3D.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/meshfem3D.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -321,7 +321,7 @@
NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
- MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
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, &
@@ -510,7 +510,7 @@
HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE, &
- USE_BINARY_FOR_LARGE_FILE,.false.)
+ USE_BINARY_FOR_LARGE_FILE,.false.,NOISE_TOMOGRAPHY)
if(err_occurred() /= 0) &
call exit_MPI(myrank,'an error occurred while reading the parameter file')
@@ -549,7 +549,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)
+ ATTENUATION,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')
@@ -825,7 +825,7 @@
NGLOB_INNER_CORE_ADJOINT,NSPEC_OUTER_CORE_ROT_ADJOINT, &
NSPEC_CRUST_MANTLE_STACEY,NSPEC_OUTER_CORE_STACEY, &
NGLOB_CRUST_MANTLE_OCEANS,NSPEC_OUTER_CORE_ROTATION, &
- SIMULATION_TYPE,SAVE_FORWARD,MOVIE_VOLUME)
+ SIMULATION_TYPE,SAVE_FORWARD,MOVIE_VOLUME,NOISE_TOMOGRAPHY)
endif ! end of section executed by main process only
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/read_compute_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/read_compute_parameters.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/read_compute_parameters.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -56,7 +56,7 @@
HONOR_1D_SPHERICAL_MOHO,CUT_SUPERBRICK_XI,CUT_SUPERBRICK_ETA,&
DIFF_NSPEC1D_RADIAL,DIFF_NSPEC2D_XI,DIFF_NSPEC2D_ETA,&
WRITE_SEISMOGRAMS_BY_MASTER,SAVE_ALL_SEISMOS_IN_ONE_FILE,&
- USE_BINARY_FOR_LARGE_FILE,EMULATE_ONLY)
+ USE_BINARY_FOR_LARGE_FILE,EMULATE_ONLY,NOISE_TOMOGRAPHY)
implicit none
@@ -68,7 +68,7 @@
integer NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
- NEX_XI_read,NEX_ETA_read,NPROC_XI_read,NPROC_ETA_read
+ NEX_XI_read,NEX_ETA_read,NPROC_XI_read,NPROC_ETA_read,NOISE_TOMOGRAPHY
double precision ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,&
CENTER_LONGITUDE_IN_DEGREES,CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,&
@@ -165,7 +165,7 @@
SAVE_MESH_FILES,ATTENUATION,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)
+ SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,NOISE_TOMOGRAPHY)
! converts values to radians
MOVIE_EAST = MOVIE_EAST_DEG * DEGREES_TO_RADIANS
@@ -225,6 +225,10 @@
! compute total number of time steps, rounded to next multiple of 100
NSTEP = 100 * (int(RECORD_LENGTH_IN_MINUTES * 60.d0 / (100.d0*DT)) + 1)
+!<YANGL
+ if ( NOISE_TOMOGRAPHY /= 0 ) NSTEP = 2*NSTEP-1 ! time steps needs to be doubled, due to +/- branches
+!>YANGL
+
! subsets used to save seismograms must not be larger than the whole time series,
! otherwise we waste memory
if(NTSTEP_BETWEEN_OUTPUT_SEISMOS > NSTEP) then
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/read_parameter_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/read_parameter_file.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/read_parameter_file.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -41,7 +41,7 @@
SAVE_MESH_FILES,ATTENUATION,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)
+ SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,NOISE_TOMOGRAPHY)
implicit none
@@ -51,7 +51,7 @@
integer NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
- NEX_XI_read,NEX_ETA_read,NPROC_XI_read,NPROC_ETA_read
+ NEX_XI_read,NEX_ETA_read,NPROC_XI_read,NPROC_ETA_read,NOISE_TOMOGRAPHY
double precision ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,&
CENTER_LONGITUDE_IN_DEGREES,CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,&
@@ -82,6 +82,8 @@
! reads in values
call read_value_integer(SIMULATION_TYPE, 'solver.SIMULATION_TYPE')
if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: SIMULATION_TYPE'
+ call read_value_integer(NOISE_TOMOGRAPHY, 'solver.NOISE_TOMOGRAPHY')
+ if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NOISE_TOMOGRAPHY'
call read_value_logical(SAVE_FORWARD, 'solver.SAVE_FORWARD')
if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: SAVE_FORWARD'
call read_value_integer(NCHUNKS, 'mesher.NCHUNKS')
Modified: seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/specfem3D.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/specfem3D.f90 2010-04-17 21:33:15 UTC (rev 16557)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/NOISE_TOMOGRAPHY/specfem3D.f90 2010-04-17 22:00:08 UTC (rev 16558)
@@ -527,7 +527,7 @@
real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_OUTER_CORE_ADJOINT) :: b_div_displ_outer_core
real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_ADJOINT) :: rho_kl_crust_mantle, &
- beta_kl_crust_mantle, alpha_kl_crust_mantle
+ beta_kl_crust_mantle, alpha_kl_crust_mantle, Sigma_kl_crust_mantle
! For anisotropic kernels (see compute_kernels.f90 for a definition of the array)
real(kind=CUSTOM_REAL), dimension(21,NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_ADJOINT) :: cijkl_kl_crust_mantle
@@ -687,7 +687,7 @@
NTSTEP_BETWEEN_OUTPUT_SEISMOS,&
NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,SIMULATION_TYPE, &
- MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP
+ MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,NOISE_TOMOGRAPHY
double precision DT,ROCEAN,RMIDDLE_CRUST, &
RMOHO,R80,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &
@@ -752,6 +752,14 @@
integer :: i,ier
+!<YANGL
+! NOISE_TOMOGRAPHY
+ real(kind=CUSTOM_REAL), dimension(:,:,:,:,:), allocatable :: noise_sourcearray
+ integer :: irec_master_noise
+ real(kind=CUSTOM_REAL), dimension(:), allocatable :: &
+ normal_x_noise,normal_y_noise,normal_z_noise, mask_noise
+!>YANGL
+
!daniel: debugging
!integer:: indx(1)
@@ -851,7 +859,7 @@
hprime_xx,hprime_yy,hprime_zz,hprime_xxT, &
hprimewgll_xx,hprimewgll_yy,hprimewgll_zz,hprimewgll_xxT, &
wgllwgll_xy,wgllwgll_xz,wgllwgll_yz, &
- rec_filename,STATIONS,nrec)
+ rec_filename,STATIONS,nrec,NOISE_TOMOGRAPHY)
!
!-------------------------------------------------------------------------------------------------
@@ -1377,20 +1385,15 @@
enddo
! allocate files to save movies
- if(MOVIE_SURFACE) then
- print *,' movie: '
- if(MOVIE_COARSE) then !only output corners
+ if(MOVIE_SURFACE .or. NOISE_TOMOGRAPHY /=0) then ! for noise tomography, store_val_x/y/z/ux/uy/uz needed for 'surface movie'
+ if(MOVIE_COARSE .and. NOISE_TOMOGRAPHY ==0) then ! only output corners !for noise tomography, must NOT be coarse
nmovie_points = 2 * 2 * NSPEC2D_TOP(IREGION_CRUST_MANTLE)
if(NGLLX /= NGLLY) &
call MPI_exit(myrank,'MOVIE_COARSE together with MOVIE_SURFACE requires NGLLX=NGLLY')
NIT = NGLLX - 1
- print *,' type: surface - coarse'
- print *,' points: ',nmovie_points
else
nmovie_points = NGLLX * NGLLY * NSPEC2D_TOP(IREGION_CRUST_MANTLE)
NIT = 1
- print *,' type: surface - fine'
- print *,' points: ',nmovie_points
endif
allocate(store_val_x(nmovie_points))
allocate(store_val_y(nmovie_points))
@@ -1398,15 +1401,17 @@
allocate(store_val_ux(nmovie_points))
allocate(store_val_uy(nmovie_points))
allocate(store_val_uz(nmovie_points))
-
- allocate(store_val_x_all(nmovie_points,0:NPROCTOT_VAL-1))
- allocate(store_val_y_all(nmovie_points,0:NPROCTOT_VAL-1))
- allocate(store_val_z_all(nmovie_points,0:NPROCTOT_VAL-1))
- allocate(store_val_ux_all(nmovie_points,0:NPROCTOT_VAL-1))
- allocate(store_val_uy_all(nmovie_points,0:NPROCTOT_VAL-1))
- allocate(store_val_uz_all(nmovie_points,0:NPROCTOT_VAL-1))
+ if (MOVIE_SURFACE) then ! those arrays are not neccessary for noise tomography, so only allocate them in MOVIE_SURFACE case
+ allocate(store_val_x_all(nmovie_points,0:NPROCTOT_VAL-1))
+ allocate(store_val_y_all(nmovie_points,0:NPROCTOT_VAL-1))
+ allocate(store_val_z_all(nmovie_points,0:NPROCTOT_VAL-1))
+ allocate(store_val_ux_all(nmovie_points,0:NPROCTOT_VAL-1))
+ allocate(store_val_uy_all(nmovie_points,0:NPROCTOT_VAL-1))
+ allocate(store_val_uz_all(nmovie_points,0:NPROCTOT_VAL-1))
+ endif
endif
+
! output point and element information for 3D movies
if(MOVIE_VOLUME) then
! the following has to be true for the the array dimensions of eps to match with those of xstore etc..
@@ -1497,6 +1502,7 @@
rho_kl_crust_mantle(:,:,:,:) = 0._CUSTOM_REAL
beta_kl_crust_mantle(:,:,:,:) = 0._CUSTOM_REAL
alpha_kl_crust_mantle(:,:,:,:) = 0._CUSTOM_REAL
+ Sigma_kl_crust_mantle(:,:,:,:) = 0._CUSTOM_REAL
! For anisotropic kernels (in crust_mantle only)
cijkl_kl_crust_mantle(:,:,:,:,:) = 0._CUSTOM_REAL
@@ -1569,6 +1575,35 @@
b_R_memory_crust_mantle,b_R_memory_inner_core, &
b_epsilondev_crust_mantle,b_epsilondev_inner_core, &
b_A_array_rotation,b_B_array_rotation,LOCAL_PATH)
+
+!<YANGL
+ ! NOISE TOMOGRAPHY
+ if ( NOISE_TOMOGRAPHY /= 0 ) then
+ allocate(noise_sourcearray(NDIM,NGLLX,NGLLY,NGLLZ,NSTEP))
+ allocate(normal_x_noise(nmovie_points))
+ allocate(normal_y_noise(nmovie_points))
+ allocate(normal_z_noise(nmovie_points))
+ allocate(mask_noise(nmovie_points))
+ noise_sourcearray = 0._CUSTOM_REAL
+ normal_x_noise = 0._CUSTOM_REAL
+ normal_y_noise = 0._CUSTOM_REAL
+ normal_z_noise = 0._CUSTOM_REAL
+ mask_noise = 0._CUSTOM_REAL
+
+ call read_parameters_noise(myrank,nrec,NSTEP,nmovie_points, &
+ islice_selected_rec,xi_receiver,eta_receiver,gamma_receiver,nu, &
+ noise_sourcearray,xigll,yigll,zigll,NSPEC2D_TOP(IREGION_CRUST_MANTLE), &
+ NIT, ibool_crust_mantle, ibelm_top_crust_mantle, &
+ xstore_crust_mantle,ystore_crust_mantle,zstore_crust_mantle, &
+ irec_master_noise,normal_x_noise,normal_y_noise,normal_z_noise,mask_noise)
+
+ if (myrank == 0) &
+ call check_parameters_noise(myrank,NOISE_TOMOGRAPHY,SIMULATION_TYPE,SAVE_FORWARD, &
+ NUMBER_OF_RUNS, NUMBER_OF_THIS_RUN,ROTATE_SEISMOGRAMS_RT, &
+ SAVE_ALL_SEISMOS_IN_ONE_FILE, USE_BINARY_FOR_LARGE_FILE)
+ endif
+!>YANGL
+
!
!-------------------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------------------
@@ -2378,6 +2413,42 @@
DT,t0,t_cmt,hdur_gaussian,ibool_crust_mantle, &
islice_selected_source,ispec_selected_source,it)
+!<YANGL
+ ! NOISE_TOMOGRAPHY
+ if ( NOISE_TOMOGRAPHY == 1 ) then
+ ! the first step of noise tomography is to use |S(\omega)|^2 as a point force source at one of the receivers.
+ ! hence, instead of a moment tensor 'sourcearrays', a 'noise_sourcearray' for a point force is needed.
+ ! furthermore, the CMTSOLUTION needs to be zero, i.e., no earthquakes.
+ ! now this must be manually set in DATA/CMTSOLUTION, by USERS.
+ call add_source_master_rec_noise(myrank,nrec, &
+ NSTEP,accel_crust_mantle,noise_sourcearray, &
+ ibool_crust_mantle,islice_selected_rec,ispec_selected_rec, &
+ it,irec_master_noise)
+ elseif ( NOISE_TOMOGRAPHY == 2 ) then
+ ! second step of noise tomography, i.e., read the surface movie saved at every timestep
+ ! use the movie to drive the unsemble forward wavefield
+ call noise_read_add_surface_movie(myrank,nmovie_points,accel_crust_mantle, &
+ normal_x_noise,normal_y_noise,normal_z_noise,mask_noise, &
+ store_val_ux,store_val_uy,store_val_uz, &
+ ibelm_top_crust_mantle,ibool_crust_mantle,NSPEC2D_TOP(IREGION_CRUST_MANTLE), &
+ NIT,NSTEP-it+1,LOCAL_PATH,jacobian2D_top_crust_mantle,wgllwgll_xy)
+ ! be careful, since ensemble forward sources are reversals of generating wavefield "eta"
+ ! hence the "NSTEP-it+1", i.e., start reading from the last timestep
+ ! note the ensemble forward sources are generally distributed on the surface of the earth
+ ! that's to say, the ensemble forward source is kind of a surface force density, not a body force density
+ ! therefore, we must add it here, before applying the inverse of mass matrix
+ elseif ( NOISE_TOMOGRAPHY == 3 ) then
+ ! third step of noise tomography, i.e., read the surface movie saved at every timestep
+ ! use the movie to reconstruct the ensemble forward wavefield
+ ! the ensemble adjoint wavefield is done as usual
+ ! note instead of "NSTEP-it+1", now we us "it", since reconstruction is a reversal
+ call noise_read_add_surface_movie(myrank,nmovie_points,b_accel_crust_mantle, &
+ normal_x_noise,normal_y_noise,normal_z_noise,mask_noise, &
+ store_val_ux,store_val_uy,store_val_uz, &
+ ibelm_top_crust_mantle,ibool_crust_mantle,NSPEC2D_TOP(IREGION_CRUST_MANTLE), &
+ NIT,it,LOCAL_PATH,jacobian2D_top_crust_mantle,wgllwgll_xy)
+ endif
+!>YANGL
! ****************************************************
! ********** add matching with fluid part **********
@@ -2862,6 +2933,15 @@
eps_trace_over_3_inner_core,b_eps_trace_over_3_inner_core, &
deltat)
+!<YANGL
+ ! NOISE TOMOGRAPHY --- source strength kernel
+ if (NOISE_TOMOGRAPHY == 3) &
+ call compute_kernels_strength_noise(myrank,ibool_crust_mantle, &
+ Sigma_kl_crust_mantle,displ_crust_mantle,deltat,it, &
+ nmovie_points,normal_x_noise,normal_y_noise,normal_z_noise, &
+ NSPEC2D_TOP(IREGION_CRUST_MANTLE),ibelm_top_crust_mantle,LOCAL_PATH)
+!>YANGL
+
! --- boundary kernels ------
if (SAVE_BOUNDARY_MESH) then
fluid_solid_boundary = .false.
@@ -3065,6 +3145,20 @@
!-------------------------------------------------------------------------------------------------
!
+!<YANGL
+ ! first step of noise tomography, i.e., save a surface movie at every time step
+ ! modified from the subroutine 'write_movie_surface'
+ if ( NOISE_TOMOGRAPHY == 1 ) then
+ call noise_save_surface_movie(myrank,nmovie_points,displ_crust_mantle, &
+ xstore_crust_mantle,ystore_crust_mantle,zstore_crust_mantle, &
+ store_val_x,store_val_y,store_val_z, &
+ store_val_ux,store_val_uy,store_val_uz, &
+ ibelm_top_crust_mantle,ibool_crust_mantle, &
+ NSPEC2D_TOP(IREGION_CRUST_MANTLE), &
+ NIT,it,LOCAL_PATH)
+ endif
+!>YANGL
+
! save movie on surface
if( MOVIE_SURFACE ) then
if( mod(it,NTSTEP_BETWEEN_FRAMES) == 0) then
@@ -3081,6 +3175,7 @@
endif
endif
+
! save movie in full 3D mesh
if(MOVIE_VOLUME ) then
if( mod(it-MOVIE_START,NTSTEP_BETWEEN_FRAMES) == 0 &
@@ -3227,6 +3322,14 @@
kappavstore_crust_mantle,ibool_crust_mantle, &
LOCAL_PATH)
+!<YANGL
+ ! noise strength kernel
+ if (NOISE_TOMOGRAPHY == 3) then
+ call save_kernels_strength_noise(myrank,LOCAL_PATH, &
+ Sigma_kl_crust_mantle,scale_t,scale_displ)
+ endif
+!>YANGL
+
! outer core
call save_kernels_outer_core(myrank,scale_t,scale_displ, &
rho_kl_outer_core,alpha_kl_outer_core, &
More information about the CIG-COMMITS
mailing list