From 7defe9796d35d242ded80637a900e1d6d422e1d7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 13 Dec 2024 10:27:39 +0000 Subject: [PATCH] deploy: 17bd1913c6ed08a35216465d084bce5ee75b78f9 --- .nojekyll | 0 codes/index.html | 1458 +++++++++++++++++++++++++++++++++++++++++++ database/index.html | 455 ++++++++++++++ index.html | 139 +++++ jobs/index.html | 91 +++ journals/index.html | 209 +++++++ learning/index.html | 126 ++++ logo.png | Bin 0 -> 53270 bytes main.css | 52 ++ sitemap.xml | 26 + tools/index.html | 130 ++++ 11 files changed, 2686 insertions(+) create mode 100644 .nojekyll create mode 100644 codes/index.html create mode 100644 database/index.html create mode 100644 index.html create mode 100644 jobs/index.html create mode 100644 journals/index.html create mode 100644 learning/index.html create mode 100644 logo.png create mode 100644 main.css create mode 100644 sitemap.xml create mode 100644 tools/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/codes/index.html b/codes/index.html new file mode 100644 index 0000000..48bb034 --- /dev/null +++ b/codes/index.html @@ -0,0 +1,1458 @@ + + + + + + + + + + + Seismo Links | Scientific Research Codes + + + +
+ + + + + + + +
+ +

Scientific Research Codes

+

Seismic Data Fetching and Processing

+

Data Request Tools

+ +

Seismic Data Format Conversion

+ +

Seismic Data Processing

+
    +
  • SAC | +Chinese Manual | +English Manual | +youtube | +notes in Chinese: +The most commonly used seismic data processing and plotting software
  • +
  • ObsPy: +Data download, processing and visulization software written in Python
  • +
  • CPS330 | +A tutorial (in Chinese): +Collection of programs for calculating theorectical seismogram, receiver function, +surface wave dispersion curve et al.
  • +
  • Geopsy: An open source software for geophysical +research and application written in C++
  • +
  • GISMO: +Data download, processing and visulization software written in Matlab
  • +
  • hinet_decon: Deconvolve Hi-net velocity +record by its seismometer response by using inverse filtering technique
  • +
  • SeisIO.jl: +Julia language support for geophysical time series data
  • +
+
+

Plotting and Visualization

+

Plotting

+ +

Visualization

+ +
+

Traveltime and Ray Tracing

+
    +
  • TauP | +Tutorials (in Chinese): +Calculate traveltimes, ray parameters, ray paths, reflection points, +piercing points of seismic phases, supporting custom Earth models
  • +
  • obspy.taup: TauP written in Python
  • +
  • ANISOtime | +GitHub: +Traveltime calculation for transversely isotropic (TI) spherically symmetric models
  • +
  • Cake: Traveltime calculation software, written in Python.
  • +
  • fast_methods: N-Dimensional Fast Methodswritten in C++
  • +
  • FM3D | +iEarth: +3D traveltime calculation using Fast Marching Method in spherical coordinates written in Fortran
  • +
  • Lapo Boschi: Software | +SPICE: +Surface Wave Ray Tracing with Azimuthal Anisotropy
  • +
  • pykonal: 2D/3D traveltime calculator +using Fast Marching Method for eikonal equation in Cartesian and spherical coordinates
  • +
  • pySeismicFMM: +2D/3D travel time calculation in based on the Fast Marching Method written in Python
  • +
  • pyekfmm: A python package for 3D fast-marching-based traveltime calculation and its applications in seismology
  • +
  • RSTT: Regional Seismic Travel Time
  • +
  • scikit-fmm: Fast marching method +in Cartesian coordinates written in Python
  • +
  • iaspei-tau traveltime table package +
      +
    • Arthur Snoke’s version at IASPEI or +IRIS: +Traveltime calculator for iasp91 and AK135 models
    • +
    • B.L.N. Kennett and Ray Buland’s version | +A revised version: +Calculation of travel times and ellipticity corrections for iasp91 and AK135 models
    • +
    • George Helffrich’s version: +Traveltime calculator for iasp91, AK135, PREM etc.
    • +
    +
  • +
+
+

Synthetic Seismograms

+

Ray Theory for 1D Layered Earth

+ +

Reflectivity/Wavenumber Integration for 1D Layered Earth

+
    +
  • fk | +A tutorial (in Chinese): +Calculate synthetic seismograms in layered isotropic models using frequency-wavenumber method
  • +
  • Discrete wavenumber method in seisan at +Seismology at GEUS: Seismological software
  • +
  • grtm: The generalized reflection and +transmission coefficient method
  • +
  • grtm (VTI media): Calculate synthetic seismograms +in stratified vertically transversely isotropic media using the generalized +reflection and transmission coefficient method
  • +
  • multitel3: A hybrid method of ray +theory and haskell matrix to calculate teleseismic body wave Green’s functions +in RTZ components
  • +
  • QSEIS: +Calculating synthetic seismograms based on a layered viscoelastic half-space earth model
  • +
  • ANIMATIVITY: +Reflectivity Algorithm for body Wave propagation through layered anisotropic media +written in MATLAB
  • +
  • Reflectivity method: +Calculating the response of a layered uniform solid layers to excitation by +a point moment tensor source using the reflectivity method
  • +
  • rf_respknt: Reflection matrix +approach to computing the seismic response of a cylindrically symmetric medium
  • +
  • RMATRIX: +Calculate the frequency-dependent transmission coefficients written in Fortran
  • +
  • Syn_seis: Compute synthetic seismograms +for an incidence P or SV wave to 1-D layered structure
  • +
  • telewavesim: Calculate teleseismic +body-wave synthetics using the matrix propagator method written in Python and Fortran
  • +
  • Wavenumber integration method in CPS330 | +Python wrapper: PyLayeredModel | +A tutorial (in Chinese): +Collection of programs for calculating theorectical seismogram, receiver function, +surface wave dispersion curve et al.
  • +
+ +
    +
  • Modal Summation in CPS330 | +A tutorial (in Chinese): +Collection of programs for calculating theorectical seismogram, receiver function, +surface wave dispersion curve et al.
  • +
+

Reflectivity/Wavenumber Integration for 1D Layered Spherical Earth

+
    +
  • yaseis: Calculate synthetic +seismograms in spherically layered isotropic models
  • +
+

Normal Modes Summation for 1D Layered Spherical Earth

+
    +
  • Mineos: Computes synthetic seismograms +in a spherically symmetric non-rotating Earth by summing normal modes
  • +
  • Colleen Dalton’s Mineos: +All the tools one should need to compile and run the MINEOS program +
      +
    • Matlab to MINEOS: +Wrapper scripts for running MINEOS through MATLAB
    • +
    • MINEOS_synthetics: +Calculate dispersion tables and synthetic seismograms for layered models +using MINEOS and idagrn6 housed within MATLAB wrappers
    • +
    +
  • +
  • DISPER80: Calculation of normal modes, which is a very old fortran code.
  • +
  • Generalized Eigenproblem Spectral Collocation
  • +
  • Normal modes: +Normal-mode based computation of seismograms for spherically symmetric Earth models
  • +
  • QSSP: +Calculating complete synthetic seismograms of a spherical earth using the normal mode theory
  • +
  • specnm: +Spectral element normal mode code
  • +
+

Direct Solution Method for 1D Layered Spherical Earth

+
    +
  • DSM | +An updated version: +Computing synthetic seismograms in spherically symmetric transversely isotropic +(TI) media using the Direct Solution Method
  • +
  • DGRFN: +Calculate synthetic seismograms in a spherically layered model
  • +
  • GEMINI: +Calculation of synthetic seismograms for global, spherically symmetric media +based in direct evaluation of Green’s functions (The files seem wrong)
  • +
+

Boundary Element Methods

+
    +
  • AstroSeis: +Asteroid seismic wavefield modeling written in MATLAB
  • +
+

Discontinuous Galerkin Method

+
    +
  • NEXD: +high order simulation of seismic waves using the nodal discontinuous Galerkin method
  • +
  • SeisSol: numerical simulation of seismic +wave phenomena and earthquake dynamics
  • +
+

Finite Difference Methods

+
    +
  • SOFI2D | +GitLab | +A note (in Chinese): +2-D viscoelastic and elastic wave simulations for P- and SV-waves
  • +
  • SOFI2D_sh | +GitLab: +2-D viscoelastic and elastic wave simulations for SH-waves
  • +
  • SOFI3D | +GitLab: +3-D viscoelastic, elastic, and acoustic wave simulations
  • +
  • FD1D | +1DFD_DS | +1DFD_DVS | +1DFD_VS: +1D finite-difference seismic simulation using the displacement-stress (DS), +displacement-velocity-stress (DVS), and velocity-stress (VS) staggered-grids
  • +
  • 2DFD_DVS: +Computation of seismic wavefields in 2D heterogeneous structures
  • +
  • FD: +2-D P-SV elastic second-order finite difference
  • +
  • FD2D: +A very simple training code for 2D finite difference
  • +
  • FD3S: +3D finite-difference seismic wave simulation in a spherical section
  • +
  • FDSim3D: +Computation of seismic wavefields in 3D heterogeneous surface geological structures
  • +
  • OpenSWPC: +2D/3D finite-difference seismic wave simulation
  • +
  • SEISMIC_CPML: +2D/3D finite-difference seismic wave simulation with Convolutional or +Auxiliary Perfectly Matched Layer (C-PML or ADE-PML) conditions
  • +
  • SW4: 3D finite-difference seismic wave simulation (4th order)
  • +
+

Finite Element Methods

+ +

Pseudo-Spectral Methods

+
    +
  • Ps2D: A very simple code +for elastic wave simulation in 2D using a Pseudo-Spectral Fourier method
  • +
+

Spectral Element Methods

+
    +
  • SPECFEM1D: A small code that +allows users to learn how a spectral-element program is written
  • +
  • Specfem1d: An implementation of Spectrum Element Method for 1-D wave equation
  • +
  • SPECFEM2D: Simulates seismic wave +propagation in a 2D heterogeneous medium, using spectral element method +(spherical coordinate system)
  • +
  • SPECFEM3D: Simulates seismic wave +propagation in a 3D heterogeneous medium, using spectral element method +(Cartesian coordinate system)
  • +
  • SPECFEM3D_GLOBE: +Simulates seismic wave propagation in a 3D heterogeneous medium, +using spectral element method (spherical coordinate system)
  • +
  • AxiSEM: A parallel spectral-element +method to solve 3D wave propagation in a sphere with axisymmetric or +spherically symmetric visco-elastic, acoustic, anisotropic structures
  • +
  • AxiSEM3D
  • +
  • Instaseis | Brief Introduction in Chinese: +The Python interface of AxiSEM
  • +
  • RegSEM: +Simulates seismic wave propagation in a 3D heterogeneous media using spectral +element method at the regional scale (1 km to 90 degree)
  • +
  • 2DSPEC: +A parallel/serial 2d spectral element code for wave propagation and rupture dynamics
  • +
  • sem2dpack: +A spectral element package for 2D wave propagation and earthquake rupture dynamics
  • +
+

Hybrid Methods

+
    +
  • FK-SPECFEM2D: Ping Tong
  • +
  • Hybrid Methods in SPECFEM3D: +The coulping can be found in specfem3D/couple_with_injection.f90 +
      +
    • FK-SEM: FK is not an external code, it is now called internally
    • +
    • DSM-SEM | AxiSEM-SEM: within EXTERNAL_PACKAGES_coupled_with_SPECFEM3D
    • +
    +
  • +
  • SEM-DSM-coupling: +A hybrid method to efficiently compute teleseismic synthetics with 3D seismic +strucure at source side (SEM) and 1D strucure outside the source region (DSM)
  • +
  • PSV Hybrid Method | +GitHub: +Calculating synthetic seismograms involving two-dimensional localized +hetergeneous structures based on GRT-FD hybrid method
  • +
+

Surface waves in 3D structures

+
    +
  • Couplage: +Modelling of propagation of surface waves in 3D structures by mode coupling method
  • +
+

Waveform Forward Modelling

+ +
+

Seismic Source

+

Earthquake Detection

+
    +
  • REAL | +A tutorial (in Chinese): +Rapid Earthquake Association and Location written in C
  • +
  • S-SNAP: +Seismicity-Scanning based on Navigated Automatic Phase-Picking
  • +
  • Match&Locate: Detect and locate +small events from continuous seismic waveforms using templates
  • +
  • GPU-MatchLocate1.0: +An improved match and locate method using GPU
  • +
  • FastMatchedFilter: +An efficient seismic matched-filter search for both CPU and GPU architectures
  • +
  • dynamic_earthquake_triggering: +Detecting dynamic earthquake triggering written in Python
  • +
  • FAST: End-to-end earthquake +detection pipeline via efficient time series similarity search
  • +
  • EQcorrscan: Detection and analysis +of repeating and near-repeating earthquakes written in Python
  • +
  • RT-EQcorrscan: Real-time +implementation of EQcorrscan method
  • +
  • Harmonic tremor extraction and transient signal detection
  • +
  • MESS: A Matched filter earthquake detector with GPU acceleration
  • +
  • PAL: +An earthquake detection and location architecture including phase Picking, +phase Association, event Location.
  • +
  • REDPy: Repeating Earthquake Detector written in Python
  • +
+

Earthquake Location

+
    +
  • GrowClust | GrowClust3D.jl: +Relative relocation of earthquake hypocenters based on waveform cross-correlation data
  • +
  • HypoDD | +A tutorial | +hypoDDpy: +Double-difference earthquake location
  • +
  • HypoRelocate: +High-resolution earthquake relocation method
  • +
  • HYPOINVERSE2000: +Locate earthquakes and determine magnitudes in a local or regional seismic network
  • +
  • AmplitudeSourceLocation: +Estimate source locations of seismic events written in Fortran
  • +
  • NonLinLoc +Probabilistic, non-linear, global-search earthquake location in 3D Media
  • +
  • location-pt: Multiple earthquake +location via parallel tempering and principal component sampling
  • +
  • PhaseLink: +A deep learning approach to seismic phase association
  • +
  • Velest | +A modified version in REAL: +1-D inversion of velocities and hypocenter locations
  • +
+

Focal Mechanism

+
    +
  • gCAP | +Oh My CAP | +Chinese note: +Focal mechanism inversion using cut and paste method
  • +
  • CAPjoint | +CAPjoint examples: +Joint Inversion of Moderate Earthquake Source Parameters
  • +
  • gCAPjoint: +Full Moment Tensor Inversion of Moderately Strong Earthquakes with Local and Teleseismic Waveforms
  • +
  • CAPsf: Invert source mechanisms for single‐force events
  • +
  • CPS330 | +A tutorial (in Chinese) | +Moment Tensor Workshop (2012): +Collection of programs for calculating theorectical seismogram, receiver function, +surface wave dispersion curve et al.
  • +
  • Moment-Tensor Inversion
  • +
  • W Phase: W Phase source inversion
  • +
  • HASH: +Determine double-couple earthquake focal mechanisms based on P-wave polarity and S/P amplitude ratios
  • +
  • SKHASH +Python package for earthquake focal mechanism inversions
  • +
  • focmec: +Determining and displaying double-couple earthquake focal mechanisms
  • +
  • FPFIT: +Calculate and plot fault-plane solutions from first-motion data
  • +
  • hybridMT: Moment tensor inversion and refinement written in MATLAB
  • +
  • fociMT: A stand-alone command line application +for seismic moment tensor inversion, which is an integral part of hybridMT
  • +
  • FOCI: A stand-alone Windows GUI application +for performing the seismic moment tensor inversion and source parameters assessment
  • +
  • lsforce: +A Python-based single-force seismic inversion framework for massive landslides
  • +
  • ISOLA: Retrieve isolated +asperities from regional or local waveforms based on multiple-point source +representation and iterative deconvolution
  • +
  • MTfit: Bayesian Moment Tensor Fitting
  • +
  • MT_DECOMPOSITION: +Moment tensor decomposition written in MATLAB
  • +
  • PCA-DECOMPOSITION: +Principal Component Decomposition of seismic traces for extracting the common wavelet written in MATLAB
  • +
  • pyTDMT: Time Domain Moment Tensor Inversion
  • +
  • RPGEN: +Calculates P-wave, S-wave, SH-wave and SV-wave radiation pattern using shear-tensile source model
  • +
+

Seismicity

+
    +
  • CLUSTER2000: Identify clusters (e.g., aftershocks) in an earthquake catalog
  • +
  • GR_EST: An OCTAVE/MATLAB toolbox +to estimate Gutenberg–Richter law parameters and their uncertainties
  • +
  • sd: Stochastic declustering +based on the space-time ETAS model
  • +
  • ZMAP: +A GUI to analyse catalogue data
  • +
+

Stress/Strain

+
    +
  • Coulomb 3: Investigate Coulomb stress +changes on mapped faults and earthquake nodal planes
  • +
  • AutoCoulomb: +Compute Coulomb stress changes induced by earthquakes
  • +
  • DC3D0/DC3D: Calculate displacement, +strain and tilt at depth due to a point/rectangular strike/dip/tensile source in a half-space
  • +
  • MSATSI: Stress tensor inversion written in MATLAB
  • +
  • SATSI: Spatial And Temporal +Stress Inversion from focal mechanisms
  • +
  • STRESSINVERSE: An iterative joint +inversion for stress and fault orientations from focal mechanisms written in MATLAB or Python
  • +
+
+

Seismic Tomography

+

Body-wave Tomography

+ +

Ambient Noise Data Processing

+ +

Surface-wave Dispersion Measurement

+
    +
  • CPS330 | +A tutorial (in Chinese): +Collection of programs for calculating theorectical seismogram, receiver function, +surface wave dispersion curve et al. + +
  • +
  • CU-Boulder: Research Products +
      +
    • AFTAN | +GitHub | +Python package: +Automatic Frequency-Time Analysis analysis of ambient noise +cross-correlations written in Fortran
    • +
    +
  • +
  • Huajian Yao: Codes and Software | +linkresearcher | +bilibili: +
      +
    • TSAnalysis: Surface wave two-station dispersion analysis GUI software (in Matlab) +
        +
      • Auto_TAnaylsis_GUI: +Automatic surface wave two-station dispersion analysis GUI software (in Matlab)
      • +
      +
    • +
    • EGFAnalysisTimeFreq: Dispersion Analysis GUI software for ambient noise cross-correlation functions in Matalb
    • +
    +
  • +
  • Lapo Boschi: Software: +Ambient-noise cross-correlation and dispersion-curve measurement in the frequency domain written in Python
  • +
  • Martin Schimmel: Software +
      +
    • TS_PWS0_UG: +Group velocity determination using phase coherence and resampling strategies
    • +
    +
  • +
  • ASWMS | +GitHub: +Automated Surface Wave Phase Velocity Measuring System written in MATLAB, +measuring the phase and amplitude of surface waves and then generate +surface-wave tomography maps using the Eikonal and Helmhotza tomography
  • +
  • CC-FJpy | +A tutorial (in Chinese): +A Python Package for seismic ambient noise cross-correlation and the frequency-Bessel transform method
  • +
  • disp_codes: +A collection of seismological codes imlpementing three array-based techniques +for measuring multi-mode surface wave phase velocity dispersion
  • +
  • DisperNet: +Extracting and classifying the dispersion curves in the Frequency-Bessel dispersion spectrum
  • +
  • GSpecDisp: +A Matlab package for phase-velocity dispersion measurement from ambient-noise correlations
  • +
  • mat-LRTdisp: +Measuring multi-mode surface wave dispersion using the Linear Radon Transform (LRT) written in MATLAB
  • +
  • MATnoise: +Calculate ambient noise cross-correlations, measure phase velocities, and invert for phase velocity maps in MATLAB
  • +
  • NoisePy: +Fast and easy computation of ambient noise cross-correlation functions written in Python, +with noise monitoring and surface wave dispersion analysis
  • +
  • PyMASWdisp: +Calculate dispersion data from M\ ulti-Channel A\ nalysis of S\ urface W\ aves data written in Python
  • +
  • SurfaceWaveMFA: +Surface Wave Multiple Filter Analysis
  • +
  • XDCpick: +A simple tool for efficient picking of group velocity dispersion curves written in C
  • +
+

Surface-wave Tomography

+
    +
  • ASWMS | +GitHub: +Automated Surface Wave Phase Velocity Measuring System written in MATLAB, +measuring the phase and amplitude of surface waves and then generate +surface-wave tomography maps using the Eikonal and Helmhotza tomography
  • +
  • FMST | +iEarth: +Traveltime tomography in 2-D spherical shell coordinates based on fast marching method
  • +
  • rj-TOMO: 2-D transdimensional travel +time tomography based on Reversible jump Markov chain Monte Carlo algorithm
  • +
  • tomo_sp_cu_s | +GitHub: +Ray theoretic surface wave tomography
  • +
  • MATnoise: +Calculate ambient noise cross-correlations, measure phase velocities, and invert for phase velocity maps in MATLAB
  • +
  • SurfwaveTomoPrograms: +Finite frequency Rayleigh wave tomography programs
  • +
+

Surface-wave Dispersion Inversion

+
    +
  • CPS330 | +A tutorial (in Chinese): +Collection of programs for calculating theorectical seismogram, receiver function, +surface wave dispersion curve et al. + +
  • +
  • dispinversion: Surface wave dispersion +inversion code written in MATLAB
  • +
  • MCDisp: Surface wave dispersion inversion +using Monte Carlo methohd written in Python
  • +
+

Surfave-wave Tomography Workflow

+ +

Direct Inversion of Surface-wave Dispersion Data

+
    +
  • DSurfTomo: +Direct inversion of surface dispersion data based on ray tracing written in Fortran
  • +
  • DRadiSurfTomo: +Direct Surface Wave Radial Anisotropy Tomography written in Fortran
  • +
  • DAzimSurfTomo | +A tutorial (in Chinese): +Direct inversion of Rayleigh wave dispersion data for 3-D azimuthal anisotropy based on ray tracing
  • +
  • 3D Monte Carlo Direct Inversion | +GitHub: +3D Monte Carlo tomography using both body and surface wave data
  • +
+

Surface-wave Dispersion Forward Calculation

+
    +
  • CPS330 | +A tutorial (in Chinese): +Collection of programs for calculating theorectical seismogram, receiver function, +surface wave dispersion curve et al. +
      +
    • disba: Numba-accelerated computation +of surface wave dispersion that implements a subset of codes from CPS330 written in Python
    • +
    • pyfwrd: A forward modelling code +for surface wave, receiver functions and shear wave splitting, +given tilted hexagonal symmetric media
    • +
    • PyLayeredModel: Python wrappers +for the CPS and Rftn libraries for layered models in seismology
    • +
    • pysurf96: Python wrapper for +modelling surface wave dispersion curves from surf96 in CPS330 written in Python
    • +
    • srfpython: compute, display, +invert 1D depth models based on CPS330 written in Python
    • +
    +
  • +
  • Geopsy: An open source software for geophysical +research and application written in C++
  • +
  • Generalized Eigenproblem Spectral Collocation: +Solves surface-wave eigenproblem (air-solid interface seismic waves) in +laterally homogeneous media with piecewise smooth elastic structure
  • +
  • senskernel | +GitHub: +Phase/Group velocities Sensitivity Kernels
  • +
  • MCMC_ANISO_FORWARD: +Compute surface wave dispersion curves and receiver functions in anisotropic +models with hexagonally symmetry
  • +
  • TheoreticalDispersionSpectrum: +Theoretical Dispersion Spectrum calculation by the Generalized Reflection and Transmission Method
  • +
  • Vphase: +A training code to calculation of phase velocity dispersion curves
  • +
+
+

Seismic Imaging

+

Receiver Function

+
    +
  • rf: Receiver function calculation in seismology written in Python
  • +
  • hk | +Chinese note: +Receiver function package (synthetic RF, deconvolution, and H-k stacking)
  • +
  • CPS330 | +Python wrapper: PyLayeredModel | +A tutorial (in Chinese): +Collection of programs for calculating theorectical seismogram, receiver function, +surface wave dispersion curve et al.
  • +
  • RAYSUM | +PyRaysum: +Ray-theoretical modelling of teleseismic waves in dipping, anisotropic structures
  • +
  • RF codes +
      +
    • Charles J. Ammon’s codes
    • +
    • Cheng’s codes, including Qingju Wu’s maximum entrop deconvolution method (burgays)
    • +
    +
  • +
  • Charles J. Ammon’s RF codes: +An Overview of Receiver-Function Analysis
  • +
  • Jeffrey Park’s RF codes: +
      +
    • Recfunk21: +Computation of receiver functions and harmonic decomposition analysis. +It supersedes previously released recfunk09_pick +and recfunk_ascii.
    • +
    • rfsyn: +Computes a receiver-function for a stack of anisotropic layers over an isotropic halfspace
    • +
    +
  • +
  • CCP | +Chinses note: +Common-Conversion-Point (CCP) stacking of receiver functions
  • +
  • CrazySeismic | +linkresearcher | +bilibili: +A MATLAB GUI-based package to process single channel seismic data (picking, McCC, PCA, Deconvolution)
  • +
  • FuncLab (invalid link) | +revised FuncLab: +A Matlab based GUI for handling receiver functions
  • +
  • h-k-c | +linkresearcher | +bilibili: +Generalized H-k after harmonic correction on receiver functions
  • +
  • IRFFM: An interactive Java program for +joint interactive forward modelling of teleseismic receiver functions and surface wave dispersion
  • +
  • MCMC_ANISO_FORWARD: +Compute surface wave dispersion curves and receiver functions in anisotropic +models with hexagonally symmetry
  • +
  • processRFmatlab: +MATLAB functions and scripts for working with receiver functions
  • +
  • psdm | +bilibili: +A wave equation migration method for receiver function imaging
  • +
  • PSV Hybrid RF | +GitHub: +Calculating synthetic RF in two-dimensional localized hetergeneous structures +based on PSV Hybrid method (GRT-FD)
  • +
  • pyfwrd: A forward modelling code for surface wave, +receiver functions and shear wave splitting, given tilted hexagonal symmetric media
  • +
  • RF_INV: Receiver function inversion by +reversible-jump Markov-chain Monte Carlo written in Fortran
  • +
  • RfPy: Receiver function caculcation along with post-processing +(e.g., hk, harmonic decomposition, CCP) written in Python
  • +
  • rj-RF: Receiver Function Inversion +using Reversible jump Markov chain Monte Carlo algorithm
  • +
  • RFtool: An interactive GUI tool to simulate P or S receiver functions
  • +
  • SplitRFLab: A Matlab toolbox of processing +receiver functions and shear wave spliting
  • +
  • seispy: A Python module for processing seismological data and calculating Receiver Functions
  • +
+

Rayleigh-wave Ellipticity

+
    +
  • DOP-E | +GitHub: +Rayleigh wave ellipticity, measurement and inversion from ambient noise written in Fortran and Python
  • +
  • Quake-E: Measure Rayleigh wave ellipticity +from earthquake data written in Python
  • +
+

Shear Wave Splitting

+
    +
  • SplitLab | +An updated version: +Shear-wave birefringence analysis code written in Matlab
  • +
  • MFAST: Multiple Filter Automatic Splitting +Technique written in Fortran
  • +
  • MSAT: The MATLAB Seismic Anisotropy Toolkit
  • +
  • multisplit: Shear-wave birefringence analysis code
  • +
  • pyfwrd: A forward modelling code for surface wave, +receiver functions and shear wave splitting, given tilted hexagonal symmetric media
  • +
  • SHEBA: Shear-wave birefringence analysis
  • +
  • SplitPy: Teleseismic shear-wave (SKS) +Splitting Toolbox written in Python
  • +
  • SplitRacer: +Semiautomated Analysis and Interpretation of Teleseismic Shear-Wave Splitting in MATLAB
  • +
  • sws_tools: +MATLAB tools for modeling and plotting of shear-wave splitting data
  • +
  • ECOMAN: Software package for computing +elastic and viscous mechanical properties of mantle rocks and seismic forward and inverse +modelling
  • +
+

Scattering and Intrinsic Attenuation

+
    +
  • CodaNorm: +Calculating the seismic quality factor using the coda normalization method
  • +
  • Coda-Q-Inversion: +Coda-Q inversion written in MATALB
  • +
  • MuRAT: Multi-resolution seismic attenuation +tomography using Body and Coda Waves written in MATLAB
  • +
  • psphoton: +Monte Carlo simulation of elastic-wave scattering processes in Earth’s interior
  • +
  • PSPHOTON_POSO: Model Po/So envelopes
  • +
  • qopen: Separation of intrinsic and scattering Q by envelope inversion
  • +
  • usattenuation: +Intrinsic attenuation, scattering attenuation and site amplification for the contiguous U.S.
  • +
  • Radiative3D: +Radiative transport in 3D Earth models
  • +
+

Joint Inversion of Seismological Data

+
    +
  • Weisen Shen’s code: +A workshop in Peking University in 2017 for joint inversion of surface-wave dispersion data and receiver function
  • +
  • SEIS_FILO: SEISmological inversion tools for +Flat and Isotropic Layered structure in the Ocean
  • +
  • BayHunter: McMC transdimensional Bayesian +inversion of surface wave dispersion and receiver functions in Python
  • +
  • Huajian Yao: Codes and Software: +Inversion of Vs, Vp/Vs, and interface depth using dispersion data and Rayleigh wave ellipticity
  • +
  • LitMod_seis: A joint inversion code +for inverting Vs and anisotropy
  • +
  • jointBSVpVs: +Joint inversion of body and surface wave data for Vp/Vs
  • +
  • RfSurfHmc: Joint inversion of Receiver +Function and Surface Wave Disperion by Hamilton Monte Carlo Method
  • +
+

Waveform Inversion

+ +

Full Waveform Inversion

+
    +
  • IFOS2D | +GitLab: +2D elastic full waveform inversion
  • +
  • IFOS3D | +GitLab: +3D elastic full waveform inversion
  • +
  • DENISE: +2D time-domain isotropic (visco)elastic FD modeling and full waveform inversion code for P/SV-waves
  • +
  • 2DNoise_Adjoint_tomography: +2D ambient noise adjoint tomography and joint inversion of ambient noise and teleseismic body-wave
  • +
  • 2DZH_Adjoint_tomography: +2D ZH Amplitude Ratios adjoint tomography
  • +
  • ASKI: +Seismic Full Waveform Inversion and sensitivity/resolution analysis
  • +
  • Finite-frequency tomography
  • +
  • FWI.jl: Solving the 2D and 3D acoustic +full waveform inversion on a regular rectangular mesh written in Julia
  • +
  • GERMAINE: +2D frequency-domain acoustic/SH/TE-mode FD modelling and full waveform inversion code
  • +
  • LASIF: LArge-scale Seismic Inversion Framework +to perform adjoint full seismic waveform inversions
  • +
  • Salvus: A scalable software suite for waveform +modeling and inversion across the scales
  • +
  • SAVA: 3D seismic finite-difference modelling, +Full Waveform Inversion (FWI) and Reverse Time Migration (RTM) code for wave +propagation in isotropic (visco)-acoustic/elastic and anisotropic orthorhombic/triclinic elastic media
  • +
  • seisDD: Double-difference adjoint seismic tomography
  • +
  • SeisElastic2D: +An open-source package for multiparameter FWI in isotropic-, anisotropic- and visco-elastic media
  • +
  • SES3D: +Simulation of elastic wave propagation and waveform inversion in a spherical section
  • +
  • TOY2DAC: +2D Acoustic frequency-domain Full Waveform modeling and inversion code
  • +
+

Multi-observable Modelling and Inversion of Geophysical Data

+
    +
  • LitMod: Multi-observable modelling and inversion of geophysical data +
      +
    • LitMod_2D | +A new version in Github: +An interactive software to perform multi-observable forward modelling of +geophysical data for 2D whole lithospheric structure of the Earth and/or +other terrestrial planets
    • +
    • LitMod_T: the “transient” equivalent of LitMod_2D
    • +
    • LitMod_3D | +A new version in Github: +3D integrated geophysical-petrological interactive modelling of the lithosphere +and underlying upper mantle using a variety of input datasets: +potential fields (gravity and magnetic), surface heat flow, elevation (isostasy), +seismics, magnetotellurics and geochemical
    • +
    • LitMod_4INV: +A fully nonlinear probabilistic inversion codes in spherical coordinates for +the compositional and thermal structure of the lithosphere and upper mantle
    • +
    +
  • +
  • JDSurfG: Joint Inversion of Direct Surface +Wave Tomography and Bouguer Gravity
  • +
+
+

Ambient Noise

+

Ambient Noise Monitoring

+
    +
  • MSNoise: A Python Package for Monitoring seismic velocity +changes using ambient seismic noise
  • +
  • NoisePy: Fast and easy computation of +ambient noise cross-correlation functions written in Python, with noise monitoring +and surface wave dispersion analysis
  • +
  • yam: Yet another monitoring tool using +correlations of ambient noise written in Python
  • +
+

Noise HVSR

+
    +
  • IRIS HVSR: A set of Python scripts to compute +and plot HVSR curves using MUSTANG PDF-PSD web service from IRIS
  • +
  • Geopsy: An open source software for geophysical +research and application written in C++
  • +
  • HtoV-Toolbox: +A toolbox that allows the simple calculation of H/V ratios
  • +
  • HV-Inv: +Forward calculation and inversion of H/V spectral ratios
  • +
  • HVResPy: +An open-source Python tool for Geopsy HVSR post-processing
  • +
  • hvsrpy: A Python package for horizontal-to-vertical +spectral ratio processing
  • +
  • HV-TEST: A tool for the verification +of the reliability and clarity of the H/V peak according to the SESAME criteria
  • +
  • OpenHVSR: +Measure and Inversion of HVSR written in MATLAB
  • +
+
+

Earth’s interior

+
    +
  • FastTrip: Fast MPI-accelerated Triplication +Waveform Inversion Package
  • +
  • PKPprecursor | +GitHub: +Locating seismic scatterers in the lower mantle, using PKP precursor onsets
  • +
  • ss-precursors: SS Precursor Workflow
  • +
+
+

Seismic Data Analysis

+

General Signal Analysis

+ +

Phase Picking

+
    +
  • Adaptive Stacking | +iEarth: +Adaptive stacking to estimating traveltime residual patterns across a network of seismic stations
  • +
  • AIMBAT: +Measuring teleseismic body wave arrival times for large seismic arrays written in Python
  • +
  • CrazySeismic | +linkresearcher | +bilibili: +A MATLAB GUI-based package to process single channel seismic data (picking, McCC, PCA, Deconvolution)
  • +
  • CrazyTremor: +A MATLAB GUI-based package to display and picking multi-channel seismic data
  • +
  • generalized-phase-detection: +Generalized Seismic Phase Detection with Deep Learning
  • +
  • mccc: Determines optimum relative delay times +for a set of seismograms based on the VanDecar & Crosson multi-channel cross-correlation algorithm
  • +
  • PhaseNet | +A tutorial (in Chinese): +A Deep-Neural-Network-Based Seismic Arrival Time Picking Method
  • +
  • PhasePApy: +Seismic Phase Picker and Associator, written in Python
  • +
  • P-Phase Picker: +Detecting P-phase onset written in Java and Matlab
  • +
+

Single Station Signal Analysis

+
    +
  • IRIS DMC Noise Toolkit: +Compute power spectral densities and perform microseism energy computations +and frequency dependent polarization analysis
  • +
  • BCseis: +a MatLab GUI and set of inline functions for performing various non-linear +thresholding operations using the Continuous Wavelet Transform
  • +
  • Est_noise: Analyze time-series data +to quantify temporal correlations and simultaneously estimate rates, offsets, +and other functional dependencies
  • +
  • MUSTANG | +Tutorial: +A quality assurance system that provides metrics pertaining to seismic data quality
  • +
  • PIQQA | +An introduction: +A python utility to create a simple Quality Assurance report
  • +
  • Pycheron: +A Python library for quality control of seismic data based on IRIS MUSTANG
  • +
  • PolarGUI: +A GUI polarization analysis of the three-component seismic data written in MATLAB
  • +
  • Polfre: +Time-Frequency Dependent Polarization written in Fortran
  • +
  • PQLX: +An open-source software system for evaluating seismic station performance and data quality
  • +
  • Station Analysis Tools | +IRIS site: +A set of c routines for computation of power spectral densities, coherence, +probability density functions, and a handful of other tools for monitoring +the health of a station
  • +
  • TF-SIGNAL: +Computation and visualization of time-frequency representations of time signals +using one or more of seven alternative methods of time-frequency analysis
  • +
+

Array seismology

+
    +
  • ObsPy: Data download, processing and visulization software written in Python
  • +
  • array_processing: +Various array processing tools for infrasound and seismic data written in Python
  • +
  • Geopsy: An open source software for geophysical +research and application written in C++
  • +
  • ts-PWS: +Time-scale phase weighted stacking written in C
  • +
+

Seismic Interferometry

+ +

Seismic Data Digitization and Correction

+
    +
  • ATacR: Automated Tilt +and Compliance Removal (for ocean bottoms seismometers) written in Matlab
  • +
  • Automatic detection of clipped seismic waveform: +The code seems to be related to CWPAR.
  • +
  • CWPAR: +Clipped Waveform Pickup and Restoration written in Matlab
  • +
  • DigitSeis: +A digitization software for analog seismograms written in Matlab
  • +
  • DLOPy | +orient: +Calculate OBS horizontal orientations based on Raleigh-wave arrival angle +written in Python (DLOPy) or Matlab (orient)
  • +
  • OBStools: Removing vertical +component noise from tilt and compliance effects written in Python
  • +
  • OrientPy: Estimate seismometer +orientation written in Python
  • +
+

Pattern Recognition and Machine Learning

+
    +
  • scikit-learn: +Machine Learning in Python
  • +
  • Detex: +A Python package for subspace detection and waveform similarity clustering
  • +
  • dbscan1d: +An efficient 1D implementation of the DBSCAN clustering algorithm in Python
  • +
  • Sequencer: +An algorithm that detects one-dimensional sequences in complex datasets in Python
  • +
+

Spherical Harmonics

+
    +
  • Shansyn: Spherical +Harmonic ANalysis and SYNthesis
  • +
  • SHTOOLS: Spherical Harmonic Tools
  • +
+
+

Seismological/Geophysical Library

+

Seismological Tools/Library

+
    +
  • CREWES Matlab Toolbox: +Numerical Methods of Exploration Seismology with algorithms in MATLAB
  • +
  • Pyrocko: +An open-source seismology toolbox and library written in the Python
  • +
  • SEISAN: Earthquake analysis software
  • +
+

Geophysical Tools/Library

+
    +
  • Fatiando: Open-source tools for geophysics
  • +
  • UNAVCO | +Software: +A community of scientists, educators, and professionals working together +to better understand Earth processes and hazards using geodesy
  • +
+
+

Geophysics/Geosciences

+

Gravity

+
    +
  • Harmonica: +Forward modeling, inversion, and processing gravity and magnetic data +
      +
    • moho-inversion-tesseroids: +Fast non-linear gravity inversion in spherical coordinates with application to +the South American Moho
    • +
    +
  • +
  • GRAV3D: +Carrying out 3D forward modelling and inversion of gravity data
  • +
  • SphGraGLQ: A fast and adaptive gravity +forward computation method by Gauss-Legendre Quadrature in spherical coordinates in C
  • +
  • Gravity modelling and inversion in 2D: +A very simple matlab code to illustrate the basics of gravity modelling and inversion
  • +
+

InSAR/GPS

+ +

Geodynamics

+
    +
  • CitcomS: Solve compressible +thermochemical convection problems relevant to Earth’s mantle
  • +
+

Mineral Physics

+
    +
  • GassDem: +Modeling anisotropic seismic properties written in MATLAB
  • +
+

Thermodynamic Modeling

+
    +
  • Perple_X | +Thermodynamic Data Files | Glossary | +A tutorial (in Chinese): +A collection of Fortran77 programs for calculating and displaying phase diagrams, +phase equilibria, and thermodynamic data
  • +
  • HeFESTo | +GitHub: +Helmholtz Free Energy Self-consistent Thermodynamics
  • +
  • THERMOCALC: +Calculating model phase equilibria involving the HPx-eos +and/or individual end-members from the Holland & Powell dataset
  • +
  • BurnMan: An open source mineral physics toolbox written +in Python to generate physical properties for the Earth and other planets
  • +
+

Geophysics

+
    +
  • distaz | +A tutorial (in Chinese): +Calculate distance, azimuth and back-azimuth of any two points at the Earth’s surface
  • +
  • PlateFlex: Estimate lithosphere elstatic +thickness written in Python and Fortran
  • +
+

Tectonics

+
    +
  • GPlates: A desktop software for +the interactive visualisation of plate-tectonics
  • +
+
+

Geophysical Inversion

+

Inversion Theory

+ +

Linear Algebra

+
    +
  • BLAS: Basic Linear Algebra Subprograms +are routines that provide standard building blocks for performing basic vector and matrix operations
  • +
  • LAPACK | Working Notes | GitHub: +Linear Algebra PACKage is a library of Fortran subroutines for +solving the most commonly occurring problems in numerical linear algebra
  • +
  • LINPACK: a collection of Fortran +subroutines that analyze and solve linear equations and linear least-squares problems, +which has been largely superceded by LAPACK
  • +
+

Gradient Methods

+ +

Monte Carlo Methods

+
    +
  • Malcolm Sambridge: Software
  • +
  • Marko Laine: MCMC codes
  • +
  • DRAM: A simple teaching code in Fortran +of the Delayed Rejection Adaptive Metropolis (DRAM) method
  • +
  • emcee: +Affine Invariant Markov chain Monte Carlo Ensemble sampler written in Python
  • +
  • rj-MCMC: A library providing routines +for running Reversible Jump Monte-Carlo Markov chains +for 1-D and 2-D spatial regression problems
  • +
  • rjmcmc: +Reversible-Jump MCMC written in R
  • +
  • Neighborhood-Algorithm: +A simple NA implementation in c++
  • +
+

Numerical Library

+ +
+

Software Centers

+

Geoscience Software Centers

+ +

Software Development Tools

+ + + +
+
+ + +
+ + + + + diff --git a/database/index.html b/database/index.html new file mode 100644 index 0000000..f4a2c3e --- /dev/null +++ b/database/index.html @@ -0,0 +1,455 @@ + + + + + + + + + + + Seismo Links | Database + + + +
+ + + + + + + +
+ +

Database

+

Earthquake Catalog

+

Global Earthquake Catalog

+ +

Regional Earthquake Catalog

+ +

Slow Earthquake Catalog

+ +

Focal Mechanism Catalog

+ +

Earthquake Arrival Time/Phase Data

+ +

Seismic Data Centers/Networks

+

Global Data Centers/Networks

+ +

Asian Data Centers/Networks

+ +

North America Data Centers/Networks

+ +

European Data Centers/Networks

+ +

Oceanian Data Centers/Networks

+
    +
  • AusPass | Data Portal: +the Australian Passive Seismic Server
  • +
  • GeoNet: Geological hazard information for New Zealand
  • +
+

Analog Seismograms

+ +

Seismological Database

+

Receiver Function

+
    +
  • IRIS Products: EARS: +EarthScope Automated Receiver Survey
  • +
  • GLImER: Global +Lithospheric Imaging using Earthquake Recordings +(teleseismic receiver functions)
  • +
+

Shear-wave Splitting

+ +

Surface wave Dispersion

+ +

Seismic Source Database

+ +

Seismic Data Products

+ +

Seismological Models

+

Global and Reginal Reference Seismological Models

+ +

1D Reference Seismological Models

+ +

3D Body Wave Tomographic Models

+ +

Subduction Zone Models

+ +

Geoscience Database/Models

+ +

Geological Database

+

General Database

+ +

Fault Database

+ +

Sediment Database

+ +

Volcano Database

+ +

Geodesy Database

+

Gravity Database

+ +

Earth Relief Database

+ +

Plate Boundary Models

+ +

Stress/Strain Database

+ +

Geographical Database

+ +

Geotherm Database

+ + + +
+
+ + +
+ + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..d2d0583 --- /dev/null +++ b/index.html @@ -0,0 +1,139 @@ + + + + + + + + + + + + Seismo Links + + + +
+ + + + +
+ + +
+ + + + + diff --git a/jobs/index.html b/jobs/index.html new file mode 100644 index 0000000..615541c --- /dev/null +++ b/jobs/index.html @@ -0,0 +1,91 @@ + + + + + + + + + + + Seismo Links | Jobs + + + +
+ + + + + +
+ +

Jobs

+

Job Boards

+ +

University/Institution Jobs

+ + + +
+
+ + +
+ + + + + diff --git a/journals/index.html b/journals/index.html new file mode 100644 index 0000000..a67c27e --- /dev/null +++ b/journals/index.html @@ -0,0 +1,209 @@ + + + + + + + + + + + Seismo Links | Journals + + + +
+ + + + + + + +
+ +

Journals

+

Multidisciplinary Journals

+ +

Earth Sciences Journals

+ +

Geophysics Journals

+ +

Seismology Journals

+ +

Preprint Archives

+ +

Researchers’s Academic Profile

+
    +
  • ORCID: A persistent digital identifier for researchers
  • +
  • Google Scholar
  • +
  • Publons: Your publications, citation metrics, peer reviews and journal editing work, in one place
  • +
  • ResearchGate: Social networking site for scientists and researchers
  • +
+ + + + +
+
+ + +
+ + + + + diff --git a/learning/index.html b/learning/index.html new file mode 100644 index 0000000..ac11be5 --- /dev/null +++ b/learning/index.html @@ -0,0 +1,126 @@ + + + + + + + + + + + Seismo Links | Learning Resources + + + +
+ + + + + +
+ +

Learning Resources

+

Seismology

+

Short Videos & Posts

+ +

Workshops & Courses

+ +

Geophysics & Tectonics

+ +

Inverse Theory

+ +

Python

+ + + +
+
+ + +
+ + + + + diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6115f329e26ac02024f37746ed1f53d0b1ea05 GIT binary patch literal 53270 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 literal 0 HcmV?d00001 diff --git a/main.css b/main.css new file mode 100644 index 0000000..77da5e1 --- /dev/null +++ b/main.css @@ -0,0 +1,52 @@ +/* Responsive columns of cards */ +@media (max-width: 48em) { + .card-columns { + column-count: 2; + } +} + +@media (min-width: 62em) { + .card-columns { + column-count: 3; + } +} + +@media (min-width: 75em) { + .card-columns { + column-count: 6; + } +} + +article { + margin: 1.0rem 0.75rem; +} + +footer { + margin-bottom: 1.0rem; +} + +.card-columns .card { + border-radius: 1.0rem; + background-color: aliceblue; +} + +.navbar { + background-color: aqua; + border-bottom-left-radius: 0.5rem; + border-bottom-right-radius: 0.5rem; +} + +.navbar-brand { + font-weight: bold +} + +aside { + float: right; + background: #f9f9f9 none repeat scroll 0 0; + border: 1px solid #aaa; + display: table; + font-size: 95%; + margin-bottom: 1em; + padding: 20px; + width: auto; +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..ab78593 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,26 @@ + + + + https://seismo-learn.org/links/ + 2024-12-13T18:27:23+08:00 + + https://seismo-learn.org/links/database/ + 2024-12-13T18:27:23+08:00 + + https://seismo-learn.org/links/jobs/ + 2024-12-13T18:27:23+08:00 + + https://seismo-learn.org/links/journals/ + 2024-12-13T18:27:23+08:00 + + https://seismo-learn.org/links/learning/ + 2024-12-13T18:27:23+08:00 + + https://seismo-learn.org/links/codes/ + 2024-12-13T18:27:23+08:00 + + https://seismo-learn.org/links/tools/ + 2024-12-13T18:27:23+08:00 + + diff --git a/tools/index.html b/tools/index.html new file mode 100644 index 0000000..8c09635 --- /dev/null +++ b/tools/index.html @@ -0,0 +1,130 @@ + + + + + + + + + + + Seismo Links | Tools + + + +
+ + + + + + + +
+ +

Tools

+

Science

+ +

Computer

+
    +
  • IPIP: The best IP geolocation database
  • +
+

Programming

+

General Tools

+ +

Python

+
    +
  • strftime: Python strftime reference
  • +
  • ruff: An extremely fast Python linter and code formatter, written in Rust.
  • +
+

Document

+

Gerneral Tools

+
    +
  • Convertio: Convert your files to any formats (300+ formats supported)
  • +
  • WebPlotDigitizer: Web based tool to extract data from plots, images, and maps
  • +
+

PDF

+
    +
  • cpdf: Command line tool to manipulate existing PDF files
  • +
  • ILovePDF: Every tool you need to work with PDFs in one place
  • +
  • pdftk: The PDF toolkit for doing everyday things with PDF documents
  • +
  • PDF2JPG: Free PDF to JPG online converter
  • +
  • Smallpdf: All-in-one easy-to-use online PDF tools
  • +
+

Image

+
    +
  • ILoveIMG: Every tool you could want to edit images in bulk
  • +
  • Logoly: A simple online logo generator
  • +
  • Squoosh: Image compression web app provided by Google
  • +
+

Writing

+ + + +
+
+ + +
+ + + + +