diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b225b72 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# Linux temporary files +*~ +# Text files +stdout.txt +# Python files +*.pyc diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..d57ba1c --- /dev/null +++ b/README.rst @@ -0,0 +1,40 @@ +================================== +hermite_prolate_spheroid_mechanics +================================== + +Hermite prolate spheroid + +Building the example +==================== + +Instructions on how to configure and build with CMake:: + + git clone https://github.com/OpenCMISS-Examples/hermite_prolate_spheroid_mechanics.git + mkdir build + cmake -DOpenCMISSLibs_DIR=/path/to/opencmisslib/install ../hermite_prolate_spheroid_mechanics + make # cmake --build . will also work here and is much more platform agnostic. + +Running the example +=================== + +Explain how the example is run:: + + cd build + ./src/fortran/hermite_prolate_spheroid_mechanics.F90 + +or maybe it is a Python only example:: + + source /path/to/opencmisslibs/install/virtaul_environments/oclibs_venv_pyXY_release/bin/activate + python src/python/hermite_prolate_spheroid_mechanics.py + +where the XY in the path are the Python major and minor versions respectively. + +Prerequisites +============= + +None + +License +======= + +Apache 2.0 License diff --git a/src/python/expected_results/prolate_spheroid.part0.exelem b/src/python/expected_results/prolate_spheroid.part0.exelem new file mode 100644 index 0000000..a685d34 --- /dev/null +++ b/src/python/expected_results/prolate_spheroid.part0.exelem @@ -0,0 +1,572 @@ + Group name: ProlateSpheroid + Shape. Dimension=3 + #Scale factor sets= 2 + c.Hermite*c.Hermite*c.Hermite, #Scale factors=64 + l.Lagrange*l.Lagrange*l.Lagrange, #Scale factors=8 + #Nodes= 8 + #Fields=7 + 1) Geometry, coordinate, rectangular cartesian, #Components=3 + x. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + y. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + z. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + 2) Fibre, anatomical, fibre, #Components=3 + 1. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based. + #Nodes= 8 + 1. #Values=1 + Value indices: 1 + Scale factor indices: 72 + 2. #Values=1 + Value indices: 1 + Scale factor indices: 73 + 3. #Values=1 + Value indices: 1 + Scale factor indices: 74 + 4. #Values=1 + Value indices: 1 + Scale factor indices: 75 + 5. #Values=1 + Value indices: 1 + Scale factor indices: 76 + 6. #Values=1 + Value indices: 1 + Scale factor indices: 77 + 7. #Values=1 + Value indices: 1 + Scale factor indices: 78 + 8. #Values=1 + Value indices: 1 + Scale factor indices: 79 + 2. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based. + #Nodes= 8 + 1. #Values=1 + Value indices: 1 + Scale factor indices: 72 + 2. #Values=1 + Value indices: 1 + Scale factor indices: 73 + 3. #Values=1 + Value indices: 1 + Scale factor indices: 74 + 4. #Values=1 + Value indices: 1 + Scale factor indices: 75 + 5. #Values=1 + Value indices: 1 + Scale factor indices: 76 + 6. #Values=1 + Value indices: 1 + Scale factor indices: 77 + 7. #Values=1 + Value indices: 1 + Scale factor indices: 78 + 8. #Values=1 + Value indices: 1 + Scale factor indices: 79 + 3. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based. + #Nodes= 8 + 1. #Values=1 + Value indices: 1 + Scale factor indices: 72 + 2. #Values=1 + Value indices: 1 + Scale factor indices: 73 + 3. #Values=1 + Value indices: 1 + Scale factor indices: 74 + 4. #Values=1 + Value indices: 1 + Scale factor indices: 75 + 5. #Values=1 + Value indices: 1 + Scale factor indices: 76 + 6. #Values=1 + Value indices: 1 + Scale factor indices: 77 + 7. #Values=1 + Value indices: 1 + Scale factor indices: 78 + 8. #Values=1 + Value indices: 1 + Scale factor indices: 79 + 3) Material, field, rectangular cartesian, #Components=5 + 1. constant*constant*constant, no modify, grid based. + #xi1=0, #xi2=0, #xi3=0 + 2. constant*constant*constant, no modify, grid based. + #xi1=0, #xi2=0, #xi3=0 + 3. constant*constant*constant, no modify, grid based. + #xi1=0, #xi2=0, #xi3=0 + 4. constant*constant*constant, no modify, grid based. + #xi1=0, #xi2=0, #xi3=0 + 5. constant*constant*constant, no modify, grid based. + #xi1=0, #xi2=0, #xi3=0 + 4) Density, field, real, #Components=1 + 1. constant*constant*constant, no modify, grid based. + #xi1=0, #xi2=0, #xi3=0 + 5) Dependent, field, rectangular cartesian, #Components=4 + 1. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + 2. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + 3. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + 4. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based. + #Nodes= 8 + 1. #Values=1 + Value indices: 1 + Scale factor indices: 72 + 2. #Values=1 + Value indices: 1 + Scale factor indices: 73 + 3. #Values=1 + Value indices: 1 + Scale factor indices: 74 + 4. #Values=1 + Value indices: 1 + Scale factor indices: 75 + 5. #Values=1 + Value indices: 1 + Scale factor indices: 76 + 6. #Values=1 + Value indices: 1 + Scale factor indices: 77 + 7. #Values=1 + Value indices: 1 + Scale factor indices: 78 + 8. #Values=1 + Value indices: 1 + Scale factor indices: 79 + 6) del U_del n, field, rectangular cartesian, #Components=4 + 1. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + 2. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + 3. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + 4. l.Lagrange*l.Lagrange*l.Lagrange, no modify, standard node based. + #Nodes= 8 + 1. #Values=1 + Value indices: 1 + Scale factor indices: 72 + 2. #Values=1 + Value indices: 1 + Scale factor indices: 73 + 3. #Values=1 + Value indices: 1 + Scale factor indices: 74 + 4. #Values=1 + Value indices: 1 + Scale factor indices: 75 + 5. #Values=1 + Value indices: 1 + Scale factor indices: 76 + 6. #Values=1 + Value indices: 1 + Scale factor indices: 77 + 7. #Values=1 + Value indices: 1 + Scale factor indices: 78 + 8. #Values=1 + Value indices: 1 + Scale factor indices: 79 + 7) DeformedGeometry, coordinate, rectangular cartesian, #Components=3 + x. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + y. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + z. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based. + #Nodes= 8 + 1. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 1 2 3 4 5 6 7 8 + 2. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 9 10 11 12 13 14 15 16 + 3. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 17 18 19 20 21 22 23 24 + 4. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 25 26 27 28 29 30 31 32 + 5. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 33 34 35 36 37 38 39 40 + 6. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 41 42 43 44 45 46 47 48 + 7. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 49 50 51 52 53 54 55 56 + 8. #Values=8 + Value indices: 1 2 3 4 5 6 7 8 + Scale factor indices: 57 58 59 60 61 62 63 64 + Element: 1 0 0 + Values: + 8.8000000000000000E-01 + 0.0000000000000000E+00 + 1.8500000000000000E+01 + 3.5800000000000001E+00 + 3.2599999999999998E+00 + 0.0000000000000000E+00 + Nodes: + 1 2 5 6 13 14 17 18 + Scale factors: + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + Element: 2 0 0 + Values: + 8.8000000000000000E-01 + 0.0000000000000000E+00 + 1.8500000000000000E+01 + 3.5800000000000001E+00 + 3.2599999999999998E+00 + 0.0000000000000000E+00 + Nodes: + 2 3 6 7 14 15 18 19 + Scale factors: + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + Element: 3 0 0 + Values: + 8.8000000000000000E-01 + 0.0000000000000000E+00 + 1.8500000000000000E+01 + 3.5800000000000001E+00 + 3.2599999999999998E+00 + 0.0000000000000000E+00 + Nodes: + 3 4 7 8 15 16 19 20 + Scale factors: + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + Element: 4 0 0 + Values: + 8.8000000000000000E-01 + 0.0000000000000000E+00 + 1.8500000000000000E+01 + 3.5800000000000001E+00 + 3.2599999999999998E+00 + 0.0000000000000000E+00 + Nodes: + 4 1 8 5 16 13 20 17 + Scale factors: + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + Element: 5 0 0 + Values: + 8.8000000000000000E-01 + 0.0000000000000000E+00 + 1.8500000000000000E+01 + 3.5800000000000001E+00 + 3.2599999999999998E+00 + 0.0000000000000000E+00 + Nodes: + 5 6 9 10 17 18 21 22 + Scale factors: + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + Element: 6 0 0 + Values: + 8.8000000000000000E-01 + 0.0000000000000000E+00 + 1.8500000000000000E+01 + 3.5800000000000001E+00 + 3.2599999999999998E+00 + 0.0000000000000000E+00 + Nodes: + 6 7 10 11 18 19 22 23 + Scale factors: + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + Element: 7 0 0 + Values: + 8.8000000000000000E-01 + 0.0000000000000000E+00 + 1.8500000000000000E+01 + 3.5800000000000001E+00 + 3.2599999999999998E+00 + 0.0000000000000000E+00 + Nodes: + 7 8 11 12 19 20 23 24 + Scale factors: + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + Element: 8 0 0 + Values: + 8.8000000000000000E-01 + 0.0000000000000000E+00 + 1.8500000000000000E+01 + 3.5800000000000001E+00 + 3.2599999999999998E+00 + 0.0000000000000000E+00 + Nodes: + 8 5 12 9 20 17 24 21 + Scale factors: + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 + 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 1.0000000000000000E+00 diff --git a/src/python/expected_results/prolate_spheroid.part0.exnode b/src/python/expected_results/prolate_spheroid.part0.exnode new file mode 100644 index 0000000..a08c875 --- /dev/null +++ b/src/python/expected_results/prolate_spheroid.part0.exnode @@ -0,0 +1,456 @@ + Group name: ProlateSpheroid + #Fields=5 + 1) Geometry, coordinate, rectangular cartesian, #Components=3 + x. Value index= 1, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + y. Value index= 9, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + z. Value index= 17, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + 2) Fibre, anatomical, fibre, #Components=3 + 1. Value index= 25, #Derivatives= 0 + 2. Value index= 26, #Derivatives= 0 + 3. Value index= 27, #Derivatives= 0 + 3) Dependent, field, rectangular cartesian, #Components=4 + 1. Value index= 28, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + 2. Value index= 36, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + 3. Value index= 44, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + 4. Value index= 52, #Derivatives= 0 + 4) del U_del n, field, rectangular cartesian, #Components=4 + 1. Value index= 53, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + 2. Value index= 61, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + 3. Value index= 69, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + 4. Value index= 77, #Derivatives= 0 + 5) DeformedGeometry, coordinate, rectangular cartesian, #Components=3 + x. Value index= 78, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + y. Value index= 86, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + z. Value index= 94, #Derivatives= 7(d/ds1,d/ds2,d2/ds1ds2,d/ds3,d2/ds1ds3,d2/ds2ds3,d3/ds1ds2ds3) + Node: 1 + 0.0000000000000000E+00 0.0000000000000000E+00 1.5284303402306413E+01 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.3063238224328497E+01 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 4.0240237474623378E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 4.5245847350396113E+00 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + -2.0905095310968885E-11 0.0000000000000000E+00 1.5989490422079857E+01 0.0000000000000000E+00 3.6650415188792147E-11 0.0000000000000000E+00 6.9784870030232566E+00 0.0000000000000000E+00 + -2.6465811333453984E-11 0.0000000000000000E+00 -6.2652091051070773E+00 0.0000000000000000E+00 -9.1551431976570118E-11 0.0000000000000000E+00 -2.6489328278195956E-01 0.0000000000000000E+00 + 4.7101235474281616E+01 0.0000000000000000E+00 -2.5916110171209894E+00 0.0000000000000000E+00 2.3182409573468461E+00 0.0000000000000000E+00 4.2574420438802765E+00 0.0000000000000000E+00 + -4.2891762241541696E-02 + 2.6942023034422764E+00 -5.5152701197755265E+00 2.8123394724133277E-09 -9.4028315883769475E-01 -7.2742747527727580E-02 -6.6931589600530406E-01 1.2603951216050291E-10 -1.1471715327083221E-01 + -3.9771640884884576E+00 5.6168249218511477E+00 -1.1861995830031447E-09 8.6260137703946793E-01 -4.5658339448576957E-01 8.2429682025125484E-01 7.5486061845708718E-11 1.3924220500296933E-01 + 3.7139518127560223E-09 1.2936536405969692E+00 3.5106717533039955E-10 2.3106150191445535E-01 -4.8871395819105601E-10 1.1917434192829111E-01 -9.6906260793616639E-11 2.1101429398708477E-02 + -7.1479844265809334E-10 + -2.0905095310968885E-11 0.0000000000000000E+00 1.5989490422079857E+01 0.0000000000000000E+00 3.6650415188792147E-11 0.0000000000000000E+00 6.9784870030232566E+00 0.0000000000000000E+00 + -2.6465811333453984E-11 0.0000000000000000E+00 -6.2652091051070773E+00 0.0000000000000000E+00 -9.1551431976570118E-11 0.0000000000000000E+00 -2.6489328278195956E-01 0.0000000000000000E+00 + 4.7101235474281616E+01 0.0000000000000000E+00 -2.5916110171209894E+00 0.0000000000000000E+00 2.3182409573468461E+00 0.0000000000000000E+00 4.2574420438802765E+00 0.0000000000000000E+00 + Node: 2 + 0.0000000000000000E+00 0.0000000000000000E+00 9.3589366194157743E-16 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 7.9989264389616240E-16 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 1.5284303402306413E+01 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.3063238224328497E+01 0.0000000000000000E+00 + 4.0240237474623378E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 4.5245847350396113E+00 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + -2.0905095310968885E-11 0.0000000000000000E+00 6.2652091050661181E+00 0.0000000000000000E+00 3.6650415188792147E-11 0.0000000000000000E+00 2.6489328296810161E-01 0.0000000000000000E+00 + -2.6465811333453984E-11 0.0000000000000000E+00 1.5989490422038303E+01 0.0000000000000000E+00 -9.1551431976570118E-11 0.0000000000000000E+00 6.9784870034731110E+00 0.0000000000000000E+00 + 4.7101235474281616E+01 0.0000000000000000E+00 -2.5916110171081588E+00 0.0000000000000000E+00 2.3182409573468461E+00 0.0000000000000000E+00 4.2574420438363036E+00 0.0000000000000000E+00 + -4.2891762243801264E-02 + 3.9771640884103974E+00 -5.6168249216803430E+00 1.1664731403016049E-09 -8.6260137700783923E-01 4.5658339446327290E-01 -8.2429682024425399E-01 -7.8788753299363634E-11 -1.3924220500206605E-01 + 2.6942023036272023E+00 -5.5152701197097702E+00 2.8312019395571042E-09 -9.4028315882429958E-01 -7.2742747524230156E-02 -6.6931589600290142E-01 1.2859635578621464E-10 -1.1471715327059633E-01 + 3.6899940880630311E-09 1.2936536405517298E+00 3.5325653513496036E-10 2.3106150190446945E-01 -4.8269832575442706E-10 1.1917434192959067E-01 -9.4005303541422336E-11 2.1101429399043598E-02 + -6.4631855423158413E-10 + -2.0905095310968885E-11 0.0000000000000000E+00 6.2652091050661181E+00 0.0000000000000000E+00 3.6650415188792147E-11 0.0000000000000000E+00 2.6489328296810161E-01 0.0000000000000000E+00 + -2.6465811333453984E-11 0.0000000000000000E+00 1.5989490422038303E+01 0.0000000000000000E+00 -9.1551431976570118E-11 0.0000000000000000E+00 6.9784870034731110E+00 0.0000000000000000E+00 + 4.7101235474281616E+01 0.0000000000000000E+00 -2.5916110171081588E+00 0.0000000000000000E+00 2.3182409573468461E+00 0.0000000000000000E+00 4.2574420438363036E+00 0.0000000000000000E+00 + Node: 3 + -0.0000000000000000E+00 0.0000000000000000E+00 -1.5284303402306413E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 -1.3063238224328497E+01 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 1.8717873238831549E-15 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5997852877923248E-15 0.0000000000000000E+00 + 4.0240237474623378E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 4.5245847350396113E+00 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + -2.0905095310968885E-11 0.0000000000000000E+00 -1.5989490422045117E+01 0.0000000000000000E+00 3.6650415188792147E-11 0.0000000000000000E+00 -6.9784870033082633E+00 0.0000000000000000E+00 + -2.6465811333453984E-11 0.0000000000000000E+00 6.2652091049475702E+00 0.0000000000000000E+00 -9.1551431976570118E-11 0.0000000000000000E+00 2.6489328392757977E-01 0.0000000000000000E+00 + 4.7101235474281616E+01 0.0000000000000000E+00 -2.5916110171485474E+00 0.0000000000000000E+00 2.3182409573468461E+00 0.0000000000000000E+00 4.2574420438884824E+00 0.0000000000000000E+00 + -4.2891762241947948E-02 + -2.6942023034362368E+00 5.5152701197396592E+00 -2.8235234150741917E-09 9.4028315883208435E-01 7.2742747529627616E-02 6.6931589600942742E-01 -1.2839879159898260E-10 1.1471715327218984E-01 + 3.9771640883779469E+00 -5.6168249218048096E+00 1.1610765682235069E-09 -8.6260137703082895E-01 4.5658339448826890E-01 -8.2429682025025119E-01 -7.2634342984656541E-11 -1.3924220500269044E-01 + 3.5968774625416700E-09 1.2936536405696450E+00 3.3484104378089796E-10 2.3106150190772287E-01 -4.9551873715358852E-10 1.1917434192826938E-01 -9.7758856565377528E-11 2.1101429398608582E-02 + -6.8774674844007677E-10 + -2.0905095310968885E-11 0.0000000000000000E+00 -1.5989490422045117E+01 0.0000000000000000E+00 3.6650415188792147E-11 0.0000000000000000E+00 -6.9784870033082633E+00 0.0000000000000000E+00 + -2.6465811333453984E-11 0.0000000000000000E+00 6.2652091049475702E+00 0.0000000000000000E+00 -9.1551431976570118E-11 0.0000000000000000E+00 2.6489328392757977E-01 0.0000000000000000E+00 + 4.7101235474281616E+01 0.0000000000000000E+00 -2.5916110171485474E+00 0.0000000000000000E+00 2.3182409573468461E+00 0.0000000000000000E+00 4.2574420438884824E+00 0.0000000000000000E+00 + Node: 4 + -0.0000000000000000E+00 0.0000000000000000E+00 -2.8076809858247325E-15 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 -2.3996779316884869E-15 0.0000000000000000E+00 + -0.0000000000000000E+00 0.0000000000000000E+00 -1.5284303402306413E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 -1.3063238224328497E+01 0.0000000000000000E+00 + 4.0240237474623378E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 4.5245847350396113E+00 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + -2.0905095310968885E-11 0.0000000000000000E+00 -6.2652091050035041E+00 0.0000000000000000E+00 3.6650415188792147E-11 0.0000000000000000E+00 -2.6489328367047588E-01 0.0000000000000000E+00 + -2.6465811333453984E-11 0.0000000000000000E+00 -1.5989490422164366E+01 0.0000000000000000E+00 -9.1551431976570118E-11 0.0000000000000000E+00 -6.9784870025182215E+00 0.0000000000000000E+00 + 4.7101235474281616E+01 0.0000000000000000E+00 -2.5916110171511901E+00 0.0000000000000000E+00 2.3182409573468461E+00 0.0000000000000000E+00 4.2574420438992826E+00 0.0000000000000000E+00 + -4.2891762244322493E-02 + -3.9771640884224695E+00 5.6168249217395854E+00 -1.1558718426840642E-09 8.6260137701892592E-01 -4.5658339448028595E-01 8.2429682024260553E-01 7.8103079559355137E-11 1.3924220500126505E-01 + -2.6942023035731584E+00 5.5152701197762051E+00 -2.8422195708088793E-09 9.4028315883797242E-01 7.2742747523110385E-02 6.6931589600718477E-01 -1.2744677535536653E-10 1.1471715327138628E-01 + 3.6273029024869174E-09 1.2936536405451007E+00 3.4259750592013916E-10 2.3106150190100005E-01 -4.8161163945792396E-10 1.1917434192863155E-01 -9.3836050041318231E-11 2.1101429398612717E-02 + -6.3363092550616784E-10 + -2.0905095310968885E-11 0.0000000000000000E+00 -6.2652091050035041E+00 0.0000000000000000E+00 3.6650415188792147E-11 0.0000000000000000E+00 -2.6489328367047588E-01 0.0000000000000000E+00 + -2.6465811333453984E-11 0.0000000000000000E+00 -1.5989490422164366E+01 0.0000000000000000E+00 -9.1551431976570118E-11 0.0000000000000000E+00 -6.9784870025182215E+00 0.0000000000000000E+00 + 4.7101235474281616E+01 0.0000000000000000E+00 -2.5916110171511901E+00 0.0000000000000000E+00 2.3182409573468461E+00 0.0000000000000000E+00 4.2574420438992826E+00 0.0000000000000000E+00 + Node: 5 + 1.2640017168127700E+01 -0.0000000000000000E+00 7.6421517011532085E+00 -0.0000000000000000E+00 1.0803211051276145E+01 -0.0000000000000000E+00 6.5316191121642495E+00 -0.0000000000000000E+00 + 0.0000000000000000E+00 1.9854892538319422E+01 0.0000000000000000E+00 1.2004263820980830E+01 0.0000000000000000E+00 1.6969644236934602E+01 0.0000000000000000E+00 1.0259843309410947E+01 + 2.0120118737311692E+01 0.0000000000000000E+00 -3.6493858574052908E+01 0.0000000000000000E+00 2.2622923675198061E+00 0.0000000000000000E+00 -4.1033444579193468E+00 0.0000000000000000E+00 + -1.5707963267948966E+00 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + 1.5729825517803246E+01 9.0314173999129799E-01 9.6471215121208580E+00 -5.7793254900746165E+00 7.8366209242868150E+00 8.8483766164984268E-01 5.9303702962451545E+00 -4.0881932479891192E-01 + -3.7434759125815992E-01 2.4950913788571842E+01 7.8115494624908377E-01 1.5544998748433935E+01 -7.1379365701932374E-01 1.0870256412367585E+01 2.7970554976470625E+00 1.5310468180984989E+01 + 2.4833053614538642E+01 -6.6035154292887643E-02 -3.8842280507540202E+01 2.6216743979760582E-01 1.6284047684535483E+00 -2.7427231576197919E-02 -5.6475720317370213E+00 -7.8225289437303243E+00 + -2.8409659790294900E-01 + 1.0126587568493051E-08 -1.5412643383783120E-11 -1.4153900274038733E-09 5.1660970640243775E-11 4.2527670274239426E-10 -1.4848400287093000E-11 -4.6561754452056903E-11 1.4593000419171887E-11 + -4.2664964894356672E-09 2.1016877127522093E-09 5.9327476265025325E-10 -4.2029425599554582E-10 9.1660012913052924E-12 1.5854428880857085E-10 -5.3785420561780484E-11 -3.5741217277451831E-11 + -2.2608048766414868E-09 2.0356338836791110E-10 6.1293192743505642E-11 -6.4723421067114373E-11 -5.3403681476993370E-10 -2.2890578321721478E-12 5.8515858825103351E-11 -1.8588134503838560E-12 + -1.0294254337850361E-09 + 1.5729825517803246E+01 9.0314173999129799E-01 9.6471215121208580E+00 -5.7793254900746165E+00 7.8366209242868150E+00 8.8483766164984268E-01 5.9303702962451545E+00 -4.0881932479891192E-01 + -3.7434759125815992E-01 2.4950913788571842E+01 7.8115494624908377E-01 1.5544998748433935E+01 -7.1379365701932374E-01 1.0870256412367585E+01 2.7970554976470625E+00 1.5310468180984989E+01 + 2.4833053614538642E+01 -6.6035154292887643E-02 -3.8842280507540202E+01 2.6216743979760582E-01 1.6284047684535483E+00 -2.7427231576197919E-02 -5.6475720317370213E+00 -7.8225289437303243E+00 + Node: 6 + 7.7397782830575900E-16 -1.9854892538319422E+01 4.6794683097078882E-16 -1.2004263820980830E+01 6.6150589172293220E-16 -1.6969644236934602E+01 3.9994632194808125E-16 -1.0259843309410947E+01 + 1.2640017168127700E+01 1.2157615297233774E-15 7.6421517011532085E+00 7.3504916322422750E-16 1.0803211051276145E+01 1.0390910248715645E-15 6.5316191121642495E+00 6.2823421343117515E-16 + 2.0120118737311692E+01 0.0000000000000000E+00 -3.6493858574052908E+01 0.0000000000000000E+00 2.2622923675198061E+00 0.0000000000000000E+00 -4.1033444579193468E+00 0.0000000000000000E+00 + -1.5707963267948966E+00 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + 3.7434759121460642E-01 -2.4950913788576816E+01 -7.8115494622473447E-01 -1.5544998748578569E+01 7.1379365703149311E-01 -1.0870256412349731E+01 -2.7970554976341453E+00 -1.5310468180170387E+01 + 1.5729825517789259E+01 9.0314173994982294E-01 9.6471215121781686E+00 -5.7793254904182199E+00 7.8366209242731673E+00 8.8483766187151858E-01 5.9303702960702083E+00 -4.0881932307535890E-01 + 2.4833053614541083E+01 -6.6035154298189888E-02 -3.8842280507528827E+01 2.6216743984076263E-01 1.6284047684663761E+00 -2.7427231578207707E-02 -5.6475720317575311E+00 -7.8225289440793055E+00 + -2.8409659790212188E-01 + 3.2768809887784300E-09 -2.0874186823505170E-09 -6.9228889287842321E-10 3.9141059837710657E-10 -1.4473755527433241E-10 -1.8103857302165238E-10 2.8629543180613837E-11 3.1918120924068205E-11 + 1.0136332662114000E-08 -1.3365131223963544E-10 -1.3921299668595566E-09 2.9343222296418503E-11 4.0243408605533659E-10 -4.5200287956959073E-11 -5.0141224505750870E-11 1.0912604153645589E-11 + -1.8487433806058107E-09 2.0519586030331993E-10 9.3319130201052758E-11 -5.4267382254558072E-11 -3.7654057649660899E-10 6.6773253593055415E-12 6.5718541719661516E-11 -2.1706126479559273E-12 + -5.7161386735060660E-10 + 3.7434759121460642E-01 -2.4950913788576816E+01 -7.8115494622473447E-01 -1.5544998748578569E+01 7.1379365703149311E-01 -1.0870256412349731E+01 -2.7970554976341453E+00 -1.5310468180170387E+01 + 1.5729825517789259E+01 9.0314173994982294E-01 9.6471215121781686E+00 -5.7793254904182199E+00 7.8366209242731673E+00 8.8483766187151858E-01 5.9303702960702083E+00 -4.0881932307535890E-01 + 2.4833053614541083E+01 -6.6035154298189888E-02 -3.8842280507528827E+01 2.6216743984076263E-01 1.6284047684663761E+00 -2.7427231578207707E-02 -5.6475720317575311E+00 -7.8225289440793055E+00 + Node: 7 + -1.2640017168127700E+01 -2.4315230594467548E-15 -7.6421517011532085E+00 -1.4700983264484550E-15 -1.0803211051276145E+01 -2.0781820497431289E-15 -6.5316191121642495E+00 -1.2564684268623503E-15 + 1.5479556566115180E-15 -1.9854892538319422E+01 9.3589366194157763E-16 -1.2004263820980830E+01 1.3230117834458644E-15 -1.6969644236934602E+01 7.9989264389616250E-16 -1.0259843309410947E+01 + 2.0120118737311692E+01 0.0000000000000000E+00 -3.6493858574052908E+01 0.0000000000000000E+00 2.2622923675198061E+00 0.0000000000000000E+00 -4.1033444579193468E+00 0.0000000000000000E+00 + -1.5707963267948966E+00 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + -1.5729825517834117E+01 -9.0314173995335822E-01 -9.6471215121094396E+00 5.7793254903260900E+00 -7.8366209242722507E+00 -8.8483766185229551E-01 -5.9303702961678804E+00 4.0881932325686504E-01 + 3.7434759120102323E-01 -2.4950913788603430E+01 -7.8115494624811166E-01 -1.5544998748640182E+01 7.1379365701162745E-01 -1.0870256412184904E+01 -2.7970554974510864E+00 -1.5310468179680678E+01 + 2.4833053614533448E+01 -6.6035154307360719E-02 -3.8842280507552886E+01 2.6216743984434820E-01 1.6284047684534202E+00 -2.7427231570976207E-02 -5.6475720317503741E+00 -7.8225289438945715E+00 + -2.8409659790304209E-01 + -1.0501153724362666E-08 4.2906123098873650E-11 1.5500263295109562E-09 -4.9749815378419271E-11 -4.1068304312830151E-10 4.4062975490533063E-11 5.8660326596182699E-11 -1.1126391474824970E-11 + 3.5875302728527458E-09 -2.0967023672824325E-09 -7.3347194984307862E-10 4.1394815353257286E-10 -1.1720402426362853E-10 -1.4934814496214699E-10 3.7665870422642911E-11 3.4877288557222386E-11 + -2.3545680960523896E-09 1.8347812158481247E-10 7.1942451995710144E-11 -5.4747165134649833E-11 -4.6748124815643166E-10 -3.0320190802513025E-12 7.6612716171098327E-11 -3.2834845953289005E-13 + -6.1412297469587429E-10 + -1.5729825517834117E+01 -9.0314173995335822E-01 -9.6471215121094396E+00 5.7793254903260900E+00 -7.8366209242722507E+00 -8.8483766185229551E-01 -5.9303702961678804E+00 4.0881932325686504E-01 + 3.7434759120102323E-01 -2.4950913788603430E+01 -7.8115494624811166E-01 -1.5544998748640182E+01 7.1379365701162745E-01 -1.0870256412184904E+01 -2.7970554974510864E+00 -1.5310468179680678E+01 + 2.4833053614533448E+01 -6.6035154307360719E-02 -3.8842280507552886E+01 2.6216743984434820E-01 1.6284047684534202E+00 -2.7427231570976207E-02 -5.6475720317503741E+00 -7.8225289438945715E+00 + Node: 8 + -2.3219334849172769E-15 1.9854892538319422E+01 -1.4038404929123666E-15 1.2004263820980830E+01 -1.9845176751687963E-15 1.6969644236934602E+01 -1.1998389658442438E-15 1.0259843309410947E+01 + -1.2640017168127700E+01 -3.6472845891701321E-15 -7.6421517011532085E+00 -2.2051474896726823E-15 -1.0803211051276145E+01 -3.1172730746146928E-15 -6.5316191121642495E+00 -1.8847026402935256E-15 + 2.0120118737311692E+01 0.0000000000000000E+00 -3.6493858574052908E+01 0.0000000000000000E+00 2.2622923675198061E+00 0.0000000000000000E+00 -4.1033444579193468E+00 0.0000000000000000E+00 + -1.5707963267948966E+00 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + -3.7434759123779499E-01 2.4950913788609913E+01 7.8115494627752613E-01 1.5544998748668315E+01 -7.1379365702401187E-01 1.0870256412180270E+01 2.7970554974182038E+00 1.5310468179417688E+01 + -1.5729825517847752E+01 -9.0314174000728775E-01 -9.6471215121594298E+00 5.7793254899849567E+00 -7.8366209242824532E+00 -8.8483766164040378E-01 -5.9303702959492428E+00 4.0881932490528533E-01 + 2.4833053614530098E+01 -6.6035154297131332E-02 -3.8842280507547009E+01 2.6216743988092350E-01 1.6284047684488063E+00 -2.7427231565419770E-02 -5.6475720317562539E+00 -7.8225289440585666E+00 + -2.8409659790222319E-01 + -3.4080471777997445E-09 2.2268551447268692E-09 6.1477578583435388E-10 -3.9179245958642639E-10 6.6592065195436589E-11 1.8340623464396799E-10 -7.3097083941320307E-11 -2.8718846745157123E-11 + -1.0143981654664458E-08 -2.2615687100824289E-11 1.4361334343959697E-09 -6.6161603973213801E-11 -3.7239233918739956E-10 4.2294834301515039E-11 6.7405414583276979E-11 -1.2206083366272935E-11 + -2.0988260018839355E-09 2.4830093536820641E-10 2.6860291768571187E-11 -2.3782378844039442E-11 -4.5634154788309900E-10 1.2633893931024431E-11 5.8949511938521937E-11 2.5255769697807295E-12 + -5.5473581284104512E-10 + -3.7434759123779499E-01 2.4950913788609913E+01 7.8115494627752613E-01 1.5544998748668315E+01 -7.1379365702401187E-01 1.0870256412180270E+01 2.7970554974182038E+00 1.5310468179417688E+01 + -1.5729825517847752E+01 -9.0314174000728775E-01 -9.6471215121594298E+00 5.7793254899849567E+00 -7.8366209242824532E+00 -8.8483766164040378E-01 -5.9303702959492428E+00 4.0881932490528533E-01 + 2.4833053614530098E+01 -6.6035154297131332E-02 -3.8842280507547009E+01 2.6216743988092350E-01 1.6284047684488063E+00 -2.7427231565419770E-02 -5.6475720317562539E+00 -7.8225289440585666E+00 + Node: 9 + 1.2640017168127702E+01 -0.0000000000000000E+00 -7.6421517011532032E+00 0.0000000000000000E+00 1.0803211051276147E+01 -0.0000000000000000E+00 -6.5316191121642451E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 1.9854892538319426E+01 -0.0000000000000000E+00 -1.2004263820980821E+01 0.0000000000000000E+00 1.6969644236934606E+01 -0.0000000000000000E+00 -1.0259843309410938E+01 + -2.0120118737311678E+01 0.0000000000000000E+00 -3.6493858574052915E+01 0.0000000000000000E+00 -2.2622923675198043E+00 0.0000000000000000E+00 -4.1033444579193468E+00 0.0000000000000000E+00 + -1.5707963267948966E+00 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + 1.5464767433068623E+01 -1.9108670634635609E+00 -1.2255117616600714E+01 -4.9446758374676483E+00 8.7232492399943027E+00 -4.3308580783402624E+00 -4.2917382174669862E+00 -1.4883233061755947E+01 + 1.0047558107736219E+00 2.4488237329154629E+01 7.9063788544756985E-01 -1.9645787561380189E+01 2.5993234603183510E+00 1.3248489797910251E+01 9.9024195103196373E+00 -1.7509341014190702E+00 + -1.7302063247843421E+01 1.4693881457553040E-02 -3.6319755464529543E+01 7.2855497778615075E-01 -2.7769129376112649E+00 -1.2920311433218397E+00 -1.0057795940438160E+01 -1.2270802897361522E+01 + -4.2347418081894705E-01 + 1.5205579018129356E-09 1.6831447346987716E-10 -3.3036795521468321E-10 -1.5594470159641105E-12 2.4995916447778654E-10 1.4771517342637708E-11 -3.0307312215427373E-11 -3.4964392492398133E-12 + -2.2052404347050469E-10 6.9475258879236890E-12 5.3866244797973195E-11 -1.7652400374768007E-11 -1.8630430531629827E-11 -1.1519571754825542E-11 8.5904616753396112E-12 2.8712191044860669E-12 + -2.9539393153754645E-10 -1.0365901886855156E-10 1.4363088496338605E-10 1.9255857758998518E-11 9.0963681032008026E-11 -2.4190824690628610E-11 1.0772716052542819E-11 4.3049888198525010E-12 + -4.8494641635699054E-10 + 1.5464767433068623E+01 -1.9108670634635609E+00 -1.2255117616600714E+01 -4.9446758374676483E+00 8.7232492399943027E+00 -4.3308580783402624E+00 -4.2917382174669862E+00 -1.4883233061755947E+01 + 1.0047558107736219E+00 2.4488237329154629E+01 7.9063788544756985E-01 -1.9645787561380189E+01 2.5993234603183510E+00 1.3248489797910251E+01 9.9024195103196373E+00 -1.7509341014190702E+00 + -1.7302063247843421E+01 1.4693881457553040E-02 -3.6319755464529543E+01 7.2855497778615075E-01 -2.7769129376112649E+00 -1.2920311433218397E+00 -1.0057795940438160E+01 -1.2270802897361522E+01 + Node: 10 + 7.7397782830575910E-16 -1.9854892538319426E+01 -4.6794683097078852E-16 1.2004263820980821E+01 6.6150589172293229E-16 -1.6969644236934606E+01 -3.9994632194808100E-16 1.0259843309410938E+01 + 1.2640017168127702E+01 1.2157615297233774E-15 -7.6421517011532032E+00 -7.3504916322422690E-16 1.0803211051276147E+01 1.0390910248715647E-15 -6.5316191121642451E+00 -6.2823421343117475E-16 + -2.0120118737311678E+01 0.0000000000000000E+00 -3.6493858574052915E+01 0.0000000000000000E+00 -2.2622923675198043E+00 0.0000000000000000E+00 -4.1033444579193468E+00 0.0000000000000000E+00 + -1.5707963267948966E+00 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + -1.0047558107846377E+00 -2.4488237329075943E+01 -7.9063788542976343E-01 1.9645787561666094E+01 -2.5993234602659783E+00 -1.3248489798627226E+01 -9.9024195100079861E+00 1.7509340985507564E+00 + 1.5464767433084900E+01 -1.9108670637297489E+00 -1.2255117616438206E+01 -4.9446758394424499E+00 8.7232492399306487E+00 -4.3308580775198422E+00 -4.2917382180327266E+00 -1.4883233054022995E+01 + -1.7302063247838817E+01 1.4693881469020790E-02 -3.6319755464530182E+01 7.2855497802136837E-01 -2.7769129376087687E+00 -1.2920311435165259E+00 -1.0057795940487377E+01 -1.2270802898575662E+01 + -4.2347418082053445E-01 + 4.5673687054659240E-11 -2.2372789731939235E-10 -9.6633812063373625E-12 4.5606548051968510E-11 9.2477137059177039E-11 -4.7950084874903709E-11 -2.7622348852673895E-12 6.3463912944317080E-12 + 1.6150156767480439E-09 1.2071676991354252E-11 -2.5711899276359418E-10 -5.1868787043218845E-12 1.5439072242884322E-10 -9.7211128036178707E-12 -2.3855806219330589E-11 4.9742848728939748E-13 + -1.4598100506191258E-10 4.0774814080712929E-11 1.1354739370972311E-10 2.5491947962252848E-12 1.1286971357549191E-10 4.8441615302374785E-12 -2.2648549702353193E-13 1.9005418983378264E-13 + -3.7964220656050429E-10 + -1.0047558107846377E+00 -2.4488237329075943E+01 -7.9063788542976343E-01 1.9645787561666094E+01 -2.5993234602659783E+00 -1.3248489798627226E+01 -9.9024195100079861E+00 1.7509340985507564E+00 + 1.5464767433084900E+01 -1.9108670637297489E+00 -1.2255117616438206E+01 -4.9446758394424499E+00 8.7232492399306487E+00 -4.3308580775198422E+00 -4.2917382180327266E+00 -1.4883233054022995E+01 + -1.7302063247838817E+01 1.4693881469020790E-02 -3.6319755464530182E+01 7.2855497802136837E-01 -2.7769129376087687E+00 -1.2920311435165259E+00 -1.0057795940487377E+01 -1.2270802898575662E+01 + Node: 11 + -1.2640017168127702E+01 -2.4315230594467548E-15 7.6421517011532032E+00 1.4700983264484538E-15 -1.0803211051276147E+01 -2.0781820497431293E-15 6.5316191121642451E+00 1.2564684268623495E-15 + 1.5479556566115182E-15 -1.9854892538319426E+01 -9.3589366194157704E-16 1.2004263820980821E+01 1.3230117834458646E-15 -1.6969644236934606E+01 -7.9989264389616201E-16 1.0259843309410938E+01 + -2.0120118737311678E+01 0.0000000000000000E+00 -3.6493858574052915E+01 0.0000000000000000E+00 -2.2622923675198043E+00 0.0000000000000000E+00 -4.1033444579193468E+00 0.0000000000000000E+00 + -1.5707963267948966E+00 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + -1.5464767433099610E+01 1.9108670638941407E+00 1.2255117616432942E+01 4.9446758402239830E+00 -8.7232492399335886E+00 4.3308580763405313E+00 4.2917382179580690E+00 1.4883233047450318E+01 + -1.0047558107877741E+00 -2.4488237329138016E+01 -7.9063788546148461E-01 1.9645787561132369E+01 -2.5993234602641442E+00 -1.3248489798287446E+01 -9.9024195098921250E+00 1.7509341018427038E+00 + -1.7302063247842764E+01 1.4693881438474346E-02 -3.6319755464529628E+01 7.2855497795211732E-01 -2.7769129376425288E+00 -1.2920311434508791E+00 -1.0057795940653874E+01 -1.2270802898478156E+01 + -4.2347418082074789E-01 + -1.6529320134850423E-09 9.6527674742219460E-11 1.6431389582294287E-10 1.6080192732914611E-12 -1.2549605798994889E-10 3.9747372060361386E-12 9.5424224078044517E-12 -2.9166877246744605E-12 + -1.0231815394945443E-12 -1.8289544878591357E-10 -4.1566750041965861E-12 4.6921399057819890E-11 6.4432015278725885E-11 -2.0197541555910803E-11 -9.0061291757592699E-13 2.6024950423864102E-12 + 3.4248159863636829E-12 1.2028079920956003E-11 8.1866957657439343E-11 -3.5306280468661022E-12 1.4818546389960829E-10 5.6289591043867659E-12 -1.1443734848626264E-11 -1.1077299559396347E-12 + -8.8658830277310585E-11 + -1.5464767433099610E+01 1.9108670638941407E+00 1.2255117616432942E+01 4.9446758402239830E+00 -8.7232492399335886E+00 4.3308580763405313E+00 4.2917382179580690E+00 1.4883233047450318E+01 + -1.0047558107877741E+00 -2.4488237329138016E+01 -7.9063788546148461E-01 1.9645787561132369E+01 -2.5993234602641442E+00 -1.3248489798287446E+01 -9.9024195098921250E+00 1.7509341018427038E+00 + -1.7302063247842764E+01 1.4693881438474346E-02 -3.6319755464529628E+01 7.2855497795211732E-01 -2.7769129376425288E+00 -1.2920311434508791E+00 -1.0057795940653874E+01 -1.2270802898478156E+01 + Node: 12 + -2.3219334849172773E-15 1.9854892538319426E+01 1.4038404929123655E-15 -1.2004263820980821E+01 -1.9845176751687967E-15 1.6969644236934606E+01 1.1998389658442431E-15 -1.0259843309410938E+01 + -1.2640017168127702E+01 -3.6472845891701329E-15 7.6421517011532032E+00 2.2051474896726807E-15 -1.0803211051276147E+01 -3.1172730746146940E-15 6.5316191121642451E+00 1.8847026402935244E-15 + -2.0120118737311678E+01 0.0000000000000000E+00 -3.6493858574052915E+01 0.0000000000000000E+00 -2.2622923675198043E+00 0.0000000000000000E+00 -4.1033444579193468E+00 0.0000000000000000E+00 + -1.5707963267948966E+00 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + 1.0047558107806660E+00 2.4488237329272074E+01 7.9063788550176439E-01 -1.9645787560291360E+01 2.5993234603066058E+00 1.3248489797303113E+01 9.9024195101223178E+00 -1.7509341081929009E+00 + -1.5464767433119730E+01 1.9108670637061065E+00 1.2255117616328649E+01 4.9446758386450904E+00 -8.7232492398825485E+00 4.3308580771223246E+00 4.2917382184047908E+00 1.4883233055144331E+01 + -1.7302063247847645E+01 1.4693881455612408E-02 -3.6319755464555257E+01 7.2855497792084289E-01 -2.7769129376036830E+00 -1.2920311434364944E+00 -1.0057795940391790E+01 -1.2270802898665639E+01 + -4.2347418082296728E-01 + -9.3166363512864336E-11 8.1101181326204141E-11 4.3847592223755782E-11 -4.3253282899780032E-11 -3.4184211017418420E-11 2.2738992980220196E-11 1.0373923942097463E-11 -4.7937647774942693E-12 + -2.3543673677295374E-09 7.1499250964279781E-11 2.3635182699877078E-10 -1.2207956867626990E-11 -8.4970697145081431E-11 -1.0235229330746165E-11 1.0573542041925066E-11 -2.7943619640424799E-13 + -1.6289192217300297E-10 -1.4786824542589727E-11 1.0861356258828891E-10 -1.2291764828198382E-12 1.5980816669980413E-10 -3.9610337579376598E-12 -3.3533176235778228E-12 -3.8517154960296396E-13 + -1.3370621276820316E-10 + 1.0047558107806660E+00 2.4488237329272074E+01 7.9063788550176439E-01 -1.9645787560291360E+01 2.5993234603066058E+00 1.3248489797303113E+01 9.9024195101223178E+00 -1.7509341081929009E+00 + -1.5464767433119730E+01 1.9108670637061065E+00 1.2255117616328649E+01 4.9446758386450904E+00 -8.7232492398825485E+00 4.3308580771223246E+00 4.2917382184047908E+00 1.4883233055144331E+01 + -1.7302063247847645E+01 1.4693881455612408E-02 -3.6319755464555257E+01 7.2855497792084289E-01 -2.7769129376036830E+00 -1.2920311434364944E+00 -1.0057795940391790E+01 -1.2270802898665639E+01 + Node: 13 + 0.0000000000000000E+00 0.0000000000000000E+00 2.9298089867437231E+01 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5188430172358709E+01 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 4.6786717543296334E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 8.6730606355289659E+00 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + -4.2471567661527242E-12 0.0000000000000000E+00 2.7759046525763285E+01 0.0000000000000000E+00 7.3442742637753978E-11 0.0000000000000000E+00 1.2564145696131856E+01 0.0000000000000000E+00 + -4.9985405625139942E-11 0.0000000000000000E+00 -3.8150577912049517E+00 0.0000000000000000E+00 -6.7545841476504486E-11 0.0000000000000000E+00 -4.2555315805923080E+00 0.0000000000000000E+00 + 5.2638237039835694E+01 0.0000000000000000E+00 -1.7912697398784381E+00 0.0000000000000000E+00 1.0022452642362319E+01 0.0000000000000000E+00 -1.6763864212486098E+01 0.0000000000000000E+00 + 9.6775881315892501E-02 + -6.0707336534178147E+00 -2.3331210508444133E+00 1.4756729171949701E-10 -3.7507860258460501E-01 6.4656914247177077E-01 4.2774517105108695E-01 -2.8890612124854442E-11 7.1163038970513209E-02 + -8.9941924624661596E-01 3.1162129636187834E+00 6.9537264835162205E-11 6.0864195516808273E-01 2.3742771102262150E-01 -5.7584548102919852E-01 -2.6826763033227508E-11 -1.0543495287713354E-01 + -4.5618397948032907E-11 1.7727573609805625E-01 -3.8360981058360721E-12 2.5004248041401167E-02 7.9131701191670345E-11 -5.8028067729122168E-02 1.3368500750843282E-11 -9.8730916193530277E-03 + -1.7948575958826041E-10 + -4.2471567661527242E-12 0.0000000000000000E+00 2.7759046525763285E+01 0.0000000000000000E+00 7.3442742637753978E-11 0.0000000000000000E+00 1.2564145696131856E+01 0.0000000000000000E+00 + -4.9985405625139942E-11 0.0000000000000000E+00 -3.8150577912049517E+00 0.0000000000000000E+00 -6.7545841476504486E-11 0.0000000000000000E+00 -4.2555315805923080E+00 0.0000000000000000E+00 + 5.2638237039835694E+01 0.0000000000000000E+00 -1.7912697398784381E+00 0.0000000000000000E+00 1.0022452642362319E+01 0.0000000000000000E+00 -1.6763864212486098E+01 0.0000000000000000E+00 + Node: 14 + 0.0000000000000000E+00 0.0000000000000000E+00 1.7939905988644253E-15 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 9.3002311973260880E-16 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 2.9298089867437231E+01 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.5188430172358709E+01 0.0000000000000000E+00 + 4.6786717543296334E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 8.6730606355289659E+00 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + -4.2471567661527242E-12 0.0000000000000000E+00 3.8150577912002785E+00 0.0000000000000000E+00 7.3442742637753978E-11 0.0000000000000000E+00 4.2555315805631926E+00 0.0000000000000000E+00 + -4.9985405625139942E-11 0.0000000000000000E+00 2.7759046525866186E+01 0.0000000000000000E+00 -6.7545841476504486E-11 0.0000000000000000E+00 1.2564145696666264E+01 0.0000000000000000E+00 + 5.2638237039835694E+01 0.0000000000000000E+00 -1.7912697398721520E+00 0.0000000000000000E+00 1.0022452642362319E+01 0.0000000000000000E+00 -1.6763864212440069E+01 0.0000000000000000E+00 + 9.6775881315672552E-02 + 8.9941924637206938E-01 -3.1162129636090787E+00 -5.7704951927917136E-11 -6.0864195516671316E-01 -2.3742771102673821E-01 5.7584548102680033E-01 2.6413982112671874E-11 1.0543495287681674E-01 + -6.0707336535101355E+00 -2.3331210508601670E+00 1.6069989783318306E-10 -3.7507860258858650E-01 6.4656914245559438E-01 4.2774517105034326E-01 -3.2171376673773011E-11 7.1163038970482859E-02 + -9.6094909807220574E-11 1.7727573609235062E-01 -5.1695314695621164E-12 2.5004248040500707E-02 7.8634543321243200E-11 -5.8028067728319865E-02 1.1936174271198752E-11 -9.8730916191717769E-03 + -1.3780088181647443E-10 + -4.2471567661527242E-12 0.0000000000000000E+00 3.8150577912002785E+00 0.0000000000000000E+00 7.3442742637753978E-11 0.0000000000000000E+00 4.2555315805631926E+00 0.0000000000000000E+00 + -4.9985405625139942E-11 0.0000000000000000E+00 2.7759046525866186E+01 0.0000000000000000E+00 -6.7545841476504486E-11 0.0000000000000000E+00 1.2564145696666264E+01 0.0000000000000000E+00 + 5.2638237039835694E+01 0.0000000000000000E+00 -1.7912697398721520E+00 0.0000000000000000E+00 1.0022452642362319E+01 0.0000000000000000E+00 -1.6763864212440069E+01 0.0000000000000000E+00 + Node: 15 + -0.0000000000000000E+00 0.0000000000000000E+00 -2.9298089867437231E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 -1.5188430172358709E+01 0.0000000000000000E+00 + 0.0000000000000000E+00 0.0000000000000000E+00 3.5879811977288507E-15 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 1.8600462394652176E-15 0.0000000000000000E+00 + 4.6786717543296334E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 8.6730606355289659E+00 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + -4.2471567661527242E-12 0.0000000000000000E+00 -2.7759046525869614E+01 0.0000000000000000E+00 7.3442742637753978E-11 0.0000000000000000E+00 -1.2564145696642033E+01 0.0000000000000000E+00 + -4.9985405625139942E-11 0.0000000000000000E+00 3.8150577913644814E+00 0.0000000000000000E+00 -6.7545841476504486E-11 0.0000000000000000E+00 4.2555315815547630E+00 0.0000000000000000E+00 + 5.2638237039835694E+01 0.0000000000000000E+00 -1.7912697398854633E+00 0.0000000000000000E+00 1.0022452642362319E+01 0.0000000000000000E+00 -1.6763864212473667E+01 0.0000000000000000E+00 + 9.6775881316206042E-02 + 6.0707336534898593E+00 2.3331210508664260E+00 -1.7702816990095016E-10 3.7507860258915099E-01 -6.4656914244366748E-01 -4.2774517105469700E-01 3.5402181186583448E-11 -7.1163038971395809E-02 + 8.9941924641618698E-01 -3.1162129636456051E+00 -4.8490989001948037E-11 -6.0864195517254494E-01 -2.3742771102604632E-01 5.7584548103221700E-01 2.8627100689959661E-11 1.0543495287763813E-01 + -7.4767525504171317E-11 1.7727573609544825E-01 -5.2926552029930463E-12 2.5004248039879919E-02 8.0955464554222090E-11 -5.8028067729661931E-02 1.3487239103326942E-11 -9.8730916194081746E-03 + -1.7824053344384083E-10 + -4.2471567661527242E-12 0.0000000000000000E+00 -2.7759046525869614E+01 0.0000000000000000E+00 7.3442742637753978E-11 0.0000000000000000E+00 -1.2564145696642033E+01 0.0000000000000000E+00 + -4.9985405625139942E-11 0.0000000000000000E+00 3.8150577913644814E+00 0.0000000000000000E+00 -6.7545841476504486E-11 0.0000000000000000E+00 4.2555315815547630E+00 0.0000000000000000E+00 + 5.2638237039835694E+01 0.0000000000000000E+00 -1.7912697398854633E+00 0.0000000000000000E+00 1.0022452642362319E+01 0.0000000000000000E+00 -1.6763864212473667E+01 0.0000000000000000E+00 + Node: 16 + -0.0000000000000000E+00 0.0000000000000000E+00 -5.3819717965932756E-15 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 -2.7900693591978264E-15 0.0000000000000000E+00 + -0.0000000000000000E+00 0.0000000000000000E+00 -2.9298089867437231E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 -1.5188430172358709E+01 0.0000000000000000E+00 + 4.6786717543296334E+01 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 8.6730606355289659E+00 0.0000000000000000E+00 -0.0000000000000000E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + 0.0000000000000000E+00 + -4.2471567661527242E-12 0.0000000000000000E+00 -3.8150577914185839E+00 0.0000000000000000E+00 7.3442742637753978E-11 0.0000000000000000E+00 -4.2555315817272019E+00 0.0000000000000000E+00 + -4.9985405625139942E-11 0.0000000000000000E+00 -2.7759046525795650E+01 0.0000000000000000E+00 -6.7545841476504486E-11 0.0000000000000000E+00 -1.2564145696109941E+01 0.0000000000000000E+00 + 5.2638237039835694E+01 0.0000000000000000E+00 -1.7912697398774728E+00 0.0000000000000000E+00 1.0022452642362319E+01 0.0000000000000000E+00 -1.6763864212415474E+01 0.0000000000000000E+00 + 9.6775881314743087E-02 + -8.9941924647161642E-01 3.1162129635831608E+00 5.8079763221030589E-11 6.0864195516337749E-01 2.3742771100651172E-01 -5.7584548102155486E-01 -3.6002534287149501E-11 -1.0543495287572649E-01 + 6.0707336533460108E+00 2.3331210508602127E+00 -1.6566881200219541E-10 3.7507860258766740E-01 -6.4656914245468267E-01 -4.2774517105370935E-01 3.2217395418143724E-11 -7.1163038971201117E-02 + -5.6223470323857327E-11 1.7727573608972425E-01 -2.7703950244983844E-12 2.5004248037874578E-02 7.6802009196796917E-11 -5.8028067727860753E-02 1.1844525360515945E-11 -9.8730916188565984E-03 + -7.7627237971000795E-11 + -4.2471567661527242E-12 0.0000000000000000E+00 -3.8150577914185839E+00 0.0000000000000000E+00 7.3442742637753978E-11 0.0000000000000000E+00 -4.2555315817272019E+00 0.0000000000000000E+00 + -4.9985405625139942E-11 0.0000000000000000E+00 -2.7759046525795650E+01 0.0000000000000000E+00 -6.7545841476504486E-11 0.0000000000000000E+00 -1.2564145696109941E+01 0.0000000000000000E+00 + 5.2638237039835694E+01 0.0000000000000000E+00 -1.7912697398774728E+00 0.0000000000000000E+00 1.0022452642362319E+01 0.0000000000000000E+00 -1.6763864212415474E+01 0.0000000000000000E+00 + Node: 17 + 2.4229325286873852E+01 -0.0000000000000000E+00 1.4649044933718619E+01 -0.0000000000000000E+00 1.2560730645176321E+01 -0.0000000000000000E+00 7.5942150861793563E+00 -0.0000000000000000E+00 + 0.0000000000000000E+00 3.8059335161340151E+01 0.0000000000000000E+00 2.3010665972938597E+01 0.0000000000000000E+00 1.9730349559303054E+01 0.0000000000000000E+00 1.1928965162260921E+01 + 2.3393358771648170E+01 0.0000000000000000E+00 -4.2430859267318404E+01 0.0000000000000000E+00 4.3365303177644838E+00 0.0000000000000000E+00 -7.8655959333436289E+00 0.0000000000000000E+00 + 7.8539816339744828E-01 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + 2.5358239484468644E+01 3.2371733203176056E-01 1.5404408352244067E+01 -2.4325143066278927E+00 1.1434602515883464E+01 -1.5910007357330877E-01 4.9248418805498346E+00 3.1673298320836463E-01 + -1.1923203585691043E-01 3.9720301425660168E+01 7.3733455152875649E-01 2.5658417969345876E+01 1.6120812184872113E-01 1.7394295546265528E+01 -8.1257770000625429E-01 1.0782384646340860E+01 + 2.7871736216455716E+01 7.4338528633286133E-02 -4.5518069817544017E+01 -5.4781918762609105E-01 3.1710410353531882E+00 1.3009839448236529E-01 -1.6664803912132903E+01 -2.9756548978152280E+00 + 1.4112211529705201E-01 + 1.7468195778747031E-09 1.1783729547687471E-10 3.3610114691384751E-11 1.6746095829467400E-11 -3.4560998507515706E-10 -5.1352255781011991E-12 -5.8966338756238912E-12 -3.7388217521971967E-12 + -1.3293970368977170E-09 2.9298241610575815E-10 -3.3153924050566275E-11 -3.2923525017380939E-11 1.3922374364483403E-10 -6.2993610328021532E-11 3.4144242988531914E-11 7.7693320527094656E-12 + 2.6918201001535635E-10 1.8816947999766853E-11 1.3369261253615150E-10 1.3262516085355003E-12 6.6924243924404436E-11 -3.2209790390425042E-12 -1.1675882483075384E-11 6.9838579364045472E-13 + -3.0850522136915970E-10 + 2.5358239484468644E+01 3.2371733203176056E-01 1.5404408352244067E+01 -2.4325143066278927E+00 1.1434602515883464E+01 -1.5910007357330877E-01 4.9248418805498346E+00 3.1673298320836463E-01 + -1.1923203585691043E-01 3.9720301425660168E+01 7.3733455152875649E-01 2.5658417969345876E+01 1.6120812184872113E-01 1.7394295546265528E+01 -8.1257770000625429E-01 1.0782384646340860E+01 + 2.7871736216455716E+01 7.4338528633286133E-02 -4.5518069817544017E+01 -5.4781918762609105E-01 3.1710410353531882E+00 1.3009839448236529E-01 -1.6664803912132903E+01 -2.9756548978152280E+00 + Node: 18 + 1.4836182829035045E-15 -3.8059335161340151E+01 8.9699529943221287E-16 -2.3010665972938597E+01 7.6912292897836244E-16 -1.9730349559303054E+01 4.6501155986630440E-16 -1.1928965162260921E+01 + 2.4229325286873852E+01 2.3304621491505767E-15 1.4649044933718619E+01 1.4089969215004085E-15 1.2560730645176321E+01 1.2081354716929438E-15 7.5942150861793563E+00 7.3043845015515610E-16 + 2.3393358771648170E+01 0.0000000000000000E+00 -4.2430859267318404E+01 0.0000000000000000E+00 4.3365303177644838E+00 0.0000000000000000E+00 -7.8655959333436289E+00 0.0000000000000000E+00 + 7.8539816339744828E-01 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + 1.1923203581318245E-01 -3.9720301425673362E+01 -7.3733455147310800E-01 -2.5658417969357174E+01 -1.6120812182539876E-01 -1.7394295546306267E+01 8.1257770017104680E-01 -1.0782384646139745E+01 + 2.5358239484451872E+01 3.2371733203084008E-01 1.5404408352255528E+01 -2.4325143064968340E+00 1.1434602515889159E+01 -1.5910007350000879E-01 4.9248418805239442E+00 3.1673298418516810E-01 + 2.7871736216462683E+01 7.4338528617754279E-02 -4.5518069817545047E+01 -5.4781918763795401E-01 3.1710410353504770E+00 1.3009839450334687E-01 -1.6664803912115921E+01 -2.9756548978441515E+00 + 1.4112211529690907E-01 + 2.9814373192493804E-10 -4.7126125224394855E-10 -1.1020517831639154E-11 -5.8073268416336532E-12 1.8260237766298815E-10 9.4361254920904969E-11 -8.7965190687100403E-12 -1.9165675990695519E-12 + 1.8405827972856059E-09 -6.1433080844608412E-11 -2.9117264155331668E-11 1.2100057067421233E-11 -3.7245673212282782E-10 1.7068790825192082E-11 -8.9617618881376870E-12 -1.9916811255793476E-12 + 5.0120263495045947E-10 5.8939519931300310E-12 1.2485168454645645E-10 -5.2536308636774720E-12 -2.7357671683603257E-11 -1.4910295220715852E-12 -8.3468787437368519E-12 -2.0726476090970891E-14 + 1.4762679967361692E-10 + 1.1923203581318245E-01 -3.9720301425673362E+01 -7.3733455147310800E-01 -2.5658417969357174E+01 -1.6120812182539876E-01 -1.7394295546306267E+01 8.1257770017104680E-01 -1.0782384646139745E+01 + 2.5358239484451872E+01 3.2371733203084008E-01 1.5404408352255528E+01 -2.4325143064968340E+00 1.1434602515889159E+01 -1.5910007350000879E-01 4.9248418805239442E+00 3.1673298418516810E-01 + 2.7871736216462683E+01 7.4338528617754279E-02 -4.5518069817545047E+01 -5.4781918763795401E-01 3.1710410353504770E+00 1.3009839450334687E-01 -1.6664803912115921E+01 -2.9756548978441515E+00 + Node: 19 + -2.4229325286873852E+01 -4.6609242983011534E-15 -1.4649044933718619E+01 -2.8179938430008170E-15 -1.2560730645176321E+01 -2.4162709433858876E-15 -7.5942150861793563E+00 -1.4608769003103122E-15 + 2.9672365658070089E-15 -3.8059335161340151E+01 1.7939905988644257E-15 -2.3010665972938597E+01 1.5382458579567249E-15 -1.9730349559303054E+01 9.3002311973260880E-16 -1.1928965162260921E+01 + 2.3393358771648170E+01 0.0000000000000000E+00 -4.2430859267318404E+01 0.0000000000000000E+00 4.3365303177644838E+00 0.0000000000000000E+00 -7.8655959333436289E+00 0.0000000000000000E+00 + 7.8539816339744828E-01 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + -2.5358239484496551E+01 -3.2371733203660169E-01 -1.5404408352200965E+01 2.4325143065421155E+00 -1.1434602515882112E+01 1.5910007351669955E-01 -4.9248418804900602E+00 -3.1673298385271775E-01 + 1.1923203579148975E-01 -3.9720301425665376E+01 -7.3733455144072479E-01 -2.5658417969311586E+01 -1.6120812186211084E-01 -1.7394295546211108E+01 8.1257770022310716E-01 -1.0782384645718285E+01 + 2.7871736216446415E+01 7.4338528595535802E-02 -4.5518069817552664E+01 -5.4781918768449889E-01 3.1710410353426446E+00 1.3009839447721946E-01 -1.6664803912142688E+01 -2.9756548978618684E+00 + 1.4112211529749877E-01 + -2.2538344524036802E-09 -4.3372416769216215E-11 8.2411966140227833E-11 -1.4264117664808396E-11 4.0727154981823332E-10 -9.0805141184091553E-12 -1.0798917315923973E-11 3.9190144185408116E-12 + 6.4284222389687784E-10 -3.1060309879649139E-10 1.5247536566675990E-10 2.6166596667209774E-11 -7.0976113875076408E-11 7.0131553342456243E-11 -4.0929926115040871E-11 -6.7988566165855246E-12 + 2.6365398753114277E-10 5.2047255394427339E-12 1.5008483345013701E-10 6.7242184043081465E-12 1.4964918193527410E-11 2.8121949213755215E-12 -2.7710500560829132E-11 -4.7688936133383208E-13 + -1.4429613059974145E-10 + -2.5358239484496551E+01 -3.2371733203660169E-01 -1.5404408352200965E+01 2.4325143065421155E+00 -1.1434602515882112E+01 1.5910007351669955E-01 -4.9248418804900602E+00 -3.1673298385271775E-01 + 1.1923203579148975E-01 -3.9720301425665376E+01 -7.3733455144072479E-01 -2.5658417969311586E+01 -1.6120812186211084E-01 -1.7394295546211108E+01 8.1257770022310716E-01 -1.0782384645718285E+01 + 2.7871736216446415E+01 7.4338528595535802E-02 -4.5518069817552664E+01 -5.4781918768449889E-01 3.1710410353426446E+00 1.3009839447721946E-01 -1.6664803912142688E+01 -2.9756548978618684E+00 + Node: 20 + -4.4508548487105130E-15 3.8059335161340151E+01 -2.6909858982966386E-15 2.3010665972938597E+01 -2.3073687869350873E-15 1.9730349559303054E+01 -1.3950346795989134E-15 1.1928965162260921E+01 + -2.4229325286873852E+01 -6.9913864474517293E-15 -1.4649044933718619E+01 -4.2269907645012249E-15 -1.2560730645176321E+01 -3.6244064150788316E-15 -7.5942150861793563E+00 -2.1913153504654689E-15 + 2.3393358771648170E+01 0.0000000000000000E+00 -4.2430859267318404E+01 0.0000000000000000E+00 4.3365303177644838E+00 0.0000000000000000E+00 -7.8655959333436289E+00 0.0000000000000000E+00 + 7.8539816339744828E-01 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + -1.1923203583086650E-01 3.9720301425663770E+01 7.3733455146132221E-01 2.5658417969276108E+01 1.6120812186443897E-01 1.7394295546218540E+01 -8.1257770024902964E-01 1.0782384645344040E+01 + -2.5358239484510889E+01 -3.2371733204250636E-01 -1.5404408352205492E+01 2.4325143065891819E+00 -1.1434602515891497E+01 1.5910007356208680E-01 -4.9248418804890735E+00 -3.1673298322511073E-01 + 2.7871736216442354E+01 7.4338528613037080E-02 -4.5518069817538091E+01 -5.4781918771951355E-01 3.1710410353431002E+00 1.3009839445724725E-01 -1.6664803912081076E+01 -2.9756548981896578E+00 + 1.4112211529735844E-01 + -1.1800693755503744E-10 4.8874948532784401E-10 -1.8813040014720173E-10 1.4324097463713770E-12 -7.4720674092532136E-11 -9.8825184147166567E-11 3.8276937175396597E-11 -2.6620719517644886E-13 + -1.6458265861274413E-09 -6.2069904771533402E-11 4.8948622932698527E-11 -1.2249576353262626E-11 2.8576785382483649E-10 -4.9968917892329046E-12 -6.5232541590631854E-12 5.0324050482331018E-12 + 4.6813397602818441E-10 -4.2691183921306219E-11 1.5338752490379193E-10 2.1839058339523376E-12 3.7507774663936289E-12 1.5729639812889218E-12 -1.7461920798211850E-11 -1.4106840695582434E-12 + 4.7072834519212847E-10 + -1.1923203583086650E-01 3.9720301425663770E+01 7.3733455146132221E-01 2.5658417969276108E+01 1.6120812186443897E-01 1.7394295546218540E+01 -8.1257770024902964E-01 1.0782384645344040E+01 + -2.5358239484510889E+01 -3.2371733204250636E-01 -1.5404408352205492E+01 2.4325143065891819E+00 -1.1434602515891497E+01 1.5910007356208680E-01 -4.9248418804890735E+00 -3.1673298322511073E-01 + 2.7871736216442354E+01 7.4338528613037080E-02 -4.5518069817538091E+01 -5.4781918771951355E-01 3.1710410353431002E+00 1.3009839445724725E-01 -1.6664803912081076E+01 -2.9756548981896578E+00 + Node: 21 + 2.4229325286873856E+01 -0.0000000000000000E+00 -1.4649044933718610E+01 0.0000000000000000E+00 1.2560730645176323E+01 -0.0000000000000000E+00 -7.5942150861793518E+00 0.0000000000000000E+00 + 0.0000000000000000E+00 3.8059335161340158E+01 -0.0000000000000000E+00 -2.3010665972938583E+01 0.0000000000000000E+00 1.9730349559303058E+01 -0.0000000000000000E+00 -1.1928965162260916E+01 + -2.3393358771648156E+01 0.0000000000000000E+00 -4.2430859267318411E+01 0.0000000000000000E+00 -4.3365303177644812E+00 0.0000000000000000E+00 -7.8655959333436307E+00 0.0000000000000000E+00 + 7.8539816339744828E-01 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + 2.4229325286873856E+01 0.0000000000000000E+00 -2.2086650287935040E+01 4.5361164820869204E+00 9.5115013439499521E+00 -1.9042917743025767E-01 -1.0829387221321449E+01 2.1137980325580150E+00 + 0.0000000000000000E+00 3.8059335161340158E+01 -3.1621110372267163E+00 -3.3994851873486276E+01 -1.2404476521618106E-02 1.4579279950469811E+01 -2.2025497025584526E+00 -1.4860752791027140E+01 + -2.3393358771648156E+01 0.0000000000000000E+00 -5.2704622472780734E+01 -3.3007587987564202E-01 -1.1511261168841454E+01 -1.6082565466562618E-01 -5.9716672052836323E+01 -2.1110481402140824E+00 + 2.6620497350249356E-01 + -1.5823709064950787E+01 -1.1887565939760947E-01 -2.0754287177737751E-10 -3.1029290248341113E-11 -5.3083137885323595E-10 -1.0275114092905824E-12 5.4024840157040899E-11 2.5307048123757170E-12 + -1.8633089128144320E-01 -1.6424859861035641E+00 2.1191226551309228E-10 2.7162517027279343E-12 6.1135096984799020E-11 -2.0313921551828873E-11 -2.2196466886725830E-11 1.1813358993285894E-12 + -2.4199998330675839E+02 4.6710119700566821E-02 -7.1754069352891747E-10 -1.5463290370387739E-12 -1.2471814692105454E-09 5.7838595024506390E-12 1.1182732517767136E-10 -4.9444909971940731E-13 + -5.2932047633902357E-10 + 2.4229325286873856E+01 0.0000000000000000E+00 -2.2086650287935040E+01 4.5361164820869204E+00 9.5115013439499521E+00 -1.9042917743025767E-01 -1.0829387221321449E+01 2.1137980325580150E+00 + 0.0000000000000000E+00 3.8059335161340158E+01 -3.1621110372267163E+00 -3.3994851873486276E+01 -1.2404476521618106E-02 1.4579279950469811E+01 -2.2025497025584526E+00 -1.4860752791027140E+01 + -2.3393358771648156E+01 0.0000000000000000E+00 -5.2704622472780734E+01 -3.3007587987564202E-01 -1.1511261168841454E+01 -1.6082565466562618E-01 -5.9716672052836323E+01 -2.1110481402140824E+00 + Node: 22 + 1.4836182829035047E-15 -3.8059335161340158E+01 -8.9699529943221227E-16 2.3010665972938583E+01 7.6912292897836254E-16 -1.9730349559303058E+01 -4.6501155986630420E-16 1.1928965162260916E+01 + 2.4229325286873856E+01 2.3304621491505767E-15 -1.4649044933718610E+01 -1.4089969215004073E-15 1.2560730645176323E+01 1.2081354716929440E-15 -7.5942150861793518E+00 -7.3043845015515570E-16 + -2.3393358771648156E+01 0.0000000000000000E+00 -4.2430859267318411E+01 0.0000000000000000E+00 -4.3365303177644812E+00 0.0000000000000000E+00 -7.8655959333436307E+00 0.0000000000000000E+00 + 7.8539816339744828E-01 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + 1.4836182829035047E-15 -3.8059335161340158E+01 3.1621110373105421E+00 3.3994851873503279E+01 1.2404476601747056E-02 -1.4579279950624409E+01 2.2025497031589709E+00 1.4860752789988009E+01 + 2.4229325286873856E+01 2.3304621491505767E-15 -2.2086650287915017E+01 4.5361164821174054E+00 9.5115013439688578E+00 -1.9042917740847179E-01 -1.0829387221143005E+01 2.1137980340930769E+00 + -2.3393358771648156E+01 0.0000000000000000E+00 -5.2704622472825704E+01 -3.3007587973790470E-01 -1.1511261168848616E+01 -1.6082565465917104E-01 -5.9716672052954074E+01 -2.1110481399705510E+00 + 2.6620497350284050E-01 + 1.8633089158407756E-01 1.6424859858204959E+00 -1.5317169754780480E-10 4.9183158847693198E-11 3.7630343285854906E-11 7.8855806433242304E-11 1.2909673330341320E-11 -1.0659811575108868E-11 + -1.5823709065374876E+01 -1.1887565936538458E-01 -1.3361223238916864E-10 -2.9935831591387796E-11 -4.9981130345599922E-10 -8.0026818505274377E-12 5.7209015302817079E-11 2.4764912343044898E-12 + -2.4199998330748653E+02 4.6710119858843768E-02 -7.4910699865426977E-10 4.9722517769801300E-12 -1.2679310934515797E-09 -1.1632292351571039E-12 1.1984407910503592E-10 1.5632243763330500E-13 + -2.1108192971297512E-10 + 1.4836182829035047E-15 -3.8059335161340158E+01 3.1621110373105421E+00 3.3994851873503279E+01 1.2404476601747056E-02 -1.4579279950624409E+01 2.2025497031589709E+00 1.4860752789988009E+01 + 2.4229325286873856E+01 2.3304621491505767E-15 -2.2086650287915017E+01 4.5361164821174054E+00 9.5115013439688578E+00 -1.9042917740847179E-01 -1.0829387221143005E+01 2.1137980340930769E+00 + -2.3393358771648156E+01 0.0000000000000000E+00 -5.2704622472825704E+01 -3.3007587973790470E-01 -1.1511261168848616E+01 -1.6082565465917104E-01 -5.9716672052954074E+01 -2.1110481399705510E+00 + Node: 23 + -2.4229325286873856E+01 -4.6609242983011534E-15 1.4649044933718610E+01 2.8179938430008146E-15 -1.2560730645176323E+01 -2.4162709433858880E-15 7.5942150861793518E+00 1.4608769003103114E-15 + 2.9672365658070093E-15 -3.8059335161340158E+01 -1.7939905988644245E-15 2.3010665972938583E+01 1.5382458579567251E-15 -1.9730349559303058E+01 -9.3002311973260840E-16 1.1928965162260916E+01 + -2.3393358771648156E+01 0.0000000000000000E+00 -4.2430859267318411E+01 0.0000000000000000E+00 -4.3365303177644812E+00 0.0000000000000000E+00 -7.8655959333436307E+00 0.0000000000000000E+00 + 7.8539816339744828E-01 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + -2.4229325286873856E+01 -4.6609242983011534E-15 2.2086650288014180E+01 -4.5361164821732514E+00 -9.5115013439222906E+00 1.9042917713617621E-01 1.0829387221519069E+01 -2.1137980355220618E+00 + 2.9672365658070093E-15 -3.8059335161340158E+01 3.1621110372978269E+00 3.3994851873564237E+01 1.2404476602319914E-02 -1.4579279950508456E+01 2.2025497030573691E+00 1.4860752791717349E+01 + -2.3393358771648156E+01 0.0000000000000000E+00 -5.2704622472761045E+01 -3.3007587978127501E-01 -1.1511261168861333E+01 -1.6082565472560190E-01 -5.9716672052905409E+01 -2.1110481404490757E+00 + 2.6620497350193112E-01 + 1.5823709065958161E+01 1.1887565940709699E-01 1.5095436012302343E-10 2.0521695454078781E-11 5.1208726148388450E-10 4.5200510001563998E-12 -4.3668790805639901E-11 -1.2047585151719886E-12 + 1.8633089258219115E-01 1.6424859859714132E+00 -2.8232705062691821E-10 1.5592280071252684E-11 -3.1043612125358777E-11 5.1567559250509376E-11 2.3780089009051153E-11 -5.6371493302280473E-12 + -2.4199998330591620E+02 4.6710119974651576E-02 -7.7224449057666789E-10 -9.1299676152623022E-12 -1.3601244575056626E-09 -7.8065887088030195E-12 1.3356649120055408E-10 1.3442710486422094E-12 + -1.4066814379987136E-10 + -2.4229325286873856E+01 -4.6609242983011534E-15 2.2086650288014180E+01 -4.5361164821732514E+00 -9.5115013439222906E+00 1.9042917713617621E-01 1.0829387221519069E+01 -2.1137980355220618E+00 + 2.9672365658070093E-15 -3.8059335161340158E+01 3.1621110372978269E+00 3.3994851873564237E+01 1.2404476602319914E-02 -1.4579279950508456E+01 2.2025497030573691E+00 1.4860752791717349E+01 + -2.3393358771648156E+01 0.0000000000000000E+00 -5.2704622472761045E+01 -3.3007587978127501E-01 -1.1511261168861333E+01 -1.6082565472560190E-01 -5.9716672052905409E+01 -2.1110481404490757E+00 + Node: 24 + -4.4508548487105138E-15 3.8059335161340158E+01 2.6909858982966366E-15 -2.3010665972938583E+01 -2.3073687869350877E-15 1.9730349559303058E+01 1.3950346795989124E-15 -1.1928965162260916E+01 + -2.4229325286873856E+01 -6.9913864474517300E-15 1.4649044933718610E+01 4.2269907645012217E-15 -1.2560730645176323E+01 -3.6244064150788324E-15 7.5942150861793518E+00 2.1913153504654669E-15 + -2.3393358771648156E+01 0.0000000000000000E+00 -4.2430859267318411E+01 0.0000000000000000E+00 -4.3365303177644812E+00 0.0000000000000000E+00 -7.8655959333436307E+00 0.0000000000000000E+00 + 7.8539816339744828E-01 + 0.0000000000000000E+00 + 1.5707963267948966E+00 + -4.4508548487105138E-15 3.8059335161340158E+01 -3.1621110372498977E+00 -3.3994851873754428E+01 -1.2404476504047296E-02 1.4579279950242677E+01 -2.2025497025358551E+00 -1.4860752793859616E+01 + -2.4229325286873856E+01 -6.9913864474517300E-15 2.2086650288059538E+01 -4.5361164821767002E+00 -9.5115013439306555E+00 1.9042917729616105E-01 1.0829387221458550E+01 -2.1137980334592044E+00 + -2.3393358771648156E+01 0.0000000000000000E+00 -5.2704622472717546E+01 -3.3007587989968123E-01 -1.1511261168841738E+01 -1.6082565477231345E-01 -5.9716672052720526E+01 -2.1110481412919895E+00 + 2.6620497350147826E-01 + -1.8633089162267424E-01 -1.6424859858186351E+00 2.0902746200590627E-10 -4.0936733169960604E-11 1.1151257695019012E-10 -7.4301822507172322E-11 -1.4721557306529576E-11 9.2044616828608483E-12 + 1.5823709066551407E+01 1.1887565940582023E-01 1.4501555511969855E-10 2.1156965068769296E-11 4.5782400093230535E-10 -2.5138502390831263E-12 -5.2424342644741273E-11 -5.7990418023123880E-13 + -2.4199998330522635E+02 4.6710119775053016E-02 -7.3476025264085365E-10 5.2743052980641636E-12 -1.3012564359371481E-09 2.5728377761602417E-12 1.1948320111088151E-10 -7.5177190861364096E-13 + 2.8919233674429279E-10 + -4.4508548487105138E-15 3.8059335161340158E+01 -3.1621110372498977E+00 -3.3994851873754428E+01 -1.2404476504047296E-02 1.4579279950242677E+01 -2.2025497025358551E+00 -1.4860752793859616E+01 + -2.4229325286873856E+01 -6.9913864474517300E-15 2.2086650288059538E+01 -4.5361164821767002E+00 -9.5115013439306555E+00 1.9042917729616105E-01 1.0829387221458550E+01 -2.1137980334592044E+00 + -2.3393358771648156E+01 0.0000000000000000E+00 -5.2704622472717546E+01 -3.3007587989968123E-01 -1.1511261168841738E+01 -1.6082565477231345E-01 -5.9716672052720526E+01 -2.1110481412919895E+00 diff --git a/src/python/hermite_prolate_spheroid_mechanics.py b/src/python/hermite_prolate_spheroid_mechanics.py new file mode 100755 index 0000000..602f82e --- /dev/null +++ b/src/python/hermite_prolate_spheroid_mechanics.py @@ -0,0 +1,376 @@ +#!/usr/bin/env python +import os +from numpy import pi +from opencmiss.iron import iron + +import prolate_spheroid_geometry + + +# Prolate spheroid geometry parameters: +cutoffAngle = 120.0 * pi / 180.0 +focus = 37.5 # mm +endocardiumLambda = 0.38 +epicardiumLambda = 0.69 + +# Fibre angles in radians: +epicardiumFibreAngle = 45.0 * pi / 180.0 +endocardiumFibreAngle = -90.0 * pi / 180.0 +# Assume constant sheet angle +sheetAngle = 90.0 * pi / 180.0 + +# Simulation parameters: +cavityPressure = 1.3 +numIncrements = 4 + +# Geometric and hydrostatic pressure interpolation: +interpolations = ['cubic_hermite', 'linear'] +# Other interpolations should also work, eg: +#interpolations = ['quadratic', 'linear'] +nodalPressure = True +geometricMeshComponent = 1 +pressureMeshComponent = 2 +hasDerivatives = interpolations[0] == 'cubic_hermite' +# Circumferential, longitudinal, transmural number of elements: +numberGlobalElements = [4, 2, 1] + +# Set up a ProlateSpheroid object, which calculates the mesh geometry: +geometry = prolate_spheroid_geometry.ProlateSpheroid( + focus, endocardiumLambda, epicardiumLambda, cutoffAngle, + numberGlobalElements, endocardiumFibreAngle, epicardiumFibreAngle, sheetAngle, + interpolations) + +# Constitutive relation setup +# Guccione constitutive relation: +constitutiveRelation = iron.EquationsSetSubtypes.TRANSVERSE_ISOTROPIC_EXPONENTIAL +constitutiveParameters = [0.88, 0.0, 18.5, 3.58, 3.26] +initialHydrostaticPressure = 0.0 + +# User numbers for identifying OpenCMISS objects +coordinateSystemUserNumber = 1 +regionUserNumber = 1 +meshUserNumber = 1 +decompositionUserNumber = 1 +(geometricFieldUserNumber, + fibreFieldUserNumber, + materialFieldUserNumber, + dependentFieldUserNumber, + deformedFieldUserNumber, + equationsSetFieldUserNumber) = range(1, 7) +equationsSetUserNumber = 1 +problemUserNumber = 1 + +# Get the number of computational nodes and this computational node number +# for when running in parallel with MPI +numberOfComputationalNodes = iron.ComputationalNumberOfNodesGet() +computationalNodeNumber = iron.ComputationalNodeNumberGet() + +# Create a 3D rectangular cartesian coordinate system +coordinateSystem = iron.CoordinateSystem() +coordinateSystem.CreateStart(coordinateSystemUserNumber) +coordinateSystem.DimensionSet(3) +coordinateSystem.CreateFinish() + +# Create a region within the world region and +# assign the coordinate system to the region +region = iron.Region() +region.CreateStart(regionUserNumber, iron.WorldRegion) +region.LabelSet("ProlateSpheroid") +region.CoordinateSystemSet(coordinateSystem) +region.CreateFinish() + +# Create mesh from the prolate spheroid geometry +mesh = geometry.generateMesh(region) + +# Create a decomposition for the mesh +# This breaks the mesh up into multiple decomposition +# domains when running in parallel +decomposition = iron.Decomposition() +decomposition.CreateStart(decompositionUserNumber, mesh) +decomposition.TypeSet(iron.DecompositionTypes.CALCULATED) +# Have to enable face calculation for the decomposition +# in order to be able to use pressure boundary conditions +decomposition.CalculateFacesSet(True) +decomposition.CreateFinish() + +# Create a field for the geometry +geometricField = iron.Field() +geometricField.CreateStart(geometricFieldUserNumber, region) +geometricField.MeshDecompositionSet(decomposition) +geometricField.TypeSet(iron.FieldTypes.GEOMETRIC) +geometricField.VariableLabelSet(iron.FieldVariableTypes.U, "Geometry") +# Set the x, y and z components to use the first mesh component: +for component in range(1, 4): + geometricField.ComponentMeshComponentSet( + iron.FieldVariableTypes.U, component, geometricMeshComponent) +geometricField.ScalingTypeSet(iron.FieldScalingTypes.UNIT) +geometricField.CreateFinish() + +# Use the prolate spheroid geometry to set the geometric field parameters +geometry.setGeometry(geometricField) + +# Create a fibre field and attach it to the geometric field +# This has three components describing fibre orientations as +# rotations in radians about the z, y' and x'' base vectors. +fibreField = iron.Field() +fibreField.CreateStart(fibreFieldUserNumber, region) +fibreField.TypeSet(iron.FieldTypes.FIBRE) +fibreField.MeshDecompositionSet(decomposition) +fibreField.GeometricFieldSet(geometricField) +fibreField.VariableLabelSet(iron.FieldVariableTypes.U, "Fibre") +fibreField.ScalingTypeSet(iron.FieldScalingTypes.UNIT) +# Use linear mesh component for fibre field +for component in range(1, 4): + fibreField.ComponentMeshComponentSet( + iron.FieldVariableTypes.U, component, pressureMeshComponent) +fibreField.CreateFinish() + +# Use the prolate spheroid geometry to set up the fibre field values +geometry.setFibres(fibreField) + +# Create the equations set and equations set field +# This defines the type of equations to solve +equationsSetField = iron.Field() +equationsSet = iron.EquationsSet() +equationsSetSpecification = [iron.EquationsSetClasses.ELASTICITY, + iron.EquationsSetTypes.FINITE_ELASTICITY, + constitutiveRelation] +equationsSet.CreateStart(equationsSetUserNumber, region, fibreField, + equationsSetSpecification, equationsSetFieldUserNumber, equationsSetField) +equationsSet.CreateFinish() + +# Create the material field, used for setting constitutive parameters +# This has an interpolation type of constant by default +materialField = iron.Field() +equationsSet.MaterialsCreateStart(materialFieldUserNumber, materialField) +materialField.VariableLabelSet(iron.FieldVariableTypes.U, "Material") +equationsSet.MaterialsCreateFinish() + +# Set constant material parameters: +for (component, value) in enumerate(constitutiveParameters, 1): + materialField.ComponentValuesInitialise( + iron.FieldVariableTypes.U, iron.FieldParameterSetTypes.VALUES, + component, value) + +# Create the dependent field for storing the solution +# This has one U variable for displacement values and hydrostatic pressure, +# and one DELUDELN variable for the nodal forces +# Sensible defaults are defined by the equations set, but we can +# override some settings here, eg. to change the interpolation type +# for the hydrostatic pressure to node based +dependentField = iron.Field() +equationsSet.DependentCreateStart(dependentFieldUserNumber, dependentField) +dependentField.VariableLabelSet(iron.FieldVariableTypes.U, "Dependent") +if nodalPressure: + dependentField.ComponentInterpolationSet( + iron.FieldVariableTypes.U, 4, + iron.FieldInterpolationTypes.NODE_BASED) + dependentField.ComponentInterpolationSet( + iron.FieldVariableTypes.DELUDELN, 4, + iron.FieldInterpolationTypes.NODE_BASED) + dependentField.ComponentMeshComponentSet( + iron.FieldVariableTypes.U, 4, pressureMeshComponent) + dependentField.ComponentMeshComponentSet( + iron.FieldVariableTypes.DELUDELN, 4, pressureMeshComponent) +else: + dependentField.ComponentInterpolationSet( + iron.FieldVariableTypes.U, 4, + iron.FieldInterpolationTypes.ELEMENT_BASED) + dependentField.ComponentInterpolationSet( + iron.FieldVariableTypes.DELUDELN, 4, + iron.FieldInterpolationTypes.ELEMENT_BASED) +dependentField.ScalingTypeSet(iron.FieldScalingTypes.UNIT) +equationsSet.DependentCreateFinish() + +# Initialise dependent field position values from the undeformed geometry +for component in [1, 2, 3]: + geometricField.ParametersToFieldParametersComponentCopy( + iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES, component, + dependentField, iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES, component) + dependentField.ComponentValuesInitialise( + iron.FieldVariableTypes.DELUDELN, + iron.FieldParameterSetTypes.VALUES, + component, 0.0) + +# Set the initial hydrostatic pressure +dependentField.ComponentValuesInitialise( + iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES, + 4, initialHydrostaticPressure) +dependentField.ComponentValuesInitialise( + iron.FieldVariableTypes.DELUDELN, + iron.FieldParameterSetTypes.VALUES, + 4, 0.0) + +# Create a deformed geometry field, as cmgui doesn't like displaying +# deformed fibres from the dependent field because it isn't a geometric field. +deformedField = iron.Field() +deformedField.CreateStart(deformedFieldUserNumber, region) +deformedField.MeshDecompositionSet(decomposition) +deformedField.TypeSet(iron.FieldTypes.GEOMETRIC) +deformedField.VariableLabelSet(iron.FieldVariableTypes.U, "DeformedGeometry") +for component in [1, 2, 3]: + deformedField.ComponentMeshComponentSet( + iron.FieldVariableTypes.U, component, + geometricMeshComponent) +deformedField.ScalingTypeSet(iron.FieldScalingTypes.UNIT) +deformedField.CreateFinish() + +# Create equations +equations = iron.Equations() +equationsSet.EquationsCreateStart(equations) +equations.SparsityTypeSet(iron.EquationsSparsityTypes.SPARSE) +equations.OutputTypeSet(iron.EquationsOutputTypes.NONE) +equationsSet.EquationsCreateFinish() + +# Define the problem +# The problem defines how the equations are solved by +# setting up control loops and solvers +problem = iron.Problem() +problemSpecification = [iron.ProblemClasses.ELASTICITY, + iron.ProblemTypes.FINITE_ELASTICITY, + iron.ProblemSubtypes.NONE] +problem.CreateStart(problemUserNumber, problemSpecification) +problem.CreateFinish() + +# Create the problem control loops +# For static finite elasticity, there is just a +# single load increment control loop, and we set +# the number of load increments by setting the number of +# iterations of this control loop +problem.ControlLoopCreateStart() +controlLoop = iron.ControlLoop() +problem.ControlLoopGet([iron.ControlLoopIdentifiers.NODE], controlLoop) +controlLoop.MaximumIterationsSet(numIncrements) +controlLoop.OutputTypeSet(iron.ControlLoopOutputTypes.PROGRESS) +problem.ControlLoopCreateFinish() + +# Create the problem solver +solver = iron.Solver() +problem.SolversCreateStart() +problem.SolverGet([iron.ControlLoopIdentifiers.NODE], 1, solver) +solver.OutputTypeSet(iron.SolverOutputTypes.PROGRESS) +solver.NewtonJacobianCalculationTypeSet(iron.JacobianCalculationTypes.FD) +solver.NewtonRelativeToleranceSet(1.0e-8) +solver.NewtonAbsoluteToleranceSet(1.0e-8) +solver.NewtonSolutionToleranceSet(1.0e-8) +# Adjust settings for the line search solver +linesearchSolver = iron.Solver() +solver.NewtonLinearSolverGet(linesearchSolver) +linesearchSolver.LinearTypeSet(iron.LinearSolverTypes.DIRECT) +problem.SolversCreateFinish() + +# Create solver equations for the problem and add +# the single equations set to solver equations. +# For coupled problems there may be multiple equations sets +# solved within one solver equations +solver = iron.Solver() +solverEquations = iron.SolverEquations() +problem.SolverEquationsCreateStart() +problem.SolverGet([iron.ControlLoopIdentifiers.NODE], 1, solver) +solver.SolverEquationsGet(solverEquations) +solverEquations.SparsityTypeSet(iron.SolverEquationsSparsityTypes.SPARSE) +# Only a single equations set to add, the finite elasticity equations: +equationsSetIndex = solverEquations.EquationsSetAdd(equationsSet) +problem.SolverEquationsCreateFinish() + +# Prescribe boundary conditions on the solver equations +boundaryConditions = iron.BoundaryConditions() +solverEquations.BoundaryConditionsCreateStart(boundaryConditions) + +def getDomainNodes(geometry, decomposition, component): + component_name = interpolations[component - 1] + computationalNodeNumber = iron.ComputationalNodeNumberGet() + nodes = geometry.componentNodes(component_name) + meshComponent = geometry.meshComponent(component_name) + return set(node for node in nodes + if decomposition.NodeDomainGet(node, meshComponent) == computationalNodeNumber) +geometricDomainNodes = getDomainNodes(geometry, decomposition, geometricMeshComponent) + +# Fix epicardium nodes at the base: +baseNodes = set(geometry.nodeGroup('base')) +externalNodes = set(geometry.nodeGroup('external')) +fixedNodes = baseNodes.intersection(externalNodes) +for node in fixedNodes.intersection(geometricDomainNodes): + for component in (1, 2, 3): + derivative, version = 1, 1 + # AddNode is used, as this fixes the nodal value at an + # increment (in this case 0) from the current value + boundaryConditions.AddNode(dependentField, iron.FieldVariableTypes.U, + version, derivative, node, component, + iron.BoundaryConditionsTypes.FIXED, 0.0) + if hasDerivatives: + derivative = iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1 + boundaryConditions.AddNode(dependentField, iron.FieldVariableTypes.U, + version, derivative, node, component, + iron.BoundaryConditionsTypes.FIXED, 0.0) + +# Constrain degrees of freedom at the apex to collapse faces: +constrainedNodeSets = geometry.constrainedNodes() +for nodes in constrainedNodeSets: + in_domain = [n in geometricDomainNodes for n in nodes] + if all(in_domain): + version = 1 + for component in (1, 2, 3): + # Map nodal values + xi_3 derivative to same value, + if hasDerivatives: + mappedDerivatives = [ + iron.GlobalDerivativeConstants.NO_GLOBAL_DERIV, + iron.GlobalDerivativeConstants.GLOBAL_DERIV_S3] + else: + mappedDerivatives = [ + iron.GlobalDerivativeConstants.NO_GLOBAL_DERIV] + for derivative in mappedDerivatives: + boundaryConditions.ConstrainNodeDofsEqual(dependentField, iron.FieldVariableTypes.U, + version, derivative, component, nodes, 1.0) + # Fix xi_1 derivative to be zero + if hasDerivatives: + for node in nodes: + for derivative in [ + iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1, + iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1_S2, + iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1_S3, + iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1_S2_S3, + ]: + boundaryConditions.SetNode(dependentField, iron.FieldVariableTypes.U, + version, derivative, node, component, + iron.BoundaryConditionsTypes.FIXED, 0.0) + elif any(in_domain): + raise RuntimeError("Mesh decomposition has DOFs " + "that must be constrained to be equal in separate domains") + +# Apply incremented cavity pressure on the endocardial surface: +internalNodes = set(geometry.nodeGroup('internal')) +for node in internalNodes.intersection(geometricDomainNodes): + derivative, version = 1, 1 + # xi_3 is the transmural direction + xiDirection = 3 + # For pressure/force boundary conditions, the DELUDELN field variable is + # constrained rather than the U field variable + boundaryConditions.SetNode(dependentField, iron.FieldVariableTypes.DELUDELN, + version, derivative, node, xiDirection, + iron.BoundaryConditionsTypes.PRESSURE_INCREMENTED, -cavityPressure) + +solverEquations.BoundaryConditionsCreateFinish() + +# Solve the problem +problem.Solve() + +# Copy deformed geometry into deformed field +for component in [1, 2, 3]: + dependentField.ParametersToFieldParametersComponentCopy( + iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES, component, + deformedField, iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES, component) + +if not os.path.exists("./results"): + os.makedirs("./results") + +# Export results to exnode/exelem files +fields = iron.Fields() +fields.CreateRegion(region) +fields.NodesExport("./results/prolate_spheroid", "FORTRAN") +fields.ElementsExport("./results/prolate_spheroid", "FORTRAN") +fields.Finalise() diff --git a/src/python/prolate_spheroid_geometry.py b/src/python/prolate_spheroid_geometry.py new file mode 100644 index 0000000..af62c28 --- /dev/null +++ b/src/python/prolate_spheroid_geometry.py @@ -0,0 +1,598 @@ +""" Code for generating a cutoff prolate spheroid mesh to + represent the left ventricle of the heart. + Uses a rectangular Cartesian coordinate system and supports + linear Lagrange, quadratic Lagrange and cubic Hermite interpolation. +""" + +from collections import defaultdict +import itertools +import numpy as np +from numpy import pi, sin, cos, sinh, cosh + +from opencmiss.iron import iron + + +class ProlateSpheroid(object): + """ A prolate spheroid mesh where xi_1 corresponds to the theta direction, + xi_2 corresponds to the mu direction, and xi_3 corresponds to the lambda direction. + The nodes at the apex have DOFs constrained to collapse the apex faces. + """ + def __init__(self, focus, internalLambda, externalLambda, cutoffAngle, + numElements, + endocardiumFibreAngle, epicardiumFibreAngle, sheetAngle, + interpolations=None): + self.focus = focus + self.internalLambda = internalLambda + self.externalLambda = externalLambda + self.cutoffAngle = cutoffAngle + + if interpolations is not None: + self.interpolations = interpolations + else: + self.interpolations = ['quadratic', 'linear'] + + # Circumferential, longitudinal, transmural + self.numElements = numElements + + self.endocardiumFibreAngle = endocardiumFibreAngle + self.epicardiumFibreAngle = epicardiumFibreAngle + self.sheetAngle = sheetAngle + + self._calculateNodes() + self._calculateElements() + + def elements(self, component): + """ Returns a list of elements, where each element + is a tuple containing a list of node numbers + and a boolean indicating whether the element is collapsed. + Component is either "linear" or "quadratic" + """ + return self.componentElements[component] + + def nodes(self): + """ Node positions + """ + return self.nodePositions + + def nodeValues(self): + """ Node positions + """ + return self._nodeValues + + def componentNodes(self, component): + """ Node numbers in the given component + """ + allNodes = np.concatenate( + [element[0] for element in self.elements(component)]) + return set(int(node) for node in allNodes) + + def meshComponent(self, interpolation): + components = dict( + (interp, i) + for i, interp in + enumerate(self.interpolations, 1)) + return components[interpolation] + + def totalNumElements(self, component): + return len(self.componentElements[component]) + + def numNodes(self): + return len(self.nodePositions) + + def nodeAtPosition(self, position): + return self.positionNode[position] + + def nodeGroup(self, group): + """ Returns nodes in the named surface/group + """ + if 'quadratic' in self.interpolations: + elFactor = 2 + else: + elFactor = 1 + if group == 'base': + return [n for p, n in self.positionNode.iteritems() + if p[1] == self.numElements[1] * elFactor] + elif group in ('internal', 'endocardium'): + return [n for p, n in self.positionNode.iteritems() + if p[2] == 0] + elif group in ('external', 'epicardium'): + return [n for p, n in self.positionNode.iteritems() + if p[2] == self.numElements[2] * elFactor] + else: + raise ValueError("Invalid node group: %s" % group) + + def generateMesh(self, region): + bases = self.setupBases(region) + + # Start the creation of a mesh in the region, setting + # the number of mesh elements and number of mesh components + # There are two mesh components, one quadratic and one linear + mesh = iron.Mesh() + mesh.CreateStart(1, region, 3) + mesh.NumberOfComponentsSet(len(self.interpolations)) + mesh.NumberOfElementsSet(self.totalNumElements(self.interpolations[0])) + + # Create nodes in the region, setting the total number required + # for the prolate spheroid geometry + meshNodes = iron.Nodes() + meshNodes.CreateStart(region, self.numNodes()) + meshNodes.CreateFinish() + + # Create mesh component elements for each of the + # linear and quadratic mesh components + for meshComponent, interpolation in enumerate(self.interpolations, 1): + meshElements = iron.MeshElements() + # Set the default basis that has no collapsed nodes + basis = bases[(interpolation, False)] + meshElements.CreateStart(mesh, meshComponent, basis) + for elementNum, element in enumerate(self.elements(interpolation), 1): + elementNodes, collapsed = element + if collapsed: + basis = bases[(interpolation, collapsed)] + meshElements.BasisSet(elementNum, basis) + meshElements.NodesSet(elementNum, elementNodes) + meshElements.CreateFinish() + + mesh.CreateFinish() + return mesh + + def setGeometry(self, geometricField): + decomposition = iron.Decomposition() + geometricField.MeshDecompositionGet(decomposition) + geometricInterpolation = self.interpolations[0] + compNodeNumber = iron.ComputationalNodeNumberGet() + geometricMeshComponent = 1 + # Set the geometric field parameters from the prolate spheroid geometry + for nodeNum, values in enumerate(self.nodeValues(), 1): + if decomposition.NodeDomainGet(nodeNum, geometricMeshComponent) == compNodeNumber: + versionNumber = 1 + for component in range(3): + componentValues = values[component] + if geometricInterpolation != 'cubic_hermite': + componentValues = componentValues[:1] + for derivativeNumber, value in componentValues: + # Note: Python uses 0-based indexing, OpenCMISS uses 1-based + geometricField.ParameterSetUpdateNode( + iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES, + versionNumber, derivativeNumber, nodeNum, component + 1, + value) + # After modifying the geometric field, ParameterSetUpdateStart/Finish + # must be called so that the field data at ghost nodes is synchronised + # across all processes. The UpdateFinish routine could be called later + # on just before the geometric values are actually needed, to avoid + # blocking. + geometricField.ParameterSetUpdateStart( + iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES) + geometricField.ParameterSetUpdateFinish( + iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES) + + def setFibres(self, fibreField): + endocardiumFibreAngle = self.endocardiumFibreAngle + epicardiumFibreAngle = self.epicardiumFibreAngle + sheetAngle = self.sheetAngle + geometricMeshComponent = 1 + compNodeNumber = iron.ComputationalNodeNumberGet() + + hasQuadratic = self.interpolations[0] == 'quadratic' + if hasQuadratic: + elFactor = 2 + else: + elFactor = 1 + + # fibre, imbrication, sheet + epiAngles = np.array([epicardiumFibreAngle, 0.0, sheetAngle]) + endoAngles = np.array([endocardiumFibreAngle, 0.0, sheetAngle]) + lmbdaDerivs = (epiAngles - endoAngles) / self.numElements[2] + + decomposition = iron.Decomposition() + fibreField.MeshDecompositionGet(decomposition) + # Set fibre angles at nodes + def setAngles(pos, angles): + nodeNumber = self.nodeAtPosition(pos) + if decomposition.NodeDomainGet(nodeNumber, geometricMeshComponent) == compNodeNumber: + version = 1 + for component, angle in enumerate(angles, 1): + derivative = 1 + fibreField.ParameterSetUpdateNode( + iron.FieldVariableTypes.U, iron.FieldParameterSetTypes.VALUES, + version, derivative, nodeNumber, + component, angle) + + # Only loop over linear component nodes + for k in range(0, self.numElements[2] * elFactor + 1, elFactor): + transmuralPos = float(k) / float(self.numElements[2] * elFactor) + fibreAngle = endocardiumFibreAngle + transmuralPos * ( + epicardiumFibreAngle - endocardiumFibreAngle) + for j in range(0, self.numElements[1] * elFactor + 1, elFactor): + for i in range(0, self.numElements[0] * elFactor, elFactor): + if j == 0: + setAngles((i, j, k), [0.0, 0.0, 0.0]) + else: + setAngles((i, j, k), [fibreAngle, 0.0, sheetAngle]) + + fibreField.ParameterSetUpdateStart( + iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES) + fibreField.ParameterSetUpdateFinish( + iron.FieldVariableTypes.U, + iron.FieldParameterSetTypes.VALUES) + + def indicesToPosition(self, indices): + nodeNum = self.nodeAtPosition(indices) + return np.array(self.nodes()[nodeNum - 1]) + + def setupBases(self, region): + """ Set up required bases in an OpenCMISS region + """ + # Number of Gauss points used for integration, depends on + # maximum interpolation degree and has to be the same + # for all bases. + interpolationGaussRequired = { + 'cubic_hermite': 4, + 'quadratic': 3, + 'linear': 2, + } + numberOfGaussXi = max( + interpolationGaussRequired[interp] + for interp in self.interpolations) + + # Define bases + self.bases = {} + def makeBasis(userNumber, interpolationName, collapsed): + """ Helper function for creating a basis of the + given interpolation type and collapsed state + """ + cmissInterpolations = { + 'cubic_hermite': iron.BasisInterpolationSpecifications.CUBIC_HERMITE, + 'quadratic': iron.BasisInterpolationSpecifications.QUADRATIC_LAGRANGE, + 'linear': iron.BasisInterpolationSpecifications.LINEAR_LAGRANGE, + } + interpolation = cmissInterpolations[interpolationName] + basis = iron.Basis() + basis.CreateStart(basisUserNumber) + basis.TypeSet(iron.BasisTypes.LAGRANGE_HERMITE_TP) + basis.NumberOfXiSet(3) + basis.InterpolationXiSet([interpolation] * 3) + basis.QuadratureNumberOfGaussXiSet([numberOfGaussXi] * 3) + # Have to enable face basis evaluation so we can + # use pressure boundary conditions + basis.QuadratureLocalFaceGaussEvaluateSet(True) + if collapsed: + basis.CollapsedXiSet([ + iron.BasisXiCollapse.XI_COLLAPSED, + iron.BasisXiCollapse.COLLAPSED_AT_XI0, + iron.BasisXiCollapse.NOT_COLLAPSED, + ]) + basis.CreateFinish() + # Save basis into a dictionary for easy + # retrieval later + self.bases[interpolationName, collapsed] = basis + + for i, interpolation in enumerate(self.interpolations): + # Define standard basis + basisUserNumber = i + 1 + makeBasis(basisUserNumber, interpolation, False) + + return self.bases + + def finaliseBases(self): + for basis in self.bases.values(): + basis.Finalise() + self.bases = {} + + def _calculateElements(self): + includeQuadratic = 'quadratic' in self.interpolations + def calcNodeAxes(i, j, k): + """ Returns node indices to use in each xi direction + """ + if includeQuadratic: + # Account for loop around in theta: + finalIPos = (0 if i == (self.numElements[0] - 1) + else i * 2 + 2) + linearAxes = [ + [k * 2, k * 2 + 2], + [j * 2, j * 2 + 2], + [i * 2, finalIPos]] + nodeAxes = { + 'cubic_hermite': linearAxes, + 'linear': linearAxes, + 'quadratic': [ + [k * 2, k * 2 + 1, k * 2 + 2], + [j * 2, j * 2 + 1, j * 2 + 2], + [i * 2, i * 2 + 1, finalIPos]]} + else: + # Account for loop around in theta: + finalIPos = (0 if i == (self.numElements[0] - 1) + else i + 1) + linearAxes = [ + [k, k + 1], + [j, j + 1], + [i, finalIPos]] + nodeAxes = { + 'linear': linearAxes, + 'cubic_hermite': linearAxes} + return nodeAxes + + self.componentElements = defaultdict(list) + # Loop from endocardium to epicardium + for k in xrange(self.numElements[2]): + # Loop from apex to base + for j in xrange(self.numElements[1]): + # Loop circumferentially + for i in xrange(self.numElements[0]): + nodeAxes = calcNodeAxes(i, j, k) + for component in self.interpolations: + positions = nodeAxes[component] + collapsed = False + nodes = [self.positionNode[ni, nj, nk] + for nk, nj, ni in + itertools.product(*positions)] + self.componentElements[component].append( + (nodes, collapsed)) + + def _calculateNodes(self): + """ Calculates node positions as well as + a map from position indices to node numbers + """ + includeQuadratic = 'quadratic' in self.interpolations + if includeQuadratic: + elFactor = 2 + else: + elFactor = 1 + lambdaPositions = np.linspace( + self.internalLambda, self.externalLambda, + self.numElements[2] * elFactor + 1) + muPositions = np.linspace( + 0.0, self.cutoffAngle, + self.numElements[1] * elFactor + 1) + thetaPositions = np.linspace( + 0.0, 2.0 * pi, + self.numElements[0] * elFactor + 1) + # Account for wrap around, last nodes same as first: + thetaPositions = thetaPositions[:-1] + + self.nodePositions = [] + self._nodeValues = [] + self.positionNode = {} + nodeNumber = itertools.count(1) + + # Loop from endocardium to epicardium + for k in xrange(self.numElements[2] * elFactor + 1): + # Apex nodes at mu=0, have multiple apex nodes at same + # position but different theta, get constrained to be + # mapped together later: + # Loop from apex to base + for j in xrange(self.numElements[1] * elFactor + 1): + # Loop circumferentially + for i in xrange(self.numElements[0] * elFactor): + self.nodePositions.append(xyz(self.focus, + lambdaPositions[k], muPositions[j], thetaPositions[i])) + self.positionNode[(i, j, k)] = next(nodeNumber) + # list of x, y, z derivatives + # each set is no_deriv, s1, s2, s1_s2, s3, s1_s3, s2_s3, s1_s2_s3 + derivatives = self.calculateDerivatives( + lambdaPositions[k], muPositions[j], thetaPositions[i]) + if j == 0: + # At apex, so xi_1 derivs are zero + for component in range(3): + derivatives[component][1] = (2, 0.0) # S1 + derivatives[component][3] = (4, 0.0) # S1_S2 + derivatives[component][5] = (6, 0.0) # S1_S3 + derivatives[component][7] = (8, 0.0) # S1_S2_S3 + self._nodeValues.append(derivatives) + + def calculateDerivatives(self, lmbda, mu, theta): + """ Calculate x, y, z derivatives wrt xi directions, + for use with unit scaling. + """ + return [[(derivNumber, self.xXiDerivative(lmbda, mu, theta, xCoord, derivNumber)) + for derivNumber in range(1, 9)] + for xCoord in range(3)] + + def xXiDerivative(self, lmbda, mu, theta, xCoordNum, derivativeNumber): + """ Calculate dx_i/dxi at prolate spheroidal coordinat lmbda, mu, theta + where i = xCoordNum and is referenced from 0. + derivativeNumber gives xi coord to calc deriv wrt to, can be + a double or triple derivative, is one of iron.GlobalDerivativeConstants + """ + focus = self.focus + pCoords = (lmbda, mu, theta) + if derivativeNumber == iron.GlobalDerivativeConstants.NO_GLOBAL_DERIV: + return xyz(focus, lmbda, mu, theta)[xCoordNum] + elif derivativeNumber == iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1: + return (self.xProlateDerivative(xCoordNum, (0, ), pCoords) * + self.prolateXiDerivative(0, 0)) + elif derivativeNumber == iron.GlobalDerivativeConstants.GLOBAL_DERIV_S2: + return (self.xProlateDerivative(xCoordNum, (1, ), pCoords) * + self.prolateXiDerivative(1, 1)) + elif derivativeNumber == iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1_S2: + return (self.xProlateDerivative(xCoordNum, (0, 1), pCoords) * + self.prolateXiDerivative(0, 0) * + self.prolateXiDerivative(1, 1)) + elif derivativeNumber == iron.GlobalDerivativeConstants.GLOBAL_DERIV_S3: + return (self.xProlateDerivative(xCoordNum, (2, ), pCoords) * + self.prolateXiDerivative(2, 2)) + elif derivativeNumber == iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1_S3: + return (self.xProlateDerivative(xCoordNum, (0, 2), pCoords) * + self.prolateXiDerivative(0, 0) * + self.prolateXiDerivative(2, 2)) + elif derivativeNumber == iron.GlobalDerivativeConstants.GLOBAL_DERIV_S2_S3: + return (self.xProlateDerivative(xCoordNum, (1, 2), pCoords) * + self.prolateXiDerivative(1, 1) * + self.prolateXiDerivative(2, 2)) + elif derivativeNumber == iron.GlobalDerivativeConstants.GLOBAL_DERIV_S1_S2_S3: + return (self.xProlateDerivative(xCoordNum, (0, 1, 2), pCoords) * + self.prolateXiDerivative(0, 0) * + self.prolateXiDerivative(1, 1) * + self.prolateXiDerivative(2, 2)) + else: + raise ValueError("Invalid derivative number: {0:d}".format(derivativeNumber)) + + def xProlateDerivative(self, xCoordNum, prolateCoordNums, prolateCoords): + """ Returns d x_i / d ._j where i is xCoordNum (indexed from zero) + and "." is one of theta, mu or lambda, corresponding to + prolateCoordNum from zero + prolateCoordNums is a tuple of derivatives, to allow second and third + partial derivatives. + Prolate coords is current position in [theta, mu, lambda] + """ + lmbda, mu, theta = prolateCoords + d = self.focus + if xCoordNum == 0: + # x = d sinh(lmbda) sin(mu) cos(theta) + if prolateCoordNums == (0, ): + # d x / d theta + return - d * sinh(lmbda) * sin(mu) * sin(theta) + elif prolateCoordNums == (1, ): + # d x / d mu + return d * sinh(lmbda) * cos(mu) * cos(theta) + elif prolateCoordNums == (2, ): + # d x / d lambda + return d * cosh(lmbda) * sin(mu) * cos(theta) + elif prolateCoordNums == (0, 1): + # d x^2 / d theta d mu + return - d * sinh(lmbda) * cos(mu) * sin(theta) + elif prolateCoordNums == (0, 2): + # d x^2 / d theta d lmbda + return - d * cosh(lmbda) * sin(mu) * sin(theta) + elif prolateCoordNums == (1, 2): + # d x^2 / d mu d lmbda + return d * cosh(lmbda) * cos(mu) * cos(theta) + elif prolateCoordNums == (0, 1, 2): + # d x^3 / d theta d mu d lmbda + return - d * cosh(lmbda) * cos(mu) * sin(theta) + else: + raise ValueError("Invalid prolate coords: {0}".format(prolateCoordNums)) + elif xCoordNum == 1: + # y = d sinh(lmbda) sin(mu) sin(theta) + if prolateCoordNums == (0, ): + # d y / d theta + return d * sinh(lmbda) * sin(mu) * cos(theta) + elif prolateCoordNums == (1, ): + # d y / d mu + return d * sinh(lmbda) * cos(mu) * sin(theta) + elif prolateCoordNums == (2, ): + # d y / d lambda + return d * cosh(lmbda) * sin(mu) * sin(theta) + elif prolateCoordNums == (0, 1): + # d y^2 / d theta d mu + return d * sinh(lmbda) * cos(mu) * cos(theta) + elif prolateCoordNums == (0, 2): + # d y^2 / d theta d lmbda + return d * cosh(lmbda) * sin(mu) * cos(theta) + elif prolateCoordNums == (1, 2): + # d y^2 / d mu d lmbda + return d * cosh(lmbda) * cos(mu) * sin(theta) + elif prolateCoordNums == (0, 1, 2): + # d y^3 / d theta d mu d lmbda + return d * cosh(lmbda) * cos(mu) * cos(theta) + else: + raise ValueError("Invalid prolate coords: {0}".format(prolateCoordNums)) + elif xCoordNum == 2: + # z = d cosh(lmbda) cos(mu) + if prolateCoordNums == (0, ): + # d z / d theta + return 0.0 + elif prolateCoordNums == (1, ): + # d z / d mu + return - d * cosh(lmbda) * sin(mu) + elif prolateCoordNums == (2, ): + # d z / d lambda + return d * sinh(lmbda) * cos(mu) + elif prolateCoordNums == (0, 1): + # d z^2 / d theta d mu + return 0.0 + elif prolateCoordNums == (0, 2): + # d z^2 / d theta d lmbda + return 0.0 + elif prolateCoordNums == (1, 2): + # d z^2 / d mu d lmbda + return - d * sinh(lmbda) * sin(mu) + elif prolateCoordNums == (0, 1, 2): + # d z^3 / d theta d mu d lmbda + return 0.0 + else: + raise ValueError("Invalid prolate coords: {0}".format(prolateCoordNums)) + + def prolateXiDerivative(self, prolateCoordNum, xiCoordNum): + """ Returns d . / d xi_i where i is xiCoordNum (indexed from zero) + and "." is one of theta, mu or lambda, corresponding to + prolateCoordNum from zero + """ + prolateCoord = ['theta', 'mu', 'lambda'][prolateCoordNum] + xiCoord = xiCoordNum + 1 + if prolateCoord == 'theta' and xiCoord == 1: + return 2.0 * pi / float(self.numElements[0]) + elif prolateCoord == 'mu' and xiCoord == 2: + return self.cutoffAngle / float(self.numElements[1]) + elif prolateCoord == 'lambda' and xiCoord == 3: + return (self.externalLambda - self.internalLambda) / float(self.numElements[2]) + else: + # All other derivatives are zero, as the xi coordinates + # are aligned with the prolate speroidal coordinates + return 0.0 + + def constrainedNodes(self): + """ Return sets of nodes that are constrained to be equal. + These are found at the heart apex. + """ + includeQuadratic = 'quadratic' in self.interpolations + if includeQuadratic: + elFactor = 2 + else: + elFactor = 1 + nodeSets = [] + # Loop radially + for k in xrange(self.numElements[2] * elFactor + 1): + nodeSets.append([]) + # Longitudinal position at apex: + j = 0 + # Loop circumferentially + for i in xrange(self.numElements[0] * elFactor): + nodeNumber = self.nodeAtPosition((i, j, k)) + nodeSets[-1].append(nodeNumber) + return nodeSets + + +def volume(f, lambdaRange, muRange, thetaRange): + """ Compute the volume within a prolate-spheroid region + """ + from scipy.integrate import tplquad + + def jacobian(theta, mu, lmbda): + """ Compute sqrt(det(G_ij)), where G_ij is the covariant + metric tensor for the transformation from prolate-spheroid + coordinates to rectangular cartesian + """ + return f ** 3 * sinh(lmbda) * sin(mu) * (sinh(lmbda) ** 2 + sin(mu) ** 2) + + # Note: Function to integrate has arguments reversed compared + # to order of limits in tplquad arguments + vol, err = tplquad(jacobian, + lambdaRange[0], lambdaRange[1], + lambda l: muRange[0], lambda _: muRange[1], + lambda l, m: thetaRange[0], lambda l, m: thetaRange[1], + epsabs=1.0e-10, epsrel=1.0e-10) + + return vol + + +def wallThickness(f, mu, lambdaInternal, lambdaExternal): + """ Compute the wall thickness at the given mu position, + from lambdaRange[0] to lambdaRange[1] + """ + internal = xyz(f, lambdaInternal, mu, 0.0) + external = xyz(f, lambdaExternal, mu, 0.0) + return np.linalg.norm(external - internal) + + +def xyz(focus, lmbda, mu, theta): + """ Convert from prolate-spheroid coordinates to rectangular cartesian + """ + x = focus * sinh(lmbda) * sin(mu) * cos(theta) + y = focus * sinh(lmbda) * sin(mu) * sin(theta) + z = focus * cosh(lmbda) * cos(mu) + return np.array([x, y, z]) diff --git a/src/python/visualise.cmgui b/src/python/visualise.cmgui new file mode 100644 index 0000000..6469972 --- /dev/null +++ b/src/python/visualise.cmgui @@ -0,0 +1,28 @@ +gfx read node "results/prolate_spheroid.part0.exnode" +gfx read elem "results/prolate_spheroid.part0.exelem" + +gfx create window 1 + +gfx define faces egroup "ProlateSpheroid" + +# View undeformed geometry +gfx modify g_element "ProlateSpheroid" lines coordinate Geometry select_on material white + +# View deformed geometry +gfx modify g_element "ProlateSpheroid" lines coordinate DeformedGeometry select_on material green +gfx modify g_element "ProlateSpheroid" node_points coordinate DeformedGeometry glyph sphere General size "0.05*0.05*0.05" centre 0,0,0 font default select_on material white + +# Add axis +gfx modify g_element "/" point glyph axes_solid general size "10*10*10" centre 0,0,0 font default select_on material default + +# Show internal surface +gfx modify g_element "ProlateSpheroid" surfaces coordinate DeformedGeometry exterior face xi3_0 material white + +# View fibre orientations +gfx modify g_element "ProlateSpheroid" element_points coordinate DeformedGeometry discretization "3*3*3" use_elements glyph cylinder_solid size "2.0*0.5*0.5" scale_factors "0*0*0" centre "0.5,0.0,0.0" orientation Fibre material gold +gfx modify g_element "ProlateSpheroid" element_points coordinate DeformedGeometry discretization "3*3*3" use_elements glyph sheet size "2.0*1.2*1.2" scale_factors "0*0*0" centre "0.0,0.0,0.0" orientation Fibre material blue + +gfx modify window 1 view up_vector 0 0 -1 +gfx modify window 1 image view_all + +gfx define tessellation default minimum_divisions "1" refinement_factors "16"