Free software for earthquake engineering and structural dynamic

(the software may be free downloaded and used at own risk)

SimSeisme is an OCTAVE code for the generation of synthetic earthquakes with stationary simulation corresponding to the well-known program SIMQKE.
SimSeisme generates synthetic earthquakes compatible to a prescribed target spectrum (SpectreCible). The fonction used to match iteratively the target spectrum provides generally faster convergence than the one of SIMQKE. By contrast to SIMQKE, two uniform frequency repartitions are available (logarithmic and linear). Since the peak acceleration is not the main parameter for structural response, SimSeisme does not include a matching of a prescribed peak ground acceleration.


To run SimSeisme.m:

  • Define the target spectrum and the corresponding tolerable divergence in SpectreCible.m
  • Set the parameters (NbPt, EFz, S, RepFrequ, EnvelUsed, Nseisme, MaxIter, Z) in SimSeisme.m
  • Run Octave
  • Type SimSeisme and Return

Informations and recommendations

  • SimSeisme is based on the work of Gasparini and Vanmarcke. More informations may be found in their publication:

    Gasparini D. A., Vanmarcke E. H.: Simulated Earthquake Motions Compatible with Prescribed Response Spectra.
    MIT Civil Engineering. Research Report R76-4. Massachussets Institute of Technology, Cambridge, Mass., 1976.


  • Since SimSeisme is based on a stationary simulation, i. e. on a superposition of sinus waves, the generated earthquakes provide a poor simulation of recorded earthquakes. The dynamic response calculated with stationary synthetic earthquakes may considerably diverge from those calculating with recorded earthquakes, more specifically by non-linear structural behaviour. Synthetic earthquakes generated with a non-stationary simulation such as the one of Sabetta and Pugliese provide a much better simulation of recorded earthquakes.


  • The following parameters defining the target spectrum are specified in SpectreCible.m:

    SaCible: target spectrum, generally a design spectrum
    LimSup and LimInf: upper and lower limites of the tolerable divergence to target spectrum
    PlatoSup and PlatoInf: upper and lower frequencies defining the plateau of target spectrum (used by SimSeisme for accelerogram adaptation)


  • The following parameters are specified in SimSeisme.m:

    NbPt: number of points, should be a power of 2 with a linear frequency repartition for using FFT
    EFz: discretisation frequency, EFz=1/(time interval)
    S: strong motion duration (depends on the envelope used)
    RepFrequ: uniform frequency repartition for the generation, linear or logarithmic.
    EnvelUsed: envelope used for the multiplication of the gross acceleration, compound (comp), exponential (expn) or without (sans)
    Nseisme: desired number of earthquakes to be generated
    MaxIter: maximum number of iterations for matching target spectrum (if reached, restart with a new phase angle content)
    Z: damping ratio, usually Z=5%


  • The following parameters define the envelopes in SimSeisme.m:

    Trise: rise time in envelope compound
    Ipow: parameter of rising curve in envelope compound
    Tlevel: level time in envelope compound
    alpha: parameter of decreasing curve in envelope compound

    alpha: parameter of positive exponential part in envelope exponential
    beta: parameter of negative exponential part in envelope exponential


  • Due to the use of FFT, linear frequency repartition leads to much faster calculations than logarithmic frequency repartition. However, calculating time depends on the specified tolerable divergence to the target spectrum. Too small tolerable divergences may lead to unpracticable calculating time. Moreover, the Fourier amplitude content of the earthquake is altered at each iteration for matching target spectrum. For this reason, it is recommended to keep the maximum iteration number (MaxIter) as small as possible.


  • Since in the model the phase angle content is randomly distributed, it is recommended to change the seed value of the random generator
    before each start: rand(“seed”,sum(069*clock)), i. e. change the actual value of 069 by any other value.