Table of Contents
- Part I: Setting up SPECFEM3D_GLOBE
- Part II: Continental-scale Simulations
- Part III: Visualization
- Part IV: Adjoint Simulations (Bonus)
- Further Work
Part IV: Adjoint Simulations (Bonus)
In this final part of the tutorial, we will look at how to run adjoint simulations. SPECFEM3D_GLOBE supports two types of adjoint simulations: for source inversions and for finite-frequency kernels. In this tutorial, we will focus on the application to finite-frequency kernels, but the steps required are similar for both applications. The steps we need to take are the following:
- Run Forward Simulation and Save State Variables
- Prepare the Adjoint Source(s)
- Run Kernel Simulation
Run Forward Simulation and Save State Variables
The first step is similar to what we have done in the previous parts of the tutorial. We need to run a forward simulation and save the state variables at the end of the simulation, such that we can back-propagate the wavefield in the kernel simulation.
In order to save the state variables, we need to select this option in the
Par_file by setting the following option to
SAVE_FORWARD = .true. # save last frame of forward simulation or not
We need the output seismograms to be in
ASCII format, so we change the
# output format for the seismograms (one can use either or all of the three formats) OUTPUT_SEISMOS_ASCII_TEXT = .true. OUTPUT_SEISMOS_SAC_BINARY = .false.
Furthermore, to save memory, we will also set the visualization parameters and
ATTENUATION in the
.false. as follows:
... ATTENUATION = .false. ... # 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. ... # save mesh files to check the mesh SAVE_MESH_FILES = .false. ...
.false requires that we recompile the code.
Therefore, we need to run
make clean followed by
make all in the root folder
and allow the compilation to complete.
After the code has compiled, we can go ahead and run the forward simulation
by submitting the
submit_solver script to the job queue
We can then monitor the job with
squeue, and check the
OUTPUT_FILES/output_solver.txt file to make sure that the solver ran
In this section, we have looked at how to run the solver and save the state variables that will be used in the kernel simulation.
In the next section we will look at how to prepare the adjoint sources that will be used in the kernel simulation to back-propagate the wavefield.