diff --git a/doc/USER_MANUAL/02_getting_started.tex b/doc/USER_MANUAL/02_getting_started.tex index 60b496b69..5115abf8a 100644 --- a/doc/USER_MANUAL/02_getting_started.tex +++ b/doc/USER_MANUAL/02_getting_started.tex @@ -3,10 +3,9 @@ \chapter{Getting Started}\label{cha:Getting-Started} \section{Configuring and compiling the source code} To get the SPECFEM3D\_GLOBE software package, type this: - -\begin{lyxcode} -git clone --recursive --branch devel https://github.com/geodynamics/specfem3d\_globe.git -\end{lyxcode} +\begin{verbatim} +git clone --recursive --branch devel https://github.com/geodynamics/specfem3d_globe.git +\end{verbatim} We recommend that you add {\texttt{ulimit -S -s unlimited}} to your {\texttt{.bash\_profile}} file and/or {\texttt{limit stacksize unlimited }} to your {\texttt{.cshrc}} file to suppress any potential limit to the size of the Unix stack.\\ @@ -16,10 +15,9 @@ \section{Configuring and compiling the source code} you explicitly specify the appropriate command names for your Fortran compiler and MPI package (another option is to define FC, CC and MPIF90 in your .bash\_profile or your .cshrc file): - -\begin{lyxcode} -./configure~FC=ifort~MPIFC=mpif90 -\end{lyxcode} +\begin{verbatim} +./configure FC=ifort MPIFC=mpif90 +\end{verbatim} Before running the \texttt{configure} script, you should probably edit file \texttt{flags.guess} to make sure that it contains the best compiler options for your system. Known issues or things to check are: @@ -30,9 +28,10 @@ \section{Configuring and compiling the source code} \end{description} When compiling on an IBM machine with the \texttt{xlf} and \texttt{xlc} compilers, we suggest running the \texttt{configure} script -with the following options:\\ - -\noindent\texttt{./configure FC=xlf90\_r MPIFC=mpif90 CC=xlc\_r CFLAGS="-O3 -q64" FCFLAGS="-O3 -q64"}.\\ +with the following options: +\begin{verbatim} +./configure FC=xlf90_r MPIFC=mpif90 CC=xlc_r CFLAGS="-O3 -q64" FCFLAGS="-O3 -q64" +\end{verbatim} On SGI systems, \texttt{flags.guess} automatically informs \texttt{configure} to insert ``\texttt{TRAP\_FPE=OFF}'' into the generated \texttt{Makefile} @@ -60,10 +59,10 @@ \section{Configuring and compiling the source code} when you attempt to build the code. If you are unsure about this, it is usually safe to set both \texttt{FC} and \texttt{MPIFC} to the MPI compiler command for your system: +\begin{verbatim} +./configure FC=mpif90 MPIFC=mpif90 +\end{verbatim} \end{description} -\begin{lyxcode} -./configure~FC=mpif90~MPIFC=mpif90 -\end{lyxcode} \begin{description} \item [{\texttt{FLAGS\_CHECK}}] Compiler flags. \item [{\texttt{LOCAL\_PATH\_IS\_ALSO\_GLOBAL}}] @@ -151,31 +150,28 @@ \section{Using the GPU version of the code} OpenCL can be enabled with the \texttt{--with-opencl} flag, and the compilation can be controlled through three variables: \texttt{OCL\_LIB=}, -\texttt{OCL\_INC=} and \texttt{OCL\_GPU\_FLAGS=}.\\ - -\noindent -\texttt{./configure --with-opencl OCL\_LIB= OCL\_INC= OCL\_GPU\_FLAGS= -..}\\ - +\texttt{OCL\_INC=} and \texttt{OCL\_GPU\_FLAGS=}. +\begin{verbatim} +./configure --with-opencl OCL_LIB= OCL_INC= OCL_GPU_FLAGS=.. +\end{verbatim} Cuda configuration can be enabled with \texttt{--with-cuda} flag and \texttt{CUDA\_FLAGS=}, \texttt{CUDA\_LIB=}, \texttt{CUDA\_INC=} -and \texttt{ MPI\_INC=} variables.\\ - -\noindent -\texttt{./configure --with-cuda=cuda5 CUDA\_FLAGS= CUDA\_LIB= CUDA\_INC= MPI\_INC= ..}\\ +and \texttt{ MPI\_INC=} variables. +\begin{verbatim} +./configure --with-cuda=cuda5 CUDA_FLAGS= CUDA_LIB= CUDA_INC= MPI_INC= .. +\end{verbatim} Both environments can be compiled simultaneously by merging these two lines. For the runtime configuration, the \texttt{GPU\_MODE} flag must be set to \texttt{.true.}. In addition, we use three parameters to select the -environments and GPU: \\ - -\noindent -\texttt{GPU\_RUNTIME = 0|1|2}\\ -\texttt{GPU\_PLATFORM = filter|*}\\ -\texttt{GPU\_DEVICE = filter|*}\\ - +environments and GPU: +\begin{verbatim} +GPU_RUNTIME = 0|1|2 +GPU_PLATFORM = filter|* +GPU_DEVICE = filter|* +\end{verbatim} \texttt{GPU\_RUNTIME} sets the runtime environments: $2$ for OpenCL, $1$ for Cuda and 0 for compile-time decision (hence, SPECFEM should @@ -222,12 +218,11 @@ \section{Compiling on an IBM BlueGene} \underline{More recent installation instruction for IBM BlueGene, from October 2012:}\\ \noindent -Edit file \texttt{flags.guess} and put this for \texttt{FLAGS\_CHECK}:\\ - -\noindent -\texttt{-g -qfullpath -O2 -qsave -qstrict -qtune=qp -qarch=qp -qcache=auto -qhalt=w}\\ -\noindent -\texttt{-qfree=f90 -qsuffix=f=f90 -qlanglvl=95pure -Q -Q+rank,swap\_all -Wl,-relax}\\ +Edit file \texttt{flags.guess} and put this for \texttt{FLAGS\_CHECK}: +\begin{verbatim} +-g -qfullpath -O2 -qsave -qstrict -qtune=qp -qarch=qp -qcache=auto -qhalt=w \ + -qfree=f90 -qsuffix=f=f90 -qlanglvl=95pure -Q -Q+rank,swap_all -Wl,-relax +\end{verbatim} \noindent The most relevant are the -qarch and -qtune flags, otherwise if these flags are set to ``auto'' then they are wrongly assigned to @@ -243,20 +238,20 @@ \section{Compiling on an IBM BlueGene} or \texttt{module load bgq-xl} (another, less efficient option is to load the GNU compilers using \texttt{module load bgq-gnu/4.4.6} or similar).\\ \noindent -Then, to configure the code, type this:\\ - -\noindent -\texttt{./configure FC=bgxlf90\_r MPIFC=mpixlf90\_r CC=bgxlc\_r LOCAL\_PATH\_IS\_ALSO\_GLOBAL=true}\\ +Then, to configure the code, type this: +\begin{verbatim} +./configure FC=bgxlf90_r MPIFC=mpixlf90_r CC=bgxlc_r LOCAL_PATH_IS_ALSO_GLOBAL=true +\end{verbatim} \noindent \underline{Older installation instruction for IBM BlueGene, from 2011:}\\ \noindent To compile the code on an IBM BlueGene, Laurent L\'eger from IDRIS, France, suggests the following: compile the code with - -\noindent -\texttt{ FLAGS\_CHECK="-O3 -qsave -qstrict -qtune=auto -qarch=450d -qcache=auto \\} -\texttt{ -qfree=f90 -qsuffix=f=f90 -g -qlanglvl=95pure -qhalt=w -Q -Q+rank,swap\_all -Wl,-relax"} +\begin{verbatim} +FLAGS\_CHECK="-O3 -qsave -qstrict -qtune=auto -qarch=450d -qcache=auto \ + -qfree=f90 -qsuffix=f=f90 -g -qlanglvl=95pure -qhalt=w -Q -Q+rank,swap_all -Wl,-relax" +\end{verbatim} \noindent Option "-Wl,-relax" must be added on many (but not all) BlueGene systems to be able to link the binaries \texttt{xmeshfem3D} @@ -266,20 +261,20 @@ \section{Compiling on an IBM BlueGene} \noindent One then just needs to pass the right commands to the \texttt{configure} script: - -\noindent -\texttt{ ./configure --prefix=/path/to/SPECFEM3DG\_SP --host=Babel --build=BGP \\} -\texttt{ FC=bgxlf90\_r MPIFC=mpixlf90\_r CC=bgxlc\_r \\} -\texttt{ LOCAL\_PATH\_IS\_ALSO\_GLOBAL=false} +\begin{verbatim} +./configure --prefix=/path/to/SPECFEM3DG_SP --host=Babel --build=BGP \ + FC=bgxlf90_r MPIFC=mpixlf90_r CC=bgxlc_r \ + LOCAL_PATH_IS_ALSO_GLOBAL=false +\end{verbatim} \noindent This trick can be useful for all hosts on which one needs to cross-compile. \noindent On BlueGene, one also needs to run the \texttt{xcreate\_header\_file} binary file manually rather than in the Makefile: - -\noindent - \texttt{bgrun -np 1 -mode VN -exe ./bin/xcreate\_header\_file} +\begin{verbatim} +bgrun -np 1 -mode VN -exe ./bin/xcreate_header_file +\end{verbatim} \section{Using a cross compiler} diff --git a/doc/USER_MANUAL/03_running_the_mesher.tex b/doc/USER_MANUAL/03_running_the_mesher.tex index 210366080..188d0987f 100644 --- a/doc/USER_MANUAL/03_running_the_mesher.tex +++ b/doc/USER_MANUAL/03_running_the_mesher.tex @@ -44,7 +44,7 @@ \chapter{Running the Mesher \texttt{xmeshfem3D}}\label{cha:Running-the-Mesher} %\end{minipage} \hfill %\begin{minipage}[htp]{0.5\textwidth} -\includegraphics[width=0.45\textwidth]{figures/fullmesh_18.pdf} \\ +\includegraphics[width=0.45\textwidth]{figures/fullmesh_18.pdf}\\ %\end{minipage} %\end{minipage} \end{center} @@ -112,7 +112,8 @@ \chapter{Running the Mesher \texttt{xmeshfem3D}}\label{cha:Running-the-Mesher} 17~s. Therefore, since accuracy is determined by the number of grid points per shortest wavelength, for any particular value of $\nexxi$ the simulation will be accurate to a shortest period determined approximately -by \begin{equation} +by +\begin{equation} \mbox{shortest period (s)}\simeq(256/\nexxi)\times17.\label{eq:shortest_period} \end{equation} The number of grid points in each orthogonal direction of the reference @@ -154,7 +155,7 @@ \chapter{Running the Mesher \texttt{xmeshfem3D}}\label{cha:Running-the-Mesher} above the d120 discontinuity we switch back to the classical AK135 model of \cite{KeEnBu95}, i.e., we use AK135-F below and AK135 above. % -\item [{\texttt{1}D\_ref}] A recent 1D Earth model developed by \citet{KuDzEk06}. +\item [{\texttt{1D\_ref}}] A recent 1D Earth model developed by \citet{KuDzEk06}. This model is the 1D background model for the 3D models s362ani, s362wmani, s362ani\_prem, and s29ea. \end{description} @@ -164,14 +165,13 @@ \chapter{Running the Mesher \texttt{xmeshfem3D}}\label{cha:Running-the-Mesher} synthetics, the mesher accommodates versions of various 1D models with a single crustal layer with the properties of the original upper crust. These `one-crust' models are: - -\texttt{1D\_isotropic\_prem\_onecrust} - -\texttt{1D\_transversely\_isotropic\_prem\_onecrust} - -\texttt{1D\_iasp91\_onecrust}, \texttt{1D\_1066a\_onecrust} - -\texttt{1D\_ak135f\_no\_mud\_onecrust} +\begin{verbatim} +1D_isotropic_prem_onecrust +1D_transversely_isotropic_prem_onecrust +1D_iasp91_onecrust +1D_1066a_onecrust +1D_ak135f_no_mud_onecrust +\end{verbatim} \begin{description} \item [{\textmd{Fully~3D~models:}}]~ @@ -196,19 +196,19 @@ \chapter{Running the Mesher \texttt{xmeshfem3D}}\label{cha:Running-the-Mesher} We use the PREM radial attenuation model when \texttt{ATTENUATION} is incorporated. % -\item [{\texttt{\textcolor{black}{s362ani}}}] A global shear-wave speed +\item [{\texttt{s362ani}}] A global shear-wave speed model developed by \citet{KuDzEk06}. In this model, radial anisotropy is confined to the uppermost mantle. The model (and the corresponding mesh) incorporate tomography on the 650\textasciitilde{}km and 410\textasciitilde{}km discontinuities in the 1D reference model REF. % -\item [{\texttt{\textcolor{black}{s362wmani}}}] A version of S362ANI with +\item [{\texttt{s362wmani}}] A version of S362ANI with anisotropy allowed throughout the mantle. % -\item [{\texttt{\textcolor{black}{s362ani\_prem}}}] A version of S362ANI +\item [{\texttt{s362ani\_prem}}] A version of S362ANI calculated using PREM as the 1D reference model. % -\item [{\texttt{\textcolor{black}{s29ea}}}] A global model with higher +\item [{\texttt{s29ea}}] A global model with higher resolution in the upper mantle beneath Eurasia calculated using REF as the 1D reference model. % @@ -250,7 +250,7 @@ \chapter{Running the Mesher \texttt{xmeshfem3D}}\label{cha:Running-the-Mesher} % Thus, flattening f = 1/299.8 is what is used in SPECFEM3D\_GLOBE, as it should. And thus eccentricity squared $e^2 = 1 - (1-f)^2 = 1 - (1 - 1/299.8)^2 = 0.00665998813529$, and the correction factor used in the code to convert geographic latitudes to geocentric is $1 - e^2 = (1-f)^2 = (1 - 1/299.8)^2 = 0.9933400118647$. % -As a comparison, the classical World Geodetic System reference ellipsoid WGS 84 (see e.g. en.wikipedia.org/wiki/World\_Geodetic\_System) has $f = 1/298.2572236$. +As a comparison, the classical World Geodetic System reference ellipsoid WGS 84 (see e.g. \url{http://en.wikipedia.org/wiki/World_Geodetic_System}) has $f = 1/298.2572236$. % \item [{\texttt{TOPOGRAPHY}}] Set to \texttt{.true.} if topography and bathymetry should be incorporated based upon model ETOPO4 \citep{Etopo5}. @@ -284,7 +284,7 @@ \chapter{Running the Mesher \texttt{xmeshfem3D}}\label{cha:Running-the-Mesher} of meshing but is required for the solver, i.e., you may change this parameter after running the mesher. % -\item [{\texttt{PARTIAL\_PHYS\_DISPERSION\_ONLY or UNDO\_ATTENUATION}}] To undo attenuation for sensitivity kernel calculations or forward runs with \texttt{SAVE\_FORWARD} +\item [{\texttt{PARTIAL\_PHYS\_DISPERSION\_ONLY} or \texttt{UNDO\_ATTENUATION}}] To undo attenuation for sensitivity kernel calculations or forward runs with \texttt{SAVE\_FORWARD} use one (and only one) of the two flags below. \texttt{UNDO\_ATTENUATION} is much better (it is exact) and is simpler to use but it requires a significant amount of disk space for temporary storage. It has the advantage of requiring only two simulations for adjoint tomography instead of three in the case of \texttt{PARTIAL\_PHYS\_DISPERSION\_ONLY}, i.e. for adjoint tomography it is globally significantly less expensive (each run is slightly more @@ -796,12 +796,10 @@ \chapter{Running the Mesher \texttt{xmeshfem3D}}\label{cha:Running-the-Mesher} in \texttt{output\_mesher.txt}; this file provides lots of details about the mesh that was generated. Alternatively, output can be directed to the screen instead by uncommenting a line in \texttt{constants.h}: - -\begin{lyxcode} -!~uncomment~this~to~write~messages~to~the~screen~ - -!~integer,~parameter~::~IMAIN~=~ISTANDARD\_OUTPUT~~ -\end{lyxcode} +\begin{verbatim} +! uncomment this to write messages to the screen +! integer, parameter :: IMAIN = ISTANDARD_OUTPUT +\end{verbatim} Note that on very fast machines, writing to the screen may slow down the code. diff --git a/doc/USER_MANUAL/04_running_the_solver.tex b/doc/USER_MANUAL/04_running_the_solver.tex index dc74e5249..8ef42e601 100644 --- a/doc/USER_MANUAL/04_running_the_solver.tex +++ b/doc/USER_MANUAL/04_running_the_solver.tex @@ -24,11 +24,10 @@ \chapter{Running the Solver \texttt{xspecfem3D}}\label{cha:Running-the-Solver} and \texttt{NTSTEPS\_BETWEEN\_FRAMES} \item the multi-stage simulation parameters \texttt{NUMBER\_OF\_RUNS} and \texttt{NUMBER\_OF\_THIS\_RUN} -\item the output information parameters \texttt{NTSTEP\_BETWEEN\_OUTPUT\_INFO, -NTSTEP\_BETWEEN\_OUTPUT\_}~\\ -\texttt{SEISMOS, OUTPUT\_SEISMOS\_ASCII\_TEXT, OUTPUT\_SEISMOS\_SAC\_ALPHANUM, -OUTPUT\_}~\\ -\texttt{SEISMOS\_SAC\_BINARY and ROTATE\_SEISMOGRAMS\_RT} +\item the output information parameters \texttt{NTSTEP\_BETWEEN\_OUTPUT\_INFO}, +\texttt{NTSTEP\_BETWEEN\_OUTPUT\_SEISMOS}, \texttt{OUTPUT\_SEISMOS\_ASCII\_TEXT}, +\texttt{OUTPUT\_SEISMOS\_SAC\_ALPHANUM}, \texttt{OUTPUT\_SEISMOS\_SAC\_BINARY} +and \texttt{ROTATE\_SEISMOGRAMS\_RT} \item the \texttt{RECEIVERS\_CAN\_BE\_BURIED} and \texttt{PRINT\_SOURCE\_TIME\_FUNCTION} flags \end{itemize} @@ -80,10 +79,9 @@ \chapter{Running the Solver \texttt{xspecfem3D}}\label{cha:Running-the-Solver} and the script \texttt{UTILS/convolve\_source\_timefunction.csh} for this purpose, or alternatively use signal-processing software packages such as SAC \urlwithparentheses{http://www.iris.edu/software/sac/}. Type - -\begin{lyxcode} -make~convolve\_source\_timefunction -\end{lyxcode} +\begin{verbatim} +make convolve_source_timefunction +\end{verbatim} to compile the code and then set the parameter \texttt{hdur} in \texttt{UTILS/convolve\_source\_timefunction.csh} to the desired half-duration. @@ -148,50 +146,44 @@ \chapter{Running the Solver \texttt{xspecfem3D}}\label{cha:Running-the-Solver} and convolve afterwards, since the half duration is generally fixed by the finite fault model. -{\small }% -\begin{figure}[H] -\noindent \begin{centering} -{\small \includegraphics[width=5in]{figures/source_timing.pdf} } -\par\end{centering}{\small \par} - +% +\begin{figure}[htp] +\begin{centering} +\includegraphics[width=5in]{figures/source_timing.pdf} +\end{centering} +% \caption{Example of timing for three sources. The center of the first source triangle is defined to be time zero. Note that this is NOT in general the hypocentral time, or the start time of the source (marked as tstart). The parameter \texttt{time shift} in the \texttt{CMTSOLUTION} file -would be t1(=0), t2, t3 in this case, and the parameter \texttt{half -duration} would be hdur1, hdur2, hdur3 for the sources 1, 2, 3 respectively.} - - -{\small \label{fig:source_timing} } +would be t1(=0), t2, t3 in this case, and the parameter \texttt{half duration} +would be hdur1, hdur2, hdur3 for the sources 1, 2, 3 respectively.} +\label{fig:source_timing} \end{figure} -{\small \par} + The solver can calculate seismograms at any number of stations for basically the same numerical cost, so the user is encouraged to include as many stations as conceivably useful in the \texttt{STATIONS} file, which looks like this: - -{\small }% -\begin{figure}[H] -\noindent \begin{centering} -{\small \includegraphics{figures/STATIONS_global_explained.pdf} } -\par\end{centering}{\small \par} - +% +\begin{figure}[htp] +\begin{centering} +\includegraphics{figures/STATIONS_global_explained.pdf} +\end{centering} +% \caption{Sample \texttt{STATIONS} file. Station latitude and longitude should be provided in geographical coordinates. The width of the station label should be no more than 32 characters (see \texttt{MAX\_LENGTH\_STATION\_NAME} in the \texttt{constants.h} file), and the network label should be no more than 8 characters (see \texttt{MAX\_LENGTH\_NETWORK\_NAME} in the \texttt{constants.h} file).} - \end{figure} -{\small \par} Each line represents one station in the following format: - -\begin{lyxcode} -\noindent {\small Station~Network~Latitude~(degrees)~Longitude~(degrees)~Elevation~(m)~burial~(m)~}{\small \par} -\end{lyxcode} +\begin{verbatim} +Station Network Latitude(degrees) Longitude(degrees) Elevation(m) burial(m) +\end{verbatim} If you want to put a station on the ocean floor, just set elevation and burial depth in the STATIONS file to 0. Equivalently you can also set elevation to a negative value equal @@ -200,46 +192,37 @@ \chapter{Running the Solver \texttt{xspecfem3D}}\label{cha:Running-the-Solver} Solver output is provided in the \texttt{OUTPUT\_FILES} directory in the \texttt{output\_solver.txt} file. Output can be directed to the screen instead by uncommenting a line in \texttt{constants.h}: - -\begin{lyxcode} -!~uncomment~this~to~write~messages~to~the~screen~ - -!~integer,~parameter~::~IMAIN~=~ISTANDARD\_OUTPUT~ -\end{lyxcode} +{\small +\begin{verbatim} +! uncomment this to write messages to the screen +! integer, parameter :: IMAIN = ISTANDARD_OUTPUT +\end{verbatim} +} Note that on very fast machines, writing to the screen may slow down the code. While the solver is running, its progress may be tracked by monitoring the `\texttt{timestamp{*}}' files in the \texttt{OUTPUT\_FILES} directory. These tiny files look something like this: - -\begin{lyxcode} -Time~step~\#~~~~~~~~~~~200~ - -Time:~~~~0.6956667~~~~~~minutes~ - -Elapsed~time~in~seconds~=~~~~~252.6748970000000~ - -Elapsed~time~in~hh:mm:ss~=~~~~0~h~04~m~12~s~ - -Mean~elapsed~time~per~time~step~in~seconds~=~~~~~1.263374485000000~ - -Max~norm~displacement~vector~U~in~solid~in~all~slices~(m)~=~~~~1.9325~ - -Max~non-dimensional~potential~Ufluid~in~fluid~in~all~slices~=~1.1058885E-22~ -\end{lyxcode} +{\small +\begin{verbatim} +Time step # 200 +Time: 0.6956667 minutes +Elapsed time in seconds = 252.6748970000000 +Elapsed time in hh:mm:ss = 0 h 04 m 12 s +Mean elapsed time per time step in seconds = 1.263374485000000 +Max norm displacement vector U in solid in all slices (m) = 1.9325 +Max non-dimensional potential Ufluid in fluid in all slices = 1.1058885E-22 +\end{verbatim} +} The \texttt{timestamp{*}} files provide the \texttt{Mean elapsed time per time step in seconds}, which may be used to assess performance on various machines (assuming you are the only user on a node), as -well as the \texttt{\small Max}{\small{} }\texttt{\small norm}{\small{} -}\texttt{\small displacement}{\small{} }\texttt{\small vector}{\small{} -}\texttt{\small U}{\small{} }\texttt{\small in}{\small{} }\texttt{\small solid}{\small{} -}\texttt{\small in}{\small{} }\texttt{\small all}{\small{} }\texttt{\small slices~(m)}{\small{} -}\texttt{\small and}{\small{} }\texttt{\small Max}{\small{} }\texttt{\small non-dimensional}{\small{} -}\texttt{\small potential}{\small{} }\texttt{\small Ufluid}{\small{} -}\texttt{\small in}{\small{} }\texttt{\small fluid}{\small{} }\texttt{\small in}{\small{} -}\texttt{\small all}{\small{} }\texttt{\small slices}. If something -is wrong with the model, the mesh, or the source, you will see the +well as the +\texttt{Max norm displacement vector U in solid in all slices (m)} +and +\texttt{Max non-dimensional potential Ufluid in fluid in all slices}. +If something is wrong with the model, the mesh, or the source, you will see the code become unstable through exponentionally growing values of the displacement and/or fluid potential with time, and ultimately the run will be terminated by the program when either of these values @@ -320,7 +303,7 @@ \section{Note on the simultaneous simulation of several earthquakes} }; \end{tikzpicture} \par\end{centering} - +% \caption{ Directory structure when simulating several earthquakes at once. To improve readability, only directories have been drawn.} diff --git a/doc/USER_MANUAL/05_regional_simulations.tex b/doc/USER_MANUAL/05_regional_simulations.tex index dc397cfbe..e8d3350f6 100644 --- a/doc/USER_MANUAL/05_regional_simulations.tex +++ b/doc/USER_MANUAL/05_regional_simulations.tex @@ -24,7 +24,7 @@ \section{One-Chunk Simulations}\label{sec:One-Chunk-Simulations} to be set in the \texttt{Par\_file}: \begin{description} -\item [{$\nchunks$}] Must be set to 1. +\item [{\texttt{NCHUNKS}}] Must be set to 1. \item [{\texttt{ANGULAR\_WIDTH\_XI\_IN\_DEGREES}}] Denotes the width of one side of the chunk ($90^{\circ}$ is a classical value, but you can make it more or less if you want). \item [{\texttt{ANGULAR\_WIDTH\_ETA\_IN\_DEGREES}}] Denotes the width of @@ -44,33 +44,31 @@ \section{One-Chunk Simulations}\label{sec:One-Chunk-Simulations} }\texttt{\small xcreate\_header\_file}. It is important to note that the mesher or the solver does not need to be run to determine the limits of a 1-chunk simulation. -\item [{$\nexxi$}] The number of spectral elements along the $\xi$ side +\item [{\texttt{NEX\_XI}}] The number of spectral elements along the $\xi$ side of the chunk. This number \textit{must} be 8~$\times$~a multiple of $\nprocxi$ defined below. For a $90^{\circ}$ chunk, we do not recommend using $\nexxi$ less than~64 because the curvature of the Earth cannot be honored if one uses too few elements, which results in inaccurate and unstable simulations. -\item [{$\nexeta$}] The number of spectral elements along the $\eta$ +\item [{\texttt{NEX\_ETA}}] The number of spectral elements along the $\eta$ side of the chunk. This number \textit{must} be 8~$\times$~a multiple of $\nproceta$ defined below. Note that in order to get elements that are close to square on the Earth's surface, the following ratios should be similar: - -\begin{lyxcode} -$\texttt{ANGULAR\_WIDTH\_XI\_IN\_DEGREES}/\nexxi$ - -$\texttt{ANGULAR\_WIDTH\_ETA\_IN\_DEGREES}/\nexeta$~ -\end{lyxcode} +\begin{verbatim} +ANGULAR_WIDTH_XI_IN_DEGREES / NEX_XI +ANGULAR_WIDTH_ETA_IN_DEGREES / NEX_ETA +\end{verbatim} Because of the geometry of the cubed sphere, the option of having different values for $\nexxi$ and $\nexeta$ is available only for regional simulations when $\nchunks=1$ (1/6th of the sphere). -\item [{$\nprocxi$}] The number of processors or mesh slices along the +\item [{\texttt{NPROC\_XI}}] The number of processors or mesh slices along the $\xi$ side of the chunk. To accommodate the mesh doubling layers, we must have $\nexxi=8\times c\times\nprocxi$, where $c\ge1$ is a positive integer. See Table~\ref{table:nex} for various suitable choices. -\item [{$\nproceta$}] The number of processors or slices along the $\eta$ +\item [{\texttt{NPROC\_ETA}}] The number of processors or slices along the $\eta$ side of the chunk; we must have $\nexeta=8\times c\times\nproceta$, where $c\ge1$ is a positive integer. $\nprocxi$ and $\nproceta$ must be equal when $\nchunks=6$. @@ -148,7 +146,8 @@ \section{One-Chunk Simulations}\label{sec:One-Chunk-Simulations} for all the details. The approximate shortest period at which a regional simulation is -accurate may be determined based upon the relation \begin{equation} +accurate may be determined based upon the relation +\begin{equation} \mbox{shortest period (s)}\simeq(256/\nexxi)\times(\texttt{ANGULAR\_WIDTH\_XI\_IN\_DEGREES}/90)\times17.\label{eq:shortest_period_regional}\end{equation} diff --git a/doc/USER_MANUAL/06_adjoint_simulations.tex b/doc/USER_MANUAL/06_adjoint_simulations.tex index 41b22bc24..2906c76a8 100644 --- a/doc/USER_MANUAL/06_adjoint_simulations.tex +++ b/doc/USER_MANUAL/06_adjoint_simulations.tex @@ -35,10 +35,9 @@ \section{Adjoint Simulations for Sources Only (not for the Model)}\label{sec:Adj 1} and \texttt{SAVE\_FORWARD = .false.}). You can automatically set these two variables using the \texttt{\small UTILS/change\_simulation\_type.pl} script: - -\begin{lyxcode} -UTILS/change\_simulation\_type.pl~-f~ -\end{lyxcode} +\begin{verbatim} +UTILS/change_simulation_type.pl -f +\end{verbatim} and then collect the recorded seismograms at all the stations given in \texttt{DATA/STATIONS}. @@ -68,18 +67,18 @@ \section{Adjoint Simulations for Sources Only (not for the Model)}\label{sec:Adj sources, i.e., the adjoint sources are in the same forward time sense as the original recorded seismograms. \end{enumerate} + \item \textbf{Set the related parameters and run the adjoint simulation}\\ In the \texttt{DATA/Par\_file}, set the two related parameters to be \texttt{SIMULATION\_TYPE = 2} and \texttt{SAVE\_FORWARD = .false.}. More conveniently, use the scripts \texttt{UTILS/change\_simulation\_type.pl} to modify the \texttt{Par\_file} automatically (\texttt{change\_simulation\_type.pl -a}). Then run the solver to launch the adjoint simulation. -\item \textbf{Collect the seismograms at the original source location} - +\item \textbf{Collect the seismograms at the original source location}\\ After the adjoint simulation has completed successfully, get the seismograms from directory \texttt{OUTPUT\_FILES}. - +% \begin{itemize} \item These adjoint seismograms are recorded at the locations of the original earthquake sources given by the \texttt{DATA/CMTSOLUTION} file, and @@ -95,6 +94,8 @@ \section{Adjoint Simulations for Sources Only (not for the Model)}\label{sec:Adj \end{itemize} \end{enumerate} + + \section{Adjoint Simulations for Finite-Frequency Kernels (Kernel Simulation)}\label{sec:Adjoint-simulation-finite} Finite-frequency sensitivity kernels are computed in two successive @@ -134,6 +135,8 @@ \section{Adjoint Simulations for Finite-Frequency Kernels (Kernel Simulation)}\l contribution are also written to the \texttt{LOCAL\_PATH} when \texttt{SAVE\_FORWARD = .true.}. \end{itemize} + + \item \textbf{Prepare the adjoint sources} @@ -182,6 +185,7 @@ \section{Adjoint Simulations for Finite-Frequency Kernels (Kernel Simulation)}\l You will also need to create a file called STATIONS\_ADJOINT in the "DATA" directory in the root directory of the code. That file can be identical to the DATA/STATIONS file if you had a single station in STATIONS. + \item \textbf{Run the kernel simulation} diff --git a/doc/USER_MANUAL/08_noise_simulations.tex b/doc/USER_MANUAL/08_noise_simulations.tex index dc0b2034a..1dee0ed3f 100644 --- a/doc/USER_MANUAL/08_noise_simulations.tex +++ b/doc/USER_MANUAL/08_noise_simulations.tex @@ -68,15 +68,16 @@ \subsection{Pre-simulation} \item As usual, we first configure the software package using: - -\texttt{./configure FC=ifort MPIFC=mpif90} \\ +\begin{verbatim} +./configure FC=ifort MPIFC=mpif90 +\end{verbatim} \item Next, we need to compile the source code using: - -\texttt{make xmeshfem3D} - -\texttt{make xspecfem3D} \\ +\begin{verbatim} +make xmeshfem3D +make xspecfem3D +\end{verbatim} Before compilation, the \texttt{DATA/Par\_file} must be specified correctly, e.g., \texttt{NOISE\_TOMOGRAPHY} shouldn't be zero; \texttt{RECORD\_LENGTH\_IN\_MINUTES}, @@ -86,10 +87,10 @@ \subsection{Pre-simulation} \item After compiling, you will find two important numbers besides the needed executables: - -\texttt{number of time steps = 31599} - -\texttt{time\_stepping of the solver will be: 0.19000}\\ +\begin{verbatim} +number of time steps = 31599 +time_stepping of the solver will be: 0.19000 +\end{verbatim} The first number will be denoted as \texttt{NSTEP} from now on, and the second one as \texttt{dt}. The two numbers are essential to calculate the ensemble-averaged noise spectrum from either Peterson's noise @@ -103,14 +104,15 @@ \subsection{Pre-simulation} \item A Matlab script is provided to generate the ensemble-averaged noise spectrum. - -\texttt{EXAMPLES/noise\_examples/NOISE\_TOMOGRAPHY.m} (main program)\\ -\texttt{EXAMPLES/noise\_examples/PetersonNoiseModel.m} - +\begin{verbatim} +EXAMPLES/noise_examples/NOISE_TOMOGRAPHY.m (main program) +EXAMPLES/noise_examples/PetersonNoiseModel.m +\end{verbatim} In Matlab, simply run: - -\texttt{NOISE\_TOMOGRAPHY(NSTEP, dt, Tmin, Tmax, NOISE\_MODEL)}\\ +\begin{verbatim} +NOISE_TOMOGRAPHY(NSTEP, dt, Tmin, Tmax, NOISE_MODEL) +\end{verbatim} \texttt{NSTEP} and \texttt{dt} have been given when compiling the specfem3D source code; \texttt{Tmin} and \texttt{Tmax} correspond to the period range you are interested in; @@ -118,12 +120,13 @@ \subsection{Pre-simulation} Details can be found in the Matlab script. After running the Matlab script, you will be given the following information (plus a figure in Matlab): - -\texttt{*************************************************************}\\ -\texttt{the source time function has been saved in:}\\ -\texttt{/data2/yangl/3D\_NOISE/S\_squared} (note this path must be different)\\ -\texttt{S\_squared should be put into directory:}\\ -\texttt{./NOISE\_TOMOGRAPHY/ in the SPECFEM3D\_GLOBE package}\\ +\begin{verbatim} +************************************************************* +the source time function has been saved in: +/data2/yangl/3D_NOISE/S_squared (note this path must be different) +S_squared should be put into directory: +./NOISE_TOMOGRAPHY/ in the SPECFEM3D_GLOBE package +\end{verbatim} In other words, the Matlab script creates a file called \texttt{S\_squared}, which is the first `new' input file we encounter for noise simulations. @@ -177,22 +180,28 @@ \subsection{Simulations} \begin{itemize} \item -Step 1: simulation for generating wavefield\\ -\texttt{SIMULATION\_TYPE=1}\\ -\texttt{NOISE\_TOMOGRAPHY=1}\\ -\texttt{SAVE\_FORWARD} not used, can be either .true. or .false. +Step 1: simulation for generating wavefield +\begin{verbatim} +SIMULATION_TYPE = 1 +NOISE_TOMOGRAPHY = 1 +SAVE_FORWARD not used, can be either .true. or .false. +\end{verbatim} \item -Step 2: simulation for ensemble forward wavefield\\ -\texttt{SIMULATION\_TYPE=1}\\ -\texttt{NOISE\_TOMOGRAPHY=2}\\ -\texttt{SAVE\_FORWARD=.true.} +Step 2: simulation for ensemble forward wavefield +\begin{verbatim} +SIMULATION_TYPE = 1 +NOISE_TOMOGRAPHY = 2 +SAVE_FORWARD = .true. +\end{verbatim} \item -Step 3: simulation for ensemble adjoint wavefield and sensitivity kernels\\ -\texttt{SIMULATION\_TYPE=3}\\ -\texttt{NOISE\_TOMOGRAPHY=3}\\ -\texttt{SAVE\_FORWARD=.false.} +Step 3: simulation for ensemble adjoint wavefield and sensitivity kernels +\begin{verbatim} +SIMULATION_TYPE = 3 +NOISE_TOMOGRAPHY = 3 +SAVE_FORWARD = .false. +\end{verbatim} Note Step 3 is an adjoint simulation, please refer to previous chapters on how to prepare adjoint sources and other necessary files, as well as how adjoint simulations work. @@ -235,13 +244,12 @@ \section{Examples} Note however that they are created for a specific cluster (SESAME@PRINCETON). You have to modify them to fit your own cluster. -The three examples can be executed using (in directory \texttt{EXAMPLES/noise\_examples/}):\\ - -\texttt{./run\_this\_example.sh regional} - -\texttt{./run\_this\_example.sh global\_short} - -\texttt{./run\_this\_example.sh global\_long}\\ +The three examples can be executed using (in directory \texttt{EXAMPLES/noise\_examples/}): +\begin{verbatim} +./run_this_example.sh regional +./run_this_example.sh global_short +./run_this_example.sh global_long +\end{verbatim} Each corresponds to one example, but they are pretty similar. diff --git a/doc/USER_MANUAL/09_gravity_calculations.tex b/doc/USER_MANUAL/09_gravity_calculations.tex index 37131c160..268d5f9f0 100644 --- a/doc/USER_MANUAL/09_gravity_calculations.tex +++ b/doc/USER_MANUAL/09_gravity_calculations.tex @@ -7,8 +7,9 @@ \chapter{Gravity integral calculations for the gravity field of the Earth} (see e.g. en.wikipedia.org/wiki/Gravity\_Field\_and\_Steady-State\_Ocean\_Circulation\_Explorer).\\ That feature is still experimental but should work just fine.\\ -To see how it is implemented and to use it, type this in the root directory of the code:\\ - -\texttt{grep -i GRAVITY\_INTEGRALS src/*/*} - +\noindent +To see how it is implemented and to use it, type this in the root directory of the code: +\begin{verbatim} +grep -i GRAVITY_INTEGRALS src/*/* +\end{verbatim} diff --git a/doc/USER_MANUAL/10_graphics.tex b/doc/USER_MANUAL/10_graphics.tex index 6851ec61a..96fe5036f 100644 --- a/doc/USER_MANUAL/10_graphics.tex +++ b/doc/USER_MANUAL/10_graphics.tex @@ -164,20 +164,17 @@ \section{Finite-Frequency Kernels}\label{sec:Finite-Frequency-Kernels} \texttt{global\_slice\_util }directory. Then copy the \texttt{CMTSOLUTION} file, \texttt{STATIONS\_ADJOINT}, and \texttt{Par\_file}, and run: - -\begin{lyxcode} -global\_slice\_number.pl~CMTSOLUTION~STATIONS\_ADJOINT~Par\_file -\end{lyxcode} +\begin{verbatim} +global_slice_number.pl CMTSOLUTION STATIONS_ADJOINT Par_file +\end{verbatim} In the case of visualization boundary kernels or spherical cross-sections of the volumetric kernels, it is necessary to obtain the slice numbers that cover a belt along the source and receiver great circle path, and you can use the hybrid version: - -\begin{lyxcode} -globe\_slice\_number2.pl~CMTSOLUTION~STATIONS\_ADJOINT~ - -~~~~~Par\_file~belt\_width\_in\_degrees -\end{lyxcode} +\begin{verbatim} +globe_slice_number2.pl CMTSOLUTION STATIONS _ADJOINT \ + Par_file belt_width_in_degrees +\end{verbatim} A typical value for \texttt{belt\_width\_in\_degrees} can be 20. \item For a full 6-chunk simulation, this script will generate the \texttt{slice\_minor}, @@ -195,10 +192,11 @@ \section{Finite-Frequency Kernels}\label{sec:Finite-Frequency-Kernels} \begin{enumerate} \item To accomplish this, you can use or modify the scripts in \texttt{UTILS/collect\_database }directory: - -\begin{lyxcode} -{\small copy\_m(oc,ic)\_globe\_database.pl~slice\_file~lsf\_machine\_file~filename~{[}jobid]}{\small \par} -\end{lyxcode} +{\small +\begin{verbatim} +copy_m(oc,ic)_globe_database.pl slice_file lsf_machine_file filename [jobid] +\end{verbatim} +} for volumetric kernels, where \texttt{\small lsf\_machine\_file} is the machine file generated by the LSF scheduler, \texttt{\small filename} is the kernel name (e.g., \texttt{\small rho\_kernel}, \texttt{\small alpha\_kernel} @@ -206,10 +204,11 @@ \section{Finite-Frequency Kernels}\label{sec:Finite-Frequency-Kernels} is the name of the subdirectory under \texttt{\small LOCAL\_PATH} where all the kernel files are stored. For boundary kernels, you need to use - -\begin{lyxcode} -{\small copy\_surf\_globe\_database.pl~slice\_file~lsf\_machine\_file~filename~{[}jobid]}{\small \par} -\end{lyxcode} +{\small +\begin{verbatim} +copy_surf_globe_database.pl slice_file lsf_machine_file filename [jobid] +\end{verbatim} +} where the filename can be \texttt{\small Moho\_kernel}, \texttt{\small d400\_kernel}, \texttt{\small d670\_kernel}, \texttt{\small CMB\_kernel} and \texttt{\small ICB\_kernel}. @@ -226,29 +225,32 @@ \section{Finite-Frequency Kernels}\label{sec:Finite-Frequency-Kernels} \begin{enumerate} \item Compile it in the global code directory: - -\begin{lyxcode} -{\footnotesize make~combine\_vol\_data~}{\footnotesize \par} - -{\footnotesize ./bin/xcombine\_vol\_data}~{\footnotesize slice\_list}~{\footnotesize kernel\_filename}~ -{\footnotesize input\_topo\_dir}~ -{\footnotesize input\_file\_dir}~{\footnotesize output\_dir} - -{\footnotesize low/high-resolution-flag-0-or-1}~{\footnotesize {[}region]}{\footnotesize \par} -\end{lyxcode} +{\footnotesize +\begin{verbatim} +make combine_vol_data +./bin/xcombine_vol_data slice_list kernel_filename input_topo_dir \ + input_file_dir output_dir low/high-resolution-flag-0-or-1 [region] +\end{verbatim} +} +% where \texttt{input\_dir} is the directory where all the individual kernel files are stored, and \texttt{output\_dir} is where the mesh file will be written. Give 0 for low resolution and 1 for high resolution. If region is not specified, all three regions (crust and mantle, outer core, inner core) -will be collected, otherwise, only the specified region will be. -Here is an example: -\texttt{./xcombine\_vol\_data slices\_major alpha\_kernel input\_topo\_dir} -\texttt{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~input\_file\_dir output\_dir 1} +will be collected, otherwise, only the specified region will be.\\ -\begin{lyxcode} -{\footnotesize ./bin/xcombine\_surf\_data~slice\_list~filename~surfname~input\_dir~output\_dir} -{\footnotesize ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~low/high-resolution~2D/3D}{\footnotesize \par} -\end{lyxcode} +Here is an example: +{\footnotesize +\begin{verbatim} +./xcombine_vol_data slices_major alpha_kernel input_topo_dir input_file_dir output_dir 1 +\end{verbatim} +} +For surface sensitivity kernels, use +{\footnotesize +\begin{verbatim} +./bin/xcombine_surf_data slice_list filename surfname input _dir output_dir low/high-resolution 2D/3D +\end{verbatim} +} where \texttt{surfname} should correspond to the specific kernel file name, and can be chosen from \texttt{Moho}, \texttt{400}, \texttt{670}, \texttt{CMB} and \texttt{ICB}. @@ -268,10 +270,10 @@ \section{Finite-Frequency Kernels}\label{sec:Finite-Frequency-Kernels} \begin{enumerate} \item We next convert the \texttt{.mesh} file into the VTU (Unstructured grid file) format which can be viewed in ParaView, for example: +\begin{verbatim} +mesh2vtu -i file.mesh -o file.vtu +\end{verbatim} -\begin{lyxcode} -mesh2vtu~-i~file.mesh~-o~file.vtu -\end{lyxcode} \item Notice that this program \texttt{mesh2vtu}, in the \texttt{UTILS/Visualization/Paraview/mesh2vtu} directory, uses the VTK \urlwithparentheses{http://www.vtk.org} run-time library for its execution. Therefore, @@ -285,6 +287,7 @@ \section{Finite-Frequency Kernels}\label{sec:Finite-Frequency-Kernels} the source and receiver locations, which can be viewed in Paraview in the next step. + \item \textbf{View the mesh in ParaView} diff --git a/doc/USER_MANUAL/11_running_scheduler.tex b/doc/USER_MANUAL/11_running_scheduler.tex index 46f106abf..613b1d3b5 100644 --- a/doc/USER_MANUAL/11_running_scheduler.tex +++ b/doc/USER_MANUAL/11_running_scheduler.tex @@ -46,54 +46,41 @@ \section{\texttt{run\_lsf.bash}} the mesher and solver together, figures out the number of processors required for this simulation from \texttt{DATA/Par\_file}, and submits the LSF job. - -\begin{lyxcode} -\#!/bin/bash - -\#~use~the~normal~queue~unless~otherwise~directed~queue=\char`\"{}-q~normal\char`\"{}~ - -if~{[}~\$\#~-eq~1~];~then - -~~~~~~~~echo~\char`\"{}Setting~the~queue~to~\$1\char`\"{} - -~~~~~~~~queue=\char`\"{}-q~\$1\char`\"{}~ - -fi~\\ -~\\ -\#~compile~the~mesher~and~the~solver~ - -d=`date'~echo~\char`\"{}Starting~compilation~\$d\char`\"{}~ - -make~clean~ - -make~meshfem3D~ - -make~create\_header\_file~ - -./bin/xcreate\_header\_file~ - -make~specfem3D~ - -d=`date'~ - -echo~\char`\"{}Finished~compilation~\$d\char`\"{}~\\ -~\\ -\#~compute~total~number~of~nodes~needed~ - -NPROC\_XI=`grep~NPROC\_XI~DATA/Par\_file~|~cut~-c~34-~'~ - -NPROC\_ETA=`grep~NPROC\_ETA~DATA/Par\_file~|~cut~-c~34-~'~ - -NCHUNKS=`grep~NCHUNKS~DATA/Par\_file~|~cut~-c~34-~'~\\ -~\\ -\#~total~number~of~nodes~is~the~product~of~the~values~read~ - -numnodes=\$((~\$NCHUNKS~{*}~\$NPROC\_XI~{*}~\$NPROC\_ETA~))~\\ -~\\ -echo~\char`\"{}Submitting~job\char`\"{}~ - -bsub~\$queue~-n~\$numnodes~-W~60~-K~~OUTPUT\_FILES/lsf\_machines - -echo~\char`\"{}\$LSB\_JOBID\char`\"{}~>~OUTPUT\_FILES/jobid - -./remap\_lsf\_machines.pl~OUTPUT\_FILES/lsf\_machines~>OUTPUT\_FILES/machines - -\#~Modif~:~create~a~directory~for~this~job - -shmux~-M50~-Sall~-c~\char`\"{}mkdir~-p~/scratch/\$USER; - -mkdir~-p~\$BASEMPIDIR.\$LSB\_JOBID\char`\"{}~-~<~OUTPUT\_FILES/machines~>/dev/null - -\#~Set~the~local~path~in~Par\_file +{\small +\begin{verbatim} +#!/bin/bash -v +#BSUB -o OUTPUT_FILES/%J.o +#BSUB -a mpich_gm +#BSUB -J go_mesher_solver_lsf -sed~-e~\char`\"{}s:\textasciicircum{}LOCAL\_PATH~.{*}:LOCAL\_PATH~=~\$BASEMPIDIR.\$LSB\_JOBID:\char`\"{} +BASEMPIDIR=/scratch/$USER/DATABASES_MPI +echo "$LSB_MCPU_HOSTS" > OUTPUT_FILES/lsf_machines +echo "$LSB_JOBID" > OUTPUT_FILES/jobid -<~DATA/Par\_file~>~DATA/Par\_file.tmp +./remap_lsf_machines.pl OUTPUT_FILES/lsf_machines > OUTPUT_FILES/machines -mv~DATA/Par\_file.tmp~DATA/Par\_file +# Modif : create a directory for this job +shmux -M50 -Sall \ + -c "mkdir -p /scratch/$USER;mkdir -p $BASEMPIDIR.$LSB_JOBID" - < OUTPUT_FILES/machines >/dev/null -current\_pwd=\$PWD +# Set the local path in Par_file +sed -e "s:^LOCAL_PATH .*:LOCAL_PATH = $BASEMPIDIR.$LSB_JOBID:" < DATA/Par_file > DATA/Par_file.tmp +mv DATA/Par_file.tmp DATA/Par_file -mpirun.lsf~~-{}-gm-no-shmem~-{}-gm-copy-env~\$current\_pwd/bin/xmeshfem3D +current_pwd=$PWD -mpirun.lsf~-{}-gm-no-shmem~-{}-gm-copy-env~\$current\_pwd/bin/xspecfem3D +mpirun.lsf --gm-no-shmem --gm-copy-env $current_pwd/bin/xmeshfem3D +mpirun.lsf --gm-no-shmem --gm-copy-env $current_pwd/bin/xspecfem3D -\#~clean~up +# clean up +cleanbase_jobid.pl OUTPUT_FILES/machines DATA/Par_file +\end{verbatim} +} -cleanbase\_jobid.pl~OUTPUT\_FILES/machines~DATA/Par\_file -\end{lyxcode} \section{\texttt{run\_lsf.kernel} and \texttt{go\_mesher\_solver\_globe.kernel}} diff --git a/doc/USER_MANUAL/12_changing_the_model.tex b/doc/USER_MANUAL/12_changing_the_model.tex index b7ebee734..8166ee3b8 100644 --- a/doc/USER_MANUAL/12_changing_the_model.tex +++ b/doc/USER_MANUAL/12_changing_the_model.tex @@ -17,19 +17,19 @@ \section{Changing the Crustal Model}\label{sec:Changing-the-Crustal} is removed and replaced by extending the mantle. The 3D crustal model is subsequently overprinted onto the crust-less 1D reference model. The call to the 3D crustal routine is of the form +\begin{verbatim} +call model_crust(lat,lon,r,vp,vs,rho,moho,foundcrust,CM_V,elem_in_crust) +\end{verbatim} -\begin{lyxcode} -call~model\_crust(lat,lon,r,vp,vs,rho,moho,foundcrust,CM\_V,elem\_in\_crust) -\end{lyxcode} +\noindent Input to this routine consists of: - \begin{description} \item [{\texttt{lat}}] Latitude in degrees. \item [{\texttt{lon}}] Longitude in degrees. \item [{\texttt{r}}] Non-dimensionalized radius ($0<\texttt{r}<1$). \end{description} +% Output from the routine consists of: - \begin{description} \item [{\texttt{vp}}] Non-dimensionalized compressional wave speed at location (\texttt{lat},\texttt{lon},\texttt{r}). @@ -80,36 +80,22 @@ \section{Changing the Crustal Model}\label{sec:Changing-the-Crustal} which could create a bottleneck on the network in the case of a large number of nodes. For example, in the current call to that routine from \texttt{model\_crust.f90,} we write: -\end{quote} -\begin{lyxcode} -{\footnotesize !~the~variables~read~are~declared~and~stored~in~structure~CM\_V~~~~~}{\footnotesize \par} - -{\footnotesize{}~~if(myrank~==~0)~call~read\_crust\_model(CM\_V)~}{\footnotesize \par} - -{\footnotesize !~broadcast~the~information~read~on~the~master~to~the~nodes~~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(CM\_V\%thlr,NKEYS\_CRUST{*}NLAYERS\_CRUST,MPI\_DOUBLE\_PRECISION,}{\footnotesize \par} - -{\footnotesize{}~~~~~~~~~~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)~~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(CM\_V\%velocp,NKEYS\_CRUST{*}NLAYERS\_CRUST,MPI\_DOUBLE\_PRECISION,}{\footnotesize \par} - -{\footnotesize{}~~~~~~~~~~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)~~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(CM\_V\%velocs,NKEYS\_CRUST{*}NLAYERS\_CRUST,MPI\_DOUBLE\_PRECISION,}{\footnotesize \par} - -{\footnotesize{}~~~~~~~~~~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)~~~~~}{\footnotesize \par} -{\footnotesize{}~~call~MPI\_BCAST(CM\_V\%dens,NKEYS\_CRUST{*}NLAYERS\_CRUST,MPI\_DOUBLE\_PRECISION,}{\footnotesize \par} - -{\footnotesize{}~~~~~~~~~~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)~~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(CM\_V\%abbreviation,NCAP\_CRUST{*}NCAP\_CRUST,MPI\_CHARACTER,}{\footnotesize \par} - -{\footnotesize{}~~~~~~~~~~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)~~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(CM\_V\%code,2{*}NKEYS\_CRUST,MPI\_CHARACTER,0,MPI\_COMM\_WORLD,ier)~}{\footnotesize \par} -\end{lyxcode} +{\footnotesize +\begin{verbatim} +! the variables read are declared and stored in structure CM_V + if(myrank == 0) call read_crust_model(CM_V) + +! broadcast the information read on the master to the nodes + call MPI_BCAST(CM_V%thlr,NKEYS_CRUST*NLAYERS_CRUST,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(CM_V%velocp,NKEYS_CRUST*NLAYERS_CRUST,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(CM_V%velocs,NKEYS_CRUST*NLAYERS_CRUST,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(CM_V%dens,NKEYS_CRUST*NLAYERS_CRUST,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(CM_V%abbreviation,NCAP_CRUST*NCAP_CRUST,MPI_CHARACTER,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(CM_V%code,2*NKEYS_CRUST,MPI_CHARACTER,0,MPI_COMM_WORLD,ier) +\end{verbatim} +} +\end{quote} \section{Changing the Mantle Model}\label{sec:Changing-the-Mantle} @@ -123,12 +109,12 @@ \subsection{Isotropic Models}\label{sub:Isotropic-Models} The 3D mantle model S20RTS \citep{RiVaWo99} is superimposed onto the mantle mesh by the subroutine \texttt{model\_s20rts.f90}. The call to this subroutine is of the form +\begin{verbatim} +call model_s20rts(radius,theta,phi,dvs,dvp,drho,D3MM_V) +\end{verbatim} -\begin{lyxcode} -call~model\_s20rts(radius,theta,phi,dvs,dvp,drho,D3MM\_V)~ -\end{lyxcode} +\noindent Input to this routine consists of: - \begin{description} \item [{\texttt{radius}}] Non-dimensionalized radius ($\texttt{RCMB/R\_ EARTH}<\texttt{r}<\texttt{RMOHO/R\_ EARTH}$; for a given 1D reference model, the constants \texttt{RCMB} and \texttt{RMOHO} @@ -145,8 +131,8 @@ \subsection{Isotropic Models}\label{sub:Isotropic-Models} \item [{\texttt{theta}}] Colatitude in radians. \item [{\texttt{phi}}] Longitude in radians. \end{description} +% Output from the routine are the following non-dimensional perturbations: - \begin{description} \item [{\texttt{dvs}}] Relative shear-wave speed perturbations $\delta\beta/\beta$ at location (\texttt{radius},\texttt{theta},\texttt{phi}). @@ -185,56 +171,41 @@ \subsection{Isotropic Models}\label{sub:Isotropic-Models} which could create a bottleneck on the network in the case of a large number of nodes. For example, in the current call to that routine from \texttt{model\_s20rts.f90,} we write: -\end{quote} -\begin{lyxcode} -{\footnotesize !~the~variables~read~are~declared~and~stored~in~structure~D3MM\_V}{\footnotesize \par} - -{\footnotesize{}~~if(myrank~==~0)~call~read\_model\_s20rts(D3MM\_V)~}{\footnotesize \par} - -{\footnotesize !~broadcast~the~information~read~on~the~master~to~the~nodes~~~~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(D3MM\_V\%dvs\_a,(NK+1){*}(NS+1){*}(NS+1),MPI\_DOUBLE\_PRECISION,}{\footnotesize \par} -{\footnotesize{}~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(D3MM\_V\%dvs\_b,(NK+1){*}(NS+1){*}(NS+1),MPI\_DOUBLE\_PRECISION,}{\footnotesize \par} - -{\footnotesize{}~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(D3MM\_V\%dvp\_a,(NK+1){*}(NS+1){*}(NS+1),MPI\_DOUBLE\_PRECISION,}{\footnotesize \par} - -{\footnotesize{}~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(D3MM\_V\%dvp\_b,(NK+1){*}(NS+1){*}(NS+1),MPI\_DOUBLE\_PRECISION,}{\footnotesize \par} - -{\footnotesize{}~~~~~~~~~~0,MPI\_COMM\_WORLD,ier)~~~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(D3MM\_V\%spknt,NK+1,MPI\_DOUBLE\_PRECISION,0,MPI\_COMM\_WORLD,ier)~~~~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(D3MM\_V\%qq0,(NK+1){*}(NK+1),MPI\_DOUBLE\_PRECISION,0,MPI\_COMM\_WORLD,ier)~}{\footnotesize \par} +{\footnotesize +\begin{verbatim} +! the variables read are declared and stored in structure D3MM_V + if(myrank == 0) call read_model_s20rts(D3MM_V) + +! broadcast the information read on the master to the nodes + call MPI_BCAST(D3MM_V%dvs_a,(NK+1)*(NS+1)*(NS+1),MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(D3MM_V%dvs_b,(NK+1)*(NS+1)*(NS+1),MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(D3MM_V%dvp_a,(NK+1)*(NS+1)*(NS+1),MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(D3MM_V%dvp_b,(NK+1)*(NS+1)*(NS+1),MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(D3MM_V%spknt,NK+1,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(D3MM_V%qq0,(NK+1)*(NK+1),MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(D3MM_V%qq,3*(NK+1)*(NK+1),MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) +\end{verbatim} +} +\end{quote} -{\footnotesize{}~~call~MPI\_BCAST(D3MM\_V\%qq,3{*}(NK+1){*}(NK+1),MPI\_DOUBLE\_PRECISION,0,MPI\_COMM\_WORLD,ier)~}{\footnotesize \par} -\end{lyxcode} \subsection{Anisotropic Models}\label{sub:Anisotropic-Models} Three-dimensional anisotropic mantle models may be superimposed on the mesh based upon the subroutine - -\begin{lyxcode} -model\_aniso\_mantle.f90 -\end{lyxcode} +\begin{verbatim} +model_aniso_mantle.f90 +\end{verbatim} The call to this subroutine is of the form +\begin{verbatim} +call model_aniso_mantle(r,theta,phi,rho, & + c11,c12,c13,c14,c15,c16,c22,c23,c24,c25,c26, & + c33,c34,c35,c36,c44,c45,c46,c55,c56,c66,AMM_V) +\end{verbatim} -\begin{lyxcode} -call~model\_aniso\_mantle(r,theta,phi,rho,~\&~ - -~~~~c11,c12,c13,c14,c15,c16,c22,c23,c24,c25,c26,~\&~ - -~~~~c33,c34,c35,c36,c44,c45,c46,c55,c56,c66,AMM\_V)~ -\end{lyxcode} +\noindent Input to this routine consists of: - \begin{description} \item [{\texttt{r}}] Non-dimensionalized radius ($\texttt{RCMB/R\_ EARTH}<\texttt{r}<\texttt{RMOHO/R\_ EARTH}$; for a given 1D reference model, the constants \texttt{RCMB} and \texttt{RMOHO} @@ -250,9 +221,9 @@ \subsection{Anisotropic Models}\label{sub:Anisotropic-Models} \item [{\texttt{theta}}] Colatitude in radians. \item [{\texttt{phi}}] Longitude in radians. \end{description} +% Output from the routine consists of the following non-dimensional model parameters: - \begin{description} \item [{\texttt{rho}}] Non-dimensionalized density $\rho$. \item [{\texttt{c11},}] \textbf{$\cdots$,} \texttt{\textbf{c66}} 21 non-dimensionalized @@ -287,20 +258,20 @@ \subsection{Anisotropic Models}\label{sub:Anisotropic-Models} which could create a bottleneck on the network in the case of a large number of nodes. For example, in the current call to that routine from \texttt{model\_aniso\_mantle.f90,} we write: -\end{quote} -\begin{lyxcode} -{\footnotesize !~the~variables~read~are~declared~and~stored~in~structure~AMM\_V}{\footnotesize \par} - -{\footnotesize{}~~if(myrank~==~0)~call~read\_aniso\_mantle\_model(AMM\_V)}{\footnotesize \par} - -{\footnotesize !~broadcast~the~information~read~on~the~master~to~the~nodes}{\footnotesize \par} -{\footnotesize{}~~call~MPI\_BCAST(AMM\_V\%npar1,1,MPI\_INTEGER,0,MPI\_COMM\_WORLD,ier)~~~~}{\footnotesize \par} - -{\footnotesize{}~~call~MPI\_BCAST(AMM\_V\%beta,14{*}34{*}37{*}73,MPI\_DOUBLE\_PRECISION,0,MPI\_COMM\_WORLD,ier)}{\footnotesize \par} +{\footnotesize +\begin{verbatim} +! the variables read are declared and stored in structure AMM_V + if(myrank == 0) call read_aniso_mantle_model(AMM_V) + +! broadcast the information read on the master to the nodes + call MPI_BCAST(AMM_V%npar1,1,MPI_INTEGER,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(AMM_V%beta,14*34*37*73,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) + call MPI_BCAST(AMM_V%pro,47,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ier) +\end{verbatim} +} +\end{quote} -{\footnotesize{}~~call~MPI\_BCAST(AMM\_V\%pro,47,MPI\_DOUBLE\_PRECISION,0,MPI\_COMM\_WORLD,ier)}{\footnotesize \par} -\end{lyxcode} Rotation of the anisotropic tensor elements from one coordinate system to another coordinate system may be accomplished based upon the subroutine \texttt{rotate\_aniso\_tensor}. Use of this routine requires understanding @@ -313,12 +284,16 @@ \subsection{Point-Profile Models}\label{sub:Point-Profile-Models} In order to facilitate the use of your own specific mantle model, you can choose \texttt{PPM} as model in the \texttt{DATA/Par\_file} file and supply your own model as an ASCII-table file. These generic models are given as depth profiles at a specified lon/lat location and a perturbation (in percentage) with respect to the shear-wave speed values from PREM. The ASCII-file should have a format like: -\begin{lyxcode} -{\footnotesize \#lon(deg), lat(deg), depth(km), Vs-perturbation wrt PREM(\%), Vs-PREM (km/s)}{\footnotesize \par} -{\footnotesize -10.00000 31.00000 40.00000 -1.775005 4.400000}{\footnotesize \par} -{\footnotesize -10.00000 32.00000 40.00000 -1.056823 4.400000}{\footnotesize \par} -{\footnotesize ...}{\footnotesize \par} -\end{lyxcode} + +{\footnotesize +\begin{verbatim} +#lon(deg), lat(deg), depth(km), Vs-perturbation wrt PREM(%), Vs-PREM (km/s) + -10.00000 31.00000 40.00000 -1.775005 4.400000 + -10.00000 32.00000 40.00000 -1.056823 4.400000 + ... +\end{verbatim} +} +\noindent where the first line is a comment line and all following ones are specifying the Vs-perturbation at a lon/lat location and a given depth. The last entry on each line is specifying the absolute value of Vs (however this value is only given as a supplementary information and not used any further). The background model is PREM with a transverse isotropic layer between Moho and 220~km depth. @@ -341,12 +316,12 @@ \section{Anelastic Models}\label{sec:Anelastic-Models} onto the mesh based upon your subroutine . \texttt{model\_atten3D.f90}. The call to this routine would be as follows +\begin{verbatim} +call model_atten3D(radius, colatitude, longitude, Qmu, QRFSI12_Q, idoubling) +\end{verbatim} -\begin{lyxcode} -call~model\_atten3D(radius,~colatitude,~longitude,~Qmu,~QRFSI12\_Q,~idoubling) -\end{lyxcode} +\noindent Input to this routine consists of: - \begin{description} \item [{\texttt{radius}}] scaled radius of the earth: $0\,(\mathrm{center})<=r\,<=1$(surface) \item [{\texttt{latitude}}] Colatitude in degrees: $0^{\circ}<=\theta<=180^{\circ}$ @@ -355,8 +330,8 @@ \section{Anelastic Models}\label{sec:Anelastic-Models} variables and arrays that describe the model \item [{\texttt{idoubling}}] value of the doubling index flag in each radial region of the mesh \end{description} +% Output to this routine consists of: - \begin{description} \item [{\texttt{Qmu}}] Shear wave quality factor: $0 ./configure FC=gfortran MPIF90=/usr/local/openmpi-gfortran/bin/mpif90 - +Examine the log file 'config.log'. It contains detailed informations. +In many cases, the path's to these specific compiler commands F90, +CC and MPIF90 won't be correct if `./configure` fails. + +Please make sure that you have a working installation of a Fortran compiler, +a C compiler and an MPI implementation. You should be able to compile this +little program code: + +{\footnotesize +\begin{verbatim} + program main + include 'mpif.h' + integer, parameter :: CUSTOM_MPI_TYPE = MPI_REAL + integer ier + call MPI_INIT(ier) + call MPI_BARRIER(MPI_COMM_WORLD,ier) + call MPI_FINALIZE(ier) + end +\end{verbatim} +} + +\item [compilation fails:] +In case a compilation error like the following occurs, stating + +{\footnotesize +\begin{verbatim} + ... + obj/meshfem3D.o: In function `MAIN__': + meshfem3D.f90:(.text+0x14): undefined reference to `_gfortran_set_std' + ... +\end{verbatim} +} +\noindent +make sure you're pointing to the right 'mpif90' wrapper command. + +Normally, this message will appear when you are mixing two different Fortran +compilers. That is, using e.g. gfortran to compile non-MPI files +and mpif90, wrapper provided for e.g. ifort, to compile MPI-files. + +fix: e.g. specify +\begin{verbatim} +./configure FC=gfortran MPIF90=/usr/local/openmpi-gfortran/bin/mpif90 +\end{verbatim} \item [changing PPM model routines fails:] - In case you want to modify the PPM-routines in file \texttt{model\_ppm.f90}, please consider the following points: - - \begin{enumerate} - \item Please check in file \texttt{get\_model\_parameter.f90} that the entry for PPM models looks like: - \begin{lyxcode} -{\footnotesize ... }{\footnotesize \par} -{\footnotesize else if(MODEL\_ROOT == 'PPM') then }{\footnotesize \par} -{\footnotesize ! overimposed based on isotropic-prem }{\footnotesize \par} -{\footnotesize CASE\_3D = .true. }{\footnotesize \par} -{\footnotesize CRUSTAL = .true. }{\footnotesize \par} -{\footnotesize ISOTROPIC\_3D\_MANTLE = .true. }{\footnotesize \par} -{\footnotesize ONE\_CRUST = .true. }{\footnotesize \par} -{\footnotesize THREE\_D\_MODEL = THREE\_D\_MODEL\_PPM }{\footnotesize \par} -{\footnotesize TRANSVERSE\_ISOTROPY = .true. ! to use transverse-isotropic prem }{\footnotesize \par} -{\footnotesize ... }{\footnotesize \par} - \end{lyxcode} - You can set \texttt{TRANSVERSE\_ISOTROPY} to \texttt{.false.} in case you want to use the isotropic PREM - as 1D background model. - - \item Transverse isotropy would mean different values for horizontal and vertically polarized wave speeds, - i.e. different for vph and vpv, vsh and vsv, and it includes an additional parameter eta. - By default, we take these wave speeds from PREM and add your model perturbations to them. - For the moment, your model perturbations are added as isotropic perturbations, using the same dvp for vph and vpv, - and dvs for vsh and vsv, see in \texttt{meshfem3D\_models.f90}: - \begin{lyxcode} -{\footnotesize ... }{\footnotesize \par} -{\footnotesize case(THREE\_D\_MODEL\_PPM ) }{\footnotesize \par} -{\footnotesize ! point profile model }{\footnotesize \par} -{\footnotesize call model\_PPM(r\_used,theta,phi,dvs,dvp,drho) }{\footnotesize \par} -{\footnotesize vpv=vpv*(1.0d0+dvp) }{\footnotesize \par} -{\footnotesize vph=vph*(1.0d0+dvp) }{\footnotesize \par} -{\footnotesize vsv=vsv*(1.0d0+dvs) }{\footnotesize \par} -{\footnotesize vsh=vsh*(1.0d0+dvs) }{\footnotesize \par} -{\footnotesize rho=rho*(1.0d0+drho) }{\footnotesize \par} -{\footnotesize ... }{\footnotesize \par} - \end{lyxcode} - You could modify this to add different perturbations for vph and vpv, resp. vsh and vsv. - This would basically mean that you add transverse isotropic perturbations. - You can see how this is done with e.g. the model \texttt{s362ani}, - following the flag \texttt{THREE\_D\_MODEL\_S362ANI} on how to modify accordingly the file \texttt{meshfem3D\_models.f90}. - - In case you want to add more specific model routines, follow the code sections starting with: - \begin{lyxcode} -{\footnotesize !--- }{\footnotesize \par} -{\footnotesize ! }{\footnotesize \par} -{\footnotesize ! ADD YOUR MODEL HERE }{\footnotesize \par} -{\footnotesize ! }{\footnotesize \par} -{\footnotesize !--- }{\footnotesize \par} - \end{lyxcode} - to see code sections sensitive to model updates. +In case you want to modify the PPM-routines in file \texttt{model\_ppm.f90}, please consider the following points: + +\begin{enumerate} +\item Please check in file \texttt{get\_model\_parameter.f90} that the entry for PPM models looks like: + +{\footnotesize +\begin{verbatim} + ... + else if(MODEL_ROOT == 'PPM') then + ! overimposed based on isotropic-prem + CASE_3D = .true. + CRUSTAL = .true. + ISOTROPIC_3D_MANTLE = .true. + ONE_CRUST = .true. + THREE_D_MODEL = THREE_D_MODEL_PPM + TRANSVERSE_ISOTROPY = .true. ! to use transverse-isotropic prem + ... +\end{verbatim} +} + +\noindent +You can set \texttt{TRANSVERSE\_ISOTROPY} to \texttt{.false.} in case you want to use the isotropic PREM +as 1D background model. + +\item Transverse isotropy would mean different values for horizontal and vertically polarized wave speeds, +i.e. different for vph and vpv, vsh and vsv, and it includes an additional parameter eta. +By default, we take these wave speeds from PREM and add your model perturbations to them. +For the moment, your model perturbations are added as isotropic perturbations, using the same dvp for vph and vpv, +and dvs for vsh and vsv, see in \texttt{meshfem3D\_models.f90}: + +{\footnotesize +\begin{verbatim} + ... + case(THREE_D_MODEL_PPM ) + ! point profile model + call model_PPM(r_used,theta,phi,dvs,dvp,drho) + vpv=vpv*(1.0d0+dvp) + vph=vph*(1.0d0+dvp) + vsv=vsv*(1.0d0+dvs) + vsh=vsh*(1.0d0+dvs) + rho=rho*(1.0d0+drho) + ... +\end{verbatim} +} + +\noindent +You could modify this to add different perturbations for vph and vpv, resp. vsh and vsv. +This would basically mean that you add transverse isotropic perturbations. +You can see how this is done with e.g. the model \texttt{s362ani}, +following the flag \texttt{THREE\_D\_MODEL\_S362ANI} on how to modify accordingly the file \texttt{meshfem3D\_models.f90}. + +In case you want to add more specific model routines, follow the code sections starting with: + +{\footnotesize +\begin{verbatim} + !--- + ! + ! ADD YOUR MODEL HERE + ! + !--- +\end{verbatim} +} + +\noindent +to see code sections sensitive to model updates. \end{enumerate} diff --git a/doc/USER_MANUAL/manual_SPECFEM3D_GLOBE.pdf b/doc/USER_MANUAL/manual_SPECFEM3D_GLOBE.pdf index 7ea6e9057..781f5990e 100644 Binary files a/doc/USER_MANUAL/manual_SPECFEM3D_GLOBE.pdf and b/doc/USER_MANUAL/manual_SPECFEM3D_GLOBE.pdf differ diff --git a/doc/USER_MANUAL/sponsors.tex b/doc/USER_MANUAL/sponsors.tex index 69bafbb5b..621bf173e 100644 --- a/doc/USER_MANUAL/sponsors.tex +++ b/doc/USER_MANUAL/sponsors.tex @@ -31,7 +31,7 @@ \section*{Current and past main participants or main sponsors of the SPECFEM pro \includegraphics[width=0.112\textwidth]{figures/logo_PRACE.jpg}\vspace*{2truemm} \includegraphics[width=0.112\textwidth]{figures/logo_CINES.png}\vspace*{2truemm} \includegraphics[width=0.130\textwidth]{figures/logo_Oak_Ridge.png}\vspace*{2truemm} -\hspace*{3mm}\includegraphics[width=0.130\textwidth]{figures/logo_fondation_Del_Duca.png} +\hspace*{3mm}\includegraphics[width=0.130\textwidth]{figures/logo_fondation_Del_Duca.png}\vspace*{2truemm} \includegraphics[width=0.130\textwidth]{figures/logo_CIG.png}\vspace*{2truemm} \par\end{centering} %