Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dee3c87c66 | ||
|
|
3ba78c5f11 | ||
|
|
dac08095c4 | ||
|
|
79227e93d9 | ||
|
|
d41d8b564b | ||
|
|
59d5935567 | ||
|
|
075d11b948 | ||
|
|
1696d72a6f | ||
|
|
6de64dd5d0 | ||
|
|
b36d8a748d | ||
|
|
4661646b4f | ||
|
|
f563cbf9e4 | ||
|
|
6dbbf45043 | ||
|
|
9d7b0028a6 | ||
|
|
fb187dd3c5 | ||
|
|
54994d4587 | ||
|
|
fb08f0af77 | ||
|
|
7e3778757c | ||
|
|
6c8c93589b | ||
|
|
744512e4b5 | ||
|
|
ac97d3094a | ||
|
|
5c2dcddf95 | ||
|
|
a2ad49bd11 | ||
|
|
6863581568 | ||
|
|
409ec8b4c2 | ||
|
|
c7d4a50a85 | ||
|
|
926ed90da4 | ||
|
|
a0eaa76b27 | ||
|
|
7f747be334 | ||
|
|
d68f8b9cd9 | ||
|
|
0aa9986ada |
@@ -1 +1,4 @@
|
||||
*.swp
|
||||
outdir
|
||||
venv
|
||||
dump
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
$pdf_mode = 1;
|
||||
$pdf_previewer = 'start evince';
|
||||
|
||||
@default_files = ('tinytalk.tex');
|
||||
|
||||
# Make latexmk -c remove .bbl file
|
||||
$bibtex_use = 2;
|
||||
|
||||
# Make the glossaries package happy
|
||||
add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
|
||||
add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');
|
||||
|
||||
sub run_makeglossaries {
|
||||
my ($base_name, $path) = fileparse($_[0]);
|
||||
system("makeglossaries '$base_name'");
|
||||
}
|
||||
|
||||
push @generated_exts, 'glo', 'gls', 'glg';
|
||||
push @generated_exts, 'acn', 'acr', 'alg';
|
||||
$clean_ext .= ' %R.ist %R.xdy';
|
||||
@@ -1,4 +0,0 @@
|
||||
* Sprache: Englisch
|
||||
* Codierung: ISO8859-1
|
||||
* Makefile existiert
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
%% Encoding: ISO8859-1 %%
|
||||
|
||||
% Copyright 2007 by Till Tantau
|
||||
%
|
||||
% This file may be distributed and/or modified
|
||||
%
|
||||
% 1. under the LaTeX Project Public License and/or
|
||||
% 2. under the GNU Public License.
|
||||
%
|
||||
% See the file doc/licenses/LICENSE for more details.
|
||||
|
||||
%Modificated Seagull Color Theme
|
||||
|
||||
%EB: official KIT colors :-)
|
||||
\definecolor{kit-green100}{rgb}{0,.59,.51}
|
||||
\definecolor{kit-green70}{rgb}{.3,.71,.65}
|
||||
\definecolor{kit-green50}{rgb}{.50,.79,.75}
|
||||
\definecolor{kit-green30}{rgb}{.69,.87,.85}
|
||||
\definecolor{kit-green15}{rgb}{.85,.93,.93}
|
||||
|
||||
\definecolor{kit-blue100}{rgb}{.27,.39,.67}
|
||||
\definecolor{kit-blue70}{rgb}{.49,.57,.76}
|
||||
\definecolor{kit-blue50}{rgb}{.64,.69,.83}
|
||||
\definecolor{kit-blue30}{rgb}{.78,.82,.9}
|
||||
\definecolor{kit-blue15}{rgb}{.89,.91,.95}
|
||||
|
||||
|
||||
%\definecolor{kit-green100}{cmyk}{1,0,.6,0}
|
||||
%\definecolor{kit-green70}{cmyk}{.7,0,.42,0}
|
||||
%\definecolor{kit-green50}{cmyk}{.5,0,.3,0}
|
||||
%\definecolor{kit-green30}{cmyk}{.3,0,.18,0}
|
||||
%\definecolor{kit-green15}{cmyk}{.15,0,.09,0}
|
||||
|
||||
\mode<presentation>
|
||||
|
||||
\setbeamercolor*{normal text}{fg=black,bg=white}
|
||||
\setbeamercolor*{alerted text}{fg=red}
|
||||
\setbeamercolor*{example text}{fg=black}
|
||||
\setbeamercolor*{structure}{fg=black}
|
||||
|
||||
%\setbeamerfont{alerted text}{series=\bfseries}
|
||||
|
||||
\setbeamercolor*{palette primary}{fg=black,bg=black!15}
|
||||
\setbeamercolor*{palette secondary}{fg=black,bg=black!15}
|
||||
\setbeamercolor*{palette tertiary}{fg=black,bg=black!15}
|
||||
\setbeamercolor*{palette quaternary}{fg=black,bg=black!15}
|
||||
|
||||
\setbeamercolor{sidebar}{bg=black!20}
|
||||
|
||||
\setbeamercolor*{palette sidebar primary}{fg=black}
|
||||
\setbeamercolor*{palette sidebar secondary}{fg=black}
|
||||
\setbeamercolor*{palette sidebar tertiary}{fg=black}
|
||||
\setbeamercolor*{palette sidebar quaternary}{fg=black}
|
||||
|
||||
\setbeamercolor*{item projected}{fg=black,bg=kit-green100}
|
||||
|
||||
\setbeamercolor*{block title}{fg=white,bg=kit-green100}
|
||||
\setbeamercolor{block title alerted}{use=alerted text,fg=white,bg=alerted text.fg!75!black}
|
||||
\setbeamercolor*{block title example}{fg=white,bg=kit-blue100}
|
||||
|
||||
\setbeamercolor*{block body}{fg=black,bg=kit-green15}
|
||||
\setbeamercolor{block body alerted}{parent=normal text,use=block title alerted,bg=block title alerted.bg!10!bg}
|
||||
\setbeamercolor*{block body example}{fg=black,bg=kit-blue15}
|
||||
|
||||
\setbeamercolor*{separation line}{}
|
||||
\setbeamercolor*{fine separation line}{}
|
||||
|
||||
\setbeamercolor*{background canvas}{bg=black!15}
|
||||
\setbeamercolor*{background}{bg=black!15}
|
||||
|
||||
\pagecolor{black!15}
|
||||
\mode
|
||||
<all>
|
||||
@@ -1,225 +0,0 @@
|
||||
%% Encoding: ISO8859-1 %%
|
||||
|
||||
%% LaTeX-Beamer template for KIT design
|
||||
%% by Erik Burger, Christian Hammer
|
||||
%%
|
||||
%% modified by Christian Henrich for IKS
|
||||
%%
|
||||
%% version 1.2
|
||||
%%
|
||||
%% mostly compatible to KIT corporate design v1.2
|
||||
%% http://www.uni-karlsruhe.de/download/uka/Gestaltungsrichtlinien_komplett.pdf
|
||||
%%
|
||||
%% Problems, bugs and comments to
|
||||
%% burger@ipd.uka.de
|
||||
|
||||
\usepackage[latin1]{inputenc}
|
||||
\usepackage[english,ngerman]{babel}
|
||||
\usepackage{ifthen} %For choosing the language, see below
|
||||
\usepackage{hyperref}
|
||||
\usepackage[absolute,overlay]{textpos}
|
||||
\usepackage{semirounded}
|
||||
\usepackage[abs]{overpic}
|
||||
|
||||
\usepackage{times}
|
||||
|
||||
\setbeamercovered{transparent}
|
||||
|
||||
\useinnertheme{rounded}
|
||||
\usecolortheme{kit}
|
||||
|
||||
%save space in the footer
|
||||
\beamer@compresstrue
|
||||
|
||||
\newcommand{\titleimage}{IKS-beamer-motiv}
|
||||
|
||||
%CH: KIT-point
|
||||
\setbeamertemplate{itemize items}{
|
||||
\begin{pgfpicture}{0mm}{0mm}{1ex}{1ex}
|
||||
{\pgfsetcornersarced{\pgfpoint{.3ex}{.3ex}}
|
||||
\pgfpathmoveto{\pgfpoint{0cm}{1ex}}
|
||||
\pgfpathlineto{\pgfpoint{1ex}{1ex}}
|
||||
\pgfpathlineto{\pgfpoint{1ex}{0cm}}}
|
||||
{\pgfsetcornersarced{\pgfpoint{.3ex}{.3ex}}
|
||||
\pgfpathmoveto{\pgfpoint{1ex}{0cm}}
|
||||
\pgfpathlineto{\pgfpointorigin}
|
||||
\pgfpathlineto{\pgfpoint{0cm}{1ex}}}
|
||||
\color{kit-green100}
|
||||
\pgfusepath{fill}
|
||||
\end{pgfpicture}%
|
||||
}
|
||||
|
||||
\setbeamertemplate{title page}
|
||||
{
|
||||
\thispagestyle{empty}
|
||||
|
||||
%middle block with name of institute
|
||||
\begin{textblock*}{\paperwidth}(1mm,42.25mm)
|
||||
\begin{pgfpicture}{0mm}{0mm}{\paperwidth-2mm}{6mm}
|
||||
\color{black!50}
|
||||
\pgfpathrectangle{\pgfpoint{0mm}{0mm}}{\pgfpoint{\paperwidth-2mm}{6mm}}
|
||||
\pgfusepath{fill}
|
||||
\pgftext[at=\pgfpoint{8.5mm}{3mm},left,center]{\textcolor{white}{\tiny\textsc{\insertinstitute}}}
|
||||
\end{pgfpicture}
|
||||
\end{textblock*}
|
||||
|
||||
|
||||
%elements on title page
|
||||
|
||||
%KIT logo
|
||||
\begin{textblock*}{16mm}(4mm,4mm)
|
||||
\iflanguage{english}{
|
||||
\includegraphics[width=15mm]{logos/kitlogo_rgb}
|
||||
}{
|
||||
\includegraphics[width=15mm]{logos/kit_logo_de_4c_positiv}
|
||||
}
|
||||
\end{textblock*}
|
||||
|
||||
%title
|
||||
\begin{textblock*}{120mm}(9.5mm,16mm)
|
||||
\begin{beamercolorbox}[wd=118mm,ht=14mm,dp=3mm,left]{white}%
|
||||
\LARGE\textbf{\inserttitle}
|
||||
\end{beamercolorbox}
|
||||
\end{textblock*}
|
||||
|
||||
%subtitle
|
||||
\begin{textblock*}{120mm}(9.5mm,33mm)
|
||||
\tiny \insertsubtitle
|
||||
\end{textblock*}
|
||||
|
||||
%author
|
||||
\begin{textblock*}{120mm}(9.5mm,36mm)
|
||||
\tiny\insertauthor%~\textbar~\insertshortdate
|
||||
\end{textblock*}
|
||||
|
||||
%Universit�t Karlsruhe logo
|
||||
%\begin{textblock*}{23mm}(106mm,89.6mm)
|
||||
%\iflanguage{english}{
|
||||
%\includegraphics[width=20mm]{logos/uka_wortbild_en}
|
||||
%}{
|
||||
%\includegraphics[width=20mm]{logos/uka_wortbild_de}
|
||||
%}
|
||||
%\end{textblock*}
|
||||
|
||||
%Forschungszentrum Karlsruhe logo
|
||||
%\begin{textblock*}{21mm}(81mm,89.6mm)
|
||||
%\includegraphics[width=20mm]{logos/fzk_wortbild}
|
||||
%\end{textblock*}
|
||||
|
||||
%legal KIT text
|
||||
\begin{textblock*}{80mm}[0,1](4mm,94mm)
|
||||
\fontsize{4pt}{6pt}\selectfont
|
||||
\iflanguage{english}{
|
||||
KIT -- The Research University in the Helmholtz Association}
|
||||
{KIT -- Die Forschungsuniversit{\"a}t in der Helmholtz-Gemeinschaft}
|
||||
\end{textblock*}
|
||||
|
||||
\begin{textblock*}{20mm}[0,1](110mm,92mm)
|
||||
\fontsize{8pt}{8pt}\selectfont
|
||||
\bfseries
|
||||
\textcolor{black!75}{
|
||||
\href{http://www.kit.edu}{www.kit.edu}
|
||||
}
|
||||
\end{textblock*}
|
||||
|
||||
% title image
|
||||
|
||||
\begin{textblock*}{\paperwidth}(1mm,48.5mm)
|
||||
\begin{overpic}[width=158mm,height=40mm]{logos/\titleimage}
|
||||
\put(-6,-3){
|
||||
%mask curve for lower left corner of title image
|
||||
\begin{pgfpicture}{0mm}{0mm}{3mm}{3mm}
|
||||
\pgfpathqmoveto{0mm}{0mm}
|
||||
\pgfpathlineto{\pgfpoint{3mm}{0mm}}
|
||||
\pgfpathlineto{\pgfpoint{3mm}{1mm}}
|
||||
|
||||
{\pgfsetcornersarced{\pgfpoint{2mm}{2mm}}
|
||||
\pgfpathlineto{\pgfpoint{1mm}{1mm}}
|
||||
\pgfpathlineto{\pgfpoint{1mm}{3mm}}}
|
||||
|
||||
\pgfpathmoveto{\pgfpoint{1mm}{3mm}}
|
||||
\pgfpathlineto{\pgfpoint{0mm}{3mm}}
|
||||
\pgfpathlineto{\pgfpoint{0mm}{0mm}}
|
||||
\pgfpathclose
|
||||
|
||||
\color{black!15}
|
||||
\pgfusepath{fill}
|
||||
\end{pgfpicture}
|
||||
}
|
||||
\end{overpic}
|
||||
\end{textblock*}
|
||||
|
||||
}
|
||||
|
||||
%background for pages
|
||||
%CH: for plain frames
|
||||
\newlength{\kitbottom}
|
||||
\usebackgroundtemplate{
|
||||
\setlength{\kitbottom}{\ifbeamer@plainframe1mm\else9mm\fi}%
|
||||
\begin{pgfpicture}{0mm}{0mm}{\paperwidth}{\paperheight}
|
||||
|
||||
{\pgfsetcornersarced{\pgfpoint{2mm}{2mm}}
|
||||
\pgfpathmoveto{\pgfpoint{\paperwidth-1mm}{\kitbottom}}
|
||||
\pgfpathlineto{\pgfpoint{1mm}{\kitbottom}}
|
||||
\pgfpathlineto{\pgfpoint{1mm}{\paperheight-1mm}}}
|
||||
|
||||
{\pgfsetcornersarced{\pgfpoint{2mm}{2mm}}
|
||||
\pgfpathmoveto{\pgfpoint{1mm}{\paperheight-1mm}}
|
||||
\pgfpathlineto{\pgfpoint{\paperwidth-1mm}{\paperheight-1mm}}
|
||||
\pgfpathlineto{\pgfpoint{\paperwidth-1mm}{\kitbottom}}}
|
||||
|
||||
\color{white}
|
||||
\pgfusepath{fill}
|
||||
|
||||
\end{pgfpicture}%
|
||||
}
|
||||
|
||||
%frametitle
|
||||
\setbeamertemplate{frametitle}
|
||||
{
|
||||
\vspace{2mm} \hspace*{-4mm}
|
||||
\vbox{\hsize=9cm\bfseries\insertframetitle}
|
||||
|
||||
\begin{textblock*}{15mm}(140mm,4mm)
|
||||
\iflanguage{english}{
|
||||
\includegraphics[width=14mm]{logos/kitlogo_rgb}
|
||||
}{
|
||||
\includegraphics[width=14mm]{logos/kit_logo_de_4c_positiv}
|
||||
}
|
||||
\end{textblock*}
|
||||
|
||||
\begin{textblock*}{1.5mm}(1mm,1mm)
|
||||
\begin{pgfpicture}{0mm}{0mm}{1.5mm}{9mm}
|
||||
\color{kit-green100}
|
||||
\pgfpathrectangle{\pgfpoint{0mm}{0mm}}{\pgfpoint{1.5mm}{9mm}}
|
||||
\pgfusepath{fill}
|
||||
\end{pgfpicture}%
|
||||
\end{textblock*}
|
||||
|
||||
}
|
||||
|
||||
|
||||
\setbeamertemplate{headline}
|
||||
{
|
||||
}
|
||||
|
||||
%footer
|
||||
\setbeamertemplate{footline}
|
||||
{
|
||||
\vskip.4mm
|
||||
\begin{beamercolorbox}[ht=2.4mm, dp=3mm]{section in head/foot}
|
||||
%include mini frame navigation
|
||||
\insertnavigation{\paperwidth}
|
||||
\end{beamercolorbox}
|
||||
|
||||
\begin{beamercolorbox}[wd=0.7\textwidth,ht=2.2mm,dp=1.5mm,leftskip=1.3em,rightskip=.5em]{author in head/foot}%
|
||||
\usebeamerfont{author in head/foot}%
|
||||
\insertshortauthor\hspace{2.5pt}--\hspace{2.5pt}\insertshorttitle
|
||||
\end{beamercolorbox}%
|
||||
\vspace*{-4mm}\hspace*{0.7\textwidth}%
|
||||
\begin{beamercolorbox}[wd=0.3\textwidth,ht=2.2mm,dp=1.5mm,left,leftskip=.5em]{title in head/foot}%
|
||||
\usebeamerfont{title in head/foot}%
|
||||
\hfill\hspace{65pt}\insertframenumber{}/\inserttotalframenumber
|
||||
% vorher: \hfill\insertshortdate\hspace{30pt}\insertframenumber{}/\inserttotalframenumber
|
||||
\end{beamercolorbox}%
|
||||
}
|
||||
|
Before Width: | Height: | Size: 367 KiB |
|
Before Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 232 KiB |
|
Before Width: | Height: | Size: 241 KiB |
@@ -1,680 +0,0 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%%Creator: 0.46
|
||||
%%Pages: 1
|
||||
%%Orientation: Portrait
|
||||
%%BoundingBox: 182 370 378 462
|
||||
%%HiResBoundingBox: 182.1344 370.7806 377.8656 461.2194
|
||||
%%EndComments
|
||||
%%Page: 1 1
|
||||
0 842 translate
|
||||
0.8 -0.8 scale
|
||||
0 0 0 setrgbcolor
|
||||
[] 0 setdash
|
||||
1 setlinewidth
|
||||
0 setlinejoin
|
||||
0 setlinecap
|
||||
gsave [1 0 0 1 0 0] concat
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
380.56825 563.5558 moveto
|
||||
353.8495 563.5558 lineto
|
||||
322.09425 529.40105 lineto
|
||||
322.09425 509.89293 lineto
|
||||
352.88325 475.83793 lineto
|
||||
380.37575 475.83793 lineto
|
||||
344.94325 519.98605 lineto
|
||||
380.56825 563.5558 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
384.627 563.54218 moveto
|
||||
408.63575 563.54218 lineto
|
||||
408.63575 475.90543 lineto
|
||||
384.627 475.90543 lineto
|
||||
384.627 563.54218 lineto
|
||||
closepath
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
472.332 475.90168 moveto
|
||||
414.43825 475.90168 lineto
|
||||
414.43825 495.68418 lineto
|
||||
431.38075 495.68418 lineto
|
||||
431.38075 563.62418 lineto
|
||||
455.3895 563.62418 lineto
|
||||
455.3895 495.68418 lineto
|
||||
472.332 495.68418 lineto
|
||||
472.332 475.90168 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
316.35838 563.54755 moveto
|
||||
316.34475 563.51918 lineto
|
||||
316.34475 563.53143 lineto
|
||||
316.35838 563.54755 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
316.34475 563.53931 moveto
|
||||
316.34475 563.53143 lineto
|
||||
316.34175 563.52755 lineto
|
||||
316.34475 563.53931 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0.58823532 0.50980395 setrgbcolor
|
||||
newpath
|
||||
247.81925 507.97293 moveto
|
||||
243.22463 513.53418 239.309 519.67355 236.17825 526.25855 curveto
|
||||
316.34425 563.55543 lineto
|
||||
247.81925 507.97293 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0.58823532 0.50980395 setrgbcolor
|
||||
newpath
|
||||
316.33488 563.5173 moveto
|
||||
278.92863 484.03043 lineto
|
||||
272.32862 487.07168 266.16938 490.90043 260.57275 495.40543 curveto
|
||||
316.34275 563.54706 lineto
|
||||
316.33488 563.5173 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
316.34175 563.52755 moveto
|
||||
316.34475 563.53143 lineto
|
||||
316.34475 563.51918 lineto
|
||||
316.334 563.4968 lineto
|
||||
316.34175 563.52755 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
316.34175 563.52755 moveto
|
||||
316.34475 563.53143 lineto
|
||||
316.34475 563.51918 lineto
|
||||
316.334 563.4968 lineto
|
||||
316.34175 563.52755 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0.58823532 0.50980395 setrgbcolor
|
||||
newpath
|
||||
230.43937 542.08368 moveto
|
||||
228.67912 548.9523 227.73387 556.14718 227.69725 563.5573 curveto
|
||||
316.31687 563.5573 lineto
|
||||
230.43937 542.08368 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
316.34562 563.53931 moveto
|
||||
316.38675 475.98543 lineto
|
||||
316.1655 475.98418 315.94675 475.96918 315.72512 475.96918 curveto
|
||||
308.58787 475.96918 301.65762 476.83918 295.01362 478.44293 curveto
|
||||
316.33488 563.5173 lineto
|
||||
316.34562 563.53931 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
227.668 574.15893 moveto
|
||||
229.269 574.15893 lineto
|
||||
229.269 579.07193 lineto
|
||||
234.0395 574.15893 lineto
|
||||
236.16837 574.15893 lineto
|
||||
230.918 579.44205 lineto
|
||||
236.5845 585.33268 lineto
|
||||
234.2475 585.33268 lineto
|
||||
229.269 579.85718 lineto
|
||||
229.269 585.33268 lineto
|
||||
227.668 585.33268 lineto
|
||||
227.668 574.15893 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
242.82812 581.44255 moveto
|
||||
242.50725 581.44255 242.1875 581.40981 241.86712 581.40981 curveto
|
||||
241.05125 581.40981 239.03363 581.5393 239.03363 582.98068 curveto
|
||||
239.03363 583.84293 239.86575 584.3078 240.55462 584.3078 curveto
|
||||
242.043 584.3078 242.82812 583.37905 242.82812 582.1628 curveto
|
||||
242.82812 581.44255 lineto
|
||||
closepath
|
||||
238.36175 577.7453 moveto
|
||||
239.11375 577.29605 240.01075 576.97731 241.05125 576.97731 curveto
|
||||
243.38813 576.97731 244.333 578.12855 244.333 580.35368 curveto
|
||||
244.333 583.73168 lineto
|
||||
244.333 584.6603 244.36475 585.09293 244.3965 585.33268 curveto
|
||||
242.98725 585.33268 lineto
|
||||
242.98725 584.27555 lineto
|
||||
242.9555 584.27555 lineto
|
||||
242.604 584.77168 241.80325 585.52418 240.42625 585.52418 curveto
|
||||
238.666 585.52418 237.43312 584.75655 237.43312 582.98068 curveto
|
||||
237.43312 580.92993 239.67325 580.29018 241.227 580.29018 curveto
|
||||
241.81887 580.29018 242.23537 580.29018 242.82812 580.32193 curveto
|
||||
242.82812 578.9123 242.31488 578.19305 240.8105 578.19305 curveto
|
||||
239.96287 578.19305 239.05025 578.51293 238.44137 579.02455 curveto
|
||||
238.36175 577.7453 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
246.77 577.16768 moveto
|
||||
248.17862 577.16768 lineto
|
||||
248.17862 578.4338 lineto
|
||||
248.21037 578.4338 lineto
|
||||
248.61075 577.58518 249.47512 576.97731 250.33988 576.97731 curveto
|
||||
250.7885 576.97731 251.01262 577.02368 251.332 577.08855 curveto
|
||||
251.332 578.4338 lineto
|
||||
251.061 578.32143 250.75637 578.2883 250.5 578.2883 curveto
|
||||
249.15525 578.2883 248.27488 579.56905 248.27488 581.61793 curveto
|
||||
248.27488 585.33268 lineto
|
||||
246.77 585.33268 lineto
|
||||
246.77 577.16768 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
252.997 585.33268 moveto
|
||||
254.5014 585.33268 lineto
|
||||
254.5014 573.32633 lineto
|
||||
252.997 573.32633 lineto
|
||||
252.997 585.33268 lineto
|
||||
closepath
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
256.67087 583.73168 moveto
|
||||
257.26313 584.11543 258.11225 584.3078 258.54388 584.3078 curveto
|
||||
259.23138 584.3078 260.0805 584.01918 260.0805 583.1403 curveto
|
||||
260.0805 581.65155 256.543 581.77805 256.543 579.48943 curveto
|
||||
256.543 577.79268 257.80712 576.97731 259.42375 576.97731 curveto
|
||||
260.12887 576.97731 260.7045 577.1203 261.29787 577.29605 curveto
|
||||
261.16888 578.60805 lineto
|
||||
260.8335 578.40055 259.9365 578.19305 259.5845 578.19305 curveto
|
||||
258.81538 578.19305 258.144 578.51293 258.144 579.18568 curveto
|
||||
258.144 580.8493 261.68162 580.3708 261.68162 582.98068 curveto
|
||||
261.68162 584.7243 260.2885 585.52418 258.8325 585.52418 curveto
|
||||
258.0635 585.52418 257.27925 585.44555 256.59075 585.07543 curveto
|
||||
256.67087 583.73168 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
263.50637 577.16768 moveto
|
||||
264.9155 577.16768 lineto
|
||||
264.9155 578.4338 lineto
|
||||
264.94725 578.4338 lineto
|
||||
265.34713 577.58518 266.21087 576.97731 267.07662 576.97731 curveto
|
||||
267.52437 576.97731 267.749 577.02368 268.06838 577.08855 curveto
|
||||
268.06838 578.4338 lineto
|
||||
267.79688 578.32143 267.49262 578.2883 267.23625 578.2883 curveto
|
||||
265.892 578.2883 265.01125 579.56905 265.01125 581.61793 curveto
|
||||
265.01125 585.33268 lineto
|
||||
263.50637 585.33268 lineto
|
||||
263.50637 577.16768 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
276.85737 585.33268 moveto
|
||||
275.40137 585.33268 lineto
|
||||
275.40137 584.0368 lineto
|
||||
275.36863 584.0368 lineto
|
||||
274.91987 584.96405 273.832 585.52418 272.69525 585.52418 curveto
|
||||
270.5825 585.52418 269.63763 584.21305 269.63763 582.01918 curveto
|
||||
269.63763 577.16768 lineto
|
||||
271.142 577.16768 lineto
|
||||
271.142 581.3938 lineto
|
||||
271.142 583.29805 271.559 584.2268 272.87113 584.3078 curveto
|
||||
274.5845 584.3078 275.353 582.9318 275.353 580.94605 curveto
|
||||
275.353 577.16768 lineto
|
||||
276.85737 577.16768 lineto
|
||||
276.85737 585.33268 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
279.33488 573.3263 moveto
|
||||
280.83988 573.3263 lineto
|
||||
280.83988 578.33705 lineto
|
||||
280.872 578.33705 lineto
|
||||
281.416 577.4728 282.36075 576.97731 283.4975 576.97731 curveto
|
||||
285.61075 576.97731 286.55512 578.2883 286.55512 580.48218 curveto
|
||||
286.55512 585.33268 lineto
|
||||
285.05025 585.33268 lineto
|
||||
285.05025 581.10718 lineto
|
||||
285.05025 579.2028 284.63475 578.27368 283.32175 578.19305 curveto
|
||||
281.60838 578.19305 280.83988 579.56905 280.83988 581.55493 curveto
|
||||
280.83988 585.33268 lineto
|
||||
279.33488 585.33268 lineto
|
||||
279.33488 573.3263 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
294.35688 580.46505 moveto
|
||||
294.35688 579.21743 293.62113 578.19305 292.32425 578.19305 curveto
|
||||
290.8515 578.19305 290.24313 579.40893 290.13137 580.46505 curveto
|
||||
294.35688 580.46505 lineto
|
||||
closepath
|
||||
295.3335 584.9968 moveto
|
||||
294.75775 585.2053 294.101 585.52418 292.75675 585.52418 curveto
|
||||
289.85938 585.52418 288.53025 583.76293 288.53025 581.10718 curveto
|
||||
288.53025 578.68868 290.05075 576.97731 292.35587 576.97731 curveto
|
||||
295.07763 576.97731 295.9585 578.96118 295.9585 581.58805 curveto
|
||||
290.13137 581.58805 lineto
|
||||
290.13137 583.2043 291.396 584.3078 292.82025 584.3078 curveto
|
||||
293.8135 584.3078 294.96575 583.79555 295.3335 583.49193 curveto
|
||||
295.3335 584.9968 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
302.56887 585.33268 moveto
|
||||
304.16995 585.33268 lineto
|
||||
304.16995 574.15885 lineto
|
||||
302.56887 574.15885 lineto
|
||||
302.56887 585.33268 lineto
|
||||
closepath
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
306.811 577.16768 moveto
|
||||
308.268 577.16768 lineto
|
||||
308.268 578.46405 lineto
|
||||
308.30075 578.46405 lineto
|
||||
308.749 577.5363 309.83738 576.97731 310.97362 576.97731 curveto
|
||||
313.08637 576.97731 314.03175 578.2883 314.03175 580.48218 curveto
|
||||
314.03175 585.33268 lineto
|
||||
312.52637 585.33268 lineto
|
||||
312.52637 581.10718 lineto
|
||||
312.52637 579.2028 312.11075 578.27368 310.79787 578.19305 curveto
|
||||
309.0845 578.19305 308.31588 579.56905 308.31588 581.55493 curveto
|
||||
308.31588 585.33268 lineto
|
||||
306.811 585.33268 lineto
|
||||
306.811 577.16768 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
316.038 583.73168 moveto
|
||||
316.63037 584.11543 317.479 584.3078 317.91162 584.3078 curveto
|
||||
318.59963 584.3078 319.44775 584.01918 319.44775 583.1403 curveto
|
||||
319.44775 581.65155 315.91062 581.77805 315.91062 579.48943 curveto
|
||||
315.91062 577.79268 317.17475 576.97731 318.7915 576.97731 curveto
|
||||
319.4965 576.97731 320.07225 577.1203 320.6655 577.29605 curveto
|
||||
320.53662 578.60805 lineto
|
||||
320.20063 578.40055 319.30412 578.19305 318.95162 578.19305 curveto
|
||||
318.18313 578.19305 317.51075 578.51293 317.51075 579.18568 curveto
|
||||
317.51075 580.8493 321.04925 580.3708 321.04925 582.98068 curveto
|
||||
321.04925 584.7243 319.65575 585.52418 318.19925 585.52418 curveto
|
||||
317.43063 585.52418 316.647 585.44555 315.9585 585.07543 curveto
|
||||
316.038 583.73168 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
327.42825 578.38493 moveto
|
||||
325.267 578.38493 lineto
|
||||
325.267 582.8503 lineto
|
||||
325.267 583.79555 325.84325 584.3078 326.53175 584.3078 curveto
|
||||
326.99613 584.3078 327.3325 584.1643 327.55613 584.01918 curveto
|
||||
327.55613 585.30043 lineto
|
||||
327.22012 585.39668 326.75637 585.52418 326.27587 585.52418 curveto
|
||||
324.72213 585.52418 323.76175 584.7878 323.76175 583.15543 curveto
|
||||
323.76175 578.38493 lineto
|
||||
321.92138 578.38493 lineto
|
||||
321.92138 577.16768 lineto
|
||||
323.76175 577.16768 lineto
|
||||
323.76175 575.27943 lineto
|
||||
325.267 574.79855 lineto
|
||||
325.267 577.16768 lineto
|
||||
327.42825 577.16768 lineto
|
||||
327.42825 578.38493 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
329.269 577.16768 moveto
|
||||
330.77337 577.16768 lineto
|
||||
330.77337 585.33268 lineto
|
||||
329.269 585.33268 lineto
|
||||
329.269 577.16768 lineto
|
||||
closepath
|
||||
330.87012 575.34393 moveto
|
||||
329.17325 575.34393 lineto
|
||||
329.17325 573.64718 lineto
|
||||
330.87012 573.64718 lineto
|
||||
330.87012 575.34393 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
337.8095 578.38493 moveto
|
||||
335.64825 578.38493 lineto
|
||||
335.64825 582.8503 lineto
|
||||
335.64825 583.79555 336.2245 584.3078 336.91325 584.3078 curveto
|
||||
337.377 584.3078 337.71325 584.1643 337.937 584.01918 curveto
|
||||
337.937 585.30043 lineto
|
||||
337.60075 585.39668 337.137 585.52418 336.657 585.52418 curveto
|
||||
335.10325 585.52418 334.14325 584.7878 334.14325 583.15543 curveto
|
||||
334.14325 578.38493 lineto
|
||||
332.302 578.38493 lineto
|
||||
332.302 577.16768 lineto
|
||||
334.14325 577.16768 lineto
|
||||
334.14325 575.27943 lineto
|
||||
335.64825 574.79855 lineto
|
||||
335.64825 577.16768 lineto
|
||||
337.8095 577.16768 lineto
|
||||
337.8095 578.38493 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
346.71075 585.33268 moveto
|
||||
345.252 585.33268 lineto
|
||||
345.252 584.0368 lineto
|
||||
345.22075 584.0368 lineto
|
||||
344.772 584.96405 343.6845 585.52418 342.54825 585.52418 curveto
|
||||
340.4345 585.52418 339.4895 584.21305 339.4895 582.01918 curveto
|
||||
339.4895 577.16768 lineto
|
||||
340.9945 577.16768 lineto
|
||||
340.9945 581.3938 lineto
|
||||
340.9945 583.29805 341.41075 584.2268 342.72325 584.3078 curveto
|
||||
344.437 584.3078 345.20575 582.9318 345.20575 580.94605 curveto
|
||||
345.20575 577.16768 lineto
|
||||
346.71075 577.16768 lineto
|
||||
346.71075 585.33268 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
353.64825 578.38493 moveto
|
||||
351.48825 578.38493 lineto
|
||||
351.48825 582.8503 lineto
|
||||
351.48825 583.79555 352.0645 584.3078 352.75325 584.3078 curveto
|
||||
353.217 584.3078 353.55325 584.1643 353.777 584.01918 curveto
|
||||
353.777 585.30043 lineto
|
||||
353.44075 585.39668 352.977 585.52418 352.497 585.52418 curveto
|
||||
350.94325 585.52418 349.98325 584.7878 349.98325 583.15543 curveto
|
||||
349.98325 578.38493 lineto
|
||||
348.14325 578.38493 lineto
|
||||
348.14325 577.16768 lineto
|
||||
349.98325 577.16768 lineto
|
||||
349.98325 575.27943 lineto
|
||||
351.48825 574.79855 lineto
|
||||
351.48825 577.16768 lineto
|
||||
353.64825 577.16768 lineto
|
||||
353.64825 578.38493 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
360.64325 580.46505 moveto
|
||||
360.64325 579.21743 359.907 578.19305 358.612 578.19305 curveto
|
||||
357.13825 578.19305 356.5295 579.40893 356.417 580.46505 curveto
|
||||
360.64325 580.46505 lineto
|
||||
closepath
|
||||
361.62075 584.9968 moveto
|
||||
361.042 585.2053 360.3895 585.52418 359.042 585.52418 curveto
|
||||
356.1445 585.52418 354.81575 583.76293 354.81575 581.10718 curveto
|
||||
354.81575 578.68868 356.337 576.97731 358.64075 576.97731 curveto
|
||||
361.36325 576.97731 362.2445 578.96118 362.2445 581.58805 curveto
|
||||
356.417 581.58805 lineto
|
||||
356.417 583.2043 357.68075 584.3078 359.10575 584.3078 curveto
|
||||
360.097 584.3078 361.25325 583.79555 361.62075 583.49193 curveto
|
||||
361.62075 584.9968 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
372.32825 584.3078 moveto
|
||||
374.09075 584.3078 374.87325 582.70768 374.87325 581.25118 curveto
|
||||
374.87325 579.69843 373.9295 578.19305 372.32825 578.19305 curveto
|
||||
370.71325 578.19305 369.76825 579.69843 369.76825 581.25118 curveto
|
||||
369.76825 582.70768 370.55075 584.3078 372.32825 584.3078 curveto
|
||||
closepath
|
||||
372.32825 576.97731 moveto
|
||||
374.81075 576.97731 376.47575 578.76918 376.47575 581.25118 curveto
|
||||
376.47575 583.58905 374.77825 585.52418 372.32825 585.52418 curveto
|
||||
369.8645 585.52418 368.167 583.58905 368.167 581.25118 curveto
|
||||
368.167 578.76918 369.832 576.97731 372.32825 576.97731 curveto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
379.27825 578.38493 moveto
|
||||
377.357 578.38493 lineto
|
||||
377.357 577.16768 lineto
|
||||
379.27825 577.16768 lineto
|
||||
379.27825 576.41718 lineto
|
||||
379.27825 574.4323 379.7895 573.13355 382.01325 573.13355 curveto
|
||||
382.39825 573.13355 382.7195 573.1823 383.022 573.22968 curveto
|
||||
382.95825 574.44693 lineto
|
||||
382.78325 574.38355 382.49575 574.35181 382.2395 574.35181 curveto
|
||||
380.942 574.35181 380.78325 575.1828 380.78325 576.2878 curveto
|
||||
380.78325 577.16768 lineto
|
||||
382.94325 577.16768 lineto
|
||||
382.94325 578.38493 lineto
|
||||
380.78325 578.38493 lineto
|
||||
380.78325 585.33268 lineto
|
||||
379.27825 585.33268 lineto
|
||||
379.27825 578.38493 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
391.347 575.56755 moveto
|
||||
387.8745 575.56755 lineto
|
||||
387.8745 574.15893 lineto
|
||||
396.42075 574.15893 lineto
|
||||
396.42075 575.56755 lineto
|
||||
392.947 575.56755 lineto
|
||||
392.947 585.33268 lineto
|
||||
391.347 585.33268 lineto
|
||||
391.347 575.56755 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
401.9945 580.46505 moveto
|
||||
401.9945 579.21743 401.26075 578.19305 399.96325 578.19305 curveto
|
||||
398.4895 578.19305 397.8795 579.40893 397.7695 580.46505 curveto
|
||||
401.9945 580.46505 lineto
|
||||
closepath
|
||||
402.97075 584.9968 moveto
|
||||
402.39575 585.2053 401.74075 585.52418 400.39325 585.52418 curveto
|
||||
397.49575 585.52418 396.1695 583.76293 396.1695 581.10718 curveto
|
||||
396.1695 578.68868 397.68825 576.97731 399.9945 576.97731 curveto
|
||||
402.717 576.97731 403.5945 578.96118 403.5945 581.58805 curveto
|
||||
397.7695 581.58805 lineto
|
||||
397.7695 583.2043 399.03575 584.3078 400.457 584.3078 curveto
|
||||
401.45075 584.3078 402.60325 583.79555 402.97075 583.49193 curveto
|
||||
402.97075 584.9968 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
410.8645 578.54468 moveto
|
||||
410.28825 578.30543 409.712 578.19305 409.232 578.19305 curveto
|
||||
407.55075 578.19305 406.60575 579.69843 406.60575 581.25118 curveto
|
||||
406.60575 582.70768 407.39075 584.3078 409.327 584.3078 curveto
|
||||
409.8395 584.3078 410.48075 584.14818 410.94575 583.84293 curveto
|
||||
411.05825 585.18768 lineto
|
||||
410.4345 585.4768 409.712 585.52418 409.16825 585.52418 curveto
|
||||
406.70075 585.52418 405.0045 583.58905 405.0045 581.25118 curveto
|
||||
405.0045 578.76918 406.672 576.97731 409.16825 576.97731 curveto
|
||||
409.7745 576.97731 410.56075 577.1203 410.992 577.29605 curveto
|
||||
410.8645 578.54468 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
412.65575 573.3263 moveto
|
||||
414.162 573.3263 lineto
|
||||
414.162 578.33705 lineto
|
||||
414.19325 578.33705 lineto
|
||||
414.737 577.4728 415.682 576.97731 416.8195 576.97731 curveto
|
||||
418.932 576.97731 419.877 578.2883 419.877 580.48218 curveto
|
||||
419.877 585.33268 lineto
|
||||
418.37075 585.33268 lineto
|
||||
418.37075 581.10718 lineto
|
||||
418.37075 579.2028 417.95575 578.27368 416.64325 578.19305 curveto
|
||||
414.9295 578.19305 414.162 579.56905 414.162 581.55493 curveto
|
||||
414.162 585.33268 lineto
|
||||
412.65575 585.33268 lineto
|
||||
412.65575 573.3263 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
422.337 577.16768 moveto
|
||||
423.79325 577.16768 lineto
|
||||
423.79325 578.46405 lineto
|
||||
423.82575 578.46405 lineto
|
||||
424.27325 577.5363 425.362 576.97731 426.497 576.97731 curveto
|
||||
428.61075 576.97731 429.55575 578.2883 429.55575 580.48218 curveto
|
||||
429.55575 585.33268 lineto
|
||||
428.052 585.33268 lineto
|
||||
428.052 581.10718 lineto
|
||||
428.052 579.2028 427.63325 578.27368 426.322 578.19305 curveto
|
||||
424.60825 578.19305 423.8395 579.56905 423.8395 581.55493 curveto
|
||||
423.8395 585.33268 lineto
|
||||
422.337 585.33268 lineto
|
||||
422.337 577.16768 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
435.6645 584.3078 moveto
|
||||
437.42575 584.3078 438.2095 582.70768 438.2095 581.25118 curveto
|
||||
438.2095 579.69843 437.2645 578.19305 435.6645 578.19305 curveto
|
||||
434.04825 578.19305 433.10325 579.69843 433.10325 581.25118 curveto
|
||||
433.10325 582.70768 433.887 584.3078 435.6645 584.3078 curveto
|
||||
closepath
|
||||
435.6645 576.97731 moveto
|
||||
438.147 576.97731 439.81075 578.76918 439.81075 581.25118 curveto
|
||||
439.81075 583.58905 438.1145 585.52418 435.6645 585.52418 curveto
|
||||
433.1995 585.52418 431.50325 583.58905 431.50325 581.25118 curveto
|
||||
431.50325 578.76918 433.167 576.97731 435.6645 576.97731 curveto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
441.8995 585.33268 moveto
|
||||
443.40439 585.33268 lineto
|
||||
443.40439 573.32633 lineto
|
||||
441.8995 573.32633 lineto
|
||||
441.8995 585.33268 lineto
|
||||
closepath
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
449.65575 584.3078 moveto
|
||||
451.41575 584.3078 452.20075 582.70768 452.20075 581.25118 curveto
|
||||
452.20075 579.69843 451.25575 578.19305 449.65575 578.19305 curveto
|
||||
448.03825 578.19305 447.09325 579.69843 447.09325 581.25118 curveto
|
||||
447.09325 582.70768 447.87825 584.3078 449.65575 584.3078 curveto
|
||||
closepath
|
||||
449.65575 576.97731 moveto
|
||||
452.137 576.97731 453.802 578.76918 453.802 581.25118 curveto
|
||||
453.802 583.58905 452.10325 585.52418 449.65575 585.52418 curveto
|
||||
447.19075 585.52418 445.492 583.58905 445.492 581.25118 curveto
|
||||
445.492 578.76918 447.157 576.97731 449.65575 576.97731 curveto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
461.57325 581.34643 moveto
|
||||
461.57325 579.65055 460.787 578.19305 459.187 578.19305 curveto
|
||||
457.667 578.19305 456.912 579.84105 456.912 581.23405 curveto
|
||||
456.912 582.77018 457.7795 584.11543 459.187 584.11543 curveto
|
||||
460.5945 584.11543 461.57325 582.86693 461.57325 581.34643 curveto
|
||||
closepath
|
||||
463.07575 584.98168 moveto
|
||||
463.07575 587.46068 461.79575 588.88643 458.86575 588.88643 curveto
|
||||
458.00075 588.88643 457.25075 588.77418 455.93575 588.3268 curveto
|
||||
456.097 586.9328 lineto
|
||||
457.25075 587.46068 457.93825 587.66918 459.042 587.66918 curveto
|
||||
460.62825 587.66918 461.57325 586.5978 461.57325 584.8693 curveto
|
||||
461.57325 584.06655 lineto
|
||||
461.53825 584.06655 lineto
|
||||
460.8995 584.91768 459.842 585.33268 458.802 585.33268 curveto
|
||||
456.4645 585.33268 455.312 583.42943 455.312 581.31468 curveto
|
||||
455.312 579.21743 456.49825 576.97731 458.96325 576.97731 curveto
|
||||
460.402 576.97731 461.20325 577.50455 461.65075 578.38493 curveto
|
||||
461.68325 578.38493 lineto
|
||||
461.68325 577.16768 lineto
|
||||
463.07575 577.16768 lineto
|
||||
463.07575 584.98168 lineto
|
||||
fill
|
||||
grestore
|
||||
gsave
|
||||
0 0 0 setrgbcolor
|
||||
newpath
|
||||
465.06825 587.54168 moveto
|
||||
465.2595 587.60518 465.51575 587.66918 465.77325 587.66918 curveto
|
||||
467.11575 587.66918 467.5645 585.81418 467.5645 585.65305 curveto
|
||||
467.5645 585.4768 467.37325 585.0603 467.27575 584.7878 curveto
|
||||
464.507 577.16768 lineto
|
||||
466.157 577.16768 lineto
|
||||
468.34825 583.92405 lineto
|
||||
468.382 583.92405 lineto
|
||||
470.622 577.16768 lineto
|
||||
472.142 577.16768 lineto
|
||||
469.1345 585.50893 lineto
|
||||
468.57325 587.0768 467.98075 588.88643 465.99575 588.88643 curveto
|
||||
465.51575 588.88643 465.2445 588.82293 464.97075 588.77418 curveto
|
||||
465.06825 587.54168 lineto
|
||||
fill
|
||||
grestore
|
||||
grestore
|
||||
showpage
|
||||
%%EOF
|
||||
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 86 KiB |
@@ -1,19 +0,0 @@
|
||||
@article{dh76,
|
||||
title={{New Directions in Cryptography}},
|
||||
author={Whitfield Diffie and Martin Hellman},
|
||||
journal={IEEE Transactions on Information Theory},
|
||||
volume={22},
|
||||
number={6},
|
||||
pages={644--654},
|
||||
year={1976}
|
||||
}
|
||||
|
||||
@book{kl07,
|
||||
author = {Katz, Jonathan and Lindell, Yehuda},
|
||||
title = {Introduction to Modern Cryptography (Chapman \& Hall/Crc Cryptography and Network Security Series)},
|
||||
year = {2007},
|
||||
isbn = {1584885513},
|
||||
publisher = {Chapman \& Hall/CRC},
|
||||
}
|
||||
|
||||
|
||||
@@ -1,206 +0,0 @@
|
||||
%% Encoding: ISO8859-1 %%
|
||||
|
||||
\RequirePackage{keyval}
|
||||
\renewcommand\beamerboxesrounded[2][]{%
|
||||
\global\let\beamer@firstlineitemizeunskip=\relax%
|
||||
\vbox\bgroup%
|
||||
\setkeys{beamerboxes}{upper=block title,lower=block body,width=\textwidth,shadow=false}%
|
||||
\setkeys{beamerboxes}{#1}%
|
||||
{%
|
||||
\usebeamercolor{\bmb@lower}%
|
||||
\globalcolorstrue%
|
||||
\colorlet{lower.bg}{bg}%
|
||||
}%
|
||||
{%
|
||||
\usebeamercolor{\bmb@upper}%
|
||||
\globalcolorstrue%
|
||||
\colorlet{upper.bg}{bg}%
|
||||
}%
|
||||
%
|
||||
% Typeset head
|
||||
%
|
||||
\vskip4bp
|
||||
\setbox\bmb@box=\hbox{%
|
||||
\begin{minipage}[b]{\bmb@width}%
|
||||
\usebeamercolor[fg]{\bmb@upper}%
|
||||
#2%
|
||||
\end{minipage}}%
|
||||
\ifdim\wd\bmb@box=0pt%
|
||||
\setbox\bmb@box=\hbox{}%
|
||||
\ht\bmb@box=1.5pt%
|
||||
\bmb@prevheight=-4.5pt%
|
||||
\else%
|
||||
\wd\bmb@box=\bmb@width%
|
||||
\bmb@temp=\dp\bmb@box%
|
||||
\ifdim\bmb@temp<1.5pt%
|
||||
\bmb@temp=1.5pt%
|
||||
\fi%
|
||||
\setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}%
|
||||
\dp\bmb@box=0pt%
|
||||
\bmb@prevheight=\ht\bmb@box%
|
||||
\fi%
|
||||
\bmb@temp=\bmb@width%
|
||||
\bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp%
|
||||
\bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp%
|
||||
\hbox{%
|
||||
\begin{pgfpicture}{0bp}{+-\ht\bmb@box}{0bp}{+-\ht\bmb@box}
|
||||
\ifdim\wd\bmb@box=0pt%
|
||||
\color{lower.bg}%
|
||||
\else%
|
||||
\color{upper.bg}%
|
||||
\fi%
|
||||
\pgfpathqmoveto{-4bp}{-1bp}
|
||||
% Adaption for "KIT-Design"
|
||||
\pgfpathlineto{\pgfpoint{-4bp}{3bp}}
|
||||
%\pgfpathqcurveto{-4bp}{1.2bp}{-2.2bp}{3bp}{0bp}{3bp}
|
||||
\pgfpathlineto{\pgfpoint{\bmb@temp}{3bp}}
|
||||
\pgfpathcurveto%
|
||||
{\pgfpoint{\bmb@dima}{3bp}}%
|
||||
{\pgfpoint{\bmb@dimb}{1.2bp}}%
|
||||
{\pgfpoint{\bmb@dimb}{-1bp}}%
|
||||
\bmb@dima=-\ht\bmb@box%
|
||||
\advance\bmb@dima by-2pt%
|
||||
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
||||
\pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}}
|
||||
\pgfusepath{fill}
|
||||
\end{pgfpicture}%
|
||||
\copy\bmb@box%
|
||||
}%
|
||||
\nointerlineskip%
|
||||
\vskip-1pt%
|
||||
\ifdim\wd\bmb@box=0pt%
|
||||
\else%
|
||||
\hbox{%
|
||||
\begin{pgfpicture}{0pt}{0pt}{\bmb@width}{6pt}
|
||||
\bmb@dima=\bmb@width%
|
||||
\advance\bmb@dima by8bp%
|
||||
\pgfpathrectangle{\pgfpoint{-4bp}{-1bp}}{\pgfpoint{\bmb@dima}{8bp}}
|
||||
\pgfusepath{clip}
|
||||
{\pgftransformshift{\pgfpoint{-4bp}{0bp}}\pgftext[left,base]{\pgfuseshading{bmb@transition}}}%
|
||||
\end{pgfpicture}%
|
||||
}%
|
||||
\nointerlineskip%
|
||||
\vskip-0.5pt%
|
||||
\fi%
|
||||
\ifbmb@shadow%
|
||||
\setbox\bmb@boxshadow=\hbox{\pgfuseshading{bmb@shadow}}%
|
||||
\setbox\bmb@boxshadowball=\hbox{\pgfuseshading{bmb@shadowball}}%
|
||||
\setbox\bmb@boxshadowballlarge=\hbox{\pgfuseshading{bmb@shadowballlarge}}%
|
||||
\fi%
|
||||
\setbox\bmb@colorbox=\hbox{{\pgfpicturetrue\pgfsetcolor{lower.bg}}}%
|
||||
\setbox\bmb@box=\hbox\bgroup\begin{minipage}[b]{\bmb@width}%
|
||||
\vskip2pt%
|
||||
\usebeamercolor[fg]{\bmb@lower}%
|
||||
\colorlet{beamerstructure}{upper.bg}%
|
||||
\colorlet{structure}{upper.bg}%
|
||||
%\color{.}%
|
||||
}
|
||||
|
||||
\def\endbeamerboxesrounded{%
|
||||
\end{minipage}\egroup%
|
||||
\wd\bmb@box=\bmb@width%
|
||||
\bmb@temp=\dp\bmb@box%
|
||||
\advance\bmb@temp by.5pt%
|
||||
\setbox\bmb@box=\hbox{\raise\bmb@temp\hbox{\box\bmb@box}}%
|
||||
\dp\bmb@box=0pt%
|
||||
\bmb@temp=\wd\bmb@box%
|
||||
\bmb@dima=\bmb@temp\advance\bmb@dima by2.2bp%
|
||||
\bmb@dimb=\bmb@temp\advance\bmb@dimb by4bp%
|
||||
\hbox{%
|
||||
\begin{pgfpicture}{0bp}{0bp}{0bp}{0bp}
|
||||
\ifbmb@shadow%
|
||||
{\pgftransformshift{\pgfpoint{4bp}{-3bp}}\pgftext{\copy\bmb@boxshadowball}}
|
||||
\begin{pgfscope}
|
||||
{%
|
||||
\advance\bmb@temp by-1bp%
|
||||
\pgfpathrectangle{\pgfpoint{\bmb@temp}{-7bp}}{\pgfpoint{9bp}{9bp}}%
|
||||
\pgfusepath{clip}
|
||||
}%
|
||||
{\pgftransformshift{\pgfpoint{\bmb@temp}{1bp}}\pgftext{\box\bmb@boxshadowballlarge}}
|
||||
\end{pgfscope}
|
||||
\begin{pgfscope}
|
||||
\advance\bmb@temp by-4bp%
|
||||
\pgfpathrectangle{\pgfpoint{4bp}{-7bp}}{\pgfpoint{\bmb@temp}{5bp}}
|
||||
\pgfusepath{clip}
|
||||
{\pgftransformshift{\pgfpoint{4bp}{-7bp}}\pgftext[left,base]{\copy\bmb@boxshadow}}%
|
||||
\end{pgfscope}
|
||||
\begin{pgfscope}
|
||||
\advance\bmb@temp by 4bp%
|
||||
\bmb@dima=\ht\bmb@box%
|
||||
\advance\bmb@dima by\bmb@prevheight%
|
||||
\advance\bmb@dima by 4bp%
|
||||
\pgfpathrectangle{\pgfpoint{\bmb@temp}{1bp}}{\pgfpoint{4bp}{\bmb@dima}}
|
||||
\pgfusepath{clip}
|
||||
\advance\bmb@dima by-4bp%
|
||||
{\pgftransformshift{\pgfpoint{\bmb@temp}{\bmb@dima}}\pgftext{\box\bmb@boxshadowball}}
|
||||
\advance\bmb@dima by-1bp%
|
||||
\pgfpathrectangle{\pgfpoint{\bmb@temp}{1bp}}{\pgfpoint{4bp}{\bmb@dima}}
|
||||
\pgfusepath{clip}
|
||||
\advance\bmb@temp by4bp%
|
||||
{\pgftransformshift{\pgfpoint{\bmb@temp}{-3bp}}%
|
||||
\pgftransformrotate{90}%
|
||||
\pgftext[left,base]{\box\bmb@boxshadow}}%
|
||||
\end{pgfscope}
|
||||
\fi%
|
||||
\unhbox\bmb@colorbox%
|
||||
\pgfpathqmoveto{-4bp}{1bp}
|
||||
\pgfpathqcurveto{-4bp}{-1.2bp}{-2.2bp}{-3bp}{0bp}{-3bp}
|
||||
%KIT-Design
|
||||
\pgfpathlineto{\pgfpoint{\the\bmb@dimb}{-3bp}}
|
||||
%\pgfpathcurveto%
|
||||
%{\pgfpoint{\the\bmb@dima}{-3bp}}%
|
||||
%{\pgfpoint{\the\bmb@dimb}{-1.2bp}}%
|
||||
%{\pgfpoint{\the\bmb@dimb}{1bp}}%
|
||||
{
|
||||
\bmb@dima=\ht\bmb@box%
|
||||
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
||||
\pgfpathlineto{\pgfpoint{-4bp}{\bmb@dima}}
|
||||
\pgfusepath{fill}
|
||||
}
|
||||
\ifbmb@shadow%
|
||||
{
|
||||
\color{black!50!bg}
|
||||
\pgfsetlinewidth{0pt}
|
||||
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{-.5bp}}
|
||||
\bmb@dima=\ht\bmb@box%
|
||||
\advance\bmb@dima by\bmb@prevheight%
|
||||
\advance\bmb@dima by 1bp%
|
||||
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
||||
\pgfusepath{stroke}
|
||||
\bmb@temp=\bmb@dima
|
||||
\advance\bmb@dima by 1bp%
|
||||
\color{black!31!bg}
|
||||
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}}
|
||||
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
||||
\pgfusepath{stroke}
|
||||
\advance\bmb@dima by 1bp%
|
||||
\advance\bmb@temp by 1bp%
|
||||
\color{black!19!bg}
|
||||
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}}
|
||||
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
||||
\pgfusepath{stroke}
|
||||
\advance\bmb@dima by 1bp%
|
||||
\advance\bmb@temp by 1bp%
|
||||
\color{black!6!bg}
|
||||
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}}
|
||||
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
||||
\pgfusepath{stroke}
|
||||
\advance\bmb@dima by 1.5bp%
|
||||
\advance\bmb@temp by 1bp%
|
||||
\color{bg}
|
||||
\pgfpathmoveto{\pgfpoint{\bmb@dimb}{\bmb@temp}}
|
||||
\pgfpathlineto{\pgfpoint{\bmb@dimb}{\bmb@dima}}
|
||||
\pgfusepath{stroke}
|
||||
}
|
||||
\fi
|
||||
\end{pgfpicture}%
|
||||
\box\bmb@box%
|
||||
}%
|
||||
\ifbmb@shadow%
|
||||
\vskip4bp minus 2bp%
|
||||
\else%
|
||||
\vskip2bp%
|
||||
\fi%
|
||||
\egroup% of \vbox\bgroup
|
||||
}
|
||||
|
||||
@@ -1,158 +0,0 @@
|
||||
\section{Intro}
|
||||
|
||||
\begin{frame}{NAStJA: An MPI Stencil Code Solver}
|
||||
\begin{figure}
|
||||
\includegraphics[width=0.8\textwidth]{nastja.png}
|
||||
\end{figure}
|
||||
|
||||
\begin{itemize}
|
||||
\item CiS uses NAStJA under the hood
|
||||
\item NAStJA is a massively parallel stencil code solver \\
|
||||
$\implies$ CiS extensions should be stencils
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{ECM Viscoelasticity:\\A Factor in Cell Behavior}
|
||||
\begin{figure}
|
||||
\includegraphics[width=0.48\textwidth]{ecm-cells.png}
|
||||
\end{figure}
|
||||
|
||||
\begin{itemize}
|
||||
\item Collagen networks in the ECM mechanically restrict cells
|
||||
\item Collagen networks are \emph{viscoelastic}
|
||||
\item ECM viscoelasticity influences cell behavior
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\section{ECM Model}
|
||||
|
||||
\begin{frame}{Modeling ECM Mechanics in CiS}
|
||||
How can we model ECM mechanics in CiS?
|
||||
|
||||
\vfill{}
|
||||
|
||||
Two main requirements:
|
||||
|
||||
\begin{itemize}
|
||||
\item Model exhibits viscoelastic properties
|
||||
\item Model can be implemented as a stencil in NAStJA
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{ECM Models in Literature}
|
||||
\begin{figure}
|
||||
\includegraphics[width=0.64\textwidth]{models.png}
|
||||
\end{figure}
|
||||
|
||||
\begin{itemize}
|
||||
\item A host of different ECM models exist
|
||||
\item Various foci, e.g. mechanics, growth factors
|
||||
\item Various approaches, e.g. FEM, Molecular Dynamics
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{My Approach}
|
||||
Two main requirements:
|
||||
|
||||
\begin{itemize}
|
||||
\item Model exhibits viscoelastic properties
|
||||
\item Model can be implemented as a stencil in NAStJA
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\vfill
|
||||
|
||||
\section{Methods}
|
||||
|
||||
\begin{frame}{Lattice Boltzmann Method}
|
||||
\begin{figure}
|
||||
\includegraphics[width=0.8\textwidth]{lbm.png}
|
||||
\end{figure}
|
||||
|
||||
\begin{itemize}
|
||||
\item Discretized particle velocities per lattice site
|
||||
\item Update Step: Streaming + Collision
|
||||
\item Usually used for hydrodynamics
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Elastic Lattice Model}
|
||||
\begin{figure}
|
||||
\includegraphics[width=0.32\textwidth]{elm.png}
|
||||
\end{figure}
|
||||
|
||||
\begin{itemize}
|
||||
\item A square lattice based discrete particle method
|
||||
\item Each lattice site represents a particle
|
||||
\item Particles are connected to neighbors by springs
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\section{Implementation}
|
||||
|
||||
\begin{frame}{Implementation}
|
||||
\begin{itemize}
|
||||
\item Starting point: NAStJA + CiS
|
||||
\item Benchmark different implementations against each other
|
||||
\begin{itemize}
|
||||
\item CPU
|
||||
\item Vectorized
|
||||
\item GPU
|
||||
\end{itemize}
|
||||
\item Optimize for
|
||||
\begin{itemize}
|
||||
\item Scaling behavior
|
||||
\item Wall clock time
|
||||
\item etc.
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{comment}
|
||||
\section{Intro}
|
||||
\subsection{Subsection 1.1}
|
||||
\frame{
|
||||
\frametitle{Example slide A}
|
||||
\begin{itemize}
|
||||
\item PCM, Citation: \cite{dh76,kl07} %\language
|
||||
\pause
|
||||
\item Bullet point 2
|
||||
\item \dots
|
||||
\end{itemize}
|
||||
}
|
||||
\subsection{Subsection 1.2}
|
||||
\frame{
|
||||
\frametitle{Example slide B}
|
||||
\begin{block}{Block 1}
|
||||
\begin{itemize}
|
||||
\item Test: ÄÖÜäöüß
|
||||
\pause
|
||||
\item Bullet point 2
|
||||
\item \dots
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
}
|
||||
\section{Section 2}
|
||||
\frame{
|
||||
\frametitle{Example slide C}
|
||||
\begin{exampleblock}{Example 1}
|
||||
\begin{itemize}
|
||||
\item Bullet point 1
|
||||
\pause
|
||||
\item Bullet point 2
|
||||
\item \dots
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
}
|
||||
\frame{
|
||||
\frametitle{Example slide D}
|
||||
\begin{alertblock}{Alert 1}
|
||||
\begin{itemize}
|
||||
\item Bullet point 1
|
||||
\pause
|
||||
\item Bullet point 2
|
||||
\item \dots
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
}
|
||||
\end{comment}
|
||||
@@ -1,2 +1,10 @@
|
||||
venv
|
||||
.ipynb_checkpoints
|
||||
logs
|
||||
__pycache__
|
||||
generated/*
|
||||
batch/measurements/strong/*
|
||||
configs/measurements/strong/*
|
||||
*.dat
|
||||
*.db
|
||||
eval/generated/*
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.13"
|
||||
"version": "3.10.11"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
VARIED_FILLINGS_IS := $(shell seq -w 0 10 100)
|
||||
VARIED_FILLINGS_JOBS := $(addprefix generated/varied-fillings-, $(addsuffix .json, ${VARIED_FILLINGS_IS}))
|
||||
|
||||
all: varied-fillings strong
|
||||
|
||||
varied-fillings: ${VARIED_FILLINGS_JOBS}
|
||||
|
||||
strong:
|
||||
python scripts/gen/strong.py
|
||||
|
||||
clean-strong:
|
||||
rm -f batch/measurements/strong/*
|
||||
rm -f configs/measurements/strong/spheroid*.json
|
||||
|
||||
clean:
|
||||
rm -f generated/*
|
||||
|
||||
clean-logs:
|
||||
rm -f logs/*
|
||||
|
||||
clean-outs:
|
||||
rm -rf /p/scratch/cellsinsilico/paul/nastja-out/*
|
||||
|
||||
generated/varied-fillings-%.json: scripts/gen/varied_fillings.py templates/varied-fillings.json
|
||||
python scripts/gen/varied_fillings.py $* > $@
|
||||
|
||||
.PHONY: varied-fillings strong clean clean-logs clean-outs
|
||||
@@ -10,3 +10,17 @@ jupyter-lab
|
||||
```
|
||||
|
||||
The `shell.nix` contains a workaround for NixOS and is not necessary for normal use.
|
||||
|
||||
## Building NAStJA for Experiments
|
||||
|
||||
Build it either with or without CUDA support.
|
||||
When NAStJA is built with CUDA support it will automatically switch to the GPU implementation of the dynamic ECM.
|
||||
I use the `mold` linker because it makes the code-build-test-loop slightly shorter.
|
||||
This shouldn't have any impact on the performance of the produced binary.
|
||||
If you would like to shorten the linking time even further you can add `-DNASTJA_ENABLE_IPO=OFF` to turn of Link Time Optimization (LTO).
|
||||
However, it is likely that will have an impact on performance.
|
||||
|
||||
```
|
||||
cmake .. -DCMAKE_CXX_FLAGS="-fuse-ld=mold"
|
||||
cmake .. -DCMAKE_CXX_FLAGS="-fuse-ld=mold" -DNASTJA_ENABLE_CUDA=ON
|
||||
```
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=build-cuda
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
#SBATCH --partition=develbooster
|
||||
#SBATCH --nodes=1
|
||||
#SBATCH --ntasks=1
|
||||
#SBATCH --cpus-per-task=48
|
||||
#SBATCH --time=01:00:00
|
||||
#SBATCH --output=logs/build-cuda-%j.log
|
||||
#SBATCH --error=logs/build-cuda-%j.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
cd "${SOURCE_DIR}/nastja/build-cuda"
|
||||
|
||||
srun make -j48
|
||||
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=build-nocuda
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
#SBATCH --partition=develbooster
|
||||
#SBATCH --nodes=1
|
||||
#SBATCH --ntasks=1
|
||||
#SBATCH --cpus-per-task=48
|
||||
#SBATCH --time=01:00:00
|
||||
#SBATCH --output=logs/build-nocuda-%j.log
|
||||
#SBATCH --error=logs/build-nocuda-%j.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
cd "${SOURCE_DIR}/nastja/build-nocuda"
|
||||
|
||||
srun make -j48
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=cuda
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
# 48 Cores, 512GiB RAM, 4x NVIDIA A100 GPUs
|
||||
#SBATCH --partition=booster
|
||||
# Right now we're using a single node
|
||||
#SBATCH --nodes=1
|
||||
# Number of MPI processes
|
||||
# TODO: Change the config and set to this the maximum of 48
|
||||
#SBATCH --ntasks=16
|
||||
#SBATCH --cpus-per-task=1
|
||||
# For now, we are using a single GPU only
|
||||
#SBATCH --gres=gpu:1
|
||||
#SBATCH --time=01:00:00
|
||||
#SBATCH --output=logs/cuda-%j.log
|
||||
#SBATCH --error=logs/cuda-%j.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR=/p/scratch/cellsinsilico/paul/nastja-out/cuda
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
|
||||
# This is actually the default behavior for a single task anyways
|
||||
# However I'm leaving this here for documentation reasons
|
||||
export CUDA_VISIBLE_DEVICES=0
|
||||
|
||||
srun --unbuffered "${SOURCE_DIR}/nastja/build-cuda/nastja" \
|
||||
-c "${SOURCE_DIR}/ma/experiments/configs/genesis.json" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=cuda-singleblock
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
# 48 Cores, 512GiB RAM, 4x NVIDIA A100 GPUs
|
||||
#SBATCH --partition=booster
|
||||
# Right now we're using a single node
|
||||
#SBATCH --nodes=1
|
||||
# Number of MPI processes
|
||||
#SBATCH --ntasks=1
|
||||
# For now, we are using a single GPU only
|
||||
#SBATCH --gres=gpu:1
|
||||
#SBATCH --time=01:00:00
|
||||
#SBATCH --output=logs/cuda-singleblock-%j.log
|
||||
#SBATCH --error=logs/cuda-singleblock-%j.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR=/p/scratch/cellsinsilico/paul/nastja-out/cuda-singleblock
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
|
||||
# This is actually the default behavior for a single task anyways
|
||||
# However I'm leaving this here for documentation reasons
|
||||
export CUDA_VISIBLE_DEVICES=0
|
||||
|
||||
srun --unbuffered "${SOURCE_DIR}/nastja/build-cuda/nastja" \
|
||||
-c "${SOURCE_DIR}/ma/experiments/configs/genesis-singleblock.json" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=ecm-debug
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
# 48 Cores, 512GiB RAM, 4x NVIDIA A100 GPUs
|
||||
#SBATCH --partition=booster
|
||||
#SBATCH --nodes=1
|
||||
#SBATCH --ntasks=1
|
||||
#SBATCH --cpus-per-task=1
|
||||
# For now, we are using a single GPU only
|
||||
#SBATCH --gres=gpu:1
|
||||
#SBATCH --time=00:10:00
|
||||
#SBATCH --output=logs/ecm-debug-%j.log
|
||||
#SBATCH --error=logs/ecm-debug-%j.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR=/p/scratch/cellsinsilico/paul/nastja-out/ecm-debug
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
|
||||
# This is actually the default behavior for a single task anyways
|
||||
# However I'm leaving this here for documentation reasons
|
||||
export CUDA_VISIBLE_DEVICES=0
|
||||
|
||||
srun "${SOURCE_DIR}/nastja/build-cuda/nastja" \
|
||||
-c "${SOURCE_DIR}/ma/experiments/configs/ecm-debug.json" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=julian-animation
|
||||
#SBATCH --account=hkf6
|
||||
#SBATCH --partition=booster
|
||||
#SBATCH --nodes=8
|
||||
#SBATCH --ntasks=32
|
||||
# Counted per node
|
||||
#SBATCH --gres=gpu:4
|
||||
#SBATCH --time=03:30:00
|
||||
#SBATCH --output=logs/%x-%A_%a.log
|
||||
#SBATCH --error=logs/%x-%A_%a.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR="/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}"
|
||||
|
||||
echo "outdir is ${OUTPUT_DIR}"
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
|
||||
srun --unbuffered "${SOURCE_DIR}/nastja/build-cuda/nastja" \
|
||||
-c "${SOURCE_DIR}/ma/experiments/configs/${SLURM_JOB_NAME}.json" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
@@ -0,0 +1 @@
|
||||
Generated by scripts/gen/strong.py
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=nocuda
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
# 48 Cores, 512GiB RAM, 4x NVIDIA A100 GPUs
|
||||
#SBATCH --partition=booster
|
||||
# Right now we're using a single node
|
||||
#SBATCH --nodes=1
|
||||
# Number of MPI processes
|
||||
# TODO: Change the config and set to this the maximum of 48
|
||||
#SBATCH --ntasks=16
|
||||
#SBATCH --cpus-per-task=1
|
||||
#SBATCH --time=01:00:00
|
||||
#SBATCH --output=logs/nocuda-%j.log
|
||||
#SBATCH --error=logs/nocuda-%j.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR=/p/scratch/cellsinsilico/paul/nastja-out/nocuda
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
|
||||
srun --unbuffered "${SOURCE_DIR}/nastja/build-nocuda/nastja" \
|
||||
-c "${SOURCE_DIR}/ma/experiments/configs/genesis.json" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=nocuda-noecm
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
# 48 Cores, 512GiB RAM, 4x NVIDIA A100 GPUs
|
||||
#SBATCH --partition=booster
|
||||
# Right now we're using a single node
|
||||
#SBATCH --nodes=1
|
||||
# Number of MPI processes
|
||||
# TODO: Change the config and set to this the maximum of 48
|
||||
#SBATCH --ntasks-per-node=16
|
||||
#SBATCH --cpus-per-task=1
|
||||
#SBATCH --time=01:00:00
|
||||
#SBATCH --output=logs/nocuda-noecm-%j.log
|
||||
#SBATCH --error=logs/nocuda-noecm-%j.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR=/p/scratch/cellsinsilico/paul/nastja-out/nocuda-noecm
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
|
||||
srun "${SOURCE_DIR}/nastja/build-nocuda/nastja" \
|
||||
-c "${SOURCE_DIR}/ma/experiments/configs/genesis-noecm.json" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=nocuda-singleblock
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
# 48 Cores, 512GiB RAM, 4x NVIDIA A100 GPUs
|
||||
#SBATCH --partition=booster
|
||||
# Right now we're using a single node
|
||||
#SBATCH --nodes=1
|
||||
# Number of MPI processes
|
||||
#SBATCH --ntasks=1
|
||||
#SBATCH --time=06:00:00
|
||||
#SBATCH --output=logs/nocuda-singleblock-%j.log
|
||||
#SBATCH --error=logs/nocuda-singleblock-%j.log
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR=/p/scratch/cellsinsilico/paul/nastja-out/nocuda-singleblock
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
|
||||
srun --unbuffered "${SOURCE_DIR}/nastja/build-nocuda/nastja" \
|
||||
-c "${SOURCE_DIR}/ma/experiments/configs/genesis-singleblock.json" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=varied-fillings-nocuda
|
||||
# Forschergruppe Schug
|
||||
#SBATCH --account=hkf6
|
||||
# 48 Cores, 512GiB RAM, 4x NVIDIA A100 GPUs
|
||||
#SBATCH --partition=booster
|
||||
# Right now we're using a single node
|
||||
#SBATCH --nodes=1
|
||||
#SBATCH --ntasks=48
|
||||
#SBATCH --cpus-per-task=1
|
||||
#SBATCH --time=02:00:00
|
||||
#SBATCH --output=logs/varied-fillings-nocuda-%A-%3a.log
|
||||
#SBATCH --error=logs/varied-fillings-nocuda-%A-%3a.log
|
||||
#SBATCH --array=0-100:10
|
||||
|
||||
IDENT=$(printf "%03d" "${SLURM_ARRAY_TASK_ID}")
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR="/p/scratch/cellsinsilico/paul/nastja-out/varied-fillings-nocuda-${IDENT}"
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
source "${SOURCE_DIR}/activate-nastja-modules"
|
||||
|
||||
srun "${SOURCE_DIR}/nastja/build-nocuda/nastja" \
|
||||
-c "${SOURCE_DIR}/ma/experiments/generated/varied-fillings-${IDENT}.json" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
@@ -0,0 +1,31 @@
|
||||
import time
|
||||
|
||||
def collatz(x):
|
||||
seq = [x]
|
||||
while x != 1:
|
||||
if x % 2 == 0:
|
||||
x //= 2
|
||||
else:
|
||||
x = 3 * x + 1
|
||||
seq.append(x)
|
||||
return seq
|
||||
|
||||
if __name__ == "__main__":
|
||||
best = None
|
||||
try:
|
||||
i = 1
|
||||
start = time.time()
|
||||
while True:
|
||||
pair = (i, collatz(i))
|
||||
|
||||
if (not best or len(pair[1]) > len(best[1])) and not any(c >= 2**31 for c in pair[1]):
|
||||
best = pair
|
||||
|
||||
if i % 10000 == 0:
|
||||
now = time.time()
|
||||
print(f"{i:>10} best: {best[0]:>10} {len(best[1]):>5} {(now - start) * 1000 / i:5.2}ns/seq")
|
||||
i += 1
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
|
||||
print(best)
|
||||
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"#Testing": {
|
||||
"description": "Small experiment for comparing CPU and GPU implementations"
|
||||
},
|
||||
"Application": "Cells",
|
||||
"Geometry": {
|
||||
"blocksize": [10, 10, 10],
|
||||
"blockcount": [1, 1, 1]
|
||||
},
|
||||
"Settings": {
|
||||
"timesteps": 4,
|
||||
"randomseed": 42
|
||||
},
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[9, 9, 9]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[4, 4, 4],
|
||||
[7, 7, 7]
|
||||
],
|
||||
"celltype": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
"CellsInSilico": {
|
||||
"liquid": 1,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 10, 5],
|
||||
[0, 0, 5, 5]
|
||||
]
|
||||
},
|
||||
"temperature": 15,
|
||||
"volume": {
|
||||
"default": [0, 0, 64, 64],
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"surface": {
|
||||
"default": [0, 0, 80, 80],
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 100
|
||||
},
|
||||
"checkerboard": "00",
|
||||
"energyfunctions": ["Volume00", "Surface00", "Adhesion00", "DynamicECM00"],
|
||||
"centerofmass": {
|
||||
"steps": 10
|
||||
},
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"stepsPerMcs": 10,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 2,
|
||||
"ecmCellID": 0,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"c": 4,
|
||||
"alpha": 2,
|
||||
"d": 0.3,
|
||||
"phi": 1,
|
||||
"lambda": 50
|
||||
}
|
||||
},
|
||||
"Writers": {
|
||||
"ParallelVTK_Cells": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "UInt32",
|
||||
"field": "cells",
|
||||
"steps": 1
|
||||
},
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"components": [0, 1, 2],
|
||||
"steps": 1
|
||||
}
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"]
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"#Testing": {
|
||||
"description": "Just dynamic ECM for debugging"
|
||||
},
|
||||
"Application": "Cells",
|
||||
"Geometry": {
|
||||
"blocksize": [5, 5, 5],
|
||||
"blockcount": [1, 1, 1]
|
||||
},
|
||||
"Settings": {
|
||||
"timesteps": 10,
|
||||
"randomseed": 42
|
||||
},
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[4, 4, 4]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"CellsInSilico": {
|
||||
"liquid": 1,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 10, 5],
|
||||
[0, 0, 5, 5]
|
||||
]
|
||||
},
|
||||
"temperature": 15,
|
||||
"volume": {
|
||||
"default": [0, 0, 7000, 1000],
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"surface": {
|
||||
"default": [0, 0, 2500, 1000],
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"checkerboard": "00",
|
||||
"energyfunctions": ["Volume00", "Surface00", "Adhesion00", "DynamicECM00"],
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"stepsPerMcs": 1,
|
||||
"pushSteps": 1,
|
||||
"pushWeight": 2,
|
||||
"ecmCellID": 0,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"c": 4,
|
||||
"alpha": 2,
|
||||
"d": 0.3,
|
||||
"phi": 1,
|
||||
"lambda": 50
|
||||
}
|
||||
},
|
||||
"Writers": {
|
||||
"ParallelVTK_Cells": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "UInt32",
|
||||
"field": "cells",
|
||||
"steps": 1
|
||||
},
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"components": [0, 1, 2],
|
||||
"steps": 1
|
||||
}
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"]
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"#Testing": {
|
||||
"description": "Cellular Potts Model with dynamic ECM"
|
||||
},
|
||||
"Application": "Cells",
|
||||
"Geometry": {
|
||||
"blocksize": [20, 40, 40],
|
||||
"blockcount": [4, 2, 2]
|
||||
},
|
||||
"Settings": {
|
||||
"timesteps": 250,
|
||||
"randomseed": 42
|
||||
},
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[79, 79, 79]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[41, 35, 10],
|
||||
[45, 39, 15]
|
||||
],
|
||||
"celltype": 2
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[40, 15, 14],
|
||||
[47, 22, 20]
|
||||
],
|
||||
"celltype": 2
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[40, 20, 20],
|
||||
[47, 27, 26]
|
||||
],
|
||||
"celltype": 3
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[38, 20, 60],
|
||||
[45, 27, 66]
|
||||
],
|
||||
"celltype": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
"CellsInSilico": {
|
||||
"liquid": 1,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 10, 5],
|
||||
[0, 0, 5, 5]
|
||||
]
|
||||
},
|
||||
"temperature": 15,
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 2000
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 800
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 100
|
||||
},
|
||||
"checkerboard": "00",
|
||||
"energyfunctions": ["Volume00", "Surface00", "Adhesion00"],
|
||||
"centerofmass": {
|
||||
"steps": 10
|
||||
}
|
||||
},
|
||||
"Writers": {
|
||||
"ParallelVTK_Cells": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "UInt32",
|
||||
"field": "cells",
|
||||
"steps": 1
|
||||
}
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Cells"]
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"#Testing": {
|
||||
"description": "Cellular Potts Model with dynamic ECM"
|
||||
},
|
||||
"Application": "Cells",
|
||||
"Geometry": {
|
||||
"blocksize": [80, 80, 80],
|
||||
"blockcount": [1, 1, 1]
|
||||
},
|
||||
"Settings": {
|
||||
"timesteps": 250,
|
||||
"randomseed": 42
|
||||
},
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[79, 79, 79]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[41, 35, 10],
|
||||
[45, 39, 15]
|
||||
],
|
||||
"celltype": 2
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[40, 15, 14],
|
||||
[47, 22, 20]
|
||||
],
|
||||
"celltype": 2
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[40, 20, 20],
|
||||
[47, 27, 26]
|
||||
],
|
||||
"celltype": 3
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[38, 20, 60],
|
||||
[45, 27, 66]
|
||||
],
|
||||
"celltype": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
"CellsInSilico": {
|
||||
"liquid": 1,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 10, 5],
|
||||
[0, 0, 5, 5]
|
||||
]
|
||||
},
|
||||
"temperature": 15,
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 2000
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 800
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 100
|
||||
},
|
||||
"checkerboard": "00",
|
||||
"energyfunctions": ["Volume00", "Surface00", "Adhesion00", "DynamicECM00"],
|
||||
"centerofmass": {
|
||||
"steps": 10
|
||||
},
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"stepsPerMcs": 100,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 2,
|
||||
"ecmCellID": 0,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"c": 4,
|
||||
"alpha": 2,
|
||||
"d": 0.3,
|
||||
"phi": 1
|
||||
}
|
||||
},
|
||||
"Writers": {
|
||||
"ParallelVTK_Cells": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "UInt32",
|
||||
"field": "cells",
|
||||
"steps": 1
|
||||
},
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"components": [0, 1, 2],
|
||||
"steps": 1
|
||||
}
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"]
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"#Testing": {
|
||||
"description": "Cellular Potts Model with dynamic ECM"
|
||||
},
|
||||
"Application": "Cells",
|
||||
"Geometry": {
|
||||
"blocksize": [20, 40, 40],
|
||||
"blockcount": [4, 2, 2]
|
||||
},
|
||||
"Settings": {
|
||||
"timesteps": 250,
|
||||
"randomseed": 42
|
||||
},
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[79, 79, 79]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[41, 35, 10],
|
||||
[45, 39, 15]
|
||||
],
|
||||
"celltype": 2
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[40, 15, 14],
|
||||
[47, 22, 20]
|
||||
],
|
||||
"celltype": 2
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[40, 20, 20],
|
||||
[47, 27, 26]
|
||||
],
|
||||
"celltype": 3
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[38, 20, 60],
|
||||
[45, 27, 66]
|
||||
],
|
||||
"celltype": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
"CellsInSilico": {
|
||||
"liquid": 1,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 10, 5],
|
||||
[0, 0, 5, 5]
|
||||
]
|
||||
},
|
||||
"temperature": 15,
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 2000
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 800
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 100
|
||||
},
|
||||
"checkerboard": "00",
|
||||
"energyfunctions": ["Volume00", "Surface00", "Adhesion00", "DynamicECM00"],
|
||||
"centerofmass": {
|
||||
"steps": 10
|
||||
},
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"stepsPerMcs": 100,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 2,
|
||||
"ecmCellID": 0,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"c": 4,
|
||||
"alpha": 2,
|
||||
"d": 0.3,
|
||||
"phi": 1
|
||||
}
|
||||
},
|
||||
"Writers": {
|
||||
"ParallelVTK_Cells": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "UInt32",
|
||||
"field": "cells",
|
||||
"steps": 1
|
||||
},
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"components": [0, 1, 2],
|
||||
"steps": 1
|
||||
}
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"]
|
||||
}
|
||||
@@ -0,0 +1,330 @@
|
||||
{
|
||||
"Comments": [
|
||||
"Celltype Usage",
|
||||
"0 Dynamic ECM",
|
||||
"1-5 Not Used",
|
||||
"6 Liquid ",
|
||||
"7 Apoptotic cell Type ",
|
||||
"8 Basic Non Dividing Cell type (surrounding)",
|
||||
"9 Cancer"
|
||||
],
|
||||
"Application": "Cells",
|
||||
"CellsInSilico": {
|
||||
"ecmdegradation": {
|
||||
"enabled": "false",
|
||||
"steps": 99999,
|
||||
"stochastic": "true",
|
||||
"probability": 0.5
|
||||
},
|
||||
"energyfunctions": [
|
||||
"Volume00",
|
||||
"Surface01",
|
||||
"Motility00",
|
||||
"Adhesion01",
|
||||
"DynamicECM00"
|
||||
],
|
||||
"liquid": 6,
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 500
|
||||
},
|
||||
"lambda": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
7.5,
|
||||
7.5,
|
||||
7.5
|
||||
],
|
||||
"sizechange": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
-0.05,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 400
|
||||
},
|
||||
"lambda": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
5.625,
|
||||
5.625,
|
||||
1
|
||||
],
|
||||
"sizechange": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
-0.05,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
450
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
450,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
50
|
||||
]
|
||||
]
|
||||
},
|
||||
"temperature": 50,
|
||||
"division": {
|
||||
"enabled": "true",
|
||||
"condition": [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"
|
||||
]
|
||||
},
|
||||
"centerofmass": {
|
||||
"steps": 1
|
||||
},
|
||||
"signaling": {
|
||||
"enabled": false
|
||||
},
|
||||
"orientation": {
|
||||
"enabled": true,
|
||||
"motility": "persistentRandomWalk",
|
||||
"persistenceMagnitude": 0.0,
|
||||
"recalculationtime": 200,
|
||||
"motilityamount": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
"visitor": {
|
||||
"stepwidth": 10,
|
||||
"checkerboard": "01"
|
||||
},
|
||||
"cleaner": {
|
||||
"killDistance": 20
|
||||
},
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"stepsPerMcs": 100,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 2,
|
||||
"ecmCellID": 0,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"c": 4,
|
||||
"alpha": 2,
|
||||
"d": 0.3,
|
||||
"phi": 1
|
||||
}
|
||||
},
|
||||
"Geometry": {
|
||||
"blockcount": [
|
||||
2,
|
||||
4,
|
||||
4
|
||||
],
|
||||
"blocksize": [
|
||||
200,
|
||||
100,
|
||||
100
|
||||
]
|
||||
},
|
||||
"Settings": {
|
||||
"randomseed": 0,
|
||||
"timesteps": 5000,
|
||||
"statusoutput": 1
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"],
|
||||
"Writers": {
|
||||
"CellInfo": {
|
||||
"field": "",
|
||||
"groupsize": 0,
|
||||
"steps": 1,
|
||||
"writer": "CellInfo"
|
||||
},
|
||||
"ParallelVTK_Cells": {
|
||||
"field": "cells",
|
||||
"outputtype": "UInt32",
|
||||
"printhints": false,
|
||||
"steps": 100,
|
||||
"writer": "ParallelVtkImage"
|
||||
},
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"components": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
"steps": 100
|
||||
}
|
||||
},
|
||||
"Include": "measurements/strong/config_filling_1.json"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Autogenerated by scripts/gen/strong.py
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"DefineFunctions": [
|
||||
"r_angle()=360*rnd()",
|
||||
"r_size()=400*rnd()"
|
||||
],
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[399, 399, 401]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "sphere",
|
||||
"pattern": "voronoi",
|
||||
"count": 5500,
|
||||
"radius": 75,
|
||||
"center": [
|
||||
200,
|
||||
200,
|
||||
200
|
||||
],
|
||||
"box": [
|
||||
[
|
||||
110,
|
||||
110,
|
||||
110
|
||||
],
|
||||
[
|
||||
290,
|
||||
290,
|
||||
290
|
||||
]
|
||||
],
|
||||
"celltype": 9
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"#Testing": {
|
||||
"description": "Cellular Potts Model with dynamic ECM"
|
||||
},
|
||||
"Application": "Cells",
|
||||
"Geometry": {
|
||||
"blocksize": [180, 180, 180],
|
||||
"blockcount": [1, 1, 1]
|
||||
},
|
||||
"Settings": {
|
||||
"timesteps": 100,
|
||||
"randomseed": 42,
|
||||
"statusoutput": 1
|
||||
},
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[179, 179, 179]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"pattern": "voronoi",
|
||||
"box": [
|
||||
[20, 20, 20],
|
||||
[159, 159, 159]
|
||||
],
|
||||
"count": 1500,
|
||||
"celltype": [0, 0, 750, 750]
|
||||
}
|
||||
]
|
||||
},
|
||||
"CellsInSilico": {
|
||||
"liquid": 1,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 10, 5],
|
||||
[0, 0, 5, 5]
|
||||
]
|
||||
},
|
||||
"temperature": 15,
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 2000
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 800
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 100
|
||||
},
|
||||
"checkerboard": "00",
|
||||
"energyfunctions": ["Volume00", "Surface00", "Adhesion00", "DynamicECM00"],
|
||||
"centerofmass": {
|
||||
"steps": 10
|
||||
},
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"stepsPerMcs": 100,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 2,
|
||||
"ecmCellID": 0,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"c": 4,
|
||||
"alpha": 2,
|
||||
"d": 0.3,
|
||||
"phi": 1
|
||||
}
|
||||
},
|
||||
"Writers": {
|
||||
"ParallelVTK_Cells": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "UInt32",
|
||||
"field": "cells",
|
||||
"steps": 10
|
||||
},
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"components": [0, 1, 2],
|
||||
"steps": 10
|
||||
}
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"]
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"#Testing": {
|
||||
"description": "Cellular Potts Model with dynamic ECM, small experiment"
|
||||
},
|
||||
"Application": "Cells",
|
||||
"Geometry": {
|
||||
"blocksize": [40, 20, 20],
|
||||
"blockcount": [1, 1, 1]
|
||||
},
|
||||
"Settings": {
|
||||
"timesteps": 200,
|
||||
"randomseed": 42
|
||||
},
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[10, 0, 0],
|
||||
[39, 19, 19]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[2, 8, 8],
|
||||
[9, 13, 13]
|
||||
],
|
||||
"celltype": 2
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[30, 8, 8],
|
||||
[37, 13, 13]
|
||||
],
|
||||
"celltype": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
"CellsInSilico": {
|
||||
"liquid": 1,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 0, 0],
|
||||
[0, 0, 10, 5],
|
||||
[0, 0, 5, 5]
|
||||
]
|
||||
},
|
||||
"temperature": 15,
|
||||
"volume": {
|
||||
"default": [0, 0, 7000, 1000],
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"surface": {
|
||||
"default": [0, 0, 2500, 1000],
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 100
|
||||
},
|
||||
"checkerboard": "00",
|
||||
"energyfunctions": ["Volume00", "Surface00", "Adhesion00", "DynamicECM00"],
|
||||
"centerofmass": {
|
||||
"steps": 10
|
||||
},
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"stepsPerMcs": 10,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 2,
|
||||
"ecmCellID": 0,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"c": 4,
|
||||
"alpha": 2,
|
||||
"d": 0.3,
|
||||
"phi": 1,
|
||||
"lambda": 50
|
||||
}
|
||||
},
|
||||
"Writers": {
|
||||
"ParallelVTK_Cells": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "UInt32",
|
||||
"field": "cells",
|
||||
"steps": 1
|
||||
},
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"components": [0, 1, 2],
|
||||
"steps": 1
|
||||
}
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"]
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"#Testing": {
|
||||
"description": "Minimal config for debugging CUDA code"
|
||||
},
|
||||
"Application": "Cells",
|
||||
"Geometry": {
|
||||
"blocksize": [5, 5, 5],
|
||||
"blockcount": [1, 1, 1]
|
||||
},
|
||||
"Settings": {
|
||||
"timesteps": 3,
|
||||
"randomseed": 42
|
||||
},
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[4, 2, 4]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[1, 1, 1],
|
||||
[3, 3, 3]
|
||||
],
|
||||
"celltype": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
"CellsInSilico": {
|
||||
"liquid": 1,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0],
|
||||
[0, 20, 5, 5],
|
||||
[0, 5, 10, 5],
|
||||
[0, 5, 5, 5]
|
||||
]
|
||||
},
|
||||
"temperature": 15,
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 300
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"potential": {
|
||||
"direction": [1, 1, 0],
|
||||
"coupling": [0, 150, 100, 50]
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 400
|
||||
},
|
||||
"lambda": {
|
||||
"storage": "const",
|
||||
"value": 10
|
||||
}
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 100
|
||||
},
|
||||
"checkerboard": "00",
|
||||
"energyfunctions": ["Volume00", "Surface00", "Adhesion00", "Potential00", "DynamicECM00"],
|
||||
"centerofmass": {
|
||||
"steps": 10
|
||||
},
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"ecmCellID": 0,
|
||||
"stepsPerMcs": 1,
|
||||
"pushSteps": 1,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.5
|
||||
}
|
||||
},
|
||||
"Writers": {
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"steps": 1
|
||||
}
|
||||
},
|
||||
"WriteActions": ["ParallelVTK_Displacement"]
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"Comments": ["Celltype Usage", "0 Not Used", "1-5 Solids for blood vessels / ECM", "6 Liquid ", "7 Apoptotic cell Type ", "8 Basic Non Dividing Cell type (surrounding)", "9 Cancer"],
|
||||
"Application": "Cells",
|
||||
"CellsInSilico": {
|
||||
"ecmdegradation": {
|
||||
"enabled": "false",
|
||||
"steps": 99999,
|
||||
"stochastic": "true",
|
||||
"probability": 0.5
|
||||
},
|
||||
"energyfunctions": ["Volume00", "Surface01", "Motility00", "Adhesion01", "DynamicECM00"],
|
||||
"liquid": 6,
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 500
|
||||
},
|
||||
"lambda": [0, 0, 0, 0, 0, 0, 0, 7.5, 7.5, 7.5],
|
||||
"sizechange": [0, 0, 0, 0, 0, 0, 0, -0.05, 0, 0, 0, 0, 0, 0, 0]
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 400
|
||||
},
|
||||
"lambda": [0, 0, 0, 0, 0, 0, 0, 5.625, 5.625, 1],
|
||||
"sizechange": [0, 0, 0, 0, 0, 0, 0, -0.05, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
},
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 450],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 450, 0, 0, 0, 0, 0, 0, 0, 50]
|
||||
]
|
||||
},
|
||||
"temperature": 50,
|
||||
"division": {
|
||||
"enabled": "true",
|
||||
"condition": ["", "", "", "", "", "", "", "", "", "( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"]
|
||||
},
|
||||
"centerofmass": {
|
||||
"steps": 1
|
||||
},
|
||||
"signaling": {
|
||||
"enabled": false
|
||||
},
|
||||
"orientation": {
|
||||
"enabled": true,
|
||||
"motility": "persistentRandomWalk",
|
||||
"persistenceMagnitude": 0.0,
|
||||
"recalculationtime": 200,
|
||||
"motilityamount": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
},
|
||||
"visitor": {
|
||||
"stepwidth": 10,
|
||||
"checkerboard": "01"
|
||||
},
|
||||
"cleaner": {
|
||||
"killDistance": 20
|
||||
},
|
||||
"dynamicecm": {
|
||||
"enabled": true,
|
||||
"stepsPerMcs": 100,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 2,
|
||||
"ecmCellID": 0,
|
||||
"deltat": 0.1,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"c": 4,
|
||||
"alpha": 2,
|
||||
"d": 0.3,
|
||||
"phi": 1
|
||||
}
|
||||
},
|
||||
"Geometry": {
|
||||
"blockcount": [8, 8, 6],
|
||||
"blocksize": [50, 50, 67]
|
||||
},
|
||||
"Settings": {
|
||||
"randomseed": 0,
|
||||
"timesteps": 100
|
||||
},
|
||||
"WriteActions": ["CellInfo"],
|
||||
"Writers": {
|
||||
"CellInfo": {
|
||||
"field": "",
|
||||
"groupsize": 0,
|
||||
"steps": 1,
|
||||
"writer": "CellInfo"
|
||||
},
|
||||
"ParallelVTK_Cells": {
|
||||
"field": "cells",
|
||||
"outputtype": "UInt32",
|
||||
"printhints": false,
|
||||
"steps": 1,
|
||||
"writer": "ParallelVtkImage"
|
||||
},
|
||||
"ParallelVTK_Displacement": {
|
||||
"writer": "ParallelVtkImage",
|
||||
"outputtype": "Float32",
|
||||
"field": "dynamicecm",
|
||||
"components": [0, 1, 2],
|
||||
"steps": 1
|
||||
}
|
||||
},
|
||||
"Include": "config_filling_1.json"
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"DefineFunctions": [
|
||||
"r_angle()=360*rnd()",
|
||||
"r_size()=400*rnd()"
|
||||
],
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"_comment": "This is for the dynamic ECM",
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[399, 399, 401]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
},
|
||||
{
|
||||
"shape": "sphere",
|
||||
"pattern": "voronoi",
|
||||
"count": 5500,
|
||||
"radius": 75,
|
||||
"center": [
|
||||
200,
|
||||
200,
|
||||
200
|
||||
],
|
||||
"box": [
|
||||
[
|
||||
110,
|
||||
110,
|
||||
110
|
||||
],
|
||||
[
|
||||
290,
|
||||
290,
|
||||
290
|
||||
]
|
||||
],
|
||||
"celltype": 9
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
generate-batch-strong-cpu:
|
||||
python scripts/substitute.py strong-batch.j2 < strong-cpu.json
|
||||
|
||||
generate-batch-strong-gpu:
|
||||
python scripts/substitute.py strong-batch.j2 < strong-gpu.json
|
||||
|
||||
generate-batch-strong-booster:
|
||||
python scripts/substitute.py strong-batch.j2 < strong-booster.json
|
||||
|
||||
clean-logs:
|
||||
rm logs/*
|
||||
|
||||
.PHONY: generate-batch-strong-cpu clean-logs
|
||||
@@ -0,0 +1,4 @@
|
||||
label,BC:cells,BC:dynamicecm,Sweep:Cells,Sweep:DynamicECM,Sweep:DynamicECMDampers,Filling,Other
|
||||
CPU,0.04629667717328299,3.88243023434036,0.002164069189058585,82.18255346583861,13.842310640806883,0.005797982839735358,0.03844692981207934
|
||||
GPU,0.034897486509106485,41.227398706349675,13.180664898871365,22.432483220415783,19.749714111977486,1.9939606413394697,1.3808809345371023
|
||||
Booster,0.09128030041871667,42.736382370072874,12.260298369798207,22.36492489089858,16.070196185259338,4.364304866307413,2.1126130172448816
|
||||
|
@@ -0,0 +1,4 @@
|
||||
label,BC:cells,BC:dynamicecm,Sweep:Cells,Sweep:DynamicECM,Sweep:DynamicECMDampers,Other
|
||||
CPU,0.9047934333333334,75.87579921250001,0.04229322083333333,1606.12465625,270.5255006333333,0.8646950250000001
|
||||
GPU,0.11372260000000001,134.35027680000002,42.952648800000006,73.102122,64.3596162,10.9978052
|
||||
Booster,0.155221,72.67267939999999,20.848482800000003,38.0312728,27.327165999999995,11.013917200000002
|
||||
|
@@ -0,0 +1,9 @@
|
||||
label nodes tasks mean_time std_time speedup speedup_std speedup_error
|
||||
1 1 1 161.08257980000002 1.0725827874500897 1.0 0.0066585895804611986 0.004614167168572558
|
||||
1 1 2 109.2771463 1.3498701967829918 1.474073813730255 0.018208823861030076 0.012618071172974463
|
||||
1 1 4 94.5763083 2.921107861707173 1.7032022363258181 0.052605536545441436 0.03645377698685362
|
||||
2 2 8 75.06436665 5.345617315509918 2.145926049720424 0.15281950626022228 0.10589851499069955
|
||||
4 4 16 42.842002025 1.5314070839490197 3.759921856733072 0.13440013758310768 0.09313454370387199
|
||||
8 8 32 16.40522446875 4.395440141154071 9.818980539208297 2.6307924825691393 1.823046180232846
|
||||
16 16 64 9.361684956249999 5.010216046116417 17.206579857449583 9.208671612370724 6.381283859970849
|
||||
32 32 128 5.214438346875 0.113661681579046 30.891645290338204 0.6733604113945479 0.4666149588180552
|
||||
|
@@ -0,0 +1,10 @@
|
||||
label nodes tasks mean_time std_time speedup speedup_std speedup_error
|
||||
1 1 48 1953.3832839708334 14.087268287606769 1.0 0.007211727674340593 0.004711662080569187
|
||||
2 2 96 1046.3540047312501 6.0880471399828595 1.866847429396085 0.010861959816590314 0.007096480413505672
|
||||
4 4 192 566.0709002166666 5.005298021298787 3.4507749527897755 0.030512356378918384 0.019934739500893344
|
||||
8 8 384 318.1225953708333 9.706195475255436 6.1403475024896865 0.18734731205020752 0.12240024387280224
|
||||
16 16 768 178.56471887994792 9.393026972005948 10.939357428631386 0.5754422263707719 0.375955587895571
|
||||
32 32 1536 99.82801128216144 1.4413062581268035 19.56748670921274 0.28251330150299214 0.18457535698195485
|
||||
64 64 3072 55.75610567220052 1.0303316198245824 35.034428255357376 0.6474103379133267 0.42297475410337343
|
||||
128 128 6144 31.589132888118492 0.32226687791817415 61.83719226764697 0.6308523555205254 0.41215687227340997
|
||||
256 256 12288 19.11704500200738 0.18528928846832715 102.18018965617955 0.9903672160087601 0.6470399144590566
|
||||
|
@@ -0,0 +1,9 @@
|
||||
label,BC:cells,BC:dynamicecm,Sweep:Cells,Sweep:DynamicECM,Sweep:DynamicECMDampers,Filling,Other
|
||||
1,0.034897486509106485,41.227398706349675,13.180664898871365,22.432483220415783,19.749714111977486,1.9939606413394697,1.3808809345371023
|
||||
2,0.7137918070198439,50.7137377526309,8.923981074147767,19.35772833011394,17.571497161475467,1.320924803923136,1.3983390706889622
|
||||
4,0.6647403410134337,58.291944402330074,7.087118055335309,16.67352093599457,15.236952119238136,1.092645293437499,0.953078852650984
|
||||
8,0.6788278363464717,65.05900206274784,5.2089254465999275,14.249993130938188,13.176763096049008,0.7851584656500297,0.8413299616685318
|
||||
16,1.441574901760373,61.1245906198054,4.832237599492141,16.029377636605524,14.996293924006913,0.716990077435801,0.858935240893841
|
||||
32,3.3736940900007966,47.94830950907802,5.622259685491874,21.238716402604393,19.97281149065964,0.8196124452570666,1.0245963769081996
|
||||
64,6.284545018581091,45.28808866195176,4.502683326147901,21.66574860147326,20.522789117514915,0.6460791296539419,1.0900661446771265
|
||||
128,11.788574344478201,40.04977497065291,3.2677482351392375,22.1995263401806,21.209134936528987,0.4598839494487746,1.0253572235712836
|
||||
|
@@ -0,0 +1,9 @@
|
||||
label nodes tasks mean_time std_time speedup speedup_std speedup_error
|
||||
1 1 1 316.56674059999995 1.3298279828832311 1.0 0.004200782370133899 0.002910993666206366
|
||||
1 1 2 239.7297573 1.3705192585818793 1.3205150005797797 0.007549297425250635 0.00523139621453709
|
||||
1 1 4 150.86725470000002 1.463195211854327 2.098313124537819 0.020350616990413285 0.014102258089746373
|
||||
2 2 8 103.758313 1.3959932139830615 3.051001230137579 0.041049019495199714 0.028445519245192213
|
||||
4 4 16 56.423368849999996 0.8293394846143929 5.610560784514376 0.08246688711191473 0.057146637198176795
|
||||
8 8 32 24.168551143749998 0.5503559531334744 13.09829202078025 0.29826872726631265 0.20668968287257275
|
||||
16 16 64 15.05716248125 0.04648043269670786 21.024329185144023 0.06490066896072916 0.044973869063161365
|
||||
32 32 128 9.9111531140625 0.08848604506395903 31.940455056721632 0.28516203039001964 0.19760720531719309
|
||||
|
@@ -0,0 +1,9 @@
|
||||
nodes tasks mean_time std_time efficiency efficiency_error
|
||||
1 1 41.98463099999999 1.4067920862965122 1.0 0.023219381860496473
|
||||
1 2 49.85189340000001 1.7669363566083227 0.8421872899214694 0.020685165974491628
|
||||
1 4 59.9694977 2.209151778903949 0.7000997608822725 0.01787171173813342
|
||||
2 8 72.810012625 0.5538313058789631 0.5766326565034021 0.003039461920431096
|
||||
4 16 84.718001525 5.20969191162485 0.4955809892140865 0.021118450727088397
|
||||
8 32 87.22569569999999 1.7018797711775082 0.4813332890390463 0.0065079080866405825
|
||||
16 64 85.36740952500001 1.0197522041876155 0.49181099946232654 0.004071100890302765
|
||||
32 128 87.5995021046875 0.8707125543332932 0.47927933368645675 0.003301208459097849
|
||||
|
@@ -0,0 +1,10 @@
|
||||
nodes tasks mean_time std_time efficiency efficiency_error
|
||||
1 48 234.09125610833334 4.9756238110995765 1.0 0.013886639526655382
|
||||
2 96 234.09269640000002 1.9886350551995884 0.9999938473447108 0.005550081636855162
|
||||
4 192 239.06532950520833 1.8931447841474947 0.9791936647310181 0.005066063671757703
|
||||
8 384 241.32357499479167 0.977728668984766 0.9700306160033705 0.0025676679349660694
|
||||
16 768 260.8008324059896 12.802824235961744 0.8975863073317291 0.028787758154736998
|
||||
32 1536 266.59983470546877 13.970338204797093 0.8780622702446538 0.03006125980502309
|
||||
64 3072 281.61153985800786 25.95560834859075 0.8312559074332151 0.05005532970709546
|
||||
128 6144 293.4177162058594 10.8076489888669 0.7978088683101088 0.019198998510810975
|
||||
256 12288 310.9775802693196 14.459893325743863 0.7527592693518308 0.022867934404056486
|
||||
|
@@ -0,0 +1,9 @@
|
||||
nodes tasks mean_time std_time efficiency efficiency_error
|
||||
1 1 60.658062599999994 1.8711952545625232 1.0 0.021376748626269895
|
||||
1 2 80.6903592 1.1554429061827625 0.751738661240214 0.007459415624087278
|
||||
1 4 89.01234124999999 1.3979557323025515 0.6814567704677693 0.00741639040919915
|
||||
2 8 101.357940575 4.784240687736861 0.5984539766286584 0.01957478845779047
|
||||
4 16 106.2530252 1.5044057675724636 0.5708831582519497 0.005601211794070455
|
||||
8 32 113.70197445 2.069642901549501 0.5334829310873062 0.006729131548114211
|
||||
16 64 119.22770070624999 0.7600051865549382 0.5087581345667959 0.00224730403456563
|
||||
32 128 121.8124414140625 0.5170666166834136 0.4979627852118346 0.0014647476739746731
|
||||
|
@@ -0,0 +1 @@
|
||||
module load SciPy-Stack
|
||||
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import math
|
||||
|
||||
|
||||
def print_table(data, spec):
|
||||
print("\t".join(column for column in spec.keys()))
|
||||
|
||||
for data_item in data:
|
||||
values = []
|
||||
for retrieve in spec.values():
|
||||
raw_value = retrieve(data_item)
|
||||
values.append(raw_value if isinstance(raw_value, str) else str(raw_value))
|
||||
print("\t".join(values))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
p = argparse.ArgumentParser(description="Turn files generated by timing.py into pgf datafiles")
|
||||
p.add_argument("timing_file")
|
||||
p.add_argument("--weak", action="store_true")
|
||||
args = p.parse_args()
|
||||
|
||||
with open(args.timing_file, "r", encoding="utf8") as f:
|
||||
jobs = json.load(f)
|
||||
|
||||
if not args.weak:
|
||||
scaling_spec = {
|
||||
"label": lambda job: job["accounting"][0]["nodes"]["count"],
|
||||
"nodes": lambda job: job["accounting"][0]["nodes"]["count"],
|
||||
"tasks": lambda job: job["accounting"][0]["tasks"]["count"],
|
||||
"mean_time": lambda job: job["means"]["TimeStep"],
|
||||
"std_time": lambda job: job["stds"]["TimeStep"],
|
||||
"speedup": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"],
|
||||
# Standard deviation scaled to speedup
|
||||
"speedup_std": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]),
|
||||
# 95% confidence interval
|
||||
"speedup_error": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]) / math.sqrt(len(jobs)) * 1.96,
|
||||
}
|
||||
else:
|
||||
scaling_spec = {
|
||||
"nodes": lambda job: job["accounting"][0]["nodes"]["count"],
|
||||
"tasks": lambda job: job["accounting"][0]["tasks"]["count"],
|
||||
"mean_time": lambda job: job["means"]["TimeStep"],
|
||||
"std_time": lambda job: job["stds"]["TimeStep"],
|
||||
"efficiency": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"],
|
||||
"efficiency_error": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]) / math.sqrt(len(jobs)) * 1.96,
|
||||
}
|
||||
|
||||
print_table(jobs, scaling_spec)
|
||||
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import copy
|
||||
import json
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
SIZE = [384, 384, 384]
|
||||
|
||||
with (Path(__file__).parent.parent / "templates" / "strong-booster.json").open(encoding="utf8") as f:
|
||||
template = json.load(f)
|
||||
|
||||
configs = [
|
||||
[ 1, 1, 1],
|
||||
[ 1, 1, 2],
|
||||
[ 1, 2, 2],
|
||||
[ 2, 2, 2],
|
||||
[ 2, 2, 4],
|
||||
[ 2, 4, 4],
|
||||
[ 4, 4, 4],
|
||||
[ 4, 4, 8],
|
||||
]
|
||||
|
||||
out_path = Path(__file__).parent.parent / "generated" / "config"
|
||||
|
||||
for c in configs:
|
||||
nc = copy.deepcopy(template)
|
||||
nc["Geometry"]["blockcount"] = c
|
||||
nc["Geometry"]["blocksize"] = [bs // bc for bc, bs in zip(c, SIZE)]
|
||||
|
||||
nc_out_path = out_path / f"strong-booster-{c[0]:02}-{c[1]:02}-{c[2]:02}.json"
|
||||
print(f"Dumping {(c[0] * c[1] * c[2])} to {nc_out_path}")
|
||||
with nc_out_path.open("w", encoding="utf8") as f:
|
||||
json.dump(nc, f)
|
||||
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import copy
|
||||
import json
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
SIZE = [384, 384, 384]
|
||||
|
||||
with (Path(__file__).parent.parent / "templates" / "strong-cpu.json").open(encoding="utf8") as f:
|
||||
template = json.load(f)
|
||||
|
||||
configs = [
|
||||
[ 4, 4, 3],
|
||||
[ 4, 4, 6],
|
||||
[ 4, 4, 12],
|
||||
[ 4, 8, 12],
|
||||
[ 8, 8, 12],
|
||||
[ 8, 8, 24],
|
||||
[ 8, 16, 24],
|
||||
[ 16, 16, 24],
|
||||
[ 16, 16, 48]
|
||||
]
|
||||
|
||||
out_path = Path(__file__).parent.parent / "generated" / "config"
|
||||
|
||||
for c in configs:
|
||||
nc = copy.deepcopy(template)
|
||||
nc["Geometry"]["blockcount"] = c
|
||||
nc["Geometry"]["blocksize"] = [bs // bc for bc, bs in zip(c, SIZE)]
|
||||
|
||||
nc_out_path = out_path / f"strong-cpu-{c[0]:02}-{c[1]:02}-{c[2]:02}.json"
|
||||
print(f"Dumping {(c[0] * c[1] * c[2]) // 48} to {nc_out_path}")
|
||||
with nc_out_path.open("w", encoding="utf8") as f:
|
||||
json.dump(nc, f)
|
||||
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import copy
|
||||
import json
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
SIZE = [384, 384, 384]
|
||||
|
||||
with (Path(__file__).parent.parent / "templates" / "strong-gpu.json").open(encoding="utf8") as f:
|
||||
template = json.load(f)
|
||||
|
||||
configs = [
|
||||
[ 1, 1, 1],
|
||||
[ 1, 1, 2],
|
||||
[ 1, 2, 2],
|
||||
[ 2, 2, 2],
|
||||
[ 2, 2, 4],
|
||||
[ 2, 4, 4],
|
||||
[ 4, 4, 4],
|
||||
[ 4, 4, 8],
|
||||
]
|
||||
|
||||
out_path = Path(__file__).parent.parent / "generated" / "config"
|
||||
|
||||
for c in configs:
|
||||
nc = copy.deepcopy(template)
|
||||
nc["Geometry"]["blockcount"] = c
|
||||
nc["Geometry"]["blocksize"] = [bs // bc for bc, bs in zip(c, SIZE)]
|
||||
|
||||
nc_out_path = out_path / f"strong-gpu-{c[0]:02}-{c[1]:02}-{c[2]:02}.json"
|
||||
print(f"Dumping {(c[0] * c[1] * c[2])} to {nc_out_path}")
|
||||
with nc_out_path.open("w", encoding="utf8") as f:
|
||||
json.dump(nc, f)
|
||||
@@ -0,0 +1,207 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
|
||||
import jinja2
|
||||
import json
|
||||
import sys
|
||||
|
||||
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Tuple
|
||||
|
||||
|
||||
SIZE = (192, 192, 192)
|
||||
|
||||
|
||||
templates_env = jinja2.Environment(
|
||||
loader=jinja2.FileSystemLoader(Path(__file__).parent.parent / "templates"),
|
||||
autoescape=jinja2.select_autoescape()
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Experiment:
|
||||
job_name: str
|
||||
account: str
|
||||
partition: str
|
||||
nastja_binary_path: str
|
||||
nodes: int
|
||||
tasks: int
|
||||
num_blocks: Tuple[int, int, int]
|
||||
domain_scale: Tuple[int, int, int]
|
||||
time: str = "00:15:00"
|
||||
extra_sbatch_line: str = ""
|
||||
logfile_path: str = "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a"
|
||||
config_path: str = "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json"
|
||||
output_dir_path: str = "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}"
|
||||
|
||||
def get_config(self):
|
||||
with (Path(__file__).parent.parent / "templates" / "weak.json").open(encoding="utf8") as f:
|
||||
config = json.load(f)
|
||||
|
||||
size = (
|
||||
SIZE[0] * self.domain_scale[0],
|
||||
SIZE[1] * self.domain_scale[1],
|
||||
SIZE[2] * self.domain_scale[2],
|
||||
)
|
||||
blocksize = (
|
||||
size[0] // self.num_blocks[0],
|
||||
size[1] // self.num_blocks[1],
|
||||
size[2] // self.num_blocks[2],
|
||||
)
|
||||
config["Geometry"] = {
|
||||
"blockcount": list(self.num_blocks),
|
||||
"blocksize": list(blocksize),
|
||||
}
|
||||
|
||||
cells_filling = [{
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
list(size)
|
||||
],
|
||||
"celltype": 0,
|
||||
"component": 0,
|
||||
"pattern": "const",
|
||||
"seed": 0,
|
||||
"shape": "cube",
|
||||
"value": 0,
|
||||
}]
|
||||
for z in range(self.domain_scale[2]):
|
||||
for y in range(self.domain_scale[1]):
|
||||
for x in range(self.domain_scale[0]):
|
||||
cx = x * SIZE[0] + SIZE[0] // 2
|
||||
cy = y * SIZE[1] + SIZE[1] // 2
|
||||
cz = z * SIZE[2] + SIZE[2] // 2
|
||||
cells_filling.append({
|
||||
"shape": "sphere",
|
||||
"pattern": "voronoi",
|
||||
"count": 715,
|
||||
"radius": 38,
|
||||
"center": [cx, cy, cz],
|
||||
"box": [
|
||||
[cx - 38, cy - 38, cz - 38],
|
||||
[cx + 38, cy + 38, cz + 38]
|
||||
],
|
||||
"celltype": 9,
|
||||
"seed": 758960,
|
||||
})
|
||||
|
||||
config["Filling"]["cells"] = cells_filling
|
||||
|
||||
return config
|
||||
|
||||
def write_batch_file(self, out_path: Path):
|
||||
t = templates_env.get_template("strong-batch.j2")
|
||||
t.stream(
|
||||
name=self.job_name,
|
||||
account=self.account,
|
||||
partition=self.partition,
|
||||
nodes=self.nodes,
|
||||
tasks=self.tasks,
|
||||
extra_sbatch_line=self.extra_sbatch_line,
|
||||
time=self.time,
|
||||
logfile_path=self.logfile_path,
|
||||
nastja_binary_path=self.nastja_binary_path,
|
||||
config_path=self.config_path,
|
||||
output_dir_path=self.output_dir_path,
|
||||
).dump(str(out_path))
|
||||
|
||||
|
||||
def make_cpu_ex(x: int, y: int, z: int) -> Experiment:
|
||||
num_blocks = x * y * z
|
||||
assert num_blocks % 48 == 0
|
||||
num_nodes = num_blocks // 48
|
||||
|
||||
assert x % 4 == 0
|
||||
assert y % 4 == 0
|
||||
assert z % 3 == 0
|
||||
|
||||
return Experiment(
|
||||
job_name=f"weak-cpu-{x:02}-{y:02}-{z:02}",
|
||||
account="cellsinsilico",
|
||||
partition="batch",
|
||||
nastja_binary_path="/p/project/cellsinsilico/paulslustigebude/nastja/build-nocuda/nastja",
|
||||
nodes=num_nodes,
|
||||
tasks=num_blocks,
|
||||
num_blocks=(x, y, z),
|
||||
domain_scale=(x // 4, y // 4, z // 3),
|
||||
)
|
||||
|
||||
|
||||
def make_gpu_ex(x: int, y: int, z: int) -> Experiment:
|
||||
num_blocks = x * y * z
|
||||
gpus_per_node = num_blocks if num_blocks <= 4 else 4
|
||||
num_nodes = 1 if num_blocks <= 4 else num_blocks // 4
|
||||
|
||||
return Experiment(
|
||||
job_name=f"weak-gpu-{x:02}-{y:02}-{z:02}",
|
||||
account="cellsinsilico",
|
||||
partition="gpus",
|
||||
extra_sbatch_line=f"#SBATCH --gres=gpu:{gpus_per_node}",
|
||||
nastja_binary_path="/p/project/cellsinsilico/paulslustigebude/nastja/build-cuda/nastja",
|
||||
nodes=num_nodes,
|
||||
tasks=num_blocks,
|
||||
num_blocks=(x, y, z),
|
||||
domain_scale=(x, y, z),
|
||||
)
|
||||
|
||||
|
||||
def make_booster_ex(x: int, y: int, z: int) -> Experiment:
|
||||
num_blocks = x * y * z
|
||||
gpus_per_node = num_blocks if num_blocks <= 4 else 4
|
||||
num_nodes = 1 if num_blocks <= 4 else num_blocks // 4
|
||||
|
||||
return Experiment(
|
||||
job_name=f"weak-booster-{x:02}-{y:02}-{z:02}",
|
||||
account="hkf6",
|
||||
partition="booster",
|
||||
extra_sbatch_line=f"#SBATCH --gres=gpu:{gpus_per_node}",
|
||||
nastja_binary_path="/p/project/cellsinsilico/paulslustigebude/nastja/build-cuda/nastja",
|
||||
nodes=num_nodes,
|
||||
tasks=num_blocks,
|
||||
num_blocks=(x, y, z),
|
||||
domain_scale=(x, y, z),
|
||||
)
|
||||
|
||||
|
||||
experiments = [
|
||||
make_cpu_ex(4, 4, 3),
|
||||
make_cpu_ex(4, 4, 6),
|
||||
make_cpu_ex(4, 4, 12),
|
||||
make_cpu_ex(4, 8, 12),
|
||||
make_cpu_ex(8, 8, 12),
|
||||
make_cpu_ex(8, 8, 24),
|
||||
make_cpu_ex(8, 16, 24),
|
||||
make_cpu_ex(16, 16, 24),
|
||||
make_cpu_ex(16, 16, 48),
|
||||
|
||||
make_gpu_ex(1, 1, 1),
|
||||
make_gpu_ex(1, 1, 2),
|
||||
make_gpu_ex(1, 2, 2),
|
||||
make_gpu_ex(2, 2, 2),
|
||||
make_gpu_ex(2, 2, 4),
|
||||
make_gpu_ex(2, 4, 4),
|
||||
make_gpu_ex(4, 4, 4),
|
||||
make_gpu_ex(4, 4, 8),
|
||||
|
||||
make_booster_ex(1, 1, 1),
|
||||
make_booster_ex(1, 1, 2),
|
||||
make_booster_ex(1, 2, 2),
|
||||
make_booster_ex(2, 2, 2),
|
||||
make_booster_ex(2, 2, 4),
|
||||
make_booster_ex(2, 4, 4),
|
||||
make_booster_ex(4, 4, 4),
|
||||
make_booster_ex(4, 4, 8),
|
||||
]
|
||||
|
||||
if __name__ == "__main__":
|
||||
outdir = Path(__file__).parent.parent / "generated"
|
||||
|
||||
for e in experiments:
|
||||
print(f"Generating config for {e.job_name}", file=sys.stderr)
|
||||
config_path = (outdir / "config" / e.job_name).with_suffix(".json")
|
||||
with config_path.open("w", encoding="utf8") as f:
|
||||
json.dump(e.get_config(), f, indent=2)
|
||||
print(f"Generating batch file for {e.job_name}", file=sys.stderr)
|
||||
e.write_batch_file(outdir / "batch" / e.job_name)
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
|
||||
import argparse
|
||||
import pandas
|
||||
|
||||
|
||||
def show_seconds(s: float) -> str:
|
||||
return f"{s:.2f}s"
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
p = argparse.ArgumentParser(description="Make a latex table from a timings tsv")
|
||||
p.add_argument("timingfile")
|
||||
p.add_argument("--weak", action="store_true")
|
||||
args = p.parse_args()
|
||||
|
||||
df = pandas.read_csv(args.timingfile, sep="\t")
|
||||
|
||||
for i in range(len(df)):
|
||||
if not args.weak:
|
||||
print(f"{df['nodes'][i]} & {df['tasks'][i]} & {show_seconds(df['mean_time'][i])} & {show_seconds(df['std_time'][i])} & {df['speedup'][i]:.02f} & {df['speedup_error'][i]:.02f} \\\\")
|
||||
else:
|
||||
print(f"{df['nodes'][i]} & {df['tasks'][i]} & {show_seconds(df['mean_time'][i])} & {show_seconds(df['std_time'][i])} & {df['efficiency'][i]:.02f} & {df['efficiency_error'][i]:.02f} \\\\")
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import jinja2
|
||||
import json
|
||||
import sys
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
data = json.load(sys.stdin)
|
||||
|
||||
templates_env = jinja2.Environment(
|
||||
loader=jinja2.FileSystemLoader(Path(__file__).parent.parent / "templates"),
|
||||
autoescape=jinja2.select_autoescape()
|
||||
)
|
||||
|
||||
for possibly_incomplete_batch in data["batches"]:
|
||||
batch = dict(list(data["common"].items()) + list(possibly_incomplete_batch.items()))
|
||||
out_path = Path(__file__).parent.parent / "generated" / "batch" / batch["name"]
|
||||
t = templates_env.get_template(sys.argv[1])
|
||||
print(f"Dumping to {out_path}")
|
||||
t.stream(**batch).dump(str(out_path))
|
||||
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
|
||||
import timing
|
||||
|
||||
|
||||
ignore = ["TimeStep"]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("jobs", nargs="+")
|
||||
p.add_argument("--normalize", action="store_true")
|
||||
p.add_argument("--extra-columns", nargs="*")
|
||||
args = p.parse_args()
|
||||
|
||||
columns = [
|
||||
"BC:cells",
|
||||
"BC:dynamicecm",
|
||||
"Sweep:Cells",
|
||||
"Sweep:DynamicECM",
|
||||
"Sweep:DynamicECMDampers",
|
||||
] + (args.extra_columns or [])
|
||||
|
||||
dfs = dict()
|
||||
labels = []
|
||||
for label, jobid in [jobarg.split(":") for jobarg in args.jobs]:
|
||||
jobs, excluded_array_indices = timing.get_jobs(jobid)
|
||||
df = timing.load_array_mean_timings(jobid, excluded_array_indices).mean()
|
||||
dfs[label] = df
|
||||
labels.extend(df.index)
|
||||
|
||||
labels = set(labels)
|
||||
print(",".join(["label"] + columns + ["Other"]))
|
||||
|
||||
values_by_label = dict()
|
||||
for label, df in dfs.items():
|
||||
values = {"Other": 0}
|
||||
for c in df.index:
|
||||
if c in ignore:
|
||||
continue
|
||||
elif c not in columns:
|
||||
values["Other"] += df[c]
|
||||
print(f"Others+= {c}={df[c]}", file=sys.stderr)
|
||||
else:
|
||||
values[c] = df[c]
|
||||
values_by_label[label] = values
|
||||
|
||||
if args.normalize:
|
||||
print("Normalizing data to 100%...", file=sys.stderr)
|
||||
for values in values_by_label.values():
|
||||
row_length = sum(values.values())
|
||||
for c in values.keys():
|
||||
values[c] *= 100 / row_length
|
||||
|
||||
for label, values in values_by_label.items():
|
||||
print(label + "," + ",".join(f"{values[c]}" for c in columns + ["Other"]))
|
||||
@@ -0,0 +1,116 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import pandas
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def load_timing_file(timing_path: Path):
|
||||
df = pandas.read_csv(timing_path, delim_whitespace=True)
|
||||
headers = list(df["#Name"][1:])
|
||||
times = list(df["TotalTime"][1:])
|
||||
return pandas.DataFrame([times], columns=headers)
|
||||
|
||||
|
||||
def load_all_timings(outdir_path: Path):
|
||||
timingdir_path = outdir_path / "timing"
|
||||
timing_paths = sorted(timingdir_path.iterdir())
|
||||
|
||||
print(f"Loading {len(timing_paths)} timing files from {timingdir_path}...", file=sys.stderr)
|
||||
dfs = []
|
||||
for i, timing_path in enumerate(timing_paths, 1):
|
||||
dfs.append(load_timing_file(timing_path))
|
||||
sys.stderr.write("\x1b[1K\r")
|
||||
sys.stderr.flush()
|
||||
print(f"[{i:8}/{len(timing_paths):8}] {i/len(timing_paths)*100:6.2f}%", file=sys.stderr, end="", flush=True)
|
||||
print(file=sys.stderr, flush=True)
|
||||
|
||||
return pandas.concat(dfs)
|
||||
|
||||
|
||||
def load_mean_timings(outdir_path: Path):
|
||||
df = load_all_timings(outdir_path)
|
||||
return df.mean() / 1000000
|
||||
|
||||
|
||||
def get_outdirs(jobid: str):
|
||||
print(f"Globbing for {jobid}...", file=sys.stderr)
|
||||
return sorted(Path("/p/scratch/cellsinsilico/paul/nastja-out").glob(f"*{jobid}*"))
|
||||
|
||||
|
||||
def load_array_mean_timings(jobid: str, excluded_array_indices):
|
||||
mts = []
|
||||
for outdir_path in get_outdirs(jobid):
|
||||
if any(str(outdir_path).endswith(str(i)) for i in excluded_array_indices):
|
||||
print(f"Not loading timings for {outdir_path} because it was excluded.", file=sys.stderr)
|
||||
continue
|
||||
mts.append(load_mean_timings(outdir_path))
|
||||
|
||||
return pandas.DataFrame(list(mts), columns=mts[0].index)
|
||||
|
||||
|
||||
def get_mean_mean_totaltimes(jobid: str):
|
||||
return load_array_mean_timings(jobid).mean()
|
||||
|
||||
|
||||
def get_std_mean_totaltimes(jobid: str):
|
||||
return load_array_mean_timings(jobid).std()
|
||||
|
||||
|
||||
def get_accounting_data(jobid: str):
|
||||
sacct_results = subprocess.run(
|
||||
["sacct", "--json", "--jobs", jobid],
|
||||
check=True, # Throw on non-zero exit code,
|
||||
capture_output=True
|
||||
)
|
||||
return json.loads(sacct_results.stdout.decode("utf8"))
|
||||
|
||||
|
||||
def get_jobs(jobid: str):
|
||||
accounting_data = get_accounting_data(jobid)
|
||||
jobs = []
|
||||
excluded_array_indices = []
|
||||
for array_job in accounting_data["jobs"]:
|
||||
# Get metadata related to array
|
||||
array_main_job = array_job["array"]["job_id"]
|
||||
array_index = array_job["array"]["task_id"]
|
||||
# The last step is the actual job we want the data for
|
||||
# The steps before set up cluster etc.
|
||||
last_step = array_job["steps"][-1]
|
||||
if last_step["state"] != "COMPLETED":
|
||||
print(f"WARNING: {array_main_job}.{array_index} has state {last_step['state']}, excluding it from measurements", file=sys.stderr)
|
||||
excluded_array_indices.append(array_index)
|
||||
continue
|
||||
jobs.append(last_step)
|
||||
|
||||
return jobs, excluded_array_indices
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
p = argparse.ArgumentParser(description="Load and analzye data from nastja timing files")
|
||||
p.add_argument("jobid", nargs="+")
|
||||
p.add_argument("--prettify", action="store_true")
|
||||
p.add_argument("--dump-timings", action="store_true")
|
||||
args = p.parse_args()
|
||||
|
||||
results = []
|
||||
for i, jobid in enumerate(args.jobid, 1):
|
||||
print(f"({i:2}/{len(args.jobid):2}) Loading accounting data for {jobid}", file=sys.stderr)
|
||||
jobs, excluded_array_indices = get_jobs(jobid)
|
||||
array_mean_timings = load_array_mean_timings(jobid, excluded_array_indices)
|
||||
if args.dump_timings:
|
||||
print(array_mean_timings, file=sys.stderr)
|
||||
|
||||
results.append({
|
||||
"jobid": jobid,
|
||||
"means": array_mean_timings.mean().to_dict(),
|
||||
"stds": array_mean_timings.std().to_dict(),
|
||||
"accounting": jobs
|
||||
})
|
||||
print(json.dumps(results, indent=2 if args.prettify else None))
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"common": {
|
||||
"account": "hkf6",
|
||||
"partition": "booster",
|
||||
"extra_sbatch_line": "#SBATCH --gres=gpu:4",
|
||||
"logfile_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a",
|
||||
"nastja_binary_path": "/p/project/cellsinsilico/paulslustigebude/nastja/build-cuda/nastja",
|
||||
"config_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json",
|
||||
"output_dir_path": "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}"
|
||||
},
|
||||
"batches": [
|
||||
{
|
||||
"name": "strong-booster-01-01-01",
|
||||
"nodes": 1,
|
||||
"tasks": 1,
|
||||
"time": "00:15:00",
|
||||
"extra_sbatch_line": "#SBATCH --gres=gpu:1"
|
||||
},
|
||||
{
|
||||
"name": "strong-booster-01-01-02",
|
||||
"nodes": 1,
|
||||
"tasks": 2,
|
||||
"time": "00:15:00",
|
||||
"extra_sbatch_line": "#SBATCH --gres=gpu:2"
|
||||
},
|
||||
{
|
||||
"name": "strong-booster-01-02-02",
|
||||
"nodes": 1,
|
||||
"tasks": 4,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-booster-02-02-02",
|
||||
"nodes": 2,
|
||||
"tasks": 8,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-booster-02-02-04",
|
||||
"nodes": 4,
|
||||
"tasks": 16,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-booster-02-04-04",
|
||||
"nodes": 8,
|
||||
"tasks": 32,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-booster-04-04-04",
|
||||
"nodes": 16,
|
||||
"tasks": 64,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-booster-04-04-08",
|
||||
"nodes": 32,
|
||||
"tasks": 128,
|
||||
"time": "00:15:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"common": {
|
||||
"account": "cellsinsilico",
|
||||
"partition": "batch",
|
||||
"extra_sbatch_line": "",
|
||||
"logfile_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a",
|
||||
"nastja_binary_path": "/p/project/cellsinsilico/paulslustigebude/nastja/build-nocuda/nastja",
|
||||
"config_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json",
|
||||
"output_dir_path": "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}"
|
||||
},
|
||||
"batches": [
|
||||
{
|
||||
"name": "strong-cpu-04-04-03",
|
||||
"nodes": 1,
|
||||
"tasks": 48,
|
||||
"time": "01:00:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-cpu-04-04-06",
|
||||
"nodes": 2,
|
||||
"tasks": 96,
|
||||
"time": "01:00:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-cpu-04-04-12",
|
||||
"nodes": 4,
|
||||
"tasks": 192,
|
||||
"time": "00:20:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-cpu-04-08-12",
|
||||
"nodes": 8,
|
||||
"tasks": 384,
|
||||
"time": "00:10:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-cpu-08-08-12",
|
||||
"nodes": 16,
|
||||
"tasks": 768,
|
||||
"time": "00:10:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-cpu-08-08-24",
|
||||
"nodes": 32,
|
||||
"tasks": 1536,
|
||||
"time": "00:10:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-cpu-08-16-24",
|
||||
"nodes": 64,
|
||||
"tasks": 3072,
|
||||
"time": "00:10:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-cpu-16-16-24",
|
||||
"nodes": 128,
|
||||
"tasks": 6144,
|
||||
"time": "00:10:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-cpu-16-16-48",
|
||||
"nodes": 256,
|
||||
"tasks": 12288,
|
||||
"time": "00:10:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"common": {
|
||||
"account": "cellsinsilico",
|
||||
"partition": "gpus",
|
||||
"extra_sbatch_line": "#SBATCH --gres=gpu:4",
|
||||
"logfile_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a",
|
||||
"nastja_binary_path": "/p/project/cellsinsilico/paulslustigebude/nastja/build-cuda/nastja",
|
||||
"config_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json",
|
||||
"output_dir_path": "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}"
|
||||
},
|
||||
"batches": [
|
||||
{
|
||||
"name": "strong-gpu-01-01-01",
|
||||
"nodes": 1,
|
||||
"tasks": 1,
|
||||
"time": "00:15:00",
|
||||
"extra_sbatch_line": "#SBATCH --gres=gpu:1"
|
||||
},
|
||||
{
|
||||
"name": "strong-gpu-01-01-02",
|
||||
"nodes": 1,
|
||||
"tasks": 2,
|
||||
"time": "00:15:00",
|
||||
"extra_sbatch_line": "#SBATCH --gres=gpu:2"
|
||||
},
|
||||
{
|
||||
"name": "strong-gpu-01-02-02",
|
||||
"nodes": 1,
|
||||
"tasks": 4,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-gpu-02-02-02",
|
||||
"nodes": 2,
|
||||
"tasks": 8,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-gpu-02-02-04",
|
||||
"nodes": 4,
|
||||
"tasks": 16,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-gpu-02-04-04",
|
||||
"nodes": 8,
|
||||
"tasks": 32,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-gpu-04-04-04",
|
||||
"nodes": 16,
|
||||
"tasks": 64,
|
||||
"time": "00:15:00"
|
||||
},
|
||||
{
|
||||
"name": "strong-gpu-04-04-08",
|
||||
"nodes": 32,
|
||||
"tasks": 128,
|
||||
"time": "00:15:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name={{ name }}
|
||||
#SBATCH --account={{ account }}
|
||||
#SBATCH --partition={{ partition }}
|
||||
#SBATCH --nodes={{ nodes }}
|
||||
#SBATCH --ntasks={{ tasks }}
|
||||
# Counted per node
|
||||
{{ extra_sbatch_line }}
|
||||
#SBATCH --time={{ time }}
|
||||
#SBATCH --output={{ logfile_path }}
|
||||
#SBATCH --error={{ logfile_path }}
|
||||
#SBATCH --array=1-5
|
||||
|
||||
NASTJA_BINARY="{{ nastja_binary_path }}"
|
||||
CONFIG_FILE="{{ config_path }}"
|
||||
OUTPUT_DIR="{{ output_dir_path }}"
|
||||
module load Stages/2024 GCC/12.3.0 ParaStationMPI/5.9.2-1 CMake/3.26.3 mold/1.11.0 jq/1.6 git Python
|
||||
|
||||
echo "${NASTJA_BINARY_PATH}"
|
||||
echo "${CONFIG_FILE}"
|
||||
echo "${OUTPUT_DIR}"
|
||||
|
||||
cat "${CONFIG_FILE}"
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
|
||||
srun "${NASTJA_BINARY}" \
|
||||
-c "${CONFIG_FILE}" \
|
||||
-o "${OUTPUT_DIR}"
|
||||
|
||||
@@ -0,0 +1,263 @@
|
||||
{
|
||||
"Application": "Cells",
|
||||
"CellsInSilico": {
|
||||
"2D": false,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 450.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0]
|
||||
],
|
||||
"polarityenabled": false
|
||||
},
|
||||
"centerofmass": {
|
||||
"steps": 1
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 0,
|
||||
"steps": 100
|
||||
},
|
||||
"contactinhibition": {
|
||||
"enabled": false
|
||||
},
|
||||
"division": {
|
||||
"condition": [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"
|
||||
],
|
||||
"enabled": true,
|
||||
"halveSignals": false
|
||||
},
|
||||
"dynamicecm": {
|
||||
"alpha": 2.0,
|
||||
"beta": 0.5,
|
||||
"c": 4.0,
|
||||
"deltat": 0.10000000149011612,
|
||||
"ecmCellID": 0,
|
||||
"enabled": true,
|
||||
"eta": 0.25,
|
||||
"k0": 0.10000000149011612,
|
||||
"k1": 0.10000000149011612,
|
||||
"lambda": 10.0,
|
||||
"phi": 1.0,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 0.5,
|
||||
"stepsPerMcs": 100
|
||||
},
|
||||
"ecmdegradation": {
|
||||
"enabled": false
|
||||
},
|
||||
"energyfunctions": [
|
||||
"Volume00",
|
||||
"Surface01",
|
||||
"Motility00",
|
||||
"Adhesion01",
|
||||
"DynamicECM00"
|
||||
],
|
||||
"liquid": 6,
|
||||
"logcellproperties": {
|
||||
"enabled": false
|
||||
},
|
||||
"orientation": {
|
||||
"enabled": true,
|
||||
"motility": "persistentRandomWalk",
|
||||
"motilityamount": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"numRandomNumbers": 5,
|
||||
"persistenceMagnitude": 0.0,
|
||||
"persistentDecay": 0.8,
|
||||
"recalculationtime": 200
|
||||
},
|
||||
"polarity": {
|
||||
"enabled": false
|
||||
},
|
||||
"signaling": {
|
||||
"constant": false,
|
||||
"enabled": false
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 400.0
|
||||
},
|
||||
"lambda": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
5.625,
|
||||
5.625,
|
||||
1.0
|
||||
],
|
||||
"sizechange": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.05,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"temperature": 50.0,
|
||||
"visitor": {
|
||||
"checkerboard": "01",
|
||||
"stepwidth": 10
|
||||
},
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 500.0
|
||||
},
|
||||
"lambda": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
7.5,
|
||||
7.5,
|
||||
7.5
|
||||
],
|
||||
"sizechange": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.05,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
}
|
||||
},
|
||||
"DefineFunctions": [
|
||||
"r_angle()=360*rnd()",
|
||||
"r_size()=400*rnd()"
|
||||
],
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"box": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
384,
|
||||
384,
|
||||
384
|
||||
]
|
||||
],
|
||||
"celltype": 0,
|
||||
"component": 0,
|
||||
"pattern": "const",
|
||||
"seed": 0,
|
||||
"shape": "cube",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"box": [
|
||||
[117, 117, 177],
|
||||
[267, 267, 267]
|
||||
],
|
||||
"celltype": 9,
|
||||
"center": [192, 192, 192],
|
||||
"component": 0,
|
||||
"count": 5500,
|
||||
"pattern": "voronoi",
|
||||
"radius": 75,
|
||||
"seed": 758960,
|
||||
"shape": "sphere",
|
||||
"value": 8
|
||||
}
|
||||
],
|
||||
"initialoutput": false,
|
||||
"randomseed": 758959
|
||||
},
|
||||
"Geometry": {
|
||||
"blockcount": [
|
||||
4,
|
||||
4,
|
||||
3
|
||||
],
|
||||
"blockdefault": "fill",
|
||||
"blocksize": [
|
||||
96,
|
||||
96,
|
||||
128
|
||||
],
|
||||
"blocktype": [
|
||||
[
|
||||
[
|
||||
1
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
"Settings": {
|
||||
"deltat": 1.0,
|
||||
"deltax": 1.0,
|
||||
"handleFPE": "signal",
|
||||
"logger": {
|
||||
"group": 0,
|
||||
"steps": 100
|
||||
},
|
||||
"randomseed": 42,
|
||||
"statusoutput": 1,
|
||||
"timestepguard": 1,
|
||||
"timesteps": 10,
|
||||
"cuda": {
|
||||
"subblocks": {
|
||||
"blockDim": [8, 8, 8]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
{
|
||||
"Application": "Cells",
|
||||
"CellsInSilico": {
|
||||
"2D": false,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 450.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0]
|
||||
],
|
||||
"polarityenabled": false
|
||||
},
|
||||
"centerofmass": {
|
||||
"steps": 1
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 0,
|
||||
"steps": 100
|
||||
},
|
||||
"contactinhibition": {
|
||||
"enabled": false
|
||||
},
|
||||
"division": {
|
||||
"condition": [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"
|
||||
],
|
||||
"enabled": true,
|
||||
"halveSignals": false
|
||||
},
|
||||
"dynamicecm": {
|
||||
"alpha": 2.0,
|
||||
"beta": 0.5,
|
||||
"c": 4.0,
|
||||
"deltat": 0.10000000149011612,
|
||||
"ecmCellID": 0,
|
||||
"enabled": true,
|
||||
"eta": 0.25,
|
||||
"k0": 0.10000000149011612,
|
||||
"k1": 0.10000000149011612,
|
||||
"lambda": 10.0,
|
||||
"phi": 1.0,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 0.5,
|
||||
"stepsPerMcs": 100
|
||||
},
|
||||
"ecmdegradation": {
|
||||
"enabled": false
|
||||
},
|
||||
"energyfunctions": [
|
||||
"Volume00",
|
||||
"Surface01",
|
||||
"Motility00",
|
||||
"Adhesion01",
|
||||
"DynamicECM00"
|
||||
],
|
||||
"liquid": 6,
|
||||
"logcellproperties": {
|
||||
"enabled": false
|
||||
},
|
||||
"orientation": {
|
||||
"enabled": true,
|
||||
"motility": "persistentRandomWalk",
|
||||
"motilityamount": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"numRandomNumbers": 5,
|
||||
"persistenceMagnitude": 0.0,
|
||||
"persistentDecay": 0.8,
|
||||
"recalculationtime": 200
|
||||
},
|
||||
"polarity": {
|
||||
"enabled": false
|
||||
},
|
||||
"signaling": {
|
||||
"constant": false,
|
||||
"enabled": false
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 400.0
|
||||
},
|
||||
"lambda": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
5.625,
|
||||
5.625,
|
||||
1.0
|
||||
],
|
||||
"sizechange": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.05,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"temperature": 50.0,
|
||||
"visitor": {
|
||||
"checkerboard": "01",
|
||||
"stepwidth": 10
|
||||
},
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 500.0
|
||||
},
|
||||
"lambda": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
7.5,
|
||||
7.5,
|
||||
7.5
|
||||
],
|
||||
"sizechange": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.05,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
}
|
||||
},
|
||||
"DefineFunctions": [
|
||||
"r_angle()=360*rnd()",
|
||||
"r_size()=400*rnd()"
|
||||
],
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"box": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
384,
|
||||
384,
|
||||
384
|
||||
]
|
||||
],
|
||||
"celltype": 0,
|
||||
"component": 0,
|
||||
"pattern": "const",
|
||||
"seed": 0,
|
||||
"shape": "cube",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"box": [
|
||||
[117, 117, 177],
|
||||
[267, 267, 267]
|
||||
],
|
||||
"celltype": 9,
|
||||
"center": [192, 192, 192],
|
||||
"component": 0,
|
||||
"count": 5500,
|
||||
"pattern": "voronoi",
|
||||
"radius": 75,
|
||||
"seed": 758960,
|
||||
"shape": "sphere",
|
||||
"value": 8
|
||||
}
|
||||
],
|
||||
"initialoutput": false,
|
||||
"randomseed": 758959
|
||||
},
|
||||
"Geometry": {
|
||||
"blockcount": [
|
||||
4,
|
||||
4,
|
||||
3
|
||||
],
|
||||
"blockdefault": "fill",
|
||||
"blocksize": [
|
||||
96,
|
||||
96,
|
||||
128
|
||||
],
|
||||
"blocktype": [
|
||||
[
|
||||
[
|
||||
1
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
"Settings": {
|
||||
"deltat": 1.0,
|
||||
"deltax": 1.0,
|
||||
"handleFPE": "signal",
|
||||
"logger": {
|
||||
"group": 0,
|
||||
"steps": 100
|
||||
},
|
||||
"randomseed": 42,
|
||||
"statusoutput": 1,
|
||||
"timestepguard": 1,
|
||||
"timesteps": 10
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,263 @@
|
||||
{
|
||||
"Application": "Cells",
|
||||
"CellsInSilico": {
|
||||
"2D": false,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 450.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0]
|
||||
],
|
||||
"polarityenabled": false
|
||||
},
|
||||
"centerofmass": {
|
||||
"steps": 1
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 0,
|
||||
"steps": 100
|
||||
},
|
||||
"contactinhibition": {
|
||||
"enabled": false
|
||||
},
|
||||
"division": {
|
||||
"condition": [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"
|
||||
],
|
||||
"enabled": true,
|
||||
"halveSignals": false
|
||||
},
|
||||
"dynamicecm": {
|
||||
"alpha": 2.0,
|
||||
"beta": 0.5,
|
||||
"c": 4.0,
|
||||
"deltat": 0.10000000149011612,
|
||||
"ecmCellID": 0,
|
||||
"enabled": true,
|
||||
"eta": 0.25,
|
||||
"k0": 0.10000000149011612,
|
||||
"k1": 0.10000000149011612,
|
||||
"lambda": 10.0,
|
||||
"phi": 1.0,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 0.5,
|
||||
"stepsPerMcs": 100
|
||||
},
|
||||
"ecmdegradation": {
|
||||
"enabled": false
|
||||
},
|
||||
"energyfunctions": [
|
||||
"Volume00",
|
||||
"Surface01",
|
||||
"Motility00",
|
||||
"Adhesion01",
|
||||
"DynamicECM00"
|
||||
],
|
||||
"liquid": 6,
|
||||
"logcellproperties": {
|
||||
"enabled": false
|
||||
},
|
||||
"orientation": {
|
||||
"enabled": true,
|
||||
"motility": "persistentRandomWalk",
|
||||
"motilityamount": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"numRandomNumbers": 5,
|
||||
"persistenceMagnitude": 0.0,
|
||||
"persistentDecay": 0.8,
|
||||
"recalculationtime": 200
|
||||
},
|
||||
"polarity": {
|
||||
"enabled": false
|
||||
},
|
||||
"signaling": {
|
||||
"constant": false,
|
||||
"enabled": false
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 400.0
|
||||
},
|
||||
"lambda": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
5.625,
|
||||
5.625,
|
||||
1.0
|
||||
],
|
||||
"sizechange": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.05,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"temperature": 50.0,
|
||||
"visitor": {
|
||||
"checkerboard": "01",
|
||||
"stepwidth": 10
|
||||
},
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 500.0
|
||||
},
|
||||
"lambda": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
7.5,
|
||||
7.5,
|
||||
7.5
|
||||
],
|
||||
"sizechange": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.05,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
}
|
||||
},
|
||||
"DefineFunctions": [
|
||||
"r_angle()=360*rnd()",
|
||||
"r_size()=400*rnd()"
|
||||
],
|
||||
"Filling": {
|
||||
"cells": [
|
||||
{
|
||||
"box": [
|
||||
[
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
384,
|
||||
384,
|
||||
384
|
||||
]
|
||||
],
|
||||
"celltype": 0,
|
||||
"component": 0,
|
||||
"pattern": "const",
|
||||
"seed": 0,
|
||||
"shape": "cube",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"box": [
|
||||
[117, 117, 177],
|
||||
[267, 267, 267]
|
||||
],
|
||||
"celltype": 9,
|
||||
"center": [192, 192, 192],
|
||||
"component": 0,
|
||||
"count": 5500,
|
||||
"pattern": "voronoi",
|
||||
"radius": 75,
|
||||
"seed": 758960,
|
||||
"shape": "sphere",
|
||||
"value": 8
|
||||
}
|
||||
],
|
||||
"initialoutput": false,
|
||||
"randomseed": 758959
|
||||
},
|
||||
"Geometry": {
|
||||
"blockcount": [
|
||||
4,
|
||||
4,
|
||||
3
|
||||
],
|
||||
"blockdefault": "fill",
|
||||
"blocksize": [
|
||||
96,
|
||||
96,
|
||||
128
|
||||
],
|
||||
"blocktype": [
|
||||
[
|
||||
[
|
||||
1
|
||||
]
|
||||
]
|
||||
]
|
||||
},
|
||||
"Settings": {
|
||||
"deltat": 1.0,
|
||||
"deltax": 1.0,
|
||||
"handleFPE": "signal",
|
||||
"logger": {
|
||||
"group": 0,
|
||||
"steps": 100
|
||||
},
|
||||
"randomseed": 42,
|
||||
"statusoutput": 1,
|
||||
"timestepguard": 1,
|
||||
"timesteps": 10,
|
||||
"cuda": {
|
||||
"subblocks": {
|
||||
"blockDim": [8, 8, 8]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
{
|
||||
"Application": "Cells",
|
||||
"CellsInSilico": {
|
||||
"2D": false,
|
||||
"adhesion": {
|
||||
"matrix": [
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 450.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[0.0, 450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0]
|
||||
],
|
||||
"polarityenabled": false
|
||||
},
|
||||
"centerofmass": {
|
||||
"steps": 1
|
||||
},
|
||||
"cleaner": {
|
||||
"killdistance": 0,
|
||||
"steps": 100
|
||||
},
|
||||
"contactinhibition": {
|
||||
"enabled": false
|
||||
},
|
||||
"division": {
|
||||
"condition": [
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"
|
||||
],
|
||||
"enabled": true,
|
||||
"halveSignals": false
|
||||
},
|
||||
"dynamicecm": {
|
||||
"alpha": 2.0,
|
||||
"beta": 0.5,
|
||||
"c": 4.0,
|
||||
"deltat": 0.1,
|
||||
"ecmCellID": 0,
|
||||
"enabled": true,
|
||||
"eta": 0.25,
|
||||
"k0": 0.1,
|
||||
"k1": 0.1,
|
||||
"lambda": 10.0,
|
||||
"phi": 1.0,
|
||||
"pushSteps": 10,
|
||||
"pushWeight": 0.5,
|
||||
"stepsPerMcs": 100
|
||||
},
|
||||
"ecmdegradation": {
|
||||
"enabled": false
|
||||
},
|
||||
"energyfunctions": [
|
||||
"Volume00",
|
||||
"Surface01",
|
||||
"Motility00",
|
||||
"Adhesion01",
|
||||
"DynamicECM00"
|
||||
],
|
||||
"liquid": 6,
|
||||
"logcellproperties": {
|
||||
"enabled": false
|
||||
},
|
||||
"orientation": {
|
||||
"enabled": true,
|
||||
"motility": "persistentRandomWalk",
|
||||
"motilityamount": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"numRandomNumbers": 5,
|
||||
"persistenceMagnitude": 0.0,
|
||||
"persistentDecay": 0.8,
|
||||
"recalculationtime": 200
|
||||
},
|
||||
"polarity": {
|
||||
"enabled": false
|
||||
},
|
||||
"signaling": {
|
||||
"constant": false,
|
||||
"enabled": false
|
||||
},
|
||||
"surface": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 400.0
|
||||
},
|
||||
"lambda": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
5.625,
|
||||
5.625,
|
||||
1.0
|
||||
],
|
||||
"sizechange": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.05,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"temperature": 50.0,
|
||||
"visitor": {
|
||||
"checkerboard": "01",
|
||||
"stepwidth": 10
|
||||
},
|
||||
"volume": {
|
||||
"default": {
|
||||
"storage": "const",
|
||||
"value": 500.0
|
||||
},
|
||||
"lambda": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
7.5,
|
||||
7.5,
|
||||
7.5
|
||||
],
|
||||
"sizechange": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-0.05,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
}
|
||||
},
|
||||
"DefineFunctions": [
|
||||
"r_angle()=360*rnd()",
|
||||
"r_size()=400*rnd()"
|
||||
],
|
||||
"Filling": {
|
||||
"initialoutput": false,
|
||||
"randomseed": 758959
|
||||
},
|
||||
"Settings": {
|
||||
"randomseed": 42,
|
||||
"statusoutput": 1,
|
||||
"timesteps": 10
|
||||
}
|
||||
}
|
||||
@@ -1,98 +1 @@
|
||||
anyio==3.7.0
|
||||
argon2-cffi==21.3.0
|
||||
argon2-cffi-bindings==21.2.0
|
||||
arrow==1.2.3
|
||||
asttokens==2.2.1
|
||||
async-lru==2.0.2
|
||||
attrs==23.1.0
|
||||
Babel==2.12.1
|
||||
backcall==0.2.0
|
||||
beautifulsoup4==4.12.2
|
||||
bleach==6.0.0
|
||||
certifi==2023.5.7
|
||||
cffi==1.15.1
|
||||
charset-normalizer==3.1.0
|
||||
comm==0.1.3
|
||||
contourpy==1.1.0
|
||||
cycler==0.11.0
|
||||
debugpy==1.6.7
|
||||
decorator==5.1.1
|
||||
defusedxml==0.7.1
|
||||
exceptiongroup==1.1.1
|
||||
executing==1.2.0
|
||||
fastjsonschema==2.17.1
|
||||
fonttools==4.40.0
|
||||
fqdn==1.5.1
|
||||
idna==3.4
|
||||
ipykernel==6.23.2
|
||||
ipython==8.14.0
|
||||
ipywidgets==8.0.6
|
||||
isoduration==20.11.0
|
||||
jedi==0.18.2
|
||||
Jinja2==3.1.2
|
||||
json5==0.9.14
|
||||
jsonpointer==2.3
|
||||
jsonschema==4.17.3
|
||||
jupyter-events==0.6.3
|
||||
jupyter-lsp==2.2.0
|
||||
jupyter_client==8.2.0
|
||||
jupyter_core==5.3.1
|
||||
jupyter_server==2.6.0
|
||||
jupyter_server_terminals==0.4.4
|
||||
jupyterlab==4.0.2
|
||||
jupyterlab-pygments==0.2.2
|
||||
jupyterlab-widgets==3.0.7
|
||||
jupyterlab_server==2.23.0
|
||||
kiwisolver==1.4.4
|
||||
MarkupSafe==2.1.3
|
||||
matplotlib==3.7.1
|
||||
matplotlib-inline==0.1.6
|
||||
mistune==2.0.5
|
||||
nbclient==0.8.0
|
||||
nbconvert==7.5.0
|
||||
nbformat==5.9.0
|
||||
nest-asyncio==1.5.6
|
||||
notebook_shim==0.2.3
|
||||
numpy==1.24.3
|
||||
overrides==7.3.1
|
||||
packaging==23.1
|
||||
pandocfilters==1.5.0
|
||||
parso==0.8.3
|
||||
pexpect==4.8.0
|
||||
pickleshare==0.7.5
|
||||
Pillow==9.5.0
|
||||
platformdirs==3.5.3
|
||||
prometheus-client==0.17.0
|
||||
prompt-toolkit==3.0.38
|
||||
psutil==5.9.5
|
||||
ptyprocess==0.7.0
|
||||
pure-eval==0.2.2
|
||||
pycparser==2.21
|
||||
Pygments==2.15.1
|
||||
pyparsing==3.0.9
|
||||
pyrsistent==0.19.3
|
||||
python-dateutil==2.8.2
|
||||
python-json-logger==2.0.7
|
||||
PyYAML==6.0
|
||||
pyzmq==25.1.0
|
||||
requests==2.31.0
|
||||
rfc3339-validator==0.1.4
|
||||
rfc3986-validator==0.1.1
|
||||
Send2Trash==1.8.2
|
||||
six==1.16.0
|
||||
sniffio==1.3.0
|
||||
soupsieve==2.4.1
|
||||
stack-data==0.6.2
|
||||
terminado==0.17.1
|
||||
tinycss2==1.2.1
|
||||
tomli==2.0.1
|
||||
tornado==6.3.2
|
||||
traitlets==5.9.0
|
||||
typing_extensions==4.6.3
|
||||
uri-template==1.2.0
|
||||
urllib3==2.0.3
|
||||
wcwidth==0.2.6
|
||||
webcolors==1.13
|
||||
webencodings==0.5.1
|
||||
websocket-client==1.5.3
|
||||
widgetsnbextension==4.0.7
|
||||
click==8.1.7
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
import copy
|
||||
import json
|
||||
|
||||
from typing import Tuple
|
||||
|
||||
from toolkit import Configuration
|
||||
|
||||
SIZE_X = 400
|
||||
SIZE_Y = 400
|
||||
SIZE_Z = 400
|
||||
|
||||
def make_config(gpus: int, blockcount: Tuple[int, int, int]) -> Configuration:
|
||||
assert gpus % 4 == 0
|
||||
assert SIZE_X % blockcount[0] == 0
|
||||
assert SIZE_Y % blockcount[1] == 0
|
||||
assert SIZE_Z % blockcount[2] == 0
|
||||
assert blockcount[0] * blockcount[1] * blockcount[2] == gpus
|
||||
|
||||
return Configuration(
|
||||
gpus // 4,
|
||||
gpus,
|
||||
4,
|
||||
blockcount,
|
||||
(SIZE_X // blockcount[0], SIZE_Y // blockcount[1], SIZE_Z // blockcount[2])
|
||||
)
|
||||
|
||||
configurations = [
|
||||
Configuration(1, 1, 1, (1, 1, 1), (400, 400, 400)),
|
||||
Configuration(1, 2, 2, (1, 1, 2), (400, 400, 200)),
|
||||
Configuration(1, 2, 2, (1, 2, 1), (400, 200, 400)),
|
||||
Configuration(1, 2, 2, (2, 1, 1), (200, 400, 400)),
|
||||
make_config(4, (1, 1, 4)),
|
||||
make_config(4, (1, 4, 1)),
|
||||
make_config(4, (4, 1, 1)),
|
||||
make_config(4, (1, 2, 2)),
|
||||
make_config(4, (2, 1, 2)),
|
||||
make_config(4, (2, 2, 1)),
|
||||
make_config(8, (2, 2, 2)),
|
||||
make_config(8, (1, 2, 4)),
|
||||
make_config(16, (1, 4, 4)),
|
||||
make_config(16, (2, 2, 4)),
|
||||
make_config(32, (2, 4, 4)),
|
||||
make_config(64, (4, 4, 4)),
|
||||
make_config(128, (4, 4, 8)),
|
||||
make_config(256, (4, 8, 8)),
|
||||
make_config(512, (8, 8, 8)),
|
||||
make_config(1024, (8, 8, 16)),
|
||||
make_config(2048, (8, 16, 16))
|
||||
]
|
||||
|
||||
with open("templates/spheroid.json") as template_file:
|
||||
template = json.load(template_file)
|
||||
|
||||
for c in configurations:
|
||||
print(c)
|
||||
assert(c.get_domain_size() == configurations[0].get_domain_size())
|
||||
|
||||
nastja_config = copy.deepcopy(template)
|
||||
|
||||
nastja_config["Geometry"]["blockcount"] = c.blockcount
|
||||
nastja_config["Geometry"]["blocksize"] = c.blocksize
|
||||
|
||||
label = c.get_label()
|
||||
|
||||
with open(f"configs/measurements/strong/spheroid_{label}.json", "w") as config_file:
|
||||
json.dump(nastja_config, config_file, indent=2)
|
||||
|
||||
batch_config = f"""#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name=strong-{label}
|
||||
#SBATCH --account=hkf6
|
||||
#SBATCH --partition=booster
|
||||
#SBATCH --nodes={c.nodes}
|
||||
#SBATCH --ntasks={c.tasks}
|
||||
# Counted per node
|
||||
#SBATCH --gres=gpu:{c.gpus_per_node}
|
||||
#SBATCH --time=00:30:00
|
||||
#SBATCH --output=logs/strong-{label}-%A_%a.log
|
||||
#SBATCH --error=logs/strong-{label}-%A_%a.log
|
||||
#SBATCH --array=1-5
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR="/p/scratch/cellsinsilico/paul/nastja-out/strong-{label}-${{SLURM_ARRAY_TASK_ID}}"
|
||||
|
||||
echo "outdir is ${{OUTPUT_DIR}}"
|
||||
|
||||
mkdir -p "${{OUTPUT_DIR}}"
|
||||
source "${{SOURCE_DIR}}/activate-nastja-modules"
|
||||
|
||||
srun --unbuffered "${{SOURCE_DIR}}/nastja/build-cuda/nastja" \\
|
||||
-c "${{SOURCE_DIR}}/ma/experiments/configs/measurements/strong/spheroid_{label}.json" \\
|
||||
-o "${{OUTPUT_DIR}}"
|
||||
"""
|
||||
|
||||
with open(f"batch/measurements/strong/strong-{label}", "w", encoding="utf8") as batch_config_file:
|
||||
batch_config_file.write(batch_config)
|
||||
@@ -0,0 +1,16 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Tuple
|
||||
|
||||
@dataclass
|
||||
class Configuration:
|
||||
nodes: int
|
||||
tasks: int
|
||||
gpus_per_node: int
|
||||
blockcount: Tuple[int, int, int]
|
||||
blocksize: Tuple[int, int, int]
|
||||
|
||||
def get_domain_size(self) -> int:
|
||||
return self.blockcount[0] * self.blocksize[0] * self.blockcount[1] * self.blocksize[1] * self.blockcount[2] * self.blocksize[2]
|
||||
|
||||
def get_label(self) -> str:
|
||||
return f"t{self.tasks:04}n{self.nodes:03}g{self.gpus_per_node}x{self.blockcount[0]}y{self.blockcount[1]}z{self.blockcount[2]}"
|
||||
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import json
|
||||
import sys
|
||||
|
||||
from functools import reduce
|
||||
from operator import mul
|
||||
from pathlib import Path
|
||||
|
||||
percent_filled = float(sys.argv[1])
|
||||
template_path = Path("templates/varied-fillings.json")
|
||||
|
||||
initial_cell_size = 4200
|
||||
|
||||
with template_path.open(encoding="utf-8") as template_file:
|
||||
config = json.load(template_file)
|
||||
|
||||
dims = [
|
||||
size * count
|
||||
for size, count
|
||||
in zip(config["Geometry"]["blocksize"], config["Geometry"]["blockcount"])
|
||||
]
|
||||
total_volume = reduce(mul, dims, 1)
|
||||
target_volume = total_volume * percent_filled / 100
|
||||
n_cells = int(target_volume // initial_cell_size)
|
||||
# If n_cells is odd, second type gets one more cell
|
||||
n_cells_first_type = n_cells // 2
|
||||
n_cells_second_type = n_cells - n_cells_first_type
|
||||
edge_length = int(target_volume ** (1 / 3))
|
||||
offsets = [
|
||||
(dims[0] - edge_length) // 2,
|
||||
(dims[1] - edge_length) // 2,
|
||||
(dims[2] - edge_length) // 2
|
||||
]
|
||||
|
||||
print(f"Target volume: {target_volume} ({percent_filled}%, edge length: {edge_length}), # of cells: {n_cells}", file=sys.stderr)
|
||||
|
||||
if target_volume > 0:
|
||||
config["Filling"]["cells"].append({
|
||||
"shape": "cube",
|
||||
"pattern": "voronoi",
|
||||
"box": [
|
||||
offsets,
|
||||
[
|
||||
min(offsets[0] + edge_length, dims[0] - 1),
|
||||
min(offsets[1] + edge_length, dims[1] - 1),
|
||||
min(offsets[2] + edge_length, dims[2] - 1)
|
||||
]
|
||||
],
|
||||
"count": n_cells,
|
||||
"celltype": [0, 0, n_cells_first_type, n_cells_second_type]
|
||||
})
|
||||
|
||||
json.dump(config, sys.stdout, indent=2)
|
||||
@@ -0,0 +1,107 @@
|
||||
import copy
|
||||
import json
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
configurations = [
|
||||
(1, 1, 1),
|
||||
(1, 1, 2),
|
||||
(1, 2, 2),
|
||||
(2, 2, 2),
|
||||
(2, 2, 4),
|
||||
(2, 4, 4),
|
||||
(4, 4, 4),
|
||||
(4, 4, 8),
|
||||
(4, 8, 8),
|
||||
(8, 8, 8)
|
||||
]
|
||||
|
||||
with open("templates/spheroid_weak.json") as template_file:
|
||||
template = json.load(template_file)
|
||||
|
||||
SIZE_X = 400
|
||||
SIZE_Y = 400
|
||||
SIZE_Z = 400
|
||||
|
||||
for bx, by, bz in configurations:
|
||||
nastja_config = copy.deepcopy(template)
|
||||
nastja_config["Geometry"]["blockcount"] = [bx, by, bz]
|
||||
nastja_config["Geometry"]["blocksize"] = [SIZE_X, SIZE_Y, SIZE_Z]
|
||||
|
||||
# Fill the whole domain with ECM
|
||||
cells_filling = [
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[bx * SIZE_X, by * SIZE_Y, bz * SIZE_Z]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
}
|
||||
]
|
||||
|
||||
# Place a bunch of cells in each block to keep each rank busy
|
||||
for z in range(bz):
|
||||
for y in range(by):
|
||||
for x in range(bx):
|
||||
sx = x * SIZE_X
|
||||
sy = y * SIZE_Y
|
||||
sz = z * SIZE_Z
|
||||
cells_filling.append({
|
||||
"shape": "sphere",
|
||||
"pattern": "voronoi",
|
||||
"count": 5500,
|
||||
"radius": 75,
|
||||
"center": [sx + 200, sy + 200, sz + 200],
|
||||
"box": [
|
||||
[sx + 110, sy + 110, sz + 110],
|
||||
[sx + 290, sy + 290, sz + 290]
|
||||
],
|
||||
"celltype": 9
|
||||
})
|
||||
nastja_config["Filling"]["cells"] = cells_filling
|
||||
|
||||
ntasks = bx * by * bz
|
||||
if ntasks < 4:
|
||||
nodes = 1
|
||||
gpus_per_node = ntasks
|
||||
else:
|
||||
assert ntasks % 4 == 0
|
||||
nodes = ntasks // 4
|
||||
gpus_per_node = 4
|
||||
|
||||
label = f"weak400-t{ntasks:04}n{nodes:03}g{gpus_per_node}x{bx}y{by}z{bz}"
|
||||
|
||||
with open(f"configs/measurements/weak/spheroid_{label}.json", "w") as config_file:
|
||||
json.dump(nastja_config, config_file, indent=2)
|
||||
|
||||
batch_config = f"""#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name={label}
|
||||
#SBATCH --account=hkf6
|
||||
#SBATCH --partition=booster
|
||||
#SBATCH --nodes={nodes}
|
||||
#SBATCH --ntasks={ntasks}
|
||||
# Counted per node
|
||||
#SBATCH --gres=gpu:{gpus_per_node}
|
||||
#SBATCH --time=00:15:00
|
||||
#SBATCH --output=logs/{label}-%A_%a.log
|
||||
#SBATCH --error=logs/{label}-%A_%a.log
|
||||
#SBATCH --array=1-5
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR="/p/scratch/cellsinsilico/paul/nastja-out/{label}-${{SLURM_ARRAY_TASK_ID}}"
|
||||
|
||||
echo "outdir is ${{OUTPUT_DIR}}"
|
||||
|
||||
mkdir -p "${{OUTPUT_DIR}}"
|
||||
source "${{SOURCE_DIR}}/activate-nastja-modules"
|
||||
|
||||
srun --unbuffered "${{SOURCE_DIR}}/nastja/build-cuda/nastja" \\
|
||||
-c "${{SOURCE_DIR}}/ma/experiments/configs/measurements/weak/spheroid_{label}.json" \\
|
||||
-o "${{OUTPUT_DIR}}"
|
||||
"""
|
||||
|
||||
with open(f"batch/measurements/weak/{label}", "w", encoding="utf8") as batch_config_file:
|
||||
batch_config_file.write(batch_config)
|
||||
@@ -0,0 +1,146 @@
|
||||
import click
|
||||
import csv
|
||||
import re
|
||||
import sqlite3
|
||||
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Tuple
|
||||
|
||||
@dataclass
|
||||
class TimingData:
|
||||
tasks: int
|
||||
nodes: int
|
||||
gpus_per_node: int
|
||||
blockcount: Tuple[int, int, int]
|
||||
array_index: int
|
||||
|
||||
# Given in seconds
|
||||
timings_by_task: [float]
|
||||
|
||||
RUN_PATTERN = re.compile(r".*t([0-9]+)n([0-9]+)g([0-9]+)x([0-9]+)y([0-9]+)z([0-9]+)-([0-9]+)")
|
||||
TIMING_PATTERN = re.compile(r"timing-([0-9]+)\.dat")
|
||||
TIMING_ROW_PATTERN = re.compile(r"([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+).*")
|
||||
|
||||
def get_timing(timing_path: Path, action: str) -> float:
|
||||
with timing_path.open(encoding="utf8") as timing_file:
|
||||
for line in timing_file:
|
||||
m = TIMING_ROW_PATTERN.match(line)
|
||||
if not m:
|
||||
continue
|
||||
|
||||
if m.group(1) == action:
|
||||
return float(m.group(5))
|
||||
|
||||
raise f"Could not find action '{action}' in {timing_path}"
|
||||
|
||||
def get_timings(d: Path, action: str) -> [float]:
|
||||
timings = []
|
||||
for timing_path in d.iterdir():
|
||||
i = int(TIMING_PATTERN.match(timing_path.name).group(1))
|
||||
timings.append((i, get_timing(timing_path, action) / 1_000_000))
|
||||
|
||||
return [timing for i, timing in sorted(timings, key=lambda t: t[0])]
|
||||
|
||||
def get_outdir_timing_data(d: Path, action: str) -> TimingData:
|
||||
match_results = RUN_PATTERN.match(d.name)
|
||||
tasks = int(match_results.group(1))
|
||||
nodes = int(match_results.group(2))
|
||||
gpus_per_node = int(match_results.group(3))
|
||||
blockcount = (
|
||||
int(match_results.group(4)),
|
||||
int(match_results.group(5)),
|
||||
int(match_results.group(6))
|
||||
)
|
||||
array_index = int(match_results.group(7))
|
||||
timings_by_task = get_timings(d / "timing", action)
|
||||
|
||||
return TimingData(
|
||||
tasks,
|
||||
nodes,
|
||||
gpus_per_node,
|
||||
blockcount,
|
||||
array_index,
|
||||
timings_by_task
|
||||
)
|
||||
|
||||
@click.group()
|
||||
def timing():
|
||||
pass
|
||||
|
||||
@timing.command()
|
||||
@click.argument(
|
||||
"directories",
|
||||
type=click.Path(exists=True, file_okay=False, path_type=Path),
|
||||
nargs=-1
|
||||
)
|
||||
@click.option("--db", default="timings.db", help="Path of sqlite database file")
|
||||
def make_timing_db(directories, db):
|
||||
"""
|
||||
Collect NAStJA timing data from all passed directories and save them into a SQLite database.
|
||||
|
||||
Drops the timings table from the given database and creates a new timings table.
|
||||
|
||||
@param db asjdas
|
||||
"""
|
||||
db = sqlite3.connect(db)
|
||||
c = db.cursor()
|
||||
c.execute("drop table if exists timings")
|
||||
c.execute("create table timings (tasks, blockcount_x, blockcount_y, blockcount_z, array_index, averagetime)")
|
||||
|
||||
print("Collecting timing info...")
|
||||
for d in directories:
|
||||
print(d)
|
||||
t = get_outdir_timing_data(d, "Sweep:DynamicECM")
|
||||
c.executemany(
|
||||
"insert into timings values (?, ?, ?, ?, ?, ?)",
|
||||
[
|
||||
(t.tasks, t.blockcount[0], t.blockcount[1], t.blockcount[2], t.array_index, sum(t.timings_by_task) / len(t.timings_by_task))
|
||||
]
|
||||
)
|
||||
print("Done, committing into DB...")
|
||||
|
||||
db.commit()
|
||||
|
||||
print("Done!")
|
||||
|
||||
@timing.command()
|
||||
@click.option("--db", default="timings.db", help="Path of sqlite database file")
|
||||
@click.option("--time/--no-time", default=False, help="Print average time of best run instead of speedup")
|
||||
def strong_dat(db, time):
|
||||
db = sqlite3.connect(db)
|
||||
c = db.cursor()
|
||||
res = c.execute("""
|
||||
select tasks, min(avg)
|
||||
from (
|
||||
select tasks, blockcount_x, blockcount_y, blockcount_z, sum(averagetime) / count(*) as avg
|
||||
from timings group by tasks, blockcount_x, blockcount_y, blockcount_z
|
||||
) group by tasks order by tasks asc;
|
||||
""")
|
||||
values = res.fetchall()
|
||||
|
||||
if not time:
|
||||
print("gpus\tspeedup")
|
||||
for tasks, time in values:
|
||||
print(f"{tasks}\t{values[0][1] / time}")
|
||||
else:
|
||||
print("gpus\ttime")
|
||||
for tasks, time in values:
|
||||
print(f"{tasks}\t{time}")
|
||||
|
||||
@timing.command()
|
||||
@click.option("--db", default="timings.db", help="Path of sqlite database file")
|
||||
def weak_dat(db):
|
||||
db = sqlite3.connect(db)
|
||||
c = db.cursor()
|
||||
res = c.execute("""
|
||||
select tasks, avg(averagetime) as mean from timings group by tasks order by tasks asc
|
||||
""")
|
||||
values = res.fetchall()
|
||||
|
||||
print("gpus\tefficiency")
|
||||
for tasks, mean in values:
|
||||
print(f"{tasks}\t{values[0][1] / mean}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
timing()
|
||||