% $Id: program_structure.tex 1515 2015-01-02 11:35:51Z hoffmann $ \input{header_tmp.tex} %\input{../header_lectures.tex} \usepackage[utf8]{inputenc} \usepackage{ngerman} \usepackage{pgf} \usepackage{subfigure} \usepackage{units} \usepackage{multimedia} \newcommand{\event}[1]{\newcommand{\eventname}{#1}} \usepackage{xmpmulti} \usepackage{tikz} \usepackage{pdfcomment} \usetikzlibrary{shapes,arrows,positioning} \def\Tiny{\fontsize{4pt}{4pt}\selectfont} \usepackage{listings} \lstset{language=[90]Fortran, basicstyle=\ttfamily \tiny, keywordstyle=\color{black}, commentstyle=\color{black}, morecomment=[l]{!\ }% Comment only with space after ! } \institute{Institute of Meteorology and Climatology, Leibniz Universität Hannover} \selectlanguage{english} \date{last update: \today} \event{PALM Seminar} \setbeamertemplate{navigation symbols}{} \setbeamertemplate{footline} {% \begin{beamercolorbox}[rightskip=-0.1cm]& {\includegraphics[height=0.65cm]{imuk_logo.pdf}\hfill \includegraphics[height=0.65cm]{luh_logo.pdf}} \end{beamercolorbox} \begin{beamercolorbox}[ht=2.5ex,dp=1.125ex,% leftskip=.3cm,rightskip=0.3cm plus1fil]{title in head/foot}% {\leavevmode{\usebeamerfont{author in head/foot}\insertshortauthor} \hfill \eventname \hfill \insertframenumber \; / \inserttotalframenumber}% \end{beamercolorbox}% % \begin{beamercolorbox}[colsep=1.5pt]{lower separation line foot}% % \end{beamercolorbox} } %\logo{\includegraphics[width=0.3\textwidth]{luhimuk_logo.png}} \title[PALM Program Structure]{PALM Program Structure} \author{PALM group} % Notes: % jede subsection bekommt einen punkt im menu (vertikal ausgerichtet. % jeder frame in einer subsection bekommt einen punkt (horizontal ausgerichtet) \begin{document} \begin{frame} \titlepage \end{frame} \section{PALM Program Structure} \subsection{PALM Program Structure} %Folie 01 \begin{frame} \frametitle{Contents} \begin{flushleft} This part gives a brief overview about the structure of the PALM code: \end{flushleft} \begin{itemize} \item<2->{Flow chart} \item<3->{Most important variables and how they are declared} \item<4->{Machine dependencies} \end{itemize} \end{frame} %Folie 02 \begin{frame}[fragile] \frametitle{PALM Code: General Features} \begin{itemize} \item<2->{PALM is written in FORTRAN90. Current version number is 3.10.} \vspace{2.5mm} \item<3->{With some very minor exceptions, the code is using the FORTRAN standard, so it should compile without error on any FORTRAN 2003/2008 compiler. (90/95 may give problems)} \vspace{2.5mm} \item<4->{Data handling between subroutines is mostly done using FORTRAN90-modules instead of using parameter lists. \begin{minipage}{0.5\textwidth} \centering \begin{lstlisting} SUBROUTINE parin USE control_parameters, ONLY: ... USE grid_variables, ONLY: ... . . \end{lstlisting} \end{minipage} \begin{minipage}{0.4\textwidth} \centering \begin{lstlisting} SUBROUTINE parin( a, b, c, ... ) INTEGER(iwp) :: a, b REAL(wp) :: c, ... . . \end{lstlisting} \end{minipage} \mbox{Most modules can be found in file .../trunk/SOURCE/modules.f90}} \end{itemize} \end{frame} %Folie 03 \begin{frame} \frametitle{PALM Code: General Features} \small \begin{itemize} \item<2->{Machine dependent code segments, e.g. calls of routines from external libraries (e.g. NetCDF or FFTW), which may not be available on some machines, are activated using preprocessor directives.} \item<3->{The serial and parallel (MPI) PALM version is also activated by preprocessor directives.} \item<4->{The code is splitted into several files, most of them containing just one subroutine, e.g. file ``parin.f90'' contains ``SUBROUTINE parin''.} \item<5->{The code includes an interface which can be used to add your own code extensions. Advantage: These code extensions can be reused (normally) for future PALM releases without requiring any changes.} \end{itemize} \end{frame} %Folie 04 \begin{frame} \frametitle{PALM Flow Chart (I)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=15pt, font=\tiny] \tikzstyle{green} = [rectangle, draw, fill=green!20, text width=0.2\textwidth, minimum size=15pt, font=\tiny] \tikzstyle{line} = [draw, -] \begin{tikzpicture}[auto, node distance=0] \uncover<1->{\node [yellow] (PALM) {PALM};} \uncover<1->{\node [white2, right=0.2cm of PALM] (PALMspace) {};} \uncover<2->{\node [yellow, below=0.2cm of PALMspace] (initcoup) {init\_coupling};} \path<2-> [line] (PALM.south) |- (initcoup.west); \uncover<3->{\node [yellow, below=0.05cm of initcoup] (localtre) {local\_tremain\_ini};} \path<3-> [line] (PALM.south) |- (localtre.west); \uncover<4->{\node [yellow, below=0.05cm of localtre] (initdvrp) {init\_dvrp\_logging};} \path<4-> [line] (PALM.south) |- (initdvrp.west); \uncover<5->{\node [yellow, below=0.05cm of initdvrp] (parin) {parin};} \path<5-> [line] (PALM.south) |- (parin.west); \uncover<5->{\node [white, right=0.2cm of parin] (parinspace) {};} \uncover<5->{\node [yellow, below=0cm of parinspace] (readvar) {read\_var\_list};} \path<5-> [line,dashed] (parin.south) |- (readvar.west); \uncover<5->{\node [yellow, below=0.05cm of readvar] (packageparin) {package\_parin};} \path<5-> [line,dashed] (parin.south) |- (packageparin.west); \uncover<5->{\node [green, below=0.05cm of packageparin] (userparin) {user\_parin};} \path<5-> [line] (parin.south) |- (userparin.west); \uncover<6->{\node [yellow, below=1.4cm of parin] (initpeg) {init\_pegrid};} \path<6-> [line] (PALM.south) |- (initpeg.west); \uncover<6->{\node [white, right=0.2cm of initpeg] (initpegspace) {};} \uncover<7->{\node [yellow, below=0.05cm of initpeg] (initgrid) {init\_grid};} \path<7-> [line] (PALM.south) |- (initgrid.west); \uncover<7->{\node [white, right=0.2cm of initgrid] (initgridspace) {};} \uncover<7->{\node [green, below=0cm of initgridspace] (userinitgrid) {user\_init\_grid};} \path<7-> [line,dashed] (initgrid.south) |- (userinitgrid.west); \uncover<1->{\node [white, below=5.8cm of PALM] (continu2) {};} \path<1-> [line,dashed] (PALM.south) |- (continu2.north); \uncover<1->{\node [white, below=5.2cm of PALM] (continu1) {};} \path<1-> [line] (PALM.south) |- (continu1.north); \end{tikzpicture} \end{frame} %Folie 05 \begin{frame} \frametitle{PALM Flow Chart (II)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{whitelarge} = [rectangle, text width=0.43\textwidth, font=\tiny] \tikzstyle{whitesmall} = [rectangle, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowsmall} = [rectangle, draw, fill=yellow!20, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowlarge} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowLarge} = [rectangle, draw, fill=yellow!20, text width=0.43\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green} = [rectangle, draw, fill=green!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green1} = [rectangle, draw, fill=green!20, text width=0.23\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{line} = [draw, -] \begin{tikzpicture}[auto, node distance=0] \uncover<1->{\node [white2] (contino1) {};} \uncover<1->{\node [white2, below=0.26cm of contino1] (PALM) {};} \uncover<1->{\node [yellow, right=0.2cm of PALM] (checkpara) {check\_parameters};} \path<1-> [line] (PALM.south) |- (checkpara.west); \uncover<1->{\node [white, right=0.2cm of checkpara] (checkparaspace) {};} \uncover<1->{\node [white, right=0.365cm of checkpara] (checkparaspacelarge) {};} \uncover<2->{\node [green1, below=0cm of checkparaspacelarge] (usercheckdatapr) {user\_check\_data\_output\_pr};} \path<2-> [line] (checkpara.south) |- (usercheckdatapr.west); \uncover<2->{\node [green, below=0.52cm of checkparaspace] (usercheckdata) {user\_check\_data\_output};} \path<2-> [line] (checkpara.south) |- (usercheckdata.west); \uncover<2->{\node [yellow, below=0.05cm of usercheckdata] (initmasks) {init\_masks};} \path<2-> [line,dashed] (checkpara.south) |- (initmasks.west); \uncover<2->{\node [green, right=0.2cm of initmasks] (usercheckdata2) {user\_check\_data\_output};} \path<2-> [line] (initmasks.east) |- (usercheckdata2.west); \uncover<2->{\node [yellow, below=0.05cm of initmasks] (usercheckpara) {user\_check\_parameters};} \path<2-> [line] (checkpara.south) |- (usercheckpara.west); \uncover<3->{\node [yellow, below=1.9cm of checkpara] (init3d) {init\_3d\_model};} \path<3-> [line] (PALM.south) |- (init3d.west); \uncover<3->{\node [white, right=0.05cm of init3d] (init3dspace) {};} \uncover<3->{\node [whitelarge, right=0.05cm of init3d] (init3dspacelarge) {};} \uncover<4->{\node [yellowLarge, below=-0.05cm of init3dspacelarge] (init1d) {init\_1d\_model (calls various subroutines)};} \path<4-> [line,dashed] (init3d.south) |- (init1d.west); \uncover<4->{\node [yellow, below=0.5cm of init3dspace] (initslope) {init\_slope};} \path<4-> [line,dashed] (init3d.south) |- (initslope.west); \uncover<4->{\node [green, below=0.05cm of initslope] (userinit3d) {user\_init\_3d\_model};} \path<4-> [line,dashed] (init3d.south) |- (userinit3d.west); \uncover<4->{\node [yellow, below=0.05cm of userinit3d] (randomfuncini) {random\_function\_ini};} \path<4-> [line] (init3d.south) |- (randomfuncini.west); \uncover<4->{\node [yellow, below=0.05cm of randomfuncini] (disturbh) {disturb\_heatflux};} \path<4-> [line,dashed] (init3d.south) |- (disturbh.west); \uncover<4->{\node [yellow, below=0.05cm of disturbh] (initrank) {init\_rankine};} \path<4-> [line,dashed] (init3d.south) |- (initrank.west); \uncover<4->{\node [yellow, right=0.05cm of initrank] (pres) {pres};} \path<4-> [line] (initrank.east) -- (pres.west); \uncover<4->{\node [white, below=-0.05cm of pres] (presspace) {};} \uncover<4->{\node [yellowsmall, right=0.05cm of presspace] (poisfft) {poisfft};} \path<4-> [line] (pres.east) -| (poisfft.north); \uncover<4->{\node [yellowsmall, right=0.05cm of poisfft] (sor) {sor};} \path<4-> [line] (pres.east) -| (sor.north); \uncover<4->{\node [yellowsmall, right=0.05cm of sor] (poismg) {poismg};} \path<4-> [line] (pres.east) -| (poismg.north); \uncover<4->{\node [yellow, below=0.05cm of initrank] (initpt) {init\_pt\_anomaly};} \path<4-> [line,dashed] (init3d.south) |- (initpt.west); \uncover<4->{\node [yellow, below=0.05cm of initpt] (readpart) {read\_part\_of\_varlist};} \path<4-> [line] (init3d.south) |- (readpart.west); \uncover<1->{\node [white2, below=6.6cm of PALM] (continu2) {};} \path<1-> [line,dashed] (contino1.south) |- (continu2.north); \uncover<1->{\node [white2, below=6.0cm of PALM] (continu1) {};} \path<1-> [line] (PALM.south) |- (continu1.north); \uncover<4->{\node [white2, below=6.6cm of checkpara] (continu3) {};} \path<4-> [line,dashed] (init3d.south) |- (continu3.north); \uncover<4->{\node [white2, below=6.0cm of checkpara] (continu4) {};} \path<4-> [line] (init3d.south) |- (continu4.north); \end{tikzpicture} \end{frame} %Folie 06 \begin{frame} \frametitle{PALM Flow Chart (III)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{whitelarge} = [rectangle, text width=0.43\textwidth, font=\tiny] \tikzstyle{whitesmall} = [rectangle, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowsmall} = [rectangle, draw, fill=yellow!20, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowlarge} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowLarge} = [rectangle, draw, fill=yellow!20, text width=0.43\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green} = [rectangle, draw, fill=green!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green1} = [rectangle, draw, fill=green!20, text width=0.23\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{line} = [draw, -] \begin{tikzpicture}[auto, node distance=0] \uncover<1->{\node [white2] (contino1) {};} \uncover<1->{\node [white2, below=0.26cm of contino1] (PALM) {};} \uncover<1->{\node [yellow, right=0.2cm of PALM] (init3d) {init\_3d\_model};} \path<1-> [line] (PALM.south) |- (init3d.west); \uncover<1->{\node [white, right=0.05cm of init3d] (init3dspace) {};} \uncover<1->{\node [whitelarge, right=0.05cm of init3d] (init3dspacelarge) {};} \uncover<2->{\node [yellow, below=0.05cm of init3dspace] (read3d) {read\_3d\_binary};} \path<2-> [line,dashed] (init3d.south) |- (read3d.west); \uncover<2->{\node [green, right=0.05cm of read3d] (userreadrestart) {user\_read\_restart\_data};} \path<2-> [line] (read3d.east) -- (userreadrestart.west); \uncover<2->{\node [yellow, below=0.5cm of init3dspace] (initslope) {init\_slope};} \path<2-> [line,dashed] (init3d.south) |- (initslope.west); \uncover<2->{\node [yellow, below=0.05cm of initslope] (initadvec) {init\_advec};} \path<2-> [line] (init3d.south) |- (initadvec.west); \uncover<2->{\node [yellow, below=0.05cm of initadvec] (distfield) {disturb\_field};} \path<2-> [line,dashed] (init3d.south) |- (distfield.west); \uncover<2->{\node [yellow, below=0.05cm of distfield] (pres) {pres};} \path<2-> [line,dashed] (init3d.south) |- (pres.west); \uncover<2->{\node [white, below=-0.05cm of pres] (presspace) {};} \uncover<2->{\node [yellowsmall, right=0.05cm of presspace] (poisfft) {poisfft};} \path<2-> [line] (pres.east) -| (poisfft.north); \uncover<2->{\node [yellowsmall, right=0.05cm of poisfft] (sor) {sor};} \path<2-> [line] (pres.east) -| (sor.north); \uncover<2->{\node [yellowsmall, right=0.05cm of sor] (poismg) {poismg};} \path<2-> [line] (pres.east) -| (poismg.north); \uncover<2->{\node [green, below=0.05cm of pres] (userinitplant) {user\_init\_plant\_canopy};} \path<2-> [line,dashed] (init3d.south) |- (userinitplant.west); \uncover<2->{\node [yellow, below=0.05cm of userinitplant] (initdvrp) {init\_dvrp};} \path<2-> [line,dashed] (init3d.south) |- (initdvrp.west); \uncover<2->{\node [yellow, below=0.05cm of initdvrp] (initocean) {init\_ocean};} \path<2-> [line,dashed] (init3d.south) |- (initocean.west); \uncover<2->{\node [yellow, right=0.05cm of initocean] (eqnstsea) {eqn\_state\_seawater};} \path<2-> [line] (initocean.east) -| (eqnstsea.west); \uncover<2->{\node [yellow, below=0.05cm of initocean] (initcloudphys) {init\_cloud\_physics};} \path<2-> [line,dashed] (init3d.south) |- (initcloudphys.west); \uncover<2->{\node [yellow, below=0.05cm of initcloudphys] (lpminit) {lpm\_init};} \path<2-> [line,dashed] (init3d.south) |- (lpminit.west); \uncover<2->{\node [white, right=0.2cm of lpminit] (lpminspace) {};} \uncover<2->{\node [yellow, below=0.05cm of lpminspace] (lpmreadrestart) {lpm\_read\_restart\_file};} \path<2-> [line,dashed] (lpminit.south) |- (lpmreadrestart.west); \uncover<2->{\node [green, below=0.05cm of lpmreadrestart] (userlpmin) {user\_lpm\_init};} \path<2-> [line] (lpminit.south) |- (userlpmin.west); \uncover<1->{\node [white2, below=6.6cm of PALM] (continu2) {};} \path<1-> [line,dashed] (contino1.south) |- (continu2.north); \uncover<1->{\node [white2, below=6.0cm of PALM] (continu1) {};} \path<1-> [line] (PALM.south) |- (continu1.north); \uncover<2->{\node [white2, below=6.6cm of init3d] (continu3) {};} \path<2-> [line,dashed] (init3d.south) |- (continu3.north); \uncover<2->{\node [white2, below=6.0cm of init3d] (continu4) {};} \path<2-> [line] (init3d.south) |- (continu4.north); \end{tikzpicture} \end{frame} %Folie 07 \begin{frame} \frametitle{PALM Flow Chart (IV)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{whitelarge} = [rectangle, text width=0.43\textwidth, font=\tiny] \tikzstyle{whitesmall} = [rectangle, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowsmall} = [rectangle, draw, fill=yellow!20, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowlarge} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowLarge} = [rectangle, draw, fill=yellow!20, text width=0.43\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green} = [rectangle, draw, fill=green!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green1} = [rectangle, draw, fill=green!20, text width=0.23\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{line} = [draw, -] \begin{tikzpicture}[auto, node distance=0] \uncover<1->{\node [white2] (contino1) {};} \uncover<1->{\node [white2, below=0.26cm of contino1] (PALM) {};} \uncover<2->{\node [yellow, right=0.2cm of PALM] (init3d) {init\_3d\_model};} \path<2-> [line] (PALM.south) |- (init3d.west); \uncover<2->{\node [white, right=0.05cm of init3d] (init3dspace) {};} \uncover<2->{\node [whitelarge, right=0.05cm of init3d] (init3dspacelarge) {};} \uncover<3->{\node [yellow, below=0.05cm of init3dspace] (lpminit) {lpm\_init};} \path<3-> [line,dashed] (init3d.south) |- (lpminit.west); \uncover<3->{\node [white, right=0.2cm of lpminit] (lpminspace) {};} \uncover<4->{\node [yellow, below=0.05cm of lpminspace] (lpmsortar) {lpm\_sort\_arrays};} \path<4-> [line,dashed] (lpminit.south) |- (lpmsortar.west); \uncover<5->{\node [yellow, below=0.05cm of lpmsortar] (dataoutpdvrp) {data\_output\_dvrp};} \path<5-> [line,dashed] (lpminit.south) |- (dataoutpdvrp.west); \uncover<5->{\node [white, right=0.2cm of dataoutpdvrp] (dataoutpdvrpspace) {};} \uncover<6->{\node [green, below=0.05cm of dataoutpdvrpspace] (usercoltap) {user\_dvrp\_coltab};} \path<6-> [line,dashed] (dataoutpdvrp.south) |- (usercoltap.west); \uncover<7->{\node [green, below=0.05cm of usercoltap] (userdataoutdvrp) {user\_data\_output\_dvrp};} \path<7-> [line] (dataoutpdvrp.south) |- (userdataoutdvrp.west); \uncover<8->{\node [yellow, below=1cm of lpminit] (wsinit) {ws\_init};} \path<8-> [line] (init3d.south) |- (wsinit.west); \uncover<9->{\node [green, below=0.05cm of wsinit] (userinit) {user\_init};} \path<9-> [line] (init3d.south) |- (userinit.west); \uncover<10->{\node [yellow, below=2.5cm of init3d] (header) {header};} \path<10-> [line] (PALM.south) |- (header.west); \uncover<11->{\node [green, right=0.05cm of header] (userheader) {user\_header};} \path<11-> [line] (header.east) |- (userheader.west); \uncover<12->{\node [yellow, below=0.05cm of header] (dataoutput2d) {data\_output\_2d};} \path<12-> [line,dashed] (PALM.south) |- (dataoutput2d.west); \uncover<13->{\node [green, right=0.05cm of dataoutput2d] (userdataoutput2d) {user\_data\_output\_2d};} \path<13-> [line] (dataoutput2d.east) |- (userdataoutput2d.west); \uncover<14->{\node [yellow, below=0.05cm of dataoutput2d] (dataoutput3d) {data\_output\_3d};} \path<14-> [line,dashed] (PALM.south) |- (dataoutput3d.west); \uncover<15->{\node [green, right=0.05cm of dataoutput3d] (userdataoutput3d) {user\_data\_output\_3d};} \path<15-> [line] (dataoutput3d.east) |- (userdataoutput3d.west); \uncover<16->{\node [yellow, below=0.05cm of dataoutput3d] (timeintegr) {time\_integration};} \path<16-> [line] (PALM.south) |- (timeintegr.west); \uncover<16->{\node [white, right=0.2cm of timeintegr] (timeintspace) {};} \uncover<17->{\node [yellow, below=0.05cm of timeintspace] (runcontr) {run\_control};} \path<17-> [line] (timeintegr.south) |- (runcontr.west); \uncover<17->{\node [white, right=0.2cm of runcontr] (runcontrspace) {};} \uncover<18->{\node [yellow, below=0.05cm of runcontrspace] (flowstat1) {flow\_statistics};} \path<18-> [line,dashed] (runcontr.south) |- (flowstat1.west); \uncover<19->{\node [green, right=0.05cm of flowstat1] (userstat1) {user\_statistics};} \path<19-> [line] (flowstat1.east) |- (userstat1.west); \uncover<20->{\node [yellow, below=0.5cm of runcontr] (surfcoup) {surface\_coupler};} \path<20-> [line,dashed] (timeintegr.south) |- (surfcoup.west); \uncover<1->{\node [white2, below=6.6cm of PALM] (continu2) {};} \path<1-> [line,dashed] (contino1.south) |- (continu2.north); \uncover<1->{\node [white2, below=6.0cm of PALM] (continu1) {};} \path<1-> [line] (PALM.south) |- (continu1.north); \end{tikzpicture} \end{frame} %Folie 08 \begin{frame} \frametitle{PALM Flow Chart (V)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{whitelarge} = [rectangle, text width=0.3\textwidth, font=\tiny] \tikzstyle{whitesmall} = [rectangle, text width=0.08\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{yellowsmall} = [rectangle, draw, fill=yellow!20, text width=0.08\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{yellowlarge} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{yellowLarge} = [rectangle, draw, fill=yellow!20, text width=0.3\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{green} = [rectangle, draw, fill=green!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green1} = [rectangle, draw, fill=green!20, text width=0.23\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{greenLarge} = [rectangle, draw, fill=green!20, text width=0.3\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{line} = [draw, -] \tikzstyle{Bigwhite} = [rectangle, text width=0.63\textwidth, minimum size=35pt, font=\tiny] \tikzstyle{Bigbox} = [rectangle, draw, fill=gray!20, text width=0.65\textwidth, minimum size=33pt, font=\tiny] \tikzstyle{redsmall} = [rectangle, draw, align=center, fill=red!100, text width=0.08\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{boxinfo} = [rectangle, align=center, text width=0.3\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{whitebox} = [rectangle, text width=0.2\textwidth, minimum size=12pt, font=\tiny] %"align=center" hinzufügen, um in den boxen zu zentrieren. \begin{tikzpicture}[auto, node distance=0] \uncover<1->{\node [white2] (contino1) {};} \uncover<1->{\node [white2, below=0.26cm of contino1] (PALM) {};} \uncover<1->{\node [yellow, right=0.2cm of PALM] (timeintegr) {time\_integration};} \uncover<1->{\node [whitebox, right=0.3cm of PALM] (timeintegrline) {};} \path<1-> [line] (PALM.south) |- (timeintegr.west); \uncover<1->{\node [white, right=0.05cm of timeintegr] (timeintegrspace) {};} \uncover<1->{\node [whitelarge, right=0.05cm of timeintegr] (timeintegrspacelarge) {};} \uncover<1->{\node [Bigwhite, right=0.05cm of timeintegr] (timeintegrspacebox) {};} \uncover<1->{\node [yellow, below=-0.05cm of timeintegrspace] (timestep) {timestep};} \path<1-> [line] (timeintegr.south) |- (timestep.west); \uncover<1->{\node [yellow, right=0.05cm of timestep] (globminmax) {global\_min\_max};} \path<1-> [line] (timestep.east) |- (globminmax.west); \uncover<1->{\node [greenLarge, below=0.5cm of timeintegrspacelarge] (useractions) {user\_actions (before\_timestep)};} \path<1-> [line] (timeintegr.south) |- (useractions.west); \uncover<1->{\node [yellowLarge, below=0.05cm of useractions] (timestepscheme) {timestep\_scheme\_steering};} \path<1-> [line] (timeintegr.south) |- (timestepscheme.west); \uncover<1->{\node [Bigbox, below=1.3cm of timeintegrspacebox] (bigbox) {};} % \path<1-> [line] (timeintegr.south) |- (bigbox.west); \uncover<1->{\node [white, below=1.6cm of timeintegrline] (boxlinespace) {};} \path<1-> [line] (timeintegr.south) |- (boxlinespace.north); \uncover<1->{\node [yellowLarge, below=0.4cm of timestepscheme] (prognosticequve) {prognostic\_equations\_vector};} \uncover<1->{\node [yellowLarge, right=0.05cm of prognosticequve] (prognosticequca) {prognostic\_equations\_cache};} \uncover<1->{\node [yellowLarge, below=0.025cm of prognosticequca] (prognosticequacc) {prognostic\_equations\_acc};} \coordinate [right=0.2cm of prognosticequacc] (testdummyhaha); % \uncover<1->{\node [yellowLarge, below=0.05cm of prognosticequca] (prognosticequve) {prognostic\_equations\_vector};} \uncover<1->{\node [boxinfo, below=-0.025cm of prognosticequve] (Boxinfo) {For details, see \\ PALM Flow Chart (VIII).};} \path<1-> [line] (boxlinespace.north) -| (prognosticequca.north); \path<1-> [line] (boxlinespace.north) -| (prognosticequve.north); \path<1-> [line] (boxlinespace.north) -| (testdummyhaha) -- (prognosticequacc.east); % \uncover<1->{\node [redsmall, above=0.3cm of prognosticequca] (redadv) {standard\\advection};} \uncover<1->{\node [yellow, below=3.1cm of timeintegrspace] (lpm) {lpm};} \path<1-> [line,dashed] (timeintegr.south) |- (lpm.west) ; \uncover<1->{\node [yellowLarge, right=0.05cm of lpm] (lpmmore) {user\_lpm\_advec + more};} \path<1-> [line] (lpm.east) -- (lpmmore.west); \uncover<1->{\node [yellowLarge, below=2.15cm of timestepscheme] (interactiondrop) {interaction\_droplets\_ptq};} \path<1-> [line,dashed] (interactiondrop.west) -| (timeintegr.south); \uncover<1->{\node [yellow, below=0.65cm of lpm] (boundconds) {boundary\_conds};} \path<1-> [line,dashed] (boundconds.west) -| (timeintegr.south); \uncover<1->{\node [yellow, below=0.05cm of boundconds] (swaptimelevel) {swap\_timelevel};} \path<1-> [line] (swaptimelevel.west) -| (timeintegr.south); \uncover<1->{\node [yellow, below=0.05cm of swaptimelevel] (inflowturb) {inflow\_turbulence};} \path<1-> [line,dashed] (inflowturb.west) -| (timeintegr.south); \uncover<1->{\node [yellow, below=0.05cm of inflowturb] (distfield) {disturb\_field};} \path<1-> [line,dashed] (distfield.west) -| (timeintegr.south); \uncover<1->{\node [white2, below=6.6cm of PALM] (continu2) {};} \path<1-> [line,dashed] (contino1.south) |- (continu2.north); \uncover<1->{\node [white2, below=6.0cm of PALM] (continu1) {};} \path<1-> [line] (PALM.south) |- (continu1.north); \end{tikzpicture} \end{frame} %Folie 09 \begin{frame} \frametitle{PALM Flow Chart (VI)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{whitelarge} = [rectangle, text width=0.3\textwidth, font=\tiny] \tikzstyle{whitesmall} = [rectangle, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowsmall} = [rectangle, draw, fill=yellow!20, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowlarge} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowLarge} = [rectangle, draw, fill=yellow!20, text width=0.3\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green} = [rectangle, draw, fill=green!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{greenLarge} = [rectangle, draw, fill=green!20, text width=0.3\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{line} = [draw, -] \tikzstyle{linered} = [draw, color=red, -] \tikzstyle{Bigwhite} = [rectangle, text width=0.63\textwidth, minimum size=35pt, font=\tiny] \tikzstyle{Bigbox} = [rectangle, draw, fill=gray!20, text width=0.65\textwidth, minimum size=33pt, font=\tiny] \tikzstyle{redsmall} = [rectangle, draw, align=center, fill=red!100, text width=0.08\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{boxinfo} = [rectangle, align=center, text width=0.3\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{whitebox} = [rectangle, text width=0.2\textwidth, minimum size=12pt, font=\tiny] %"align=center" hinzufügen, um in den boxen zu zentrieren. \begin{tikzpicture}[auto, node distance=0] \uncover<1->{\node [white2] (contino1) {};} \uncover<1->{\node [white2, below=0.26cm of contino1] (PALM) {};} \uncover<1->{\node [yellow, right=0.2cm of PALM] (timeintegr) {time\_integration};} \path<1-> [line] (PALM.south) |- (timeintegr.west); \uncover<1->{\node [white, right=0.05cm of timeintegr] (timeintegrspace) {};} \uncover<1->{\node [whitelarge, right=0.05cm of timeintegr] (timeintegrspacelarge) {};} \uncover<1->{\node [yellow, below=-0.05cm of timeintegrspace] (pres) {pres};} \path<1-> [line] (timeintegr.south) |- (pres.west); \uncover<1->{\node [white, below=-0.05cm of pres] (presspace) {};} \uncover<1->{\node [yellowsmall, right=0.05cm of presspace] (poisfft) {poisfft};} \path<1-> [line] (pres.east) -| (poisfft.north); \uncover<1->{\node [yellowsmall, right=0.05cm of poisfft] (sor) {sor};} \path<1-> [line] (pres.east) -| (sor.north); \uncover<1->{\node [yellowsmall, right=0.05cm of sor] (poismg) {poismg};} \path<1-> [line] (pres.east) -| (poismg.north); \uncover<1->{\node [yellowLarge, below=0.8cm of timeintegrspacelarge] (calcliquidwatercontent) {calc\_liquid\_water\_content};} \path<1-> [line,dashed] (timeintegr.south) |- (calcliquidwatercontent.west); \uncover<1->{\node [yellow, below=0.9cm of pres] (computevpt) {compute\_vpt};} \path<1-> [line,dashed] (timeintegr.south) |- (computevpt.west); \uncover<1->{\node [yellow, below=0.05cm of computevpt] (prandtlfluxes) {prandtl\_fluxes};} \path<1-> [line,dashed] (timeintegr.south) |- (prandtlfluxes.west); \uncover<1->{\node [yellow, below=0.05cm of prandtlfluxes] (diffusivities) {diffusivities};} \path<1-> [line,dashed] (timeintegr.south) |- (diffusivities.west); \uncover<1->{\node [greenLarge, below=2.88cm of timeintegrspacelarge] (useractionsafter) {user\_actions (after\_integration)};} \path<1-> [line] (timeintegr.south) |- (useractionsafter.west); \uncover<1->{\node [yellow, below=0.575cm of diffusivities] (checkforrestart) {check\_for\_restart};} \path<1-> [line,dashed] (timeintegr.south) |- (checkforrestart.west); \uncover<1->{\node [yellow, right=0.05cm of checkforrestart] (localtremain) {local\_tremain};} \path<1-> [line] (checkforrestart.east) -- (localtremain.west); \uncover<1->{\node [yellow, below=1.1cm of diffusivities] (flowstatistics) {flow\_statistics};} \path<1-> [line,dashed] (timeintegr.south) |- (flowstatistics.west); \uncover<1->{\node [green, right=0.05cm of flowstatistics] (userstat) {user\_statistics};} \path<1-> [line] (flowstatistics.east) -- (userstat.west); \uncover<1->{\node [yellow, below=0.05cm of flowstatistics] (sumup3d) {sum\_up\_3d\_data};} \path<1-> [line,dashed] (timeintegr.south) |- (sumup3d.west); \uncover<1->{\node [greenLarge, right=0.05cm of sumup3d] (user3ddataav) {user\_3d\_data\_averaging};} \path<1-> [line] (sumup3d.east) -- (user3ddataav.west); \uncover<1->{\node [yellow, below=0.05cm of sumup3d] (calcspec) {calc\_spectra};} \path<1-> [line,dashed] (timeintegr.south) |- (calcspec.west); \uncover<1->{\node [green, right=0.05cm of calcspec] (userspec) {user\_spectra};} \path<1-> [line] (calcspec.east) -- (userspec.west); \uncover<1->{\node [white2, below=6.6cm of PALM] (continu2) {};} \path<1-> [line,dashed] (contino1.south) |- (continu2.north); \uncover<1->{\node [white2, below=6.0cm of PALM] (continu1) {};} \path<1-> [line] (PALM.south) |- (continu1.north); \end{tikzpicture} \end{frame} %Folie 10 \begin{frame} \frametitle{PALM Flow Chart (VII)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{whitelarge} = [rectangle, text width=0.3\textwidth, font=\tiny] \tikzstyle{whitesmall} = [rectangle, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowsmall} = [rectangle, draw, fill=yellow!20, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowlarge} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowLarge} = [rectangle, draw, fill=yellow!20, text width=0.3\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green} = [rectangle, draw, fill=green!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{greenLarge} = [rectangle, draw, fill=green!20, text width=0.3\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{line} = [draw, -] \tikzstyle{linered} = [draw, color=red, -] \tikzstyle{Bigwhite} = [rectangle, text width=0.63\textwidth, minimum size=35pt, font=\tiny] \tikzstyle{Bigbox} = [rectangle, draw, fill=gray!20, text width=0.65\textwidth, minimum size=33pt, font=\tiny] \tikzstyle{redsmall} = [rectangle, draw, align=center, fill=red!100, text width=0.08\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{boxinfo} = [rectangle, align=center, text width=0.3\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{whitebox} = [rectangle, text width=0.2\textwidth, minimum size=12pt, font=\tiny] %"align=center" hinzufügen, um in den boxen zu zentrieren. \begin{tikzpicture}[auto, node distance=0] \uncover<1->{\node [white2] (contino1) {};} \uncover<1->{\node [white2, below=0.26cm of contino1] (PALM) {};} \uncover<1->{\node [yellow, right=0.2cm of PALM] (timeintegr) {time\_integration};} \path<1-> [line] (PALM.south) |- (timeintegr.west); \uncover<1->{\node [white, right=0.05cm of timeintegr] (timeintegrspace) {};} \uncover<1->{\node [whitelarge, right=0.05cm of timeintegr] (timeintegrspacelarge) {};} \uncover<1->{\node [yellow, below=-0.05cm of timeintegrspace] (runcontr) {run\_control};} \path<1-> [line,dashed] (timeintegr.south) |- (runcontr.west); \uncover<1->{\node [white, right=0.2cm of runcontr] (runcontrspace) {};} \uncover<1->{\node [yellow, below=0.05cm of runcontrspace] (flowstat1) {flow\_statistics};} \path<1-> [line,dashed] (runcontr.south) |- (flowstat1.west); \uncover<1->{\node [green, right=0.05cm of flowstat1] (userstat1) {user\_statistics};} \path<1-> [line] (flowstat1.east) |- (userstat1.west); \uncover<1->{\node [yellow, below=1cm of timeintegrspace] (print1d) {print\_1d};} \path<1-> [line,dashed] (timeintegr.south) |- (print1d.west); \uncover<1->{\node [yellow, below=0.05cm of print1d] (dataoutp) {data\_output\_***};} \path<1-> [line,dashed] (timeintegr.south) |- (dataoutp.west); \uncover<1->{\node [greenLarge, below=2.15cm of timeintegrspacelarge] (useractionsaftert) {user\_actions (after\_timestep)};} \path<1-> [line] (timeintegr.south) |- (useractionsaftert.west); \uncover<1->{\node [white2, below=6.6cm of PALM] (continu2) {};} \path<1-> [line,dashed] (contino1.south) |- (continu2.north); \uncover<1->{\node [white2, below=6.0cm of PALM] (continu1) {};} \path<1-> [line] (PALM.south) |- (continu1.north); \end{tikzpicture} \end{frame} %Folie 11 \begin{frame} \frametitle{PALM Flow Chart (VIII)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{whitelarge} = [rectangle, text width=0.3\textwidth, font=\tiny] \tikzstyle{whitesmall} = [rectangle, text width=0.08\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.18\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{yellowsmall} = [rectangle, draw, fill=yellow!20, text width=0.08\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{yellowlarge} = [rectangle, draw, fill=yellow!20, text width=0.255\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{yellowLarge} = [rectangle, draw, align=center, fill=yellow!20, text width=0.32\textwidth, minimum size=12pt, font=\scriptsize] \tikzstyle{line} = [draw, -] \tikzstyle{linered} = [draw, color=red, -] \tikzstyle{Bigwhite} = [rectangle, text width=0.63\textwidth, minimum size=35pt, font=\tiny] \tikzstyle{Bigbox} = [rectangle, draw, fill=gray!20, text width=1\textwidth, minimum size=183pt, font=\tiny] \tikzstyle{redsmall} = [rectangle, draw, align=center, fill=red!100, text width=0.18\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{boxinfo} = [rectangle, align=center, text width=0.3\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{whitebox} = [rectangle, text width=0.2\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{bigbox} = [rectangle, draw, fill=white!100, text width=0.22\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{bigbox2} = [rectangle, draw, align=center, fill=white!100, text width=0.29\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{framebox} = [rectangle, draw, text width=0.2\textwidth, minimum size=104pt, font=\tiny] \tikzstyle{Endbox} = [rectangle, draw, fill=gray!20, text width=0.21\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{Endbox2} = [rectangle, draw, fill=gray!20, text width=0.23\textwidth, minimum size=12pt, font=\tiny] %"align=center" hinzufügen, um in den boxen zu zentrieren. \begin{tikzpicture}[auto, node distance=0, >=stealth] \uncover<1->{\node [Bigbox] (bigbox) {};} \uncover<1->{\node [yellow, above=-0.75cm of bigbox] (calcmeanptprofile) {calc\_mean\_pt\_profile};} % \uncover<1->{\node [yellowLarge, left=0.5cm of calcmeanptprofile] (prognosticequationsnoopt) {prognostic\_equations\_noopt};} \uncover<1->{\node [yellowLarge, left=0.5cm of calcmeanptprofile] (prognosticequationscache) {prognostic\_equations\_cache};} \uncover<1->{\node [yellowLarge, right=0.5cm of calcmeanptprofile] (prognosticequationsvector) {prognostic\_equations\_vector};} \uncover<1->{\node [yellowLarge, below=0.1cm of prognosticequationsvector] (prognosticequationsacc) {prognostic\_equations\_acc};} \uncover<1->{\node [yellow, below=-0.05cm of calcmeanptprofile] (calcradiation) {calc\_radiation};} \uncover<1->{\node [yellow, below=-0.05cm of calcradiation] (impactoflatentheat) {impact\_of\_latent\_heat};} \uncover<1->{\node [yellow, below=-0.05cm of impactoflatentheat] (calcprecipitation) {calc\_precipitation};} \uncover<1->{\node [yellow, below=-0.05cm of calcprecipitation] (productioneinit) {production\_e\_init};} \uncover<1->{\node [whitesmall, left=-1.4cm of productioneinit] (productioneinitspace1) {};} \uncover<1->{\node [whitesmall, below=0cm of productioneinitspace1] (productioneinitspace2) {};} \uncover<1->{\node [bigbox, below=0.05cm of prognosticequationscache] (listingscache) { \texttt{\linespread {0.7}\selectfont\noindent DO i=nxl,nxr\\ \quad DO j=nys,nyn\\ \quad \quad CALL \textcolor{blue}{u-subr(i,j)}\\ \quad \quad CALL \textcolor{blue}{v-subr(i,j)}\\ \quad \quad CALL \textcolor{blue}{w-subr(i,j)}\\ \quad \quad CALL \textcolor{blue}{pt-subr(i,j)}\\ \quad \quad CALL \textcolor{blue}{q or }\\ \quad \quad \hphantom{CALL} \textcolor{blue}{s-subr(i,j)}\\ \quad \quad CALL \textcolor{blue}{e-subr(i,j)}\\ \quad ENDDO\\ ENDDO\\ } };} \uncover<1->{\node [bigbox, below=0.05cm of prognosticequationsacc] (listingsvector) { \texttt{\linespread {0.7}\selectfont\noindent CALL \textcolor{blue}{u-subr}\\ CALL \textcolor{blue}{v-subr}\\ .\\ .\\ .\\ % !within subroutines:\\ % DO i=nxl,nxr\\ % \quad DO j=nys,nyn\\ % \quad \quad DO k=nzb+1,nzt\\ % \quad \quad \quad \quad ...\\ % \quad \quad ENDDO\\ % \quad ENDDO\\ % ENDDO\\ } };} \uncover<1->{\node [bigbox2, below=-0.25cm of productioneinitspace2] (foreachvariable) { \textcolor{blue}{ \textbf{\underline{For each variable:}}\\ u-, v-, w-component,\\ pt, q or s, sa, e (SGS-TKE) } };} \uncover<1->{\node [whitesmall, right=-2.08cm of foreachvariable] (foreachvariablespace1) {};} \uncover<1->{\node [whitesmall, below=-0.18cm of foreachvariablespace1] (foreachvariablespace2) {};} \uncover<1->{\node [yellowlarge, below=0.05cm of foreachvariablespace2] (advecuvws) {advec\_\{uvws\}};} \path<1-> [line] (advecuvws.west) -| (foreachvariable.west); \uncover<1->{\node [yellowlarge, below=-0.05cm of advecuvws] (diffusionuvwse) {diffusion\_\{uvwse\}};} \path<1-> [line] (diffusionuvwse.west) -| (foreachvariable.west); \uncover<1->{\node [yellowlarge, below=-0.05cm of diffusionuvwse] (coriolis) {coriolis};} \path<1-> [line,dashed] (coriolis.west) -| (foreachvariable.west); \uncover<1->{\node [yellowlarge, below=-0.05cm of coriolis] (buoyancy) {buoyancy};} \path<1-> [line,dashed] (buoyancy.west) -| (foreachvariable.west); \uncover<1->{\node [yellowlarge, below=-0.05cm of buoyancy] (useractionstend) {\mbox{user\_actions (i,j,***-tendency)}};} \path<1-> [line] (useractionstend.west) -| (foreachvariable.west); \uncover<1->{\node [yellowlarge, below=-0.05cm of useractionstend] (productione) {production\_e};} \path<1-> [line,dashed] (productione.west) -| (foreachvariable.west); \uncover<1->{\node [framebox, below=-1.025cm of foreachvariable] (foreachvariableframe) {};} \uncover<1->{\draw [<-,line width=5pt, color=blue] (1,0.2) -- (1.5,1);} \uncover<1->{\draw [<-,line width=5pt, color=blue] (-1.54,0.2) -- (-2.04,1);} \uncover<2->{\node [Endbox, below=1.5cm of listingscache] (endboxcache) { \texttt{\linespread {0.7}\selectfont\noindent !within subroutines:\\ DO k=nzb+1,nzt\\ \quad \quad \textcolor{blue}{tend(k,j,i)=...}\\ ENDDO\\ } };} \uncover<2->{\node [Endbox2, below=2.0cm of listingsvector] (endboxvec) { \texttt{\linespread {0.7}\selectfont\noindent !within subroutines:\\ DO i = nxl, nxr \\ \quad DO j = nys, nyn \\ \quad \quad DO k=nzb+1,nzt\\ \quad \quad \quad \textcolor{blue}{tend(k,j,i)=...}\\ \quad \quad ENDDO \\ \quad ENDDO \\ ENDDO\\ } };} \uncover<2->{\draw [<-,thick] (endboxcache.north) -- (listingscache.south);} \uncover<2->{\draw [<-,thick] (endboxvec.north) -- (listingsvector.south);} \end{tikzpicture} \end{frame} %Folie 12 \begin{frame} \frametitle{PALM Flow Chart (IX)} \tikzstyle{white} = [rectangle, text width=0.2\textwidth, font=\tiny] \tikzstyle{whitelarge} = [rectangle, text width=0.3\textwidth, font=\tiny] \tikzstyle{whitesmall} = [rectangle, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{white2} = [rectangle, text width=0] \tikzstyle{yellow} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowsmall} = [rectangle, draw, fill=yellow!20, text width=0.08\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowlarge} = [rectangle, draw, fill=yellow!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{yellowLarge} = [rectangle, draw, fill=yellow!20, text width=0.3\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{green} = [rectangle, draw, fill=green!20, text width=0.2\textwidth, minimum size=13pt, font=\tiny] \tikzstyle{line} = [draw, -] \tikzstyle{linered} = [draw, color=red, -] \tikzstyle{Bigwhite} = [rectangle, text width=0.63\textwidth, minimum size=35pt, font=\tiny] \tikzstyle{Bigbox} = [rectangle, draw, fill=gray!20, text width=0.65\textwidth, minimum size=33pt, font=\tiny] \tikzstyle{redsmall} = [rectangle, draw, align=center, fill=red!100, text width=0.08\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{boxinfo} = [rectangle, align=center, text width=0.3\textwidth, minimum size=12pt, font=\tiny] \tikzstyle{whitebox} = [rectangle, text width=0.2\textwidth, minimum size=12pt, font=\tiny] %"align=center" hinzufügen, um in den boxen zu zentrieren. \begin{tikzpicture}[auto, node distance=0] \uncover<1->{\node [white2] (contino1) {};} \uncover<1->{\node [white2, below=0.26cm of contino1] (PALM) {};} \uncover<1->{\node [yellow, right=0.2cm of PALM] (timeintegr) {time\_integration};} \path<1-> [line] (PALM.south) |- (timeintegr.west); \uncover<1->{\node [white, right=0.05cm of timeintegr] (timeintegrspace) {};} \uncover<1->{\node [whitelarge, right=0.05cm of timeintegr] (timeintegrspacelarge) {};} \uncover<1->{\node [white, below=0.8cm of timeintegr] (boxlinespace) {};} \uncover<1->{\node [white, below=1.3cm of timeintegr] (boxlinespacedash) {};} \path<1-> [line] (timeintegr.south) |- (boxlinespace.north); \path<1-> [line,dashed] (timeintegr.south) |- (boxlinespacedash.north); \uncover<1->{\node [yellow, below=2cm of timeintegr] (write3dbinary) {write\_3d\_binary};} \path<1-> [line,dashed] (PALM.south) |- (write3dbinary.west); \uncover<1->{\node [yellow, right=0.05cm of write3dbinary] (writevarlist) {write\_var\_list};} \path<1-> [line] (write3dbinary.east) -- (writevarlist.west); \uncover<1->{\node [yellow, below=0.05cm of write3dbinary] (writeparticles) {lpm\_write\_restart\_file};} \path<1-> [line] (PALM.south) |- (writeparticles.west); \uncover<1->{\node [yellow, below=0.05cm of writeparticles] (header) {header};} \path<1-> [line] (PALM.south) |- (header.west); \uncover<1->{\node [green, right=0.05cm of header] (userheader) {user\_header};} \path<1-> [line] (header.east) -- (userheader.west); \uncover<1->{\node [green, below=0.05cm of header] (userlastactions) {user\_last\_actions};} \path<1-> [line] (PALM.south) |- (userlastactions.west); \uncover<1->{\node [yellow, below=0.05cm of userlastactions] (cpustatistics) {cpu\_statistics};} \path<1-> [line] (PALM.south) |- (cpustatistics.west); \uncover<1->{\node [white2, below=5.6cm of PALM] (continu2) {};} \path<1-> [line,dashed] (contino1.south) |- (continu2.north); \uncover<1->{\node [white2, below=5.0cm of PALM] (continu1) {};} \path<1-> [line] (PALM.south) |- (continu1.north); \end{tikzpicture} \end{frame} %Folie 13 \begin{frame}[fragile] \frametitle{Important Variables and Their Declaration} \begin{itemize} \item<2->{3D-arrays of prognostic variables are named $\Psi$, and $\Psi_p$ for time level $t$, and $t+\Delta t$, respectively, with $\Psi = u$, $v$, $w$, $pt$, $q$, $e$, $sa$} \vspace{2.5mm} \item<3->{They are by default declared as $\Psi$($z$,$y$,$x$) or $\Psi$($k$,$j$,$i$), e.g.\\ \begin{minipage}{0.2\textwidth} with\\\\ \end{minipage} \begin{minipage}{0.7\textwidth} \centering \begin{lstlisting} u(nzb:nzt+1,nysg:nyng,nxlg:nxrg) nysg = nys - nbgp, nyng = nyn + nbgp nxlg = nxl - nbgp, nxrg = nxr + nbgp nzb, nzt (bottom, top) nys, nyn (south, north) nxl, nxr (left, right) \end{lstlisting} \end{minipage}\\ as the index limits of the (sub-)domain.\\ nbgp is the number of ghost points which depends on the advection scheme (nbgp = 3 for the default Wicker-Skamarock scheme). } \end{itemize} \end{frame} %Folie 14 \begin{frame}[fragile] \frametitle{Important Variables and Their Declaration} \begin{itemize} \item<1->{If only one process/core is used, then\\ \begin{minipage}{0.2\textwidth} \quad \\\\ \end{minipage} \begin{minipage}{0.7\textwidth} \centering \begin{lstlisting} nxl = 0; nxr = nx nys = 0; nyn = ny \end{lstlisting} \end{minipage}\\ } \item<2->{For speed optimization, most of the 3D-variables are declared as pointers, e.g.\\ \begin{minipage}{0.2\textwidth} \quad \\\\ \end{minipage} \begin{minipage}{0.7\textwidth} \centering \begin{lstlisting} REAL(wp), DIMENSION(:,:,:), POINTER :: u, u_p, v, v_p, ... \end{lstlisting} \end{minipage}\\ This does not affect the usage of these variables in the code in (almost) any way.} \vspace{1.0mm} \item<3->{A pointer free version can be activated with preprocessor-option \texttt{-D\_\_nopointer}.} \end{itemize} \end{frame} %Folie 15 \begin{frame}[fragile] \frametitle{Some Other Frequently Used Variables} \begin{table}[htbp] \centering % \caption{Add caption} \begin{tabular}{|l|l|p{0.22\linewidth}|l|} \hline variable & index bounds & meaning & comment\\ \hline \hline \texttt{\tiny zu } & \texttt{\tiny nzb:nzt+1 }& \tiny heights of the scalar (u,v) grid levels & \texttt{\tiny zu(0)=-zu(1)}\\ \hline \texttt{\tiny zw } & \texttt{\tiny nzb:nzt+1 }& \tiny heights of the w grid level & \texttt{\tiny zw(0)=0 }\\ \hline \texttt{\tiny dzu } & \texttt{\tiny 1:nzt+1 }& \tiny vertical grid spacings between scalar grid levels & \texttt{\tiny dzu(k)=zu(k)-zu(k-1)}\\ \hline \texttt{\tiny ddzu } & \texttt{\tiny 1:nzt+1 }& \tiny inverse of grid spacings & \texttt{\tiny ddzu(k)=1.0/dzu(k)}\\ \hline \texttt{\tiny dx } & & {\tiny grid spacing along x} & \\ \hline \texttt{\tiny ddx } & & {\tiny inverse of dx} & \texttt{\tiny ddx=1.0/dx }\\ \hline \texttt{\tiny current\_timestep\_number} & & {\tiny timestep counter} & \\ \hline \texttt{\tiny simulated\_time }& & {\tiny simulated time in seconds} & \\ \hline \end{tabular}% % \label{tab:addlabel}% \end{table}% \end{frame} %Folie 16 \begin{frame}[fragile] \frametitle{Preprocessor Directives (I)} \begin{itemize} \item<1->{Preprocessor directives are special lines in the code which allows to compile alternative parts of the code depending on so-called \textbf{define-string} switches.\\ Code example:\\ \begin{minipage}{0.01\textwidth} \quad \\\\ \end{minipage} \begin{minipage}{0.8\textwidth} \centering \begin{lstlisting} #if defined( __nopointer ) REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, TARGET :: e, e_p, ... #else REAL(wp), DIMENSION(:,:,:), POINTER :: e, e_p, ... #endif \end{lstlisting} \end{minipage}\\ \onslide<2->If now the compiler is called e.g.\\ \begin{minipage}{0.01\textwidth} \quad \\\\ \end{minipage} \begin{minipage}{0.8\textwidth} \centering \begin{lstlisting}[basicstyle=\ttfamily \scriptsize] ifort -cpp -D __nopointer ... (other options) \end{lstlisting} \end{minipage}\\ then the line containing ``\texttt{\tiny ..., ALLOCATABLE, TARGET :: ...}'' is compiled. \\If the compiler call is\\ \begin{minipage}{0.01\textwidth} \quad \\\\ \end{minipage} \begin{minipage}{0.8\textwidth} \centering \begin{lstlisting}[basicstyle=\ttfamily \scriptsize] ifort -cpp ... (other options) \end{lstlisting} \end{minipage}\\ the line containing ``\texttt{\tiny ..., POINTER :: ...}'' is compiled. } \end{itemize} \end{frame} %Folie 17 \begin{frame}[fragile] \frametitle{Preprocessor Directives (II)} \begin{itemize} \item<1->{The preprocessor directives require to include the compiler option ``\texttt{\scriptsize-cpp}'' in any way. Otherwise, the compilation will give error messages. \textbf{The option has to be given in the configuration file} \texttt{\scriptsize .mrun.config} in the \texttt{\scriptsize \%cpp\_options} line. \textbf{Different compilers may require different options!}}\\ \item<2->{Define-string switches can be combined using logical AND / OR operators \&\& / $\lvert \lvert$.\\ \begin{minipage}{0.2\textwidth} \quad \\\\ \end{minipage} \begin{minipage}{0.7\textwidth} \centering \begin{lstlisting}[basicstyle=\ttfamily \scriptsize] #if defined ( __abc && __def ) \end{lstlisting} \end{minipage} } \end{itemize} \end{frame} %Folie 18 \begin{frame}[fragile] \frametitle{Preprocessor Directives (III)} In the PALM code, define-string switches are used for following reasons: \begin{itemize} \item<2->{To switch between system dependent subroutines for:\\ \begin{itemize} \item<2->{\texttt{\scriptsize \_\_ibm}} \quad IBM-Regatta systems\\ \item<2->{\texttt{\scriptsize \_\_lc}}\;\: \quad Linux clusters\\ \item<2->{\texttt{\scriptsize \_\_nec}} \quad NEC-SX systems\\ \end{itemize} Switches are set automatically depending on the host identifier string given with mrun-option ``\texttt{\scriptsize-h}'',\\ eg. ``\texttt{\scriptsize-h lclocal}'' sets ``\texttt{\scriptsize-D \_\_lc}''} \item<3->{To switch between the serial and the parallel code:\\ \begin{itemize} \item<3->{\texttt{\scriptsize \_\_parallel}} \end{itemize} This switch is set by mrun-option ``\texttt{\scriptsize-K parallel}''.} \end{itemize} \end{frame} %Folie 19 \begin{frame}[fragile] \frametitle{Preprocessor Directives (IV)} \small In the PALM code, define-string switches are additionally used for following reasons: \begin{itemize} \item<1->{To enable usage of special software packages which are not included in the compilation process by default\\ \begin{itemize} \item<1->{\texttt{\scriptsize \_\_dvrp\_graphics}} \quad 3D visualization system (currently out of\\ \hspace{24.5mm} order)\\ \item<1->{\texttt{\scriptsize \_\_spectra}} \hspace{10.7mm} calculation and output of power spectra\\ \end{itemize} Switches are activated with mrun-option ``\texttt{\scriptsize-p}'', \mbox{eg. ``\texttt{\scriptsize-p} ``\texttt{\scriptsize spectra dvrp\_graphics}''''}} \item<2->{To enable special features \begin{itemize} \item<1->{\texttt{\scriptsize \_\_openacc}} \quad activates call of external routines required for\\ \hspace{15.7mm} OpenACC programming\\ \item<1->{\texttt{\scriptsize \_\_netcdf, \_\_netcdf4, \_\_netcdf\_parallel}} \quad NetCDF I/O with\\ \hspace{15.7mm} different NetCDF versions\\ \end{itemize} } \end{itemize} {\small \quad\\ \quad\\ \quad}\\ \quad \\ \quad %nicht fragen, was das soll!! Mir ist leider nichts bsseres eingefallen um den Satz unter der Überschrift deckungsgleich auf beiden Folien zu haben. \end{frame} \lstset{language=[90]Fortran, basicstyle=\ttfamily \scriptsize, keywordstyle=\color{black}, commentstyle=\color{black}, morecomment=[l]{!\ }% Comment only with space after ! } %Folie 20 \begin{frame}[fragile] \frametitle{Preprocessor Directives (V)} \small \begin{itemize} \item<1->{Preprocessor directives are also used for string replacement in the code.\\ \ \\ Example:\\A compiler call with preprocessor option\\ \begin{minipage}{0.2\textwidth} \quad \\\\ \end{minipage} \begin{minipage}{0.7\textwidth} \centering \begin{lstlisting} ifort -cpp -Dabcd=efgh \end{lstlisting} \end{minipage} will replace all strings ``\texttt{\scriptsize abcd}'' in the code with ``\texttt{\scriptsize efgh}'' \textbf{before} the code is compiled.\\ \ \\ This is used in PALM to change the MPI\_REAL datatypes (which are 4 byte long by default), to 8 bytes. The respective cpp-directives are given in the configuration file \texttt{\scriptsize .mrun.config.}:\\ \begin{minipage}{0.01\textwidth} \quad \\\\ \end{minipage} \begin{minipage}{0.7\textwidth} \centering \begin{lstlisting} %cpp_options -cpp:-DMPI_REAL=MPI_DOUBLE_PRECISION: -DMPI_2REAL=MPI_2DOUBLE_PRECISION: .... \end{lstlisting} \end{minipage} } \end{itemize} \end{frame} \end{document}