Permalink
Browse files

Merge branch 'master' into meshfree_interp

  • Loading branch information...
2 parents fbb4d17 + 756f29c commit d4e7907d50e0f1bf53f53b8e0ebab47444dbf058 @benkirk benkirk committed Dec 21, 2012
View
329 doc/html/publications.php
@@ -441,22 +441,47 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Vavourakis_2012">2</a>]
+[<a name="Zhang_2012">2</a>]
+</td>
+<td class="bibtexitem">
+L.&nbsp;Zhang, M.&nbsp;R. Tonks, D.&nbsp;Gaston, J.&nbsp;W. Peterson, D.&nbsp;Andrs, P.&nbsp;C. Millett, and
+ B.&nbsp;S. Biner.
+ A quantitative comparison between <em>C</em><sup>0</sup> and <em>C</em><sup>1</sup> elements for
+ solving the Cahn-Hilliard equation.
+ <em>Journal of Computational Physics</em>, 2012.
+ <a href="http://dx.doi.org/10.1016/j.jcp.2012.12.001">http://dx.doi.org/10.1016/j.jcp.2012.12.001</a>.
+<a name="Zhang_2012"></a><pre>
+@article{Zhang_2012,
+ author = {L.~Zhang and M.~R.~Tonks and D.~Gaston and J.~W.~Peterson and D.~Andrs and P.~C.~Millett and B.~S.~Biner},
+ title = {{A quantitative comparison between $C^0$ and $C^1$ elements for solving the Cahn-Hilliard equation}},
+ journal = {Journal of Computational Physics},
+ year = 2012,
+ note = {\url{http://dx.doi.org/10.1016/j.jcp.2012.12.001}}
+}
+</pre>
+
+
+</td>
+</tr>
+
+
+<tr valign="top">
+<td align="right" class="bibtexnumber">
+[<a name="Bittl_2012">3</a>]
</td>
<td class="bibtexitem">
-V.&nbsp;Vavourakis, A.&nbsp;Kazakidi, D.&nbsp;P. Tsakiris, and J.&nbsp;A. Ekaterinaris.
- A nonlinear dynamic finite element approach for simulating muscular
- hydrostats.
- <em>Computer Methods in Biomechanics and Biomedical Engineering</em>,
- 2012.
- <a href="http://dx.doi.org/10.1080/10255842.2012.723702">http://dx.doi.org/10.1080/10255842.2012.723702</a>.
-<a name="Vavourakis_2012"></a><pre>
-@article{Vavourakis_2012,
- author = {V.~Vavourakis and A.~Kazakidi and D.~P.~Tsakiris and J.~A.~Ekaterinaris},
- title = {{A nonlinear dynamic finite element approach for simulating muscular hydrostats}},
- journal = {Computer Methods in Biomechanics and Biomedical Engineering},
+M.&nbsp;Bittl and D.&nbsp;Kuzmin.
+ An <em>hp</em>-adaptive flux-corrected transport algorithm for continuous
+ finite elements.
+ <em>Computing</em>, 2012.
+ <a href="http://dx.doi.org/10.1007/s00607-012-0223-y">http://dx.doi.org/10.1007/s00607-012-0223-y</a>.
+<a name="Bittl_2012"></a><pre>
+@article{Bittl_2012,
+ author = {M.~Bittl and D.~Kuzmin},
+ title = {{An $hp$-adaptive flux-corrected transport algorithm for continuous finite elements}},
+ journal = {Computing},
year = 2012,
- note = {\url{http://dx.doi.org/10.1080/10255842.2012.723702}}
+ note = {\url{http://dx.doi.org/10.1007/s00607-012-0223-y}}
}
</pre>
@@ -467,24 +492,22 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Fuentes_2012">3</a>]
+[<a name="Vavourakis_2012">4</a>]
</td>
<td class="bibtexitem">
-D.&nbsp;Fuentes, A.&nbsp;Elliott, J.&nbsp;Weinberg, A.&nbsp;Shetty, J.&nbsp;Hazle, and R.&nbsp;Stafford.
- An inverse problem approach to recovery of <em>in vivo</em>
- nanoparticle concentrations from thermal image monitoring of MR-guided laser
- induced thermal therapy.
- <em>Annals of Biomedical Engineering</em>, pages 1-12, 2012.
- <a href="http://dx.doi.org/10.1007/s10439-012-0638-9">http://dx.doi.org/10.1007/s10439-012-0638-9</a>.
-<a name="Fuentes_2012"></a><pre>
-@article{Fuentes_2012,
- author = {D.~Fuentes and A.~Elliott and J.~Weinberg and A.~Shetty and J.~Hazle and R.~Stafford},
- title = {{An inverse problem approach to recovery of \emph{in vivo} nanoparticle concentrations
- from thermal image monitoring of MR-guided laser induced thermal therapy}},
- journal = {Annals of Biomedical Engineering},
+V.&nbsp;Vavourakis, A.&nbsp;Kazakidi, D.&nbsp;P. Tsakiris, and J.&nbsp;A. Ekaterinaris.
+ A nonlinear dynamic finite element approach for simulating muscular
+ hydrostats.
+ <em>Computer Methods in Biomechanics and Biomedical Engineering</em>,
+ 2012.
+ <a href="http://dx.doi.org/10.1080/10255842.2012.723702">http://dx.doi.org/10.1080/10255842.2012.723702</a>.
+<a name="Vavourakis_2012"></a><pre>
+@article{Vavourakis_2012,
+ author = {V.~Vavourakis and A.~Kazakidi and D.~P.~Tsakiris and J.~A.~Ekaterinaris},
+ title = {{A nonlinear dynamic finite element approach for simulating muscular hydrostats}},
+ journal = {Computer Methods in Biomechanics and Biomedical Engineering},
year = 2012,
- pages = {1--12},
- note = {\url{http://dx.doi.org/10.1007/s10439-012-0638-9}}
+ note = {\url{http://dx.doi.org/10.1080/10255842.2012.723702}}
}
</pre>
@@ -495,7 +518,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Vallaghe_2012">4</a>]
+[<a name="Vallaghe_2012">5</a>]
</td>
<td class="bibtexitem">
S.&nbsp;Vallagh&eacute; and A.&nbsp;T. Patera.
@@ -521,7 +544,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Griffith_2012">5</a>]
+[<a name="Griffith_2012">6</a>]
</td>
<td class="bibtexitem">
B.&nbsp;E. Griffith and X.&nbsp;Luo.
@@ -547,7 +570,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Sopeju_2011">6</a>]
+[<a name="Sopeju_2011">7</a>]
</td>
<td class="bibtexitem">
O.&nbsp;A. Sopeju, M.&nbsp;Burtscher, A.&nbsp;Rane, and J.&nbsp;Browne.
@@ -578,7 +601,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Griffith_2010">7</a>]
+[<a name="Griffith_2010">8</a>]
</td>
<td class="bibtexitem">
B.&nbsp;E. Griffith and X.&nbsp;Luo.
@@ -612,7 +635,39 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Huynh_2013">1</a>]
+[<a name="Fuentes_2013">1</a>]
+</td>
+<td class="bibtexitem">
+D.&nbsp;Fuentes, A.&nbsp;Elliott, J.&nbsp;S. Weinberg, A.&nbsp;Shetty, J.&nbsp;D. Hazle, and R.&nbsp;J.
+ Stafford.
+ An inverse problem approach to recovery of <i>in vivo</i>
+ nanoparticle concentrations from thermal image monitoring of MR-guided laser
+ induced thermal therapy.
+ <em>Annals of Biomedical Engineering</em>, 41(1):100-111, January 2013.
+ <a href="http://dx.doi.org/10.1007/s10439-012-0638-9">http://dx.doi.org/10.1007/s10439-012-0638-9</a>.
+<a name="Fuentes_2013"></a><pre>
+@article{Fuentes_2013,
+ author = {D.~Fuentes and A.~Elliott and J.~S.~Weinberg and A.~Shetty and J.~D.~Hazle and R.~J.~Stafford},
+ title = {{An inverse problem approach to recovery of \textit{in vivo} nanoparticle concentrations
+ from thermal image monitoring of MR-guided laser induced thermal therapy}},
+ journal = {Annals of Biomedical Engineering},
+ year = 2013,
+ volume = 41,
+ number = 1,
+ month = jan,
+ pages = {100--111},
+ note = {\url{http://dx.doi.org/10.1007/s10439-012-0638-9}}
+}
+</pre>
+
+
+</td>
+</tr>
+
+
+<tr valign="top">
+<td align="right" class="bibtexnumber">
+[<a name="Huynh_2013">2</a>]
</td>
<td class="bibtexitem">
D.&nbsp;B.&nbsp;P. Huynh, D.&nbsp;J. Knezevic, and A.&nbsp;T. Patera.
@@ -643,7 +698,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Vavourakis_2013">2</a>]
+[<a name="Vavourakis_2013">3</a>]
</td>
<td class="bibtexitem">
V.&nbsp;Vavourakis, D.&nbsp;Loukidis, D.&nbsp;C. Charmpis, and P.&nbsp;Papanastasiou.
@@ -671,7 +726,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Zhu_2013">3</a>]
+[<a name="Zhu_2013">4</a>]
</td>
<td class="bibtexitem">
Y.&nbsp;Zhu, X.&nbsp;Y. Luo, H.&nbsp;M. Wang, R.&nbsp;W. Ogden, and C.&nbsp;Berry.
@@ -699,7 +754,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Vetter_2013">4</a>]
+[<a name="Vetter_2013">5</a>]
</td>
<td class="bibtexitem">
R.&nbsp;Vetter, F.&nbsp;K. Wittel, N.&nbsp;Stoop, and H.&nbsp;J. Herrmann.
@@ -1056,7 +1111,38 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Camata_2012">12</a>]
+[<a name="Podgorney_2012b">12</a>]
+</td>
+<td class="bibtexitem">
+R.&nbsp;Podgorney, H.&nbsp;Huang, M.&nbsp;Plummer, and D.&nbsp;Gaston.
+ A globally-implicit computational framework for physics-based
+ simulation of coupled thermal-hydro-mechanical problems: Application to
+ sustainability of geothermal reservoirs.
+ Orkustofnun (National Energy Authority), June 2012.
+
+ <a href="http://www.os.is/gogn/Skyrslur/OS-2012/OS-2012-06/OS-2012-06-01.pdf">http://www.os.is/gogn/Skyrslur/OS-2012/OS-2012-06/OS-2012-06-01.pdf</a>.
+<a name="Podgorney_2012b"></a><pre>
+@misc{Podgorney_2012b,
+ author = {R.~Podgorney and H.~Huang and M.~Plummer and D.~Gaston},
+ title = {{A globally-implicit computational framework for
+ physics-based simulation of coupled
+ thermal-hydro-mechanical problems: Application to
+ sustainability of geothermal reservoirs}},
+ month = jun,
+ year = 2012,
+ howpublished = {{Orkustofnun (National Energy Authority)}},
+ note = {\url{http://www.os.is/gogn/Skyrslur/OS-2012/OS-2012-06/OS-2012-06-01.pdf}}
+}
+</pre>
+
+
+</td>
+</tr>
+
+
+<tr valign="top">
+<td align="right" class="bibtexnumber">
+[<a name="Camata_2012">13</a>]
</td>
<td class="bibtexitem">
J.&nbsp;J. Camata, A.&nbsp;L. Rossa, A.&nbsp;M.&nbsp;P. Valli, L.&nbsp;Catabriga, G.&nbsp;F. Carey, and
@@ -1087,7 +1173,36 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Schulz_2012">13</a>]
+[<a name="NEMO5">14</a>]
+</td>
+<td class="bibtexitem">
+S.&nbsp;Steiger.
+ <em>NEMO5 User Manual</em>.
+ Network for Computational Nanotechnology, Purdue University, May&nbsp;17,
+ 2012.
+
+ <a href="https://engineering.purdue.edu/gekcogrp/software-projects/nemo5/nemo5_manual.pdf">https://engineering.purdue.edu/gekcogrp/software-projects/nemo5/nemo5_manual.pdf</a>.
+<a name="NEMO5"></a><pre>
+@manual{NEMO5,
+ author = {S.~Steiger},
+ title = {{NEMO5 User Manual}},
+ organization = {Network for Computational Nanotechnology},
+ address = {Purdue University},
+ edition = {},
+ month = may # {~17,},
+ year = 2012,
+ note = {\url{https://engineering.purdue.edu/gekcogrp/software-projects/nemo5/nemo5_manual.pdf}}
+}
+</pre>
+
+
+</td>
+</tr>
+
+
+<tr valign="top">
+<td align="right" class="bibtexnumber">
+[<a name="Schulz_2012">15</a>]
</td>
<td class="bibtexitem">
K.&nbsp;W. Schulz, R.&nbsp;Ulerich, N.&nbsp;Malaya, P.&nbsp;T. Bauman, R.&nbsp;Stogner, and C.&nbsp;Simmons.
@@ -1115,7 +1230,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Corsini_2012">14</a>]
+[<a name="Corsini_2012">16</a>]
</td>
<td class="bibtexitem">
A.&nbsp;Corsini, A.&nbsp;Marchegiani, F.&nbsp;Rispoli, P.&nbsp;Venturini, and A.&nbsp;G. Sheard.
@@ -1144,7 +1259,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Zhu_2012">15</a>]
+[<a name="Zhu_2012">17</a>]
</td>
<td class="bibtexitem">
Y.&nbsp;F. Zhu, H.&nbsp;M. Wang, R.&nbsp;W. Ogden, and C.&nbsp;Berry.
@@ -1174,7 +1289,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Akkoyun_2012">16</a>]
+[<a name="Akkoyun_2012">18</a>]
</td>
<td class="bibtexitem">
S.&nbsp;Akkoyun et&nbsp;al.
@@ -1203,7 +1318,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Mahadevan_2012">17</a>]
+[<a name="Mahadevan_2012">19</a>]
</td>
<td class="bibtexitem">
V.&nbsp;S. Mahadevan, J.&nbsp;C. Ragusa, and V.&nbsp;A. Mousseau.
@@ -1231,7 +1346,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Podgorney_2012">18</a>]
+[<a name="Podgorney_2012">20</a>]
</td>
<td class="bibtexitem">
R.&nbsp;Podgorney, C.&nbsp;Lu, and H.&nbsp;Huang.
@@ -1261,7 +1376,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Slaughter_2012">19</a>]
+[<a name="Slaughter_2012">21</a>]
</td>
<td class="bibtexitem">
A.&nbsp;E. Slaughter and N.&nbsp;Zabaras.
@@ -1288,7 +1403,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Bordas_2012">20</a>]
+[<a name="Bordas_2012">22</a>]
</td>
<td class="bibtexitem">
R.&nbsp;M. Bordas, K.&nbsp;Gillow, D.&nbsp;Gavaghan, B.&nbsp;Rodriguez, and D.&nbsp;Kay.
@@ -1316,7 +1431,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Hales_2012">21</a>]
+[<a name="Hales_2012">23</a>]
</td>
<td class="bibtexitem">
J.&nbsp;D. Hales, S.&nbsp;R. Novascone, R.&nbsp;L. Williamson, D.&nbsp;R. Gaston, and M.&nbsp;R. Tonks.
@@ -1345,7 +1460,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Bassi_2012">22</a>]
+[<a name="Bassi_2012">24</a>]
</td>
<td class="bibtexitem">
F.&nbsp;Bassi, L.&nbsp;Botti, A.&nbsp;Colombo, D.&nbsp;A.&nbsp;Di Pietro, and P.&nbsp;Tesini.
@@ -1374,7 +1489,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Andrijauskas_2012">23</a>]
+[<a name="Andrijauskas_2012">25</a>]
</td>
<td class="bibtexitem">
T.&nbsp;Andrijauskas, A.&nbsp;A. Shylau, and I.&nbsp;V. Zozoulenko.
@@ -1402,7 +1517,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Williamson_2012">24</a>]
+[<a name="Williamson_2012">26</a>]
</td>
<td class="bibtexitem">
R.&nbsp;L. Williamson, J.&nbsp;D. Hales, S.&nbsp;R. Novascone, M.&nbsp;R. Tonks, D.&nbsp;R. Gaston,
@@ -1430,7 +1545,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Eftang_2012">25</a>]
+[<a name="Eftang_2012">27</a>]
</td>
<td class="bibtexitem">
J.&nbsp;L. Eftang, D.&nbsp;B.&nbsp;P. Huynh, D.&nbsp;J. Knezevic, and A.&nbsp;T. Patera.
@@ -1457,7 +1572,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Gerner_2012">26</a>]
+[<a name="Gerner_2012">28</a>]
</td>
<td class="bibtexitem">
A.-L. Gerner and K.&nbsp;Veroy.
@@ -1488,7 +1603,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Brummelen_2012">27</a>]
+[<a name="Brummelen_2012">29</a>]
</td>
<td class="bibtexitem">
E.&nbsp;H. van Brummelen, K.&nbsp;G. van&nbsp;der Zee, V.&nbsp;V. Garg, and S.&nbsp;Prudhomme.
@@ -1517,7 +1632,7 @@
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Huynh_2012">28</a>]
+[<a name="Huynh_2012">30</a>]
</td>
<td class="bibtexitem">
D.&nbsp;B.&nbsp;P. Huynh, D.&nbsp;J. Knezevic, and A.&nbsp;T. Patera.
@@ -4401,7 +4516,35 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Barone_2008">14</a>]
+[<a name="Kolodkin_2008">14</a>]
+</td>
+<td class="bibtexitem">
+V.&nbsp;M. Kolodkin, V.&nbsp;S. Knyazhin, M.&nbsp;V. Kolodkin, and V.&nbsp;M. Senopal'nikov.
+ Design of the technology of the blacksmith mold (Russian).
+ <em>News of the Udmurtian State University, Physics and Chemistry
+ Section</em>, 1:120-128, February 2008.
+ <a href="http://vestnik.udsu.ru/2008/2008-04/vuu_08_041_10.pdf">http://vestnik.udsu.ru/2008/2008-04/vuu_08_041_10.pdf</a>.
+<a name="Kolodkin_2008"></a><pre>
+@article{Kolodkin_2008,
+ author = {V.~M.~Kolodkin and V.~S.~Knyazhin and M.~V.~Kolodkin and V.~M.~Senopal'nikov},
+ title = {{Design of the technology of the blacksmith mold (Russian)}},
+ journal = {News of the Udmurtian State University, Physics and Chemistry Section},
+ year = 2008,
+ volume = 1,
+ month = feb,
+ pages = {120--128},
+ note = {\url{http://vestnik.udsu.ru/2008/2008-04/vuu_08_041_10.pdf}}
+}
+</pre>
+
+
+</td>
+</tr>
+
+
+<tr valign="top">
+<td align="right" class="bibtexnumber">
+[<a name="Barone_2008">15</a>]
</td>
<td class="bibtexitem">
M.&nbsp;F. Barone, D.&nbsp;J. Segalman, H.&nbsp;Thornquist, and I.&nbsp;Kalashnikova.
@@ -4428,7 +4571,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="VonEstorff_2008">15</a>]
+[<a name="VonEstorff_2008">16</a>]
</td>
<td class="bibtexitem">
O.&nbsp;von Estorff, S.&nbsp;Petersen, and D.&nbsp;Dreyer.
@@ -4459,7 +4602,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="DeSturler_2008">16</a>]
+[<a name="DeSturler_2008">17</a>]
</td>
<td class="bibtexitem">
E.&nbsp;De Sturler, G.&nbsp;H. Paulino, and S.&nbsp;Wang.
@@ -4490,7 +4633,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Stogner_2008">17</a>]
+[<a name="Stogner_2008">18</a>]
</td>
<td class="bibtexitem">
R.&nbsp;H. Stogner, G.&nbsp;F. Carey, and B.&nbsp;T. Murray.
@@ -4521,7 +4664,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Berrone_2008">18</a>]
+[<a name="Berrone_2008">19</a>]
</td>
<td class="bibtexitem">
S.&nbsp;Berrone and E.&nbsp;S&uuml;li.
@@ -4549,7 +4692,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Kirk_2008a">19</a>]
+[<a name="Kirk_2008a">20</a>]
</td>
<td class="bibtexitem">
B.&nbsp;S. Kirk and G.&nbsp;F. Carey.
@@ -4580,7 +4723,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Brinkmeier_2008">20</a>]
+[<a name="Brinkmeier_2008">21</a>]
</td>
<td class="bibtexitem">
M.&nbsp;Brinkmeier, U.&nbsp;Nackenhorst, S.&nbsp;Petersen, and O.&nbsp;von Estorff.
@@ -4608,7 +4751,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Lu_2008">21</a>]
+[<a name="Lu_2008">22</a>]
</td>
<td class="bibtexitem">
Y.&nbsp;Lu and A.&nbsp;F. Chatziioannou.
@@ -5039,7 +5182,63 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Estorff_2006">6</a>]
+[<a name="Simedrea_2006b">6</a>]
+</td>
+<td class="bibtexitem">
+P.&nbsp;Simedrea, L.&nbsp;Antiga, and D.&nbsp;A. Steinman.
+ Towards a new framework for simulating magnetic resonance imaging.
+ In <em>First Canadian Student Conference on Biomedical Computing
+ (CSCBC 2006)</em>. Queen's University, Kingston Ontario, March&nbsp;17-19, 2006.
+
+ <a href="http://cscbc2006.cs.queensu.ca/assets/documents/Papers/paper108.pdf">http://cscbc2006.cs.queensu.ca/assets/documents/Papers/paper108.pdf</a>.
+<a name="Simedrea_2006b"></a><pre>
+@inproceedings{Simedrea_2006b,
+ author = {P.~Simedrea and L.~Antiga and D.~A.~Steinman},
+ title = {{Towards a new framework for simulating magnetic resonance imaging}},
+ booktitle = {{First Canadian Student Conference on Biomedical Computing (CSCBC 2006)}},
+ publisher = {Queen's University, Kingston Ontario},
+ month = mar # {~17--19,},
+ year = {2006},
+ note = {\url{http://cscbc2006.cs.queensu.ca/assets/documents/Papers/paper108.pdf}}
+}
+</pre>
+
+
+</td>
+</tr>
+
+
+<tr valign="top">
+<td align="right" class="bibtexnumber">
+[<a name="Simedrea_2006">7</a>]
+</td>
+<td class="bibtexitem">
+P.&nbsp;Simedrea, L.&nbsp;Antiga, and D.&nbsp;A. Steinman.
+ FE-MRI: Simulation of MRI using arbitrary finite elements.
+ <em>Proceedings of the International Society for Magnetic Resonance
+ in Medicine</em>, 14:2946, 2006.
+
+ <a href="http://afni.nimh.nih.gov/sscc/staff/rwcox/ISMRM_2006/ISMRM%202006%20-%203340/files/02946.pdf">http://afni.nimh.nih.gov/sscc/staff/rwcox/ISMRM_2006/ISMRM%202006%20-%203340/files/02946.pdf</a>.
+<a name="Simedrea_2006"></a><pre>
+@article{Simedrea_2006,
+ author = {P.~Simedrea and L.~Antiga and D.~A.~Steinman},
+ title = {{FE-MRI: Simulation of MRI using arbitrary finite elements}},
+ journal = {Proceedings of the International Society for Magnetic Resonance in Medicine},
+ year = 2006,
+ volume = 14,
+ pages = {2946},
+ note = {\url{http://afni.nimh.nih.gov/sscc/staff/rwcox/ISMRM_2006/ISMRM%202006%20-%203340/files/02946.pdf}}
+}
+</pre>
+
+
+</td>
+</tr>
+
+
+<tr valign="top">
+<td align="right" class="bibtexnumber">
+[<a name="Estorff_2006">8</a>]
</td>
<td class="bibtexitem">
O.&nbsp;von Estorff and S.&nbsp;Petersen.
@@ -5068,7 +5267,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Marichalar_2006">7</a>]
+[<a name="Marichalar_2006">9</a>]
</td>
<td class="bibtexitem">
J.&nbsp;J. Marichalar, W.&nbsp;C. Rochelle, B.&nbsp;S. Kirk, and C.&nbsp;H. Campbell.
@@ -5096,7 +5295,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Petersen_2006">8</a>]
+[<a name="Petersen_2006">10</a>]
</td>
<td class="bibtexitem">
S.&nbsp;Petersen, D.&nbsp;Dreyer, and O.&nbsp;von Estorff.
@@ -5126,7 +5325,7 @@ function including specialized conduction system.
<tr valign="top">
<td align="right" class="bibtexnumber">
-[<a name="Dreyer_2006">9</a>]
+[<a name="Dreyer_2006">11</a>]
</td>
<td class="bibtexitem">
D.&nbsp;Dreyer, S.&nbsp;Petersen, and O.&nbsp;von Estorff.
View
8 include/utils/perf_log.h
@@ -29,6 +29,7 @@
#include <map>
#include <stack>
#include <string>
+#include <vector>
#include <sys/time.h>
namespace libMesh
@@ -268,6 +269,13 @@ class PerfLog
* data the first time that print_log() is called.
*/
static bool called;
+
+ /**
+ * Splits a string on whitespace into a vector of separate strings. This is used to make the
+ * LIBMESH_CONFIGURE_INFO a little more manageable.
+ */
+ void split_on_whitespace(const std::string& input,
+ std::vector<std::string>& output) const;
};
View
3 src/base/dof_map.C
@@ -35,7 +35,6 @@
#include "libmesh/mesh_base.h"
#include "libmesh/mesh_tools.h"
#include "libmesh/numeric_vector.h"
-#include "libmesh/o_string_stream.h"
#include "libmesh/parallel.h"
#include "libmesh/periodic_boundaries.h"
#include "libmesh/sparse_matrix.h"
@@ -2760,7 +2759,7 @@ void DofMap::print_info(std::ostream& os) const
std::string DofMap::get_info() const
{
- OStringStream os;
+ std::ostringstream os;
// If we didn't calculate the exact sparsity pattern, the threaded
// sparsity pattern assembly may have just given us an upper bound
View
3 src/base/dof_map_constraints.C
@@ -36,7 +36,6 @@
#include "libmesh/mesh_base.h"
#include "libmesh/mesh_inserter_iterator.h"
#include "libmesh/numeric_vector.h" // for enforce_constraints_exactly()
-#include "libmesh/o_string_stream.h"
#include "libmesh/parallel.h"
#include "libmesh/parallel_algebra.h"
#include "libmesh/periodic_boundaries.h"
@@ -1025,7 +1024,7 @@ void DofMap::print_dof_constraints(std::ostream& os,
std::string DofMap::get_local_constraints(bool print_nonlocal) const
{
- OStringStream os;
+ std::ostringstream os;
#ifdef LIBMESH_ENABLE_NODE_CONSTRAINTS
if (print_nonlocal)
os << "All ";
View
24 src/error_estimation/adjoint_residual_error_estimator.C
@@ -18,11 +18,11 @@
// C++ includes
#include <iostream>
+#include <iomanip>
// Local Includes
#include "libmesh/adjoint_residual_error_estimator.h"
#include "libmesh/error_vector.h"
-#include "libmesh/o_string_stream.h"
#include "libmesh/patch_recovery_error_estimator.h"
#include "libmesh/libmesh_logging.h"
#include "libmesh/numeric_vector.h"
@@ -197,13 +197,23 @@ void AdjointResidualErrorEstimator::estimate_error (const System& _system,
// Loop over variables
for(unsigned int v = 0; v < n_vars; v++)
{
- OStringStream primal_out;
- OStringStream dual_out;
+ std::ostringstream primal_out;
+ std::ostringstream dual_out;
primal_out << "primal_" << error_plot_suffix << ".";
dual_out << "dual_" << error_plot_suffix << ".";
- OSSRealzeroright(primal_out, 1,0,v);
- OSSRealzeroright(dual_out, 1,0,v);
+ primal_out << std::setw(1)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << v;
+
+ dual_out << std::setw(1)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << v;
+
(*primal_errors_per_cell[std::make_pair(&_system, v)]).plot_error(primal_out.str(), _system.get_mesh());
(*total_dual_errors_per_cell[std::make_pair(&_system, v)]).plot_error(dual_out.str(), _system.get_mesh());
@@ -213,8 +223,8 @@ void AdjointResidualErrorEstimator::estimate_error (const System& _system,
}
else // If not
{
- OStringStream primal_out;
- OStringStream dual_out;
+ std::ostringstream primal_out;
+ std::ostringstream dual_out;
primal_out << "primal_" << error_plot_suffix ;
dual_out << "dual_" << error_plot_suffix ;
View
9 src/error_estimation/uniform_refinement_estimator.C
@@ -32,7 +32,6 @@
#include "libmesh/mesh_base.h"
#include "libmesh/mesh_refinement.h"
#include "libmesh/numeric_vector.h"
-#include "libmesh/o_string_stream.h"
#include "libmesh/quadrature.h"
#include "libmesh/system.h"
#include "libmesh/uniform_refinement_estimator.h"
@@ -296,7 +295,7 @@ void UniformRefinementEstimator::_estimate_error (const EquationSystems* _es,
const NumericVector<Number> *vec = solution_vectors->find(sys)->second;
for (unsigned int j=0; j != sys->qoi.size(); ++j)
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "adjoint_solution" << j;
if (vec == sys->request_vector(adjoint_name.str()))
@@ -341,7 +340,7 @@ void UniformRefinementEstimator::_estimate_error (const EquationSystems* _es,
bool found_vec = false;
for (unsigned int j=0; j != sys->qoi.size(); ++j)
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "adjoint_solution" << j;
if (vec == sys->request_vector(adjoint_name.str()))
@@ -370,7 +369,7 @@ void UniformRefinementEstimator::_estimate_error (const EquationSystems* _es,
const NumericVector<Number> *vec = solution_vectors->find(sys)->second;
for (unsigned int j=0; j != sys->qoi.size(); ++j)
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "adjoint_solution" << j;
if (vec == sys->request_vector(adjoint_name.str()))
@@ -426,7 +425,7 @@ void UniformRefinementEstimator::_estimate_error (const EquationSystems* _es,
unsigned int adj = libMesh::invalid_uint;
for (unsigned int j=0; j != sys->qoi.size(); ++j)
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "adjoint_solution" << j;
if (vec == sys->request_vector(adjoint_name.str()))
View
28 src/mesh/ensight_io.C
@@ -22,13 +22,13 @@
#include <string>
#include <cstring>
#include <stdio.h>
+#include <iomanip>
#include "libmesh/dof_map.h"
#include "libmesh/ensight_io.h"
#include "libmesh/equation_systems.h"
#include "libmesh/fe_interface.h"
#include "libmesh/libmesh.h"
-#include "libmesh/o_string_stream.h"
#include "libmesh/system.h"
@@ -142,10 +142,14 @@ void EnsightIO::write_ascii (const double time)
void EnsightIO::write_geometry_ascii()
{
- OStringStream file;
+ std::ostringstream file;
file << _ensight_file_name << ".geo";
- OSSRealzeroright(file,3,0,_time_steps.size()-1);
+ file << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << _time_steps.size()-1;
FILE* fout = fopen(file.str().c_str(),"w");
@@ -350,9 +354,14 @@ void EnsightIO::write_solution_ascii()
void EnsightIO::write_scalar_ascii(const std::string &sys, const std::string &var_name)
{
- OStringStream scl_file;
+ std::ostringstream scl_file;
scl_file << _ensight_file_name << "_" << var_name << ".scl";
- OSSRealzeroright(scl_file,3,0,_time_steps.size()-1);
+
+ scl_file << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << _time_steps.size()-1;
FILE * fout = fopen(scl_file.str().c_str(),"w");
@@ -429,9 +438,14 @@ void EnsightIO::write_scalar_ascii(const std::string &sys, const std::string &va
void EnsightIO::write_vector_ascii(const std::string &sys, const std::vector<std::string> &vec, const std::string &var_name)
{
- OStringStream vec_file;
+ std::ostringstream vec_file;
vec_file<<_ensight_file_name<<"_"<<var_name<<".vec";
- OSSRealzeroright(vec_file,3,0,_time_steps.size()-1);
+
+ vec_file << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << _time_steps.size()-1;
FILE * fout = fopen(vec_file.str().c_str(),"w");
fprintf(fout,"Per vector per value\n");
View
7 src/mesh/unstructured_mesh.C
@@ -30,7 +30,6 @@
#include "libmesh/libmesh_logging.h"
#include "libmesh/elem.h"
#include "libmesh/mesh_tools.h" // For n_levels
-#include "libmesh/o_string_stream.h"
#include "libmesh/parallel.h"
#include "libmesh/remote_elem.h"
@@ -478,7 +477,7 @@ void UnstructuredMesh::read (const std::string& name,
if (name.rfind(".nem") + 4 == name.size() ||
name.rfind(".n") + 2 == name.size())
{
- OStringStream full_name;
+ std::ostringstream full_name;
full_name << name << '.' << libMesh::n_processors() << '.' << libMesh::processor_id();
std::ifstream in (full_name.str().c_str());
@@ -577,7 +576,7 @@ void UnstructuredMesh::read (const std::string& name,
// the other processors will pick it up
if (libMesh::processor_id() == 0)
{
- OStringStream pid_suffix;
+ std::ostringstream pid_suffix;
pid_suffix << '_' << getpid();
// Nasty hack for reading/writing zipped files
std::string new_name = name;
@@ -746,7 +745,7 @@ void UnstructuredMesh::write (const std::string& name,
if (libMesh::processor_id() == 0)
pid_0 = getpid();
CommWorld.broadcast(pid_0);
- OStringStream pid_suffix;
+ std::ostringstream pid_suffix;
pid_suffix << '_' << pid_0;
if (name.size() - name.rfind(".bz2") == 4)
View
5 src/reduced_basis/derived_rb_evaluation.C
@@ -19,7 +19,6 @@
#include "libmesh/derived_rb_evaluation.h"
#include "libmesh/system.h"
-#include "libmesh/o_string_stream.h"
#include <sys/stat.h>
@@ -90,7 +89,7 @@ void DerivedRBEvaluation<Base>::write_out_basis_functions(System& ,
{
std::ofstream derived_bf_size_out;
{
- OStringStream file_name;
+ std::ostringstream file_name;
file_name << directory_name << "/derived_bf_size.dat";
derived_bf_size_out.open(file_name.str().c_str());
}
@@ -115,7 +114,7 @@ void DerivedRBEvaluation<Base>::read_in_basis_functions(System& ,
// First, get the number of size of the derived basis functions
unsigned int derived_bf_size;
{
- OStringStream file_name;
+ std::ostringstream file_name;
file_name << directory_name << "/derived_bf_size.dat";
std::ifstream derived_bf_size_in(file_name.str().c_str());
View
1 src/reduced_basis/rb_eim_construction.C
@@ -35,7 +35,6 @@
#include "libmesh/getpot.h"
#include <fstream>
#include <sstream>
-#include "libmesh/o_string_stream.h"
#include "libmesh/exodusII_io.h"
#include "libmesh/fem_context.h"
View
5 src/reduced_basis/rb_eim_evaluation.C
@@ -23,7 +23,6 @@
#include "libmesh/rb_parametrized_function.h"
// libMesh includes
-#include "libmesh/o_string_stream.h"
#include "libmesh/xdr_cxx.h"
#include "libmesh/libmesh_logging.h"
@@ -245,7 +244,7 @@ void RBEIMEvaluation::write_offline_data_to_files(const std::string& directory_n
if(libMesh::processor_id() == 0)
{
- OStringStream file_name;
+ std::ostringstream file_name;
// Next write out the interpolation_matrix
file_name.str("");
@@ -345,7 +344,7 @@ void RBEIMEvaluation::read_offline_data_from_files(const std::string& directory_
const std::string suffix = read_binary_data ? ".xdr" : ".dat";
// Stream for creating file names
- OStringStream file_name;
+ std::ostringstream file_name;
// Read in the interpolation matrix
file_name.str("");
View
66 src/reduced_basis/rb_evaluation.C
@@ -28,7 +28,6 @@
#include "libmesh/libmesh_logging.h"
#include "libmesh/xdr_cxx.h"
#include "libmesh/mesh_tools.h"
-#include "libmesh/o_string_stream.h"
// C/C++ includes
#include <sys/types.h>
@@ -467,7 +466,7 @@ void RBEvaluation::write_offline_data_to_files(const std::string& directory_name
// }
// First, write out how many basis functions we have generated
- OStringStream file_name;
+ std::ostringstream file_name;
{
file_name << directory_name << "/n_bfs" << suffix;
Xdr n_bfs_out(file_name.str(), mode);
@@ -496,7 +495,12 @@ void RBEvaluation::write_offline_data_to_files(const std::string& directory_name
{
file_name.str("");
file_name << directory_name << "/output_";
- OSSRealzeroright(file_name,3,0,n);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << n;
+
file_name << "_dual_innerprods" << suffix;
Xdr output_dual_innerprods_out(file_name.str(), mode);
@@ -516,9 +520,17 @@ void RBEvaluation::write_offline_data_to_files(const std::string& directory_name
{
file_name.str("");
file_name << directory_name << "/output_";
- OSSRealzeroright(file_name,3,0,n);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << n;
file_name << "_";
- OSSRealzeroright(file_name,3,0,q_l);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << q_l;
file_name << suffix;
Xdr output_n_out(file_name.str(), mode);
@@ -551,7 +563,11 @@ void RBEvaluation::write_offline_data_to_files(const std::string& directory_name
{
file_name.str("");
file_name << directory_name << "/RB_F_";
- OSSRealzeroright(file_name,3,0,q_f);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << q_f;
file_name << suffix;
Xdr RB_Fq_f_out(file_name.str(), mode);
@@ -567,7 +583,11 @@ void RBEvaluation::write_offline_data_to_files(const std::string& directory_name
{
file_name.str("");
file_name << directory_name << "/RB_A_";
- OSSRealzeroright(file_name,3,0,q_a);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << q_a;
file_name << suffix;
Xdr RB_Aq_a_out(file_name.str(), mode);
@@ -655,7 +675,7 @@ void RBEvaluation::read_offline_data_from_files(const std::string& directory_nam
const std::string suffix = read_binary_data ? ".xdr" : ".dat";
// The string stream we'll use to make the file names
- OStringStream file_name;
+ std::ostringstream file_name;
// First, find out how many basis functions we had when Greedy terminated
unsigned int n_bfs;
@@ -681,9 +701,17 @@ void RBEvaluation::read_offline_data_from_files(const std::string& directory_nam
{
file_name.str("");
file_name << directory_name << "/output_";
- OSSRealzeroright(file_name,3,0,n);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << n;
file_name << "_";
- OSSRealzeroright(file_name,3,0,q_l);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << q_l;
file_name << suffix;
Xdr output_n_in(file_name.str(), mode);
@@ -721,7 +749,11 @@ void RBEvaluation::read_offline_data_from_files(const std::string& directory_nam
{
file_name.str("");
file_name << directory_name << "/RB_F_";
- OSSRealzeroright(file_name,3,0,q_f);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << q_f;
file_name << suffix;
Xdr RB_Fq_f_in(file_name.str(), mode);
@@ -739,7 +771,11 @@ void RBEvaluation::read_offline_data_from_files(const std::string& directory_nam
{
file_name.str("");
file_name << directory_name << "/RB_A_";
- OSSRealzeroright(file_name,3,0,q_a);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << q_a;
file_name << suffix;
Xdr RB_Aq_a_in(file_name.str(), mode);
@@ -775,7 +811,11 @@ void RBEvaluation::read_offline_data_from_files(const std::string& directory_nam
{
file_name.str("");
file_name << directory_name << "/output_";
- OSSRealzeroright(file_name,3,0,n);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << n;
file_name << "_dual_innerprods" << suffix;
Xdr output_dual_innerprods_in(file_name.str(), mode);
View
5 src/reduced_basis/rb_scm_evaluation.C
@@ -30,7 +30,6 @@
// libMesh includes
#include "libmesh/libmesh_logging.h"
#include "libmesh/numeric_vector.h"
-#include "libmesh/o_string_stream.h"
#include "libmesh/sparse_matrix.h"
#include "libmesh/equation_systems.h"
#include "libmesh/getpot.h"
@@ -392,7 +391,7 @@ void RBSCMEvaluation::write_offline_data_to_files(const std::string& directory_n
const std::string suffix = write_binary_data ? ".xdr" : ".dat";
// Stream for building the file names
- OStringStream file_name;
+ std::ostringstream file_name;
// Write out the parameter ranges
file_name.str("");
@@ -496,7 +495,7 @@ void RBSCMEvaluation::read_offline_data_from_files(const std::string& directory_
const std::string suffix = read_binary_data ? ".xdr" : ".dat";
// The string stream we'll use to make the file names
- OStringStream file_name;
+ std::ostringstream file_name;
// Read in the parameter ranges
file_name.str("");
View
9 src/reduced_basis/transient_rb_construction.C
@@ -29,7 +29,6 @@
#include "libmesh/dof_map.h"
#include "libmesh/libmesh_logging.h"
#include "libmesh/linear_solver.h"
-#include "libmesh/o_string_stream.h"
#include "libmesh/equation_systems.h"
#include "libmesh/exodusII_io.h"
#include "libmesh/getpot.h"
@@ -843,10 +842,14 @@ Real TransientRBConstruction::truth_solve(int write_interval)
{
libMesh::out << std::endl << "Truth solve, plotting time step " << time_level << std::endl;
- OStringStream file_name;
+ std::ostringstream file_name;
file_name << "truth.e.";
- OSSRealzeroright(file_name,3,0, time_level);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << time_level;
#ifdef LIBMESH_HAVE_EXODUS_API
ExodusII_IO(get_mesh()).write_equation_systems (file_name.str(),
View
19 src/reduced_basis/transient_rb_evaluation.C
@@ -27,11 +27,11 @@
#include "libmesh/xdr_cxx.h"
#include "libmesh/parallel.h"
#include "libmesh/getpot.h"
-#include "libmesh/o_string_stream.h"
// C++ includes
#include <fstream>
#include <sstream>
+#include <iomanip>
namespace libMesh
{
@@ -735,7 +735,7 @@ void TransientRBEvaluation::write_offline_data_to_files(const std::string& direc
if(libMesh::processor_id() == 0)
{
- OStringStream file_name;
+ std::ostringstream file_name;
// Write out the temporal discretization data
file_name.str("");
@@ -769,7 +769,11 @@ void TransientRBEvaluation::write_offline_data_to_files(const std::string& direc
{
file_name.str("");
file_name << directory_name << "/RB_M_";
- OSSRealzeroright(file_name,3,0,q_m);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << q_m;
file_name << suffix;
Xdr RB_M_q_m_out(file_name.str(), mode);
@@ -887,7 +891,7 @@ void TransientRBEvaluation::read_offline_data_from_files(const std::string& dire
const std::string suffix = read_binary_data ? ".xdr" : ".dat";
// The string stream we'll use to make the file names
- OStringStream file_name;
+ std::ostringstream file_name;
// Write out the temporal discretization data
file_name.str("");
@@ -921,7 +925,12 @@ void TransientRBEvaluation::read_offline_data_from_files(const std::string& dire
{
file_name.str("");
file_name << directory_name << "/RB_M_";
- OSSRealzeroright(file_name,3,0,q_m);
+ file_name << std::setw(3)
+ << std::setprecision(0)
+ << std::setfill('0')
+ << std::right
+ << q_m;
+
file_name << suffix;
Xdr RB_M_q_m_in(file_name.str(), mode);
View
31 src/systems/system.C
@@ -27,7 +27,6 @@
#include "libmesh/libmesh_logging.h"
#include "libmesh/mesh_base.h"
#include "libmesh/numeric_vector.h"
-#include "libmesh/o_string_stream.h"
#include "libmesh/parameter_vector.h"
#include "libmesh/point.h" // For point_value
#include "libmesh/point_locator_base.h" // For point_value
@@ -900,7 +899,7 @@ bool System::vector_preservation (const std::string &vec_name) const
NumericVector<Number> & System::add_sensitivity_solution (unsigned int i)
{
- OStringStream sensitivity_name;
+ std::ostringstream sensitivity_name;
sensitivity_name << "sensitivity_solution" << i;
return this->add_vector(sensitivity_name.str());
@@ -910,7 +909,7 @@ NumericVector<Number> & System::add_sensitivity_solution (unsigned int i)
NumericVector<Number> & System::get_sensitivity_solution (unsigned int i)
{
- OStringStream sensitivity_name;
+ std::ostringstream sensitivity_name;
sensitivity_name << "sensitivity_solution" << i;
return this->get_vector(sensitivity_name.str());
@@ -920,7 +919,7 @@ NumericVector<Number> & System::get_sensitivity_solution (unsigned int i)
const NumericVector<Number> & System::get_sensitivity_solution (unsigned int i) const
{
- OStringStream sensitivity_name;
+ std::ostringstream sensitivity_name;
sensitivity_name << "sensitivity_solution" << i;
return this->get_vector(sensitivity_name.str());
@@ -951,7 +950,7 @@ const NumericVector<Number> & System::get_weighted_sensitivity_solution () const
NumericVector<Number> & System::add_adjoint_solution (unsigned int i)
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "adjoint_solution" << i;
return this->add_vector(adjoint_name.str());
@@ -961,7 +960,7 @@ NumericVector<Number> & System::add_adjoint_solution (unsigned int i)
NumericVector<Number> & System::get_adjoint_solution (unsigned int i)
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "adjoint_solution" << i;
return this->get_vector(adjoint_name.str());
@@ -971,7 +970,7 @@ NumericVector<Number> & System::get_adjoint_solution (unsigned int i)
const NumericVector<Number> & System::get_adjoint_solution (unsigned int i) const
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "adjoint_solution" << i;
return this->get_vector(adjoint_name.str());
@@ -981,7 +980,7 @@ const NumericVector<Number> & System::get_adjoint_solution (unsigned int i) cons
NumericVector<Number> & System::add_weighted_sensitivity_adjoint_solution (unsigned int i)
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "weighted_sensitivity_adjoint_solution" << i;
return this->add_vector(adjoint_name.str());
@@ -991,7 +990,7 @@ NumericVector<Number> & System::add_weighted_sensitivity_adjoint_solution (unsig
NumericVector<Number> & System::get_weighted_sensitivity_adjoint_solution (unsigned int i)
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "weighted_sensitivity_adjoint_solution" << i;
return this->get_vector(adjoint_name.str());
@@ -1001,7 +1000,7 @@ NumericVector<Number> & System::get_weighted_sensitivity_adjoint_solution (unsig
const NumericVector<Number> & System::get_weighted_sensitivity_adjoint_solution (unsigned int i) const
{
- OStringStream adjoint_name;
+ std::ostringstream adjoint_name;
adjoint_name << "weighted_sensitivity_adjoint_solution" << i;
return this->get_vector(adjoint_name.str());
@@ -1011,7 +1010,7 @@ const NumericVector<Number> & System::get_weighted_sensitivity_adjoint_solution
NumericVector<Number> & System::add_adjoint_rhs (unsigned int i)
{
- OStringStream adjoint_rhs_name;
+ std::ostringstream adjoint_rhs_name;
adjoint_rhs_name << "adjoint_rhs" << i;
return this->add_vector(adjoint_rhs_name.str(), false);
@@ -1021,7 +1020,7 @@ NumericVector<Number> & System::add_adjoint_rhs (unsigned int i)
NumericVector<Number> & System::get_adjoint_rhs (unsigned int i)
{
- OStringStream adjoint_rhs_name;
+ std::ostringstream adjoint_rhs_name;
adjoint_rhs_name << "adjoint_rhs" << i;
return this->get_vector(adjoint_rhs_name.str());
@@ -1031,7 +1030,7 @@ NumericVector<Number> & System::get_adjoint_rhs (unsigned int i)
const NumericVector<Number> & System::get_adjoint_rhs (unsigned int i) const
{
- OStringStream adjoint_rhs_name;
+ std::ostringstream adjoint_rhs_name;
adjoint_rhs_name << "adjoint_rhs" << i;
return this->get_vector(adjoint_rhs_name.str());
@@ -1041,7 +1040,7 @@ const NumericVector<Number> & System::get_adjoint_rhs (unsigned int i) const
NumericVector<Number> & System::add_sensitivity_rhs (unsigned int i)
{
- OStringStream sensitivity_rhs_name;
+ std::ostringstream sensitivity_rhs_name;
sensitivity_rhs_name << "sensitivity_rhs" << i;
return this->add_vector(sensitivity_rhs_name.str(), false);
@@ -1051,7 +1050,7 @@ NumericVector<Number> & System::add_sensitivity_rhs (unsigned int i)
NumericVector<Number> & System::get_sensitivity_rhs (unsigned int i)
{
- OStringStream sensitivity_rhs_name;
+ std::ostringstream sensitivity_rhs_name;
sensitivity_rhs_name << "sensitivity_rhs" << i;
return this->get_vector(sensitivity_rhs_name.str());
@@ -1061,7 +1060,7 @@ NumericVector<Number> & System::get_sensitivity_rhs (unsigned int i)
const NumericVector<Number> & System::get_sensitivity_rhs (unsigned int i) const
{
- OStringStream sensitivity_rhs_name;
+ std::ostringstream sensitivity_rhs_name;
sensitivity_rhs_name << "sensitivity_rhs" << i;
return this->get_vector(sensitivity_rhs_name.str());
View
421 src/utils/perf_log.C
@@ -28,25 +28,9 @@
#include <vector>
// Local includes
-#include "libmesh/o_string_stream.h"
#include "libmesh/perf_log.h"
#include "libmesh/timestamp.h"
-// Anonymous helper function
-
-namespace {
-
-void output_character_line(const unsigned int n,
- const char c,
- OStringStream& out)
-{
- for (unsigned int i=0; i<n; ++i)
- out << c;
-}
-
-}
-
-
namespace libMesh
{
@@ -110,7 +94,7 @@ void PerfLog::clear()
std::string PerfLog::get_info_header() const
{
- OStringStream out;
+ std::ostringstream out;
if (log_events)
{
@@ -136,30 +120,29 @@ std::string PerfLog::get_info_header() const
out << "\n";
// Construct string stream objects for each of the outputs
- OStringStream pid_stream;
- OStringStream nprocs_stream;
- OStringStream time_stream;
- OStringStream os_stream;
- OStringStream host_stream;
- OStringStream osrel_stream;
- OStringStream osver_stream;
- OStringStream machine_stream;
- OStringStream user_stream;
- OStringStream config_stream;
+ std::ostringstream
+ pid_stream,
+ nprocs_stream,
+ time_stream,
+ os_stream,
+ host_stream,
+ osrel_stream,
+ osver_stream,
+ machine_stream,
+ user_stream;
// Put pointers to these streams in a vector
- std::vector<OStringStream*> v(10);
- v[0] = &pid_stream;
- v[1] = &nprocs_stream;
- v[2] = &time_stream;
- v[3] = &os_stream;
- v[4] = &host_stream;
- v[5] = &osrel_stream;
- v[6] = &osver_stream;
- v[7] = &machine_stream;
- v[8] = &user_stream;
- v[9] = &config_stream;
+ std::vector<std::ostringstream*> v;
+ v.push_back(&pid_stream);
+ v.push_back(&nprocs_stream);
+ v.push_back(&time_stream);
+ v.push_back(&os_stream);
+ v.push_back(&host_stream);
+ v.push_back(&osrel_stream);
+ v.push_back(&osver_stream);
+ v.push_back(&machine_stream);
+ v.push_back(&user_stream);
// Fill string stream objects
if (libMesh::n_processors() > 1)
@@ -181,31 +164,69 @@ std::string PerfLog::get_info_header() const
else
#endif
user_stream << "Unknown";
- config_stream << "| Configuration: " << LIBMESH_CONFIGURE_INFO;
- // Find the longest string, use that to set the line length for formatting.
+ // Parse the LIBMESH_CONFIGURE_INFO string literal before using it in PerfLog output
+ std::string libmesh_configure_info(LIBMESH_CONFIGURE_INFO);
+ std::vector<std::string> parsed_libmesh_configure_info;
+ this->split_on_whitespace(libmesh_configure_info,
+ parsed_libmesh_configure_info);
+
+ // There should always be at at least one entry in
+ // parsed_libmesh_configure_info, even if the user just ran
+ // ../configure.
+ libmesh_assert_greater (parsed_libmesh_configure_info.size(), 0);
+
+ // Find the longest string in all the streams
unsigned int max_length = 0;
for (unsigned int i=0; i<v.size(); ++i)
if (v[i]->str().size() > max_length)
max_length = v[i]->str().size();
- // Print dashed line
- output_character_line(max_length+2, '-', out);
- out << '\n';
+ // Find the longest string in the parsed_libmesh_configure_info
+ for (unsigned i=0; i<parsed_libmesh_configure_info.size(); ++i)
+ if (parsed_libmesh_configure_info[i].size() > max_length)
+ max_length = parsed_libmesh_configure_info[i].size();
- // Loop over all the strings and print them out with end-formatting
+ // Print dashed line for the header
+ out << ' '
+ << std::string(max_length+1, '-')
+ << '\n';
+
+ // Loop over all the strings and add end formatting
for (unsigned int i=0; i<v.size(); ++i)
{
if (v[i]->str().size() > 0)
- {
- out << v[i]->str();
- OSSStringright(out, max_length+4 - v[i]->str().size(), "|\n");
- }
+ out << v[i]->str()
+ << std::setw(max_length + 4 - v[i]->str().size())
+ << std::right
+ << "|\n";
}
+ // Print out configuration header plus first parsed string. The
+ // magic number 18 below accounts for the length of the word
+ // 'Configuration'.
+ out << "| Configuration: "
+ << parsed_libmesh_configure_info[0]
+ << std::setw(max_length + 4 - parsed_libmesh_configure_info[0].size() - 18)
+ << std::right
+ << "|\n";
+
+ // Loop over the parsed_libmesh_configure_info and add end formatting. The magic
+ // number 3 below accounts for the leading 'pipe' character and indentation
+ for (unsigned i=1; i<parsed_libmesh_configure_info.size(); ++i)
+ {
+ out << "| "
+ << parsed_libmesh_configure_info[i]
+ << std::setw(max_length + 4 - parsed_libmesh_configure_info[i].size() - 3)
+ << std::right
+ << "|\n";
+ }
+
+
// Print dashed line
- output_character_line(max_length+2, '-', out);
- out << '\n';
+ out << ' '
+ << std::string(max_length+1, '-')
+ << '\n';
}
return out.str();
@@ -216,7 +237,7 @@ std::string PerfLog::get_info_header() const
std::string PerfLog::get_perf_info() const
{
- OStringStream out;
+ std::ostringstream out;
if (log_events && !log.empty())
{
@@ -260,13 +281,13 @@ std::string PerfLog::get_perf_info() const
pct_active_incl_sub_col_width+1;
// Print dashed line
- out << ' ';
- output_character_line(total_col_width, '-', out);
- out << '\n';
+ out << ' '
+ << std::string(total_col_width, '-')
+ << '\n';
{
// Construct temporary message string
- OStringStream temp;
+ std::ostringstream temp;
temp << "| " << label_name << " Performance: Alive time=" << elapsed_time
<< ", Active time=" << total_time;
@@ -281,44 +302,73 @@ std::string PerfLog::get_perf_info() const
// happen often, hopefully. Add two additional characters for a
// space and a "|" character at the end.
if (temp_size < total_col_width+2)
- {
- OSSStringright(out, total_col_width-temp_size+2, "|");
- }
+ out << std::setw(total_col_width - temp_size + 2)
+ << std::right
+ << "|";
out << '\n';
}
// Print dashed line
- out << ' ';
- output_character_line(total_col_width, '-', out);
- out << '\n';
+ out << ' '
+ << std::string(total_col_width, '-')
+ << '\n';
// Write out the header for the events listing
- out << "| ";
- OSSStringleft(out,event_col_width,"Event");
- OSSStringleft(out,ncalls_col_width,"nCalls");
- OSSStringleft(out,tot_time_col_width,"Total Time");
- OSSStringleft(out,avg_time_col_width,"Avg Time");
- OSSStringleft(out,tot_time_incl_sub_col_width,"Total Time");
- OSSStringleft(out,avg_time_incl_sub_col_width,"Avg Time");
- OSSStringleft(out,pct_active_col_width+pct_active_incl_sub_col_width,"% of Active Time");
- out << "|\n";
- out << "| ";
- OSSStringleft(out,event_col_width,"");
- OSSStringleft(out,ncalls_col_width,"");
- OSSStringleft(out,tot_time_col_width,"w/o Sub");
- OSSStringleft(out,avg_time_col_width,"w/o Sub");
- OSSStringleft(out,tot_time_incl_sub_col_width,"With Sub");
- OSSStringleft(out,avg_time_incl_sub_col_width,"With Sub");
- OSSStringleft(out,pct_active_col_width,"w/o S");
- OSSStringleft(out,pct_active_incl_sub_col_width,"With S");
-
- out << "|\n|";
- output_character_line(total_col_width, '-', out);
- out << "|\n|";
- output_character_line(total_col_width, ' ', out);
- out << "|\n";
+ out << "| "
+ << std::setw(event_col_width)
+ << std::left
+ << "Event"
+ << std::setw(ncalls_col_width)
+ << std::left
+ << "nCalls"
+ << std::setw(tot_time_col_width)
+ << std::left
+ << "Total Time"
+ << std::setw(avg_time_col_width)
+ << std::left
+ << "Avg Time"
+ << std::setw(tot_time_incl_sub_col_width)
+ << std::left
+ << "Total Time"
+ << std::setw(avg_time_incl_sub_col_width)
+ << std::left
+ << "Avg Time"
+ << std::setw(pct_active_col_width+pct_active_incl_sub_col_width)
+ << std::left
+ << "% of Active Time"
+ << "|\n"
+ << "| "
+ << std::setw(event_col_width)
+ << std::left
+ << ""
+ << std::setw(ncalls_col_width)
+ << std::left
+ << ""
+ << std::setw(tot_time_col_width)
+ << std::left
+ << "w/o Sub"
+ << std::setw(avg_time_col_width)
+ << std::left
+ << "w/o Sub"
+ << std::setw(tot_time_incl_sub_col_width)
+ << std::left
+ << "With Sub"
+ << std::setw(avg_time_incl_sub_col_width)
+ << std::left
+ << "With Sub"
+ << std::setw(pct_active_col_width)
+ << std::left
+ << "w/o S"
+ << std::setw(pct_active_incl_sub_col_width)
+ << std::left
+ << "With S"
+ << "|\n|"
+ << std::string(total_col_width, '-')
+ << "|\n|"
+ << std::string(total_col_width, ' ')
+ << "|\n";
unsigned int summed_function_calls = 0;
double summed_total_time = 0;
@@ -347,104 +397,150 @@ std::string PerfLog::get_perf_info() const
// Print the event name
if (pos->first.first == "")
- {
- out << "| ";
- OSSStringleft(out,event_col_width,pos->first.second);
- }
+ out << "| "
+ << std::setw(event_col_width)
+ << std::left
+ << pos->first.second;
+
else
{
if (last_header != pos->first.first)
{
last_header = pos->first.first;
- // print blank line
- out << "|";
- output_character_line(total_col_width, ' ', out);
- out << "|\n";
-
- // print header name (account for additional space before
- // the header)
- out << "| ";
- OSSStringleft(out, total_col_width-1, pos->first.first);
- out << "|\n";
+ // print blank line followed by header name
+ // (account for additional space before the
+ // header)
+ out << "|"
+ << std::string(total_col_width, ' ')
+ << "|\n| "
+ << std::setw(total_col_width-1)
+ << std::left
+ << pos->first.first
+ << "|\n";
}
- out << "| ";
- OSSStringleft(out, event_col_width-2, pos->first.second);
+ out << "| "
+ << std::setw(event_col_width-2)
+ << std::left
+ << pos->first.second;
}
// Print the number of calls to the event.
- OSSInt(out,ncalls_col_width,perf_count);
+ out << std::setw(ncalls_col_width)
+ << perf_count;
+
+ // Save the original stream flags
+ std::ios_base::fmtflags out_flags = out.flags();
// Print the total time spent in the event
- out.setf(std::ios::fixed);
- OSSRealleft(out,tot_time_col_width,4,perf_time);
+ out << std::fixed
+ << std::setprecision(4)
+ << std::setw(tot_time_col_width)
+ << std::left
+ << perf_time;
+
// Print the average time per function call
- OSSRealleft(out,avg_time_col_width,6,perf_avg_time);
+ out << std::fixed
+ << std::setprecision(6)
+ << std::setw(avg_time_col_width)
+ << std::left
+ << perf_avg_time;
// Print the total time spent in the event incl. sub-events
- OSSRealleft(out,tot_time_incl_sub_col_width,4,perf_time_incl_sub);
+ out << std::fixed
+ << std::setprecision(4)
+ << std::setw(tot_time_incl_sub_col_width)
+ << std::left
+ << perf_time_incl_sub;
// Print the average time per function call incl. sub-events
- OSSRealleft(out,avg_time_incl_sub_col_width,6,perf_avg_time_incl_sub);
+ out << std::fixed
+ << std::setprecision(6)
+ << std::setw(avg_time_incl_sub_col_width)
+ << std::left
+ << perf_avg_time_incl_sub;
// Print the percentage of the time spent in the event
- OSSRealleft(out,pct_active_col_width,2,perf_percent);
+ out << std::fixed
+ << std::setprecision(2)
+ << std::setw(pct_active_col_width)
+ << std::left
+ << perf_percent;
// Print the percentage of the time spent in the event incl. sub-events
- OSSRealleft(out,pct_active_incl_sub_col_width,2,perf_percent_incl_sub);
+ out << std::fixed
+ << std::setprecision(2)
+ << std::setw(pct_active_incl_sub_col_width)
+ << std::left
+ << perf_percent_incl_sub;
- out << "|";
- out << '\n';
+ // Reset the stream flags
+ out.flags(out_flags);
+
+ out << "|\n";
}
}
- out << ' ';
- output_character_line(total_col_width, '-', out);
- out << '\n';
- out << "| ";
- OSSStringleft(out,event_col_width,"Totals:");
+ out << ' '
+ << std::string(total_col_width, '-')
+ << "\n| "
+ << std::setw(event_col_width)
+ << std::left
+ << "Totals:";
// Print the total number of logged function calls
// For routines which are called many times, summed_function_calls may
// exceed 7 digits. If this happens use, scientific notation.
if (summed_function_calls < 9999999)
- {
- OSSInt(out,ncalls_col_width,summed_function_calls);
- }
+ out << std::setw(ncalls_col_width)
+ << summed_function_calls;
else
{
- out.setf(std::ios::scientific);
- OSSRealleft(out, ncalls_col_width, 3, static_cast<Real>(summed_function_calls));
- out.unsetf(std::ios::scientific);
+ // Save the original stream flags
+ std::ios_base::fmtflags out_flags = out.flags();
+
+ out << std::scientific
+ << std::setprecision(3)
+ << std::setw(ncalls_col_width)
+ << std::left
+ << static_cast<Real>(summed_function_calls);
+
+ // Reset the stream flags
+ out.flags(out_flags);
}
- // Print the total time spent in logged function calls
- out.setf(std::ios::fixed);
- OSSRealleft(out,tot_time_col_width,4,summed_total_time);
+ // Print the total time spent in logged function calls. Don't bother saving/restoring
+ // the flags here since we are almost done with this stream anyway...
+ out << std::fixed
+ << std::setprecision(4)
+ << std::setw(tot_time_col_width)
+ << std::left
+ << summed_total_time;
// Null, the average time doesn't make sense as a total
- out.width(avg_time_col_width);
- out << "";
+ out << std::setw(avg_time_col_width) << "";
// Same for times that include sub-events
- out.width(tot_time_incl_sub_col_width);
- out << "";
- out.width(avg_time_incl_sub_col_width);
- out << "";
-
- // Print the total percentage
- OSSRealleft(out,pct_active_col_width,2,summed_percentage);
-
- out.width(pct_active_incl_sub_col_width);
- out << "";
-
- out << "|\n ";
- output_character_line(total_col_width, '-', out);
- out << '\n';
+ out << std::setw(tot_time_incl_sub_col_width)
+ << ""
+ << std::setw(avg_time_incl_sub_col_width)
+ << "";
+
+ // Print the total percentage followed by dashed line
+ out << std::fixed
+ << std::setprecision(2)
+ << std::setw(pct_active_col_width)
+ << std::left
+ << summed_percentage
+ << std::setw(pct_active_incl_sub_col_width)
+ << ""
+ << "|\n "
+ << std::string(total_col_width, '-')
+ << '\n';
}
return out.str();
@@ -454,7 +550,7 @@ std::string PerfLog::get_perf_info() const
std::string PerfLog::get_log() const
{
- OStringStream out;
+ std::ostringstream out;
if (log_events)
{
@@ -524,4 +620,45 @@ void PerfLog::restart_event(const std::string &,
+void PerfLog::split_on_whitespace(const std::string& input, std::vector<std::string>& output) const
+{
+ // Check for easy return
+ if (input.size()==0)
+ return;
+
+ // Here we hard-code the string to split on, since the algorithm below
+ // is somewhat specific to it...
+ const std::string split_on("' '");
+
+ size_t current_pos = 0;
+ while (true)
+ {
+ // Find next end location
+ size_t end_pos = input.find(split_on, current_pos);
+
+ if (end_pos != std::string::npos)
+ {
+ // Create substring. Note: the second argument to substr is
+ // the *length* of string to create, not the ending position!
+ output.push_back( input.substr(current_pos, end_pos - current_pos + 1) );
+
+ // Update search starting position, make sure to go past the end of the split_on string, but
+ // include the previous single quote (hence the -1).
+ current_pos = end_pos + split_on.size() - 1;
+ }
+ else
+ {
+ // Push back whatever remains of the string onto the output.
+ // Note that substr with only 1 argument pushes back
+ // whatever remains of the string. This also handles the
+ // case where the string does not contain any matches.
+ output.push_back( input.substr(current_pos) );
+
+ // We are done searching the string, so break out of the while loop
+ break;
+ }
+ }
+}
+
+
} // namespace libMesh
View
3 src/utils/utility.C
@@ -26,7 +26,6 @@
#include <sys/utsname.h>
// Local includes
-#include "libmesh/o_string_stream.h"
#include "libmesh/utility.h"
#include "libmesh/timestamp.h"