Skip to content
Snippets Groups Projects
Unverified Commit f5214f9d authored by Lars Bilke's avatar Lars Bilke
Browse files

cleanup.

parent d1a8630d
No related branches found
No related tags found
No related merge requests found
include:
# - local: "/container/ci-container.yml"
- local: "/paper/ci-paper.yml"
.PHONY: all build spellcheck clean watch html
all: paper.pdf
CROSSREF := $(shell command -v pandoc-crossref 2> /dev/null)
PANDOC_ARGS = --from=markdown --highlight-style=tango -F mermaid-filter -F ${CROSSREF} --citeproc --number-sections
SRCS = paper/index.md $(wildcard **/content.md */**/content.md)
DEPS = ${SRCS} paper/style.tex Makefile $(wildcard filter/*.lua)
paper.pdf: $(DEPS)
pandoc --listings -s -H paper/style.tex --lua-filter paper/filters/color.lua -o $@ ${PANDOC_ARGS} ${SRCS}
spellcheck:
ASPELL_CONF="personal ./.aspell.en.pws" pandoc --lua-filter paper/filters/spellcheck.lua ${SRCS}
clean:
@echo "Cleaning up..."
rm *.pdf
watch:
fswatch -0 -o -l 2 **/*.md **/*.bib | xargs -0 -n 1 make build
html: index.html
%.html: $(DEPS)
pandoc --standalone --mathjax -o $@ ${PANDOC_ARGS} ${SRCS}
@article{Wang2009,
title = {A parallel finite element scheme for thermo-hydro-mechanical (THM) coupled problems in porous media},
journal = {Computers \& Geosciences},
volume = {35},
number = {8},
pages = {1631 - 1641},
year = {2009},
issn = {0098-3004},
author = {Wenqing Wang and Georg Kosakowski and Olaf Kolditz},
keywords = {Parallel computing, Finite element method, Domain decomposition, Thermo-hydro-mechanical (THM) coupled processes, Porous media}
}
@book{Kolditz2012,
title = {Thermo-Hydro-Mechanical-Chemical Processes in Porous Media - Benchmarks and Examples},
author = {Kolditz, O. and Görke, U.-J. and Shao, H. and Wang, W.},
publisher = {Springer},
year = {2012},
volume = {86},
doi = {10.1007/978-3-642-27177-9},
isbn = {978-3-642-27176-2},
category = {Processes}
}
@article{Wang2015,
author = {Wang, Wenqing and Fischer, Thomas and Zehner, Bj{\"{o}}rn and B{\"{o}}ttcher, Norbert and G{\"{o}}rke, Uwe Jens and Kolditz, Olaf},
issn = {18666299},
journal = {Environmental Earth Sciences},
number = {5},
pages = {2269--2285},
title = {{A parallel finite element method for two-phase flow processes in porous media: OpenGeoSys with PETSc}},
volume = {73},
year = {2015}
}
@book{ddc,
author = {Toselli, Andrea and Widlund, Olof B.},
publisher = {Springer},
title = {Domain Decomposition Methods — Algorithms and Theory},
year = {2005},
doi = {10.1007/b137868},
isbn = {978-3-540-26662-4}
}
@article{Wang2009,
title = {A parallel finite element scheme for thermo-hydro-mechanical (THM) coupled problems in porous media},
journal = {Computers \& Geosciences},
volume = {35},
number = {8},
pages = {1631 - 1641},
year = {2009},
issn = {0098-3004},
author = {Wenqing Wang and Georg Kosakowski and Olaf Kolditz},
keywords = {Parallel computing, Finite element method, Domain decomposition, Thermo-hydro-mechanical (THM) coupled processes, Porous media}
}
@inproceedings{10.5555/1898953.1899055,
author = {Abou-Rjeili, Amine and Karypis, George},
title = {Multilevel Algorithms for Partitioning Power-Law Graphs},
year = {2006},
isbn = {1424400546},
publisher = {IEEE Computer Society},
address = {USA},
booktitle = {Proceedings of the 20th International Conference on Parallel and Distributed Processing},
pages = {124},
numpages = {1},
location = {Rhodes Island, Greece},
series = {IPDPS'06}
}
@article{10.12688/f1000research.29032.2,
author = { Mölder, F and Jablonski, KP and Letcher, B and Hall, MB and Tomkins-Tinch, CH and Sochat, V and Forster, J and Lee, S and Twardziok, SO and Kanitz, A and Wilm, A and Holtgrewe, M and Rahmann, S and Nahnsen, S and Köster, J},
title = {Sustainable data analysis with Snakemake [version 2; peer review: 2 approved]
},
journal = {F1000Research},
volume = {10},
year = {2021},
number = {33},
doi = {10.12688/f1000research.29032.2}
}
@techreport{petsc-user-ref,
author = {Satish Balay and Shrirang Abhyankar and Mark~F. Adams and Steven
Benson and Jed Brown and Peter Brune and Kris Buschelman and Emil Constantinescu and Lisandro Dalcin and Alp Dener and Victor Eijkhout and William~D. Gropp and V\'{a}clav Hapla and Tobin Isaac and Pierre Jolivet and Dmitry Karpeev and Dinesh Kaushik and Matthew~G. Knepley and Fande Kong and Scott Kruger and Dave~A. May and Lois Curfman McInnes and Richard Tran Mills and Lawrence Mitchell and Todd Munson and Jose~E. Roman and Karl Rupp and Patrick Sanan and Jason Sarich and Barry~F. Smith and Stefano Zampini and Hong Zhang and Hong Zhang and Junchao Zhang},
title = {{PETSc/TAO} Users Manual},
institution = {Argonne National Laboratory},
number = {ANL-21/39 - Revision 3.16},
year = {2021}
}
@article{Bilke2019,
author = {Bilke, Lars and Flemisch, Bernd and Kalbacher, Thomas and Kolditz, Olaf and Helmig, Rainer and Nagel, Thomas},
day = 01,
doi = {10.1007/s11242-019-01310-1},
issn = {1573-1634},
journal = {Transport in Porous Media},
month = {10},
number = 1,
pages = {337--361},
title = {Development of Open-Source Porous Media Simulators: Principles and Experiences},
url = {https://doi.org/10.1007/s11242-019-01310-1},
volume = 130,
year = 2019
}
pdf:
tags: [envinf, shell]
stage: build
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
- changes:
- "**/*.md"
- Makefile
script:
- make
artifacts:
when: always
paths:
- paper.pdf
Span = function(el)
color = el.attributes['color']
-- if no color attribute, return unchanged
if color == nil then return el end
-- transform to <span style="color: red;"></span>
if FORMAT:match 'html' then
-- remove color attributes
el.attributes['color'] = nil
-- use style attribute instead
el.attributes['style'] = 'color: ' .. color .. ';'
-- return full span element
return el
elseif FORMAT:match 'latex' then
-- remove color attributes
el.attributes['color'] = nil
-- encapsulate in latex code
table.insert(
el.content, 1,
pandoc.RawInline('latex', '\\textcolor{'..color..'}{')
)
table.insert(
el.content,
pandoc.RawInline('latex', '}')
)
return el.content
else
-- for other format return unchanged
return el
end
end
function Div(el)
if el.classes[1] == "warning"
or el.classes[1] == "workflow"
-- ADD HERE MORE CLASSES
then
-- insert element in front
table.insert(
el.content, 1,
pandoc.RawBlock("latex", "\\begin{quote_" .. el.classes[1] .. "}"))
-- insert element at the back
table.insert(
el.content,
pandoc.RawBlock("latex", "\\end{quote_" .. el.classes[1] .. "}"))
end
return el
end
"""
Panflute filter to allow file includes
Each include statement has its own line and has the syntax:
$include ../somefolder/somefile
Each include statement must be in its own paragraph. That is, in its own line
and separated by blank lines.
If no extension was given, ".md" is assumed.
"""
import os
import panflute as pf
def is_include_line(elem):
if len(elem.content) < 3:
return False
elif not all(isinstance(x, (pf.Str, pf.Space)) for x in elem.content):
return False
elif elem.content[0].text != "$include":
return False
elif type(elem.content[1]) != pf.Space:
return False
else:
return True
def get_filename(elem):
fn = pf.stringify(elem, newlines=False).split(maxsplit=1)[1]
if not os.path.splitext(fn)[1]:
fn += ".md"
return fn
# TODO: make this recursive
def action(elem, doc):
if isinstance(elem, pf.Para) and is_include_line(elem):
fn = get_filename(elem)
if not os.path.isfile(fn):
return
with open(fn) as f:
raw = f.read()
new_elems = pf.convert_text(raw)
# Alternative A:
return new_elems
# Alternative B:
# div = pf.Div(*new_elems, attributes={'source': fn})
# return div
def main(doc=None):
return pf.run_filter(action, doc=doc)
if __name__ == "__main__":
main()
-- lua filter for spell checking: requires 'aspell'.
-- Copyright (C) 2017-2020 John MacFarlane, released under MIT license
local text = require('text')
local words = {}
local deflang
local function add_to_dict(lang, t)
if not words[lang] then
words[lang] = {}
end
if not words[lang][t] then
words[lang][t] = (words[lang][t] or 0) + 1
end
end
local function get_deflang(meta)
deflang = (meta.lang and meta.lang[1] and meta.lang[1].c) or 'en'
-- the following is better but won't work in pandoc 2.0.6.
-- it requires pandoc commit ecc46e229fde934f163d1f646383d24bfe2039e1:
-- deflang = (meta.lang and pandoc.utils.stringify(meta.lang)) or 'en'
return {} -- eliminate meta so it doesn't get spellchecked
end
local function run_spellcheck(lang)
local keys = {}
local wordlist = words[lang]
for k,_ in pairs(wordlist) do
keys[#keys + 1] = k
end
local inp = table.concat(keys, '\n')
local outp = pandoc.pipe('aspell', {'list','-l',lang}, inp)
for w in string.gmatch(outp, "([%S]+)\n") do
io.write(w)
if lang ~= deflang then
io.write("\t[" .. lang .. "]")
end
io.write("\n")
end
end
local function results(el)
pandoc.walk_block(pandoc.Div(el.blocks), {Str = function(e) add_to_dict(deflang, e.text) end})
for lang,v in pairs(words) do
run_spellcheck(lang)
end
os.exit(0)
end
local function checkstr(el)
add_to_dict(deflang, el.text)
end
local function checkspan(el)
local lang = el.attributes.lang
if not lang then return nil end
pandoc.walk_inline(el, {Str = function(e) add_to_dict(lang, e.text) end})
return {} -- remove span, so it doesn't get checked again
end
local function checkdiv(el)
local lang = el.attributes.lang
if not lang then return nil end
pandoc.walk_block(el, {Str = function(e) add_to_dict(lang, e.text) end})
return {} -- remove div, so it doesn't get checked again
end
return {{Meta = get_deflang},
{Div = checkdiv, Span = checkspan},
{Str = function(e) add_to_dict(deflang, e.text) end, Pandoc = results}}
---
title: "Reproducible HPC software deployments, simulations and workflows"
author:
- Lars Bilke
- Thomas Fischer
- Tobias Meisel
- Dmitri Naumov
date: 30. Juni 2024
lang: en
### Latex ###
documentclass: article
geometry:
- top=30mm
- left=20mm
- heightrounded
papersize: a4
hyperrefoptions:
- linktoc=all
colorlinks: true
link-citations: true
toc: true
bibliography: paper/bibliography.bib
graphics: yes
header-includes:
- \usepackage{siunitx}
codeBlockCaptions: yes
---
\pagebreak
# Abstract
# Description of HPC environments
## UFZ EVE
## JSC JUWELS
- https://www.fz-juelich.de/en/ias/jsc/systems/supercomputers/juwels
- cluster + Booster module
- for the study simulations are conducted only on cluster module
### cluster module
- BullSequana X1000 system with Intel Xeon Skylake-SP processors
- configuration (source: https://apps.fz-juelich.de/jsc/hps/juwels/configuration.html)
- 2271 standard compute nodes (2x Intel Xeon Platinum 8168 CPU, 2x 24 cores, 2.7 GHz; 96 (12x 8) GB DDR4, 2666 MHz)
- 240 large memory compute nodes (2x Intel Xeon Platinum 8168 CPU, 2x 24 cores, 2.7 GHz; 192 (12x 16) GB DDR4, 2666 MHz)
- connected via InfiniBand EDR (Connect-X4)
- simulations run exclusively on compute node
## TU Dresden Barnard
# Reproducible software deployment with GNU Guix
- Intro to Guix
- Packaging ogs with Guix
- Missing dependencies
- Changes to OGS
- Making it reproducible
- Packaging ogstools with Guix
- Creating container
- petsc pmix fix
- petsc size reduction
- make petsc reproducible
\usepackage{tcolorbox}
% New tcolorbox
\newtcolorbox{warning}{colback=red!5!white, colframe=red!50!white, title={Hinweis},fonttitle=\bfseries}
\newtcolorbox{workflow}{colback=green!5!white, colframe=green!50!black, title={Workflow},fonttitle=\bfseries,}
% Declare the environments
\newenvironment{quote_warning}{\begin{warning}}{\end{warning}}
\newenvironment{quote_workflow}{\begin{workflow}}{\end{workflow}}
\usepackage{titling}
\pretitle{\begin{center}\vspace{-3cm}\LARGE\bfseries}
\posttitle{\end{center}\vspace{-0cm}}
\usepackage{listings}
\usepackage{xcolor}
\newcommand{\passthrough}[1]{#1}
\lstset{
basicstyle=\small\ttfamily,
columns=fullflexible,
breaklines=true,
postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
keywordstyle=\color[rgb]{0.13,0.29,0.53}\bfseries,
stringstyle=\color[rgb]{0.31,0.60,0.02},
commentstyle=\color[rgb]{0.56,0.35,0.01}\itshape,
backgroundcolor=\color[RGB]{248,248,248},
}
\usepackage{dirtree}
% pandoc-crossref, see https://github.com/lierdakil/pandoc-crossref/issues/326#issuecomment-902798819
\makeatletter
\@ifpackageloaded{subfig}{}{\usepackage{subfig}}
\@ifpackageloaded{caption}{}{\usepackage{caption}}
\captionsetup[subfloat]{margin=0.5em}
\AtBeginDocument{%
\renewcommand*\figurename{Abbildung}
\renewcommand*\tablename{Tabelle}
}
\AtBeginDocument{%
\renewcommand*\listfigurename{Abbildungsverzeichnis}
\renewcommand*\listtablename{Tabellenverzeichnis}
}
\newcounter{pandoccrossref@subfigures@footnote@counter}
\newenvironment{pandoccrossrefsubfigures}{%
\setcounter{pandoccrossref@subfigures@footnote@counter}{0}
\begin{figure}\centering%
\gdef\global@pandoccrossref@subfigures@footnotes{}%
\DeclareRobustCommand{\footnote}[1]{\footnotemark%
\stepcounter{pandoccrossref@subfigures@footnote@counter}%
\ifx\global@pandoccrossref@subfigures@footnotes\empty%
\gdef\global@pandoccrossref@subfigures@footnotes{{##1}}%
\else%
\g@addto@macro\global@pandoccrossref@subfigures@footnotes{, {##1}}%
\fi}}%
{\end{figure}%
\addtocounter{footnote}{-\value{pandoccrossref@subfigures@footnote@counter}}
\@for\f:=\global@pandoccrossref@subfigures@footnotes\do{\stepcounter{footnote}\footnotetext{\f}}%
\gdef\global@pandoccrossref@subfigures@footnotes{}}
\@ifpackageloaded{float}{}{\usepackage{float}}
\floatstyle{ruled}
\@ifundefined{c@chapter}{\newfloat{codelisting}{h}{lop}}{\newfloat{codelisting}{h}{lop}[chapter]}
\floatname{codelisting}{Listing}
\newcommand*\listoflistings{\listof{codelisting}{List of Listings}}
\makeatother
# Performance study
# Reproducibility study
# Workflow study
# Container tests
- mpi bandwidth test
- Simple parallel ogs run
- Smaller generic cube liquid flow test
- 250 x 250 x 250 elements
- 96 partitions
- runtime < 10 minutes
from aiida.orm import QueryBuilder, CalcJobNode, Str
from aiida_shell import ShellJob
qb = QueryBuilder() # Instantiating instance. One instance -> one query
qb.append(ShellJob, tag='shelljob', filters={ # Specify the filters:
'attributes.process_state': 'finished', # the process is finished
})
qb.limit(30)
# qb.append(Str, with_incoming='shelljob')
for row in qb.iterall():
# print(row[0])
if 'stdout' in row[0].outputs:
print(row[0].outputs['stdout'].get_content())
# all_results_d = qb.dict() # Returns all results as a list of dictionaries
# print(all_results_d)
# all_results_l = qb.all()
# print(all_results_l)
\ No newline at end of file
aiida-core[rest]~=2.6 aiida-core[rest]~=2.6
#git+https://github.com/aiidateam/aiida-core.git@main#egg=aiida-core
aiida-shell>=0.8.0 aiida-shell>=0.8.0
pandas pandas
Jinja2 Jinja2
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment