  Scientists construct and analyze computational models to understand the
world. That understanding comes from efforts to augment, combine, and compare
models of related phenomena. We propose SemanticModels.jl, a system that
leverages techniques from static and dynamic program analysis to process
executable versions of scientific models to perform such metamodeling tasks. By
framing these metamodeling tasks as metaprogramming problems, SemanticModels.jl
enables writing programs that generate and expand models. To this end, we
present a category theory-based framework for defining metamodeling tasks, and
extracting semantic information from model implementations, and show how this
framework can be used to enhance scientific workflows in a working case study.
