[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