My master thesis: Receiver function modeling

After many years of studies, I have finally finished my degree in geophysics from the University of Copenhagen. It all ended when I handed in my thesis on the 15th of December and defended it on the 5th of February. The thesis can be downloaded here:


UPDATE 12-march-2012: Due to numerous requests I have talked to Bo Holm Jacobsen and Trine Dahl Jensen and they have agreed to provide the forward model and data on this blog post.

    The forward model used in thesis was kindly provided by professor Bo Holm Jacobsen ( from the geological department of the University in Aarhus, Denmark. The Matlab model can be downloaded here, but all attribution and questions should be give to Bo Holm Jacobsen.
    The dataset used in the thesis was kindly provided by Trine Dahl Jensens (, senior researcher at the Geological Survey of Denmark and Greenland. The data should only be used as educational and others uses are only allowed with permission by Trine Dahl Jensen.

Receiver function analysis is a seismic method utilizing that fact that seismic P-waves impinging on a subsurface boundary will result in refracted and reflected P and S-waves. The generated waves are only the result of the local structure and by deconvolution the local effect can be isolated in a data set called the receiver function. Reconstructing the local velocity-structure by comparing the observed receiver functions with synthetically generated receiver functions is usually regarded as a highly non-linear inverse problem. In this thesis I will apply four different algorithms to recreate the subsurface velocity structure from a synthetic data set as well as data collected in Greenland. The algorithms are: Uniform search, the Metropolis algorithm, Neighborhood search and the Levenberg-Marquardt algorithm. Overall, the algorithms were successfully in reconstructing the synthetic data. In the Greenland data set the algorithms generated models indicating a low velocity layer which is most likely an artifact of the difference between the wavelet used in the forward algorithm and the wavelet embedded in the data. This problem affected all the algorithms. For the Greenland data only the Metropolis and the Levenberg-Marquardt algorithm found reasonable models. It was also concluded that the Uniform search and the Neighborhood algorithm do not perform well in high dimensional problems.

Thesis defense presentation
As well as the thesis it self the defense is made in LaTeX using the Beamer class. I used the program impressive to present the pdf, see Impressive – presentation using pdf and python | The defense presentation can be downloaded here:


Only registered users can comment.

  1. Hej Thomas!

    Congratulations for that degree! I’m currently doing my master thesis in geophysics as well 🙂 and diving through the www I found your blog, which has given me interesting tips to be implemented right away to improve the writing process. I didn’t know about impress!ve and i’m literally impressed!

    time to put hands on!

    cheers mate, good to hear there are many other nerdy people spread around the world.

    vi ses!

    Liliana @ Cambridge. UK

  2. Very nice thesis layout. I also liked the KU beamer class a lot!
    I’ll try to make an adaptation to my work.
    Keep it up Thomas!

  3. hello, teacher! I am a university student of China , and now I am studying the receicer functions modeling of Tianshan&Tarim. I have not some useful books
    about this topic. so, can you give me a book about the receiver function.
    yours jack

  4. Hi Jack.
    I am not aware about any complete books on the subject, but look at my references or try to contact my former supervisor Trine Dahl-Jensen as she is probably still working on receiver functions where as I have not since I started a job work with other problems 2.5 years ago.
    Kind regards Thomas

  5. Hello Dr.Thomas Jansson
    I hope you are well.
    I am a research assistant in National Research Institute of Astronomy and Geophysics, Egypt. My Master Thesis is in Receiver Function and I want to contact with you to help me and learn me more about receiver function to gain experience in my field.
    Can you help me please?
    My e-mail is (

  6. Hi Thomas,

    You have done a marvelous work. I tried to run your code from your thesis and found the error with error message:
    Undefined function ‘rms_data_many’ for input arguments of type

    Do you define “rms_data_many” function somewhere? I could not find it in the thesis appendix. Thanks for your help.

  7. Hi Zeleke

    I am glad you could use it. It was in a file I hadn’t included, but it is very simple:

    function diff = rms(zs,VPs,data)
        model         = rf_forward(zs, VPs);
        model_cut  = model(1:length(data));
        % Misfit
        diff       = (abs(norm(data - model_cut)));
  8. Hi Thomas,

    My name is Hai, I am a research intern at Commissariat à l’Énergie Atomique, Saclay, France. I am looking a LaTeX template for my Master thesis and your LaTeX template is really interesting. May I have a copy of your sources ?


  9. Hi Hai

    If you post me an email I can send you the master file (without all the includes), but it is mainly just a slightly modded “report”.

    Kind regards
    Thomas Jansson

  10. I am glad to find your thesis,and i want to have a better understanding of your thesis,so i venture to ask you for those attachments,“” and “”.Best wishes to you!

  11. Thomas,
    First of all congratulations on doing such a fantastic job on the topic. I am trying to run your code. I think you had’nt included misfit_data_many into the files. I believe it is a function to calculate the RF and than calculate the new misfit?

  12. Hi Haider

    Under the section called “UPDATE 12-march-2012” you can find two zip files with the code that you need. I am happy to hear that you could use it.

    Kind regards

    1. Thank you Thomas,

      It was good hearing from you. I might be asking you few more questions as my work progresses.


    2. Thomas,

      I am having problem running your Levensburg code. If you could help me with it? I would really appreciate. I have issues setting up the options file. I am getting the error ‘LevenbergMarquardt’ is an unrecognized parameter name. I am using 2014b matlab. I was wonding if you have any idea about the problem.


      1. Thomas,
        I figured out the issue. I had to use the optimoptions to create the option file. However, I am still having problem with the lsqnonlin solver @misfit_data_many_vel that we pass on to the lsqnonlin function. If you could provide me with that. I would really aprreciate. Also, tell me if i am on the right track?

  13. Thomas, the code i am looking for is not there. Can you help me with how to write the objective function used in levenberg-marquadt algortihm?
    I would like to understand the theory and logic behind it.


  14. Hi Haider

    I have not worked with this subject since I graduated and do not have the time to look into the subject again, so I cannot help you with this. If I remember correctly however the LM algorithm is already a part of the standard Matlab code, but also a part of Python scipy, so you should be able to find code examples.

    Kind regards

  15. Hi, Thomas.

    I am unable to find the misfit_data_many function you use. Could you point me to where it is?


    1. Hi Smith

      I just looked through some of that almost 10 years old code and it is very simple:

      function diff = rms(zs,VPs,data)
          model      = rf_forward(zs, VPs);
          model_cut  = model(1:length(data));
          % Misfit
          diff       = (abs(norm(data - model_cut)));

Leave a Reply