<h2id="Difficulties-in-making-scientific-software">Difficulties in making scientific software<aclass="anchor-link"href="#Difficulties-in-making-scientific-software">¶</a></h2>
<h2id="-Cycles-for-engineering-production-of-scientific-software-"><center> Cycles for engineering production of scientific software </center><aclass="anchor-link"href="#-Cycles-for-engineering-production-of-scientific-software-">¶</a></h2>
<h3id="-Analysis-and-formulation-of-the-problem-"><center> Analysis and formulation of the problem </center><aclass="anchor-link"href="#-Analysis-and-formulation-of-the-problem-">¶</a></h3><ul>
<h3id="-Analysis/post-treatment-of-the-results-"><center> Analysis/post-treatment of the results </center><aclass="anchor-link"href="#-Analysis/post-treatment-of-the-results-">¶</a></h3><ul>
<li>Sorting/treating the output</li>
<li>Compute digested measures for the brute output (this should be faster than the computation itself otherwise back to 2:formulation)</li>
<li>Produce graphs (for papers and presentations)</li>
<li>3D vizualization</li>
<li>Validate numerical results, stability, coherence, comparison to experiment</li>
<li>If the validation fail get back to 5,4,3 or 2 is possible</li>
<h1id="-The-method-for-this-class-"><center> The method for this class </center><aclass="anchor-link"href="#-The-method-for-this-class-">¶</a></h1><ul>
<li>Computer place: Your laptop<ul>
<li>Linux as main OS, Dualboot, or on a VirtualBox(might get slow)</li>
<h1id="-The-method-for-this-class-"><center> The method for this class </center><aclass="anchor-link"href="#-The-method-for-this-class-">¶</a></h1><ul>
<li>Why C++ and in python<ul>
<li>Object oriented is a way to organize the programs for re-usability</li>
<li>C++ allows objects and efficiency</li>
<li>Python allows interactivity and quick testing</li>
<h1id="-The-method-for-this-class-"><center> The method for this class </center><aclass="anchor-link"href="#-The-method-for-this-class-">¶</a></h1><ul>
<li>On post-treatment programs<ul>
<li>Python is perfect for manipulating files, for parsing outputs, for making graphs</li>
<li>Many program exists for visualization. An opensource one: Paraview</li>
<h1id="-Books-as-support-for-the-course-"><center> Books as support for the course </center><aclass="anchor-link"href="#-Books-as-support-for-the-course-">¶</a></h1><ul>
<li><ahref="http://www.amazon.fr/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612">Design Patterns. Elements of Reusable Object-Oriented Software</a></li>
<li><ahref="http://www.amazon.com/Object-Oriented-Analysis-Design-Applications-Edition/dp/020189551X">Object-oriented analysis and design with applications</a></li>
<li><ahref="http://www.amazon.com/Parallel-Scientific-Computing-MPI-Implementation/dp/0521520800">Parallel scientific computing in c++ and mpi: a seamless approach</a></li>
<li>Specific distributions, environments and package versions to work with are rarely specified. Hence, students must spend a significant amount of time figuring out version issues, package incompatibilities...</li>
<li>This was honestly one of the best courses I have ever had. The Professor and the assistants are all very knowledgeable about the course material and make a lot of effort to answer all our questions both in class and on the forum and at any time</li>
<h2id="-The--GIT-"><center> The <i> GIT</i></center><aclass="anchor-link"href="#-The--GIT-">¶</a></h2><center><imgsrc="figures/git-xkcd.png"></center>
<h2id="What-would-you-demand-to-a-tool-that-will-hold-your-program-sources-?">What would you demand to a tool that will hold your program sources ?<aclass="anchor-link"href="#What-would-you-demand-to-a-tool-that-will-hold-your-program-sources-?">¶</a></h2>
<h2><center> Implicit rule: do not commit something <br><textstyle="color:red"> that is not compiling </text><br> to a shared/public repository </center></h2>
<h3id="Interactive-session-on-manipulating-git">Interactive session on manipulating git<aclass="anchor-link"href="#Interactive-session-on-manipulating-git">¶</a></h3><ul>
<li>installing git</li>
<li>creating a repository on <em>c4science</em></li>
<li>blocks in python identified by ':' and with the indentation<divclass="highlight"><pre><span></span><spanclass="n">block_start</span><spanclass="p">:</span>
<spanclass="n">f</span><spanclass="o">.</span><spanclass="n">write</span><spanclass="p">(</span><spanclass="s2">"#X Y Z VX VY VZ FX FY FZ mass radius name</span><spanclass="se">\n</span><spanclass="s2">"</span><spanclass="p">)</span>
<h3id="Interactive-session-on-the-Hello-world">Interactive session on the Hello world<aclass="anchor-link"href="#Interactive-session-on-the-Hello-world">¶</a></h3><ul>
<li>Use GIT to access the first exercise</li>
<li>How to split a source file into modules</li>
<li>Manipulating program arguments (argv)</li>
<li>Series calculation</li>
<li>Debugger PDB</li>
</ul>
</div>
</div></div>
</section></section>
</div>
</div>
<!-- loads reveal -->
<script>
require(
{
// it makes sense to wait a little bit when you are loading
// reveal from a cdn in a slow connection environment
waitSeconds:1
},
[
"reveal.js/lib/js/head.min.js",
"reveal.js/js/reveal.js"
],
function(head,Reveal){
Reveal.initialize({
//width: '1200px',
//height: '100%'
// margins: 0.1,
controls:true,
progress:true,
history:true,
transition:'fade',
margin:0.02,
progress:true,
slideNumber:true,
// Optional libraries used to extend on reveal.js plugins