-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.html
228 lines (210 loc) · 9.57 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>CamFort: Automated evolution and verification of computational
science models</title>
<link rel="stylesheet" href="main.css" />
<link href="https://fonts.googleapis.com/css?family=Rasa"
rel="stylesheet" />
<script>window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));</script>
</head>
<body>
<a href="https://github.com/camfort/camfort"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/652c5b9acfaddf3a9c326fa6bde407b87f7be0f4/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6f72616e67655f6666373630302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"></a>
<div id="main">
<section>
<div id="header">
<a href="index.html"><img src="camfort.png" alt="CamFort logo"/></a><br />
<span class="title-big">
Specify, verify, and refactor Fortran code
</span>
</div>
</section><br />
<section>
<p>
CamFort is a multi-feature tool for improving the quality of Fortran
code. Its features are primarily aimed at programming patterns found
in numerical modelling code e.g., in computational science. </p>
<p>
CamFort is free and open-source. It currently supports Fortran 66, 77, 90,
and 95 language standards. Support for Fortran 2003, and 2008 is in progress.
</p>
</section>
<section>
<span class="title-medium">Long-term
vision</span><br />
<p>
Programming languages provide an interface for developing
increasingly complex models in science. However, as computer models
grow more complex, it is increasingly difficult to deliver on core
requirements such as verifiability, maintainability,
understandability, validity, and portability.
</p>
<p>
Managing software complexity more effectively has been a focus of
programming language research for many years, yet we see little
adoption of new approaches in the natural sciences. Instead we see
scientists continually striving to evolve their software to more
complex models, or bigger data sets or novel execution
architectures.
</p>
<p>
Our objectives are:
<ul>
<li>
<b>Crossing the chasm:</b> To show how programming language ideas such as
inference of high-level programming patterns, advanced types and
automatic test generation can be used to reduce the accidental
complexity of real scientific code, and improve its evolution,
maintainability, and verification.</li>
<li>
<b>Practical adoption:</b> To develop tools for maintaining and evolving
established, long-lived code-bases. To apply these ideas without
disrupting existing practices by accommodating the various
incarnations of the language, and (custom) pre-processors.</li>
<li>
<b>Closing the chasm:</b> To provide a framework which makes it easier to
transfer future programming language research in to practice in
computational science.
</li>
</ul>
</p>
</section>
<section>
<span class="title-medium">Getting involved</span><br />
<p>
<or>
<li>Fortran developers: try CamFort on your code! Feel free to report bugs and make feature requests on our <a href="https://github.com/camfort/camfort/issues">issue tracker.</a></li>
<li>Haskell programmers: CamFort is written in Haskell! We welcome contributions although contact us before embarking on a large project so we can give you feedback.</li>
<li>Students: We have a variety of ideas on our <a href="projects.html">project page</a>.</li>
</or>
</p>
</section>
<section> <span class="title-medium">Features</span><br />
<span class="title-medium-alt">Specification & verification</span>
<p>
CamFort provides <em>lightweight verification</em> features.
Source-code annotations (comments) provide specifications of certain
aspects of a program's meaning or behaviour. CamFort can then check
that code conforms to these specifications. CamFort can also suggest
places to insert specifications, and in some cases case infer the
specifications of existing code.</p>
<p>
Our current specification and verification features provide:
<ul>
<li><b>Units-of-measure typing</b> allows you to annotate Fortran
source code with units of variables and can automatically check
whether units are consistently used and report back where it went
wrong if they are inconsistent.
Example: <br />
<div class="code">
<pre>
<span class='comment'>!= unit(m) :: d1, d2</span>
<span class='comment'>!= unit(s) :: t</span>
<span class='type'>real</span> :: <span class='var'>d1</span>, <span class='var'>d2</span>, <span class='var'>t</span>, <span class='var'>v</span>
<span class='var'>v</span> = (<span class='var'>d1</span> + <span class='var'>d2</span>)/<span class='var'>t</span>
</pre>
</div></li>
<li><b>Array access shape</b> allows you to describe and verify
the access patterns your code makes over arrays in order to catch
array indexing errors. Example: <br />
<div class="code">
<pre>
<span class='keyw'>do</span> <span class='var'>i</span> = 1, <span class='var'>n</span>
<span class='keyw'>do</span> <span class='var'>j</span> = 1, <span
class='var'>m</span>
<span class='var'>x</span> = <span class='var'>a</span>(<span class='var'>i</span>, <span class='var'>j</span>-1) + <span class='var'>a</span>(<span class='var'>i</span>, <span class='var'>j</span>+1) + <span class='var'>a</span>(<span class='var'>i</span>, <span class='var'>j</span>)
<span class='var'>y</span> = <span class='var'>a</span>(<span class='var'>i</span>+1, <span class='var'>j</span>-1) + <span class='var'>a</span>(<span class='var'>i</span>+1, <span class='var'>j</span>+1) + <span class='var'>a</span>(<span class='var'>i</span>+1, <span class='var'>j</span>)
<span class='comment'>!= stencil forward(dim=1,depth=1) * centered(dim=2,depth=1) :: a</span>
<span class='var'>b</span>(<span class='var'>i</span>, <span
class='var'>j</span>) = <span class='var'>x</span> + <span class='var'>y</span>
<span class='keyw'>end do</span>
<span class='keyw'>end do</span>
</pre>
</div>
</li>
</ul>
</p>
</section>
<section> <span class="title-medium-alt">Refactoring</span><br />
<p>
Many language features of older Fortran standards (pre Fortran 90) are
known to be a ready source of programming error. CamFort provides
some facilities for automatically refactoring deprecated or
dangerous programming patterns, with the goal of helping to meet
core quality requirements, such as maintainability. For example, our
tool eliminates EQUIVALENCE and COMMON blocks. These refactorings
also helps to expose any programming bugs arising from bad
programming practices.
</p>
</section>
</div>
<div id="side">
<a class="twitter-follow-button" href="https://twitter.com/camfort_tool"
data-show-count="false" data-size="large">
Follow @camfort_tool</a><br /><br /><br />
<section style='margin-top:-5pt'>
<a href="news.html" class="menu_button">News and releases</a><br /><br />
<a href="https://github.com/camfort/camfort/wiki" class="menu_button">Usage instructions</a><br /><br />
<a href="team.html" class="menu_button">Team</a><br /><br />
<a href="publications.html" class="menu_button">Publications</a><br /><br />
<a href="projects.html" class="menu_button">Project ideas</a>
</section>
<section>
<span class="title-small">Download</span><br />
The source code for CamFort is hosted on
<a href="https://github.com/camfort/camfort">GitHub</a>.<br /><br />
Latest binary release for Windows, Mac OS, and Linux:
<a href="https://github.com/camfort/camfort/releases">v1.2.0 (Oct 2022)</a>.
</section>
<section>
<span class="title-small">Mailing list</span><br />
For help and announcements you can sign-up to our
<a href="https://lists.cam.ac.uk/mailman/listinfo/cl-camfort">mailing list</a>.
</section>
<section>
<span class="title-small">Events</span><br />
An introduction to CamFort and training material is provided
as part of the <a
href="http://www.nag.co.uk/content/fortran-modernization-workshop">Fortran
Modernization Workshops</a> run by the Numerical Algorithms Group (<em>nag</em>) in the UK and
Europe.<br /><br />
We organise an annual workshop on <b style="font-weight:400;">Testing and Verification in
Computational Science</b>. Previous versions:
<ul style="margin-top:5pt;"><li>
<a href="http://www.cl.cam.ac.uk/~dao29/meeting-tvcs/" style="font-weight:400;">TVCS 2016</a></li>
<li><a href="https://camfort.github.io/tvcs2017/" style="font-weight:400;">TVCS
2017</a></li>
</ul>
</section>
<section>
<span class="title-small">Project</span><br />
CamFort is a joint project between the University of Cambridge
and University of Kent
supported by an <a
href="https://gow.epsrc.ukri.org/NGBOViewGrant.aspx?GrantRef=EP/M026124/1">EPSRC
grant</a>.</section>
<center class="logos">
<img alt="ucam" src='tvcs2017/ucam-logo.gif' class="logo"
style="top:15px;width:170px;position:relative;top:-9px;" />
<img alt="kent" src='tvcs2017/kent-logo.jpg' class="logo"
style="width:90px;"
/>
</center>
</section>
</div>
</body>
</html>