Skip to content

Instantly share code, notes, and snippets.

@mandli
mandli / resume.json
Last active November 10, 2025 17:10
Basic resume for Kyle Mandli
{
"basics": {
"name": "Kyle T. Mandli",
"label": "Scientist",
"email": "[email protected]",
"phone": "+1 (206) 250 3731",
"url": "https://kylemandli.com",
"summary": "Computational mathematician interested in applications to coastal floods and other geophysical hazards. Includes numerical methods for hyperbolic PDEs, high performance computing, and software development practices in scientific and engineering software.",
"location": {
"address": "",
@mandli
mandli / plot_num_grids.py
Created September 17, 2025 14:24
Plot the number of grids and cells in an [AMRClaw](github.com/clawpack/amrclaw) or [GeoClaw](github.com/clawpack/geoclaw) run.
#!/usr/bin/env python
from pathlib import Path
import sys
import os
import numpy as np
article = False
@mandli
mandli / make_movie.py
Created November 23, 2020 02:53
Make a mp4 out of a set of png using ffmpeg
#!/usr/bin/env python
"""
ffmpeg, convert png to mpg
ffmpeg -r FRAMES_PER_SECOND -i IMAGE_PATHS -q:a 0 -q:v 0 -vcodec mpeg4 -vb 20M -r FRAMES_PER_SECOND_MOV OUTPUT_FILE
`-qscale 0` - Forces lossless quality conversion -> should use `-q:a 0 -q:v 0`
`FRAMES_PER_SECOND` - Number of images to display per second, can be fractional
`IMAGE_PATHS` - Image paths, use normal substitution macros, i.e. frame%04dfig4.png would expand to frameXXXXfig4.png where XXXX is zero filled.
@mandli
mandli / create_html_bib.py
Created October 30, 2020 18:00
Take a bibtex file and create an html version of the compiled bibliography via pandoc.
#!/usr/bin/env python
import os
import subprocess
html_header = r"""
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
@mandli
mandli / macros.tex
Created September 17, 2020 15:47
Macros for Writing LaTeX
\newcommand{\eg}{{e.g.}\xspace}
% ==============================================================================
% Generic math macros
\renewcommand{\v}[1]{\boldsymbol{#1}}
\newcommand{\m}[1]{\text{\textsf#1}}
\newcommand{\pd}[2]{\ensuremath{\frac{\partial #1}{\partial #2}}} % partial
\newcommand{\dee}{\ensuremath{\mathrm{d}}} % d symbol
\newcommand{\diff}[2]{\ensuremath{\frac{\dee #1}{\dee #2}}} % Derivative d/dx
@mandli
mandli / regression_tests.py
Created April 27, 2019 18:59
Draft Adjoint Based Regression Tests Class
#!/usr/bin/env python
r"""chile2010_adjoint regression test for GeoClaw
To create new regression data use
`python regression_tests.py True`
"""
from __future__ import absolute_import
import os
@mandli
mandli / rel_err_formula.py
Created September 10, 2017 22:14
Python script to compare two formulas for relative error.
# Based on the code by Nick Higham
# https://gist.github.com/higham/6f2ce1cdde0aae83697bca8577d22a6e
# Compares relative error formulations using single precision and compared to double precision
N = 501 # Note: Use 501 instead of 500 to avoid the zero value
d = numpy.finfo(numpy.float32).eps * 1e4
a = 3.0
x = a * numpy.ones(N, dtype=numpy.float32)
y = [x[i] + numpy.multiply((i - numpy.divide(N, 2.0, dtype=numpy.float32)), d, dtype=numpy.float32) for i in range(N)]
@mandli
mandli / gist:9c4a831f00249ee31035
Last active August 29, 2015 14:07
Demo of tick label rotation
#!/usr/bin/env python
import numpy
import matplotlib.pyplot as plt
X, Y = numpy.meshgrid(numpy.linspace(-2, 2, 200, numpy.linspace(-2 ,2 ,20))
fig = plt.figure(figsize=[16,8])
axes = []
for n in xrange(2):
@mandli
mandli / colorbar_add_break.py
Created March 23, 2014 16:33
`__add__` colorbar functionality with break control
def add(colormaps, break_location=0.5):
lhs_dict = colormaps[0]._segmentdata
rhs_dict = colormaps[1]._segmentdata
new_dict = dict(red=[], green=[], blue=[])
# Scale rhs by half
for key in rhs_dict:
val_list = rhs_dict[key]
print(key, val_list)