[cig-commits] r18123 - in seismo/3D/SPECFEM3D_GLOBE/trunk: EXAMPLES/noise_examples EXAMPLES/noise_examples/global_long EXAMPLES/noise_examples/global_short EXAMPLES/noise_examples/regional src/specfem3D
yangl at geodynamics.org
yangl at geodynamics.org
Tue Mar 22 13:44:45 PDT 2011
Author: yangl
Date: 2011-03-22 13:44:44 -0700 (Tue, 22 Mar 2011)
New Revision: 18123
Modified:
seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/global_long/adj_traveltime_filter.f90
seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/global_short/adj_traveltime_filter.f90
seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/pre-processing
seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/regional/adj_traveltime_filter.f90
seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/noise_tomography.f90
seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/specfem3D.f90
Log:
fix EXAMPLES/noise_tomography to fit updates made in other subroutines. write SURFACE_MOVIE using the same c rountine for absorbing boundaries (presumably much faster and more effective, since there is only one file on each PROC for the whole simulation instead of one file for each time step)
Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/global_long/adj_traveltime_filter.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/global_long/adj_traveltime_filter.f90 2011-03-21 00:13:58 UTC (rev 18122)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/global_long/adj_traveltime_filter.f90 2011-03-22 20:44:44 UTC (rev 18123)
@@ -54,11 +54,11 @@
misfit_traveltime = 0.0d0
!!!! loading data and synthetics !!!!
do irec = 1,nrec
- file_data = './ZZZ_2/A7.II.LHZ.sem.ascii'
+ file_data = './ZZZ_2/A7.II.MXZ.sem.ascii'
open(unit=1001,file=trim(file_data),status='old',action='read')
do itime = 1,nstep
- !read(1001,*) t(itime),data_origin(nstep-itime+1,irec) ! original
- read(1001,*) t(itime),data_origin(nstep-itime+1,irec) ! reversed
+ !read(1001,*) t(itime),data_origin(itime,irec) ! original
+ read(1001,*) t(itime),data_origin(nstep-itime+1,irec) ! reversed
end do
close(1001)
@@ -163,14 +163,14 @@
end do !do ifreq=1,nfreq
!!!! output !!!!
- file_adj_BHZ = './SEM/A7.II.LHZ.adj'
+ file_adj_BHZ = './SEM/A7.II.MXZ.adj'
open(unit=1002,file=trim(file_adj_BHZ),status='unknown')
do itime = 1,nstep
write(1002,*) t(itime), adj(nstep-itime+1,irec)
! write(1002,*) t(itime), adj(itime,irec)
end do
close(1002)
- file_adj_BHZ = './SEM/A7.II.LHZ.adj_reversed'
+ file_adj_BHZ = './SEM/A7.II.MXZ.adj_reversed'
open(unit=1002,file=trim(file_adj_BHZ),status='unknown')
do itime = 1,nstep
! write(1002,*) t(itime), adj(nstep-itime+1,irec)
Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/global_short/adj_traveltime_filter.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/global_short/adj_traveltime_filter.f90 2011-03-21 00:13:58 UTC (rev 18122)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/global_short/adj_traveltime_filter.f90 2011-03-22 20:44:44 UTC (rev 18123)
@@ -54,11 +54,11 @@
misfit_traveltime = 0.0d0
!!!! loading data and synthetics !!!!
do irec = 1,nrec
- file_data = './ZZZ_2/A7.II.LHZ.sem.ascii'
+ file_data = './ZZZ_2/A7.II.MXZ.sem.ascii'
open(unit=1001,file=trim(file_data),status='old',action='read')
do itime = 1,nstep
- !read(1001,*) t(itime),data_origin(itime,irec) ! original
- read(1001,*) t(itime),data_origin(nstep-itime+1,irec) ! reversed
+ !read(1001,*) t(itime),data_origin(itime,irec) ! original
+ read(1001,*) t(itime),data_origin(nstep-itime+1,irec) ! reversed
end do
close(1001)
@@ -163,14 +163,14 @@
end do !do ifreq=1,nfreq
!!!! output !!!!
- file_adj_BHZ = './SEM/A7.II.LHZ.adj'
+ file_adj_BHZ = './SEM/A7.II.MXZ.adj'
open(unit=1002,file=trim(file_adj_BHZ),status='unknown')
do itime = 1,nstep
write(1002,*) t(itime), adj(nstep-itime+1,irec)
! write(1002,*) t(itime), adj(itime,irec)
end do
close(1002)
- file_adj_BHZ = './SEM/A7.II.LHZ.adj_reversed'
+ file_adj_BHZ = './SEM/A7.II.MXZ.adj_reversed'
open(unit=1002,file=trim(file_adj_BHZ),status='unknown')
do itime = 1,nstep
! write(1002,*) t(itime), adj(nstep-itime+1,irec)
Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/pre-processing
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/pre-processing 2011-03-21 00:13:58 UTC (rev 18122)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/pre-processing 2011-03-22 20:44:44 UTC (rev 18123)
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/bash -eu
example=$1
dir=$PWD/$example
@@ -9,10 +9,10 @@
cd ../../
-mkdir -p SEM zzz_job_info
+mkdir -p SEM zzz_job_info NOISE_TOMOGRAPHY
-cp $dir/A0.II.LHZ.adj ./SEM/
-cp $dir/cp_adj_sources ./SEM/
+#cp $dir/A0.II.LHZ.adj ./SEM/
+#cp $dir/cp_adj_sources ./SEM/
cp $dir/adj_traveltime_filter.f90 ./
cp $dir/NOISE123.submit_atten ./
@@ -28,9 +28,9 @@
cp $dir/CMTSOLUTION_NOISE ./DATA/
cp $dir/STATIONS_NOISE ./DATA/
-cd SEM
-./cp_adj_sources
-cd ..
+#cd SEM
+#./cp_adj_sources
+#cd ..
ifort -o NOISE_adj adj_traveltime_filter.f90
Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/regional/adj_traveltime_filter.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/regional/adj_traveltime_filter.f90 2011-03-21 00:13:58 UTC (rev 18122)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/EXAMPLES/noise_examples/regional/adj_traveltime_filter.f90 2011-03-22 20:44:44 UTC (rev 18123)
@@ -54,7 +54,7 @@
misfit_traveltime = 0.0d0
!!!! loading data and synthetics !!!!
do irec = 1,nrec
- file_data = './ZZZ_2/A7.II.LHZ.sem.ascii'
+ file_data = './ZZZ_2/A7.II.MXZ.sem.ascii'
open(unit=1001,file=trim(file_data),status='old',action='read')
do itime = 1,nstep
!read(1001,*) t(itime),data_origin(itime,irec) ! original
@@ -163,14 +163,14 @@
end do !do ifreq=1,nfreq
!!!! output !!!!
- file_adj_BHZ = './SEM/A7.II.LHZ.adj'
+ file_adj_BHZ = './SEM/A7.II.MXZ.adj'
open(unit=1002,file=trim(file_adj_BHZ),status='unknown')
do itime = 1,nstep
write(1002,*) t(itime), adj(nstep-itime+1,irec)
! write(1002,*) t(itime), adj(itime,irec)
end do
close(1002)
- file_adj_BHZ = './SEM/A7.II.LHZ.adj_reversed'
+ file_adj_BHZ = './SEM/A7.II.MXZ.adj_reversed'
open(unit=1002,file=trim(file_adj_BHZ),status='unknown')
do itime = 1,nstep
! write(1002,*) t(itime), adj(nstep-itime+1,irec)
Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/noise_tomography.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/noise_tomography.f90 2011-03-21 00:13:58 UTC (rev 18122)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/noise_tomography.f90 2011-03-22 20:44:44 UTC (rev 18123)
@@ -215,17 +215,20 @@
subroutine 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, &
- MOVIE_COARSE)
+ MOVIE_COARSE,LOCAL_PATH,NSPEC_TOP)
implicit none
include 'mpif.h'
include "precision.h"
include "constants.h"
include "OUTPUT_FILES/values_from_mesher.h"
! input parameters
- integer :: myrank,NOISE_TOMOGRAPHY,SIMULATION_TYPE,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN
+ integer :: myrank,NOISE_TOMOGRAPHY,SIMULATION_TYPE,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN, NSPEC_TOP
logical :: SAVE_FORWARD,ROTATE_SEISMOGRAMS_RT,SAVE_ALL_SEISMOS_IN_ONE_FILE, USE_BINARY_FOR_LARGE_FILE,MOVIE_COARSE
+ character(len=150) :: LOCAL_PATH
! output parameters
! local parameters
+ integer :: reclen
+ character(len=150) :: outputname
if (myrank == 0) then
@@ -272,6 +275,16 @@
if (SAVE_FORWARD) &
call exit_mpi(myrank,'NOISE_TOMOGRAPHY=3 requires SAVE_FORWARD=.false.! check DATA/Par_file')
endif
+
+ if (NOISE_TOMOGRAPHY/=0) then
+ ! save/read the surface movie using the same c routine as we do for absorbing boundaries (file ID is 21)
+ reclen=CUSTOM_REAL*NDIM*NGLLX*NGLLY*NSPEC_TOP
+ write(outputname,"('/proc',i6.6,'_surface_movie')") myrank
+ if (NOISE_TOMOGRAPHY==1) call open_file_abs_w(21,trim(LOCAL_PATH)//outputname,len_trim(trim(LOCAL_PATH)//outputname),reclen)
+ if (NOISE_TOMOGRAPHY==2) call open_file_abs_r(21,trim(LOCAL_PATH)//outputname,len_trim(trim(LOCAL_PATH)//outputname),reclen)
+ if (NOISE_TOMOGRAPHY==3) call open_file_abs_r(21,trim(LOCAL_PATH)//outputname,len_trim(trim(LOCAL_PATH)//outputname),reclen)
+ endif
+
end subroutine check_parameters_noise
! =============================================================================================================
@@ -412,7 +425,7 @@
! subroutine for NOISE TOMOGRAPHY
! step 1: calculate the "ensemble forward source"
! save surface movie (displacement) at every time steps, for step 2 & 3.
- subroutine noise_save_surface_movie(myrank,nmovie_points,displ_crust_mantle, &
+ subroutine noise_save_surface_movie_original(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, &
@@ -473,7 +486,57 @@
write(IOUT_NOISE) store_val_uy
write(IOUT_NOISE) store_val_uz
close(IOUT_NOISE)
+ end subroutine noise_save_surface_movie_original
+ subroutine 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,nspec_top, &
+ NIT,it,LOCAL_PATH)
+ implicit none
+ include 'mpif.h'
+ include "precision.h"
+ include "constants.h"
+ include "OUTPUT_FILES/values_from_mesher.h"
+ ! input parameters
+ integer :: myrank,nmovie_points,nspec_top,NIT,it
+ integer, dimension(NSPEC2D_TOP_CM) :: ibelm_top_crust_mantle
+ integer, dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE) :: ibool_crust_mantle
+ real(kind=CUSTOM_REAL), dimension(NDIM,NGLOB_CRUST_MANTLE) :: displ_crust_mantle
+ real(kind=CUSTOM_REAL), dimension(NGLOB_CRUST_MANTLE) :: &
+ xstore_crust_mantle,ystore_crust_mantle,zstore_crust_mantle
+ character(len=150) :: LOCAL_PATH
+ ! output parameters
+ ! local parameters
+ integer :: ipoin,ispec2D,ispec,i,j,k,iglob
+ real(kind=CUSTOM_REAL), dimension(nmovie_points) :: &
+ store_val_x,store_val_y,store_val_z, &
+ store_val_ux,store_val_uy,store_val_uz
+ real(kind=CUSTOM_REAL), dimension(:,:,:,:), allocatable :: SURFACE_MOVIE
+ character(len=150) :: outputname
+
+
+ allocate(SURFACE_MOVIE(NDIM,NGLLX,NGLLY,nspec_top))
+ ! get coordinates of surface mesh and surface displacement
+ do ispec2D = 1, nspec_top ! NSPEC2D_TOP(IREGION_CRUST_MANTLE)
+ ispec = ibelm_top_crust_mantle(ispec2D)
+ k = NGLLZ
+ do j = 1,NGLLY,NIT
+ do i = 1,NGLLX,NIT
+ iglob = ibool_crust_mantle(i,j,k,ispec)
+ SURFACE_MOVIE(:,i,j,ispec2D)=displ_crust_mantle(:,iglob)
+ enddo
+ enddo
+ enddo
+
+ ! save surface motion to disk
+ ! LOCAL storage is better than GLOBAL, because we have to save the 'movie' at every time step
+ ! also note that the surface movie does NOT have to be shared with other nodes/CPUs
+ ! change LOCAL_PATH specified in "DATA/Par_file"
+ write(outputname,"('/proc',i6.6,'_surface_movie')") myrank
+ call write_abs(21,SURFACE_MOVIE,CUSTOM_REAL*NDIM*NGLLX*NGLLY*nspec_top,it)
+ deallocate(SURFACE_MOVIE)
end subroutine noise_save_surface_movie
! =============================================================================================================
@@ -485,7 +548,7 @@
! read surface movie (displacement) at every time steps, injected as the source of "ensemble forward wavefield"
! in step 2, call noise_read_add_surface_movie(..., NSTEP-it+1 ,...)
! in step 3, call noise_read_add_surface_movie(..., it ,...)
- subroutine noise_read_add_surface_movie(myrank,nmovie_points,accel_crust_mantle, &
+ subroutine noise_read_add_surface_movie_original(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,nspec_top, &
@@ -549,6 +612,69 @@
enddo
+ end subroutine noise_read_add_surface_movie_original
+
+ subroutine 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,nspec_top, &
+ NIT,it,LOCAL_PATH,jacobian2D_top_crust_mantle,wgllwgll_xy)
+ implicit none
+ include 'mpif.h'
+ include "precision.h"
+ include "constants.h"
+ include "OUTPUT_FILES/values_from_mesher.h"
+ ! input parameters
+ integer :: myrank,nmovie_points,nspec_top,NIT,it
+ integer, dimension(NSPEC2D_TOP_CM) :: ibelm_top_crust_mantle
+ integer, dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE) :: ibool_crust_mantle
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NSPEC2D_TOP_CM) :: jacobian2D_top_crust_mantle
+ real(kind=CUSTOM_REAL), dimension(NDIM,NGLOB_CRUST_MANTLE) :: accel_crust_mantle ! both input and output
+ real(kind=CUSTOM_REAL), dimension(nmovie_points) :: normal_x_noise,normal_y_noise,normal_z_noise, mask_noise
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY) :: wgllwgll_xy
+ character(len=150) :: LOCAL_PATH
+ ! output parameters
+ ! local parameters
+ integer :: ipoin,ispec2D,ispec,i,j,k,iglob,ios
+ real(kind=CUSTOM_REAL), dimension(nmovie_points) :: store_val_ux,store_val_uy,store_val_uz
+ real(kind=CUSTOM_REAL) :: eta
+ real(kind=CUSTOM_REAL), dimension(:,:,:,:), allocatable :: SURFACE_MOVIE
+ character(len=150) :: outputname
+
+
+ allocate(SURFACE_MOVIE(NDIM,NGLLX,NGLLY,nspec_top))
+ ! read surface movie
+ write(outputname,"('/proc',i6.6,'_surface_movie')") myrank
+ call read_abs(21,SURFACE_MOVIE,CUSTOM_REAL*NDIM*NGLLX*NGLLY*nspec_top,it)
+ ! get coordinates of surface mesh and surface displacement
+ ipoin = 0
+ do ispec2D = 1, nspec_top ! NSPEC2D_TOP(IREGION_CRUST_MANTLE)
+ ispec = ibelm_top_crust_mantle(ispec2D)
+
+ k = NGLLZ
+
+ ! loop on all the points inside the element
+ do j = 1,NGLLY,NIT
+ do i = 1,NGLLX,NIT
+ ipoin = ipoin + 1
+ iglob = ibool_crust_mantle(i,j,k,ispec)
+
+ eta = SURFACE_MOVIE(1,i,j,ispec2D) * normal_x_noise(ipoin) + &
+ SURFACE_MOVIE(2,i,j,ispec2D) * normal_y_noise(ipoin) + &
+ SURFACE_MOVIE(3,i,j,ispec2D) * normal_z_noise(ipoin)
+
+ accel_crust_mantle(1,iglob) = accel_crust_mantle(1,iglob) + eta * mask_noise(ipoin) * normal_x_noise(ipoin) &
+ * wgllwgll_xy(i,j) * jacobian2D_top_crust_mantle(i,j,ispec2D)
+ accel_crust_mantle(2,iglob) = accel_crust_mantle(2,iglob) + eta * mask_noise(ipoin) * normal_y_noise(ipoin) &
+ * wgllwgll_xy(i,j) * jacobian2D_top_crust_mantle(i,j,ispec2D)
+ accel_crust_mantle(3,iglob) = accel_crust_mantle(3,iglob) + eta * mask_noise(ipoin) * normal_z_noise(ipoin) &
+ * wgllwgll_xy(i,j) * jacobian2D_top_crust_mantle(i,j,ispec2D)
+ enddo
+ enddo
+
+ enddo
+ deallocate(SURFACE_MOVIE)
+
end subroutine noise_read_add_surface_movie
! =============================================================================================================
@@ -557,7 +683,7 @@
! subroutine for NOISE TOMOGRAPHY
! step 3: constructing noise source strength kernel
- subroutine compute_kernels_strength_noise(myrank,ibool_crust_mantle, &
+ subroutine compute_kernels_strength_noise_original(myrank,ibool_crust_mantle, &
Sigma_kl_crust_mantle,displ_crust_mantle,deltat,it, &
nmovie_points,normal_x_noise,normal_y_noise,normal_z_noise, &
nspec_top,ibelm_top_crust_mantle,LOCAL_PATH)
@@ -620,6 +746,66 @@
enddo
+ end subroutine compute_kernels_strength_noise_original
+
+ subroutine 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, &
+ nspec_top,ibelm_top_crust_mantle,LOCAL_PATH)
+ implicit none
+ include "constants.h"
+ include "OUTPUT_FILES/values_from_mesher.h"
+ ! input parameters
+ integer :: myrank,nmovie_points,it,nspec_top
+ integer, dimension(NSPEC2D_TOP_CM) :: ibelm_top_crust_mantle
+ integer, dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE) :: ibool_crust_mantle
+ real(kind=CUSTOM_REAL) :: deltat
+ real(kind=CUSTOM_REAL), dimension(NDIM,NGLOB_CRUST_MANTLE_ADJOINT) :: displ_crust_mantle
+ real(kind=CUSTOM_REAL), dimension(nmovie_points) :: normal_x_noise,normal_y_noise,normal_z_noise
+ character(len=150) :: LOCAL_PATH
+ ! output parameters
+ real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_CRUST_MANTLE_ADJOINT) :: &
+ Sigma_kl_crust_mantle
+ ! local parameters
+ integer :: i,j,k,ispec,iglob,ipoin,ispec2D,ios
+ real(kind=CUSTOM_REAL) :: eta
+ real(kind=CUSTOM_REAL), dimension(nmovie_points) :: store_val_ux,store_val_uy,store_val_uz
+ real(kind=CUSTOM_REAL), dimension(:,:,:,:), allocatable :: SURFACE_MOVIE
+ character(len=150) :: outputname
+
+
+ allocate(SURFACE_MOVIE(NDIM,NGLLX,NGLLY,nspec_top))
+ ! read surface movie, needed for Sigma_kl_crust_mantle
+ write(outputname,"('/proc',i6.6,'_surface_movie')") myrank
+ call read_abs(21,SURFACE_MOVIE,CUSTOM_REAL*NDIM*NGLLX*NGLLY*nspec_top,it)
+ ! noise source strength kernel
+ ! to keep similar structure to other kernels, the source strength kernel is saved as a volumetric kernel
+ ! but only updated at the surface, because the noise is generated there
+ ipoin = 0
+ do ispec2D = 1, nspec_top
+ ispec = ibelm_top_crust_mantle(ispec2D)
+
+ k = NGLLZ
+
+ ! loop on all the points inside the element
+ do j = 1,NGLLY
+ do i = 1,NGLLX
+ ipoin = ipoin + 1
+ iglob = ibool_crust_mantle(i,j,k,ispec)
+
+ eta = SURFACE_MOVIE(1,i,j,ispec2D) * normal_x_noise(ipoin) + &
+ SURFACE_MOVIE(2,i,j,ispec2D) * normal_y_noise(ipoin) + &
+ SURFACE_MOVIE(3,i,j,ispec2D) * normal_z_noise(ipoin)
+
+ Sigma_kl_crust_mantle(i,j,k,ispec) = Sigma_kl_crust_mantle(i,j,k,ispec) &
+ + deltat * eta * ( normal_x_noise(ipoin) * displ_crust_mantle(1,iglob) &
+ + normal_y_noise(ipoin) * displ_crust_mantle(2,iglob) &
+ + normal_z_noise(ipoin) * displ_crust_mantle(3,iglob) )
+ enddo
+ enddo
+
+ enddo
+
end subroutine compute_kernels_strength_noise
! =============================================================================================================
Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/specfem3D.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/specfem3D.f90 2011-03-21 00:13:58 UTC (rev 18122)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/specfem3D/specfem3D.f90 2011-03-22 20:44:44 UTC (rev 18123)
@@ -1796,7 +1796,7 @@
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, &
- MOVIE_COARSE)
+ MOVIE_COARSE,LOCAL_PATH,NSPEC2D_TOP(IREGION_CRUST_MANTLE))
endif
!>YANGL
@@ -4306,6 +4306,10 @@
endif
+ ! save/read the surface movie using the same c routine as we do for absorbing boundaries (file ID is 21)
+ if (NOISE_TOMOGRAPHY\=0) call close_file_abs(21)
+
+
! synchronize all processes
call MPI_BARRIER(MPI_COMM_WORLD,ier)
if( ier /= 0 ) call exit_mpi(myrank,'error synchronize closing snapshots')
More information about the CIG-COMMITS
mailing list