Skip to content

Instantly share code, notes, and snippets.

View jwscook's full-sized avatar

James Cook jwscook

View GitHub Profile
@jwscook
jwscook / Functionals.jl
Created June 9, 2018 13:08
Avoiding functions in types; performance comparison & invitation for code review
module Functionals
abstract type Abstract end
type Functional <: Abstract
lower::Float64
upper::Float64
end
Functional(t::Float64) = Functional(0.0, 12.0 * t)
@jwscook
jwscook / ThreadProblemMWE.jl
Last active June 23, 2020 11:42
Finding optimal threading of two consecutive double loops where some rows are skipped in the first double loop and the second double loop depends on the output of the first.
using Base.Threads, Random
function run(;waittime=1.0e-3)
function calcsubset(N)
Random.seed!(0)
return sort(shuffle(collect(1:N))[1:Int(ceil(round(N / 3)))])
end
# we know that only a sorted subset of rows need be iterated over for the first loop
@jwscook
jwscook / RandAlwaysHalf.jl
Created July 6, 2020 11:25
Use Cassette and ReplMaker to create REPL that has deterministic rand()
# Based on https://gist.github.com/mbauman/d0c27f40e25393ef050b87b4bb6a69dc
using Cassette, ReplMaker
Cassette.@context RandAlwaysHalf
randreturnshalf(s, x) = x
function randreturnshalf(s, f, fx)
if f == rand
return randreturnshalf(s, one(typeof(fx)) / 2)
@jwscook
jwscook / ReplaceRand.jl
Last active July 7, 2020 08:19
@replacerand macro to replace calls to rand() by a given function e.g. x->0.5
"""
A macro `@replacerand` that replaces the value returned by a call to `rand` with something else.
"""
using Cassette
Cassette.@context ReplaceRand
Cassette.overdub(ctx::ReplaceRand, fn::typeof(rand), args...) = ctx.metadata(args...)
using Random
const seed = hash(time())
Random.seed!(seed)
searchstring = "const seed = "
open("$(@__FILE__)" * ".reproducible", "w") do io
for line in readlines(open(@__FILE__))
if length(line) > length(searchstring) && line[1:length(searchstring)] == searchstring
@jwscook
jwscook / Cuckoo.jl
Last active July 14, 2020 10:55
The Cuckoo replaces eggs in a nest without the developer knowing, but not a very good way.
module Cuckoo
export @cuckoo
using Cassette
Cassette.@context Ctx
function _cuckoo(chicks::Dict, nest)
for (oldchicks, newchicks) ∈ chicks
@eval function Cassette.overdub(ctx::Ctx,
@jwscook
jwscook / BiComplexes.jl
Created March 2, 2021 20:03
BiComplex numbers in Julia
module BiComplexes
using AutoHashEquals
export BiComplex, derivative
@auto_hash_equals struct BiComplex{T} <: Number
re::Complex{T}
im::Complex{T}
end
@jwscook
jwscook / CoordinateSystemInversionProblem.jl
Last active June 28, 2021 18:26
Automatic differentiation through inverse of coordinate transforms
using ForwardDiff: Dual, Tag, jacobian, value, tagtype, partials, gradient
using LinearAlgebra
using NLsolve
using Random
using Test
Random.seed!(0)
const jac = jacobian
@jwscook
jwscook / elixir_maxwell.jl
Created December 13, 2021 13:35
Trixi Discontinuous Galerkin Maxwell
using OrdinaryDiffEq
using LinearAlgebra
using StaticArrays
using Trixi
import Trixi: AbstractEquations, varnames, flux
abstract type AbstractMaxwellEquations{NDIMS, NVARS} <: AbstractEquations{NDIMS, NVARS} end
struct MaxwellEquations2D{RealT<:Real} <: AbstractMaxwellEquations{2, 6}
μ₀::Float64
ϵ₀::Float64
@jwscook
jwscook / config.log
Created January 21, 2022 19:15
Octave config.log
This file has been truncated, but you can view the full file.
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by GNU Octave configure 6.4.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ ./configure CFLAGS=-O3 -m64 -mavx2 -mfma -march=native -mtune=native -mfpmath=sse -malign-data=cacheline -ftree-vectorize -fno-semantic-interposition -fomit-frame-pointer -I/home/cookj/BUILT/include -L/home/cookj/BUILT/lib -Wl,-rpath=/home/cookj/BUILT/lib -pipe -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -lmimalloc CXXFLAGS=-O3 -m64 -mavx2 -mfma -march=native -mtune=native -mfpmath=sse -malign-data=cacheline -ftree-vectorize -fno-semantic-interposition -fomit-frame-pointer -I/home/cookj/BUILT/include -L/home/cookj/BUILT/lib -Wl,-rpath=/home/cookj/BUILT/lib -pipe -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -lmimalloc FFLAGS=-O3 -m64 -mavx2 -mfma -march=native -mtune=native -mfpmath=sse -malign-dat