Scientific computing: Difference between revisions
Appearance
Content deleted Content added
(38 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{RightTOC}} |
|||
'''Scientific computing''' is part of the [[School:Computer_Science|School of Computer Science]]. This will contain lessons on numerical algorithms, modelling and simulation and bioinformatics. |
|||
== Introduction == |
|||
Scientific computing is the science of solving problems with computers. The problems themselves usually arise from other disciplines such as mathematics, engineering, biology, physics, chemistry and other natural sciences. As a consequence, scientific computing is interdisciplinary by nature. The dividing line between scientific computing and the sciences from which its problems originate is best described by what scientific computing is ''not'' -- and what it ''is''. |
|||
[[File:Anton supercomputer.jpg|thumb|right|[[w:Anton|Anton]] is a massively parallel supercomputer. It is a special-purpose system for [[w:molecular dynamics|molecular dynamics]] (MD) simulations.]] |
[[File:Anton supercomputer.jpg|thumb|right|[[w:Anton|Anton]] is a massively parallel supercomputer. It is a special-purpose system for [[w:molecular dynamics|molecular dynamics]] (MD) simulations.]] |
||
'''Computational science''', also known as '''scientific computing''' or '''scientific computation''' (SC), is a rapidly growing multidisciplinary field that uses advanced computing capabilities to understand and solve complex problems. It is an area of science which spans many disciplines, but at its core it involves the development of models and simulations to understand natural systems. |
|||
* Computing [[w:Pi|Pi]] to the 1'000'000th digit is ''not'' scientific computing. Developing algorithms to efficiently compute <math>\pi</math> to any precision ''is'' scientific computing. |
|||
* Running a [[w:Molecular dynamics|Molecular dynamics]] simulation with 1'000'000 atoms for 100 nanoseconds is ''not'' scientific computing. Developing models and algorithms to efficiently simulate large particle systems ''is'' scientific computing. |
|||
* Computing the [[w:Eigenvalues|eigenvalues]] of a 1'000 x 1'000 dense, complex matrix is ''not'' scientific computing. Developing efficient and accurate methods to determine the eigevalues of any large, dense, complex matrix ''is'' scientific computing. |
|||
* Running an [[w:Sequence alignment|all-against-all sequence alignment]] of every genome known is ''not'' scientific computing. Developing realistic and efficient models for sequence evolution ''is'' scientific computing. |
|||
*Algorithms (numerical and non-numerical): mathematical models, computational models, and computer simulations developed to solve science (e.g., biological, physical, and social), engineering, and humanities problems |
|||
The line between scientific computing and the sciences from which its problems are derived is drawn between interest in the ''methods'' used to solve problems and the ''solution'' of the problems themselves. In other words, all scientists use computers, but very few do scientific computation. |
|||
*Computer and information science that develops and optimizes the advanced system hardware, software, networking, and data management components needed to solve computationally demanding problems |
|||
*The computing infrastructure that supports both the science and engineering problem solving and the developmental computer and information science |
|||
== |
== Best Practices == |
||
The purpose of this resource is to describe best practices in the field of scientific computing. Computing has become an essential scientific tool in research, yet techniques in this discipline are often not taught.<ref>{{cite journal |doi=10.1371/journal.pcbi.1005510 |pmid=28640806 |pmc=5480810 |title=Good enough practices in scientific computing |journal=Plos Computational Biology |volume=13 |issue=6 |pages=e1005510 |year=2017 |last1=Wilson |first1=Greg |last2=Bryan |first2=Jennifer |last3=Cranston |first3=Karen |last4=Kitzes |first4=Justin |last5=Nederbragt |first5=Lex |last6=Teal |first6=Tracy K. |bibcode=2017PLSCB..13E5510W |quote=<small>Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing.</small>}}</ref> |
|||
''This is just a suggestion of what courses should be offered in this Department. The actual content will probably depend more on what courses are actually implemented.'' |
|||
Summary of Best Practices (reproduced from Wilson et al 2014)<ref>{{cite journal |doi=10.1371/journal.pbio.1001745 |pmid=24415924 |pmc=3886731 |title=Best Practices for Scientific Computing |journal=PLOS Biology |volume=12 |issue=1 |pages=e1001745 |year=2014 |last1=Wilson |first1=Greg |last2=Aruliah |first2=D. A. |last3=Brown |first3=C. Titus |last4=Chue Hong |first4=Neil P. |last5=Davis |first5=Matt |last6=Guy |first6=Richard T. |last7=Haddock |first7=Steven H. D. |last8=Huff |first8=Kathryn D. |last9=Mitchell |first9=Ian M. |last10=Plumbley |first10=Mark D. |last11=Waugh |first11=Ben |last12=White |first12=Ethan P. |last13=Wilson |first13=Paul |quote=<small>This is an open-access article distributed under the terms of the [https://creativecommons.org/licenses/by/4.0/ Creative Commons Attribution License], which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited.</small> }}</ref> |
|||
The Courses in scientific computing are divided into three main branches, each containing specific courses. It is recommended that you follow the courses within each main branch in the order presented. The main branches themselves are independent. Should dependencies across branches arise, they will be indicated at the top of each course. |
|||
* '''[[Bioinformatics]]''' |
|||
* '''[[Cosmological simulations]]''' |
|||
* '''[[Numerical algorithms]]''' (See also [[Numerical Analysis]].) |
|||
** [[Finite Arithmetic]] |
|||
** [[Interpolation and Extrapolation]] |
|||
** [[Least-Squares Method]] |
|||
#Write programs for people, not computers. |
|||
== Active Participants == |
|||
##A program should not require its readers to hold more than a handful of facts in memory at once. |
|||
The histories of Wikiversity pages indicate who the active participants are. If you are an active participant in this department, you can list your name here (this can help small departments grow and the participants communicate better; for large departments a list of active participants is not needed). |
|||
##Make names consistent, distinctive, and meaningful. |
|||
* [[User:Mu301|mikeu]] <sup>[[User talk:Mu301|talk]]</sup> 18:14, 21 January 2018 (UTC) |
|||
##Make code style and formatting consistent. |
|||
* [[User:Pedro.Gonnet|Pedro.Gonnet]] 08:23, 9 October 2006 (UTC) |
|||
#Let the computer do the work. |
|||
##Make the computer repeat tasks. |
|||
##Save recent commands in a file for re-use. |
|||
##Use a build tool to automate workflows. |
|||
#Make incremental changes. |
|||
##Work in small steps with frequent feedback and course correction. |
|||
##Use a version control system. |
|||
##Put everything that has been created manually in version control. |
|||
#Don't repeat yourself (or others). |
|||
##Every piece of data must have a single authoritative representation in the system. |
|||
##Modularize code rather than copying and pasting. |
|||
##Re-use code instead of rewriting it. |
|||
#Plan for mistakes. |
|||
##Add assertions to programs to check their operation. |
|||
##Use an off-the-shelf unit testing library. |
|||
##Turn bugs into test cases. |
|||
##Use a symbolic debugger. |
|||
#Optimize software only after it works correctly. |
|||
##Use a profiler to identify bottlenecks. |
|||
##Write code in the highest-level language possible. |
|||
#Document design and purpose, not mechanics. |
|||
##Document interfaces and reasons, not implementations. |
|||
##Refactor code in preference to explaining how it works. |
|||
##Embed the documentation for a piece of software in that software. |
|||
#Collaborate. |
|||
##Use pre-merge code reviews. |
|||
##Use pair programming when bringing someone new up to speed and when tackling particularly tricky problems. |
|||
##Use an issue tracking tool. |
|||
==See also== |
== See also == |
||
⚫ | |||
{{Col list|3| |
|||
* [[School:Computer Science]] |
|||
* [[Portal:Science]] |
|||
* [[Portal:Computer Science]] |
|||
* [[Portal:Quantum computing]] |
|||
* [[Portal:Computer engineering]] |
|||
* [[Applied computer science]] |
|||
* [[Distributed Virtual Supercomputer]] |
|||
* [[Efficiency in computing project]] |
|||
* [[Introduction to Computer Science]] |
|||
⚫ | |||
* [[Parallel computing]] |
|||
* [[Quantum computing]] |
|||
* [[Screensaver Project]] |
|||
}} |
|||
== References == |
== References == |
||
{{reflist}} |
|||
[[File:LCDM.jpg|thumb|right|Snapshot from a [[Cosmological simulations|cosmological simulation]] of [[w:Structure formation|large scale structure formation]] in a [[w:Lambda-CDM model|ΛCDM]] universe. ]] |
|||
* {{cite encyclopedia |last=Winsberg |first=Eric |editor=Edward N. Zalta |title=Computer Simulations in Science |url=https://plato.stanford.edu/archives/sum2015/entries/simulations-science/ |access-date=2018-01-20 |encyclopedia=The Stanford Encyclopedia of Philosophy |edition=Summer 2015 |date=Apr 23, 2015 |year=2015 |publisher=Metaphysics Research Lab, Stanford University }} |
|||
* {{Citation |last=Winsberg |first=Eric |date=2010 |title=Science in the Age of Computer Simulation |url=https://books.google.com/books?id=goIi8auZ-hYC&lpg=PP1&pg=PR7#v=onepage&q&f=false |access-date=2018-01-20 |publisher=University Of Chicago Press |isbn=0226902021 }} |
|||
* {{Citation |last=Kaufmann |first=William J. |last2=Smarr |first2=Larry L. |title=Supercomputing and the Transformation of Science |publisher=Scientific American Library |publication-date=1993 |isbn=9780716750383 }} |
|||
* {{cite journal |last=Davis |first=Dwight |authorlink= |coauthors= |year= 1992 |month= July |title=Big-Time Changes |journal= Computer Graphics World |volume=15 |issue=7 |pages=42-52 |id= |url= |accessdate= |quote=Massively parallel processing systems alter the face and the pace of supercomputing. }} |
|||
* {{cite journal |last=Emmett |first=Arielle |authorlink= |coauthors= |year= 1992 |month= July |title=Something for Everybody |journal= Computer Graphics World |volume=15 |issue=7 |pages=29-41 |id= |url= |accessdate= |quote=By incorporating visual programming languages and widget-based graphical toolskits into their latest products, visualization software vendors have begun to provide scientists with the means to create sophisticated representations of their data, minus the drudgery of extensive code-writing.}} |
|||
* {{cite book |last=Karin |first=Sidney |coauthors=Smith, Norris Parker |title=The Supercomputer Era |year=1987 |isbn=0-15-186787-9 }} |
|||
[[Category:Scientific computing| ]] |
[[Category:Scientific computing| ]] |
Latest revision as of 13:48, 2 February 2021
Computational science, also known as scientific computing or scientific computation (SC), is a rapidly growing multidisciplinary field that uses advanced computing capabilities to understand and solve complex problems. It is an area of science which spans many disciplines, but at its core it involves the development of models and simulations to understand natural systems.
- Algorithms (numerical and non-numerical): mathematical models, computational models, and computer simulations developed to solve science (e.g., biological, physical, and social), engineering, and humanities problems
- Computer and information science that develops and optimizes the advanced system hardware, software, networking, and data management components needed to solve computationally demanding problems
- The computing infrastructure that supports both the science and engineering problem solving and the developmental computer and information science
Best Practices
[edit | edit source]The purpose of this resource is to describe best practices in the field of scientific computing. Computing has become an essential scientific tool in research, yet techniques in this discipline are often not taught.[1]
Summary of Best Practices (reproduced from Wilson et al 2014)[2]
- Write programs for people, not computers.
- A program should not require its readers to hold more than a handful of facts in memory at once.
- Make names consistent, distinctive, and meaningful.
- Make code style and formatting consistent.
- Let the computer do the work.
- Make the computer repeat tasks.
- Save recent commands in a file for re-use.
- Use a build tool to automate workflows.
- Make incremental changes.
- Work in small steps with frequent feedback and course correction.
- Use a version control system.
- Put everything that has been created manually in version control.
- Don't repeat yourself (or others).
- Every piece of data must have a single authoritative representation in the system.
- Modularize code rather than copying and pasting.
- Re-use code instead of rewriting it.
- Plan for mistakes.
- Add assertions to programs to check their operation.
- Use an off-the-shelf unit testing library.
- Turn bugs into test cases.
- Use a symbolic debugger.
- Optimize software only after it works correctly.
- Use a profiler to identify bottlenecks.
- Write code in the highest-level language possible.
- Document design and purpose, not mechanics.
- Document interfaces and reasons, not implementations.
- Refactor code in preference to explaining how it works.
- Embed the documentation for a piece of software in that software.
- Collaborate.
- Use pre-merge code reviews.
- Use pair programming when bringing someone new up to speed and when tackling particularly tricky problems.
- Use an issue tracking tool.
See also
[edit | edit source]References
[edit | edit source]- ↑ Wilson, Greg; Bryan, Jennifer; Cranston, Karen; Kitzes, Justin; Nederbragt, Lex; Teal, Tracy K. (2017). "Good enough practices in scientific computing". Plos Computational Biology 13 (6): e1005510. doi:10.1371/journal.pcbi.1005510. PMID 28640806. PMC 5480810. //www.ncbi.nlm.nih.gov/pmc/articles/PMC5480810/. "Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing."
- ↑ Wilson, Greg; Aruliah, D. A.; Brown, C. Titus; Chue Hong, Neil P.; Davis, Matt; Guy, Richard T.; Haddock, Steven H. D.; Huff, Kathryn D. et al. (2014). "Best Practices for Scientific Computing". PLOS Biology 12 (1): e1001745. doi:10.1371/journal.pbio.1001745. PMID 24415924. PMC 3886731. //www.ncbi.nlm.nih.gov/pmc/articles/PMC3886731/. "This is an open-access article distributed under the terms of the Creative Commons Attribution License, which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited."