gtheler vor 6 Jahren
Commit
296a997a43
32 geänderte Dateien mit 4376 neuen und 0 gelöschten Zeilen
  1. +21
    -0
      .gitignore
  2. +1
    -0
      SP-FI-18-BM-B2BD.pdf
  3. BIN
      cad1.png
  4. +2
    -0
      clean.sh
  5. BIN
      cylinder-axes.pdf
  6. BIN
      cylinder-axes.png
  7. +124
    -0
      cylinder-axes.svg
  8. BIN
      cylinder.png
  9. +25
    -0
      distorted.geo
  10. BIN
      fino.pdf
  11. +337
    -0
      fino.svg
  12. +502
    -0
      fino.tex
  13. +557
    -0
      fino.xml
  14. +133
    -0
      full.html
  15. +531
    -0
      full.tex
  16. +22
    -0
      hook-pre.sh
  17. +1
    -0
      index.html
  18. BIN
      logo-seamplex.pdf
  19. BIN
      logo.pdf
  20. +151
    -0
      make.sh
  21. +9
    -0
      markuw.m4
  22. +27
    -0
      meta.yaml
  23. +503
    -0
      pipe-linearized.md
  24. +236
    -0
      plot.ppl
  25. +23
    -0
      plot.sh
  26. BIN
      quarter-caeplex.png
  27. +123
    -0
      references.bib
  28. BIN
      struct.png
  29. +146
    -0
      syntax.tex
  30. +1
    -0
      upload.sh
  31. +423
    -0
      wasora.tex
  32. +478
    -0
      wasora.xml

+ 21
- 0
.gitignore Datei anzeigen

@@ -0,0 +1,21 @@
hash.yaml
*.bbl
*.bcf
*.blg
*.run.xml
*.toc
*.aux
*.log
*.out
problem.ppl
M_*.*
MB_*.*
pipe-*.png
sigma*.*
ur.*
*-vs-*.*
distorted*.png
pipe-linearized.html
pipe-linearized.tex
pipe-linearized.pdf
simscale

+ 1
- 0
SP-FI-18-BM-B2BD.pdf Datei anzeigen

@@ -0,0 +1 @@
pipe-linearized.pdf

BIN
cad1.png Datei anzeigen

Vorher Nachher
Breite: 1105  |  Höhe: 579  |  Größe: 148KB

+ 2
- 0
clean.sh Datei anzeigen

@@ -0,0 +1,2 @@
# from https://stackoverflow.com/questions/13541615/how-to-remove-files-that-are-listed-in-the-gitignore-but-still-on-the-repositor
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/rm -rf /' | bash

BIN
cylinder-axes.pdf Datei anzeigen


BIN
cylinder-axes.png Datei anzeigen

Vorher Nachher
Breite: 381  |  Höhe: 471  |  Größe: 42KB

+ 124
- 0
cylinder-axes.svg
Datei-Diff unterdrückt, da er zu groß ist
Datei anzeigen


BIN
cylinder.png Datei anzeigen

Vorher Nachher
Breite: 381  |  Höhe: 471  |  Größe: 37KB

+ 25
- 0
distorted.geo Datei anzeigen

@@ -0,0 +1,25 @@
SetFactory("OpenCASCADE");

Cylinder(1) = {-1, 0, 0, +1, 0, 0, 2};
Cylinder(2) = {-1, 0, 0, +1, 0, 0, 1};
BooleanDifference(3) = {Volume{1};Delete;}{Volume{2};Delete;};

Mesh.CharacteristicLengthMax = 1.5;
Mesh.CharacteristicLengthMin = 1.5;

Mesh 2;

Mesh.SurfaceFaces = 1;
General.SmallAxes = 0;

General.TrackballQuaternion0 = -0.1364121862070207;
General.TrackballQuaternion1 = -0.349692028480642;
General.TrackballQuaternion2 = -0.05280511672502392;
General.TrackballQuaternion3 = 0.925374962012142;

General.ScaleX = 1.198138556712745;
General.ScaleY = 1.198138556712745;
General.ScaleZ = 1.198138556712745;

Print "distorted.png";
Exit;

BIN
fino.pdf Datei anzeigen


+ 337
- 0
fino.svg Datei anzeigen

@@ -0,0 +1,337 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="606.79126"
height="431.65607"
id="svg3177"
version="1.1"
inkscape:version="0.92.1 r15371"
sodipodi:docname="fino.svg">
<defs
id="defs3179" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="534.26966"
inkscape:cy="259.84306"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1920"
inkscape:window-height="1015"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
units="px" />
<metadata
id="metadata3182">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-474.79272,-255.85584)">
<path
class="fil0"
d="m 677.41188,508.17603 c 0.7458,0 0.7458,0 1.49159,0 h 1.49158 c -2.23737,-1.49159 -2.23737,0 -2.23737,-10.4411 2.98317,2.23738 4.47475,2.23738 4.47475,6.71213 0,6.71214 -1.49158,5.96635 -5.22055,3.72897 z"
id="path78"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd" />
<g
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48px;line-height:125%;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="text3223"
transform="matrix(8.4724362,0,0,8.4724362,-4462.7351,-5079.6201)">
<path
d="m 586.19733,663.40601 v -19.47657 l -2.32032,-0.30468 c -0.32812,-0.0312 -0.59375,-0.1328 -0.79687,-0.30469 -0.20313,-0.17186 -0.30469,-0.41404 -0.30469,-0.72656 v -1.6875 h 3.42188 v -2.17969 c -10e-6,-1.31248 0.17187,-2.47654 0.51562,-3.49219 0.35937,-1.03122 0.86718,-1.89059 1.52344,-2.57812 0.65624,-0.7031 1.45312,-1.23435 2.39062,-1.59375 0.93749,-0.37497 1.99218,-0.56247 3.16407,-0.5625 0.48436,3e-5 0.95311,0.0391 1.40625,0.11718 0.46873,0.0782 0.91405,0.18754 1.33593,0.32813 l -0.11718,2.0625 c -0.0313,0.3594 -0.21877,0.56253 -0.5625,0.60937 -0.34377,0.0313 -0.8047,0.0469 -1.38282,0.0469 -0.65626,3e-5 -1.25001,0.086 -1.78125,0.25781 -0.51563,0.17191 -0.96094,0.46097 -1.33593,0.86719 -0.37501,0.40628 -0.66407,0.94534 -0.86719,1.61719 -0.20313,0.65627 -0.3047,1.46877 -0.30469,2.4375 v 2.0625 h 10.78866 v 3 h -10.64803 v 19.5 h -4.125"
id="path4000"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccsccsccccccccccccccccccc" />
</g>
<g
aria-label="o"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="text4002">
<path
d="m 981.89067,348.13686 q 21.24733,0 38.32453,7.14862 17.0773,6.95005 28.9916,20.05585 11.9144,12.90722 18.2687,31.37449 6.5529,18.46726 6.5529,41.30312 0,23.03444 -6.5529,41.5017 -6.3543,18.46727 -18.2687,31.57307 -11.9143,12.90722 -28.9916,20.05584 -17.0772,6.95005 -38.32453,6.95005 -21.24728,0 -38.5231,-6.95005 -17.07726,-7.14862 -29.1902,-20.05584 -11.91436,-13.1058 -18.46726,-31.57307 -6.35433,-18.46726 -6.35433,-41.5017 0,-22.83586 6.35433,-41.30312 6.5529,-18.46727 18.46726,-31.37449 12.11294,-13.1058 29.1902,-20.05585 17.27582,-7.14862 38.5231,-7.14862 z m 0,172.75827 q 14.09867,0 24.62303,-4.76574 10.5243,-4.96432 17.4744,-14.29724 7.1486,-9.33291 10.5243,-22.83586 3.5744,-13.50295 3.5744,-30.77877 0,-17.27583 -3.5744,-30.77877 -3.3757,-13.50295 -10.5243,-22.83587 -6.9501,-9.33292 -17.4744,-14.29723 -10.52436,-4.96432 -24.62303,-4.96432 -14.29723,0 -25.02016,4.96432 -10.52435,4.96431 -17.67297,14.29723 -6.95005,9.33292 -10.52436,22.83587 -3.37573,13.50294 -3.37573,30.77877 0,17.27582 3.37573,30.77877 3.57431,13.50295 10.52436,22.83586 7.14862,9.33292 17.67297,14.29724 10.72293,4.76574 25.02016,4.76574 z"
style="font-size:406.67694092px;line-height:1.25"
id="path853"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="n"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="text3227">
<path
d="M 706.03639,542.0849 V 347.88077 h 20.85013 q 3.77289,0 6.15576,1.78716 2.38287,1.58858 2.78002,5.36146 l 2.97859,20.65157 q 12.51008,-13.90009 27.99875,-22.24015 15.48867,-8.53863 35.74309,-8.53863 15.88582,0 27.80018,5.36147 12.11294,5.16289 20.25442,14.89295 8.14148,9.53149 12.31151,23.23301 4.17003,13.50295 4.17003,29.98448 V 542.0849 h -34.9488 V 418.37409 q 0,-21.64442 -9.92864,-33.75736 -9.73006,-12.11294 -29.78591,-12.11294 -14.89295,0 -27.80018,7.14862 -12.90723,6.95005 -23.63015,19.46013 V 542.0849 Z"
style="font-size:406.67694092px;line-height:1.25"
id="path856"
inkscape:connector-curvature="0" />
</g>
<g
id="g3727">
<path
sodipodi:nodetypes="ccccccccccccscccccccccccc"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path22"
d="m 688.59877,408.23979 c 1.24038,-0.22429 0.99136,-0.0443 2.54123,1.8728 -4.47476,0.7458 -7.01599,-4.85597 -12.98233,-10.07652 l -19.39062,-20.13641 c -3.72896,-3.72896 -14.17006,-17.15323 -19.39061,-20.8822 -2.98317,35.79806 -3.72897,39.52702 -2.23738,74.57928 0,5.96635 -0.74579,5.22055 2.23738,8.94952 l 32.06909,46.23915 c 2.23738,3.72897 4.47476,5.22055 3.72896,7.45793 -1.49158,0 -2.98317,-2.98317 -4.47475,-5.22055 l -28.34013,-40.27281 c -1.49159,-1.49159 -4.47476,-5.96634 -5.22055,-6.71214 0,8.94952 2.23738,38.03544 2.23738,52.2055 0,8.20372 0,17.15324 -1.49159,25.35696 -0.74579,12.67848 0,12.67848 -8.20372,18.64482 -35.05226,25.35695 -39.52702,-29.08592 -38.78122,-58.17184 1.49158,-32.06909 8.20372,-65.62977 17.89902,-92.47831 4.47476,-14.17007 9.69531,-26.10275 16.40744,-38.03544 4.47476,-8.94951 17.15324,-26.84854 24.61117,-30.5775 -0.74579,4.47476 -2.98317,8.94951 -4.47476,14.17006 -1.49158,4.47476 -2.98317,8.94952 -3.72896,14.17007 -2.23738,8.20372 -2.23738,6.71213 2.98317,11.18689 5.22055,5.22055 20.8822,23.86537 26.84854,29.08592 2.23738,2.98317 12.67848,14.91585 17.15323,18.64482 z"
class="fil0" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path24"
d="m 681.14085,288.91294 c 3.72896,0.74579 6.71213,2.23738 9.6953,3.72896 4.47476,0.74579 6.71214,0.74579 8.20372,5.22055 -3.72896,5.22055 -11.93268,-0.74579 -18.64482,-2.23738 -1.49158,8.20372 -5.96634,14.91586 -11.18689,18.64482 -4.47476,2.98317 -17.15323,5.96635 -23.86537,3.72897 -29.83171,-7.45793 -35.79805,-66.37556 9.69531,-61.90081 6.71213,0.7458 14.91585,8.20372 17.89903,11.93269 5.96634,7.45793 5.22055,9.69531 8.20372,20.8822 z"
class="fil0" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path52"
d="m 645.34279,682.69155 c 1.49159,0.74579 2.23738,1.49158 4.47476,2.23738 0.74579,0 2.23738,0 2.98317,0.74579 1.49158,0.74579 0.74579,0 1.49158,1.49158 -2.98317,1.49159 -8.94951,-2.23737 -11.18689,-3.72896 -0.74579,-8.20372 4.47476,-63.39239 5.22055,-76.81666 1.49159,-11.18689 0.7458,-8.20372 -2.98317,-16.40744 -2.98317,-4.47476 -5.22055,-8.94952 -7.45793,-13.42427 -2.23738,-3.72897 -14.91585,-24.61117 -13.42427,-26.84855 2.23738,0.7458 0.74579,0 3.72897,5.22055 l 18.64482,34.30647 c 3.72896,7.45793 5.22055,5.96635 3.72896,15.66165 -0.74579,16.40745 -5.22055,63.39239 -5.22055,77.56246 z"
class="fil0" />
<polygon
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
id="polygon68"
points="2235,-117 2233,-101 2244,-102 2244,-117 "
class="fil0"
transform="matrix(-0.72068908,-0.19187023,-0.19187023,0.72068908,2301.2306,842.2308)" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path82"
d="m 707.17386,327.54532 c -0.86577,-2.54582 0.86105,-9.03202 1.43667,-11.19408 2.06379,-4.85296 0.19187,-0.72069 2.20886,-2.49902 l 0.33695,1.63324 c -0.38374,1.44139 -1.96549,10.28152 -3.98248,12.05986 z"
class="fil0" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path84"
d="m 715.2933,328.9352 c -1.63324,0.33694 -2.16206,-0.57562 -3.60343,-0.95935 l 2.78446,-4.66109 c 0.33696,1.63325 2.11527,3.65024 0.81897,5.62044 z"
class="fil0" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
inkscape:connector-curvature="0"
id="path86"
d="m 712.12038,323.45984 c 0,0 0.91258,-0.52882 -0.5756,2.16207 -1.48816,2.69088 0.52882,0.91256 -2.01698,1.77833 0,0 -2.54582,0.86576 0.0468,-3.07463 1.48816,-2.69088 1.82511,-1.05764 2.54579,-0.86577 z"
class="fil0" />
<path
sodipodi:nodetypes="sssscscscsccs"
inkscape:connector-curvature="0"
id="path2993"
d="m 613.88428,686.31934 c 0,-0.15923 -3.02046,-1.03576 -6.71214,-1.94794 -3.69167,-0.91218 -6.71213,-1.94294 -6.71213,-2.29055 0,-0.34754 4.06524,-18.65795 9.03379,-40.68972 l 9.03371,-40.05773 -4.96743,-25.04301 c -5.18281,-26.12929 -5.45592,-27.3423 -6.0272,-26.77099 -0.19256,0.19251 1.973,11.93809 4.81216,26.10132 l 5.16223,25.75131 -8.88307,39.44872 c -4.88561,21.69683 -9.05318,40.16363 -9.2611,41.03733 -0.34307,1.44109 0.20695,1.73523 5.92584,3.16962 6.07672,1.52403 8.59534,1.90252 8.59534,1.29164 z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd" />
<path
sodipodi:nodetypes="cc"
transform="translate(474.79272,255.85585)"
inkscape:connector-curvature="0"
id="path3036"
d="M 215.125,153.90607 232.49372,82.928814"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<path
inkscape:connector-curvature="0"
id="path3826"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 656.64258,568.51489 q -0.50781,0 -0.78125,-0.15625 -0.27344,-0.15625 -0.3711,-0.64453 l -0.42968,-1.77734 q -0.74219,0.68359 -1.46485,1.23047 -0.70312,0.52734 -1.48437,0.89843 -0.78125,0.3711 -1.67969,0.54688 -0.89844,0.19531 -1.97266,0.19531 -1.11328,0 -2.08984,-0.29297 -0.95703,-0.3125 -1.69922,-0.9375 -0.72265,-0.64453 -1.15234,-1.58203 -0.41016,-0.95703 -0.41016,-2.24609 0,-1.13281 0.60547,-2.16797 0.625,-1.05469 2.01172,-1.875 1.38672,-0.82031 3.61328,-1.32813 2.22656,-0.52734 5.46875,-0.60546 v -1.46485 q 0,-2.22656 -0.95703,-3.33984 -0.9375,-1.13281 -2.75391,-1.13281 -1.21093,0 -2.05078,0.3125 -0.82031,0.3125 -1.42578,0.68359 -0.60547,0.37109 -1.05469,0.68359 -0.42968,0.3125 -0.8789,0.3125 -0.35157,0 -0.60547,-0.17578 -0.25391,-0.17578 -0.41016,-0.44922 l -0.625,-1.09375 q 1.58203,-1.52343 3.39844,-2.26562 1.83594,-0.76172 4.0625,-0.76172 1.60156,0 2.85156,0.52734 1.25,0.50782 2.08985,1.46485 0.83984,0.95703 1.26953,2.28515 0.44922,1.32813 0.44922,2.94922 v 12.20703 z m -7.14844,-2.10937 q 0.85938,0 1.58203,-0.17578 0.72266,-0.17578 1.36719,-0.48828 0.64453,-0.33204 1.21094,-0.80079 0.58593,-0.48828 1.15234,-1.07421 v -3.94532 q -2.28516,0.0977 -3.88672,0.39063 -1.60156,0.27344 -2.61719,0.74219 -0.99609,0.46875 -1.44531,1.11328 -0.44922,0.625 -0.44922,1.40625 0,0.74218 0.23438,1.28906 0.2539,0.52734 0.66406,0.87891 0.41016,0.33203 0.97656,0.50781 0.56641,0.15625 1.21094,0.15625 z" />
<path
inkscape:connector-curvature="0"
id="path3828"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 672.99023,568.51489 v -16.23047 l -1.93359,-0.2539 q -0.41016,-0.0391 -0.66406,-0.25391 -0.25391,-0.21484 -0.25391,-0.60547 v -1.40625 h 2.85156 v -1.8164 q 0,-1.64063 0.42969,-2.91016 0.44922,-1.28906 1.26953,-2.14844 0.82032,-0.8789 1.99219,-1.32812 1.17188,-0.46875 2.63672,-0.46875 0.60547,0 1.17187,0.0976 0.58594,0.0977 1.11329,0.27344 l -0.0977,1.71875 q -0.0391,0.44922 -0.46875,0.50781 -0.42969,0.0391 -1.15234,0.0391 -0.82032,0 -1.48438,0.21484 -0.64453,0.21484 -1.11328,0.72266 -0.46875,0.50781 -0.72266,1.34765 -0.2539,0.82032 -0.2539,2.03125 v 1.71875 h 5.13672 v 2.5 h -5.01954 v 16.25 z" />
<path
inkscape:connector-curvature="0"
id="path3830"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 684.41602,568.51489 v -19.10156 h 1.97265 q 0.54688,0 0.76172,0.21484 0.23438,0.21485 0.27344,0.72266 l 0.23437,2.8125 q 0.87891,-1.89453 2.16797,-2.98828 1.28906,-1.09375 3.10547,-1.09375 0.60547,0 1.13281,0.13672 0.52735,0.11719 0.95703,0.41015 l -0.27343,2.53907 q -0.0586,0.48828 -0.54688,0.48828 -0.27344,0 -0.78125,-0.0977 -0.48828,-0.11719 -1.09375,-0.11719 -0.8789,0 -1.5625,0.27344 -0.66406,0.25391 -1.21094,0.78125 -0.52734,0.50781 -0.9375,1.25 -0.41015,0.74219 -0.76171,1.69922 v 12.07031 z" />
<path
inkscape:connector-curvature="0"
id="path3832"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 705.74414,549.12036 q 1.71875,0 3.18359,0.56641 1.46485,0.5664 2.53907,1.66015 1.07422,1.09375 1.67968,2.67579 0.60547,1.58203 0.60547,3.63281 0,0.80078 -0.17578,1.07422 -0.17578,0.2539 -0.64453,0.2539 H 700.1582 q 0.0391,1.79688 0.48828,3.14453 0.44922,1.32813 1.23047,2.20704 0.80078,0.8789 1.89453,1.32812 1.09375,0.42969 2.44141,0.42969 1.25,0 2.16797,-0.27344 0.91797,-0.29297 1.5625,-0.64453 0.66406,-0.35156 1.11328,-0.625 0.44922,-0.29297 0.78125,-0.29297 0.21484,0 0.37109,0.0977 0.15625,0.0781 0.27344,0.23437 l 0.97656,1.25 q -0.64453,0.76172 -1.52343,1.32813 -0.85938,0.54687 -1.85547,0.91797 -0.9961,0.35156 -2.07031,0.52734 -1.05469,0.17578 -2.08985,0.17578 -1.99219,0 -3.67187,-0.66406 -1.67969,-0.66406 -2.91016,-1.95313 -1.21094,-1.30859 -1.89453,-3.20312 -0.68359,-1.91406 -0.68359,-4.39453 0,-1.99219 0.60546,-3.71094 0.625,-1.73828 1.77735,-3.00781 1.17187,-1.28907 2.83203,-2.01172 1.67969,-0.72266 3.76953,-0.72266 z m 0.0586,2.5 q -2.40234,0 -3.80859,1.40625 -1.38672,1.40625 -1.73828,3.84766 h 10.41016 q 0,-1.15235 -0.33204,-2.10938 -0.33203,-0.97656 -0.95703,-1.66015 -0.625,-0.70313 -1.54297,-1.09375 -0.89843,-0.39063 -2.03125,-0.39063 z" />
<path
inkscape:connector-curvature="0"
id="path3834"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 725.66602,549.12036 q 1.71875,0 3.18359,0.56641 1.46484,0.5664 2.53906,1.66015 1.07422,1.09375 1.67969,2.67579 0.60547,1.58203 0.60547,3.63281 0,0.80078 -0.17578,1.07422 -0.17578,0.2539 -0.64453,0.2539 h -12.77344 q 0.0391,1.79688 0.48828,3.14453 0.44922,1.32813 1.23047,2.20704 0.80078,0.8789 1.89453,1.32812 1.09375,0.42969 2.44141,0.42969 1.25,0 2.16796,-0.27344 0.91797,-0.29297 1.5625,-0.64453 0.66407,-0.35156 1.11329,-0.625 0.44921,-0.29297 0.78125,-0.29297 0.21484,0 0.37109,0.0977 0.15625,0.0781 0.27344,0.23437 l 0.97656,1.25 q -0.64453,0.76172 -1.52344,1.32813 -0.85937,0.54687 -1.85547,0.91797 -0.99609,0.35156 -2.07031,0.52734 -1.05469,0.17578 -2.08984,0.17578 -1.99219,0 -3.67188,-0.66406 -1.67969,-0.66406 -2.91015,-1.95313 -1.21094,-1.30859 -1.89454,-3.20312 -0.68359,-1.91406 -0.68359,-4.39453 0,-1.99219 0.60547,-3.71094 0.625,-1.73828 1.77734,-3.00781 1.17188,-1.28907 2.83203,-2.01172 1.67969,-0.72266 3.76954,-0.72266 z m 0.0586,2.5 q -2.40234,0 -3.80859,1.40625 -1.38672,1.40625 -1.73829,3.84766 h 10.41016 q 0,-1.15235 -0.33203,-2.10938 -0.33203,-0.97656 -0.95703,-1.66015 -0.625,-0.70313 -1.54297,-1.09375 -0.89844,-0.39063 -2.03125,-0.39063 z" />
<path
inkscape:connector-curvature="0"
id="path3836"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 747.61914,568.51489 v -16.23047 l -2.03125,-0.2539 c -0.27344,-0.0261 -0.49479,-0.1107 -0.66406,-0.25391 -0.16927,-0.14323 -0.25391,-0.34505 -0.25391,-0.60547 v -1.40625 h 2.94922 v -2.48047 c 0,-2.08333 0.46875,-3.65885 1.40625,-4.72656 0.9375,-1.08073 2.2526,-1.62109 3.94531,-1.62109 0.29948,0 0.56641,0.013 0.80078,0.0391 0.2474,0.0261 0.48178,0.0782 0.70313,0.15625 v 1.875 c 0,0.19531 -0.0911,0.31901 -0.27344,0.37109 -0.18229,0.0521 -0.42969,0.0781 -0.74219,0.0781 -0.85937,0 -1.49739,0.29948 -1.91406,0.89844 -0.40365,0.58593 -0.60547,1.55598 -0.60547,2.91015 v 2.5 h 10.42579 l -0.74464,2.59316 -1.77099,-0.0932 v 0 h -7.79297 v 16.25 z"
sodipodi:nodetypes="ccccsccscsccscscscccccccc" />
<path
inkscape:connector-curvature="0"
id="path3838"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 768.10742,568.51489 v -19.10156 h 2.05078 q 0.3711,0 0.60547,0.17578 0.23438,0.15625 0.27344,0.52735 l 0.29297,2.03125 q 1.23047,-1.36719 2.7539,-2.1875 1.52344,-0.83985 3.51563,-0.83985 1.5625,0 2.73437,0.52735 1.19141,0.50781 1.99219,1.46484 0.80078,0.9375 1.21094,2.28516 0.41016,1.32812 0.41016,2.94921 v 12.16797 h -3.4375 v -12.16797 q 0,-2.1289 -0.97657,-3.32031 -0.95703,-1.1914 -2.92968,-1.1914 -1.46485,0 -2.73438,0.70312 -1.26953,0.68359 -2.32422,1.91406 v 14.0625 z" />
<g
id="g3747"
transform="matrix(0.09669786,0,0,0.09669786,699.7746,515.52417)">
<path
class="fil0"
d="m 688.59877,408.23979 c 1.24038,-0.22429 0.99136,-0.0443 2.54123,1.8728 -4.47476,0.7458 -7.01599,-4.85597 -12.98233,-10.07652 l -19.39062,-20.13641 c -3.72896,-3.72896 -14.17006,-17.15323 -19.39061,-20.8822 -2.98317,35.79806 -3.72897,39.52702 -2.23738,74.57928 0,5.96635 -0.74579,5.22055 2.23738,8.94952 l 32.06909,46.23915 c 2.23738,3.72897 4.47476,5.22055 3.72896,7.45793 -1.49158,0 -2.98317,-2.98317 -4.47475,-5.22055 l -28.34013,-40.27281 c -1.49159,-1.49159 -4.47476,-5.96634 -5.22055,-6.71214 0,8.94952 2.23738,38.03544 2.23738,52.2055 0,8.20372 0,17.15324 -1.49159,25.35696 -0.74579,12.67848 0,12.67848 -8.20372,18.64482 -35.05226,25.35695 -39.52702,-29.08592 -38.78122,-58.17184 1.49158,-32.06909 8.20372,-65.62977 17.89902,-92.47831 4.47476,-14.17007 9.69531,-26.10275 16.40744,-38.03544 4.47476,-8.94951 17.15324,-26.84854 24.61117,-30.5775 -0.74579,4.47476 -2.98317,8.94951 -4.47476,14.17006 -1.49158,4.47476 -2.98317,8.94952 -3.72896,14.17007 -2.23738,8.20372 -2.23738,6.71213 2.98317,11.18689 5.22055,5.22055 20.8822,23.86537 26.84854,29.08592 2.23738,2.98317 12.67848,14.91585 17.15323,18.64482 z"
id="path3729"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
sodipodi:nodetypes="ccccccccccccscccccccccccc" />
<path
class="fil0"
d="m 681.14085,288.91294 c 3.72896,0.74579 6.71213,2.23738 9.6953,3.72896 4.47476,0.74579 6.71214,0.74579 8.20372,5.22055 -3.72896,5.22055 -11.93268,-0.74579 -18.64482,-2.23738 -1.49158,8.20372 -5.96634,14.91586 -11.18689,18.64482 -4.47476,2.98317 -17.15323,5.96635 -23.86537,3.72897 -29.83171,-7.45793 -35.79805,-66.37556 9.69531,-61.90081 6.71213,0.7458 14.91585,8.20372 17.89903,11.93269 5.96634,7.45793 5.22055,9.69531 8.20372,20.8822 z"
id="path3731"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd" />
<path
class="fil0"
d="m 645.34279,682.69155 c 1.49159,0.74579 2.23738,1.49158 4.47476,2.23738 0.74579,0 2.23738,0 2.98317,0.74579 1.49158,0.74579 0.74579,0 1.49158,1.49158 -2.98317,1.49159 -8.94951,-2.23737 -11.18689,-3.72896 -0.74579,-8.20372 4.47476,-63.39239 5.22055,-76.81666 1.49159,-11.18689 0.7458,-8.20372 -2.98317,-16.40744 -2.98317,-4.47476 -5.22055,-8.94952 -7.45793,-13.42427 -2.23738,-3.72897 -14.91585,-24.61117 -13.42427,-26.84855 2.23738,0.7458 0.74579,0 3.72897,5.22055 l 18.64482,34.30647 c 3.72896,7.45793 5.22055,5.96635 3.72896,15.66165 -0.74579,16.40745 -5.22055,63.39239 -5.22055,77.56246 z"
id="path3733"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd" />
<polygon
transform="matrix(-0.72068908,-0.19187023,-0.19187023,0.72068908,2301.2306,842.2308)"
class="fil0"
points="2233,-101 2244,-102 2244,-117 2235,-117 "
id="polygon3735"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd" />
<path
class="fil0"
d="m 707.17386,327.54532 c -0.86577,-2.54582 0.86105,-9.03202 1.43667,-11.19408 2.06379,-4.85296 0.19187,-0.72069 2.20886,-2.49902 l 0.33695,1.63324 c -0.38374,1.44139 -1.96549,10.28152 -3.98248,12.05986 z"
id="path3737"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd" />
<path
class="fil0"
d="m 715.2933,328.9352 c -1.63324,0.33694 -2.16206,-0.57562 -3.60343,-0.95935 l 2.78446,-4.66109 c 0.33696,1.63325 2.11527,3.65024 0.81897,5.62044 z"
id="path3739"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd" />
<path
class="fil0"
d="m 712.12038,323.45984 c 0,0 0.91258,-0.52882 -0.5756,2.16207 -1.48816,2.69088 0.52882,0.91256 -2.01698,1.77833 0,0 -2.54582,0.86576 0.0468,-3.07463 1.48816,-2.69088 1.82511,-1.05764 2.54579,-0.86577 z"
id="path3741"
inkscape:connector-curvature="0"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd"
d="m 613.88428,686.31934 c 0,-0.15923 -3.02046,-1.03576 -6.71214,-1.94794 -3.69167,-0.91218 -6.71213,-1.94294 -6.71213,-2.29055 0,-0.34754 4.06524,-18.65795 9.03379,-40.68972 l 9.03371,-40.05773 -4.96743,-25.04301 c -5.18281,-26.12929 -5.45592,-27.3423 -6.0272,-26.77099 -0.19256,0.19251 1.973,11.93809 4.81216,26.10132 l 5.16223,25.75131 -8.88307,39.44872 c -4.88561,21.69683 -9.05318,40.16363 -9.2611,41.03733 -0.34307,1.44109 0.20695,1.73523 5.92584,3.16962 6.07672,1.52403 8.59534,1.90252 8.59534,1.29164 z"
id="path3743"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssscscscsccs" />
<path
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 215.125,153.90607 232.49372,82.928814"
id="path3745"
inkscape:connector-curvature="0"
transform="translate(474.79272,255.85585)"
sodipodi:nodetypes="cc" />
</g>
<path
inkscape:connector-curvature="0"
id="path3840"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 788.53711,568.51489 z m 4.16016,-19.10156 v 19.10156 h -3.4375 v -19.10156 z m 0.66406,-5.97656 q 0,0.48828 -0.19531,0.9375 -0.19532,0.42969 -0.54688,0.76172 -0.33203,0.3125 -0.78125,0.50781 -0.42969,0.19531 -0.91797,0.19531 -0.48828,0 -0.91797,-0.19531 -0.42968,-0.19531 -0.76172,-0.50781 -0.3125,-0.33203 -0.50781,-0.76172 -0.19531,-0.44922 -0.19531,-0.9375 0,-0.50781 0.19531,-0.9375 0.19531,-0.44922 0.50781,-0.78125 0.33204,-0.33203 0.76172,-0.52735 0.42969,-0.19531 0.91797,-0.19531 0.48828,0 0.91797,0.19531 0.44922,0.19532 0.78125,0.52735 0.35156,0.33203 0.54688,0.78125 0.19531,0.42969 0.19531,0.9375 z" />
<path
inkscape:connector-curvature="0"
id="path3842"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 803.75195,568.80786 q -2.20703,0 -3.39843,-1.26953 -1.19141,-1.26953 -1.19141,-3.63281 v -11.64063 h -2.1875 q -0.29297,0 -0.50781,-0.19531 -0.19532,-0.19531 -0.19532,-0.56641 v -1.36718 l 3.00782,-0.39063 0.80078,-5.8789 q 0.0391,-0.29297 0.23437,-0.46875 0.21485,-0.17579 0.52735,-0.17579 h 1.75781 v 6.54297 h 5.25391 v 2.5 h -5.25391 v 11.40625 q 0,1.17188 0.52734,1.75782 0.54688,0.58593 1.40625,0.58593 0.50782,0 0.85938,-0.13672 0.37109,-0.13671 0.625,-0.3125 0.2539,-0.17578 0.42969,-0.3125 0.19531,-0.13671 0.35156,-0.13671 0.17578,0 0.27344,0.0781 0.11718,0.0781 0.21484,0.25391 l 1.01562,1.64062 q -0.8789,0.82031 -2.07031,1.26953 -1.1914,0.44922 -2.48047,0.44922 z" />
<path
inkscape:connector-curvature="0"
id="path3844"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 819.10352,549.12036 q 1.71875,0 3.18359,0.56641 1.46484,0.5664 2.53906,1.66015 1.07422,1.09375 1.67969,2.67579 0.60547,1.58203 0.60547,3.63281 0,0.80078 -0.17578,1.07422 -0.17578,0.2539 -0.64453,0.2539 h -12.77344 q 0.0391,1.79688 0.48828,3.14453 0.44922,1.32813 1.23047,2.20704 0.80078,0.8789 1.89453,1.32812 1.09375,0.42969 2.44141,0.42969 1.25,0 2.16796,-0.27344 0.91797,-0.29297 1.5625,-0.64453 0.66407,-0.35156 1.11329,-0.625 0.44921,-0.29297 0.78125,-0.29297 0.21484,0 0.37109,0.0977 0.15625,0.0781 0.27344,0.23437 l 0.97656,1.25 q -0.64453,0.76172 -1.52344,1.32813 -0.85937,0.54687 -1.85547,0.91797 -0.99609,0.35156 -2.07031,0.52734 -1.05469,0.17578 -2.08984,0.17578 -1.99219,0 -3.67188,-0.66406 -1.67969,-0.66406 -2.91015,-1.95313 -1.21094,-1.30859 -1.89454,-3.20312 -0.68359,-1.91406 -0.68359,-4.39453 0,-1.99219 0.60547,-3.71094 0.625,-1.73828 1.77734,-3.00781 1.17188,-1.28907 2.83203,-2.01172 1.67969,-0.72266 3.76954,-0.72266 z m 0.0586,2.5 q -2.40234,0 -3.80859,1.40625 -1.38672,1.40625 -1.73829,3.84766 h 10.41016 q 0,-1.15235 -0.33203,-2.10938 -0.33203,-0.97656 -0.95703,-1.66015 -0.625,-0.70313 -1.54297,-1.09375 -0.89844,-0.39063 -2.03125,-0.39063 z" />
<path
inkscape:connector-curvature="0"
id="path3846"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 830.04102,555.76099 h 9.33593 v 2.91015 h -9.33593 z" />
<path
inkscape:connector-curvature="0"
id="path3848"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 851.29102,549.12036 q 1.71875,0 3.18359,0.56641 1.46484,0.5664 2.53906,1.66015 1.07422,1.09375 1.67969,2.67579 0.60547,1.58203 0.60547,3.63281 0,0.80078 -0.17578,1.07422 -0.17578,0.2539 -0.64453,0.2539 h -12.77344 q 0.0391,1.79688 0.48828,3.14453 0.44922,1.32813 1.23047,2.20704 0.80078,0.8789 1.89453,1.32812 1.09375,0.42969 2.44141,0.42969 1.25,0 2.16796,-0.27344 0.91797,-0.29297 1.5625,-0.64453 0.66407,-0.35156 1.11329,-0.625 0.44921,-0.29297 0.78125,-0.29297 0.21484,0 0.37109,0.0977 0.15625,0.0781 0.27344,0.23437 l 0.97656,1.25 q -0.64453,0.76172 -1.52344,1.32813 -0.85937,0.54687 -1.85547,0.91797 -0.99609,0.35156 -2.07031,0.52734 -1.05469,0.17578 -2.08984,0.17578 -1.99219,0 -3.67188,-0.66406 -1.67969,-0.66406 -2.91015,-1.95313 -1.21094,-1.30859 -1.89454,-3.20312 -0.68359,-1.91406 -0.68359,-4.39453 0,-1.99219 0.60547,-3.71094 0.625,-1.73828 1.77734,-3.00781 1.17188,-1.28907 2.83203,-2.01172 1.67969,-0.72266 3.76954,-0.72266 z m 0.0586,2.5 q -2.40234,0 -3.80859,1.40625 -1.38672,1.40625 -1.73829,3.84766 h 10.41016 q 0,-1.15235 -0.33203,-2.10938 -0.33203,-0.97656 -0.95703,-1.66015 -0.625,-0.70313 -1.54297,-1.09375 -0.89844,-0.39063 -2.03125,-0.39063 z" />
<path
inkscape:connector-curvature="0"
id="path3850"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 867.07227,540.74146 v 27.77343 h -3.4375 v -27.77343 z" />
<path
inkscape:connector-curvature="0"
id="path3852"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 880.43164,549.12036 q 1.71875,0 3.18359,0.56641 1.46485,0.5664 2.53907,1.66015 1.07422,1.09375 1.67968,2.67579 0.60547,1.58203 0.60547,3.63281 0,0.80078 -0.17578,1.07422 -0.17578,0.2539 -0.64453,0.2539 H 874.8457 q 0.0391,1.79688 0.48828,3.14453 0.44922,1.32813 1.23047,2.20704 0.80078,0.8789 1.89453,1.32812 1.09375,0.42969 2.44141,0.42969 1.25,0 2.16797,-0.27344 0.91797,-0.29297 1.5625,-0.64453 0.66406,-0.35156 1.11328,-0.625 0.44922,-0.29297 0.78125,-0.29297 0.21484,0 0.37109,0.0977 0.15625,0.0781 0.27344,0.23437 l 0.97656,1.25 q -0.64453,0.76172 -1.52343,1.32813 -0.85938,0.54687 -1.85547,0.91797 -0.9961,0.35156 -2.07031,0.52734 -1.05469,0.17578 -2.08985,0.17578 -1.99219,0 -3.67187,-0.66406 -1.67969,-0.66406 -2.91016,-1.95313 -1.21094,-1.30859 -1.89453,-3.20312 -0.68359,-1.91406 -0.68359,-4.39453 0,-1.99219 0.60546,-3.71094 0.625,-1.73828 1.77735,-3.00781 1.17187,-1.28907 2.83203,-2.01172 1.67969,-0.72266 3.76953,-0.72266 z m 0.0586,2.5 q -2.40234,0 -3.80859,1.40625 -1.38672,1.40625 -1.73828,3.84766 h 10.41016 q 0,-1.15235 -0.33204,-2.10938 -0.33203,-0.97656 -0.95703,-1.66015 -0.625,-0.70313 -1.54297,-1.09375 -0.89843,-0.39063 -2.03125,-0.39063 z" />
<path
inkscape:connector-curvature="0"
id="path3854"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 892.77539,568.51489 v -19.10156 h 2.03125 q 0.39063,0 0.60547,0.17578 0.23437,0.15625 0.27344,0.52735 l 0.29297,1.95312 q 0.54687,-0.64453 1.13281,-1.17187 0.60547,-0.54688 1.28906,-0.9375 0.68359,-0.41016 1.46484,-0.625 0.78125,-0.21485 1.66016,-0.21485 1.97266,0 3.20313,1.07422 1.25,1.07422 1.77734,2.89063 0.41016,-1.05469 1.07422,-1.79688 0.68359,-0.74219 1.5039,-1.23047 0.82032,-0.48828 1.75782,-0.70312 0.9375,-0.23438 1.91406,-0.23438 3.125,0 4.82422,1.875 1.71875,1.875 1.71875,5.35156 v 12.16797 h -3.4375 v -12.16797 q 0,-2.22656 -1.01563,-3.35937 -1.01562,-1.15234 -2.91015,-1.15234 -0.85938,0 -1.6211,0.29296 -0.76172,0.27344 -1.34765,0.85938 -0.56641,0.56641 -0.91797,1.40625 -0.33203,0.83984 -0.33203,1.95312 v 12.16797 h -3.4375 v -12.16797 q 0,-2.28515 -0.95703,-3.39843 -0.9375,-1.11328 -2.77344,-1.11328 -1.25,0 -2.34375,0.66406 -1.09375,0.64453 -1.99219,1.79687 v 14.21875 z" />
<path
inkscape:connector-curvature="0"
id="path3856"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 932.30664,549.12036 q 1.71875,0 3.18359,0.56641 1.46485,0.5664 2.53907,1.66015 1.07422,1.09375 1.67968,2.67579 0.60547,1.58203 0.60547,3.63281 0,0.80078 -0.17578,1.07422 -0.17578,0.2539 -0.64453,0.2539 H 926.7207 q 0.0391,1.79688 0.48828,3.14453 0.44922,1.32813 1.23047,2.20704 0.80078,0.8789 1.89453,1.32812 1.09375,0.42969 2.44141,0.42969 1.25,0 2.16797,-0.27344 0.91797,-0.29297 1.5625,-0.64453 0.66406,-0.35156 1.11328,-0.625 0.44922,-0.29297 0.78125,-0.29297 0.21484,0 0.37109,0.0977 0.15625,0.0781 0.27344,0.23437 l 0.97656,1.25 q -0.64453,0.76172 -1.52343,1.32813 -0.85938,0.54687 -1.85547,0.91797 -0.9961,0.35156 -2.07031,0.52734 -1.05469,0.17578 -2.08985,0.17578 -1.99219,0 -3.67187,-0.66406 -1.67969,-0.66406 -2.91016,-1.95313 -1.21094,-1.30859 -1.89453,-3.20312 -0.68359,-1.91406 -0.68359,-4.39453 0,-1.99219 0.60546,-3.71094 0.625,-1.73828 1.77735,-3.00781 1.17187,-1.28907 2.83203,-2.01172 1.67969,-0.72266 3.76953,-0.72266 z m 0.0586,2.5 q -2.40234,0 -3.80859,1.40625 -1.38672,1.40625 -1.73828,3.84766 h 10.41016 q 0,-1.15235 -0.33204,-2.10938 -0.33203,-0.97656 -0.95703,-1.66015 -0.625,-0.70313 -1.54297,-1.09375 -0.89843,-0.39063 -2.03125,-0.39063 z" />
<path
inkscape:connector-curvature="0"
id="path3858"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 944.51367,568.51489 v -19.10156 h 2.05078 q 0.3711,0 0.60547,0.17578 0.23438,0.15625 0.27344,0.52735 l 0.29297,2.03125 q 1.23047,-1.36719 2.7539,-2.1875 1.52344,-0.83985 3.51563,-0.83985 1.5625,0 2.73437,0.52735 1.19141,0.50781 1.99219,1.46484 0.80078,0.9375 1.21094,2.28516 0.41016,1.32812 0.41016,2.94921 v 12.16797 h -3.4375 v -12.16797 q 0,-2.1289 -0.97657,-3.32031 -0.95703,-1.1914 -2.92968,-1.1914 -1.46485,0 -2.73438,0.70312 -1.26953,0.68359 -2.32422,1.91406 v 14.0625 z" />
<path
inkscape:connector-curvature="0"
id="path3860"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 970.54883,568.80786 q -2.20703,0 -3.39844,-1.26953 -1.19141,-1.26953 -1.19141,-3.63281 v -11.64063 h -2.1875 q -0.29296,0 -0.50781,-0.19531 -0.19531,-0.19531 -0.19531,-0.56641 v -1.36718 l 3.00781,-0.39063 0.80078,-5.8789 q 0.0391,-0.29297 0.23438,-0.46875 0.21484,-0.17579 0.52734,-0.17579 h 1.75781 v 6.54297 h 5.25391 v 2.5 h -5.25391 v 11.40625 q 0,1.17188 0.52735,1.75782 0.54687,0.58593 1.40625,0.58593 0.50781,0 0.85937,-0.13672 0.3711,-0.13671 0.625,-0.3125 0.25391,-0.17578 0.42969,-0.3125 0.19531,-0.13671 0.35156,-0.13671 0.17578,0 0.27344,0.0781 0.11719,0.0781 0.21484,0.25391 l 1.01563,1.64062 q -0.87891,0.82031 -2.07031,1.26953 -1.19141,0.44922 -2.48047,0.44922 z" />
<path
inkscape:connector-curvature="0"
id="path3862"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 998.16602,552.57739 q -0.23438,0.42969 -0.70313,0.42969 -0.29297,0 -0.64453,-0.21484 -0.33203,-0.21485 -0.82031,-0.44922 -0.46875,-0.25391 -1.13282,-0.46875 -0.64453,-0.21485 -1.54296,-0.21485 -0.76172,0 -1.36719,0.21485 -0.60547,0.21484 -1.03516,0.58594 -0.42969,0.37109 -0.66406,0.8789 -0.23438,0.48828 -0.23438,1.05469 0,0.74219 0.39063,1.23047 0.39062,0.48828 1.03516,0.83984 0.64453,0.35156 1.46484,0.64453 0.83984,0.27344 1.69922,0.56641 0.85937,0.29297 1.67969,0.68359 0.83984,0.39063 1.48437,0.95703 0.64453,0.56641 1.03516,1.38672 0.39062,0.80078 0.39062,1.95313 0,1.32812 -0.44922,2.46094 -0.44922,1.11328 -1.32812,1.93359 -0.85938,0.82031 -2.14844,1.28906 -1.26953,0.46875 -2.92969,0.46875 -1.89453,0 -3.45703,-0.64453 -1.54297,-0.64453 -2.61719,-1.67969 l 0.80079,-1.28906 q 0.15625,-0.25391 0.37109,-0.39062 0.21484,-0.13672 0.54687,-0.13672 0.35157,0 0.70313,0.27343 0.35156,0.25391 0.83984,0.58594 0.50782,0.3125 1.21094,0.58594 0.70313,0.25391 1.75781,0.25391 0.89844,0 1.54297,-0.25391 0.66406,-0.25391 1.09375,-0.66406 0.42969,-0.42969 0.64453,-0.9961 0.21485,-0.5664 0.21485,-1.1914 0,-0.78125 -0.41016,-1.28907 -0.39062,-0.52734 -1.03516,-0.8789 -0.64453,-0.3711 -1.48437,-0.64453 -0.82031,-0.27344 -1.69922,-0.56641 -0.85937,-0.3125 -1.69922,-0.68359 -0.82031,-0.39063 -1.46484,-0.97657 -0.64453,-0.60546 -1.05469,-1.46484 -0.39062,-0.85937 -0.39062,-2.08984 0,-1.11328 0.42968,-2.10938 0.42969,-1.01562 1.25,-1.77734 0.82032,-0.76172 2.03125,-1.21094 1.21094,-0.44922 2.77344,-0.44922 1.77734,0 3.22266,0.58594 1.44531,0.58594 2.46093,1.64062 z" />
<path
inkscape:connector-curvature="0"
id="path3864"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 1011.0957,549.12036 q 2.0898,0 3.7695,0.70313 1.6797,0.68359 2.8516,1.97265 1.1719,1.26953 1.7969,3.08594 0.6445,1.81641 0.6445,4.0625 0,2.26563 -0.6445,4.08203 -0.625,1.81641 -1.7969,3.10547 -1.1719,1.26953 -2.8516,1.97266 -1.6797,0.68359 -3.7695,0.68359 -2.0898,0 -3.7891,-0.68359 -1.6796,-0.70313 -2.8711,-1.97266 -1.1718,-1.28906 -1.8164,-3.10547 -0.625,-1.8164 -0.625,-4.08203 0,-2.24609 0.625,-4.0625 0.6446,-1.81641 1.8164,-3.08594 1.1915,-1.28906 2.8711,-1.97265 1.6993,-0.70313 3.7891,-0.70313 z m 0,16.99219 q 1.3867,0 2.4219,-0.46875 1.0351,-0.48828 1.7187,-1.40625 0.7032,-0.91797 1.0352,-2.24609 0.3515,-1.32813 0.3515,-3.02735 0,-1.69922 -0.3515,-3.02734 -0.332,-1.32813 -1.0352,-2.2461 -0.6836,-0.91796 -1.7187,-1.40625 -1.0352,-0.48828 -2.4219,-0.48828 -1.4062,0 -2.4609,0.48828 -1.0352,0.48829 -1.7383,1.40625 -0.6836,0.91797 -1.0352,2.2461 -0.332,1.32812 -0.332,3.02734 0,1.69922 0.332,3.02735 0.3516,1.32812 1.0352,2.24609 0.7031,0.91797 1.7383,1.40625 1.0547,0.46875 2.4609,0.46875 z" />
<path
inkscape:connector-curvature="0"
id="path3866"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 1027.9316,540.74146 v 27.77343 h -3.4375 v -27.77343 z" />
<path
inkscape:connector-curvature="0"
id="path3868"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 1041.4277,568.51489 h -3.1054 l -7.1094,-19.10156 h 2.832 q 0.3906,0 0.6641,0.21484 0.2734,0.21485 0.3711,0.48829 l 4.082,12.22656 q 0.2539,0.68359 0.4297,1.32812 0.1758,0.64453 0.332,1.3086 0.1367,-0.64453 0.3125,-1.28907 0.1953,-0.66406 0.4688,-1.34765 l 4.1406,-12.22656 q 0.1172,-0.29297 0.3711,-0.48829 0.2734,-0.21484 0.6055,-0.21484 h 2.7148 z" />
<path
inkscape:connector-curvature="0"
id="path3870"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 1058.9473,549.12036 q 1.7187,0 3.1836,0.56641 1.4648,0.5664 2.539,1.66015 1.0742,1.09375 1.6797,2.67579 0.6055,1.58203 0.6055,3.63281 0,0.80078 -0.1758,1.07422 -0.1758,0.2539 -0.6445,0.2539 h -12.7735 q 0.039,1.79688 0.4883,3.14453 0.4492,1.32813 1.2305,2.20704 0.8008,0.8789 1.8945,1.32812 1.0938,0.42969 2.4414,0.42969 1.25,0 2.168,-0.27344 0.918,-0.29297 1.5625,-0.64453 0.664,-0.35156 1.1133,-0.625 0.4492,-0.29297 0.7812,-0.29297 0.2149,0 0.3711,0.0977 0.1563,0.0781 0.2734,0.23437 l 0.9766,1.25 q -0.6445,0.76172 -1.5234,1.32813 -0.8594,0.54687 -1.8555,0.91797 -0.9961,0.35156 -2.0703,0.52734 -1.0547,0.17578 -2.0899,0.17578 -1.9921,0 -3.6718,-0.66406 -1.6797,-0.66406 -2.9102,-1.95313 -1.2109,-1.30859 -1.8945,-3.20312 -0.6836,-1.91406 -0.6836,-4.39453 0,-1.99219 0.6055,-3.71094 0.625,-1.73828 1.7773,-3.00781 1.1719,-1.28907 2.832,-2.01172 1.6797,-0.72266 3.7696,-0.72266 z m 0.059,2.5 q -2.4024,0 -3.8086,1.40625 -1.3868,1.40625 -1.7383,3.84766 h 10.4101 q 0,-1.15235 -0.332,-2.10938 -0.332,-0.97656 -0.957,-1.66015 -0.625,-0.70313 -1.543,-1.09375 -0.8984,-0.39063 -2.0312,-0.39063 z" />
<path
inkscape:connector-curvature="0"
id="path3872"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Carlito;-inkscape-font-specification:Carlito;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
d="m 1070.9785,568.51489 v -19.10156 h 1.9727 q 0.5468,0 0.7617,0.21484 0.2344,0.21485 0.2734,0.72266 l 0.2344,2.8125 q 0.8789,-1.89453 2.168,-2.98828 1.289,-1.09375 3.1054,-1.09375 0.6055,0 1.1329,0.13672 0.5273,0.11719 0.957,0.41015 l -0.2735,2.53907 q -0.059,0.48828 -0.5468,0.48828 -0.2735,0 -0.7813,-0.0977 -0.4883,-0.11719 -1.0937,-0.11719 -0.8789,0 -1.5625,0.27344 -0.6641,0.25391 -1.211,0.78125 -0.5273,0.50781 -0.9375,1.25 -0.4101,0.74219 -0.7617,1.69922 v 12.07031 z" />
</g>
</svg>

+ 502
- 0
fino.tex Datei anzeigen

@@ -0,0 +1,502 @@
\lstdefinelanguage{fino}{
morekeywords={
FINO_PROBLEM,
BAKE,
HEAT,
SHAKE,
MODAL,
BREAK,
ELASTIC,
HEAT_AXISYMMETRIC,
PLANE_STRESS,
PLANE_STRAIN,
ELASTIC_AXISYMMETRIC,
DIMENSIONS,
DEGREES,
SYMMETRY_AXIS,
MESH,
N_EIGEN,
SOLUTION,
SOLUTIONS,
SOLUTION_NAMES,
UNKNOWNS,
UNKNOWN,
FINO_SOLVER,
ROUTINE,
KSP_TYPE,
PC_TYPE,
SET_NEAR_NULLSPACE,
SET_NEAR_NULL_SPACE,
DO_NOT_SET_BLOCK_SIZE,
SET_BLOCK_SIZE,
GRADIENT_EVALUATION,
GRADIENT_JACOBIAN_THRESHOLD,
PROGRESS_ASCII,
SHMEM_PROGRESS_BUILD,
PROGRESS_BUILD_SHMEM,
SHMEM_PROGRESS_SOLVE,
PROGRESS_SOLVE_SHMEM,
SHMEM_MEMORY,
MEMORY_USAGE_SHMEM,
FINO_STEP,
JUST_BUILD,
JUST_SOLVE,
DUMP_FILE_PATH,
FINO_LINEARIZE,
PHYSICAL_ENTITY,
START_POINT,
END_POINT,
FILE,
FILE_PATH,
TOTAL,
M,
MB,
PEAK,
FINO_DEBUG,
MATRICES_ASCII,
MATRICES_ASCII_STRUCTURE,
MATRICES_PETSC_BINARY,
MATRICES_PETSC_COMPRESSED_BINARY,
MATRICES_PETSC_ASCII,
MATRICES_PETSC_OCTAVE,
MATRICES_PETSC_DENSE,
MATRICES_X,
MATRICES_SNG,
MATRICES_SNG_STRUCT,
MATRICES_SIZE,
MATRICES_X_SIZE,
MATRICES_STRIDE,
INCLUDE_INPUT,
LOAD_PLUGIN,
DEFAULT_ARGUMENT_VALUE,
INCLUDE,
FROM,
TO,
ABORT,
IMPLICIT,
DO_NOT_EVALUATE_AT_PARSE_TIME,
TIME_PATH,
INITIAL_CONDITIONS_MODE,
LOAD_ROUTINE,
VAR,
CONST,
ALIAS,
IS,
AS,
VECTOR,
SIZE,
DATA,
FUNCTION_DATA,
MATRIX,
ROWS,
COLS,
FUNCTION,
NODES,
CELLS,
VECTOR_DATA,
VECTORS,
COLUMNS,
INTERPOLATION,
INTERPOLATION_THRESHOLD,
SHEPARD_RADIUS,
SHEPARD_EXPONENT,
SIZES,
X_INCREASES_FIRST,
OUTPUT_FILE,
INPUT_FILE,
MODE,
INPUT,
OUTPUT,
OPEN,
DO_NOT_OPEN,
CLOSE,
IF,
ELSE,
ENDIF,
SEMAPHORE,
SEM,
READ,
WRITE,
SHM,
SHM_OBJECT,
ASCII_FILE_PATH,
BINARY_FILE_PATH,
ASCII_FILE,
BINARY_FILE,
IGNORE_NULL,
PRINT,
NONEWLINE,
SEP,
SEPARATOR,
NOSEP,
HEADER,
STRING,
TEXT,
PRINT_FUNCTION,
MIN,
MAX,
STEP,
NSTEPS,
FORMAT,
PRINT_VECTOR,
VERTICAL,
HORIZONTAL,
ELEMS_PER_LINE,
SOLVE,
RESIDUALS,
GUESS,
METHOD,
EPSABS,
EPSREL,
MAX_ITER,
VERBOSE,
M4,
INPUT_FILE_PATH,
OUTPUT_FILE_PATH,
MACRO,
SHELL,
CALL,
HISTORY,
PARAMETRIC,
TYPE,
OUTER_STEPS,
MAX_DAUGHTERS,
OFFSET,
ADIABATIC,
FIT,
VIA,
GRADIENT,
RANGE_MIN,
RANGE_MAX,
DELTAEPSREL,
DELTAEPSABS,
DO_NOT_RERUN,
NORERUN,
RERUN,
MINIMIZE,
OPTIMIZE,
SIMAN_EFUNC,
ALGORITHM,
PHASE_SPACE,
DIFFERENTIAL,
NAME,
STRUCTURED,
ORDERING,
SCALE_FACTOR,
OFFSET_X,
OFFSET_Y,
OFFSET_Z,
NCELLS_X,
NCELLS_Y,
NCELLS_Z,
LENGTH_X,
LENGTH_Y,
LENGTH_Z,
DELTA_X,
DELTA_Y,
DELTA_Z,
READ_DATA,
READ_FUNCTION,
MESH_MAIN,
MESH_POST,
NOMESH,
NO_MESH,
NO_PHYSICAL_NAMES,
MESH_INTEGRATE,
EXPRESSION,
EXPR,
OVER,
RESULT,
GAUSS_POINTS,
MESH_FILL_VECTOR,
MESH_FIND_MAX,
I_MAX,
INDEX,
X_MAX,
Y_MAX,
Z_MAX,
ID,
MATERIAL,
BOUNDARY,
BC,
INCREMENTAL,
PHYSICAL_PROPERTY,
NONE,
ALLOWED,
AS_PROVIDED,
FROM_VARIABLES,
FROM_DERIVATIVES,
WAIT,
POST,
SKIP_STEP,
SKIP_STATIC_STEP,
SKIP_TIME,
SKIP_HEADER_STEP,
MAX_ITER,
TOL,
GRADTOL,
},
morekeywords={[2]
},
morekeywords={[3]
available_memory,
available_memory_0,
cells,
cells_0,
displ_max,
displ_max_0,
displ_max_x,
displ_max_x_0,
displ_max_y,
displ_max_y_0,
displ_max_z,
displ_max_z_0,
done,
done_0,
done_outer,
done_outer_0,
done_static,
done_static_0,
done_transient,
done_transient_0,
dont_quit,
dont_quit_0,
dont_report,
dont_report_0,
dt,
dt_0,
elements,
elements_0,
end_time,
end_time_0,
eps,
eps_0,
fino_abstol,
fino_abstol_0,
fino_dirichlet_diagonal,
fino_dirichlet_diagonal_0,
fino_divtol,
fino_divtol_0,
fino_gamg_threshold,
fino_gamg_threshold_0,
fino_iterations,
fino_iterations_0,
fino_max_iterations,
fino_max_iterations_0,
fino_penalty_weight,
fino_penalty_weight_0,
fino_reltol,
fino_reltol_0,
fino_residual_norm,
fino_residual_norm_0,
flops_petsc,
flops_petsc_0,
i,
i_0,
infinite,
infinite_0,
in_outer_initial,
in_outer_initial_0,
in_static,
in_static_0,
in_static_first,
in_static_first_0,
in_static_last,
in_static_last_0,
in_transient,
in_transient_0,
in_transient_first,
in_transient_first_0,
in_transient_last,
in_transient_last_0,
j,
j_0,
lambda,
lambda_0,
max_dt,
max_dt_0,
memory_usage_global,
memory_usage_global_0,
memory_usage_petsc,
memory_usage_petsc_0,
min_dt,
min_dt_0,
ncores,
ncores_0,
nodes,
nodes_0,
nx,
nx_0,
ny,
ny_0,
nz,
nz_0,
on_gsl_error,
on_gsl_error_0,
on_ida_error,
on_ida_error_0,
on_nan,
on_nan_0,
pi,
pi_0,
pid,
pid_0,
quit,
quit_0,
realtime_scale,
realtime_scale_0,
rel_error,
rel_error_0,
report,
report_0,
sigma_max,
sigma_max_0,
sigma_max_x,
sigma_max_x_0,
sigma_max_y,
sigma_max_y_0,
sigma_max_z,
sigma_max_z_0,
static_steps,
static_steps_0,
step_inner,
step_inner_0,
step_outer,
step_outer_0,
step_static,
step_static_0,
step_transient,
step_transient_0,
t,
t_0,
time_cpu_build,
time_cpu_build_0,
time_cpu_solve,
time_cpu_solve_0,
time_cpu_stress,
time_cpu_stress_0,
time_cpu_total,
time_cpu_total_0,
time_petsc_build,
time_petsc_build_0,
time_petsc_solve,
time_petsc_solve_0,
time_petsc_stress,
time_petsc_stress_0,
time_petsc_total,
time_petsc_total_0,
time_wall_build,
time_wall_build_0,
time_wall_solve,
time_wall_solve_0,
time_wall_stress,
time_wall_stress_0,
time_wall_total,
time_wall_total_0,
T_max,
T_max_0,
T_min,
T_min_0,
U,
U_0,
u_at_displ_max,
u_at_displ_max_0,
u_at_sigma_max,
u_at_sigma_max_0,
V,
V_0,
v_at_displ_max,
v_at_displ_max_0,
v_at_sigma_max,
v_at_sigma_max_0,
W,
W_0,
w_at_displ_max,
w_at_displ_max_0,
w_at_sigma_max,
w_at_sigma_max_0,
x,
x_0,
y,
y_0,
z,
z_0,
zero,
zero_0,
},
morekeywords={[4]
abs,
acos,
asin,
atan,
atan2,
builtindecl.h,
ceil,
clock,
cos,
cosh,
d_dt,
deadband,
derivative,
equal,
exp,
expint1,
expint2,
expint3,
expintn,
floor,
func_min,
gauss_kronrod,
gauss_legendre,
heaviside,
if,
integral,
integral_dt,
integral_euler_dt,
is_even,
is_in_interval,
is_odd,
j0,
lag,
lag_bilinear,
lag_euler,
last,
limit,
limit_dt,
log,
mark_max,
mark_min,
max,
min,
mod,
not,
prod,
random,
random_gauss,
root,
round,
sawtooth_wave,
sgn,
sin,
sinh,
sqrt,
square_wave,
sum,
tan,
tanh,
threshold_max,
threshold_min,
triangular_wave,
vecdot,
vecmax,
vecmaxindex,
vecmin,
vecminindex,
vecnorm,
vecsize,
vecsum,
},
sensitive=true,
morecomment=[l]{\#},
morestring=[b]\",
}

+ 557
- 0
fino.xml Datei anzeigen

@@ -0,0 +1,557 @@
<?xml version="1.0" encoding="UTF-8"?>
<language name="fino" version="0.3" kateversion="3.7.4" section="Scientific" extensions="*.fin" author="jeremy theler" license="GPL">
<highlighting>
<list name="prim_keywords">
<item>FINO_PROBLEM</item>
<item>BAKE</item>
<item>HEAT</item>
<item>SHAKE</item>
<item>MODAL</item>
<item>BREAK</item>
<item>ELASTIC</item>
<item>HEAT_AXISYMMETRIC</item>
<item>PLANE_STRESS</item>
<item>PLANE_STRAIN</item>
<item>ELASTIC_AXISYMMETRIC</item>
<item>DIMENSIONS</item>
<item>DEGREES</item>
<item>SYMMETRY_AXIS</item>
<item>MESH</item>
<item>N_EIGEN</item>
<item>SOLUTION</item>
<item>SOLUTIONS</item>
<item>SOLUTION_NAMES</item>
<item>UNKNOWNS</item>
<item>UNKNOWN</item>
<item>FINO_SOLVER</item>
<item>ROUTINE</item>
<item>KSP_TYPE</item>
<item>PC_TYPE</item>
<item>SET_NEAR_NULLSPACE</item>
<item>SET_NEAR_NULL_SPACE</item>
<item>DO_NOT_SET_BLOCK_SIZE</item>
<item>SET_BLOCK_SIZE</item>
<item>GRADIENT_EVALUATION</item>
<item>GRADIENT_JACOBIAN_THRESHOLD</item>
<item>PROGRESS_ASCII</item>
<item>SHMEM_PROGRESS_BUILD</item>
<item>PROGRESS_BUILD_SHMEM</item>
<item>SHMEM_PROGRESS_SOLVE</item>
<item>PROGRESS_SOLVE_SHMEM</item>
<item>SHMEM_MEMORY</item>
<item>MEMORY_USAGE_SHMEM</item>
<item>FINO_STEP</item>
<item>JUST_BUILD</item>
<item>JUST_SOLVE</item>
<item>DUMP_FILE_PATH</item>
<item>FINO_LINEARIZE</item>
<item>PHYSICAL_ENTITY</item>
<item>START_POINT</item>
<item>END_POINT</item>
<item>FILE</item>
<item>FILE_PATH</item>
<item>TOTAL</item>
<item>M</item>
<item>MB</item>
<item>PEAK</item>
<item>FINO_DEBUG</item>
<item>MATRICES_ASCII</item>
<item>MATRICES_ASCII_STRUCTURE</item>
<item>MATRICES_PETSC_BINARY</item>
<item>MATRICES_PETSC_COMPRESSED_BINARY</item>
<item>MATRICES_PETSC_ASCII</item>
<item>MATRICES_PETSC_OCTAVE</item>
<item>MATRICES_PETSC_DENSE</item>
<item>MATRICES_X</item>
<item>MATRICES_SNG</item>
<item>MATRICES_SNG_STRUCT</item>
<item>MATRICES_SIZE</item>
<item>MATRICES_X_SIZE</item>
<item>MATRICES_STRIDE</item>
<item>INCLUDE_INPUT</item>
<item>LOAD_PLUGIN</item>
<item>DEFAULT_ARGUMENT_VALUE</item>
<item>INCLUDE</item>
<item>FROM</item>
<item>TO</item>
<item>ABORT</item>
<item>IMPLICIT</item>
<item>DO_NOT_EVALUATE_AT_PARSE_TIME</item>
<item>TIME_PATH</item>
<item>INITIAL_CONDITIONS_MODE</item>
<item>LOAD_ROUTINE</item>
<item>VAR</item>
<item>CONST</item>
<item>ALIAS</item>
<item>IS</item>
<item>AS</item>
<item>VECTOR</item>
<item>SIZE</item>
<item>DATA</item>
<item>FUNCTION_DATA</item>
<item>MATRIX</item>
<item>ROWS</item>
<item>COLS</item>
<item>FUNCTION</item>
<item>NODES</item>
<item>CELLS</item>
<item>VECTOR_DATA</item>
<item>VECTORS</item>
<item>COLUMNS</item>
<item>INTERPOLATION</item>
<item>INTERPOLATION_THRESHOLD</item>
<item>SHEPARD_RADIUS</item>
<item>SHEPARD_EXPONENT</item>
<item>SIZES</item>
<item>X_INCREASES_FIRST</item>
<item>OUTPUT_FILE</item>
<item>INPUT_FILE</item>
<item>MODE</item>
<item>INPUT</item>
<item>OUTPUT</item>
<item>OPEN</item>
<item>DO_NOT_OPEN</item>
<item>CLOSE</item>
<item>IF</item>
<item>ELSE</item>
<item>ENDIF</item>
<item>SEMAPHORE</item>
<item>SEM</item>
<item>READ</item>
<item>WRITE</item>
<item>SHM</item>
<item>SHM_OBJECT</item>
<item>ASCII_FILE_PATH</item>
<item>BINARY_FILE_PATH</item>
<item>ASCII_FILE</item>
<item>BINARY_FILE</item>
<item>IGNORE_NULL</item>
<item>PRINT</item>
<item>NONEWLINE</item>
<item>SEP</item>
<item>SEPARATOR</item>
<item>NOSEP</item>
<item>HEADER</item>
<item>STRING</item>
<item>TEXT</item>
<item>PRINT_FUNCTION</item>
<item>MIN</item>
<item>MAX</item>
<item>STEP</item>
<item>NSTEPS</item>
<item>FORMAT</item>
<item>PRINT_VECTOR</item>
<item>VERTICAL</item>
<item>HORIZONTAL</item>
<item>ELEMS_PER_LINE</item>
<item>SOLVE</item>
<item>RESIDUALS</item>
<item>GUESS</item>
<item>METHOD</item>
<item>EPSABS</item>
<item>EPSREL</item>
<item>MAX_ITER</item>
<item>VERBOSE</item>
<item>M4</item>
<item>INPUT_FILE_PATH</item>
<item>OUTPUT_FILE_PATH</item>
<item>MACRO</item>
<item>SHELL</item>
<item>CALL</item>
<item>HISTORY</item>
<item>PARAMETRIC</item>
<item>TYPE</item>
<item>OUTER_STEPS</item>
<item>MAX_DAUGHTERS</item>
<item>OFFSET</item>
<item>ADIABATIC</item>
<item>FIT</item>
<item>VIA</item>
<item>GRADIENT</item>
<item>RANGE_MIN</item>
<item>RANGE_MAX</item>
<item>DELTAEPSREL</item>
<item>DELTAEPSABS</item>
<item>DO_NOT_RERUN</item>
<item>NORERUN</item>
<item>RERUN</item>
<item>MINIMIZE</item>
<item>OPTIMIZE</item>
<item>SIMAN_EFUNC</item>
<item>ALGORITHM</item>
<item>PHASE_SPACE</item>
<item>DIFFERENTIAL</item>
<item>NAME</item>
<item>STRUCTURED</item>
<item>ORDERING</item>
<item>SCALE</item>
<item>NCELLS_X</item>
<item>NCELLS_Y</item>
<item>NCELLS_Z</item>
<item>LENGTH_X</item>
<item>LENGTH_Y</item>
<item>LENGTH_Z</item>
<item>DELTA_X</item>
<item>DELTA_Y</item>
<item>DELTA_Z</item>
<item>READ_FUNCTION</item>
<item>READ_DATA</item>
<item>READ_SCALAR</item>
<item>MESH_MAIN</item>
<item>MESH_POST</item>
<item>NOMESH</item>
<item>NO_MESH</item>
<item>NO_PHYSICAL_NAMES</item>
<item>MESH_INTEGRATE</item>
<item>EXPRESSION</item>
<item>EXPR</item>
<item>OVER</item>
<item>RESULT</item>
<item>GAUSS_POINTS</item>
<item>MESH_FILL_VECTOR</item>
<item>MESH_FIND_MAX</item>
<item>I_MAX</item>
<item>INDEX</item>
<item>X_MAX</item>
<item>Y_MAX</item>
<item>Z_MAX</item>
<item>DIMENSION</item>
<item>DIM</item>
<item>MATERIAL</item>
<item>BOUNDARY</item>
<item>BC</item>
<item>PHYSICAL_PROPERTY</item>
<item>NONE</item>
<item>ALLOWED</item>
<item>AS_PROVIDED</item>
<item>FROM_VARIABLES</item>
<item>FROM_DERIVATIVES</item>
<item>WAIT</item>
<item>POST</item>
<item>SKIP_STEP</item>
<item>SKIP_STATIC_STEP</item>
<item>SKIP_TIME</item>
<item>SKIP_HEADER_STEP</item>
<item>MAX_ITER</item>
<item>TOL</item>
<item>GRADTOL</item>
</list>
<list name="sec_keywords">
</list>
<list name="internals">
<item>cells</item>
<item>cells_0</item>
<item>displ_max</item>
<item>displ_max_0</item>
<item>displ_max_x</item>
<item>displ_max_x_0</item>
<item>displ_max_y</item>
<item>displ_max_y_0</item>
<item>displ_max_z</item>
<item>displ_max_z_0</item>
<item>done</item>
<item>done_0</item>
<item>done_outer</item>
<item>done_outer_0</item>
<item>done_static</item>
<item>done_static_0</item>
<item>done_transient</item>
<item>done_transient_0</item>
<item>dont_quit</item>
<item>dont_quit_0</item>
<item>dont_report</item>
<item>dont_report_0</item>
<item>dt</item>
<item>dt_0</item>
<item>elements</item>
<item>elements_0</item>
<item>end_time</item>
<item>end_time_0</item>
<item>eps</item>
<item>eps_0</item>
<item>fino_abstol</item>
<item>fino_abstol_0</item>
<item>fino_dirichlet_diagonal</item>
<item>fino_dirichlet_diagonal_0</item>
<item>fino_divtol</item>
<item>fino_divtol_0</item>
<item>fino_gamg_threshold</item>
<item>fino_gamg_threshold_0</item>
<item>fino_iterations</item>
<item>fino_iterations_0</item>
<item>fino_max_iterations</item>
<item>fino_max_iterations_0</item>
<item>fino_penalty_weight</item>
<item>fino_penalty_weight_0</item>
<item>fino_reltol</item>
<item>fino_reltol_0</item>
<item>fino_residual_norm</item>
<item>fino_residual_norm_0</item>
<item>flops_petsc</item>
<item>flops_petsc_0</item>
<item>i</item>
<item>i_0</item>
<item>infinite</item>
<item>infinite_0</item>
<item>in_outer_initial</item>
<item>in_outer_initial_0</item>
<item>in_static</item>
<item>in_static_0</item>
<item>in_static_first</item>
<item>in_static_first_0</item>
<item>in_static_last</item>
<item>in_static_last_0</item>
<item>in_transient</item>
<item>in_transient_0</item>
<item>in_transient_first</item>
<item>in_transient_first_0</item>
<item>in_transient_last</item>
<item>in_transient_last_0</item>
<item>j</item>
<item>j_0</item>
<item>lambda</item>
<item>lambda_0</item>
<item>max_dt</item>
<item>max_dt_0</item>
<item>memory</item>
<item>memory_0</item>
<item>memory_available</item>
<item>memory_available_0</item>
<item>memory_petsc</item>
<item>memory_petsc_0</item>
<item>min_dt</item>
<item>min_dt_0</item>
<item>ncores</item>
<item>ncores_0</item>
<item>nodes</item>
<item>nodes_0</item>
<item>nx</item>
<item>nx_0</item>
<item>ny</item>
<item>ny_0</item>
<item>nz</item>
<item>nz_0</item>
<item>on_gsl_error</item>
<item>on_gsl_error_0</item>
<item>on_ida_error</item>
<item>on_ida_error_0</item>
<item>on_nan</item>
<item>on_nan_0</item>
<item>pi</item>
<item>pi_0</item>
<item>pid</item>
<item>pid_0</item>
<item>quit</item>
<item>quit_0</item>
<item>realtime_scale</item>
<item>realtime_scale_0</item>
<item>rel_error</item>
<item>rel_error_0</item>
<item>report</item>
<item>report_0</item>
<item>sigma_max</item>
<item>sigma_max_0</item>
<item>sigma_max_x</item>
<item>sigma_max_x_0</item>
<item>sigma_max_y</item>
<item>sigma_max_y_0</item>
<item>sigma_max_z</item>
<item>sigma_max_z_0</item>
<item>static_steps</item>
<item>static_steps_0</item>
<item>step_inner</item>
<item>step_inner_0</item>
<item>step_outer</item>
<item>step_outer_0</item>
<item>step_static</item>
<item>step_static_0</item>
<item>step_transient</item>
<item>step_transient_0</item>
<item>t</item>
<item>t_0</item>
<item>time_cpu_build</item>
<item>time_cpu_build_0</item>
<item>time_cpu_solve</item>
<item>time_cpu_solve_0</item>
<item>time_cpu_stress</item>
<item>time_cpu_stress_0</item>
<item>time_cpu_total</item>
<item>time_cpu_total_0</item>
<item>time_petsc_build</item>
<item>time_petsc_build_0</item>
<item>time_petsc_solve</item>
<item>time_petsc_solve_0</item>
<item>time_petsc_stress</item>
<item>time_petsc_stress_0</item>
<item>time_petsc_total</item>
<item>time_petsc_total_0</item>
<item>time_wall_build</item>
<item>time_wall_build_0</item>
<item>time_wall_solve</item>
<item>time_wall_solve_0</item>
<item>time_wall_stress</item>
<item>time_wall_stress_0</item>
<item>time_wall_total</item>
<item>time_wall_total_0</item>
<item>T_max</item>
<item>T_max_0</item>
<item>T_min</item>
<item>T_min_0</item>
<item>U</item>
<item>U_0</item>
<item>u_at_displ_max</item>
<item>u_at_displ_max_0</item>
<item>u_at_sigma_max</item>
<item>u_at_sigma_max_0</item>
<item>V</item>
<item>V_0</item>
<item>v_at_displ_max</item>
<item>v_at_displ_max_0</item>
<item>v_at_sigma_max</item>
<item>v_at_sigma_max_0</item>
<item>W</item>
<item>W_0</item>
<item>w_at_displ_max</item>
<item>w_at_displ_max_0</item>
<item>w_at_sigma_max</item>
<item>w_at_sigma_max_0</item>
<item>x</item>
<item>x_0</item>
<item>y</item>
<item>y_0</item>
<item>z</item>
<item>z_0</item>
<item>zero</item>
<item>zero_0</item>
</list>
<list name="functions">
<item>abs</item>
<item>acos</item>
<item>asin</item>
<item>atan</item>
<item>atan2</item>
<item>builtindecl.h</item>
<item>ceil</item>
<item>clock</item>
<item>cos</item>
<item>cosh</item>
<item>d_dt</item>
<item>deadband</item>
<item>derivative</item>
<item>equal</item>
<item>exp</item>
<item>expint1</item>
<item>expint2</item>
<item>expint3</item>
<item>expintn</item>
<item>floor</item>
<item>func_min</item>
<item>gauss_kronrod</item>
<item>gauss_legendre</item>
<item>heaviside</item>
<item>if</item>
<item>integral</item>
<item>integral_dt</item>
<item>integral_euler_dt</item>
<item>is_even</item>
<item>is_in_interval</item>
<item>is_odd</item>
<item>j0</item>
<item>lag</item>
<item>lag_bilinear</item>
<item>lag_euler</item>
<item>last</item>
<item>limit</item>
<item>limit_dt</item>
<item>log</item>
<item>mark_max</item>
<item>mark_min</item>
<item>max</item>
<item>min</item>
<item>mod</item>
<item>not</item>
<item>prod</item>
<item>random</item>
<item>random_gauss</item>
<item>root</item>
<item>round</item>
<item>sawtooth_wave</item>
<item>sgn</item>
<item>sin</item>
<item>sinh</item>
<item>sqrt</item>
<item>square_wave</item>
<item>sum</item>
<item>tan</item>
<item>tanh</item>
<item>threshold_max</item>
<item>threshold_min</item>
<item>triangular_wave</item>
<item>vecdot</item>
<item>vecmax</item>
<item>vecmaxindex</item>
<item>vecmin</item>
<item>vecminindex</item>
<item>vecnorm</item>
<item>vecsize</item>
<item>vecsum</item>
</list>
<contexts>
<context attribute="Normal Text" lineEndContext="#stay" name="Normal">

<!-- do not detect strings (for now) -->
<!-- <DetectChar attribute="String" context="String" char="&quot;"/> -->
<!-- <DetectChar attribute="Normal Text" context="#stay" char="&quot;"/> -->

<keyword attribute="Keyword1" context="#stay" String="prim_keywords"/>
<keyword attribute="Keyword2" context="#stay" String="sec_keywords"/>
<keyword attribute="Identifier" context="#stay" String="internals"/>
<keyword attribute="Function" context="#stay" String="functions"/>

<DetectChar char="{" attribute="Operator" context="#stay" beginRegion="block" />
<DetectChar char="}" attribute="Operator" context="#stay" endRegion="block" />

<DetectChar char="=" attribute="Operator" context="#stay" />
<DetectChar char="+" attribute="Operator" context="#stay" />
<DetectChar char="-" attribute="Operator" context="#stay" />
<DetectChar char="/" attribute="Operator" context="#stay" />
<DetectChar char="*" attribute="Operator" context="#stay" />
<DetectChar char="^" attribute="Operator" context="#stay" />
<DetectChar char="," attribute="Operator" context="#stay" />
<DetectChar char="(" attribute="Operator" context="#stay" />
<DetectChar char=")" attribute="Operator" context="#stay" />

<Float attribute="Types" context="#stay"/>
<Int attribute="Types" context="#stay"/>
<Detect2Chars char="\" char1="#" attribute="Normal Text" context="#stay" />
<DetectChar attribute="Comment" context="Comment" char="#"/>
</context>
<context name="Comment" attribute="Comment" lineEndContext="#pop"/>

<context name="String" attribute="String" lineEndContext="#stay">
<DetectChar char="&quot;" attribute="String" context="#pop"/>
</context>

</contexts>

<itemDatas>
<itemData name="Normal Text" defStyleNum="dsNormal"/>
<itemData name="Keyword1" defStyleNum="dsKeyword"/>
<itemData name="Keyword2" defStyleNum="dsKeyword" color="#003300"/>
<itemData name="Operator" defStyleNum="dsOperator" color="#666666"/>
<itemData name="Identifier" defStyleNum="dsOthers" color="#663333" italic="1"/>
<itemData name="Function" defStyleNum="dsFunction" color="#006600" bold="1"/>
<itemData name="Types" defStyleNum="dsDataType" color="#3333CC"/>
<itemData name="String" defStyleNum="dsString" color="#666699"/>
<itemData name="Comment" defStyleNum="dsComment"/>
</itemDatas>
</highlighting>

<general>
<comments>
<comment name="singleLine" start="#" />
</comments>
<keywords casesensitive="1" />
</general>
</language>

+ 133
- 0
full.html Datei anzeigen

@@ -0,0 +1,133 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
$for(author-meta)$
<meta name="author" content="$author-meta$" />
$endfor$
$if(date-meta)$
<meta name="dcterms.date" content="$date-meta$" />
$endif$
$if(keywords)$
<meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
$endif$
<title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
$if(fontfamily_html)$
<link href="https://fonts.googleapis.com/css?family=$fontfamily_html$" rel="stylesheet">
$endif$
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<link href='https://fonts.googleapis.com/css?family=Libre+Baskerville' rel='stylesheet' type='text/css'>
<style type="text/css">
body {
font-family: "Libre Baskerville", serif;
hyphens: auto;
}
img {
max-width: 100%;
}

@media (min-width: 768px) {
h1 { font-size: 1.75rem; }
h2 { font-size: 1.60rem; }
h3 { font-size: 1.40rem; }
h4 { font-size: 1.20rem; }
h5 { font-size: 1.10rem; }
h6 { font-size: 1.00rem; }
}

@media (max-width: 768px) {
h1 { font-size: 1.35rem; }
h2 { font-size: 1.25rem; }
h3 { font-size: 1.10rem; }
h4 { font-size: 1.10rem; }
h5 { font-size: 1.00rem; }
h6 { font-size: 1.00rem; }
}
code {
padding: .2rem .5rem;
white-space: nowrap;
background: #F1F1F1;
border: 1px solid #E1E1E1;
border-radius: 4px; }
pre > code {
display: block;
white-space: pre; }
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
$if(quotes)$
q { quotes: "“" "”" "‘" "’"; }
$endif$
</style>
$if(highlighting-css)$
<style type="text/css">
$highlighting-css$
</style>
$endif$
$for(css)$
<link rel="stylesheet" href="$css$" />
$endfor$
$if(math)$
$math$
$endif$
$for(header-includes)$
$header-includes$
$endfor$
</head>
<body>
$for(include-before)$
$include-before$
$endfor$
<div class="container">
<div class="row">
<div class="col text-center">
$if(title)$
<h1>$title$</h1>
$if(subtitle)$
<h2><em>$subtitle$</em></h2>
$endif$
$for(author)$
<p class="lead">
$author$$if(reviewer)$, $reviewer$$endif$$if(releaser)$, $releaser$$endif$
</p>
$endfor$
$if(date)$
<p class="lead">$date$
$if(rev)$&mdash;rev.&nbsp;$rev$$endif$
$if(hash)$&mdash;<code>$hash$</code>$endif$
</p>
$endif$
$if(docnumber)$
<p class="lead"><a href="$docnumber$.pdf" target="_blank">PDF version</a></p>
$endif$
$if(abstract)$
<h3 class="text-center">Abstract</h3>
<p class="text-justify">$abstract$</p>
$endif$
<hr>
$endif$
</div>
</div>
<div class="row">
<div class="col">
$if(toc)$
<nav id="$idprefix$TOC">
<h1>Table of Contents</h1>
$table-of-contents$
</nav>
$endif$
$body$
</div>
</div>
</div>
$for(include-after)$
$include-after$
$endfor$
</body>
</html>

+ 531
- 0
full.tex Datei anzeigen

@@ -0,0 +1,531 @@
\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
\PassOptionsToPackage{hyphens}{url}
$if(colorlinks)$
\PassOptionsToPackage{usenames,dvipsnames}{color}
$endif$
%
\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}
$if(beamerarticle)$
\usepackage{beamerarticle} % needs to be loaded first
$endif$
$if(fontfamily)$
\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$}
$else$
\usepackage{lmodern}
$endif$
$if(linestretch)$
\usepackage{setspace}
\setstretch{$linestretch$}
$endif$
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
\usepackage[utf8]{inputenc}
$if(euro)$
\usepackage{eurosym}
$endif$
\else % if luatex or xelatex
$if(mathspec)$
\ifxetex
\usepackage{mathspec}
\else
\usepackage{unicode-math}
\fi
$else$
\usepackage{unicode-math}
$endif$
\defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
$for(fontfamilies)$
\newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$}
$endfor$
$if(euro)$
\newcommand{\euro}{€}
$endif$
$if(mainfont)$
\setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$}
$else$
\setmainfont{LinLibertineO}
$endif$
$if(sansfont)$
\setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$}
$else$
\setsansfont{Carlito}
$endif$
$if(monofont)$
\setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$}
$else$
\setmonofont[Mapping=tex-ansi]{DejaVuSansMono}
$endif$
$if(mathfont)$
$if(mathspec)$
\ifxetex
\setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
\else
\setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
\fi
$else$
\setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
$endif$
$endif$
$if(CJKmainfont)$
\ifxetex
\usepackage{xeCJK}
\setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
\fi
$endif$
$if(luatexjapresetoptions)$
\ifluatex
\usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset}
\fi
$endif$
$if(CJKmainfont)$
\ifluatex
\usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec}
\setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
\fi
$endif$
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
$if(indent)$
$else$
% \IfFileExists{parskip.sty}{%
% \usepackage{parskip}
% }{% else
% \setlength{\parindent}{0pt}
% \setlength{\parskip}{6pt plus 2pt minus 1pt}
% }
$endif$
$if(verbatim-in-note)$
\usepackage{fancyvrb}
$endif$
\usepackage{hyperref}
\hypersetup{
$if(title-meta)$
pdftitle={$title-meta$},
$endif$
$if(author-meta)$
pdfauthor={$author-meta$},
$endif$
$if(keywords)$
pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$},
$endif$
$if(colorlinks)$
colorlinks=true,
linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$,
citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$,
urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$,
$else$
pdfborder={0 0 0},
$endif$
breaklinks=true}
\urlstyle{tt}
$if(verbatim-in-note)$
\VerbatimFootnotes % allows verbatim text in footnotes
$endif$
$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$else$
\usepackage{geometry}
\geometry{paper=a4paper, left=2.5cm, right=2cm, bottom=3.5cm, foot=2cm, top=3.5cm, head=2cm}
$endif$
$if(lang)$
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel}
$if(babel-newcommands)$
$babel-newcommands$
$endif$
\else
% load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic)
\usepackage{polyglossia}
\setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$}
$for(polyglossia-otherlangs)$
\setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$}
$endfor$
\fi
$endif$
$if(natbib)$
\usepackage[$natbiboptions$]{natbib}
\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
$endif$
$if(biblatex)$
\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex}
$for(bibliography)$
\addbibresource{$bibliography$}
$endfor$
$endif$
$if(listings)$
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
\input{syntax.tex}
\newcommand{\passthrough}[1]{\texttt{#1}}
$endif$
$if(lhs)$
\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
$endif$
$if(highlighting-macros)$
$highlighting-macros$
$endif$
$if(tables)$
\usepackage{longtable,booktabs}
% Fix footnotes in tables (requires footnote package)
\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{longtable}}{}
$endif$

\usepackage{graphicx,grffile}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}


% headers y footers a medida
\usepackage{lastpage}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{} % clear all header and footer fields
$if(docnumber)$
\lhead{$docnumber$}
$endif$
\lfoot{\scriptsize{$if(date)$ $date$ $endif$ / $if(hash)$ \texttt{$hash$} $endif$}}
\rfoot{\thepage/\pageref{LastPage}}
\rhead{\includegraphics[height=10pt]{logo}}
\renewcommand{\headrulewidth}{0.0pt}
\renewcommand{\footrulewidth}{0.4pt}

\fancypagestyle{plain}{%
\fancyhf{} % clear all header and footer fields
$if(hash)$
% \lhead{\scriptsize{\texttt{$hash$}}}
\rfoot{\scriptsize{\texttt{$hash$}}}
$endif$
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}

$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}}
$endif$
$if(strikeout)$
\usepackage[normalem]{ulem}
% avoid problems with \sout in headers with hyperref:
\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
$endif$
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
$if(numbersections)$
\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$}
$else$
\setcounter{secnumdepth}{0}
$endif$
$if(subparagraph)$
$else$
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi
$endif$
$if(dir)$
\ifxetex
% load bidi as late as possible as it modifies e.g. graphicx
$if(latex-dir-rtl)$
\usepackage[RTLdocument]{bidi}
$else$
\usepackage{bidi}
$endif$
\fi
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
\TeXXeTstate=1
\newcommand{\RL}[1]{\beginR #1\endR}
\newcommand{\LR}[1]{\beginL #1\endL}
\newenvironment{RTL}{\beginR}{\endR}
\newenvironment{LTR}{\beginL}{\endL}
\fi
$endif$

\usepackage{subfig}
% SIunits
\usepackage{siunitx}

% set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\pretocmd\env@cases{\def\@rowc@lors{}}{}{}
\pretocmd\start@align{\def\@rowc@lors{}}{}{}
\makeatother

% fuente para los captions de figuras
\usepackage{caption}
\renewcommand{\captionfont}{\sf\small}
% \renewcommand{\captionlabelfont}{\bf\sf}

%% cover
\makeatletter
\newcommand{\fielddesc}[1]{\textsf{\footnotesize{#1}}}
\newlength{\coff}
\setlength{\coff}{0.3cm plus 0.1cm minus 0.1cm}

\def\maketitle{%
\thispagestyle{empty}

% TODO: elegir si se quiere background
% put a cover-back.pdf as a background
% \AddToShipoutPicture*{\put(0,0){\includegraphics{cover-back}}}

$if(logo2ver)$
\begin{minipage}[b]{0.5\linewidth}
\includegraphics[width=$logo2ver_width$]{$logo2ver$}
\end{minipage}%
\begin{minipage}[b]{$if(logo2ver)$0.45$else$0.9$endif$\linewidth}
\raggedleft\includegraphics[width=$logo1ver_width$]{$logo1ver$}
\end{minipage}

\noindent{\color{gray}\rule{\linewidth}{1.2pt}}
$endif$

% --- title -------------------------------------------------------
\null
\vspace{1cm plus 0.5cm minus 0.5cm}

\begin{center}
\begin{minipage}{0.75\linewidth}
\begin{center}
\Large{\textbf{$title$}}

\bigskip

$if(subtitle)$\large{$subtitle$}$endif$
\end{center}
\end{minipage}
\end{center}

% --- authors & meta -------------------------------------------------------
\vspace{\stretch{0.5}}

\begin{minipage}[t]{0.4\linewidth}
\begin{tabular}{ll}
\fielddesc{Number} & \fielddesc{Rev.} \\
\hspace{\coff}\textsf{$docnumber$} & \hspace{\coff}\textsf{$rev$} \\
\fielddesc{Date} & \fielddesc{Hash} \\
\hspace{\coff}$date$ & \hspace{\coff}\texttt{$hash$} \\

$if(doctype)$
\fielddesc{Type} & \fielddesc{Pages} \\
\hspace{\coff}doctype & \hspace{\coff}\pageref{LastPage} \\
$endif$

\end{tabular}
\end{minipage}%
%
\begin{minipage}[t]{0.6\linewidth}
\begin{tabular}{ll}
\fielddesc{Author} & \\

$if(firstauthor)$
\hspace{\coff}firstauthor & $if(firstauthoremail)$\hspace{\coff}\small{\texttt{$firstauthoremail$}}$endif$ \\
$else$
\hspace{\coff}$author-meta$ & $if(authoremail)$ \hspace{\coff}\small{\texttt{$authoremail$}}$endif$ \\
$endif$

$if(secondauthor)$
\hspace{\coff}$secondauthor$ & $if(secondauthoremail)$\hspace{\coff}\small{\texttt{$secondauthoremail$}}$endif$ \\
$endif$

$if(reviewer)$
\fielddesc{Reviewed by} & \\
\hspace{\coff}$reviewer$ & $if(revieweremail)$\hspace{\coff}\small{\texttt{$revieweremail$}}$endif$ \\
$endif$

$if(releaser)$
\fielddesc{Released by} & \\
\hspace{\coff}$releaser$ & $if(releaseremail)$\hspace{\coff}\small{\texttt{$releaseremail$}}$endif$ \\
$endif$

\end{tabular}
\end{minipage}

% --- client & project -------------------------------------------------------
\vspace{\stretch{0.25}}

$if(client)$
\begin{minipage}[t]{0.5\linewidth}
\begin{tabular}{l}
\fielddesc{Client} \\
\hspace{\coff}client
\end{tabular}
\end{minipage}
$endif$
%
$if(project)$
\begin{minipage}[t]{0.5\linewidth}
\begin{tabular}{l}
\fielddesc{Project} \\
\hspace{\coff}project
\end{tabular}
\end{minipage}
$endif$

% --- abstract -------------------------------------------------------
$if(abstract)$
\vspace{\stretch{1.0}}
\begin{abstract}
\noindent
$abstract$
\end{abstract}
$endif$

% --- keywords -------------------------------------------------------
$if(keywords)$
\vspace{\stretch{1.5}}

\begin{center}
\begin{minipage}{0.95\linewidth}
\fielddesc{Keywords} \\
\hspace{\coff}$keywords$
\end{minipage}
\end{center}
$endif$


% --- dist -------------------------------------------------------
$if(distribution_list)$
\vspace{\stretch{0.5}}

\noindent\begin{minipage}[t]{0.5\linewidth}
\fielddesc{Distribution}\vspace{-0.5cm} \\
\begin{sffamily}
$distribution_list$
\end{sffamily}
\end{minipage}%
$endif$%
%
$if(cc_list)$%
\begin{minipage}[t]{0.5\linewidth}
\fielddesc{Carbon Copy}\vspace{-0.5cm} \\
\begin{sffamily}
$cc_list$
\end{sffamily}
\end{minipage}
$endif$

\null
\pagebreak

}

\def\revhistory{%
\section*{\bibcpstring{revhistory}}

\noindent
\rowcolors{1}{black!10}{black!0}
\begin{tabularx}{\linewidth}{cllX}
\hline
\multicolumn{1}{c}{\bibcpstring{rev}} &
\multicolumn{1}{c}{\bibcpstring{date}} &
\multicolumn{1}{c}{\bibcpsstring{author}} &
\multicolumn{1}{c}{} \\
\hline
\@@input revhistory.tex
\hline
\end{tabularx}
}
\makeatother

%%


$for(header-includes)$
$header-includes$
$endfor$

$if(title)$
\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
$endif$
$if(subtitle)$
\providecommand{\subtitle}[1]{}
\subtitle{$subtitle$}
$endif$
$if(author)$
\author{$for(author)$$author$$sep$ \and $endfor$}
$endif$
$if(institute)$
\providecommand{\institute}[1]{}
\institute{$for(institute)$$institute$$sep$ \and $endfor$}
$endif$
\date{$date$}

\begin{document}
% \thispagestyle{empty}
% \thispagestyle{plain}

$if(title)$
\maketitle
$endif$

$for(include-before)$
$include-before$

$endfor$
$if(toc)$
{
$if(colorlinks)$
\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$}
$endif$
\setcounter{tocdepth}{$toc-depth$}
\tableofcontents
\pagebreak
}
$endif$
$if(lot)$
\listoftables
\pagebreak
$endif$
$if(lof)$
\listoffigures
\pagebreak
$endif$

% vectors done right
\renewcommand{\vec}[1]{\ensuremath\mathbf{#1}}

$body$

$if(natbib)$
$if(bibliography)$
$if(biblio-title)$
$if(book-class)$
\renewcommand\bibname{$biblio-title$}
$else$
\renewcommand\refname{$biblio-title$}
$endif$
$endif$
\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}

$endif$
$endif$
$if(biblatex)$
\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$

$endif$
$for(include-after)$
$include-after$

$endfor$
\end{document}

+ 22
- 0
hook-pre.sh Datei anzeigen

@@ -0,0 +1,22 @@
#!/bin/bash

run="run/analytical.txt \
run/problem.max \
run/analytical.ppl"
plot="pipe-mesh-1.png"

for i in ${run}; do
if [ ! -e $i ]; then
echo "$i does not exist, please run the case first"
exit 1
fi
done

for i in ${plot}; do
if [ ! -e $i ]; then
echo "$i does not exist, please plot the results"
exit 1
fi
done

+ 1
- 0
index.html Datei anzeigen

@@ -0,0 +1 @@
pipe-linearized.html

BIN
logo-seamplex.pdf Datei anzeigen


BIN
logo.pdf Datei anzeigen


+ 151
- 0
make.sh Datei anzeigen

@@ -0,0 +1,151 @@
#!/bin/bash


for i in m4 pandoc pandoc-crossref pandoc-citeproc xelatex locale grep wc; do
if [ -z "`which $i`" ]; then
echo "error: $i is not installed"
exit 1
fi
done

# the document name is the current directory name
name=`basename $PWD`
if [ ! -e ${name}.md ]; then
echo "error: ${name}.md does not exist"
exit 1
fi

# get the date right
language=`grep lang: meta.yaml | awk -F: '{print $2}' | sed s/-/_/`
LC=`locale -a | grep $language | head -n1`
if [ -z "$LC" ]; then
echo "error: locale for language $language is not installed, run"
echo "dpkg-reconfigure locales"
echo "or equivalent (or change the document's language)"
exit 1
fi

# see how we are supposed to write the date, but
# replace %m with %b to get a string for the month
dateformat=`LC_ALL=${LC} locale d_fmt | sed s/m/b/`
currentdate=`LC_ALL=${LC} date +${dateformat}`
currentdateedtf=`LC_ALL=${LC} date +%Y-%m-%d`

# read the template name from the md's yaml, otherwise default to light
template=`grep template: meta.yaml | awk -F': ' '{print $2}'`
if [ -z "$template" ]; then
template=light
fi

# read the formats from the md's yaml
if [ ! -z "$1" ]; then
formats="$1"
else
formats=`grep formats: meta.yaml | awk -F': ' '{print $2}'`
fi


branch=`git rev-parse --abbrev-ref HEAD`
if [ $? != 0 ]; then
echo "error: cannot find HEAD in current directory, is there at least one commit"?
exit 1
fi
dochash=`git rev-parse --short HEAD`

if [ -e "baserev" ]; then
basehash=`cat baserev`
else
basehash=`git rev-parse HEAD`
fi

headepoch=`git log -1 --format="%ct"`
headdate=`LC_ALL=${DATELC} date -d@${headepoch} +${dateformat}`
headdateedtf=`LC_ALL=${DATELC} date -d@${headepoch} +%Y-%m-%d`

tag=`git tag --sort=-version:refname | head -n1`

if [ -z "${tag}" ]; then
revision="DRAFT"
docver=`git rev-list ${basehash}..HEAD | wc -l`
else
revision=${tag}
docver=`git rev-list ${tag}..HEAD | wc -l`
fi

if [ ${docver} -ne 0 ]; then
revision="${revision}${docver}"
fi

hash=`git rev-parse --short HEAD`

# hook-pre
if [ -e hook-pre.sh ]; then
./hook-pre.sh
if [ $? != 0 ]; then
echo "hook-pre.sh failed!"
exit 1
fi
fi


# if the current working tree is not clean, we add a "+"
# (should be $\epsilon$, but it would screw the file name),
# set the date to today and change the author to the current user,
# as it is the most probable scenario
if [ -z "`git status --porcelain`" ]; then
date=${headdate}
dateedtf=${headdateedtf}
else
dochash="${hash}+$\epsilon$"
revision="${revision}+"
date=${currentdate}
dateedtf=${currentdateedtf}
fi




cat << EOF > hash.yaml

---
hash: ${dochash}
rev: ${revision}
date: ${date}
...
EOF

for format in ${formats}; do

echo "md -> ${format}"
flags="--number-sections --toc --syntax-definition=wasora.xml --syntax-definition=fino.xml"
if [[ "${format}" == "pdf" ]] || [[ "${format}" == "tex" ]]; then
template_file="${template}.tex"
flags="${flags} --listings --pdf-engine=xelatex"
if [[ "${format}" == "tex" ]]; then
flags="${flags} --biblatex"
fi
elif [[ "${format}" == "html" ]]; then
template_file="${template}.html"
flags="${flags} --mathjax"
else
template_file="${template}.${format}"
fi

if [ -e "${template_file}" ]; then
template_spec="--template $template_file"
fi
m4 -Doutput_format=${format} markuw.m4 meta.yaml ${name}.md hash.yaml |\
pandoc -s ${flags} ${template_spec} --filter pandoc-crossref --filter pandoc-citeproc -o ${name}.${format} || exit 1

if [ -z "`git check-ignore ${name}.${format}`" ]; then
echo ${name}.${format} >> .gitignore
fi
# if [[ "${format}" == "pdf" ]]; then
# docnumber=`grep docnumber: meta.yaml | awk -F: '{print $2}'`
# if [[ ! -z "${docnumber}" ]] && [[ ! -e "${docnumber}.pdf" ]]; then
# ln -sf ${name}.pdf ${docnumber}.pdf
# fi
# fi
done

+ 9
- 0
markuw.m4 Datei anzeigen

@@ -0,0 +1,9 @@
divert(`-1')
changequote(`[[', `]]')
define(lorem_ipsum, [[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam elit orci, semper sit amet augue sed, vehicula tristique mauris. Quisque tincidunt felis ex, et sodales nisl fermentum eget. Vestibulum nec lacinia diam. Vivamus condimentum porta volutpat. Nam eu malesuada augue. Vestibulum in volutpat massa. Proin nisi magna, lobortis et tincidunt nec, scelerisque sed quam. Phasellus rutrum scelerisque felis vitae vestibulum. Curabitur egestas nulla ac nibh ullamcorper rhoncus. Nam sit amet justo vulputate, consectetur urna eget, mollis nisl. Nunc vitae suscipit urna. Cras fermentum purus lorem, nec rutrum elit faucibus at. Nullam nec maximus orci. Quisque aliquet et metus vel gravida. Vivamus egestas, elit in ullamcorper semper, massa orci dictum tellus, at rhoncus leo dui eget risus.]])
define(vector_format, ifelse(output_format, [[html]], [[svg]], [[pdf]]))
# forloop(var, from, to, stmt) - simple version
define([[forloop]], [[pushdef([[$1]], [[$2]])_forloop($@)popdef([[$1]])]])
define([[_forloop]],
[[$4[[]]ifelse($1, [[$3]], [[]], [[define([[$1]], incr($1))$0($@)]])]])
divert[[]]dnl

+ 27
- 0
meta.yaml Datei anzeigen

@@ -0,0 +1,27 @@
---
title: On convergence of linearized stresses in an infinite pipe computed using the finite element method
subtitle: Fino benchmark problem series
docnumber: SP-FI-18-BM-B2BD
author: Jeremy Theler
authoremail: jeremy@seamplex.com
keywords: ASME, stress linearization, infinite pipe, finite elements
abstract: |
This technical report studies the linearized stresses according to ASME (i.e. membrane and membrane plus bending stresses) in an infinite-long cylindrical pipe subject to an uniform internal pressure. In particular, the linearized stresses calculated using the finite-element method (as computed by the free and open source tool [Fino](https://www.seamplex.com/fino)) depend on the number of element through the pipe thickness. These numerical results are compared to the analytical solution of the infinite-pipe problem. Differences between first and second-order grids, rate of convergence and errors as a function of the computational effort are addressed. The main conclusions are that it is mandatory to use at least second-order elements to accurately compute the membrane plus bending stresses and that two elements along the pipe thickness are enough to reasonably compute the linearized stresses.
fontsize: 11pt
lang: en-US
bibliography: references.bib
biblatexoptions: sorting=none
link-citations: true
colorlinks: true
linkReferences: true
nameInLink: true
mathspec: true
toc: true
formats: html tex pdf
listings: true
logo1ver: logo-seamplex
logo1ver_width: 40mm
logo2ver: fino
logo2ver_width: 35mm
template: full
...

+ 503
- 0
pipe-linearized.md Datei anzeigen

@@ -0,0 +1,503 @@
# Introduction

The main objective of this report is to analyze the convergence of the [ASME linearized stresses](https://www.ramsay-maunder.co.uk/knowledge-base/technical-notes/stress-linearisation-for-practising-engineers/) (membrane and membrane plus bending) in a pressurized infinitely-long circular pipe. This problem was chosen because

1. it is a typical problem tackled analytically in undergraduate courses in mechanical engineering (at least the displacements and stresses, not the ASME linearization),
2. it can be easily solved using standard finite-element tools ([@fig:quarter-caeplex]) so it serves as a benchmark problem, and
3. there is a practical interest to compare stress analysis results from general piping systems to the canonical case of the infinite pipe.

![A quarter of an infinite pipe solved with the cloud-based tool CAEplex. The project can be seen (and solved) online with just a regular web browser (even a mobile one) at <https://caeplex.com/r?d45>](quarter-caeplex.png){#fig:quarter-caeplex width=70%}



In this work, the term convergence is taken as the study of how the linearized stresses computed with a finite-element method change with respect to the number of elements through the pipe thickness. Briefly, this technical report

* analytically obtains the ASME-linearized (membrane and membrane plus bending) stresses for an infinite pipe subject to an uniform internal pressure,
* serves as a benchmarking test, comparing the results obtained by the [free and open-source](https://en.wikipedia.org/wiki/Free_and_open-source_software) finite-element tool [Fino](<https://www.seamplex.com/fino) and the analytical solution,
* shows how multi-freedom boundary conditions can be used to simplify the restriction of the rigid-body degrees of freedom in the case of null axial displacement and radial-only displacements,
* illustrates how parametric runs can be performed in [Fino](<https://www.seamplex.com/fino),
* analyzes the convergence of the ASME-linearized stresses with respect to the mesh coarseness,
* explores the differences between first and second-order elements regarding errors and computational efforts,
* compares the errors (with respect to the analytical solutions) obtained by using linear and quadratic elements as a function of the computational effort,
* quantitatively and qualitatively address the differences obtained in using both first and second-order elements.

For the finite-element computations, only tetrahedral unstructured grids are used to avoid biasing the results by having elements with edges parallel to the coordinate axis. Even more, the stress classification lines do no need to pass through any actual node of the grid. The software used to solve the finite-element formulation ([@sec:about]) allows the initial and end point of the stress classification lines to be arbitrary points of the domain. A parametric run is performed and the results are both qualitatively and quantitatively analyzed. A number of interesting conclusions are summarized in [@sec:conclusions]. The appendices that follow dive into further advanced and optional topics.

![The infinite pipe could also be solved using an quarter-symmetry structured grid, but to avoid having preferred directions only unstructured tetrahedra around the whole circumference were used in this report.](struct.png){#fig:struct width=60%}



It should be noted that the objective of this report is to study a very simple problem as thoroughly as possible in order to have a sound understanding of the underlying mechanical phenomena. There is absolutely no need to employ finite-element analysis to solve an infinite pressurized pipe. However, finite-elements ought to be employed to analyze any real piping network such as the one depicted in [@fig:cad1].

![A real-life piping system, with reductions, orifice plates, valves, tees, etc.](cad1.png){#fig:cad1}


## About Fino {#sec:about}

[Fino](https://www.seamplex.com/fino) is a free and open source tool that uses the finite-element method to solve

* steady-state thermo-mechanical problems, or
* steady or transient heat conduction problems, or
* modal analysis problems.

It is particularly designed to handle complex dependence of material properties (i.e. temperature-dependent properties). It can also perform parametric or optimization runs. The domain over which the problem is solved should be a grid generated by [Gmsh](http://gmsh.info/). The material properties and boundary conditions may involve arbitrary dependence of space associated to physical entities defined in the mesh.

Fino follows, amongst [others](https://www.seamplex.com/principles.html), the [UNIX philosophy](https://en.wikipedia.org/wiki/Unix_philosophy). Fino is a [back-end](https://en.wikipedia.org/wiki/Front_and_back_ends) aimed at advanced users. For an easy-to-use web-based front-end with Fino running in the cloud, see [CAEplex](https://www.caeplex.com).


Fino is a free (“Free” both as in “free speech” and in “free beer.”) and open source finite-element analysis tool [Fino](https://www.seamplex.com/fino) developed from scratch by [Seamplex](https://www.seamplex.com). From our point of view, only [open source](https://en.wikipedia.org/wiki/Open_source) software^[And if it is [free](https://en.wikipedia.org/wiki/Free_software) software, even better.] should be employed in solving engineering problems. A cognizant engineer cannot rely on [privative](https://en.wikipedia.org/wiki/Proprietary_software) software and be certain that the results are accurate, exact or even valid enough to draw an educated conclusion out of them. Any reasonable engineering system cannot depend on black boxes.

![Fino is freely available from <https://www.seamplex.com/fino>](fino.svg){width=25%}



# Problem {#sec:problem}

Let us consider an infinite pipe (i.e. a cylinder) of internal radius $a$ and external radius $b$ with uniform mechanical properties---Young modulus $E$ and Poisson’s ratio $\nu$---subject to an internal uniform pressure $p$. We would like to compute the linearized membrane and membrane plus bending stresses according to ASME VIII Section 5 [@asme8div2, annex 5-A]. To obtain a numerical solution with the finite-element method, let us fix the numerical values of the parameters as follows

\begin{align*}
dnl b &= \SI{esyscmd([[echo "INCLUDE run/problem.was\nPRINT b" | wasora - | xargs]])}{\milli\meter} \\
dnl a &= \SI{esyscmd([[echo "INCLUDE run/problem.was\nPRINT a" | wasora - | xargs]])}{\milli\meter} \\
dnl E &= \SI{esyscmd([[echo "INCLUDE run/problem.was\nPRINT 1e-3*E" | wasora - | xargs]])}{\giga\pascal} \\
dnl \nu &= esyscmd([[echo "INCLUDE run/problem.was\nPRINT %.2f nu" | wasora - | xargs]]) \\
dnl p &= \SI{esyscmd([[echo "INCLUDE run/problem.was\nPRINT p" | wasora - | xargs]])}{\mega\pascal} \\
b &= esyscmd([[echo "INCLUDE run/problem.was\nPRINT b" | wasora - | xargs]])~\text{mm} \\
a &= esyscmd([[echo "INCLUDE run/problem.was\nPRINT a" | wasora - | xargs]])~\text{mm} \\
E &= esyscmd([[echo "INCLUDE run/problem.was\nPRINT 1e-3*E" | wasora - | xargs]])~\text{GPa} \\
\nu &= esyscmd([[echo "INCLUDE run/problem.was\nPRINT %.2f nu" | wasora - | xargs]]) \\
\end{align*}
which correspond to a esyscmd([[grep inch run/problem.was | cut -c2-]]) carbon steel pipe according to ASME B36-10M [@asmeb36]. Again, for the sake of numerical results, we fix the internal pressure to

$$
p = esyscmd([[echo "INCLUDE run/problem.was\nPRINT p" | wasora - | xargs]])~\text{MPa}
$$
that is a typical pressure found in nuclear power plants (so ASME III applies).


# Reference analytical solution {#sec:analytical}

Given the cylindrical symmetry of the problem, there is only one independent variable, namely the radial coordinate $r$. Moreover, there are only two displacement fields that need to be considered: the axial $u_a(r)$ and the radial $u_r(r)$. The former is identically zero due to the fact that the cylinder is infinite ([plane strain condition](https://www.ramsay-maunder.co.uk/downloads/NBR03.pdf)). The equilibrium of momentum along the radial direction $r$ is

$$ \frac{d\sigma_r}{dr} + \frac{\sigma_r(r) - \sigma_\theta(r)}{r} = 0 $${#eq:equilibrium}

Defining the strains as

\begin{align*}
\epsilon_r &= \frac{du_r}{dr} \\
\epsilon_\theta &= \frac{u}{r}
\end{align*}
and the stresses as

\begin{align*}
\sigma_r &= \frac{E}{(1-\nu)(1-2\nu)} \cdot \Big[ (1-\nu) \cdot \epsilon_r + \nu \cdot \epsilon_\theta \Big] \\
\sigma_\theta &= \frac{E}{(1-\nu)(1-2\nu)} \cdot \Big[ \nu \cdot \epsilon_r + (1-\nu) \cdot \epsilon_r \Big] \\
\end{align*}
then the differential equation [-@eq:equilibrium] can be casted in terms of the axial displacement $u_r(r)$ as

$$
\frac{d^2 u}{dr^2} + \frac{1}{r} \cdot \frac{du}{dr} - \frac{u}{r^2} = 0
$$
that has the general solution

$$
u(r) = c_1 \cdot r + \frac{c_2}{r}
$$

For the boundary conditions of the particular problem that the radial stress should be equal to the negative of the internal pressure^[Exercise for the reader: why the negative of the pressure and not the pressure itself?] at $r=a$ and null at $r=b$, namely

$$
\begin{cases}
\sigma_r(a) &= -p\\
\sigma_r(b) &= 0
\end{cases}
$$
the axial displacement has the particular solution

$$
u_r(r) = p \cdot \frac{1+\nu}{E} \cdot \frac{a^2}{b^2-a^2} \cdot \left[ 1-2\nu + \frac{b^2}{r^2} \right]\cdot r
$$
and the stresses the radial, tangential (hoop) and axial (longitudinal) stresses are

$$ \sigma_r(r) = \frac{p \cdot a^2}{b^2-a^2} \cdot \left( 1 - \frac{b^2}{r^2}\right) $$ {#eq:sigmar}
$$ \sigma_\theta(r) =\frac{p \cdot a^2}{b^2-a^2} \cdot \left( 1 + \frac{b^2}{r^2}\right) $$ {#eq:sigmatheta}
$$ \sigma_l(r) = 2\nu \cdot \frac{p \cdot a^2}{b^2-a^2} $${#eq:sigmal}


## Stress linearization

According to the ASME VIII code [@asme8div2], a _stress classification line_ should be chosen to compute the linearized stresses. Theses SCLs should be normal to iso-stress lines, which in this case may be any line radial from $r=a$ to $r=b$. The ASME code defines that each element of the _membrane_ stress tensor $\text{M}$ is

\begin{equation*}
\text{M}_{ij} = \frac{1}{b-a} \cdot \int_{a}^{b} \sigma_{ij}(r) \, dr
\end{equation*}
\noindent for $i=x,y,z$ and $j=x,y,z$. Having computed the nine values (of which only six are different) of such tensor, different kind of scalar membrane stresses can be obtained depending on how a single scalar stress “intensity” is computed out of the nine tensor elements. In particular we take into account the Tresca,^[Even though recent revisions of the ASME VIII code dropped the Tresca criterion in favor of Von Mises, the former is still the main way of computing the stress “intensity” in ASME III.] Von Mises and the three principal membrane stresses. As all the shear stresses are zero, $\sigma_l$, $\sigma_r$ and $\sigma_\theta$ happen to also be the principal stresses with

\begin{align*}
\sigma_1 &= \sigma_\theta \\
\sigma_2 &= \sigma_l \\
\sigma_3 &= \sigma_r
\end{align*}

So the membrane stresses to be considered are

\begin{align*}
\text{M}_1 &= \frac{1}{b-a} \cdot \int_{a}^{b} \sigma_\theta(r) \, dr \\
\text{M}_2 &= \frac{1}{b-a} \cdot \int_{a}^{b} \sigma_l(r) \, dr \\
\text{M}_3 &= \frac{1}{b-a} \cdot \int_{a}^{b} \sigma_r(r) \, dr \\
\text{M}_\text{tresca} &= \max\Big\{ \left| \text{M}_1 - \text{M}_2 \right|, \left| \text{M}_2 - \text{M}_3 \right|, \left| \text{M}_3 - \text{M}_1 \right| \Big\} \\
\text{M}_\text{vonmises} &= \sqrt{ \frac{(\text{M}_1-\text{M}_2)^2 + (\text{M}_2-\text{M}_3)^2 + (\text{M}_3-\text{M}_1)^2}{2}}
\end{align*}

In particular, replacing the stress distribution of the infinite pipe given by [@eq:sigmal; @eq:sigmar; @eq:sigmatheta] and carrying out the integrals, the principal membrane stresses are

\begin{align*}
\text{M}_1 &= {{a\,p}\over{b-a}} \\
\text{M}_2 &= {{2\,a^2\,\nu\,p}\over{b^2-a^2}} \\
\text{M}_3 &= {{a^2\,\left(2\,b-{{b^2+a^2}\over{a}}\right)\,p}\over{\left(b-a\right)\,\left(b^2-a^2\right)}}
\end{align*}

\medskip

The other linearized stress, namely the _membrane plus bending_ stress tensor \text{MB}---again according to ASME VIII Annex 5-A---is

$$
\text{MB}_{ij} = \text{M}_{ij} \pm \frac{6}{(b-a)^2} \cdot \int_{a}^{b} \sigma_{ij}(r) \cdot \left( \frac{a+b}{2}-r\right) \, dr
$${#eq:mb}
where the sign should be taken such that the resulting combined scalar stress (i.e. Tresca, Von Mises, etc.) represents the worst-case scenario. As before, the membrane plus bending scalar stresses are

\begin{align*}
\text{MB}_1 &= \text{M}_{1} \pm \frac{6}{(b-a)^2} \cdot \int_{a}^{b} \sigma_\theta(r) \cdot \left( \frac{a+b}{2}-r\right) \, dr \\
\text{MB}_2 &= \text{M}_{2} \pm \frac{6}{(b-a)^2} \cdot \int_{a}^{b} \sigma_l(r) \cdot \left( \frac{a+b}{2}-r\right) \, dr \\
\text{MB}_3 &= \text{M}_{3} \pm \frac{6}{(b-a)^2} \cdot \int_{a}^{b} \sigma_r(r) \cdot \left( \frac{a+b}{2}-r\right) \, dr \\
\text{MB}_\text{tresca} &= \max\Big\{ \left| \text{MB}_1 - \text{MB}_2 \right|, \left| \text{MB}_2 - \text{MB}_3 \right|, \left| \text{MB}_3 - \text{MB}_1 \right| \Big\} \\
\text{MB}_\text{vonmises} &= \sqrt{ \frac{(\text{MB}_1-\text{MB}_2)^2 + (\text{MB}_2-\text{MB}_3)^2 + (\text{MB}_3-\text{MB}_1)^2}{2}}
\end{align*}

For the infinite pipe case, $\text{MB}_1$ is maximum and $\text{MB}_2$ is minimum if we take the positive sign in [@eq:mb]. The integral in the expression for $\text{MB}_2$ above vanishes. The principal membrane plus bending stresses are then

\begin{align*}
\text{MB}_1 &= \displaystyle{{6\,a^2\,\left({{b^3+\left(2\,a\,\log a+a\right)\,b^2-a^2\,b}\over{2\,a}}-{{2\,b^2\,\log b+b^2}\over{2}}\right)\,p}\over{\left(b-a\right)^2\,\left(b^2-a^2\right)}}+{{a\,p}\over{b-a}} \\
\text{MB}_2 &= \displaystyle{{2\,a^2\,\nu\,p}\over{b^2-a^2}} \\
\text{MB}_3 &= \displaystyle{{6\,a^2\,\left({{2\,b^2\,\log b+b^2+2\,a\,b}\over{2}}-{{b^3+\left(2\,a\,\log a+a\right)\,b^2+a^2\,b}\over{2\,a}}\right)\,p}\over{\left(b-a\right)^2\,\left(b^2-a^2\right)}}+{{a^2\,\left(2\,b-{{b^2+a^2}\over{a}}\right)\,p}\over{\left(b-a\right)\,\left(b^2-a^2\right)}}
\end{align*}

For the particular parameters fixed in [@sec:problem], the numerical values for the theoretical linearized membrane and membrane plus bending scalar stresses are



divert(-1)
\begin{align*}
\text{M}_\text{tresca} &= \SI{esyscmd(grep -A1 ev\(M_tresca run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\text{M}_\text{vonmises} &= \SI{esyscmd(grep -A1 ev\(M_vonmises run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\text{M}_1 &= \SI{esyscmd(grep -A1 ev\(M_1 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\text{M}_2 &= \SI{esyscmd(grep -A1 ev\(M_2 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\text{M}_3 &= \SI{esyscmd(grep -A1 ev\(M_3 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\end{align*}
and
\begin{align*}
\text{MB}_\text{tresca} &= \SI{esyscmd(grep -A1 ev\(MB_tresca run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\text{MB}_\text{vonmises} &= \SI{esyscmd(grep -A1 ev\(MB_vonmises run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\text{MB}_1 &= \SI{esyscmd(grep -A1 ev\(MB_1 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\text{MB}_2 &= \SI{esyscmd(grep -A1 ev\(MB_2 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\text{MB}_3 &= \SI{esyscmd(grep -A1 ev\(MB_3 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')}{\mega\pascal} \\
\end{align*}
respectively.
divert(0)

\begin{align*}
\text{M}_\text{tresca} &= esyscmd(grep -A1 ev\(M_tresca run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\text{M}_\text{vonmises} &= esyscmd(grep -A1 ev\(M_vonmises run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\text{M}_1 &= esyscmd(grep -A1 ev\(M_1 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\text{M}_2 &= esyscmd(grep -A1 ev\(M_2 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\text{M}_3 &= esyscmd(grep -A1 ev\(M_3 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\end{align*}
and
\begin{align*}
\text{MB}_\text{tresca} &= esyscmd(grep -A1 ev\(MB_tresca run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\text{MB}_\text{vonmises} &= esyscmd(grep -A1 ev\(MB_vonmises run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\text{MB}_1 &= esyscmd(grep -A1 ev\(MB_1 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\text{MB}_2 &= esyscmd(grep -A1 ev\(MB_2 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\text{MB}_3 &= esyscmd(grep -A1 ev\(MB_3 run/analytical.txt | tail -n 1 | tr -d ' ' | awk -F\) '{printf("%.4f", $2) }')~\text{MPa} \\
\end{align*}
respectively. See [@sec:maxima] and [@sec:wasora] for the input files used to compute both the integrals and the numerical values, either using [Maxima](http://maxima.sourceforge.net/) (symbolic integration) or [wasora](https://www.seamplex.com/wasora) [@wasoradesc] (numerical integration).

# Parametric finite-element analysis solution

In principle, the problem can be solved as a bi-dimensional plane-strain case. Even more, it is actually a one-dimensional problem with radial dependence only. Nevertheless, we solve a full three-dimensional pipe because we are interested in using the same set of methods and tools we would use in a real-case piping system. We do not even use any half or quarter symmetry but the full 360º annuli.

In order to study the convergence of the linearized stresses computed using the stresses obtained in a finite-element solution, the [free and open source](https://en.wikipedia.org/wiki/Free_and_open-source_software) tool [Fino](<https://www.seamplex.com/fino)---which gives the three-dimensional displacement field $[u(\mathbf{x}),v(\mathbf{x}),w(\mathbf{x})]$ and the corresponding stress tensor distribution---is used. The model geometry is first modeled and then meshed using the [free and open source](https://en.wikipedia.org/wiki/Free_and_open-source_software) tool [Gmsh](https://gmsh.info) [@gmsh]. The former consists of a cylinder with radii $a<b$ and a length $\ell=2(b-a)$ (as illustrated in [@fig:cylinder]) which was directly built using the constructive solid modeling primitives provided by Gmsh through the [OpenCASCADE](https://dev.opencascade.org/) library ([@fig:cylinder]). The latter is generated parametrically over $n=1,\dots,6$, which indicates the number of expected elements through the pipe wall thickness $b-a$.

![Geometry used for the finite-element analysis. The axial length is twice the wall width $\ell=2(b-a)$.](cylinder-axes.svg){#fig:cylinder width=35%}

Even though the cylinder is a rather simple and symmetric geometry, the grids are fully unstructured in order to avoid biased results that might correspond to a particular choice of the grid structure. It is also because of this reason that a _full_ cylinder is modeled instead of just half or a quarter cylinder so there are no element edges parallel to the coordinate axes. In particular, both first and second-order tetrahedra are used for each value of $n$, giving rise thus to the analysis of twelve different FEM cases. The computational implementation uses the [GNU M4](<https://www.gnu.org/software/m4/) processor called from [Fino](<https://www.seamplex.com/fino) to expand macros in a Gmsh geometry file template with the particular values of $a$, $b$, $n$ and the mesh order ([@sec:gmsh]).

The origin $(0,0,0)$ of the coordinate system is located at the cylinder’s barycenter, while the main axis corresponds to the cartesian $x$ axis, as illustrated in [@fig:cylinder]. The internal cylindrical face is subject to a uniform pressure $p$. Due to the fact that we are modeling an infinite cylinder, the external annuli which are parallel to the $y$-$z$ plane should have a null axial displacement ($u=0$) to recover the [plane-strain conditions](https://www.ramsay-maunder.co.uk/downloads/NBR03.pdf). Moreover, the displacements can only be radial so these faces are subject to the condition, remembering that the cylinder's axis is located at $y=z=0$, that

$$v(x,y,z) \cdot z - w(x,y,z) \cdot y = 0$${#eq:radial}

See [@sec:radial] for a detailed derivation of this expression.
These three boundary conditions are applied over two different faces, namely

* compression pressure $p$ in the internal cylindrical face, and
* null axial displacement $u=0$ and only radial displacement $v z - w y = 0$ in the two external axial plane surfaces.

\noindent can be easily implemented in [Fino](<https://www.seamplex.com/fino) as shown in [@sec:fino]. Note that even though the two conditions in the second bullet correspond to Dirichlet (or essential) boundary conditions, only the first one $u=0$ is exactly enforced (up to the error of the iterative linear solver). The second one corresponds to a multi-freedom Dirichlet boundary condition and is implemented using a penalty method and it is thus only approximately imposed.^[The null axial displacement condition $u=0$ is a traditional Dirichlet boundary condition because the outward normal $\mathbf{\hat{n}}$ coincides with one of the three coordinate axes. In the general case, it should also be set as a multi-freedom Dirichlet boundary condition.]

## Parametric grids

define(n_grids, esyscmd([[grep PARAMETRIC run/pipe.fin | awk '{printf("%d", $6)}']]))

By expanding the macros of the Gmsh input template shown in [@sec:gmsh] for the parameter $n=1,\dots,6$ that represents the number of elements along the pipe wall thickness, the grids shown in [figures @fig:mesh1]--[-@fig:mesh[[]]n_grids] are obtained. It should be noted that the number and distribution of elements is _exactly_ the same in the first and second-order cases. However, not only is the number of nodes different but also the new second-order nodes (i.e. the nodes located along each of the the six edges the tetrahedra have) are placed on the curved surfaces of the cylinder. Thus, the original first-order tetrahedra are _slightly_ “distorted” to better represent the continuous geometry in the second-order case. In any case, this distortion is so slight that each case cannot be graphically distinguished even for the coarser case. Nevertheless, this effect is present and is illustrated in the extremely coarse grids presented in [@fig:distorted]. The extra cost of this better geometrical representation is a greater number of nodes, which in turn leads to an increase in the computational effort needed to solve the associated finite-element problem as discussed in [@sec:resources]. Even though quadratic iso-parametric (i.e. standard) elements can _better_ represent circles, they are still approximations. One need to switch to [iso-geometric](https://en.wikipedia.org/wiki/Isogeometric_analysis) elements for that end.


divert(-1)
forloop(i, 1, n_grids, [[
if(output_format, html,
![Mesh for $n=[[]]i$](pipe-mesh-[[]]i.png){width=80%},
\begin{figure}[p]
\begin{center}\includegraphics[width=80%]{pipe-mesh-[[]]i.png}\end{center}
\caption{\label{fig:mesh[[]]i}Mesh for $n=[[]]i$}
]])
divert(0)

forloop(i, 1, n_grids, [[
![Mesh for $n=[[]]i$](pipe-mesh-[[]]i.png){[[#]]fig:mesh[[]]i width=80%}
]])

![Comparison between first (left) and second-order (right) elements. Even though both of them have the same number of elements, the latter can better represent curved surfaces at the cost of having many more nodes.](distorted.png){#fig:distorted}


## Displacements

The finite-element solver gives a vector field of displacements $[u(\mathbf{x}),v(\mathbf{x}),w(\mathbf{x})]$ in each of the three Cartesian directions $x$, $y$ and $z$, respectively. Due to the cylindrical symmetry, the only non-zero displacements will be $v(\mathbf{x})$ and $w(\mathbf{x})$ which, furthermore, will be related in such a way that only radial net displacements occur. Given the radial nature of the three-dimensional geometry, the radial displacement $u_r(r)$ should be compared with

$$
\sqrt{\left[v(x,r \cos \theta, r\sin\theta)\right]^2 + \left[w(x,r \cos \theta, r\sin\theta)\right]^2}
$$
for any $-\ell/2 \leq x \leq +\ell/2$, $a \leq r \leq b$ and azimuthal angle $\theta$. It should be noted that the grid is _fully_ unstructured, so there is no particular choice of $x$ and $\theta$ than can give different results, say because there are element edges aligned with the coordinate axis. To simplify the extraction of the numerical data, we can take either $v(0,r,0)$ or $w(0,0,r)$ as a representative measure of the radial displacement $u_r(r)$.

[Fino](<https://www.seamplex.com/fino) allows the displacements $[u(\mathbf{x}),v(\mathbf{x}),w(\mathbf{x})]$ (and the stresses) to be evaluated at any arbitrary point $\mathbf{x}$, i.e. they are real continuous functions of space and not just scattered values [@milonga-design]. The figures in this and the following sections show these full continuous functions of the finite-element solutions as interpolated by the shape functions. [@Fig:ur] compares the analytical solution of the radial displacement $u_r(r)$ with the numerical solutions for different combinations of mesh order and $n$ as obtained by [Fino](<https://www.seamplex.com/fino). It can be seen that for the second-order grid, a low value of $n$ seems to be more accurate than the finer first-order case.

![Radial displacements. Note that the FEM solutions are continuous as interpolated by the shape functions.](ur.svg){#fig:ur}


## Stresses {#sec:stresses}

Let us now switch to analyze the stresses, where the difference between first and second-order grids is even more evident. Depending on how the finite-element code averages nodal values from the gradient of the displacements---which are discontinuous across element interfaces---there might be slight differences in the actual results. But in essence, we can see in [@fig:sigmar; @fig:sigmal; @fig:sigmatheta] that again, quadratic elements beat linear ones even with for coarser grids. This is especially true for $\sigma_r$ that when evaluated at $r=a$ should be $\sigma_r(a)=-p=-10~\text{MPa}$ according to [@eq:sigmar]. We need to recall that the finite-element formulation does not strictly fulfill natural (i.e. Neuman or load) boundary conditions. It only can approximate them, with the approximation being better with refined meshes.

![Radial normal stress $\sigma_r(r) = \sigma_3(r)$](sigmar.svg){#fig:sigmar}

![Longitudinal normal stress $\sigma_l(r) = \sigma_2(r)$](sigmal.svg){#fig:sigmal}

![Tangential normal stress $\sigma_\theta(r) = \sigma_1(r)$](sigmatheta.svg){#fig:sigmatheta}

The reason of this behavior is that in first-order tetrahedra, the derivatives of the shape functions are uniform in space. Therefore, the stresses (that depend on the gradient of the displacements) are uniform throughout each element. The values of these uniform stresses are somehow an average of the contribution of each of the four nodes of the tetrahedron. For those elements that are in the bulk of the domain, the processes of computing the stresses at the nodes---which depends on the finite-element code implementation but in general involves averaging back the contributions of each of the elements that share a node---gives reasonable results because some of the element would contribute by defect and some by excess to the final nodal average. But those nodes that are located in the internal (external) faces of the pipe will have elements contributing only with values by excess (defect). Therefore, first-order elements will mostly give incorrect stresses at $r=a$ and $r=b$, overestimating them in the former and underestimating them in the latter. This is exactly the behavior of the first-order stresses obtained in [@fig:sigmar;@fig:sigmal;@fig:sigmatheta]. Second-order elements still have non-uniform spatial derivatives and they can recover (almost^[The rate of convergence of the stresses in the nodes located in the boundary of the domain is linear, while it is quadratic in the bulk.]) the real values for the stresses at the nodes located in the boundary of the domain.

## Linearized stresses {#sec:linearized}


We can now analyze how the results of the linearization of the stresses according to ASME VIII [@asme8div2, annex 5-A]. Note that [Fino](https://www.seamplex.com/fino) allows the location of the SCLs to be arbitrary, in the sense that the end points do not need to be actual nodes of the grids. See [@sec:fino] for details of the input files used to compute the linearized stresses, where the definition of the SCLs are given as continuous coordinates and not as references to any particular grid node.

Figures [-@fig:M_tresca]--[-@fig:MB_3] show the membrane $\text{M}$ and membrane plus bending $\text{MB}$ stresses for different compositions of the stress tensor (Tresca, Von Mises and the three principal stresses) for $n=1,\dots,n_grids$ compared to the analytical solutions obtained in [@sec:analytical]. The vertical axes span a $\pm5\%$ range around the value given by analytical solution. It can be seen that $\text{M}$ converges faster than $\text{MB}$.


This last statement can be explained using the uniform-derivative reasoning explained in [@sec:stresses]. As the membrane stress is essentially an average along the stress classification line, the excess and defect errors committed by the first-order grids in $r=a$ and $r=b$ almost cancel out. Therefore, the error for computing $\text{M}$ with linear elements is not that relevant. However, the membrane plus bending stress is a first-order momentum of the stress distribution. This time, the deviations do not cancel out and they both contribute with the same sign to the value of linearized stress. It is this effect that gives such a slow convergence for $\text{MB}$.

![Membrane Tresca stresses](M_tresca.svg){#fig:M_tresca}

![Membrane plus bending Tresca stresses.](MB_tresca.svg){#fig:MB_tresca}


![Membrane Von Mises stresses.](M_vonmises.svg){#fig:M_vonmises}

![Membrane plus bending Von Mises stresses.](MB_vonmises.svg){#fig:MB_vonmises}


![Membrane principal stresses 1.](M_1.svg){#fig:M_1}

![Membrane plus bending principal stresses 1.](MB_1.svg){#fig:MB_1}


![Membrane principal stresses 2.](M_2.svg){#fig:M_2}

![Membrane plus bending principal stresses 2.](MB_2.svg){#fig:MB_2}


![Membrane principal stresses 3.](M_3.svg){#fig:M_3}

![Membrane plus bending principal stresses 3.](MB_3.svg){#fig:MB_3}

## Computational resources {#sec:resources}

As evident as it it that second-order elements give far superior results than linear ones, any fair analysis needs to compare solutions that involve similar amounts of computational efforts both in [random-access memory](https://en.wikipedia.org/wiki/Random-access_memory) and number of [floating-point operations](https://en.wikipedia.org/wiki/FLOPS)---otherwise we would end up comparing apples and oranges. That is to say, we might be comparing results from a run that takes one week with a one-second execution and then conclude that the first scheme gives better results than the second. Yes, it does, but it is not a fair comparison.

Roughly speaking, the CPU and memory consumption depend non-linearly on the size of the discretized problem, which is three times the number of _nodes_ and not (at least directly) on the number of elements of the mesh. Remember that the latter are the same for a fixed value of $n$ both in first and second-order grids (see again the exaggerated [@fig:distorted]). Furthermore, the stiffness matrix of a second-order finite-element formulation is less sparse than the one corresponding to a similar first-order problem (though if now the number of nodes was kept constant to have similar matrix sizes, the former would have less elements so the effort needed to build it would be surprisingly lower for the second-order matrix) rendering the solution of the linear system of equations even more difficult.

In effect, the number of elements as a function of $n$ is the same for both grids, as it can seen in [@fig:elements-vs-n]. But the number of nodes is far higher in the second-order grid for the same $n$ ([@fig:nodes-vs-n]). This leads to more CPU and memory, as shown in [@fig:cpu-vs-n; @fig:memory-vs-n].

![The number of elements vs. $n$ is the same for both grids.](elements-vs-n.svg){#fig:elements-vs-n}

![The number of nodes vs. $n$ is higher for the second-order case.](nodes-vs-n.svg){#fig:nodes-vs-n}

![CPU time vs. $n$](cpu-vs-n.svg){#fig:cpu-vs-n}

![Memory vs. $n$](memory-vs-n.svg){#fig:memory-vs-n}

## Error as a function of CPU time {#sec:error}

So, on the one hand, for a fixed $n$, second-order elements give far better results than linear elements. On the other hand, the former consume far more computational resources than the latter. Therefore, in order to compare apples and apples, in principle the comparison of results should be performed by fixing the number of _nodes_ (and, again, not the number of _elements_) as discussed above. But given that the problem we are solving does have analytical solutions, we can also analyze the errors associated to each of the finite-element formulations as a function of the computational effort.

Figures [-@fig:error-M-vs-cpu] and [-@fig:error-MB-vs-cpu] show a log-log plot of the absolute value of the difference between the linearized stresses computed using [Fino](https://www.seamplex.com) and the analytical solution of [@sec:analytical] as a function of the CPU time needed to solve the finite-element formulation. It can be seen that the membrane stress $\text{M}$ can be reasonably solved using first-order elements, as the first-order error is comparable to the second-order error for similar amounts of CPU time. However, for the evaluation of the bending stresses $\text{MB}$, linear elements give very poor results when compared to quadratic elements for the same computational effort.

These two figures quantitatively illustrate the effect discussed in [@sec:linearized] that the membrane and the membrane plus bending stress are zero and first-order moments respectively. In the former case, the excess and defect errors of the extreme nodes cancel out whereas in the latter case they do not.

![Error in the computation of membrane stress.](error-M-vs-cpu.svg){#fig:error-M-vs-cpu}

![Error in the computation of membrane plus bending stress.](error-MB-vs-cpu.svg){#fig:error-MB-vs-cpu}

# Conclusions {#sec:conclusions}

There are a few conclusion we can draw out of the results obtained in this report:

* Engineering problems ought not to be solved using black-boxes (i.e. privative software whose source code is not freely available).
* The pressurized infinite pipe has only one independent variable (the radius $r$) and one primary dependent variable (the radial displacement $u_r$).
* The problem has analytical solution for the radial displacement and the radial, tangential and axial stresses.
* There are no shear stresses, so these three stresses are also the principal stresses.
* Analytical expressions for the membrane and membrane plus bending stresses along any radial SCL can be obtained.
* The spatial domain can be discretized using linear or higher-order elements. In particular first and second-order elements have been used in this report.
* For the same number of elements, second-order grids need more nodes than linear ones, although they can better represent curved geometries.
* The discretized problem size depends on the number of nodes and not on the number of elements.
* The finite-element results for the displacements are similar to the analytical solution, with second-order grids giving better results for the same number of elements (this is expected as they involved far more nodes).
* The three stress distributions computed with the finite-element give far more reasonable results for the second-order case than for the first-order grid. This is qualitatively explained by the fact that first-order tetrahedra have uniform derivatives and such the elements located in both the external and external faces represent the stresses not at the actual faces but at the barycenter of the elements.
* Membrane stresses converge well for both the first and second-order cases because they represent a zeroth-order moment of the stress distribution and such the excess and defect errors committed by the internal and external elements approximately cancel out.
* Membrane plus bending stresses converge very poorly in first-order grids because the excess and defect errors do not cancel out because it is a first-order moment of the stress distribution.
* The computational effort to solve a given problem, namely the CPU time and the needed RAM depend non-linearly on various factors, but the most important one is the problem size which is three times the number of nodes in the grid.
* The error with respect to the analytical solutions as a function of the CPU time needed to compute the membrane stress is similar for both first and second-order grids. But for the computation of the membrane plus bending stress, first-order grids give very poor results compared to second-order grids for the same CPU time.

All in all, these are the two main conclusions:

1. Using second-order elements for the computation of ASME linearized stresses is (almost) mandatory.
2. Using just two elements along the pipe thickness is enough to attain convergence of the linearized stresses.



\appendix

\newpage

<hr>

# Multi-freedom boundary condition for radial-only displacements {#sec:radial}

To set the condition that in the external surfaces all displacement ought to be radially-symmetrical around the barycenter of the surface, a multi-freedom Dirichlet boundary condition needs to be set. That is to say, it is not the value of the actual displacements that is fixed but a certain relationship between the three displacements $u$, $v$ and $w$ and the spatial coordinates $x$, $y$ and $z$.

In effect, let $\mathbf{x_0}=[\pm\ell/2,0,0]$ be the location of the barycenter of the face where the condition is to be applied. To force all displacements to be only radial, we require the vectors $\mathbf{u}=[u,v,w]$ and $(\mathbf{x}-\mathbf{x_0})$ to have the same direction. Using the scalar product notation:

\begin{align*}
\mathbf{u} \cdot \left(\mathbf{x}-\mathbf{x}_0\right) &= \| \mathbf{u} \| \cdot \| \left(\mathbf{x}-\mathbf{x}_0\right)\| \\
u \cdot (x-x_0) + v \cdot (y-y_0) + w \cdot (z-z_0) &= \sqrt{u^2 + v^2 + w^2} \cdot \sqrt{(x-x_0)^2 + (y-y_0)^2 + (z-z_0)^2}
\end{align*}
and taking into account that

* $u=0$ because of the null axial displacement condition,
* $\mathbf{x_0}=[\pm\ell/2,0,0]$, and
* $x=\pm \ell/2$,

\noindent then by squaring both members of the equation, we can simplify this expression to

$$
(v y + w z)^2 = (v^2 + w^2) \cdot (y^2 + z^2)
$$

Further algebraic manipulation leads to

\begin{align*}
(vy)^2 + 2 \cdot v y \cdot w z + (wz)^2 &= (vy)^2 + (vz)^2 + (wy)^2 + (wz)^2 \\
2 \cdot v y \cdot w z &= (vz)^2 + (wy)^2 \\
0 & = (vz - wy)^2
\end{align*}
from which [@eq:radial] follows.

\newpage

<hr>

# Host, codes, scripts and input files {#sec:codes}

The results shown in this report were obtained using the free-as-in-free-speech^[And not just free as in “free beer”] tools [Gmsh](http://gmsh.info/) and [Fino](https://www.seamplex.com). Specifically, the following versions were used:

```{style=terminal}
include(run/versions.txt)
```

These codes were executed on a host with the following features:

```{style=terminal}
include(run/cpu.txt)
```

The complete case can be run by executing the following script:

```{.bash style=bash caption=run.sh}
include(run/run.sh)
```


## Analytical solutions with Maxima {#sec:maxima}

The reference solutions presented in [@sec:analytical] where computed from the theoretical stresses by symbolic integration using [Maxima](http://maxima.sourceforge.net/).

```{.maxima style=maxima caption=problem.max}
include(run/problem.max)
```

```{.maxima style=maxima caption=analytical.max}
include(run/analytical.max)
```

The results are illustrated in the following terminal mimic:

```{style=terminal}
$ maxima -b analytical.max
include(run/analytical.txt)dnl
$
```

## Theoretical solutions with wasora {#sec:wasora}

Instead of symbolic integration, adaptive numerical quadrature can be performed easily using [wasora](https://www.seamplex.com/wasora) [@wasoradesc]. First, we put all the problem parameters in a file `problem.was`:

```{.wasora style=wasora caption=problem.was}
include(run/problem.was)
```

And then include this file from the main one `analytical.was`:

```{.wasora style=wasora caption=analytical.was}
include(run/analytical.was)
```

```{style=terminal}
$ wasora analytical.was
include(run/analytical.ppl)dnl
$
```

## Geometry and mesh generation with Gmsh {#sec:gmsh}

```{.c style=gmsh caption=pipe.geo.m4}
include(run/pipe.geo.m4)
```


## Parametric finite-element analysis with Fino {#sec:fino}

```{.fino style=fino caption=pipe.fin}
include(run/pipe.fin)
```

\newpage

<hr>

# References

+ 236
- 0
plot.ppl Datei anzeigen

@@ -0,0 +1,236 @@
load "problem.ppl";
load "run/analytical.ppl"

ur1(x) = ur(0,x,0)
sigmal1(x) = sigmal(0,x,0)
sigmar1(x) = sigmar(0,x,0)
sigmatheta1(x) = sigmatheta(0,x,0)

delta = 0.05

set preamble "\usepackage{amsmath}"

set width 14*unit(cm)

set axis x arrow nomirrored
set axis y arrow nomirrored


set grid
set terminal pdf


set output "ur.pdf"
set xrange [a:b]
set yrange [*:*]
set key top right
set xlabel "$r$ [mm]"
set ylabel "$u_r(r)$ [mm]"
plot ur1(x) w l lw 3 lt 1 color olivegreen ti "Analytical solution $u_r(r)$",\
"run/pipe-dist-1-3.dat" u 2:4 w l lw 1 lt 2 color maroon ti "",\
"run/pipe-dist-1-3.dat" u 2:4 w p pt 18 ps 1.5 color maroon every (100)/(1*3) ti "$n=3$ first order",\
"run/pipe-dist-1-6.dat" u 2:4 w l lw 1 lt 4 color tan ti "",\
"run/pipe-dist-1-6.dat" u 2:4 w p pt 16 ps 1.5 color tan every (100)/(1*6) ti "$n=6$ first order",\
"run/pipe-dist-2-2.dat" u 2:4 w l lw 2 lt 3 color cerulean ti "",\
"run/pipe-dist-2-2.dat" u 2:4 w p pt 17 ps 1.5 color cerulean every (100)/(2*2) ti "$n=2$ second order"

set output "sigmatheta.pdf"
set xrange [a:b]
set yrange [*:*]
set key top right
set xlabel "$r$ [mm]"
set ylabel "$\sigma_\theta(r)$ [mm]"
plot sigmatheta1(x) w l lw 3 lt 1 color springgreen ti "Analytical solution $\sigma_\theta(r)$",\
"run/pipe-dist-1-3.dat" u 2:5 w l lw 1 lt 2 color melon ti "",\
"run/pipe-dist-1-3.dat" u 2:5 w p pt 18 ps 1.5 color melon every (100)/(1*3) ti "$n=3$ first order",\
"run/pipe-dist-1-6.dat" u 2:5 w l lw 1 lt 2 color redorange ti "",\
"run/pipe-dist-1-6.dat" u 2:5 w p pt 16 ps 1.5 color redorange every (100)/(1*6) ti "$n=6$ first order",\
"run/pipe-dist-2-2.dat" u 2:5 w l lw 2 lt 3 color turquoise ti "",\
"run/pipe-dist-2-2.dat" u 2:5 w p pt 17 ps 1.5 color turquoise every (100)/(2*2) ti "$n=2$ second order"

set output "sigmal.pdf"
set xrange [a:b]
set yrange [*:*]
set key top right
set xlabel "$r$ [mm]"
set ylabel "$\sigma_l(r)$ [mm]"
plot sigmal1(x) w l lw 3 lt 1 color forestgreen ti "Analytical solution $\sigma_l(r)$",\
"run/pipe-dist-1-3.dat" u 2:6 w l lw 1 lt 2 color peach ti "",\
"run/pipe-dist-1-3.dat" u 2:6 w p pt 18 ps 1.5 color peach every (100)/(1*3) ti "$n=3$ first order",\
"run/pipe-dist-1-6.dat" u 2:6 w l lw 1 lt 2 color dandelion ti "",\
"run/pipe-dist-1-6.dat" u 2:6 w p pt 16 ps 1.5 color dandelion every (100)/(1*6) ti "$n=6$ first order",\
"run/pipe-dist-2-3.dat" u 2:6 w l lw 2 lt 3 color periwinkle ti "",\
"run/pipe-dist-2-3.dat" u 2:6 w p pt 17 ps 1.5 color periwinkle every (100)/(2*2) ti "$n=2$ second order"

set output "sigmar.pdf"
set xrange [a:b]
set yrange [*:*]
set key top left
set xlabel "$r$ [mm]"
set ylabel "$\sigma_r(r)$ [mm]"
plot sigmar1(x) w l lw 3 lt 1 color emerald ti "Analytical solution $\sigma_r(r)$",\
"run/pipe-dist-1-3.dat" u 2:7 w l lw 1 lt 2 color bittersweet ti "",\
"run/pipe-dist-1-3.dat" u 2:7 w p pt 18 ps 1.5 color bittersweet every (100)/(1*3) ti "$n=3$ first order",\
"run/pipe-dist-1-6.dat" u 2:7 w l lw 1 lt 2 color orange ti "",\
"run/pipe-dist-1-6.dat" u 2:7 w p pt 16 ps 1.5 color orange every (100)/(1*6) ti "$n=6$ first order",\
"run/pipe-dist-2-3.dat" u 2:7 w l lw 2 lt 3 color royalblue ti "",\
"run/pipe-dist-2-3.dat" u 2:7 w p pt 17 ps 1.5 color royalblue every (100)/(2*2) ti "$n=2$ second order"


set output "M_tresca.pdf"
set key top right
set xrange [*:*]
set yrange [(1-delta)*M_tresca:(1+delta)*M_tresca]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{M}_\\text{tresca}$ [MPa]"
plot M_tresca w l lw 3 lt 1 color green ti "Analytical solution",\
"run/convergence-1.dat" u 1:2 w lp lw 2 lt 3 pt 2 ps 1.5 color brickred ti "First-order grid",\
"run/convergence-2.dat" u 1:2 w lp lw 2 lt 2 pt 3 ps 1.5 color blue ti "Second-order grid"

set output "M_vonmises.pdf"
set key top right
set yrange [(1-delta)*M_vonmises:(1+delta)*M_vonmises]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{M}_\\text{vonmises}$ [MPa]"
plot M_vonmises w l lw 3 lt 1 color green ti "Analytical solution",\
"run/convergence-1.dat" u 1:3 w lp lw 2 lt 3 pt 2 ps 1.5 color brickred ti "First-order grid",\
"run/convergence-2.dat" u 1:3 w lp lw 2 lt 2 pt 3 ps 1.5 color blue ti "Second-order grid"

set output "M_1.pdf"
set key top right
set yrange [(1-delta)*M_1:(1+delta)*M_1]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{M}_1$ [MPa]"
plot M_1 w l lw 3 lt 1 color green ti "Analytical solution",\
"run/convergence-1.dat" u 1:4 w lp lw 2 lt 3 pt 2 ps 1.5 color brickred ti "First-order grid",\
"run/convergence-2.dat" u 1:4 w lp lw 2 lt 2 pt 3 ps 1.5 color blue ti "Second-order grid"

set output "M_2.pdf"
set key top right
set yrange [(1-delta)*M_2:(1+delta)*M_2]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{M}_2$ [MPa]"
plot M_2 w l lw 3 lt 1 color green ti "Analytical solution",\
"run/convergence-1.dat" u 1:5 w lp lw 2 lt 3 pt 2 ps 1.5 color brickred ti "First-order grid",\
"run/convergence-2.dat" u 1:5 w lp lw 2 lt 2 pt 3 ps 1.5 color blue ti "Second-order grid"

set output "M_3.pdf"
set key top right
set yrange [(1+delta)*M_3:(1-delta)*M_3]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{M}_3$ [MPa]"
plot M_3 w l lw 3 lt 1 color green ti "Analytical solution",\
"run/convergence-1.dat" u 1:6 w lp lw 2 lt 3 pt 2 ps 1.5 color brickred ti "First-order grid",\
"run/convergence-2.dat" u 1:6 w lp lw 2 lt 2 pt 3 ps 1.5 color blue ti "Second-order grid"



set output "MB_tresca.pdf"
set key top right
set yrange [(1-delta)*MB_tresca:(1+delta)*MB_tresca]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{MB}_\\text{tresca}$ [MPa]"
plot MB_tresca w l lw 3 lt 1 color limegreen ti "Analytical solution",\
"run/convergence-1.dat" u 1:7 w lp lw 2 lt 3 pt 16 ps 1.5 color salmon ti "First-order grid",\
"run/convergence-2.dat" u 1:7 w lp lw 2 lt 2 pt 17 ps 1.5 color cadetblue ti "Second-order grid"

set output "MB_vonmises.pdf"
set key top right
set yrange [(1-delta)*MB_vonmises:(1+delta)*MB_vonmises]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{MB}_\\text{vonmises}$ [MPa]"
plot MB_vonmises w l lw 3 lt 1 color limegreen ti "Analytical solution",\
"run/convergence-1.dat" u 1:8 w lp lw 2 lt 3 pt 16 ps 1.5 color salmon ti "First-order grid",\
"run/convergence-2.dat" u 1:8 w lp lw 2 lt 2 pt 17 ps 1.5 color cadetblue ti "Second-order grid"

set output "MB_1.pdf"
set key top right
set yrange [(1-delta)*MB_1:(1+delta)*MB_1]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{MB}_1$ [MPa]"
plot MB_1 w l lw 3 lt 1 color limegreen ti "Analytical solution",\
"run/convergence-1.dat" u 1:9 w lp lw 2 lt 3 pt 16 ps 1.5 color salmon ti "First-order grid",\
"run/convergence-2.dat" u 1:9 w lp lw 2 lt 2 pt 17 ps 1.5 color cadetblue ti "Second-order grid"

set output "MB_2.pdf"
set key top right
set yrange [(1-delta)*MB_2:(1+delta)*MB_2]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{MB}_2$ [MPa]"
plot MB_2 w l lw 3 lt 1 color limegreen ti "Analytical solution",\
"run/convergence-1.dat" u 1:10 w lp lw 2 lt 3 pt 16 ps 1.5 color salmon ti "First-order grid",\
"run/convergence-2.dat" u 1:10 w lp lw 2 lt 2 pt 17 ps 1.5 color cadetblue ti "Second-order grid"

set output "MB_3.pdf"
set key top right
set yrange [(1+delta)*MB_3:(1-delta)*MB_3]
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "$\text{MB}_3$ [MPa]"
plot MB_3 w l lw 3 lt 1 color limegreen ti "Analytical solution",\
"run/convergence-1.dat" u 1:11 w lp lw 2 lt 3 pt 16 ps 1.5 color salmon ti "First-order grid",\
"run/convergence-2.dat" u 1:11 w lp lw 2 lt 2 pt 17 ps 1.5 color cadetblue ti "Second-order grid"



set output "nodes-vs-n.pdf"
set key bottom right
set yrange [*:*]
set logscale y
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "Number of nodes"
plot "run/convergence-1.dat" u 1:12 w lp lw 2 lt 3 pt 16 color melon ti "First-order grid",\
"run/convergence-2.dat" u 1:12 w lp lw 3 lt 4 pt 17 color violet ti "Second-order grid"

set output "elements-vs-n.pdf"
set key bottom right
set yrange [*:*]
set logscale y
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "Number of elements"
plot "run/convergence-1.dat" u 1:13 w lp lw 2 lt 3 pt 16 ps 1.5 color apricot ti "First-order grid",\
"run/convergence-2.dat" u 1:13 w lp lw 3 lt 4 pt 17 ps 1 color plum ti "Second-order grid"

set output "cpu-vs-n.pdf"
set key bottom right
set yrange [*:*]
set logscale y
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "CPU time [sec]"
plot "run/convergence-1.dat" u 1:14 w lp lw 2 lt 3 pt 16 ps 1.75 color melon ti "First-order grid",\
"run/convergence-2.dat" u 1:14 w lp lw 3 lt 4 pt 17 ps 1.25 color plum ti "Second-order grid"

set output "memory-vs-n.pdf"
set key bottom right
set yrange [*:*]
set logscale y
set xlabel "Number $n$ of elements through the pipe thickness"
set ylabel "Memory [Mb]"
plot "run/convergence-1.dat" u 1:15 w lp lw 2 lt 3 pt 16 color bittersweet ti "First-order grid",\
"run/convergence-2.dat" u 1:15 w lp lw 3 lt 4 pt 17 color violet ti "Second-order grid"


set output "error-M-vs-cpu.pdf"
set key top right
set yrange [*:*]
set logscale y
set logscale x
set xlabel "CPU time [sec]"
set ylabel "$|\text{M}_\\text{vonmises} - \text{analytical solution}|$ [MPa]"
plot "run/convergence-1.dat" u 14:(abs($3-M_vonmises)) w lp lw 2 lt 3 pt 16 color orangered ti "First-order grid",\
"run/convergence-2.dat" u 14:(abs($3-M_vonmises)) w lp lw 3 lt 4 pt 17 color cadetblue ti "Second-order grid"

set output "error-MB-vs-cpu.pdf"
set key top right
set yrange [*:*]
set logscale y
set logscale x
set xlabel "CPU time [sec]"
set ylabel "$|\text{MB}_\\text{vonmises} - \text{analytical solution}|$ [MPa]"
plot "run/convergence-1.dat" u 14:(abs($8-MB_vonmises)) w lp lw 2 lt 3 pt 16 color salmon ti "First-order grid",\
"run/convergence-2.dat" u 14:(abs($8-MB_vonmises)) w lp lw 3 lt 4 pt 17 color navyblue ti "Second-order grid"

+ 23
- 0
plot.sh Datei anzeigen

@@ -0,0 +1,23 @@
#!/bin/bash

for i in pipe-linearize/analytical.ppl pipe-linearize/convergence-1.dat pipe-linearize/convergence-2.dat; do
if [ ! -e $i ]; then
echo "error: no results found, please read README fist"
exit 1
fi
done

for i in pipe-linearize/pipe-mesh-1-1.png ur.pdf; do
if [ ! -e $i ]; then
echo "error: results found but no figures available, please read README fist"
exit 1
fi
done

# copy the figures to .
cp pipe-linearize/*.pdf pipe-linearize/*.png .

# convert pdfs to svg
for i in M_*.pdf MB_*.pdf ur.pdf *-vs-n.pdf sigma*.pdf error*.pdf; do
pdf2svg $i `basename $i .pdf`.svg
done

BIN
quarter-caeplex.png Datei anzeigen

Vorher Nachher
Breite: 759  |  Höhe: 746  |  Größe: 172KB

+ 123
- 0
references.bib Datei anzeigen

@@ -0,0 +1,123 @@
@techreport { asme3div1ap1,
title = {ASME Boiler and Pressure Vessel Code, Section {III}, Rules for Construction of Nuclear Facility Components},
subtitle = {Division 1---Mandatory Appendix I, Design Fatigue Curves},
institution = {American Society of Mechanical Engineers},
year = {2015},
langid = {english},
language = {english},
}

@techreport { asme3div1apN,
title = {ASME Boiler and Pressure Vessel Code, Section {III}, Rules for Construction of Nuclear Facility Components},
subtitle = {Division 1---NonMandatory Appendix N, Dynamic Analysis Methods},
institution = {American Society of Mechanical Engineers},
year = {2015},
langid = {english},
language = {english},
}

@techreport { asme2partA,
title = {ASME Boiler and Pressure Vessel Code, Section {II}, Materials},
subtitle = {Part A, Ferrous Materials},
institution = {American Society of Mechanical Engineers},
year = {2015},
langid = {english},
language = {english},
}

@techreport { asme2partD,
title = {ASME Boiler and Pressure Vessel Code, Section {II}, Materials},
subtitle = {Part D, Properties (Metric)},
institution = {American Society of Mechanical Engineers},
year = {2015},
langid = {english},
language = {english},
}

@techreport { asme3div1nb,
title = {ASME Boiler and Pressure Vessel Code, Section {III}, Rules for Construction of Nuclear Facility Components},
subtitle = {Division 1---Subsection NB, Class 1 Components},
institution = {American Society of Mechanical Engineers},
year = {2015},
langid = {english},
language = {english},
}

@techreport { asme8div2,
title = {ASME Boiler and Pressure Vessel Code, Section {VIII}, Rules for Construction of Pressure Vessels},
subtitle = {Division 2---Alternative Rules},
institution = {American Society of Mechanical Engineers},
year = {2010},
langid = {english},
language = {english},
}

@techreport { asmeb36,
title = {Welded and Seamless Wrought Steel PIpe},
institution = {American Society of Mechanical Engineers},
number = {ASME B36.10M},
year = {2004},
langid = {english},
language = {english},
}


@techreport{wasoradesc,
author = "J. Theler",
title = "Description of the computational tool wasora",
type="Technical Description",
number = "SP-WA-15-TD-9E3D",
institution = "Seamplex",
version="B",
year = "2016",
language = "english",
hyphenation = "english",
}

@techreport{milonga-design,
author = "J. Theler",
title = "On the design basis of a new core-level neutronic code written from scratch",
type="Technical Report",
number = "SP-MI-14-AR-5B44",
institution = "Seamplex",
version="D",
year = "2016",
language = "english",
hyphenation = "english",
}




@book{raymond,
author = "Eric S. Raymond",
title = "The Art of UNIX Programming",
publisher = "Addison-Wesley",
year = "2003",
langid = "english",
language = "english",
}


@article{gmsh,
author = "C. Geuzaine and J. F. Remacle",
title = "Gmsh: a three-dimensional finite element mesh generator with built-in pre- and post-processing facilities",
journal = "International Journal for Numerical Methods in Engineering",
number = "79",
volume = "11",
pages = "1309--1331",
year = "2009",
language = "english",
hyphenation = "english",
}


@techreport{linearisation,
author = "Angus Ramsay",
title = "Stress Linearisation for Practising Engineers",
type="Technical Report",
institution = "Ramsay Maunder Associates",
year = "2016",
language = "english",
hyphenation = "english",
}

BIN
struct.png Datei anzeigen

Vorher Nachher
Breite: 1040  |  Höhe: 848  |  Größe: 133KB

+ 146
- 0
syntax.tex Datei anzeigen

@@ -0,0 +1,146 @@
\input{wasora}
\input{fino}

\definecolor{was_keyword1}{rgb}{0.0,0.0,0.4}
\definecolor{was_keyword2}{rgb}{0.0,0.2,0.0}
\definecolor{was_variable}{rgb}{0.5,0.2,0.2}
\definecolor{was_function}{rgb}{0.2,0.5,0.2}
\definecolor{was_comment}{rgb}{0.5,0.5,0.5}

\definecolor{bash_keyword1}{rgb}{0.2,0.2,0.2}
\definecolor{bash_keyword2}{rgb}{0.7,0.7,0.7}
\definecolor{bash_comment}{rgb}{0.5,0.5,0.5}

\definecolor{was_fondo}{rgb}{0.95,0.95,0.90}
\definecolor{fino_fondo}{rgb}{0.95,0.90,0.95}
\definecolor{maxima_fondo}{rgb}{0.90,0.95,0.90}
\definecolor{gmsh_fondo}{rgb}{0.90,0.90,0.95}
\definecolor{terminal_fondo}{rgb}{0.95,0.95,0.95}
\definecolor{bash_fondo}{rgb}{0.90,0.90,0.90}

\newcommand{\MyHookSign}{\hbox{\ensuremath{\hookleftarrow}}}

\lstdefinestyle{wasora}{
language=wasora,
basicstyle=\ttfamily\footnotesize,
commentstyle={\color{was_comment}\normalfont\textit},
keywordstyle=[1]{\color{was_keyword1}\ttfamily\textbf},
keywordstyle=[2]{\color{was_keyword2}\ttfamily\textbf},
keywordstyle=[3]{\color{was_variable}\textit},
keywordstyle=[4]{\color{was_function}\textbf},
backgroundcolor=\color{was_fondo},
showstringspaces=true,
breaklines=true,
breakatwhitespace=true,
prebreak={\space\MyHookSign},
lineskip=-1pt,
captionpos=b,
% numbers=left,
% stepnumber=5,
xleftmargin=0.2cm,
xrightmargin=0.4cm,
framesep=0.1cm,
frame=single,
}

\lstdefinestyle{fino}{
language=wasora,
basicstyle=\ttfamily\footnotesize,
commentstyle={\color{was_comment}\normalfont\textit},
keywordstyle=[1]{\color{was_keyword1}\ttfamily\textbf},
keywordstyle=[2]{\color{was_keyword2}\ttfamily\textbf},
backgroundcolor=\color{fino_fondo},
showstringspaces=true,
breaklines=true,
breakatwhitespace=true,
prebreak={\space\MyHookSign},
lineskip=-1pt,
captionpos=b,
% numbers=left,
% stepnumber=5,
xleftmargin=0.2cm,
xrightmargin=0.4cm,
framesep=0.1cm,
frame=single,
}


\lstdefinestyle{bash}{
language=bash,
basicstyle=\ttfamily\footnotesize,
commentstyle={\color{bash_comment}\normalfont\textit},
keywordstyle=[1]{\color{bash_keyword1}\ttfamily\textbf},
keywordstyle=[2]{\color{bash_keyword2}\ttfamily\textbf},
backgroundcolor=\color{bash_fondo},
showstringspaces=true,
breaklines=true,
breakatwhitespace=true,
prebreak={\space\MyHookSign},
lineskip=-1pt,
captionpos=b,
% numbers=left,
% stepnumber=5,
xleftmargin=0.2cm,
xrightmargin=0.2cm,
framesep=0.2cm,
frame=single,
}


\lstdefinestyle{terminal}{
language=,
basicstyle=\ttfamily\footnotesize,
backgroundcolor=\color{terminal_fondo},
breaklines=true,
prebreak={\space\MyHookSign},
xleftmargin=0.2cm,
xrightmargin=0.2cm,
framesep=0.2cm,
frame=single,
}

\lstdefinestyle{gmsh}{
language=C,
basicstyle=\ttfamily\footnotesize,
commentstyle={\color{was_comment}\normalfont\textit},
keywordstyle=[1]{\color{was_keyword1}\ttfamily\textbf},
keywordstyle=[2]{\color{was_keyword2}\ttfamily\textbf},
keywordstyle=[3]{\color{was_variable}\textit},
keywordstyle=[4]{\color{was_function}\textbf},
backgroundcolor=\color{gmsh_fondo},
showstringspaces=true,
breaklines=true,
breakatwhitespace=true,
prebreak={\space\MyHookSign},
lineskip=-1pt,
captionpos=b,
% numbers=left,
% stepnumber=5,
xleftmargin=0.2cm,
xrightmargin=0.4cm,
framesep=0.1cm,
frame=single,
}

\lstdefinestyle{maxima}{
language=C,
basicstyle=\ttfamily\footnotesize,
commentstyle={\color{was_comment}\normalfont\textit},
keywordstyle=[1]{\color{was_keyword1}\ttfamily\textbf},
keywordstyle=[2]{\color{was_keyword2}\ttfamily\textbf},
keywordstyle=[3]{\color{was_variable}\textit},
keywordstyle=[4]{\color{was_function}\textbf},
backgroundcolor=\color{maxima_fondo},
showstringspaces=true,
breaklines=true,
breakatwhitespace=true,
prebreak={\space\MyHookSign},
lineskip=-1pt,
captionpos=b,
% numbers=left,
% stepnumber=5,
xleftmargin=0.2cm,
xrightmargin=0.4cm,
framesep=0.1cm,
frame=single,
}

+ 1
- 0
upload.sh Datei anzeigen

@@ -0,0 +1 @@
rsync -avz --progress --exclude=".git" --exclude="run" --exclude="simscale" . seamplex.com:html/jimbo/fino/doc/pipe-linearized

+ 423
- 0
wasora.tex Datei anzeigen

@@ -0,0 +1,423 @@
\lstdefinelanguage{wasora}{
morekeywords={
ABORT,
ADIABATIC,
ALGORITHM,
ALIAS,
AS,
ASCII_FILE,
ASCII_FILE_PATH,
BAKE,
BC,
BINARY_FILE,
BINARY_FILE_PATH,
BOUNDARY,
BREAK,
CALL,
CELLS,
CLOSE,
COLS,
COLUMNS,
CONST,
DATA,
DEFAULT_ARGUMENT_VALUE,
DEGREES,
DELTAEPSABS,
DELTAEPSREL,
DELTA_X,
DELTA_Y,
DELTA_Z,
DIFFERENTIAL,
DIMENSIONS,
DO_NOT_EVALUATE_AT_PARSE_TIME,
DO_NOT_OPEN,
DO_NOT_RERUN,
DO_NOT_SET_BLOCK_SIZE,
DUMP_FILE_PATH,
ELASTIC,
ELASTIC_AXISYMMETRIC,
ELEMS_PER_LINE,
ELSE,
ENDIF,
END_POINT,
EPSABS,
EPSREL,
EPS_TYPE,
EXPR,
EXPRESSION,
FILE,
FILE_PATH,
FINO_DEBUG,
FINO_LINEARIZE,
FINO_PROBLEM,
FINO_SOLVER,
FINO_STEP,
FIT,
FLUX_POST,
FORMAT,
FORMULATION,
FROM,
FUNCTION,
FUNCTION_DATA,
GAUSS_POINTS,
GRADIENT,
GRADIENT_EVALUATION,
GRADIENT_JACOBIAN_THRESHOLD,
GROUPS,
GUESS,
HEADER,
HEAT,
HEAT_AXISYMMETRIC,
HISTORY,
HORIZONTAL,
ID,
IF,
IGNORE_NULL,
I_MAX,
IMPLICIT,
IMPLICIT_BC,
INCLUDE,
INCLUDE_INPUT,
INCREMENTAL,
INDEX,
INITIAL_CONDITIONS_MODE,
INPUT,
INPUT_FILE,
INPUT_FILE_PATH,
INTERPOLATION,
INTERPOLATION_THRESHOLD,
IS,
JUST_BUILD,
JUST_SOLVE,
KSP_TYPE,
LENGTH_X,
LENGTH_Y,
LENGTH_Z,
LOAD_PLUGIN,
LOAD_ROUTINE,
M,
M4,
MACRO,
MATERIAL,
MATRICES_ASCII,
MATRICES_ASCII_STRUCTURE,
MATRICES_PETSC_ASCII,
MATRICES_PETSC_BINARY,
MATRICES_PETSC_COMPRESSED_BINARY,
MATRICES_PETSC_DENSE,
MATRICES_PETSC_OCTAVE,
MATRICES_SIZE,
MATRICES_SNG,
MATRICES_SNG_STRUCT,
MATRICES_STRIDE,
MATRICES_X,
MATRICES_X_SIZE,
MATRIX,
MAX,
MAX_DAUGHTERS,
MAX_ITER,
MB,
MEMORY_USAGE_SHMEM,
MESH,
MESH_FILL_VECTOR,
MESH_FIND_MAX,
MESH_INTEGRATE,
MESH_MAIN,
MESH_POST,
METHOD,
MILONGA_DEBUG,
MILONGA_PROBLEM,
MILONGA_SOLVER,
MILONGA_STEP,
MIN,
MINIMIZE,
MODAL,
MODE,
NAME,
NCELLS_X,
NCELLS_Y,
NCELLS_Z,
N_EIGEN,
NODES,
NOMESH,
NO_MESH,
NONEWLINE,
NO_PHYSICAL_NAMES,
NORERUN,
NOSEP,
NSTEPS,
OFFSET,
OFFSET_X,
OFFSET_Y,
OFFSET_Z,
OPEN,
OPTIMIZE,
ORDERING,
OUTER_STEPS,
OUTPUT,
OUTPUT_FILE,
OUTPUT_FILE_PATH,
OVER,
PARAMETRIC,
PC_TYPE,
PEAK,
PHASE_SPACE,
PHYSICAL_ENTITY,
PHYSICAL_PROPERTY,
PLANE_STRAIN,
PLANE_STRESS,
PRINT,
PRINT_FUNCTION,
PRINT_VECTOR,
PROGRESS_ASCII,
PROGRESS_BUILD_SHMEM,
PROGRESS_SOLVE_SHMEM,
RANGE_MAX,
RANGE_MIN,
READ,
READ_DATA,
READ_FUNCTION,
RERUN,
RESIDUALS,
RESULT,
ROUTINE,
ROWS,
SCALE_FACTOR,
SCHEME,
SEM,
SEMAPHORE,
SEP,
SEPARATOR,
SET_BLOCK_SIZE,
SET_NEAR_NULLSPACE,
SET_NEAR_NULL_SPACE,
SHAKE,
SHELL,
SHEPARD_EXPONENT,
SHEPARD_RADIUS,
SHM,
SHMEM_MEMORY,
SHMEM_PROGRESS_BUILD,
SHMEM_PROGRESS_SOLVE,
SHM_OBJECT,
SIMAN_EFUNC,
SIZE,
SIZES,
SOLUTION,
SOLUTION_NAMES,
SOLUTIONS,
SOLVE,
SPECTRUM,
ST_ANTI_SHIFT,
START_POINT,
STEP,
STRING,
STRUCTURED,
ST_SHIFT,
ST_TYPE,
SUBSPACE_DIM,
SYMMETRY_AXIS,
TEXT,
TIME_PATH,
TO,
TOTAL,
TYPE,
UNKNOWN,
UNKNOWNS,
VAR,
VECTOR,
VECTOR_DATA,
VECTORS,
VERBOSE,
VERTICAL,
VIA,
VOLHOM,
WRITE,
X_INCREASES_FIRST,
X_MAX,
XS,
Y_MAX,
Z_MAX,
ALLOWED,
AS_PROVIDED,
FROM_DERIVATIVES,
FROM_VARIABLES,
GRADTOL,
MAX_ITER,
NONE,
POST,
SKIP_HEADER_STEP,
SKIP_STATIC_STEP,
SKIP_STEP,
SKIP_TIME,
TOL,
WAIT,
},
morekeywords={[2]
},
morekeywords={[3]
cells,
cells_0,
done,
done_0,
done_outer,
done_outer_0,
done_static,
done_static_0,
done_transient,
done_transient_0,
dont_quit,
dont_quit_0,
dont_report,
dont_report_0,
dt,
dt_0,
elements,
elements_0,
end_time,
end_time_0,
eps,
eps_0,
i,
i_0,
infinite,
infinite_0,
in_outer_initial,
in_outer_initial_0,
in_static,
in_static_0,
in_static_first,
in_static_first_0,
in_static_last,
in_static_last_0,
in_transient,
in_transient_0,
in_transient_first,
in_transient_first_0,
in_transient_last,
in_transient_last_0,
j,
j_0,
max_dt,
max_dt_0,
min_dt,
min_dt_0,
ncores,
ncores_0,
nodes,
nodes_0,
on_gsl_error,
on_gsl_error_0,
on_ida_error,
on_ida_error_0,
on_nan,
on_nan_0,
pi,
pi_0,
pid,
pid_0,
quit,
quit_0,
realtime_scale,
realtime_scale_0,
rel_error,
rel_error_0,
report,
report_0,
static_steps,
static_steps_0,
step_inner,
step_inner_0,
step_outer,
step_outer_0,
step_static,
step_static_0,
step_transient,
step_transient_0,
t,
t_0,
x,
x_0,
y,
y_0,
z,
z_0,
zero,
zero_0,
},
morekeywords={[4]
abs,
acos,
asin,
atan,
atan2,
builtindecl.h,
ceil,
clock,
cos,
cosh,
d_dt,
deadband,
derivative,
equal,
exp,
expint1,
expint2,
expint3,
expintn,
floor,
func_min,
gauss_kronrod,
gauss_legendre,
heaviside,
if,
integral,
integral_dt,
integral_euler_dt,
is_even,
is_in_interval,
is_odd,
j0,
lag,
lag_bilinear,
lag_euler,
last,
limit,
limit_dt,
log,
mark_max,
mark_min,
max,
min,
mod,
not,
prod,
random,
random_gauss,
root,
round,
sawtooth_wave,
sgn,
sin,
sinh,
sqrt,
square_wave,
sum,
tan,
tanh,
threshold_max,
threshold_min,
triangular_wave,
vecdot,
vecmax,
vecmaxindex,
vecmin,
vecminindex,
vecnorm,
vecsize,
vecsum,
},
sensitive=true,
morecomment=[l]{\#},
morestring=[b]\",
}

+ 478
- 0
wasora.xml Datei anzeigen

@@ -0,0 +1,478 @@
<?xml version="1.0" encoding="UTF-8"?>
<language name="wasora" version="0.2" kateversion="3.7.4" section="Scientific" extensions="*.was;*.mil;*.fin" author="jeremy theler" license="GPL">
<highlighting>
<list name="prim_keywords">
<item>ABORT</item>
<item>ADIABATIC</item>
<item>ALGORITHM</item>
<item>ALIAS</item>
<item>AS</item>
<item>ASCII_FILE</item>
<item>ASCII_FILE_PATH</item>
<item>BAKE</item>
<item>BC</item>
<item>BINARY_FILE</item>
<item>BINARY_FILE_PATH</item>
<item>BOUNDARY</item>
<item>BREAK</item>
<item>CALL</item>
<item>CELLS</item>
<item>CLOSE</item>
<item>COLS</item>
<item>COLUMNS</item>
<item>CONST</item>
<item>DATA</item>
<item>DEFAULT_ARGUMENT_VALUE</item>
<item>DEGREES</item>
<item>DELTAEPSABS</item>
<item>DELTAEPSREL</item>
<item>DELTA_X</item>
<item>DELTA_Y</item>
<item>DELTA_Z</item>
<item>DIFFERENTIAL</item>
<item>DIM</item>
<item>DIMENSION</item>
<item>DIMENSIONS</item>
<item>DO_NOT_EVALUATE_AT_PARSE_TIME</item>
<item>DO_NOT_OPEN</item>
<item>DO_NOT_RERUN</item>
<item>DO_NOT_SET_BLOCK_SIZE</item>
<item>DUMP_FILE_PATH</item>
<item>ELASTIC</item>
<item>ELASTIC_AXISYMMETRIC</item>
<item>ELEMS_PER_LINE</item>
<item>ELSE</item>
<item>ENDIF</item>
<item>END_POINT</item>
<item>EPSABS</item>
<item>EPSREL</item>
<item>EPS_TYPE</item>
<item>EXPR</item>
<item>EXPRESSION</item>
<item>FILE</item>
<item>FILE_PATH</item>
<item>FINO_DEBUG</item>
<item>FINO_LINEARIZE</item>
<item>FINO_PROBLEM</item>
<item>FINO_SOLVER</item>
<item>FINO_STEP</item>
<item>FIT</item>
<item>FLUX_POST</item>
<item>FORMAT</item>
<item>FORMULATION</item>
<item>FROM</item>
<item>FUNCTION</item>
<item>FUNCTION_DATA</item>
<item>GAUSS_POINTS</item>
<item>GRADIENT</item>
<item>GRADIENT_EVALUATION</item>
<item>GRADIENT_JACOBIAN_THRESHOLD</item>
<item>GROUPS</item>
<item>GUESS</item>
<item>HEADER</item>
<item>HEAT</item>
<item>HEAT_AXISYMMETRIC</item>
<item>HISTORY</item>
<item>HORIZONTAL</item>
<item>IF</item>
<item>IGNORE_NULL</item>
<item>I_MAX</item>
<item>IMPLICIT</item>
<item>IMPLICIT_BC</item>
<item>INCLUDE</item>
<item>INCLUDE_INPUT</item>
<item>INDEX</item>
<item>INITIAL_CONDITIONS_MODE</item>
<item>INPUT</item>
<item>INPUT_FILE</item>
<item>INPUT_FILE_PATH</item>
<item>INTERPOLATION</item>
<item>INTERPOLATION_THRESHOLD</item>
<item>IS</item>
<item>JUST_BUILD</item>
<item>JUST_SOLVE</item>
<item>KSP_TYPE</item>
<item>LENGTH_X</item>
<item>LENGTH_Y</item>
<item>LENGTH_Z</item>
<item>LOAD_PLUGIN</item>
<item>LOAD_ROUTINE</item>
<item>M</item>
<item>M4</item>
<item>MACRO</item>
<item>MATERIAL</item>
<item>MATRICES_ASCII</item>
<item>MATRICES_ASCII_STRUCTURE</item>
<item>MATRICES_PETSC_ASCII</item>
<item>MATRICES_PETSC_BINARY</item>
<item>MATRICES_PETSC_COMPRESSED_BINARY</item>
<item>MATRICES_PETSC_DENSE</item>
<item>MATRICES_PETSC_OCTAVE</item>
<item>MATRICES_SIZE</item>
<item>MATRICES_SNG</item>
<item>MATRICES_SNG_STRUCT</item>
<item>MATRICES_STRIDE</item>
<item>MATRICES_X</item>
<item>MATRICES_X_SIZE</item>
<item>MATRIX</item>
<item>MAX</item>
<item>MAX_DAUGHTERS</item>
<item>MAX_ITER</item>
<item>MB</item>
<item>MEMORY_USAGE_SHMEM</item>
<item>MESH</item>
<item>MESH_FILL_VECTOR</item>
<item>MESH_FIND_MAX</item>
<item>MESH_INTEGRATE</item>
<item>MESH_MAIN</item>
<item>MESH_POST</item>
<item>METHOD</item>
<item>MILONGA_DEBUG</item>
<item>MILONGA_PROBLEM</item>
<item>MILONGA_SOLVER</item>
<item>MILONGA_STEP</item>
<item>MIN</item>
<item>MINIMIZE</item>
<item>MODAL</item>
<item>MODE</item>
<item>NAME</item>
<item>NCELLS_X</item>
<item>NCELLS_Y</item>
<item>NCELLS_Z</item>
<item>N_EIGEN</item>
<item>NODES</item>
<item>NOMESH</item>
<item>NO_MESH</item>
<item>NONEWLINE</item>
<item>NO_PHYSICAL_NAMES</item>
<item>NORERUN</item>
<item>NOSEP</item>
<item>NSTEPS</item>
<item>OFFSET</item>
<item>OPEN</item>
<item>OPTIMIZE</item>
<item>ORDERING</item>
<item>OUTER_STEPS</item>
<item>OUTPUT</item>
<item>OUTPUT_FILE</item>
<item>OUTPUT_FILE_PATH</item>
<item>OVER</item>
<item>PARAMETRIC</item>
<item>PC_TYPE</item>
<item>PEAK</item>
<item>PHASE_SPACE</item>
<item>PHYSICAL_ENTITY</item>
<item>PHYSICAL_PROPERTY</item>
<item>PLANE_STRAIN</item>
<item>PLANE_STRESS</item>
<item>PRINT</item>
<item>PRINT_FUNCTION</item>
<item>PRINT_VECTOR</item>
<item>PROGRESS_ASCII</item>
<item>PROGRESS_BUILD_SHMEM</item>
<item>PROGRESS_SOLVE_SHMEM</item>
<item>RANGE_MAX</item>
<item>RANGE_MIN</item>
<item>READ</item>
<item>READ_DATA</item>
<item>READ_FUNCTION</item>
<item>READ_SCALAR</item>
<item>RERUN</item>
<item>RESIDUALS</item>
<item>RESULT</item>
<item>ROUTINE</item>
<item>ROWS</item>
<item>SCALE</item>
<item>SCHEME</item>
<item>SEM</item>
<item>SEMAPHORE</item>
<item>SEP</item>
<item>SEPARATOR</item>
<item>SET_BLOCK_SIZE</item>
<item>SET_NEAR_NULLSPACE</item>
<item>SET_NEAR_NULL_SPACE</item>
<item>SHAKE</item>
<item>SHELL</item>
<item>SHEPARD_EXPONENT</item>
<item>SHEPARD_RADIUS</item>
<item>SHM</item>
<item>SHMEM_MEMORY</item>
<item>SHMEM_PROGRESS_BUILD</item>
<item>SHMEM_PROGRESS_SOLVE</item>
<item>SHM_OBJECT</item>
<item>SIMAN_EFUNC</item>
<item>SIZE</item>
<item>SIZES</item>
<item>SOLUTION</item>
<item>SOLUTION_NAMES</item>
<item>SOLUTIONS</item>
<item>SOLVE</item>
<item>SPECTRUM</item>
<item>ST_ANTI_SHIFT</item>
<item>START_POINT</item>
<item>STEP</item>
<item>STRING</item>
<item>STRUCTURED</item>
<item>ST_SHIFT</item>
<item>ST_TYPE</item>
<item>SUBSPACE_DIM</item>
<item>SYMMETRY_AXIS</item>
<item>TEXT</item>
<item>TIME_PATH</item>
<item>TO</item>
<item>TOTAL</item>
<item>TYPE</item>
<item>UNKNOWN</item>
<item>UNKNOWNS</item>
<item>VAR</item>
<item>VECTOR</item>
<item>VECTOR_DATA</item>
<item>VECTORS</item>
<item>VERBOSE</item>
<item>VERTICAL</item>
<item>VIA</item>
<item>VOLHOM</item>
<item>WRITE</item>
<item>X_INCREASES_FIRST</item>
<item>X_MAX</item>
<item>XS</item>
<item>Y_MAX</item>
<item>Z_MAX</item>
<item>ALLOWED</item>
<item>AS_PROVIDED</item>
<item>FROM_DERIVATIVES</item>
<item>FROM_VARIABLES</item>
<item>GRADTOL</item>
<item>MAX_ITER</item>
<item>NONE</item>
<item>POST</item>
<item>SKIP_HEADER_STEP</item>
<item>SKIP_STATIC_STEP</item>
<item>SKIP_STEP</item>
<item>SKIP_TIME</item>
<item>TOL</item>
<item>WAIT</item>
</list>
<list name="sec_keywords">
</list>
<list name="internals">
<item>cells</item>
<item>cells_0</item>
<item>done</item>
<item>done_0</item>
<item>done_outer</item>
<item>done_outer_0</item>
<item>done_static</item>
<item>done_static_0</item>
<item>done_transient</item>
<item>done_transient_0</item>
<item>dont_quit</item>
<item>dont_quit_0</item>
<item>dont_report</item>
<item>dont_report_0</item>
<item>dt</item>
<item>dt_0</item>
<item>elements</item>
<item>elements_0</item>
<item>end_time</item>
<item>end_time_0</item>
<item>eps</item>
<item>eps_0</item>
<item>i</item>
<item>i_0</item>
<item>infinite</item>
<item>infinite_0</item>
<item>in_outer_initial</item>
<item>in_outer_initial_0</item>
<item>in_static</item>
<item>in_static_0</item>
<item>in_static_first</item>
<item>in_static_first_0</item>
<item>in_static_last</item>
<item>in_static_last_0</item>
<item>in_transient</item>
<item>in_transient_0</item>
<item>in_transient_first</item>
<item>in_transient_first_0</item>
<item>in_transient_last</item>
<item>in_transient_last_0</item>
<item>j</item>
<item>j_0</item>
<item>max_dt</item>
<item>max_dt_0</item>
<item>min_dt</item>
<item>min_dt_0</item>
<item>ncores</item>
<item>ncores_0</item>
<item>nodes</item>
<item>nodes_0</item>
<item>on_gsl_error</item>
<item>on_gsl_error_0</item>
<item>on_ida_error</item>
<item>on_ida_error_0</item>
<item>on_nan</item>
<item>on_nan_0</item>
<item>pi</item>
<item>pi_0</item>
<item>pid</item>
<item>pid_0</item>
<item>quit</item>
<item>quit_0</item>
<item>realtime_scale</item>
<item>realtime_scale_0</item>
<item>rel_error</item>
<item>rel_error_0</item>
<item>report</item>
<item>report_0</item>
<item>static_steps</item>
<item>static_steps_0</item>
<item>step_inner</item>
<item>step_inner_0</item>
<item>step_outer</item>
<item>step_outer_0</item>
<item>step_static</item>
<item>step_static_0</item>
<item>step_transient</item>
<item>step_transient_0</item>
<item>t</item>
<item>t_0</item>
<item>x</item>
<item>x_0</item>
<item>y</item>
<item>y_0</item>
<item>z</item>
<item>z_0</item>
<item>zero</item>
<item>zero_0</item>
</list>
<list name="functions">
<item>abs</item>
<item>acos</item>
<item>asin</item>
<item>atan</item>
<item>atan2</item>
<item>builtindecl.h</item>
<item>ceil</item>
<item>clock</item>
<item>cos</item>
<item>cosh</item>
<item>d_dt</item>
<item>deadband</item>
<item>derivative</item>
<item>equal</item>
<item>exp</item>
<item>expint1</item>
<item>expint2</item>
<item>expint3</item>
<item>expintn</item>
<item>floor</item>
<item>func_min</item>
<item>gauss_kronrod</item>
<item>gauss_legendre</item>
<item>heaviside</item>
<item>if</item>
<item>integral</item>
<item>integral_dt</item>
<item>integral_euler_dt</item>
<item>is_even</item>
<item>is_in_interval</item>
<item>is_odd</item>
<item>j0</item>
<item>lag</item>
<item>lag_bilinear</item>
<item>lag_euler</item>
<item>last</item>
<item>limit</item>
<item>limit_dt</item>
<item>log</item>
<item>mark_max</item>
<item>mark_min</item>
<item>max</item>
<item>min</item>
<item>mod</item>
<item>not</item>
<item>prod</item>
<item>random</item>
<item>random_gauss</item>
<item>root</item>
<item>round</item>
<item>sawtooth_wave</item>
<item>sgn</item>
<item>sin</item>
<item>sinh</item>
<item>sqrt</item>
<item>square_wave</item>
<item>sum</item>
<item>tan</item>
<item>tanh</item>
<item>threshold_max</item>
<item>threshold_min</item>
<item>triangular_wave</item>
<item>vecdot</item>
<item>vecmax</item>
<item>vecmaxindex</item>
<item>vecmin</item>
<item>vecminindex</item>
<item>vecnorm</item>
<item>vecsize</item>
<item>vecsum</item>
</list>
<contexts>
<context attribute="Normal Text" lineEndContext="#stay" name="Normal">

<!-- do not detect strings (for now) -->
<!-- <DetectChar attribute="String" context="String" char="&quot;"/> -->
<!-- <DetectChar attribute="Normal Text" context="#stay" char="&quot;"/> -->

<keyword attribute="Keyword1" context="#stay" String="prim_keywords"/>
<keyword attribute="Keyword2" context="#stay" String="sec_keywords"/>
<keyword attribute="Identifier" context="#stay" String="internals"/>
<keyword attribute="Function" context="#stay" String="functions"/>

<DetectChar char="{" attribute="Operator" context="#stay" beginRegion="block" />
<DetectChar char="}" attribute="Operator" context="#stay" endRegion="block" />

<DetectChar char="=" attribute="Operator" context="#stay" />
<DetectChar char="+" attribute="Operator" context="#stay" />
<DetectChar char="-" attribute="Operator" context="#stay" />
<DetectChar char="/" attribute="Operator" context="#stay" />
<DetectChar char="*" attribute="Operator" context="#stay" />
<DetectChar char="^" attribute="Operator" context="#stay" />
<DetectChar char="," attribute="Operator" context="#stay" />
<DetectChar char="(" attribute="Operator" context="#stay" />
<DetectChar char=")" attribute="Operator" context="#stay" />

<Float attribute="Types" context="#stay"/>
<Int attribute="Types" context="#stay"/>
<Detect2Chars char="\" char1="#" attribute="Normal Text" context="#stay" />
<DetectChar attribute="Comment" context="Comment" char="#"/>
</context>
<context name="Comment" attribute="Comment" lineEndContext="#pop"/>

<context name="String" attribute="String" lineEndContext="#stay">
<DetectChar char="&quot;" attribute="String" context="#pop"/>
</context>

</contexts>

<itemDatas>
<itemData name="Normal Text" defStyleNum="dsNormal"/>
<itemData name="Keyword1" defStyleNum="dsKeyword"/>
<itemData name="Keyword2" defStyleNum="dsKeyword" color="#003300"/>
<itemData name="Operator" defStyleNum="dsOperator" color="#666666"/>
<itemData name="Identifier" defStyleNum="dsOthers" color="#663333" italic="1"/>
<itemData name="Function" defStyleNum="dsFunction" color="#006600" bold="1"/>
<itemData name="Types" defStyleNum="dsDataType" color="#3333CC"/>
<itemData name="String" defStyleNum="dsString" color="#666699"/>
<itemData name="Comment" defStyleNum="dsComment"/>
</itemDatas>
</highlighting>

<general>
<comments>
<comment name="singleLine" start="#" />
</comments>
<keywords casesensitive="1" />
</general>
</language>

Laden…
Abbrechen
Speichern