Table of Contents
- Overview
- Introduction
- Part I: Setting up SPECFEM3D_GLOBE
- Part II: Continental-scale Simulations
- Part III: Visualization
- Part IV: Adjoint Simulations (Bonus)
- Further Work
- Resources
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 .true.
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
Par_file
accordingly:
# 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 Par_file
to .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.
...
Changing ATTENUATION
to .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
sbatch submit_solver
We can then monitor the job with squeue
, and check the
OUTPUT_FILES/output_solver.txt
file to make sure that the solver ran
successfully.
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.