<commit_before>This directory contains three one-dimensional partial differential equation
(PDE) solvers that exercise the parallel programming features of Fortran
2008: coarrays and "do concurrent".  The solvers are in the following three
directories:

   (1) coarrayHeatSimplified
   (2) coarrayBurgers
   (3) coarrayBurgersStaticTau

The first second and third directories above depend on files in the include-files
and library directories.

The heat equation solver (1) is the most stringent in terms of correctness
because it checks for the exact solution at every point across the problem
domain.  I suggest starting with the heat equation solver to check compiler
correctness before moving to the other solvers.

The raw Burgers equation solver (2) is slightly more complicated than the
heat equation solver in that the Burgers solver adds one additional term
(a nonlinear term), the calculation of which imposes an additional
synchronization requirement.  However, the correctness test in the Burgers
equation solver is weak: it checks only one value in the problem domain and
that point is a point that should remain zero for all time.

The instrumented Burgers solver (3) is best for performance studies.  It has
been instrumented for performance analysis witih the Tuning and Analysis
Utilities (TAU), which is open-source software available at
http://tau.uoregon.edu.  Because of a memory leak in the Intel compiler,
the instrumented solver uses static rather than dynamic memory.  For this
reason, the code needs to be recompiled for each desired problem size.  See
coarrayBurgersStaticTau/math_constants.F90 for an important comment regarding
matching the problem size with the number of images.

The instrumented Burgers solver has been demonstrated to execute with 99%
parallel efficiency on over 13,000 cores and 87% parallel efficiency on 16,384
cores in weak scaling when compiled with the Cray Compiler Environment.  For
new scalabiliby studies, it is important to run problems of sufficient size.
See one of the following two publications for additional information:

[1] <NAME>., <NAME>, <NAME>, H. Radhakrishnan, and <NAME>
(2014) “High- performance design patterns for modern Fortran,” Scientific
Programming, in review.

[2] <NAME>., <NAME>, and <NAME> (2013) “High-performance design
patterns for modern Fortran,” First International Workshop on Software
Engineering for High Performance Computing in Computational Science and
Engineering, Denver, Colorado, USA. November 22.<commit_msg>Update the PDE solver tests README file.<commit_after>[This document is formatted with GitHub-Flavored Markdown.   ]:#
[For better viewing, including hyperlinks, read it online at ]:#
[https://github.com/sourceryinstitute/opencoarrays/edit/master/src/tests/integration/pde_solvers/README.txt]:#

Partial Differential Equation (PDE) Solvers
===========================================

This directory contains three PDE solvers listed here in order from simplest to most complex:

* A one-dimensional (1D) finite-difference, unsteady [heat equation solver],
* A 1D finite-difference, unsteady, nonlinear [Burgers equation solver], and
* A three-dimensional (3D), unsteady, spectral [Navier-Stokes equation solver].

The first two solvers contain correctness checks that result in the printing of the 
message "Test passed" before terminating a correct execution.  For more details on the 
heat equation solver please view the [Sourcery Institute] [tutorial videos] online.  

For more details on the Burgers solver, please see Chapter 12 of the textbook 
[Scientific Sofware Design] or the open-access journal article 
"[High Performance Design Patterns for Modern Fortran]."  The [coarrayBurgers] 
subdirectory includes a [run.sh] launch script that works inside the open-source 
Linux virtual machine available in the Sourcery Institute [store].

The launch script instruments the Burgers solver for performance analysis using the 
open-source Tuning and Analysis Utilities ([TAU]) package.  The instrumented Burgers 
solver has been demonstrated to execute with 87% parallel efficiency on 16,384
cores in weak scaling when compiled with the Cray Compiler Environment.  For
new scalabiliby studies, it is important to run problems of sufficient size.

The Navier-Stokes solver uses Fourier-spectral methods and Runge-Kutta time advancement
to simulate the evolution of statistically homogeneous turbulent flow in a 3D box with 
periodic boundary conditions.  For performance and complexity comparisons, the 
[navier-stokes] subdirectory contains both a  Message Passing Interface (MPI) version 
and a coarray Fortran (CAF) version of the same solution algorithm.

[heat equation solver]: ./coarrayHeatSimplified
[Burgers equation solver]: ./coarrayBurgers
[Navier-Stokes equation solver]: ./navier-stokes
[Sourcery Institute]: http://www.sourceryinstitute.org
[tutorial videos]: http://www.sourceryinstitute.org/videos
[Scientific Sofwtware Design]: http://www.cambridge.org/rouson
[High Performance Design Patterns for Modern Fortran]: http://www.hindawi.com/journals/sp/2015/942059/
[store]: http://www.sourceryinstitute.org/store
[coarrayBurgers]: ./coarrayBurgers
[run.sh]: ./coarrayBurgers/run.sh
[TAU]: http://tau.uoregon.edu
[navier-stokes]: ./navier-stokes
{'fraction_non_alphanumeric': 0.06726032588101553, 'fraction_numerical': 0.011557408109132247, 'mean_word_length': 5.262158956109134, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 10, 'https://': 1, 'lorem ipsum': 0, 'www.': 5, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7049573', 'n_tokens_mistral': 1452, 'n_tokens_neox': 1322, 'n_words': 663}