#!/usr/bin/env guile !# ;; Copyright © 2018 Urbain Vaes (use-modules (sxml simple)) ; To deal with records more easily (use-modules (srfi srfi-9)) ; Read files (use-modules (ice-9 popen)) (use-modules (ice-9 rdelim)) ; Directory of static content (define (static-url path) (string-append "/static/" path)) ; Auxiliary function to read html file (define (read-xml filename) (call-with-input-file filename (lambda (input-port) (xml->sxml input-port #:entities '((align . "ALIGNMENT")))))) (define (html-head title) `(head (title ,(string-append "Urbain Vaes - " title)) (meta (@ (charset "UTF-8"))) (meta (@ (name "author") (content "Urbain Vaes"))) (meta (@ (name "keywords") (content "contact,cv,work"))) (meta (@ (name "description") (content "My personal website"))) (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0"))) (link (@ (rel "stylesheet") (type "text/css") (href ,(static-url "css/base.css")))) (link (@ (rel "stylesheet") (type "text/css") (href "https://fonts.googleapis.com/css?family=Neuton&subset=latin") (media "screen") (charset "utf-8"))) (link (@ (rel "stylesheet") (type "text/css") (href "https://fonts.googleapis.com/css?family=Nobile:regular,italic,bold,bolditalic&subset=latin") (media "screen") (charset "utf-8"))) (script (@ (type "text/javascript") (src ,(static-url "js/common.js"))) "") (script (@ (type "text/javascript") (src "https://polyfill.io/v3/polyfill.min.js?features=es6")) "") (script (@ (id "MathJax-script") (type "text/javascript") (src "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js")) "") (link (@ (rel "icon") (type "image/x-icon") (href ,(static-url "img/airbender-favico.webp")))))) (define (site-menu) `(header (a (@ (id "avatar") (href "/hello/")) (img (@ (id "avatar_img") (src "https://s.gravatar.com/avatar/40bb63e5d0cfbe4ab1067d561ae08280?s=400") (alt "Main menu")))) (nav (a (@ (href "/contact/")) "Contact") (a (@ (href "/cv/")) "CV" " ") (a (@ (href "/research/")) "Research") (a (@ (href "/publications/")) "Publications") (a (@ (href "/software/")) "Software") (a (@ (href "/teaching/")) "Teaching")))) (define (site-footer) `(footer (p (a (@ (rel "licence") (href "http://creativecommons.org/licenses/by-nc-nd/4.0/")) (img (@ (alt "Creative Commons License") (style "border-width:0") ; (src "https://licensebuttons.net/l/by-nc-nd/4.0/88x31.png") ; (src "https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/by-nc-nd.svg") (src "https://mirrors.creativecommons.org/presskit/buttons/80x15/svg/by-nc-nd.svg") ))) " Urbain Vaes, 2020. " (a (@ (href "https://git.vaes.uk/public/www-urbain.git/plain/site.scm")) "(Source code)") ))) (define (static-page head main) `(html (@ (lang "en")) ,(html-head head) (body ,(site-menu) ,main ,(site-footer)))) (define (contact-page) (static-page "Contact" `(main ,(read-xml "html/contact.html")))) (define-record-type (make-pub year title coauthors journal pdf-link journal-link arxiv-link bib-link) pub? (year pub-year) (title pub-title) (coauthors pub-coauthors) (journal pub-journal) (pdf-link pub-pdf-link) (journal-link pub-journal-link) (arxiv-link pub-arxiv-link) (bib-link pub-bib-link)) (define* (publication #:key year title coauthors journal pdf-link journal-link arxiv-link bib-link) (make-pub year title coauthors journal pdf-link journal-link arxiv-link bib-link)) (define* (get-links-publication p #:optional (show-bibtex #t) (class "logos")) `(,(if (pub-pdf-link p) `( (a (@ (href ,(pub-pdf-link p))) (img (@ (class ,class) (alt "PDF") (src ,(static-url "img/pdf.png"))))) " ") "") ,(if (pub-journal-link p) `( (a (@ (href ,(pub-journal-link p))) (img (@ (class ,class) (alt "url") (src ,(static-url "img/url-transparent.png"))))) " ") "") ,(if (pub-arxiv-link p) `( (a (@ (href ,(pub-arxiv-link p))) (img (@ (class ,class) (alt "arxiv") (src ,(static-url "img/arxiv.png"))))) " ") "") ,(if (and (pub-bib-link p) show-bibtex) `(a (@ (href ,(pub-bib-link p))) "Bibtex") ""))) (define (list-publication p) `((dt ,(pub-year p)) (dd (ul (@ (class "pub")) (li (@ (class "pub_title")) ,(string-append (pub-title p) ".")) (li (@ (class "pub_authors")) ,(string-append (pub-coauthors p) ".")) (li (@ (class "pub_journal")) ,(string-append (pub-journal p) ".")) ,(if (pub-pdf-link p) `(li (@ (class "pub_links")) ,(get-links-publication p)) ""))))) (define (highlight-publication p) `(div (@ (class "highlight")) (ul (@ (class "pub")) (li (@ (class "pub_title")) ,(string-append (pub-title p) ".")) (li (@ (class "pub_authors")) ,(string-append (pub-coauthors p) ", " (pub-year p) ".")) (li (@ (class "pub_journal")) ,(string-append (pub-journal p) ".") (span (@ (style "float: right; text-align: right; width: 10%")) ,(get-links-publication p #f "biglogos")))))) (define my_publications `(("UV_2013" . ,(publication #:year "2013" #:title "Discontinuous Galerkin method for 4th order elliptic PDEs (in French)" #:coauthors "MSc thesis supervised by J-F Remacle" #:journal "Unpublished" #:pdf-link (static-url "pub/msc_thesis.pdf"))) ("UV_2019" . ,(publication #:year "2019" #:title "Topics in multiscale modeling: numerical analysis and applications" #:coauthors "PhD thesis supervised by G. Pavliotis and S. Kalliadasis" #:journal "Unpublished" #:pdf-link "https://spiral.imperial.ac.uk/bitstream/10044/1/73890/3/Vaes-U-2019-PhD-Thesis.pdf" #:journal-link "https://spiral.imperial.ac.uk/handle/10044/1/73890")) ("AAGPUV_2017" . ,(publication #:year "2017" #:title "Spectral methods for multiscale stochastic differential equations" #:coauthors "With A. Abdulle and G. A. Pavliotis" #:journal "SIAM/ASA J. Uncertain. Quantif" #:pdf-link "https://epubs.siam.org/doi/pdf/10.1137/16M1094117" #:journal-link "https://doi.org/10.1137/16M1094117" #:arxiv-link "https://arxiv.org/abs/1609.05097" #:bib-link "/static/bib/AAGPUU-2017.txt")) ("BAUVMPSK_2019" . ,(publication #:year "2019" #:title "A linear, second-order, energy stable, fully adaptive finite-element method for phase-field modelling of wetting phenomena" #:coauthors "With B. Aymard, M. Pradas and S. Kalliadasis" #:journal "J. Comput. Phys. X" #:pdf-link "https://arxiv.org/pdf/1901.06190" #:journal-link "https://doi.org/10.1016/j.jcpx.2019.100010" #:arxiv-link "https://arxiv.org/abs/1901.06190" #:bib-link "/static/bib/BAUVMPSK-2019.txt")) ("SGGPUV_2019" . ,(publication #:year "2020" #:title "Mean field limits for interacting diffusions with colored Noise: Phase transitions and spectral numerical methods" #:coauthors "With S. N. Gomes and G. A. Pavliotis" #:journal "Multiscale Model. Simul" #:pdf-link (static-url "pub/SGGPUV-MMS-2020.pdf") #:journal-link "https://doi.org/10.1137/19M1258116" #:arxiv-link "https://arxiv.org/abs/1904.05973" #:bib-link "/static/bib/SGGPUV-2020.txt")) ("JCUV_2019" . ,(publication #:year "2020" #:title "Wasserstein stability estimates for covariance-preconditioned Fokker-Planck equations" #:coauthors "With J. Carrillo" #:journal "Accepted for publication in Nonlinearity" #:pdf-link "https://arxiv.org/pdf/1910.07555" #:arxiv-link "https://arxiv.org/abs/1910.07555")) ("GPGSUV_2020" . ,(publication #:year "2020" #:title "Scaling limits for the generalized Langevin equation" #:coauthors "With G. A. Pavliotis and G. Stoltz" #:journal "J. Nonlinear Sci" #:journal-link "https://link.springer.com/article/10.1007/s00332-020-09671-4" #:pdf-link (static-url "pub/GPGSUV-2021.pdf") #:arxiv-link "https://arxiv.org/abs/2007.16087" #:bib-link "/static/bib/GPGSUV-2021.txt")) ("GPASUV_2020" . ,(publication #:year "2021" #:title "Derivative-free Bayesian inversion using multiscale dynamics" #:coauthors "With G. A. Pavliotis and A. M. Stuart" #:journal "Arxiv preprint (submitted)" #:pdf-link "https://arxiv.org/pdf/2102.00540" #:arxiv-link "https://arxiv.org/abs/2102.00540")) ("DKGPUV_2021" . ,(publication #:year "2021" #:title "Optimal control of the Fokker-Planck equation: spectral methods and a reduced gradient approach" #:coauthors "With D. Kalise and G. A. Pavliotis" #:journal "In preparation")) ("JCFHASUV_2021" . ,(publication #:year "2021" #:title "Consensus-based sampling" #:coauthors "With J. A. Carrillo, F. Hoffmann and A. M. Stuart" #:journal "In preparation")) )) (define (research-page) (static-page "Research" `(main (h1 "Research") (h2 "Summary") ,(read-xml "html/research/summary.html") (h2 "Main research interests") (h3 "Mean field limit of interacting particle systems") ,(read-xml "html/research/mckean.html") ,(highlight-publication (assoc-ref my_publications "SGGPUV_2019")) ,(read-xml "html/research/enkf.html") ,(highlight-publication (assoc-ref my_publications "JCUV_2019")) (h3 "The generalized Langevin equation: effective diffusion and long-time behavior") ,(read-xml "html/research/gle.html") ,(highlight-publication (assoc-ref my_publications "GPGSUV_2020")) (h3 "Spectral methods for Poisson and Fokker-Planck-Kolmogorov equations") ,(read-xml "html/research/spectral.html") ,(highlight-publication (assoc-ref my_publications "AAGPUV_2017")) (h3 "Finite element methods for elliptic partial differential equations") ,(read-xml "html/research/kirchoff.html") ,(highlight-publication (assoc-ref my_publications "UV_2013")) ,(read-xml "html/research/cahn.html") ,(highlight-publication (assoc-ref my_publications "BAUVMPSK_2019")) ))) (define* (link-files desc link #:key pdf py ipynb html special) (let ((url (static-url (string-append (if pdf "teaching/lectures/" "teaching/codes/") link)))) `(li ,(if special `(@ (class "special")) "") ,desc ": " ,(if pdf `("[" (a (@ (href ,(string-append url ".pdf"))) "pdf") "] ") "") ,(if py `("[" (a (@ (href ,(string-append url ".py")) (download)) "Python") "] ") "") ,(if ipynb `("[" (a (@ (href ,(string-append url ".ipynb")) (download)) "Jupyter") "] ") "") ,(if html `("[" (a (@ (href ,(string-append url ".html"))) "HTML") "] ") "") (p (em "Last modified: " ,(let* ((date (string-append "date -r " (if pdf "/www/computational_stochastic_processes/lectures/" "/www/codes/") link (if pdf ".pdf" ".py ") " +\"%d %b %Y\"")) (port (open-input-pipe date)) (str (read-line port))) (close-pipe port) str) ".")) ))) (define (teaching-page) (static-page "Teaching" `(main (h1 "Teaching activities") (ul (li "2020: " (a (@ (href "/teaching/2020-csp/")) "Computational Stochastic Processes")))) )) (define (teaching-page/2020-csp) (static-page "Computational Stochastic Processes" `(main (h1 "Computational Stochastic Processes") (p "This page contains some of the material for the course MATH97016/MATH97094: Computational Stochastic Processes. The course material was initially developed by " (a (@ (href "http://wwwf.imperial.ac.uk/~pavl/")) "Grigorios Pavliotis") ", and it later received improvements from " (a (@ (href "http://wwwf.imperial.ac.uk/~aduncan/")) "Andrew Duncan") " and " (a (@ (href "https://warwick.ac.uk/fac/sci/maths/people/staff/gomes/")) "Susana Gomes") ". In particular, the lecture notes linked below were assembled by Andrew Duncan, and the handwritten part of the notes distributed weekly were written by Susana Gomes." (dl (dt "Lectures") (dd (br)) (ul (@ (style "list-style-type:none;padding-left:0;")) (li "Monday 13:00-14:00 (Huxley 145)") (li "Tuesday 12:00-13:00 (Huxley 140)") (li "Friday 17:00-18:00 (Huxley 213)")) (dt "Office hours") (dd "Tuesday 15:00-16:00, or by email appointment.")) ) (h2 "Lecture notes") (ul (@ (id codes)) ,(link-files "Lecture notes (from 2016)" "notes_2016" #:pdf #t #:special #t) ,(link-files "List of examinable proofs" "build/list_of_proofs" #:pdf #t #:special #t) ,(link-files "Introduction (based on slides by Susana Gomes)" "build/intro" #:pdf #t) ,(link-files "W1: Random number generation and introduction to Monte Carlo simulation" "build/lectures-w1" #:pdf #t) ,(link-files "W2: Variance reduction techniques for Monte Carlo simulation" "build/lectures-w2" #:pdf #t) ,(link-files "W3: Simulation of continuous-time Markov processes" "build/lectures-w3" #:pdf #t) ,(link-files "W4: Simulation of Gaussian processes (cont'd) and SDEs" "build/lectures-w4" #:pdf #t) ,(link-files "W5: Numerical methods for SDEs" "build/lectures-w5" #:pdf #t) ,(link-files "W6: Numerical methods for SDEs (cont'd)" "build/lectures-w6" #:pdf #t) ,(link-files "W7: Inference for SDEs" "build/lectures-w7" #:pdf #t) ,(link-files "W8: Inference (cont'd) and markov chains" "build/lectures-w8" #:pdf #t) ,(link-files "W9: Markov chain Monte Carlo" "build/lectures-w9" #:pdf #t) ) (h2 "Problem sheets and coursework") (ul (@ (id codes)) ,(link-files "Problem sheet 1: questions" "build/problem_sheet_1_questions" #:pdf #t) ,(link-files "Problem sheet 1: solutions" "build/problem_sheet_1_answers" #:pdf #t) ,(link-files "Problem sheet 1: codes" "w4_problem_sheet" #:py #t #:ipynb #t #:html #t) ,(link-files "Problem sheet 2: questions" "build/problem_sheet_2_questions" #:pdf #t) ,(link-files "Problem sheet 2: solutions" "build/problem_sheet_2_answers" #:pdf #t) ,(link-files "Problem sheet 2: codes" "w10_problem_sheet" #:py #t #:ipynb #t #:html #t) ,(link-files "Assessed coursework" "build/coursework_problems" #:pdf #t) ,(link-files "Assessed coursework: solution to Problem 1" "coursework_problem_1" #:py #t #:ipynb #t #:html #t) ,(link-files "Assessed coursework: solution to Problem 2" "coursework_problem_2" #:py #t #:ipynb #t #:html #t) ,(link-files "Assessed coursework: solution to Problem 3" "coursework_problem_3" #:py #t #:ipynb #t #:html #t) ,(link-files "Mock exam" "mock_exam" #:pdf #t) ,(link-files "Mock exam: brief solutions" "build/mock_exam-solutions" #:pdf #t) ) ,(read-xml "html/hint.html") (h2 "Python examples") (p "If you find bugs in the codes, or if you worked on a code example that could benefit the class, do not hesitate to drop me an email. Alternatively, you can open an issue or a pull request at the " (a (@ (href "https://github.com/urbainvaes/computational_stochastic_processes")) "git repository") ".") (ul (@ (id codes)) ,(link-files "Introduction - Calculating Pi" "introduction_calculate_pi" #:py #t) ,(link-files "Introduction: Simulation of Langevin dynamics" "introduction_langevin" #:py #t) ,(link-files "W1 - Linear congruential generator" "w1_linear_congruential_generator" #:py #t #:ipynb #t #:html #t) ,(link-files "W1 - Generating nonuniform random numbers" "w1_generate_nonuniform_random_numbers" #:py #t #:ipynb #t #:html #t) ,(link-files "W2 - Monte Carlo simulation" "w2_monte_carlo" #:py #t #:ipynb #t #:html #t) ,(link-files "W2 - Variance reduction" "w2_variance_reduction" #:py #t #:ipynb #t #:html #t) ,(link-files "W3 - Simulation of Gaussian processes" "w3_gaussian_processes" #:py #t #:ipynb #t #:html #t) ,(link-files "W4 - Fast simulation of stationary Gaussian processes" "w4_dft_gaussian_processes" #:py #t #:ipynb #t #:html #t) ,(link-files "W5 - Numerical methods for SDEs" "w5_numerical_solution_of_sdes" #:py #t #:ipynb #t #:html #t) ,(link-files "W6 - Some applications of numerical methods for SDEs" "w6_applications_of_sdes" #:py #t #:ipynb #t #:html #t) ,(link-files "W7 - Inference for SDEs" "w7_inference_for_sdes" #:py #t #:ipynb #t #:html #t) ,(link-files "W8 - Introduction to Markov chains" "w8_markov_chains" #:py #t #:ipynb #t #:html #t) ,(link-files "W9 - Markov chain Monte Carlo" "w9_metropolis-hastings" #:py #t #:ipynb #t #:html #t) )))) (define (publications-page) (static-page "Publications" `(main (h1 "Publications") (h2 "Preprints") (dl ,(list-publication (assoc-ref my_publications "GPASUV_2020"))) (h2 "Published and accepted papers") (dl ,(list-publication (assoc-ref my_publications "GPGSUV_2020")) ,(list-publication (assoc-ref my_publications "JCUV_2019")) ,(list-publication (assoc-ref my_publications "SGGPUV_2019")) ,(list-publication (assoc-ref my_publications "BAUVMPSK_2019")) ,(list-publication (assoc-ref my_publications "AAGPUV_2017"))) (h2 "Articles in preparation") (dl ,(list-publication (assoc-ref my_publications "DKGPUV_2021")) ,(list-publication (assoc-ref my_publications "JCFHASUV_2021"))) (h2 "Unpublished work") (dl ,(list-publication (assoc-ref my_publications "UV_2019")) ,(list-publication (assoc-ref my_publications "UV_2013"))) ))) (define (git-page) (static-page "Software" `(main (h1 "Software") (p "Most of the git repositories I work(ed) on are available " (a (@ (href "https://git.vaes.uk")) "here") " or on my " (a (@ (href "https://github.com/urbainvaes")) "github page.")) (h2 "Scientific software") (p "During the course of my PhD, I was involved in two programming projects related to my research.") (h3 "Hermipy") (p (a (@ (href "https://github.com/urbainvaes/hermipy")) "Hermipy") " is a thin Python library that allows automating most of the operations involved in implementing a Hermite spectral method. The library uses the data structures provided by the " (a (@ (href "https://en.wikipedia.org/wiki/NumPy")) "Numpy") " library for linear algebra, and it also depends on " (a (@ (href "https://en.wikipedia.org/wiki/SymPy")) "Sympy") " for symbolic calculations. Computationally intensive parts of the computations, such as Hermite transforms, are handed over to a C++ compiled component, and " (a (@ (href "https://en.wikipedia.org/wiki/Boost_(C%2B%2B_libraries)")) "Boost") " is used for efficient exchange of data with Python. For more information, read the " (a (@ (href "https://hermipy.readthedocs.io/en/latest/")) "documentation") ".") (h3 "Cahn-Hilliard solver") (p (a (@ (href "https://github.com/urbainvaes/cahn-hilliard")) "This") " is a high-level framework for the numerical solution of the " (a (@ (href "https://en.wikipedia.org/wiki/Cahn%E2%80%93Hilliard_equation")) "Cahn-Hilliard equation") ", implementing a number of semi-implicit numerical methods in " (a (@ (href "https://freefem.org")) "FreeFem++") " and offering users the means to rapidly " (strong "(i)") " define the initial and boundary conditions of the problem, " (strong "(ii)") " run a particular numerical method with appropriate parameters, and " (strong "(iii)") " post-process the solution. Both two and three-dimensional settings are supported, and the geometry of the domain is read in files generated by the " (a (@ (href "http://gmsh.info/")) "Gmsh") " mesh-generator.") ,(let ((card (lambda (name) `(p (div (@ (class "github-card") (data-github ,(string-append "urbainvaes/" name)) (data-width "400") (data-height "") (data-theme "default")) "") (script (@ (src "//cdn.jsdelivr.net/github-cards/latest/widget.js")) ""))))) `((h2 "Vim plugins") ,(card "vim-macaw") ,(card "vim-ripple") ,(card "vim-tmux-pilot") ,(card "vim-remembrall") (h2 "Bash/Zsh plugin") ,(card "fzf-marks")) "") ))) (define (cv-page) (static-page "CV" `(main (h1 "Curriculum Vitæ") (p "▶ Download PDF version: " (a (@ (id "download") (href ,(static-url "doc/cv_fr.pdf"))) "[French]") " " (a (@ (id "download") (href ,(static-url "doc/cv.pdf"))) "[English]")) ,(read-xml "html/cv.html")))) (define (hello-page) (static-page "Welcome" `(main (h1 "Hello, world!")))) ; Deploy website (define site-directory "site") (system (string-append "rm -rf " site-directory)) (system (string-append "mkdir -p " site-directory)) (system (string-append "cp -r static " site-directory)) (for-each ; Write resource to output file (lambda (resource) (let* ((path (string-append site-directory "/" (car resource)))) (begin (system (string-append "mkdir -p " (dirname path))) (call-with-output-file path (lambda (output-port) (sxml->xml (cdr resource) output-port)))))) ; List of web resources (list (cons "index.html" (hello-page)) (cons "cv/index.html" (cv-page)) (cons "hello/index.html" (hello-page)) (cons "contact/index.html" (contact-page)) (cons "research/index.html" (research-page)) (cons "publications/index.html" (publications-page)) (cons "software/index.html" (git-page)) (cons "teaching/index.html" (teaching-page)) (cons "teaching/2020-csp/index.html" (teaching-page/2020-csp)) ))