From e1af0fe80eec9188ef0056dcce055471f5620a2a Mon Sep 17 00:00:00 2001 From: mozul Date: Wed, 7 Dec 2016 01:32:45 +0100 Subject: [PATCH] user 2016 --- CMakeLists.txt | 29 + README.md | 93 +- docs/Pre/.buildinfo | 2 +- docs/Pre/_downloads/granular.py | 10 +- docs/Pre/_downloads/masonry.py | 12 +- docs/Pre/_downloads/philosophie.py | 24 +- ...4415649a7db35f209020f05e7ab6ac3d6e086b.png | Bin 2728 -> 0 bytes ...a7aebf6e172bdbb4b352fe0520f84304f478e7.png | Bin 0 -> 623 bytes ...9ab841ae16a7cebd461d3c10bda5daa9b232a2.png | Bin 2023 -> 0 bytes ...7188468983fb96809cdfaec211b867038325ef.png | Bin 2507 -> 0 bytes ...795d14a31aa864e162da06bcc14d9801cbdc11.png | Bin 0 -> 2724 bytes ...9229bb92adf679ebe7aa3a58f330b21d6ed3d5.png | Bin 0 -> 2109 bytes ...25d925f1283bab52dde13193ba99f3de20e162.png | Bin 0 -> 2025 bytes ...4e1cb31029f79454cae98fb73221ca8662ea5b.png | Bin 0 -> 2649 bytes ...f19ed033c8c88a6b4e5c502fe8271c336f971a.png | Bin 2023 -> 0 bytes ...bf765aa11044bb82b756cb3413f75341a70edf.png | Bin 2728 -> 0 bytes ...a7f64cf4bcd7736b969f26733210c014965bc2.png | Bin 0 -> 2025 bytes ...6a660dca89c326a9f6d7a6ee1caf28c29025c9.png | Bin 2121 -> 0 bytes ...77ce5d55c8fcd63b7fdb0ac8a27d2550e1ede8.png | Bin 626 -> 0 bytes docs/Pre/_modules/index.html | 66 +- .../IO/evolution2File.html} | 40 +- .../{pre_lmgc => pre}/avatar/avatar.html | 219 +- .../{pre_lmgc => pre}/avatar/bulk/bulk.html | 68 +- .../{pre_lmgc => pre}/avatar/bulks.html | 16 +- .../avatar/contactor/contactor.html | 50 +- .../{pre_lmgc => pre}/avatar/contactors.html | 18 +- .../{pre_lmgc => pre}/avatar/node/node.html | 58 +- .../{pre_lmgc => pre}/avatar/nodes.html | 16 +- .../pylmgc90/{pre_lmgc => pre}/avatars.html | 46 +- .../{pre_lmgc => pre}/build_avatar/brick.html | 88 +- .../build_avatar/brick_wall.html | 28 +- .../build_avatar/extrusion.html | 53 +- .../build_avatar/lattices2D.html | 16 +- .../build_avatar/lattices3D.html | 12 +- .../build_avatar/lecture.html | 286 +- .../{pre_lmgc => pre}/build_avatar/mesh.html | 58 +- .../build_avatar/mesh2D.html | 166 +- .../build_avatar/mesh3D.html | 150 +- .../build_avatar/particles.html | 549 +- .../build_avatar/tools/containers2D.html | 27 +- .../pre/build_avatar/tools/containers3D.html | 283 + .../build_avatar/tools/granulometry.html | 50 +- .../{pre_lmgc => pre}/build_avatar/walls.html | 177 +- .../{pre_lmgc => pre}/bulk_behavs.html | 41 +- .../pylmgc90/{pre_lmgc => pre}/models.html | 30 +- .../{pre_lmgc => pre}/shared/bulk_behav.html | 38 +- .../{pre_lmgc => pre}/shared/model.html | 50 +- .../{pre_lmgc => pre}/shared/tact_behav.html | 48 +- .../{pre_lmgc => pre}/tact_behavs.html | 18 +- .../{pre_lmgc => pre}/viz/visuVtk.html | 97 +- .../build_avatar/tools/containers3D.html | 243 - docs/Pre/_sources/classes.txt | 112 +- docs/Pre/_sources/granular.txt | 8 +- docs/Pre/_sources/interaction.txt | 6 +- docs/Pre/_sources/masonry.txt | 8 +- docs/Pre/_sources/material.txt | 20 +- docs/Pre/_sources/mesh.txt | 95 +- docs/Pre/_sources/miscellaneous.txt | 2 +- docs/Pre/_sources/model.txt | 83 +- docs/Pre/_sources/philosophie.txt | 26 +- docs/Pre/_sources/post.txt | 16 +- docs/Pre/_sources/visibility.txt | 2 +- docs/Pre/_static/basic.css | 4 - docs/Pre/classes.html | 781 +- docs/Pre/genindex.html | 270 +- docs/Pre/granular.html | 80 +- docs/Pre/index.html | 8 +- docs/Pre/interaction.html | 30 +- docs/Pre/masonry.html | 24 +- docs/Pre/material.html | 26 +- docs/Pre/mesh.html | 74 +- docs/Pre/miscellaneous.html | 22 +- docs/Pre/model.html | 16 +- docs/Pre/objects.inv | Bin 2052 -> 2034 bytes docs/Pre/philosophie.html | 56 +- docs/Pre/post.html | 22 +- docs/Pre/py-modindex.html | 8 +- docs/Pre/search.html | 2 +- docs/Pre/searchindex.js | 2 +- docs/Pre/visibility.html | 8 +- docs/chipy/.buildinfo | 2 +- docs/chipy/_modules/index.html | 6 +- docs/chipy/_modules/pylmgc90/chipy/chipy.html | 25 +- .../chipy/_modules/pylmgc90/chipy/lmgc90.html | 949 +- docs/chipy/_sources/common.txt | 78 +- docs/chipy/_sources/linear.txt | 82 +- docs/chipy/_sources/nonlinear.txt | 160 +- docs/chipy/_sources/rigid.txt | 51 +- docs/chipy/_static/basic.css | 4 - docs/chipy/bulk.html | 6 +- docs/chipy/chipy.html | 10 +- docs/chipy/common.html | 6 +- docs/chipy/contactor.html | 6 +- docs/chipy/genindex.html | 212 +- docs/chipy/index.html | 6 +- docs/chipy/interaction.html | 6 +- docs/chipy/kernel.html | 6 +- docs/chipy/linear.html | 6 +- docs/chipy/lmgc90.html | 944 +- docs/chipy/nonlinear.html | 6 +- docs/chipy/objects.inv | Bin 17942 -> 18285 bytes docs/chipy/py-modindex.html | 6 +- docs/chipy/rigid.html | 6 +- docs/chipy/search.html | 2 +- docs/chipy/searchindex.js | 2 +- docs/chipy/tact.html | 6 +- docs/dev/.buildinfo | 2 +- docs/dev/_downloads/gen_sample.py | 2 +- docs/dev/_images/contact_law.png | Bin 84655 -> 84655 bytes docs/dev/_images/contactors.png | Bin 93301 -> 93301 bytes docs/dev/_images/interactions.png | Bin 96979 -> 96979 bytes ...76173df05eb71b8bfc9b6066e6f59db31f44ad.png | Bin 5782 -> 0 bytes ...1386363b69108d4278c06f387c78817e29f9a0.png | Bin 1667 -> 0 bytes ...367184feb6533ab8f8d00a1f01e0d2eb08417a.png | Bin 0 -> 4487 bytes ...4e69bc64ebec7ea2c58f3a313a5c4c9a2e7094.png | Bin 535 -> 0 bytes ...344cb3eee545a8a1a4ca3b082140f0646e09ac.png | Bin 2263 -> 0 bytes ...7e407655dd689a1802114e0106a28db95dad03.png | Bin 0 -> 880 bytes ...973b4d3a77a9adc5a6f8e4a97f84d24e6e4df2.png | Bin 0 -> 1846 bytes ...c62a830274efdc55efb973a63150e3e0620d5c.png | Bin 0 -> 1942 bytes ...2707bc57237b1eb0163b9e3956b13ea9ad0be9.png | Bin 4495 -> 0 bytes ...869277b1d69c82d13282acef59b885fbefd53.png} | Bin ...d8fa3b685e5936e5a12c2f917899610dca19c2.png | Bin 2311 -> 0 bytes ...90053f8834f9097b5d0e822ff86e94aa9c8a48.png | Bin 834 -> 0 bytes ...58a242e870bce4dc70d4a8547e0bb7cfb0fa23.png | Bin 0 -> 673 bytes ...348adf721df602f4030d558637e0ce258b8635.png | Bin 1089 -> 0 bytes ...68f2ec9aef041f51ab17f5cf104cd0b227ba1a.png | Bin 0 -> 2193 bytes ...50077b3898f05d572902c760e08417840bcf98.png | Bin 543 -> 0 bytes ...9c03acb171b1802d2aefe4f517e84e97c63749.png | Bin 1108 -> 0 bytes ...c3530130c395a1a38342442825938ce3d50951.png | Bin 0 -> 1076 bytes ...9964545a174269d153b2496a7eec3f135d54ff.png | Bin 0 -> 8012 bytes ...100eb9cf9123f2abb252ab1dc43ccb753d544b.png | Bin 0 -> 1043 bytes ...e4f519c0a2161dadc247b547d0745eb820cfee.png | Bin 0 -> 1665 bytes ...97c39025fd0d71005fa354032582c4da978e19.png | Bin 0 -> 1859 bytes ...88969801f5e66b1cbab49ae1e7fdea369190b1.png | Bin 0 -> 922 bytes ...836aa7420bb128d639d3303c7f076185215ae2.png | Bin 0 -> 819 bytes ...f25f3e10611a2e04b5f92ee0573805af47c57d.png | Bin 0 -> 826 bytes ...d94fb540f100af72111750c8c3668c48f2f629.png | Bin 0 -> 789 bytes ...48bb19823cb382574134420995dedcba68687e.png | Bin 885 -> 0 bytes ...8464abdc37429a70ef2e4a9c17b981a2c9e86f.png | Bin 2189 -> 0 bytes ...157b011d4b1aa1ec936762698e8fbcea6d0d0f.png | Bin 0 -> 2305 bytes ...b40c18e18f07b9c1f73e438cede2338bae290b.png | Bin 0 -> 856 bytes ...b0b04859814e221be273232e40403652b1713f.png | Bin 0 -> 6720 bytes ...f968f7c2259af1038087213ec6b187c39a30a4.png | Bin 920 -> 0 bytes ...fcc327c50fd52802716df2dc590f5f41f76a97.png | Bin 1201 -> 0 bytes ...174599b8de651bd0ff261629482d80c7980610.png | Bin 1496 -> 0 bytes ...8590a182052cc88f24e2ed8ea7d6b5111ba214.png | Bin 1006 -> 0 bytes ...8a10dfc5083e1ab409123e8129d331aabbfcb8.png | Bin 4802 -> 0 bytes ...32fb077ef91613cac567d59f5122ee12d08648.png | Bin 4616 -> 0 bytes ...e6a32b822dadf868ee290304c8b7864fc43ae1.png | Bin 0 -> 976 bytes ...bd67a8b1f5401c7eee0ccf423c2b10591ca545.png | Bin 1294 -> 0 bytes ...0698bb036ff93d7f65be482b6592ff1da6fd07.png | Bin 0 -> 1530 bytes ...4f335b1f8ad48a26536d3c13a4875b9ffc955f.png | Bin 1246 -> 0 bytes ...7eaa18bb54cdabcccd01fab0c615cfa687adc3.png | Bin 0 -> 996 bytes ...af5f785123b3b664f501a7718b7e05db12e244.png | Bin 1962 -> 0 bytes ...ae957ebdc9bf15b37140e1aedb5db5b0f32c08.png | Bin 8014 -> 0 bytes ...e7baf50469383f993d984b77769bb469b869e0.png | Bin 1825 -> 0 bytes ...1cabf82666b0ee11ad0209ab8bf67a0d17886f.png | Bin 0 -> 549 bytes ...acf130d7fe57ab69f7c0cf16eba0ba856c8ba0.png | Bin 0 -> 1822 bytes ...682c660fd99adee7a703b2e484333baaa536cb.png | Bin 1741 -> 0 bytes ...c6f88e6bea512e7f4d833e3cc03d06ba1c2b00.png | Bin 1901 -> 0 bytes ...9853ead597034cb79ca35bcb51626a2bb2bfba.png | Bin 0 -> 7317 bytes ...d02068dbbd79bb20d6338d2f83dac76d084c4f.png | Bin 890 -> 0 bytes ...841727ed5ee5f29e499dc19154f990ea5d7a1e.png | Bin 805 -> 0 bytes ...30f4123238fead687160de9bfa5cf337e8240a.png | Bin 1100 -> 0 bytes ...a0f94466ffc3bd66d53a0106a1b391ef5378e9.png | Bin 0 -> 859 bytes ...deba54e6705473b0b23f106f4b81c71241d3b3.png | Bin 0 -> 495 bytes ...0bdcc447b1dd9533ca51664d4812a6be113e84.png | Bin 2585 -> 0 bytes ...095afd54dccf95a229eae3cbaed8dfbbf6f9a8.png | Bin 0 -> 884 bytes ...f223562ff2886e5dbe80a034fe3d3f925bc84c.png | Bin 7336 -> 0 bytes ...7818a3e25fd24f7a308bf851905464de7ace68.png | Bin 707 -> 0 bytes ...c1b02239a3726d7ebac8e7524ea2fc77019bcb.png | Bin 0 -> 1194 bytes ...edba33572bde01c416d8fe2338b99642441928.png | Bin 670 -> 0 bytes ...a7a8995c4c6e90300a1f3834cbbfe858ebca15.png | Bin 0 -> 1180 bytes ...a6f7ee16696cc5c2dd918f8eff1811cc1d9560.png | Bin 0 -> 1327 bytes ...5899b226dd3e593764c270ea5646ce43a18ac9.png | Bin 0 -> 1926 bytes ...7642122eb6524785c452352e1360d3557c71fb.png | Bin 0 -> 684 bytes ...3c738b10c96a1ac4b168d48feb768adc85aed1.png | Bin 2003 -> 0 bytes ...64784a3efeea2e124b04adb776853c8d7a7710.png | Bin 628 -> 0 bytes ...b6f9392433da14654d8fe24e45a7fa6dda3aa1.png | Bin 2032 -> 0 bytes ...1a529dea2b3cb68fdc987b939f93fd69bee87c.png | Bin 0 -> 1075 bytes ...a5a620a315c689168a3b8ecf42f6b07f9fed39.png | Bin 0 -> 1292 bytes ...1c7de534d8520322d81d0d4f1ff9da9fc2cff8.png | Bin 0 -> 1612 bytes ...8131f9a9110354af469dddb384d06d5e823272.png | Bin 859 -> 0 bytes ...ef04f188cc9ce8f9a5b49cecb25a080b09fc24.png | Bin 1762 -> 0 bytes ...52a9fea717bd53f65d393305aa9cfb0ccf1d04.png | Bin 0 -> 4806 bytes ...c6b7a0862bc25dc8b656b1b4c6dba9a9033471.png | Bin 1861 -> 0 bytes ...14823eb858bd6e3149d5a9bf04313afad452bb.png | Bin 1357 -> 0 bytes ...83c00ea0ae7f7f91747e85599c6670647d638e.png | Bin 0 -> 2225 bytes ...b6d0a4cf8d825d5a8ce368ce383ff239ebe968.png | Bin 522 -> 0 bytes ...608452c2118560e907091928828eaade361441.png | Bin 993 -> 0 bytes ...f532650faa10354efa9e0bdc73357f1ca32e51.png | Bin 0 -> 677 bytes ...26d9f8c4a4c09299f8d08c7b5fc42615188e28.png | Bin 0 -> 2235 bytes ...b923c588652e2643fb75c74b27b7baf07b8017.png | Bin 496 -> 0 bytes ...b46643032599ebc98295efe6f4d7a775e630e9.png | Bin 0 -> 539 bytes ...9514cebfd0e78667ad74eaf80af7634878966.png} | Bin ...2574588040f95c9af87344f6fadd9d64d26299.png | Bin 868 -> 0 bytes ...fe768b21de3f4e6d7d9c358722396ef90645c0.png | Bin 1228 -> 0 bytes ...b00b49a3fe1b3b2d6e14432fd443651fb82466.png | Bin 0 -> 1352 bytes ...294a5a031292b8e8190a0691c5aaa470985cd5.png | Bin 818 -> 0 bytes ...4cf99b6ed9f3e77a3be1c12654f0763091fceb.png | Bin 0 -> 1104 bytes ...a5d3e7e2701ed9358cf9712112b2a7bd19d57b.png | Bin 1634 -> 0 bytes ...5efeeb3c869036207a9ef9a60560614113136b.png | Bin 0 -> 4615 bytes ...9249126c000778c4735fd474c81f905d827829.png | Bin 0 -> 1391 bytes ...d5669705579c694bdfbac08fc61583a2c18628.png | Bin 1403 -> 0 bytes ...fee1ef1786a8f8703c98a26490f754b80e80e1.png | Bin 809 -> 0 bytes ...74bc5a172f98bbe07ffdb6b2864b8b465a3e14.png | Bin 0 -> 2020 bytes ...8d2ea4db6c7532b617d1a6f2d48560b41131b0.png | Bin 1126 -> 0 bytes ...d876580d12dc4b4a0f1f165df2d91db3744852.png | Bin 0 -> 525 bytes ...2dab233a71fcbd4c3b84a990226d5332eea975.png | Bin 0 -> 834 bytes ...1fc1a92cd14a01c78548aef197ec0cabcde9d6.png | Bin 0 -> 2559 bytes ...6f908a6250b5aea3213192aaf6582debbfad37.png | Bin 2191 -> 0 bytes ...7a8e65e06e2b967c2ff51977e0028c9217ddcc.png | Bin 0 -> 1105 bytes ...adf92edcade09d66b2a3927e631b4426ddc8ba.png | Bin 1344 -> 0 bytes ...c6759b2f4697ecfe126d2373661d4b374f19c0.png | Bin 0 -> 1742 bytes ...3f5ea1353dc98cda8988c46f88166c3dfa866f.png | Bin 0 -> 2077 bytes docs/dev/_images/modelingframework.png | Bin 182138 -> 182138 bytes docs/dev/_sources/cmake.txt | 20 +- docs/dev/_sources/contact_law.txt | 6 +- docs/dev/_static/basic.css | 4 - docs/dev/cmake.html | 29 +- docs/dev/contact_law.html | 30 +- docs/dev/development.html | 6 +- docs/dev/genindex.html | 6 +- docs/dev/index.html | 6 +- docs/dev/presentation.html | 6 +- docs/dev/search.html | 2 +- docs/dev/searchindex.js | 2 +- docs/dev/solver.html | 8 +- docs/dev/theory.html | 96 +- .../AvecContact/Bascule/coro/gen_sample.py | 24 +- .../AvecContact/Bascule/ld/gen_sample.py | 24 +- .../AvecContact/Comprime_2D/gen_sample.py | 28 +- .../AvecContact/Comprime_3D/gen_sample.py | 26 +- .../SansContact/beam_ld/gen_sample.py | 10 +- .../SansContact/cube_dyna_sd/gen_cube_tet.py | 12 +- .../SansContact/cube_quasi_sd/gen_cube_tet.py | 12 +- .../Ateliers/GazGrains/ParticlesToMesh.py | 197 + examples/Ateliers/GazGrains/command.py | 321 + examples/Ateliers/GazGrains/gen_sample.py | 231 + examples/Ateliers/GazGrains/gmsh/darcy.geo | 24 + examples/Ateliers/GazGrains/gmsh/darcy.msh | 1735 ++ .../Pre_PoroElastic_TP_Solution.py | 22 +- .../Pre_PoroElastic_TP.py | 12 +- .../Pre_PoroElastic_TP_Solution.py | 10 +- .../poroMAILx/Pre_PoroElastic_TP.py | 12 +- .../poroMAILx/Pre_PoroElastic_TP_Solution.py | 10 +- .../0.MiseEnCharge/SOLUCE/gen_sample.py | 38 +- .../1.Thermique/0.MiseEnCharge/gen_sample.py | 36 +- .../0.MiseEnCharge/SOLUCE/gen_sample.py | 38 +- .../Ateliers/Performance/beam/gen_sample.py | 8 +- .../Ateliers/Performance/openmp/gen_sample.py | 36 +- .../Polyedres/Detection/CpCundall.ipynb | 215 + .../Polyedres/Detection/CpCundall1/command.py | 18 +- .../Polyedres/Detection/CpCundall2/command.py | 18 +- .../Polyedres/Detection/CpCundall3/command.py | 18 +- .../Detection/CpCundallCluster/command.py | 14 +- .../Polyedres/Detection/CpF2f/command.py | 14 +- .../Polyedres/Detection/CpF2f/gen_sample.py | 143 +- .../Ateliers/Polyedres/Generation/Auto/README | 4 +- .../Generation/Auto/RandomLots.ipynb | 275 + .../Generation/Auto/RegularLots.ipynb | 272 + .../Polyedres/Generation/Auto/random_lots.py | 15 +- .../Polyedres/Generation/Auto/regular_lots.py | 40 +- .../Polyedres/Generation/Mesh/gen_sample.py | 6 +- .../Polyedres/Remaillage/DATBOX/BODIES.DAT | 237 + .../Remaillage}/DATBOX/BULK_BEHAV.DAT | 21 +- .../Polyedres/Remaillage/DATBOX/DOF.INI | 91 + .../Polyedres/Remaillage/DATBOX/DRV_DOF.DAT | 106 + .../Polyedres/Remaillage/DATBOX/POSTPRO.DAT | 1 + .../Remaillage/DATBOX/TACT_BEHAV.DAT | 13 + .../Polyedres/Remaillage/DATBOX/Vloc_Rloc.INI | 3 + .../Ateliers/Polyedres/Remaillage/Draw.py | 123 + .../Polyedres/Remaillage/ExtractWireFrame.py | 62 + .../Ateliers/Polyedres/Remaillage/Mesh.py | 102 + .../Polyedres/Remaillage/meshing3D.py | 123 + .../Ateliers/Pre/enonces/TP1.5/gen_sample.py | 22 +- .../Ateliers/Pre/enonces/TP1/gen_sample.py | 2 +- .../Ateliers/Pre/enonces/TP2/gen_sample.py | 36 +- .../Pre/solutions/TP1.5/gen_sample.py | 24 +- .../Ateliers/Pre/solutions/TP1/gen_sample.py | 22 +- .../Ateliers/Pre/solutions/TP2/gen_sample.py | 36 +- examples/Ateliers/gmshpy/gmshpy-basics.ipynb | 265 + examples/Ateliers/gmshpy/gmshutils.ipynb | 101 + examples/Ateliers/gmshpy/input/aneurysm.stl | Bin 0 -> 1014784 bytes .../python/{ => 2014}/membrane_3D/README.txt | 0 .../python/{ => 2014}/membrane_3D/TP1.py | 0 .../python/{ => 2014}/membrane_3D/TP2.py | 0 .../python/{ => 2014}/membrane_3D/TP3.py | 0 .../python/{ => 2014}/membrane_3D/TP4.py | 0 .../{ => 2014}/membrane_3D/TP_compression.py | 0 .../{ => 2014}/membrane_3D/TP_sample.py | 14 +- .../solution/TP_compression_solution.py | 0 .../solution/TP_sample_solution.py | 14 +- .../membrane_3D/solution/TP_solution.py | 0 .../python/2016/Python_and_Standalone.ipynb | 835 + .../python/2016/channel/gen_sample.py | 101 + .../python/2016/mac_czm/gen_sample.py | 68 + .../Pre/prepro_grains/Couette/gen_sample.py | 14 +- .../prepro_grains/big_disk_vs_wall/command.py | 19 +- .../big_disk_vs_wall/gen_sample.py | 12 +- .../big_sphere_vs_wall/command.py | 2 +- .../big_sphere_vs_wall/gen_sample.py | 14 +- examples/Pre/prepro_grains/box/gen_sample.py | 12 +- examples/Pre/prepro_grains/box3D/command.py | 2 +- .../Pre/prepro_grains/box3D/gen_sample.py | 16 +- .../box_big_particles/command.py | 19 +- .../box_big_particles/gen_sample.py | 14 +- .../prepro_grains/box_cluster/gen_sample.py | 12 +- .../prepro_grains/box_disk_defo/gen_sample.py | 14 +- .../Pre/prepro_grains/box_polyg/gen_sample.py | 12 +- .../Pre/prepro_grains/cylinder3D/command.py | 2 +- .../prepro_grains/cylinder3D/gen_sample.py | 12 +- examples/Pre/prepro_grains/drum/command.py | 19 +- examples/Pre/prepro_grains/drum/gen_sample.py | 12 +- .../Pre/prepro_grains/extruded_box/command.py | 2 +- .../prepro_grains/extruded_box/gen_sample.py | 14 +- .../extruded_box_cluster/command.py | 2 +- .../extruded_box_cluster/gen_sample.py | 14 +- .../extruded_box_cylinders/command.py | 2 +- .../extruded_box_cylinders/gen_sample.py | 14 +- .../prepro_grains/extruded_drum/gen_sample.py | 14 +- .../polygons_from_mesh2D/command.py | 29 +- .../polygons_from_mesh2D/gen_sample.py | 12 +- .../Pre/prepro_grains/rough_box/command.py | 17 +- .../Pre/prepro_grains/rough_box/gen_sample.py | 12 +- .../Pre/prepro_grains/rough_box3D/command.py | 2 +- .../prepro_grains/rough_box3D/gen_sample.py | 16 +- .../rough_box_granulo/command.py | 17 +- .../rough_box_granulo/gen_sample.py | 12 +- .../rough_box_granulo_polyg/command.py | 19 +- .../rough_box_granulo_polyg/gen_sample.py | 12 +- .../prepro_grains/rough_box_polyg/command.py | 19 +- .../rough_box_polyg/gen_sample.py | 12 +- .../Pre/prepro_grains/smooth_box/command.py | 19 +- .../prepro_grains/smooth_box/gen_sample.py | 12 +- .../square_lattice/gen_sample.py | 12 +- .../triangular_lattice/gen_sample.py | 12 +- .../prepro_mesh2D/test_2blocks/gen_sample.py | 30 +- .../test_2blocks_exploded/gen_sample.py | 16 +- .../test_4T3_exploded/gen_sample.py | 10 +- .../prepro_mesh2D/test_beamT3/gen_sample.py | 6 +- .../test_maillage_mixte/gen_sample.py | 32 +- .../prepro_mesh2D/test_taylorQ8/gen_sample.py | 8 +- examples/Pre/prepro_mesh3D/readVtu/command.py | 185 + .../Pre/prepro_mesh3D/readVtu/gen_sample.py | 145 + .../prepro_mesh3D/readVtu/mesh/cube_h20.vtu | 134 + .../prepro_mesh3D/readVtu/mesh/cube_h8.vtu | 26 + .../prepro_mesh3D/readVtu/mesh/cube_pri15.vtu | 34 + .../prepro_mesh3D/readVtu/mesh/cube_pri6.vtu | 34 + .../prepro_mesh3D/readVtu/mesh/cube_te10.vtu | 423 + .../prepro_mesh3D/readVtu/mesh/cube_te4.vtu | 26 + .../wall2D/2_briques_cablees/gen_sample.py | 12 +- .../wall2D/cisaillement_mur/CHARGE/command.py | 30 +- .../cisaillement_mur/CHARGE/gen_sample.py | 44 +- .../wall2D/cisaillement_mur/CISAI/command.py | 28 +- .../cisaillement_mur/CISAI/gen_sample.py | 48 +- .../test_deformable_bricks/gen_sample.py | 16 +- .../gen_sample.py | 26 +- .../wall2D/test_rigid_bricks/gen_sample.py | 12 +- .../wall3D/2_briques_cablees/gen_sample.py | 12 +- .../wall3D/extrude_rigid_bricks/gen_sample.py | 14 +- .../wall3D/test_boutisse_simple/gen_sample.py | 12 +- .../wall3D/test_chant_simple/gen_sample.py | 12 +- .../test_paneresse_double/gen_sample.py | 12 +- examples/README.md | 2 +- examples/RIGID_2D/1DK_BoxJC/gen_sample.py | 12 +- examples/RIGID_2D/DISKx_Vther/gen_sample.py | 16 +- examples/RIGID_2D/POLYG_Vther/gen_sample.py | 10 +- .../RIGID_2D/SourcePointPL_BoxJC/command.py | 11 +- .../arche_plein_ceintre_2D/gen_sample.py | 14 +- examples/RIGID_2D/arche_shrink/command.py | 140 + examples/RIGID_2D/arche_shrink/gen_sample.py | 118 + examples/RIGID_2D/arche_shrink/geometrie.dat | 13 + examples/RIGID_2D/poteau_shrink/command.py | 142 + examples/RIGID_2D/poteau_shrink/gen_sample.py | 94 + examples/RIGID_2D/siloDK_hoperJC/command.py | 4 +- examples/RIGID_3D/1SP_BoxPL/gen_sample.py | 16 +- .../2_PR_TH_CZM/command-Pprogressif.py | 5 +- examples/RIGID_3D/2_PR_TH_CZM/gen_sample_I.py | 20 +- .../RIGID_3D/2_PR_TH_CZM/gen_sample_II.py | 20 +- .../RIGID_3D/2_PR_TH_CZM/gen_sample_mixte.py | 22 +- examples/RIGID_3D/3_briques/gen_sample.py | 14 +- examples/RIGID_3D/Colonne_PR/gen_sample.py | 20 +- .../RIGID_3D/Depot_SPSP_perio/gen_sample.py | 18 +- .../RIGID_3D/POLYF/RockMass/all_resobloc.py | 67 +- examples/RIGID_3D/POLYF/RockMass/command.py | 12 +- examples/RIGID_3D/POLYF/Vault/command.py | 2 +- .../RIGID_3D/POLYF/Vault/gen_with_gmsh.py | 138 +- .../arche_plein_ceintre_3D/command.py | 6 +- .../arche_plein_ceintre_3D/gen_sample.py | 14 +- examples/RIGID_3D/donut/gen_sample.py | 6 +- examples/RIGID_3D/donut_skin/gen_sample.py | 6 +- examples/RIGID_3D/lego/command.py | 158 + examples/RIGID_3D/lego/gen_sample.py | 84 + examples/RIGID_3D/lego/lego.msh | 13255 ++++++++++++++++ .../Tutorials/pre/DK_BoxJC/DK_BoxJC.ipynb | 2 +- examples/Tutorials/pre/Masonry/Masonry.ipynb | 4 +- .../Tutorials/pre/avatar/RigidAvatar.ipynb | 2 +- .../Tutorials/pre/deposit/Deposit2D.ipynb | 2 +- .../Tutorials/pre/granulo/granulometry.ipynb | 2 +- examples/Tutorials/pre/mbs/command.py | 178 + examples/Tutorials/pre/mbs/pendulum.ipynb | 322 + examples/Tutorials/pre/mbs/shovel-crank.ipynb | 441 + examples/Tutorials/pre/mbs/slider-crank.ipynb | 377 + examples/Tutorials/pre/mesh/2Dbasic.ipynb | 2 +- examples/Tutorials/pre/mesh/2Dcontact.ipynb | 2 +- examples/Tutorials/pre/mesh/mesh.ipynb | 2 +- examples/Tutorials/python/Basis.ipynb | 4 +- .../2Q4-traction/DATBOX/BODIES.DAT | 29 - .../2Q4-traction/DATBOX/BULK_BEHAV.DAT | 31 - .../2Q4-traction/DATBOX/COMMAND.DAT | 196 - .../mecaMAILx_2D/2Q4-traction/DATBOX/DOF.INI | 4 - .../2Q4-traction/DATBOX/DRV_DOF.DAT | 32 - .../mecaMAILx_2D/2Q4-traction/DATBOX/GPV.INI | 5 - .../2Q4-traction/DATBOX/MODELS.DAT | 32 - .../2Q4-traction/DATBOX/POSTPRO.DAT | 20 - .../2Q4-traction/DATBOX/TACT_BEHAV.DAT | 42 - .../2Q4-traction/DATBOX/Vloc_Rloc.INI | 5 - .../2Q4-traction/all_cohesive_laws.py | 227 + examples/mecaMAILx_2D/2Q4-traction/command.py | 37 +- .../mecaMAILx_2D/2Q4-traction/display_laws.py | 65 + .../mecaMAILx_2D/2Q4-traction/draw_abp_czm.py | 117 - .../mecaMAILx_2D/2Q4-traction/draw_mac_czm.py | 78 - .../mecaMAILx_2D/2Q4-traction/draw_mal_czm.py | 86 - .../mecaMAILx_2D/2Q4-traction/draw_th_czm.py | 111 - .../mecaMAILx_2D/2Q4-traction/gen_sample.py | 107 + examples/mecaMAILx_2D/Rocking/all.py | 16 +- examples/mecaMAILx_2D/Rocking/gen_sample.py | 2 +- .../mecaMAILx_2D/autocontact/gen_sample.py | 16 +- .../mecaMAILx_2D/dilatation/gen_sample.py | 8 +- .../dilatation_umat/gen_sample.py | 8 +- examples/mecaMAILx_2D/extrusion/gen_sample.py | 16 +- examples/mecaMAILx_2D/mur/command.py | 2 + examples/mecaMAILx_2D/poutre/gen_sample.py | 12 +- .../mecaMAILx_2D/taylor/DATBOX/TACT_BEHAV.DAT | 8 - examples/mecaMAILx_2D/taylor/command.py | 2 +- .../2H8_traction/DATBOX/BODIES.DAT | 35 - .../2H8_traction/DATBOX/COMMAND.DAT | 196 - .../mecaMAILx_3D/2H8_traction/DATBOX/DOF.INI | 4 - .../2H8_traction/DATBOX/DRV_DOF.DAT | 59 - .../mecaMAILx_3D/2H8_traction/DATBOX/GPV.INI | 5 - .../2H8_traction/DATBOX/MODELS.DAT | 32 - .../2H8_traction/DATBOX/POSTPRO.DAT | 20 - .../2H8_traction/DATBOX/TACT_BEHAV.DAT | 42 - .../2H8_traction/DATBOX/Vloc_Rloc.INI | 5 - .../2H8_traction/all_cohesive_laws.py | 227 + examples/mecaMAILx_3D/2H8_traction/command.py | 29 +- .../mecaMAILx_3D/2H8_traction/display_laws.py | 65 + .../mecaMAILx_3D/2H8_traction/draw_abp_czm.py | 117 - .../mecaMAILx_3D/2H8_traction/draw_mac_czm.py | 78 - .../mecaMAILx_3D/2H8_traction/draw_mal_czm.py | 86 - .../mecaMAILx_3D/2H8_traction/draw_th_czm.py | 111 - .../mecaMAILx_3D/2H8_traction/gen_sample.py | 107 + examples/mecaMAILx_3D/One_BAR/command.py | 11 +- examples/mecaMAILx_3D/One_BAR/gen_sample.py | 10 +- examples/mecaMAILx_3D/Poutre_BAR/command.py | 11 +- .../mecaMAILx_3D/Poutre_BAR/gen_sample.py | 10 +- examples/mecaMAILx_3D/Taylor3D/gen_sample.py | 14 +- examples/mecaMAILx_3D/cubes/gen_sample.py | 16 +- examples/mecaMAILx_3D/cubes_H8/gen_sample.py | 14 +- .../mecaMAILx_3D/cubetet4_cubetet4/command.py | 3 +- examples/mecaMAILx_RIGID_2D/gard2D/command.py | 6 +- examples/mecaMAILx_RIGID_2D/marble/command.py | 2 +- .../mecaMAILx_RIGID_2D/marble/gen_sample.py | 26 +- examples/mecaMAILx_RIGID_2D/mur_gd/command.py | 4 +- .../mecaMAILx_RIGID_3D/2_briques/command.py | 4 +- .../2_briques/gen_sample.py | 22 +- .../ConfinedCompression/TP_poroMAILx.pdf | Bin 532612 -> 0 bytes .../ConfinedCompression/command.py | 280 +- .../ConfinedCompression/gen_sample.py | 342 +- .../DATBOX/NEOHOOKEAN_EOS.mat | 10 + .../NonConfinedCompression/DATBOX/Vimp_t.txt | 5 + .../NonConfinedCompression/MESH/MeshQ8.msh | 182 + .../NonConfinedCompression/MESH/MeshT6.msh | 242 + .../NonConfinedCompression/command.py | 191 + .../NonConfinedCompression/gen_sample.py | 139 + examples/poroMAILx_2D/Stokes_Tube/command.py | 8 +- .../poroMAILx_2D/Stokes_Tube/gen_sample.py | 43 +- .../ConfinedCompressionGD/command.py | 291 +- .../ConfinedCompressionGD/gen_sample.py | 119 +- .../DATBOX/NEOHOOKEAN.mat | 8 + .../DATBOX/Vimp_t.txt | 4 + .../NonConfinedCompressionGD/MESH/Disc.geo | 274 + .../NonConfinedCompressionGD/MESH/Disc.msh | 3479 ++++ .../NonConfinedCompressionGD/command.py | 188 + .../NonConfinedCompressionGD/gen_sample.py | 62 + examples/therMAILx_1D/Barre1D/gen_sample.py | 10 +- examples/therMAILx_1D/Reseau1D/gen_sample.py | 10 +- .../Reseau_1D_with_Source/gen_sample.py | 10 +- .../therMAILx_2D/cracked_plate/command.py | 178 + .../therMAILx_2D/cracked_plate/gen_sample.py | 301 + examples/therMAILx_2D/cracked_plate/plate.msh | 391 + src/Bindings/CMakeLists.txt | 33 +- src/Bindings/Std_ExternalMBS.f90 | 82 +- src/CMakeLists.txt | 105 +- src/ChiPy/CMakeLists.txt | 44 +- src/ChiPy/Doxyfile_chipy.cfg | 1561 -- src/ChiPy/Doxyfile_chipy.cfg.in | 2421 ++- src/ChiPy/{src => }/IO/CMakeLists.txt | 0 src/ChiPy/{src => }/IO/wrap_parser.f90 | 0 src/ChiPy/{src => }/IO/wrap_parser.h | 0 src/ChiPy/chipy.i.in | 435 +- src/ChiPy/{src => }/contact_2D/CMakeLists.txt | 0 src/ChiPy/{src => }/contact_2D/wrap_CLALp.f90 | 22 + src/ChiPy/{src => }/contact_2D/wrap_CLALp.h | 41 + src/ChiPy/{src => }/contact_2D/wrap_CLJCx.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_CLJCx.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DKALp.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DKALp.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DKDKL.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DKDKL.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DKDKx.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DKDKx.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DKDPx.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DKDPx.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DKJCx.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DKJCx.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DKKDx.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DKKDx.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DKPDx.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DKPDx.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DKPLx.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DKPLx.h | 0 src/ChiPy/{src => }/contact_2D/wrap_DPALp.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_DPALp.h | 0 src/ChiPy/{src => }/contact_2D/wrap_P2P2L.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_P2P2L.h | 0 src/ChiPy/{src => }/contact_2D/wrap_PLALp.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_PLALp.h | 0 src/ChiPy/{src => }/contact_2D/wrap_PLJCx.f90 | 0 src/ChiPy/{src => }/contact_2D/wrap_PLJCx.h | 0 src/ChiPy/{src => }/contact_2D/wrap_PLPLx.f90 | 19 +- src/ChiPy/{src => }/contact_2D/wrap_PLPLx.h | 15 + src/ChiPy/{src => }/contact_2D/wrap_PTPT2.f90 | 18 +- src/ChiPy/{src => }/contact_2D/wrap_PTPT2.h | 11 + .../contact_2D/wrap_interaction_handler.f90 | 0 .../contact_2D/wrap_interaction_handler.h | 0 .../contact_2D/wrap_saladyn_interaction.f90 | 0 .../contact_2D/wrap_saladyn_interaction.h | 0 src/ChiPy/{src => }/contact_3D/CMakeLists.txt | 0 src/ChiPy/{src => }/contact_3D/wrap_CDCDx.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_CDCDx.h | 10 + src/ChiPy/{src => }/contact_3D/wrap_CDPLx.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_CDPLx.h | 0 src/ChiPy/{src => }/contact_3D/wrap_CSASp.f90 | 9 + src/ChiPy/{src => }/contact_3D/wrap_CSASp.h | 18 + src/ChiPy/{src => }/contact_3D/wrap_CSPRx.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_CSPRx.h | 0 src/ChiPy/{src => }/contact_3D/wrap_PRASp.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_PRASp.h | 0 src/ChiPy/{src => }/contact_3D/wrap_PRPLx.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_PRPLx.h | 0 src/ChiPy/{src => }/contact_3D/wrap_PRPRx.f90 | 11 +- src/ChiPy/{src => }/contact_3D/wrap_PRPRx.h | 0 src/ChiPy/{src => }/contact_3D/wrap_PTPT3.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_PTPT3.h | 0 src/ChiPy/{src => }/contact_3D/wrap_SPCDx.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_SPCDx.h | 0 src/ChiPy/{src => }/contact_3D/wrap_SPDCx.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_SPDCx.h | 0 src/ChiPy/{src => }/contact_3D/wrap_SPPLx.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_SPPLx.h | 0 src/ChiPy/{src => }/contact_3D/wrap_SPSPx.f90 | 0 src/ChiPy/{src => }/contact_3D/wrap_SPSPx.h | 0 .../wrap_interaction_handler_3D.f90 | 0 .../contact_3D/wrap_interaction_handler_3D.h | 0 .../wrap_saladyn_interaction_3D.f90 | 0 .../contact_3D/wrap_saladyn_interaction_3D.h | 0 src/ChiPy/{src => }/dummy_source.f90 | 0 src/ChiPy/{src => }/kernel/CMakeLists.txt | 10 + src/ChiPy/{src => }/kernel/wrap_DDM_2D.f90 | 0 src/ChiPy/{src => }/kernel/wrap_DDM_2D.h | 0 src/ChiPy/{src => }/kernel/wrap_DDM_3D.f90 | 0 src/ChiPy/{src => }/kernel/wrap_DDM_3D.h | 0 .../{src => }/kernel/wrap_DDM_ExternalFEM.f90 | 0 .../{src => }/kernel/wrap_DDM_ExternalFEM.h | 0 .../{src => }/kernel/wrap_SiconosNumerics.f90 | 7 +- .../{src => }/kernel/wrap_SiconosNumerics.h | 3 +- src/ChiPy/{src => }/kernel/wrap_cpg.f90 | 0 src/ChiPy/{src => }/kernel/wrap_cpg.h | 0 src/ChiPy/{src => }/kernel/wrap_cpg_3D.f90 | 0 src/ChiPy/{src => }/kernel/wrap_cpg_3D.h | 0 .../kernel/wrap_global_thermal_solver.f90 | 114 + src/ChiPy/kernel/wrap_global_thermal_solver.h | 116 + src/ChiPy/{src => }/kernel/wrap_mp_solver.f90 | 0 src/ChiPy/{src => }/kernel/wrap_mp_solver.h | 0 .../{src => }/kernel/wrap_mp_solver_3D.f90 | 0 .../{src => }/kernel/wrap_mp_solver_3D.h | 0 src/ChiPy/{src => }/kernel/wrap_nlgs.f90 | 0 src/ChiPy/{src => }/kernel/wrap_nlgs.h | 0 src/ChiPy/{src => }/kernel/wrap_nlgs_3D.f90 | 0 src/ChiPy/{src => }/kernel/wrap_nlgs_3D.h | 0 .../{src => }/kernel/wrap_nlgs_newint.f90 | 0 src/ChiPy/{src => }/kernel/wrap_nlgs_newint.h | 0 .../{src => }/kernel/wrap_nlgs_newint_3D.f90 | 0 .../{src => }/kernel/wrap_nlgs_newint_3D.h | 0 src/ChiPy/{src => }/macro/__init__.py | 0 src/ChiPy/{src => }/macro/__init__.py.in | 0 src/ChiPy/{src => }/macro/chipy.py | 19 +- src/ChiPy/{src => }/macro/config.py | 0 src/ChiPy/{src => }/macro/ddm_utils.py | 13 +- src/ChiPy/{src => }/macro/new_arch_post.py | 0 .../{src => }/macro/new_arch_post_utils.py | 0 src/ChiPy/{src => }/macro/preconW.py | 0 src/ChiPy/{src => }/macro/vtk_display.py | 349 +- src/ChiPy/{src => }/mailx/CMakeLists.txt | 0 src/ChiPy/{src => }/mailx/wrap_ALpxx.f90 | 0 src/ChiPy/{src => }/mailx/wrap_ALpxx.h | 0 src/ChiPy/{src => }/mailx/wrap_ASpxx.f90 | 0 src/ChiPy/{src => }/mailx/wrap_ASpxx.h | 0 src/ChiPy/{src => }/mailx/wrap_CLxxx.f90 | 0 src/ChiPy/{src => }/mailx/wrap_CLxxx.h | 0 src/ChiPy/{src => }/mailx/wrap_CSxxx.f90 | 0 src/ChiPy/{src => }/mailx/wrap_CSxxx.h | 0 src/ChiPy/{src => }/mailx/wrap_DISKL.f90 | 0 src/ChiPy/{src => }/mailx/wrap_DISKL.h | 0 src/ChiPy/{src => }/mailx/wrap_MAILx.f90 | 0 src/ChiPy/{src => }/mailx/wrap_MAILx.h | 0 src/ChiPy/{src => }/mailx/wrap_PT2DL.f90 | 0 src/ChiPy/{src => }/mailx/wrap_PT2DL.h | 0 src/ChiPy/{src => }/mailx/wrap_mecaMAILx.f90 | 0 src/ChiPy/{src => }/mailx/wrap_mecaMAILx.h | 0 src/ChiPy/{src => }/mailx/wrap_multiMAILx.f90 | 0 src/ChiPy/{src => }/mailx/wrap_multiMAILx.h | 0 src/ChiPy/{src => }/mailx/wrap_poroMAILx.f90 | 64 + src/ChiPy/{src => }/mailx/wrap_poroMAILx.h | 59 + src/ChiPy/{src => }/mailx/wrap_therMAILx.f90 | 1 + src/ChiPy/{src => }/mailx/wrap_therMAILx.h | 2 +- src/ChiPy/{src => }/mainpage.h | 0 src/ChiPy/make_chipy_docstring.py | 28 +- src/ChiPy/mbs/CMakeLists.txt | 30 + src/ChiPy/mbs/wrap_mbs2D.f90 | 225 + src/ChiPy/mbs/wrap_mbs2D.h | 235 + .../mbs/wrap_mbs.f90 => mbs/wrap_mbs3D.f90} | 73 +- .../{src/mbs/wrap_mbs.h => mbs/wrap_mbs3D.h} | 105 +- src/ChiPy/{src => }/melimelo/CMakeLists.txt | 0 .../{src => }/melimelo/wrap_melimelo.f90 | 0 src/ChiPy/{src => }/melimelo/wrap_melimelo.h | 0 src/ChiPy/{src => }/melimelo/wrap_visitor.f90 | 0 src/ChiPy/{src => }/melimelo/wrap_visitor.h | 0 src/ChiPy/{src => }/post/CMakeLists.txt | 0 src/ChiPy/{src => }/post/wrap_display_3D.f90 | 0 src/ChiPy/{src => }/post/wrap_display_3D.h | 0 src/ChiPy/{src => }/post/wrap_post2D.f90 | 0 src/ChiPy/{src => }/post/wrap_post2D.h | 0 src/ChiPy/{src => }/post/wrap_post3D.f90 | 0 src/ChiPy/{src => }/post/wrap_post3D.h | 0 src/ChiPy/{src => }/post/wrap_postpro.f90 | 16 +- src/ChiPy/{src => }/post/wrap_postpro.h | 11 + src/ChiPy/{src => }/post/wrap_postpro_3D.f90 | 0 src/ChiPy/{src => }/post/wrap_postpro_3D.h | 0 src/ChiPy/{src => }/pre_tools/CMakeLists.txt | 0 src/ChiPy/{src => }/pre_tools/wrap_cut2D.f90 | 0 src/ChiPy/{src => }/pre_tools/wrap_cut2D.h | 0 .../{src => }/pre_tools/wrap_deposit2D.f90 | 2 +- .../{src => }/pre_tools/wrap_deposit2D.h | 0 src/ChiPy/pre_tools/wrap_deposit3D.f90 | 441 + src/ChiPy/pre_tools/wrap_deposit3D.h | 163 + src/ChiPy/{src => }/pre_tools/wrap_mesh2D.f90 | 0 src/ChiPy/{src => }/pre_tools/wrap_mesh2D.h | 0 .../{src => }/pre_tools/wrap_surface_T3.f90 | 0 .../{src => }/pre_tools/wrap_surface_T3.h | 0 src/ChiPy/{src => }/rigid_2D/CMakeLists.txt | 0 src/ChiPy/{src => }/rigid_2D/wrap_DISKx.f90 | 16 +- src/ChiPy/{src => }/rigid_2D/wrap_DISKx.h | 17 + src/ChiPy/{src => }/rigid_2D/wrap_DISPx.f90 | 14 + src/ChiPy/{src => }/rigid_2D/wrap_DISPx.h | 17 + src/ChiPy/{src => }/rigid_2D/wrap_JONCx.f90 | 43 +- src/ChiPy/{src => }/rigid_2D/wrap_JONCx.h | 17 + src/ChiPy/{src => }/rigid_2D/wrap_POLYG.f90 | 14 + src/ChiPy/{src => }/rigid_2D/wrap_POLYG.h | 17 + src/ChiPy/{src => }/rigid_2D/wrap_PT2Dx.f90 | 14 + src/ChiPy/{src => }/rigid_2D/wrap_PT2Dx.h | 17 + src/ChiPy/{src => }/rigid_2D/wrap_RBDY2.f90 | 44 +- src/ChiPy/{src => }/rigid_2D/wrap_RBDY2.h | 65 +- src/ChiPy/{src => }/rigid_2D/wrap_xKSID.f90 | 14 + src/ChiPy/{src => }/rigid_2D/wrap_xKSID.h | 17 + src/ChiPy/{src => }/rigid_2D/wrap_xPSID.f90 | 14 + src/ChiPy/{src => }/rigid_2D/wrap_xPSID.h | 17 + src/ChiPy/{src => }/rigid_3D/CMakeLists.txt | 0 src/ChiPy/{src => }/rigid_3D/wrap_CYLND.f90 | 0 src/ChiPy/{src => }/rigid_3D/wrap_CYLND.h | 0 src/ChiPy/{src => }/rigid_3D/wrap_DNLYC.f90 | 0 src/ChiPy/{src => }/rigid_3D/wrap_DNLYC.h | 0 src/ChiPy/{src => }/rigid_3D/wrap_PLANx.f90 | 0 src/ChiPy/{src => }/rigid_3D/wrap_PLANx.h | 0 src/ChiPy/{src => }/rigid_3D/wrap_POLYR.f90 | 0 src/ChiPy/{src => }/rigid_3D/wrap_POLYR.h | 0 src/ChiPy/{src => }/rigid_3D/wrap_PT3Dx.f90 | 0 src/ChiPy/{src => }/rigid_3D/wrap_PT3Dx.h | 2 +- src/ChiPy/{src => }/rigid_3D/wrap_RBDY3.f90 | 7 +- src/ChiPy/{src => }/rigid_3D/wrap_RBDY3.h | 14 +- src/ChiPy/{src => }/rigid_3D/wrap_SPHER.f90 | 0 src/ChiPy/{src => }/rigid_3D/wrap_SPHER.h | 0 src/ChiPy/{src => }/shared/CMakeLists.txt | 0 .../{src => }/shared/wrap_ExternalModels.f90 | 0 .../{src => }/shared/wrap_ExternalModels.h | 0 src/ChiPy/{src => }/shared/wrap_a_EF.f90 | 0 src/ChiPy/{src => }/shared/wrap_a_EF.h | 0 src/ChiPy/{src => }/shared/wrap_afterall.f90 | 0 src/ChiPy/{src => }/shared/wrap_afterall.h | 0 .../{src => }/shared/wrap_bulk_behav.f90 | 0 src/ChiPy/{src => }/shared/wrap_bulk_behav.h | 0 src/ChiPy/{src => }/shared/wrap_models.f90 | 0 src/ChiPy/{src => }/shared/wrap_models.h | 0 src/ChiPy/{src => }/shared/wrap_overall.f90 | 0 src/ChiPy/{src => }/shared/wrap_overall.h | 0 .../{src => }/shared/wrap_parameters.f90 | 0 src/ChiPy/{src => }/shared/wrap_parameters.h | 0 .../{src => }/shared/wrap_tact_behav.f90 | 0 src/ChiPy/{src => }/shared/wrap_tact_behav.h | 0 src/ChiPy/{src => }/shared/wrap_timer.f90 | 0 src/ChiPy/{src => }/shared/wrap_timer.h | 0 src/ChiPy/{src => }/shared/wrap_utilities.f90 | 20 + src/ChiPy/{src => }/shared/wrap_utilities.h | 24 +- src/ChiPy/{src => }/simulation/CMakeLists.txt | 0 src/ChiPy/{src => }/simulation/wrap_hdfio.f90 | 0 src/ChiPy/{src => }/simulation/wrap_hdfio.h | 0 .../{src => }/simulation/wrap_integrator.f90 | 0 .../{src => }/simulation/wrap_integrator.h | 0 .../simulation/wrap_interaction_handler.f90 | 0 .../simulation/wrap_interaction_handler.h | 0 .../simulation/wrap_model_handler.f90 | 0 .../{src => }/simulation/wrap_model_handler.h | 0 .../simulation/wrap_nlgs_newarch.f90 | 0 .../{src => }/simulation/wrap_nlgs_newarch.h | 0 src/ChiPy/{src => }/simulation/wrap_soe.f90 | 0 src/ChiPy/{src => }/simulation/wrap_soe.h | 0 src/ChiPy/src/CMakeLists.txt | 29 - src/ChiPy/src/mbs/CMakeLists.txt | 23 - src/ChiPy/src/pre_tools/wrap_deposit3D.f90 | 420 - src/ChiPy/src/pre_tools/wrap_deposit3D.h | 163 - src/ChiPy/{src => }/user/CMakeLists.txt | 2 +- src/ChiPy/{src => }/user/wrap_user.f90 | 0 src/ChiPy/{src => }/user/wrap_user.h | 0 src/ChiPy/utils/wrap_free.f90 | 8 +- src/ChiPy/{src => }/wrap_GGCxx.f90 | 0 src/Core/CMakeLists.txt | 31 +- src/Core/{src => }/IO/CMakeLists.txt | 0 src/Core/{src => }/IO/mod_IO.f90 | 0 src/Core/{src => }/IO/mod_parser.f90 | 0 src/Core/{src => }/contact_2D/CMakeLists.txt | 14 +- src/Core/{src => }/contact_2D/mod_CLALp.f90 | 509 +- src/Core/{src => }/contact_2D/mod_CLJCx.f90 | 543 +- src/Core/{src => }/contact_2D/mod_DKALp.f90 | 365 +- src/Core/{src => }/contact_2D/mod_DKDKL.f90 | 385 +- src/Core/{src => }/contact_2D/mod_DKDKx.f90 | 431 +- src/Core/{src => }/contact_2D/mod_DKDPx.f90 | 385 +- src/Core/{src => }/contact_2D/mod_DKJCx.f90 | 635 +- src/Core/{src => }/contact_2D/mod_DKKDx.f90 | 391 +- src/Core/{src => }/contact_2D/mod_DKPDx.f90 | 381 +- src/Core/{src => }/contact_2D/mod_DKPLx.f90 | 614 +- src/Core/{src => }/contact_2D/mod_DPALp.f90 | 359 +- src/Core/{src => }/contact_2D/mod_P2P2L.f90 | 457 +- src/Core/{src => }/contact_2D/mod_PLALp.f90 | 621 +- src/Core/{src => }/contact_2D/mod_PLJCx.f90 | 644 +- src/Core/{src => }/contact_2D/mod_PLPLx.f90 | 757 +- src/Core/{src => }/contact_2D/mod_PTPT2.f90 | 443 +- src/Core/contact_2D/mod_inter_meca2D.f90 | 93 + src/Core/{src => }/contact_3D/CMakeLists.txt | 1 + src/Core/{src => }/contact_3D/mod_CDCDx.f90 | 243 +- src/Core/{src => }/contact_3D/mod_CDPLx.f90 | 343 +- src/Core/{src => }/contact_3D/mod_CSASp.f90 | 288 +- src/Core/{src => }/contact_3D/mod_CSPRx.f90 | 319 +- src/Core/{src => }/contact_3D/mod_PRASp.f90 | 301 +- src/Core/{src => }/contact_3D/mod_PRPLx.f90 | 435 +- src/Core/{src => }/contact_3D/mod_PRPRx.f90 | 716 +- src/Core/{src => }/contact_3D/mod_PTPT3.f90 | 334 +- src/Core/{src => }/contact_3D/mod_SPCDx.f90 | 241 +- src/Core/{src => }/contact_3D/mod_SPDCx.f90 | 242 +- src/Core/{src => }/contact_3D/mod_SPPLx.f90 | 342 +- src/Core/{src => }/contact_3D/mod_SPSPx.f90 | 402 +- src/Core/contact_3D/mod_inter_meca3D.f90 | 94 + .../{src => }/contactor_2D/CMakeLists.txt | 9 +- src/Core/{src => }/contactor_2D/mod_ALpxx.f90 | 33 +- src/Core/{src => }/contactor_2D/mod_CLxxx.f90 | 19 +- src/Core/{src => }/contactor_2D/mod_DISKL.f90 | 6 +- src/Core/{src => }/contactor_2D/mod_DISKx.f90 | 17 +- src/Core/{src => }/contactor_2D/mod_DISPx.f90 | 4 +- src/Core/{src => }/contactor_2D/mod_JONCx.f90 | 198 +- src/Core/{src => }/contactor_2D/mod_POLYG.f90 | 174 +- src/Core/{src => }/contactor_2D/mod_PT2DL.f90 | 0 src/Core/{src => }/contactor_2D/mod_PT2Dx.f90 | 51 +- src/Core/{src => }/contactor_2D/mod_xKSID.f90 | 4 +- src/Core/{src => }/contactor_2D/mod_xPSID.f90 | 8 +- .../{src => }/contactor_3D/CMakeLists.txt | 4 +- src/Core/{src => }/contactor_3D/mod_ASpxx.f90 | 2 +- src/Core/{src => }/contactor_3D/mod_CSxxx.f90 | 4 +- src/Core/{src => }/contactor_3D/mod_CYLND.f90 | 2 +- src/Core/{src => }/contactor_3D/mod_DNLYC.f90 | 2 +- src/Core/{src => }/contactor_3D/mod_PLANx.f90 | 94 +- src/Core/{src => }/contactor_3D/mod_POLYR.f90 | 197 +- src/Core/{src => }/contactor_3D/mod_PT3Dx.f90 | 5 +- src/Core/{src => }/contactor_3D/mod_SPHER.f90 | 5 +- src/Core/{src => }/contactor_3D/mod_xSpxx.f90 | 0 src/Core/{src => }/contribs/CMakeLists.txt | 7 +- src/Core/{src => }/contribs/ann.cpp | 0 src/Core/{src => }/contribs/ann.h | 0 src/Core/{src => }/contribs/exception.c | 0 src/Core/{src => }/contribs/exception.h | 0 src/Core/{src => }/contribs/mod_ann.f90 | 0 src/Core/{src => }/contribs/mod_exception.f90 | 0 .../{src => }/contribs/mod_predicates.f90 | 0 src/Core/{src => }/contribs/mod_rtree.f90 | 0 src/Core/{src => }/contribs/tst_ann.f90 | 0 src/Core/{src => }/contribs/tst_exception.c | 0 .../{src => }/contribs/tst_predicates.f90 | 0 src/Core/{src => }/contribs/tst_rtree.f90 | 0 src/Core/interactions/CMakeLists.txt | 12 + src/Core/interactions/mod_interactions.f90 | 1972 +++ src/Core/interactions/mod_interactions.f90.py | 207 + src/Core/interactions/mod_interactions_3D.f90 | 1430 ++ .../interactions/mod_interactions_3D.f90.py | 267 + .../interactions/mod_interactions_utils.py | 271 + src/Core/{src => }/kernel/CMakeLists.txt | 11 + .../{src => }/kernel/inc_interaction_law.f90 | 0 .../{src => }/kernel/inc_nlgs_new_int.f90 | 10 +- src/Core/{src => }/kernel/mod_DDM_2D.f90 | 7 +- src/Core/{src => }/kernel/mod_DDM_3D.f90 | 0 .../{src => }/kernel/mod_DDM_ExternalFEM.f90 | 0 .../{src => }/kernel/mod_SiconosNumerics.f90 | 77 +- .../{src => }/kernel/mod_ThermalSolver.f90 | 8 +- src/Core/{src => }/kernel/mod_cpg.f90 | 744 +- src/Core/{src => }/kernel/mod_cpg_3D.f90 | 0 src/Core/kernel/mod_global_thermal_solver.f90 | 762 + .../kernel/mod_interaction_law_2D.f90 | 4 +- .../kernel/mod_interaction_law_3D.f90 | 4 +- src/Core/{src => }/kernel/mod_md_3D.f90 | 0 src/Core/{src => }/kernel/mod_mp_solver.f90 | 572 +- .../{src => }/kernel/mod_mp_solver_3D.f90 | 404 +- src/Core/{src => }/kernel/mod_nlgs.f90 | 1837 +-- src/Core/{src => }/kernel/mod_nlgs_3D.f90 | 1253 +- src/Core/{src => }/kernel/mod_nlgs_newint.f90 | 2 +- .../{src => }/kernel/mod_nlgs_newint_3D.f90 | 2 +- src/Core/{src => }/mailx/CMakeLists.txt | 9 +- src/Core/{src => }/mailx/EF_utilities.f90 | 0 src/Core/{src => }/mailx/mod_MAILx.f90 | 306 +- .../{src => }/mailx/mod_a_BDARY_ALpxx.f90 | 0 .../{src => }/mailx/mod_a_BDARY_CLxxx.f90 | 0 .../{src => }/mailx/mod_a_BDARY_DISKL.f90 | 0 .../{src => }/mailx/mod_a_BDARY_POLYD.f90 | 0 .../{src => }/mailx/mod_a_BDARY_PT2DL.f90 | 0 .../{src => }/mailx/mod_a_BDARY_xSpxx.f90 | 0 .../{src => }/mailx/mod_a_genericEF_iso.f90 | 8 +- src/Core/{src => }/mailx/mod_a_mecaEF.f90 | 0 src/Core/{src => }/mailx/mod_a_mecaEF_bar.f90 | 8 +- .../{src => }/mailx/mod_a_mecaEF_discrete.f90 | 0 src/Core/{src => }/mailx/mod_a_mecaEF_iso.f90 | 23 +- src/Core/{src => }/mailx/mod_a_mecaEF_shb.f90 | 470 +- .../{src => }/mailx/mod_a_mecaEF_shell.f90 | 0 src/Core/{src => }/mailx/mod_a_multiEF.f90 | 3 +- .../{src => }/mailx/mod_a_multiEF_iso.f90 | 2 +- src/Core/{src => }/mailx/mod_a_poroEF.f90 | 5 +- src/Core/{src => }/mailx/mod_a_poroEF_iso.f90 | 258 +- src/Core/{src => }/mailx/mod_a_therEF.f90 | 8 +- src/Core/{src => }/mailx/mod_a_therEF_bar.f90 | 59 +- src/Core/{src => }/mailx/mod_a_therEF_iso.f90 | 225 +- src/Core/{src => }/mailx/mod_mecaMAILx.f90 | 621 +- src/Core/{src => }/mailx/mod_multiMAILx.f90 | 62 +- src/Core/{src => }/mailx/mod_poroMAILx.f90 | 291 +- src/Core/{src => }/mailx/mod_therMAILx.f90 | 316 +- .../{src => }/mailx/test_genericEF_iso.f90 | 16 +- src/Core/mbs/CMakeLists.txt | 32 + src/Core/mbs/mod_mbs2D.f90 | 984 ++ .../mbs/mod_mbs.f90 => mbs/mod_mbs3D.f90} | 307 +- src/Core/mbs/tst_mbs_2D.f90 | 62 + .../mbs/tst_mbs.f90 => mbs/tst_mbs_3D.f90} | 2 +- src/Core/{src => }/melimelo/CMakeLists.txt | 0 src/Core/{src => }/melimelo/README | 0 src/Core/{src => }/melimelo/melimelo.f90 | 0 src/Core/{src => }/melimelo/mod_avatar.f90 | 0 .../melimelo/mod_avatar_container.f90 | 0 src/Core/{src => }/melimelo/mod_blmty.f90 | 0 src/Core/{src => }/melimelo/mod_drvdofty.f90 | 0 src/Core/{src => }/melimelo/mod_entity.f90 | 0 .../melimelo/mod_entity_container.f90 | 0 src/Core/{src => }/melimelo/mod_initvalty.f90 | 0 src/Core/{src => }/melimelo/mod_nodty.f90 | 0 src/Core/{src => }/melimelo/mod_tacty.f90 | 0 src/Core/{src => }/melimelo/mod_visitor.f90 | 0 src/Core/{src => }/melimelo/tst_avatar.f90 | 0 .../{src => }/melimelo/tst_bulk_visit.f90 | 0 .../interaction_methods.f90 | 0 .../interaction_type.f90 | 0 .../mod_interaction.f90 | 0 .../mod_interaction_3D.f90 | 0 .../mod_interaction_handler.f90 | 0 .../mod_interaction_handler_3D.f90 | 0 .../mod_newarch_interaction.f90 | 0 src/Core/{src => }/parameters/CMakeLists.txt | 0 .../parameters/mod_integrator_parameters.f90 | 0 .../parameters/mod_mdl_hdl_parameters.f90 | 0 .../parameters/mod_no_mdl_hdl_parameters.f90 | 0 src/Core/{src => }/post/CMakeLists.txt | 4 +- .../{src => }/post/gmshwrite/CMakeLists.txt | 0 .../{src => }/post/gmshwrite/fgmshwrite.c | 0 src/Core/{src => }/post/gmshwrite/gmshwrite.c | 0 src/Core/{src => }/post/gmshwrite/gmshwrite.h | 0 .../{src => }/post/gmvwrite/CMakeLists.txt | 0 src/Core/{src => }/post/gmvwrite/makefile_noC | 0 .../post/gmvwrite/mod_f90gmvwrite_noC.f90 | 0 .../post/gmvwrite/old_with_C/gmvwrite.c | 0 .../post/gmvwrite/old_with_C/gmvwrite.h | 0 .../post/gmvwrite/old_with_C/gmvwritef.c | 0 .../gmvwrite/old_with_C/mod_f90gmvwrite.f90 | 0 src/Core/{src => }/post/mod_geompack.f90 | 0 .../{src => }/post/mod_gmsh_display_3D.f90 | 0 .../{src => }/post/mod_gmv_display_3D.f90 | 0 src/Core/{src => }/post/mod_post2D.f90 | 1358 +- src/Core/{src => }/post/mod_post3D.f90 | 365 +- src/Core/{src => }/post/mod_postpro_2D.f90 | 2629 ++- src/Core/{src => }/post/mod_postpro_3D.f90 | 1520 +- .../{src => }/post/mod_vtk_display_3D.f90 | 0 .../{src => }/post/vtkwrite/CMakeLists.txt | 0 .../{src => }/post/vtkwrite/LIB_VTK_IO.f90 | 0 .../post/vtkwrite/LIB_VTK_IO_Guide.pdf | Bin .../post/vtkwrite/full_LIB_VTK_IO.f90 | 0 src/Core/{src => }/pre_tools/CMakeLists.txt | 3 +- src/Core/{src => }/pre_tools/doxygen.cfg | 0 .../{src => }/pre_tools/mod_a_surface_T3.f90 | 0 src/Core/{src => }/pre_tools/mod_cut2D.f90 | 3 - .../{src => }/pre_tools/mod_deposit2D.f90 | 23 +- src/Core/pre_tools/mod_deposit3D.f90 | 2018 +++ src/Core/{src => }/pre_tools/mod_mesh2D.f90 | 0 src/Core/{src => }/rigid_2D/CMakeLists.txt | 0 src/Core/{src => }/rigid_2D/mod_RBDY2.f90 | 190 +- .../{src => }/rigid_2D/mod_a_BDARY_DISKx.f90 | 5 +- .../{src => }/rigid_2D/mod_a_BDARY_DISPx.f90 | 3 +- .../{src => }/rigid_2D/mod_a_BDARY_JONCx.f90 | 7 +- src/Core/rigid_2D/mod_a_BDARY_POLYG.f90 | 227 + .../{src => }/rigid_2D/mod_a_BDARY_PT2Dx.f90 | 0 .../{src => }/rigid_2D/mod_a_BDARY_xKSID.f90 | 3 +- .../{src => }/rigid_2D/mod_a_BDARY_xPSID.f90 | 4 +- src/Core/{src => }/rigid_3D/CMakeLists.txt | 0 src/Core/{src => }/rigid_3D/mod_RBDY3.f90 | 80 +- .../{src => }/rigid_3D/mod_a_BDARY_CYLND.f90 | 9 +- .../{src => }/rigid_3D/mod_a_BDARY_DNLYC.f90 | 7 +- .../{src => }/rigid_3D/mod_a_BDARY_PLANx.f90 | 0 .../{src => }/rigid_3D/mod_a_BDARY_POLYR.f90 | 0 .../{src => }/rigid_3D/mod_a_BDARY_PT3Dx.f90 | 9 +- .../{src => }/rigid_3D/mod_a_BDARY_SPHER.f90 | 13 +- src/Core/{src => }/shared/CMakeLists.txt | 13 +- .../{src => }/shared/mod_DiscreteGeometry.f90 | 66 +- src/Core/{src => }/shared/mod_LMGC90_MPI.f90 | 0 .../{src => }/shared/mod_LMGC90_no_MPI.f90 | 0 .../{src => }/shared/mod_RigidKinematic.f90 | 7 +- src/Core/{src => }/shared/mod_a_DOF.f90 | 0 src/Core/{src => }/shared/mod_a_EF.f90 | 4 +- src/Core/{src => }/shared/mod_a_MATRIX.f90 | 0 src/Core/{src => }/shared/mod_a_system.f90 | 291 +- src/Core/{src => }/shared/mod_algebra.f90 | 0 src/Core/{src => }/shared/mod_anonymous.f90 | 0 .../shared/mod_anonymous_container.f90 | 0 .../shared/mod_anonymous_ptr_container.f90 | 0 src/Core/{src => }/shared/mod_bulk_behav.f90 | 0 src/Core/{src => }/shared/mod_face2face.f90 | 0 src/Core/{src => }/shared/mod_models.f90 | 0 .../shared/mod_no_paranoid_checks.f90 | 0 src/Core/shared/mod_ompTimer.f90 | 535 + src/Core/{src => }/shared/mod_overall.f90 | 9 +- src/Core/{src => }/shared/mod_overall.f90-new | 0 src/Core/{src => }/shared/mod_parameters.f90 | 12 +- .../{src => }/shared/mod_paranoid_checks.f90 | 106 +- src/Core/{src => }/shared/mod_renum.f90 | 0 .../{src => }/shared/mod_rough_detections.f90 | 0 src/Core/{src => }/shared/mod_tact_behav.f90 | 316 +- src/Core/{src => }/shared/mod_timer.f90 | 11 +- src/Core/{src => }/shared/mod_utilities.f90 | 51 +- .../{src => }/shared/tst_DiscreteGeometry.f90 | 0 src/Core/{src => }/shared/tst_a_EF.f90 | 0 src/Core/{src => }/shared/tst_a_MATRIX.f90 | 0 src/Core/{src => }/shared/tst_algebra.f90 | 0 .../shared/tst_anonymous_container.f90 | 0 .../shared/tst_anonymous_ptr_container.f90 | 0 .../{src => }/shared/tst_case_vs_gmatrix.f90 | 0 src/Core/{src => }/shared/tst_dictionary.f90 | 0 .../{src => }/shared/tst_paranoid_checks.f90 | 0 .../{src => }/shared/tst_rough_detections.f90 | 0 src/Core/{src => }/simulation/CMakeLists.txt | 0 .../{src => }/simulation/inc_model_mecaFE.f90 | 0 .../{src => }/simulation/inc_model_therFE.f90 | 0 .../{src => }/simulation/mod_contactor.f90 | 0 src/Core/{src => }/simulation/mod_hdfio.f90 | 0 .../{src => }/simulation/mod_integrator.f90 | 0 .../simulation/mod_integrator_list.f90 | 0 .../simulation/mod_interaction_handler.f90 | 0 .../simulation/mod_model_handler.f90 | 0 .../{src => }/simulation/mod_modelization.f90 | 0 .../simulation/mod_nlgs_new_arch.f90 | 2 +- src/Core/{src => }/simulation/mod_soe.f90 | 0 src/Core/{src => }/simulation/mod_state.f90 | 0 src/Core/src/CMakeLists.txt | 28 - src/Core/src/mbs/CMakeLists.txt | 14 - src/Core/src/pre_tools/mod_a_granulo.f90 | 195 - src/Core/src/pre_tools/mod_deposit3D.f90 | 1444 -- src/Core/src/rigid_2D/mod_a_BDARY_POLYG.f90 | 309 - src/Core/templates/contactor_2D.f90 | 261 + .../{src => }/templates/container_methods.f90 | 0 .../{src => }/templates/container_type.f90 | 0 src/Core/{src => }/templates/dictionary.f90 | 0 src/Core/templates/interaction_common.f90 | 13 + src/Core/templates/interaction_methods.f90 | 208 + src/Core/templates/interaction_type.f90 | 339 + .../templates/linkedlist_methods.f90 | 0 .../{src => }/templates/linkedlist_type.f90 | 0 .../templates/pointer_container_methods.f90 | 0 .../templates/pointer_container_type.f90 | 0 src/Docs/CMakeLists.txt | 6 +- src/Docs/doxygen.cfg | 1566 -- src/Docs/doxygen.cfg.in | 2430 ++- src/Docs/sphinx/Pre/CMakeLists.txt | 10 +- src/Docs/sphinx/Pre/source/classes.rst | 112 +- .../sphinx/Pre/source/{conf.py => conf.py.in} | 2 +- src/Docs/sphinx/Pre/source/granular.rst | 8 +- src/Docs/sphinx/Pre/source/interaction.rst | 6 +- src/Docs/sphinx/Pre/source/masonry.rst | 8 +- src/Docs/sphinx/Pre/source/material.rst | 20 +- src/Docs/sphinx/Pre/source/mesh.rst | 43 +- src/Docs/sphinx/Pre/source/miscellaneous.rst | 2 +- src/Docs/sphinx/Pre/source/model.rst | 10 +- src/Docs/sphinx/Pre/source/philosophie.rst | 26 +- src/Docs/sphinx/Pre/source/post.rst | 16 +- .../sphinx/Pre/source/tutorials/granular.py | 10 +- .../sphinx/Pre/source/tutorials/masonry.py | 12 +- .../Pre/source/tutorials/philosophie.py | 24 +- src/Docs/sphinx/Pre/source/visibility.rst | 2 +- src/Docs/sphinx/chipy/CMakeLists.txt | 11 +- .../chipy/source/{conf.py => conf.py.in} | 2 +- src/Docs/sphinx/dev/CMakeLists.txt | 9 +- src/Docs/sphinx/dev/source/cmake.rst | 20 +- .../sphinx/dev/source/{conf.py => conf.py.in} | 1 + src/Docs/sphinx/dev/source/contact_law.rst | 6 +- .../sphinx/dev/source/files/gen_sample.py | 2 +- src/README.md | 180 - src/Sandbox/CMakeLists.txt | 18 + src/Sandbox/Standalone/CMakeLists.txt | 12 + src/Sandbox/Standalone/mod_DDM_MDS_2D.f90 | 2575 +++ src/Sandbox/Standalone/stand_alone.f90 | 1684 ++ src/Sandbox/meca_lib/CMakeLists.txt | 11 + src/Sandbox/meca_lib/dummy.f90 | 23 + src/Sandbox/meca_lib/lmgc90.cfg.in | 8 + src/addons/closePvdFiles | 25 + src/addons/update_gen_2016.py | 122 + src/contribs/CMakeLists.txt | 29 +- src/contribs/MUMPS_5.0.0.tar.gz | Bin 12756632 -> 0 bytes src/contribs/MUMPS_THREADSAFE_4.9.2.tar.gz | Bin 0 -> 7071042 bytes .../MatLib3.2_LMGC/Materials/list_files.cmake | 28 +- .../Materials/matl/meca/Makefile | 2 +- .../AnisotropicHGOFiber1Potential.cpp | 102 + .../AnisotropicHGOFiber1Potential.h | 56 + .../AnisotropicHGOFiber2Potential.cpp | 102 + .../AnisotropicHGOFiber2Potential.h | 56 + .../AnisotropicHGOwithEOS.cpp | 45 + .../anisotropichyper/AnisotropicHGOwithEOS.h | 78 + .../AnisotropicHGOwithoutEOS.cpp | 45 + .../AnisotropicHGOwithoutEOS.h | 77 + .../AnisotropicHyperElasticity.h | 858 + .../meca/anisotropichyper/FiberPotential.h | 58 + .../IsotropicNeohookeanPotential.h | 207 + .../matl/meca/anisotropichyper/Makefile | 103 + .../OsmoticAnisotropicHGOwithEOS.cpp | 45 + .../OsmoticAnisotropicHGOwithEOS.h | 78 + .../OsmoticAnisotropicHGOwithoutEOS.cpp | 45 + .../OsmoticAnisotropicHGOwithoutEOS.h | 77 + .../OsmoticNeohookeanwithEOS.cpp | 45 + .../OsmoticNeohookeanwithEOS.h | 77 + .../OsmoticNeohookeanwithoutEOS.cpp | 45 + .../OsmoticNeohookeanwithoutEOS.h | 76 + .../{DonnanOSMOTIC.cpp => DonnanOsmotic.cpp} | 58 +- .../eos/{DonnanOSMOTIC.h => DonnanOsmotic.h} | 14 +- .../Materials/matl/meca/eos/Makefile | 2 +- .../Materials/matl/meca/eos/Osmotic.h | 56 + .../Materials/matl/meca/eos/StandardEOS.cpp | 10 +- .../Materials/matl/meca/hyper/HGOPotential.h | 10 +- .../matl/meca/hyper/HyperElasticity.h | 140 +- .../matl/meca/hyper/HyperElastoPlasticity.h | 1 - .../Materials/matl/meca/hyper/Makefile | 13 +- .../matl/meca/hyper/MooneyRivlinPotential.h | 2 +- .../matl/meca/hyper/NeohookeanPotential.h | 8 +- .../meca/hyper/NeohookeanSHBPotential.cpp | 45 + .../matl/meca/hyper/NeohookeanSHBPotential.h | 406 + .../matl/meca/hyper/OsmoticNeohookean.cpp | 45 + .../matl/meca/hyper/OsmoticNeohookean.h | 112 + .../matl/meca/hyper/OsmoticNeohookeanEOS.cpp | 2 +- .../matl/meca/hyper/OsmoticNeohookeanEOS.h | 23 +- .../matl/meca/hyper/RubinBodnerPotential.cpp | 45 + .../matl/meca/hyper/RubinBodnerPotential.h | 451 + .../matl/meca/hyper/SaintVenantPotential.h | 2 +- .../Materials/matl/meca/hyper/YeohPotential.h | 26 +- .../meca/hyper/YeohWithoutEOSPotential.cpp | 45 + .../matl/meca/hyper/YeohWithoutEOSPotential.h | 286 + .../linear/IsotropicLinThermalDilatancy.h | 19 +- src/contribs/Mumps_SparseLinearAlgebra.f90 | 7 +- src/contribs/PETSc_SparseLinearAlgebra.f90 | 199 + src/contribs/README | 9 +- .../UMFPackFortranBinding/CMakeLists.txt | 8 + .../UMFPackFortranBinding/umfpackBinding.c | 33 + .../UMFPackFortranBinding/umfpackBinding.h | 18 + src/contribs/UMFPack_SparseLinearAlgebra.f90 | 227 + src/{pre_lmgc => pre}/CMakeLists.txt | 0 src/{pre_lmgc/files => pre/IO}/__init__.py | 4 +- .../bodiesFile.py => pre/IO/bodies2File.py} | 40 +- .../IO/bulkBehav2File.py} | 10 +- .../dofIniFile.py => pre/IO/dofIni2File.py} | 22 +- .../drvDofFile.py => pre/IO/drvDof2File.py} | 22 +- .../IO/evolution2File.py} | 28 +- .../gpvIniFile.py => pre/IO/gpvIni2File.py} | 0 .../IO/melimelo2File.py} | 22 +- .../modelFile.py => pre/IO/model2File.py} | 8 +- .../postproFile.py => pre/IO/postpro2File.py} | 24 +- .../IO/tactBehav2File.py} | 39 +- .../IO/vlocrlocIni2File.py} | 0 src/{pre_lmgc => pre}/README | 0 src/{pre_lmgc => pre}/__init__.py | 24 +- src/{pre_lmgc => pre}/arg_parse.py | 0 src/{pre_lmgc => pre}/avatar/__init__.py | 0 src/{pre_lmgc => pre}/avatar/avatar.py | 171 +- src/{pre_lmgc => pre}/avatar/bulk/__init__.py | 0 src/{pre_lmgc => pre}/avatar/bulk/bulk.py | 54 +- src/{pre_lmgc => pre}/avatar/bulk/element.py | 16 +- src/{pre_lmgc => pre}/avatar/bulk/rigid2d.py | 8 +- src/{pre_lmgc => pre}/avatar/bulk/rigid3d.py | 12 +- src/{pre_lmgc => pre}/avatar/bulks.py | 2 +- .../avatar/contactor/__init__.py | 0 .../avatar/contactor/contactor.py | 34 +- .../avatar/contactor/contactorFactory.py | 204 +- .../avatar/contactor/meshedContactor.py | 176 +- .../avatar/contactor/rigidContactor2D.py | 264 +- .../avatar/contactor/rigidContactor3D.py | 212 +- .../avatar/contactor/rigid_properties_3D.py | 12 +- src/{pre_lmgc => pre}/avatar/contactors.py | 2 +- .../avatar/group/__init__.py | 0 src/{pre_lmgc => pre}/avatar/group/group.py | 8 +- src/{pre_lmgc => pre}/avatar/groups.py | 2 +- src/{pre_lmgc => pre}/avatar/node/__init__.py | 0 src/{pre_lmgc => pre}/avatar/node/dof.py | 34 +- src/{pre_lmgc => pre}/avatar/node/node.py | 40 +- src/{pre_lmgc => pre}/avatar/nodes.py | 2 +- src/{pre_lmgc => pre}/avatars.py | 28 +- .../build_avatar/__init__.py | 2 +- src/{pre_lmgc => pre}/build_avatar/brick.py | 74 +- .../build_avatar/brick_row.py | 8 +- .../build_avatar/brick_wall.py | 8 +- src/pre/build_avatar/entites.py | 4 + .../build_avatar/extrusion.py | 39 +- .../build_avatar/lattices2D.py | 2 +- .../build_avatar/lattices3D.py | 0 src/{pre_lmgc => pre}/build_avatar/lecture.py | 276 +- .../build_avatar/medpre/CMakeLists.txt | 0 .../build_avatar/medpre/__init__.py | 0 .../build_avatar/medpre/lecturemed.py | 8 +- .../build_avatar/medpre/medpre.c | 0 .../build_avatar/medpre/medpre.h | 0 .../build_avatar/medpre/medpre.i | 0 .../build_avatar/melimeloLecture.py | 96 +- src/{pre_lmgc => pre}/build_avatar/mesh.py | 32 +- src/{pre_lmgc => pre}/build_avatar/mesh2D.py | 152 +- src/{pre_lmgc => pre}/build_avatar/mesh3D.py | 128 +- .../build_avatar/old_mesh.py | 49 +- .../build_avatar/particles.py | 517 +- .../build_avatar/tools/__init__.py | 0 .../build_avatar/tools/containers2D.py | 9 +- .../build_avatar/tools/containers3D.py | 90 +- .../build_avatar/tools/granulometry.py | 36 +- src/{pre_lmgc => pre}/build_avatar/walls.py | 159 +- src/{pre_lmgc => pre}/bulk_behavs.py | 2 + src/{pre_lmgc => pre}/config/__init__.py | 1 + src/{pre_lmgc => pre}/config/lmgc90dicts.py | 108 +- src/pre/config/readMeshFormat.py | 37 + src/{pre_lmgc => pre}/doc/Doxyfile | 0 src/{pre_lmgc => pre}/doc/pre_lmgc.pdf | 0 src/{pre_lmgc => pre}/doc/pre_lmgc.tex | 0 src/{pre_lmgc => pre}/models.py | 2 + src/{pre_lmgc => pre}/postpro_commands.py | 0 src/{pre_lmgc => pre}/shared/__init__.py | 0 src/{pre_lmgc => pre}/shared/bulk_behav.py | 28 +- src/{pre_lmgc => pre}/shared/model.py | 38 +- .../shared/postpro_command.py | 70 +- src/{pre_lmgc => pre}/shared/tact_behav.py | 38 +- src/{pre_lmgc => pre}/tact_behavs.py | 0 src/{pre_lmgc => pre}/utilities/__init__.py | 0 .../utilities/check_compiled_modules.py | 0 .../utilities/check_compiled_modules_fake.py | 0 .../utilities/check_compiled_modules_real.py | 2 +- src/{pre_lmgc => pre}/utilities/container.py | 0 src/{pre_lmgc => pre}/utilities/error.py | 0 src/{pre_lmgc => pre}/utilities/nTree.py | 6 +- src/{pre_lmgc => pre}/viz/__init__.py | 0 src/{pre_lmgc => pre}/viz/visuVtk.py | 87 +- src/{pre_lmgc => pre}/viz/vtkContactor.py | 9 +- .../viz/vtkContactorUtils.py | 2 +- src/{pre_lmgc => pre}/viz/winEntities.py | 4 +- src/pre_lmgc/build_avatar/entites.py | 4 - src/pre_lmgc/config/readMeshFormat.py | 49 - src/pre_lmgc/utilities/variables.py | 1 - src/tools/cmake/modules/FindMUMPS.cmake | 111 +- src/tools/cmake/modules/FindNumpy.cmake | 6 +- .../cmake/modules/FindSiconosNumerics.cmake | 2 +- src/tools/cmake/modules/FindUMFPack.cmake | 36 + src/tools/cmake/modules/compilerTuning.cmake | 12 +- .../modules/contribs_compilerTuning.cmake | 19 +- .../cmake/modules/set_revision_number.cmake | 2 +- test/RIGID_2D/1DKPL/command.py | 100 + test/RIGID_2D/1DKPL/gen_sample.py | 92 + 1204 files changed, 73492 insertions(+), 33513 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 docs/Pre/_images/math/034415649a7db35f209020f05e7ab6ac3d6e086b.png create mode 100644 docs/Pre/_images/math/2ea7aebf6e172bdbb4b352fe0520f84304f478e7.png delete mode 100644 docs/Pre/_images/math/389ab841ae16a7cebd461d3c10bda5daa9b232a2.png delete mode 100644 docs/Pre/_images/math/667188468983fb96809cdfaec211b867038325ef.png create mode 100644 docs/Pre/_images/math/a6795d14a31aa864e162da06bcc14d9801cbdc11.png create mode 100644 docs/Pre/_images/math/b39229bb92adf679ebe7aa3a58f330b21d6ed3d5.png create mode 100644 docs/Pre/_images/math/b425d925f1283bab52dde13193ba99f3de20e162.png create mode 100644 docs/Pre/_images/math/cb4e1cb31029f79454cae98fb73221ca8662ea5b.png delete mode 100644 docs/Pre/_images/math/d7f19ed033c8c88a6b4e5c502fe8271c336f971a.png delete mode 100644 docs/Pre/_images/math/ddbf765aa11044bb82b756cb3413f75341a70edf.png create mode 100644 docs/Pre/_images/math/dea7f64cf4bcd7736b969f26733210c014965bc2.png delete mode 100644 docs/Pre/_images/math/ec6a660dca89c326a9f6d7a6ee1caf28c29025c9.png delete mode 100644 docs/Pre/_images/math/f577ce5d55c8fcd63b7fdb0ac8a27d2550e1ede8.png rename docs/Pre/_modules/pylmgc90/{pre_lmgc/files/evolutionFile.html => pre/IO/evolution2File.html} (76%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/avatar/avatar.html (87%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/avatar/bulk/bulk.html (82%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/avatar/bulks.html (86%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/avatar/contactor/contactor.html (87%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/avatar/contactors.html (83%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/avatar/node/node.html (83%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/avatar/nodes.html (85%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/avatars.html (70%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/brick.html (89%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/brick_wall.html (95%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/extrusion.html (82%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/lattices2D.html (94%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/lattices3D.html (91%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/lecture.html (61%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/mesh.html (91%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/mesh2D.html (86%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/mesh3D.html (90%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/particles.html (61%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/tools/containers2D.html (91%) create mode 100644 docs/Pre/_modules/pylmgc90/pre/build_avatar/tools/containers3D.html rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/tools/granulometry.html (75%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/build_avatar/walls.html (90%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/bulk_behavs.html (64%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/models.html (85%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/shared/bulk_behav.html (93%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/shared/model.html (93%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/shared/tact_behav.html (94%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/tact_behavs.html (83%) rename docs/Pre/_modules/pylmgc90/{pre_lmgc => pre}/viz/visuVtk.html (71%) delete mode 100644 docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/tools/containers3D.html delete mode 100644 docs/dev/_images/math/0676173df05eb71b8bfc9b6066e6f59db31f44ad.png delete mode 100644 docs/dev/_images/math/071386363b69108d4278c06f387c78817e29f9a0.png create mode 100644 docs/dev/_images/math/0b367184feb6533ab8f8d00a1f01e0d2eb08417a.png delete mode 100644 docs/dev/_images/math/0d4e69bc64ebec7ea2c58f3a313a5c4c9a2e7094.png delete mode 100644 docs/dev/_images/math/0e344cb3eee545a8a1a4ca3b082140f0646e09ac.png create mode 100644 docs/dev/_images/math/107e407655dd689a1802114e0106a28db95dad03.png create mode 100644 docs/dev/_images/math/10973b4d3a77a9adc5a6f8e4a97f84d24e6e4df2.png create mode 100644 docs/dev/_images/math/12c62a830274efdc55efb973a63150e3e0620d5c.png delete mode 100644 docs/dev/_images/math/132707bc57237b1eb0163b9e3956b13ea9ad0be9.png rename docs/dev/_images/math/{874124b5902f62debcdf9f4c0af2e47c0f39c969.png => 14b869277b1d69c82d13282acef59b885fbefd53.png} (100%) delete mode 100644 docs/dev/_images/math/17d8fa3b685e5936e5a12c2f917899610dca19c2.png delete mode 100644 docs/dev/_images/math/1a90053f8834f9097b5d0e822ff86e94aa9c8a48.png create mode 100644 docs/dev/_images/math/1b58a242e870bce4dc70d4a8547e0bb7cfb0fa23.png delete mode 100644 docs/dev/_images/math/1c348adf721df602f4030d558637e0ce258b8635.png create mode 100644 docs/dev/_images/math/2068f2ec9aef041f51ab17f5cf104cd0b227ba1a.png delete mode 100644 docs/dev/_images/math/2150077b3898f05d572902c760e08417840bcf98.png delete mode 100644 docs/dev/_images/math/239c03acb171b1802d2aefe4f517e84e97c63749.png create mode 100644 docs/dev/_images/math/23c3530130c395a1a38342442825938ce3d50951.png create mode 100644 docs/dev/_images/math/249964545a174269d153b2496a7eec3f135d54ff.png create mode 100644 docs/dev/_images/math/2a100eb9cf9123f2abb252ab1dc43ccb753d544b.png create mode 100644 docs/dev/_images/math/2be4f519c0a2161dadc247b547d0745eb820cfee.png create mode 100644 docs/dev/_images/math/3097c39025fd0d71005fa354032582c4da978e19.png create mode 100644 docs/dev/_images/math/3188969801f5e66b1cbab49ae1e7fdea369190b1.png create mode 100644 docs/dev/_images/math/32836aa7420bb128d639d3303c7f076185215ae2.png create mode 100644 docs/dev/_images/math/36f25f3e10611a2e04b5f92ee0573805af47c57d.png create mode 100644 docs/dev/_images/math/39d94fb540f100af72111750c8c3668c48f2f629.png delete mode 100644 docs/dev/_images/math/3d48bb19823cb382574134420995dedcba68687e.png delete mode 100644 docs/dev/_images/math/3d8464abdc37429a70ef2e4a9c17b981a2c9e86f.png create mode 100644 docs/dev/_images/math/42157b011d4b1aa1ec936762698e8fbcea6d0d0f.png create mode 100644 docs/dev/_images/math/43b40c18e18f07b9c1f73e438cede2338bae290b.png create mode 100644 docs/dev/_images/math/48b0b04859814e221be273232e40403652b1713f.png delete mode 100644 docs/dev/_images/math/4ff968f7c2259af1038087213ec6b187c39a30a4.png delete mode 100644 docs/dev/_images/math/52fcc327c50fd52802716df2dc590f5f41f76a97.png delete mode 100644 docs/dev/_images/math/58174599b8de651bd0ff261629482d80c7980610.png delete mode 100644 docs/dev/_images/math/588590a182052cc88f24e2ed8ea7d6b5111ba214.png delete mode 100644 docs/dev/_images/math/5a8a10dfc5083e1ab409123e8129d331aabbfcb8.png delete mode 100644 docs/dev/_images/math/5b32fb077ef91613cac567d59f5122ee12d08648.png create mode 100644 docs/dev/_images/math/5ce6a32b822dadf868ee290304c8b7864fc43ae1.png delete mode 100644 docs/dev/_images/math/61bd67a8b1f5401c7eee0ccf423c2b10591ca545.png create mode 100644 docs/dev/_images/math/630698bb036ff93d7f65be482b6592ff1da6fd07.png delete mode 100644 docs/dev/_images/math/644f335b1f8ad48a26536d3c13a4875b9ffc955f.png create mode 100644 docs/dev/_images/math/6b7eaa18bb54cdabcccd01fab0c615cfa687adc3.png delete mode 100644 docs/dev/_images/math/70af5f785123b3b664f501a7718b7e05db12e244.png delete mode 100644 docs/dev/_images/math/74ae957ebdc9bf15b37140e1aedb5db5b0f32c08.png delete mode 100644 docs/dev/_images/math/74e7baf50469383f993d984b77769bb469b869e0.png create mode 100644 docs/dev/_images/math/751cabf82666b0ee11ad0209ab8bf67a0d17886f.png create mode 100644 docs/dev/_images/math/78acf130d7fe57ab69f7c0cf16eba0ba856c8ba0.png delete mode 100644 docs/dev/_images/math/7a682c660fd99adee7a703b2e484333baaa536cb.png delete mode 100644 docs/dev/_images/math/7dc6f88e6bea512e7f4d833e3cc03d06ba1c2b00.png create mode 100644 docs/dev/_images/math/7e9853ead597034cb79ca35bcb51626a2bb2bfba.png delete mode 100644 docs/dev/_images/math/7fd02068dbbd79bb20d6338d2f83dac76d084c4f.png delete mode 100644 docs/dev/_images/math/81841727ed5ee5f29e499dc19154f990ea5d7a1e.png delete mode 100644 docs/dev/_images/math/8230f4123238fead687160de9bfa5cf337e8240a.png create mode 100644 docs/dev/_images/math/87a0f94466ffc3bd66d53a0106a1b391ef5378e9.png create mode 100644 docs/dev/_images/math/87deba54e6705473b0b23f106f4b81c71241d3b3.png delete mode 100644 docs/dev/_images/math/8c0bdcc447b1dd9533ca51664d4812a6be113e84.png create mode 100644 docs/dev/_images/math/8e095afd54dccf95a229eae3cbaed8dfbbf6f9a8.png delete mode 100644 docs/dev/_images/math/8ef223562ff2886e5dbe80a034fe3d3f925bc84c.png delete mode 100644 docs/dev/_images/math/907818a3e25fd24f7a308bf851905464de7ace68.png create mode 100644 docs/dev/_images/math/92c1b02239a3726d7ebac8e7524ea2fc77019bcb.png delete mode 100644 docs/dev/_images/math/96edba33572bde01c416d8fe2338b99642441928.png create mode 100644 docs/dev/_images/math/9ea7a8995c4c6e90300a1f3834cbbfe858ebca15.png create mode 100644 docs/dev/_images/math/9fa6f7ee16696cc5c2dd918f8eff1811cc1d9560.png create mode 100644 docs/dev/_images/math/a95899b226dd3e593764c270ea5646ce43a18ac9.png create mode 100644 docs/dev/_images/math/a97642122eb6524785c452352e1360d3557c71fb.png delete mode 100644 docs/dev/_images/math/aa3c738b10c96a1ac4b168d48feb768adc85aed1.png delete mode 100644 docs/dev/_images/math/aa64784a3efeea2e124b04adb776853c8d7a7710.png delete mode 100644 docs/dev/_images/math/adb6f9392433da14654d8fe24e45a7fa6dda3aa1.png create mode 100644 docs/dev/_images/math/ae1a529dea2b3cb68fdc987b939f93fd69bee87c.png create mode 100644 docs/dev/_images/math/b5a5a620a315c689168a3b8ecf42f6b07f9fed39.png create mode 100644 docs/dev/_images/math/b81c7de534d8520322d81d0d4f1ff9da9fc2cff8.png delete mode 100644 docs/dev/_images/math/be8131f9a9110354af469dddb384d06d5e823272.png delete mode 100644 docs/dev/_images/math/beef04f188cc9ce8f9a5b49cecb25a080b09fc24.png create mode 100644 docs/dev/_images/math/c252a9fea717bd53f65d393305aa9cfb0ccf1d04.png delete mode 100644 docs/dev/_images/math/c2c6b7a0862bc25dc8b656b1b4c6dba9a9033471.png delete mode 100644 docs/dev/_images/math/c314823eb858bd6e3149d5a9bf04313afad452bb.png create mode 100644 docs/dev/_images/math/c583c00ea0ae7f7f91747e85599c6670647d638e.png delete mode 100644 docs/dev/_images/math/c8b6d0a4cf8d825d5a8ce368ce383ff239ebe968.png delete mode 100644 docs/dev/_images/math/cb608452c2118560e907091928828eaade361441.png create mode 100644 docs/dev/_images/math/cbf532650faa10354efa9e0bdc73357f1ca32e51.png create mode 100644 docs/dev/_images/math/cc26d9f8c4a4c09299f8d08c7b5fc42615188e28.png delete mode 100644 docs/dev/_images/math/ccb923c588652e2643fb75c74b27b7baf07b8017.png create mode 100644 docs/dev/_images/math/ceb46643032599ebc98295efe6f4d7a775e630e9.png rename docs/dev/_images/math/{92329b3acd642220551afa3ec77850acefe8554e.png => cf19514cebfd0e78667ad74eaf80af7634878966.png} (100%) delete mode 100644 docs/dev/_images/math/cf2574588040f95c9af87344f6fadd9d64d26299.png delete mode 100644 docs/dev/_images/math/dafe768b21de3f4e6d7d9c358722396ef90645c0.png create mode 100644 docs/dev/_images/math/ddb00b49a3fe1b3b2d6e14432fd443651fb82466.png delete mode 100644 docs/dev/_images/math/e0294a5a031292b8e8190a0691c5aaa470985cd5.png create mode 100644 docs/dev/_images/math/e04cf99b6ed9f3e77a3be1c12654f0763091fceb.png delete mode 100644 docs/dev/_images/math/e1a5d3e7e2701ed9358cf9712112b2a7bd19d57b.png create mode 100644 docs/dev/_images/math/e35efeeb3c869036207a9ef9a60560614113136b.png create mode 100644 docs/dev/_images/math/e59249126c000778c4735fd474c81f905d827829.png delete mode 100644 docs/dev/_images/math/e8d5669705579c694bdfbac08fc61583a2c18628.png delete mode 100644 docs/dev/_images/math/e8fee1ef1786a8f8703c98a26490f754b80e80e1.png create mode 100644 docs/dev/_images/math/f074bc5a172f98bbe07ffdb6b2864b8b465a3e14.png delete mode 100644 docs/dev/_images/math/f28d2ea4db6c7532b617d1a6f2d48560b41131b0.png create mode 100644 docs/dev/_images/math/f4d876580d12dc4b4a0f1f165df2d91db3744852.png create mode 100644 docs/dev/_images/math/f52dab233a71fcbd4c3b84a990226d5332eea975.png create mode 100644 docs/dev/_images/math/f91fc1a92cd14a01c78548aef197ec0cabcde9d6.png delete mode 100644 docs/dev/_images/math/f96f908a6250b5aea3213192aaf6582debbfad37.png create mode 100644 docs/dev/_images/math/fb7a8e65e06e2b967c2ff51977e0028c9217ddcc.png delete mode 100644 docs/dev/_images/math/fcadf92edcade09d66b2a3927e631b4426ddc8ba.png create mode 100644 docs/dev/_images/math/fcc6759b2f4697ecfe126d2373661d4b374f19c0.png create mode 100644 docs/dev/_images/math/ff3f5ea1353dc98cda8988c46f88166c3dfa866f.png create mode 100644 examples/Ateliers/GazGrains/ParticlesToMesh.py create mode 100644 examples/Ateliers/GazGrains/command.py create mode 100644 examples/Ateliers/GazGrains/gen_sample.py create mode 100644 examples/Ateliers/GazGrains/gmsh/darcy.geo create mode 100644 examples/Ateliers/GazGrains/gmsh/darcy.msh create mode 100644 examples/Ateliers/Polyedres/Detection/CpCundall.ipynb create mode 100644 examples/Ateliers/Polyedres/Generation/Auto/RandomLots.ipynb create mode 100644 examples/Ateliers/Polyedres/Generation/Auto/RegularLots.ipynb create mode 100644 examples/Ateliers/Polyedres/Remaillage/DATBOX/BODIES.DAT rename examples/{mecaMAILx_3D/2H8_traction => Ateliers/Polyedres/Remaillage}/DATBOX/BULK_BEHAV.DAT (73%) mode change 100755 => 100644 create mode 100644 examples/Ateliers/Polyedres/Remaillage/DATBOX/DOF.INI create mode 100644 examples/Ateliers/Polyedres/Remaillage/DATBOX/DRV_DOF.DAT create mode 100644 examples/Ateliers/Polyedres/Remaillage/DATBOX/POSTPRO.DAT create mode 100644 examples/Ateliers/Polyedres/Remaillage/DATBOX/TACT_BEHAV.DAT create mode 100644 examples/Ateliers/Polyedres/Remaillage/DATBOX/Vloc_Rloc.INI create mode 100644 examples/Ateliers/Polyedres/Remaillage/Draw.py create mode 100755 examples/Ateliers/Polyedres/Remaillage/ExtractWireFrame.py create mode 100755 examples/Ateliers/Polyedres/Remaillage/Mesh.py create mode 100644 examples/Ateliers/Polyedres/Remaillage/meshing3D.py create mode 100644 examples/Ateliers/gmshpy/gmshpy-basics.ipynb create mode 100644 examples/Ateliers/gmshpy/gmshutils.ipynb create mode 100644 examples/Ateliers/gmshpy/input/aneurysm.stl rename examples/Ateliers/python/{ => 2014}/membrane_3D/README.txt (100%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/TP1.py (100%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/TP2.py (100%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/TP3.py (100%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/TP4.py (100%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/TP_compression.py (100%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/TP_sample.py (88%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/solution/TP_compression_solution.py (100%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/solution/TP_sample_solution.py (91%) rename examples/Ateliers/python/{ => 2014}/membrane_3D/solution/TP_solution.py (100%) create mode 100644 examples/Ateliers/python/2016/Python_and_Standalone.ipynb create mode 100644 examples/Ateliers/python/2016/channel/gen_sample.py create mode 100644 examples/Ateliers/python/2016/mac_czm/gen_sample.py create mode 100644 examples/Pre/prepro_mesh3D/readVtu/command.py create mode 100644 examples/Pre/prepro_mesh3D/readVtu/gen_sample.py create mode 100644 examples/Pre/prepro_mesh3D/readVtu/mesh/cube_h20.vtu create mode 100644 examples/Pre/prepro_mesh3D/readVtu/mesh/cube_h8.vtu create mode 100644 examples/Pre/prepro_mesh3D/readVtu/mesh/cube_pri15.vtu create mode 100644 examples/Pre/prepro_mesh3D/readVtu/mesh/cube_pri6.vtu create mode 100644 examples/Pre/prepro_mesh3D/readVtu/mesh/cube_te10.vtu create mode 100644 examples/Pre/prepro_mesh3D/readVtu/mesh/cube_te4.vtu create mode 100644 examples/RIGID_2D/arche_shrink/command.py create mode 100644 examples/RIGID_2D/arche_shrink/gen_sample.py create mode 100644 examples/RIGID_2D/arche_shrink/geometrie.dat create mode 100644 examples/RIGID_2D/poteau_shrink/command.py create mode 100644 examples/RIGID_2D/poteau_shrink/gen_sample.py create mode 100644 examples/RIGID_3D/lego/command.py create mode 100644 examples/RIGID_3D/lego/gen_sample.py create mode 100644 examples/RIGID_3D/lego/lego.msh create mode 100644 examples/Tutorials/pre/mbs/command.py create mode 100644 examples/Tutorials/pre/mbs/pendulum.ipynb create mode 100644 examples/Tutorials/pre/mbs/shovel-crank.ipynb create mode 100644 examples/Tutorials/pre/mbs/slider-crank.ipynb delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/BODIES.DAT delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/BULK_BEHAV.DAT delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/COMMAND.DAT delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/DOF.INI delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/DRV_DOF.DAT delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/GPV.INI delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/MODELS.DAT delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/POSTPRO.DAT delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/TACT_BEHAV.DAT delete mode 100755 examples/mecaMAILx_2D/2Q4-traction/DATBOX/Vloc_Rloc.INI create mode 100644 examples/mecaMAILx_2D/2Q4-traction/all_cohesive_laws.py create mode 100644 examples/mecaMAILx_2D/2Q4-traction/display_laws.py delete mode 100644 examples/mecaMAILx_2D/2Q4-traction/draw_abp_czm.py delete mode 100644 examples/mecaMAILx_2D/2Q4-traction/draw_mac_czm.py delete mode 100644 examples/mecaMAILx_2D/2Q4-traction/draw_mal_czm.py delete mode 100644 examples/mecaMAILx_2D/2Q4-traction/draw_th_czm.py create mode 100644 examples/mecaMAILx_2D/2Q4-traction/gen_sample.py delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/BODIES.DAT delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/COMMAND.DAT delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/DOF.INI delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/DRV_DOF.DAT delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/GPV.INI delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/MODELS.DAT delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/POSTPRO.DAT delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/TACT_BEHAV.DAT delete mode 100755 examples/mecaMAILx_3D/2H8_traction/DATBOX/Vloc_Rloc.INI create mode 100644 examples/mecaMAILx_3D/2H8_traction/all_cohesive_laws.py create mode 100644 examples/mecaMAILx_3D/2H8_traction/display_laws.py delete mode 100644 examples/mecaMAILx_3D/2H8_traction/draw_abp_czm.py delete mode 100644 examples/mecaMAILx_3D/2H8_traction/draw_mac_czm.py delete mode 100644 examples/mecaMAILx_3D/2H8_traction/draw_mal_czm.py delete mode 100644 examples/mecaMAILx_3D/2H8_traction/draw_th_czm.py create mode 100644 examples/mecaMAILx_3D/2H8_traction/gen_sample.py delete mode 100644 examples/poroMAILx_2D/ConfinedCompression/TP_poroMAILx.pdf create mode 100755 examples/poroMAILx_2D/NonConfinedCompression/DATBOX/NEOHOOKEAN_EOS.mat create mode 100644 examples/poroMAILx_2D/NonConfinedCompression/DATBOX/Vimp_t.txt create mode 100644 examples/poroMAILx_2D/NonConfinedCompression/MESH/MeshQ8.msh create mode 100755 examples/poroMAILx_2D/NonConfinedCompression/MESH/MeshT6.msh create mode 100644 examples/poroMAILx_2D/NonConfinedCompression/command.py create mode 100755 examples/poroMAILx_2D/NonConfinedCompression/gen_sample.py create mode 100755 examples/poroMAILx_3D/NonConfinedCompressionGD/DATBOX/NEOHOOKEAN.mat create mode 100755 examples/poroMAILx_3D/NonConfinedCompressionGD/DATBOX/Vimp_t.txt create mode 100755 examples/poroMAILx_3D/NonConfinedCompressionGD/MESH/Disc.geo create mode 100755 examples/poroMAILx_3D/NonConfinedCompressionGD/MESH/Disc.msh create mode 100755 examples/poroMAILx_3D/NonConfinedCompressionGD/command.py create mode 100755 examples/poroMAILx_3D/NonConfinedCompressionGD/gen_sample.py create mode 100644 examples/therMAILx_2D/cracked_plate/command.py create mode 100644 examples/therMAILx_2D/cracked_plate/gen_sample.py create mode 100644 examples/therMAILx_2D/cracked_plate/plate.msh delete mode 100644 src/ChiPy/Doxyfile_chipy.cfg rename src/ChiPy/{src => }/IO/CMakeLists.txt (100%) rename src/ChiPy/{src => }/IO/wrap_parser.f90 (100%) rename src/ChiPy/{src => }/IO/wrap_parser.h (100%) rename src/ChiPy/{src => }/contact_2D/CMakeLists.txt (100%) rename src/ChiPy/{src => }/contact_2D/wrap_CLALp.f90 (94%) rename src/ChiPy/{src => }/contact_2D/wrap_CLALp.h (89%) rename src/ChiPy/{src => }/contact_2D/wrap_CLJCx.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_CLJCx.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKALp.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKALp.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKDKL.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKDKL.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKDKx.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKDKx.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKDPx.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKDPx.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKJCx.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKJCx.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKKDx.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKKDx.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKPDx.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKPDx.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKPLx.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DKPLx.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DPALp.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_DPALp.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_P2P2L.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_P2P2L.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_PLALp.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_PLALp.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_PLJCx.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_PLJCx.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_PLPLx.f90 (95%) rename src/ChiPy/{src => }/contact_2D/wrap_PLPLx.h (97%) rename src/ChiPy/{src => }/contact_2D/wrap_PTPT2.f90 (96%) rename src/ChiPy/{src => }/contact_2D/wrap_PTPT2.h (96%) rename src/ChiPy/{src => }/contact_2D/wrap_interaction_handler.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_interaction_handler.h (100%) rename src/ChiPy/{src => }/contact_2D/wrap_saladyn_interaction.f90 (100%) rename src/ChiPy/{src => }/contact_2D/wrap_saladyn_interaction.h (100%) rename src/ChiPy/{src => }/contact_3D/CMakeLists.txt (100%) rename src/ChiPy/{src => }/contact_3D/wrap_CDCDx.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_CDCDx.h (99%) rename src/ChiPy/{src => }/contact_3D/wrap_CDPLx.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_CDPLx.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_CSASp.f90 (97%) rename src/ChiPy/{src => }/contact_3D/wrap_CSASp.h (94%) rename src/ChiPy/{src => }/contact_3D/wrap_CSPRx.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_CSPRx.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_PRASp.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_PRASp.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_PRPLx.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_PRPLx.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_PRPRx.f90 (98%) rename src/ChiPy/{src => }/contact_3D/wrap_PRPRx.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_PTPT3.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_PTPT3.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_SPCDx.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_SPCDx.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_SPDCx.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_SPDCx.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_SPPLx.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_SPPLx.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_SPSPx.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_SPSPx.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_interaction_handler_3D.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_interaction_handler_3D.h (100%) rename src/ChiPy/{src => }/contact_3D/wrap_saladyn_interaction_3D.f90 (100%) rename src/ChiPy/{src => }/contact_3D/wrap_saladyn_interaction_3D.h (100%) rename src/ChiPy/{src => }/dummy_source.f90 (100%) rename src/ChiPy/{src => }/kernel/CMakeLists.txt (91%) rename src/ChiPy/{src => }/kernel/wrap_DDM_2D.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_DDM_2D.h (100%) rename src/ChiPy/{src => }/kernel/wrap_DDM_3D.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_DDM_3D.h (100%) rename src/ChiPy/{src => }/kernel/wrap_DDM_ExternalFEM.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_DDM_ExternalFEM.h (100%) rename src/ChiPy/{src => }/kernel/wrap_SiconosNumerics.f90 (95%) rename src/ChiPy/{src => }/kernel/wrap_SiconosNumerics.h (97%) rename src/ChiPy/{src => }/kernel/wrap_cpg.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_cpg.h (100%) rename src/ChiPy/{src => }/kernel/wrap_cpg_3D.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_cpg_3D.h (100%) create mode 100644 src/ChiPy/kernel/wrap_global_thermal_solver.f90 create mode 100644 src/ChiPy/kernel/wrap_global_thermal_solver.h rename src/ChiPy/{src => }/kernel/wrap_mp_solver.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_mp_solver.h (100%) rename src/ChiPy/{src => }/kernel/wrap_mp_solver_3D.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_mp_solver_3D.h (100%) rename src/ChiPy/{src => }/kernel/wrap_nlgs.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_nlgs.h (100%) rename src/ChiPy/{src => }/kernel/wrap_nlgs_3D.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_nlgs_3D.h (100%) rename src/ChiPy/{src => }/kernel/wrap_nlgs_newint.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_nlgs_newint.h (100%) rename src/ChiPy/{src => }/kernel/wrap_nlgs_newint_3D.f90 (100%) rename src/ChiPy/{src => }/kernel/wrap_nlgs_newint_3D.h (100%) rename src/ChiPy/{src => }/macro/__init__.py (100%) rename src/ChiPy/{src => }/macro/__init__.py.in (100%) rename src/ChiPy/{src => }/macro/chipy.py (98%) rename src/ChiPy/{src => }/macro/config.py (100%) rename src/ChiPy/{src => }/macro/ddm_utils.py (98%) rename src/ChiPy/{src => }/macro/new_arch_post.py (100%) rename src/ChiPy/{src => }/macro/new_arch_post_utils.py (100%) rename src/ChiPy/{src => }/macro/preconW.py (100%) rename src/ChiPy/{src => }/macro/vtk_display.py (91%) rename src/ChiPy/{src => }/mailx/CMakeLists.txt (100%) rename src/ChiPy/{src => }/mailx/wrap_ALpxx.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_ALpxx.h (100%) rename src/ChiPy/{src => }/mailx/wrap_ASpxx.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_ASpxx.h (100%) rename src/ChiPy/{src => }/mailx/wrap_CLxxx.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_CLxxx.h (100%) rename src/ChiPy/{src => }/mailx/wrap_CSxxx.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_CSxxx.h (100%) rename src/ChiPy/{src => }/mailx/wrap_DISKL.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_DISKL.h (100%) rename src/ChiPy/{src => }/mailx/wrap_MAILx.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_MAILx.h (100%) rename src/ChiPy/{src => }/mailx/wrap_PT2DL.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_PT2DL.h (100%) rename src/ChiPy/{src => }/mailx/wrap_mecaMAILx.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_mecaMAILx.h (100%) rename src/ChiPy/{src => }/mailx/wrap_multiMAILx.f90 (100%) rename src/ChiPy/{src => }/mailx/wrap_multiMAILx.h (100%) rename src/ChiPy/{src => }/mailx/wrap_poroMAILx.f90 (93%) rename src/ChiPy/{src => }/mailx/wrap_poroMAILx.h (93%) rename src/ChiPy/{src => }/mailx/wrap_therMAILx.f90 (99%) rename src/ChiPy/{src => }/mailx/wrap_therMAILx.h (99%) rename src/ChiPy/{src => }/mainpage.h (100%) create mode 100644 src/ChiPy/mbs/CMakeLists.txt create mode 100644 src/ChiPy/mbs/wrap_mbs2D.f90 create mode 100644 src/ChiPy/mbs/wrap_mbs2D.h rename src/ChiPy/{src/mbs/wrap_mbs.f90 => mbs/wrap_mbs3D.f90} (80%) rename src/ChiPy/{src/mbs/wrap_mbs.h => mbs/wrap_mbs3D.h} (70%) rename src/ChiPy/{src => }/melimelo/CMakeLists.txt (100%) rename src/ChiPy/{src => }/melimelo/wrap_melimelo.f90 (100%) rename src/ChiPy/{src => }/melimelo/wrap_melimelo.h (100%) rename src/ChiPy/{src => }/melimelo/wrap_visitor.f90 (100%) rename src/ChiPy/{src => }/melimelo/wrap_visitor.h (100%) rename src/ChiPy/{src => }/post/CMakeLists.txt (100%) rename src/ChiPy/{src => }/post/wrap_display_3D.f90 (100%) rename src/ChiPy/{src => }/post/wrap_display_3D.h (100%) rename src/ChiPy/{src => }/post/wrap_post2D.f90 (100%) rename src/ChiPy/{src => }/post/wrap_post2D.h (100%) rename src/ChiPy/{src => }/post/wrap_post3D.f90 (100%) rename src/ChiPy/{src => }/post/wrap_post3D.h (100%) rename src/ChiPy/{src => }/post/wrap_postpro.f90 (91%) rename src/ChiPy/{src => }/post/wrap_postpro.h (94%) rename src/ChiPy/{src => }/post/wrap_postpro_3D.f90 (100%) rename src/ChiPy/{src => }/post/wrap_postpro_3D.h (100%) rename src/ChiPy/{src => }/pre_tools/CMakeLists.txt (100%) rename src/ChiPy/{src => }/pre_tools/wrap_cut2D.f90 (100%) rename src/ChiPy/{src => }/pre_tools/wrap_cut2D.h (100%) rename src/ChiPy/{src => }/pre_tools/wrap_deposit2D.f90 (99%) rename src/ChiPy/{src => }/pre_tools/wrap_deposit2D.h (100%) create mode 100644 src/ChiPy/pre_tools/wrap_deposit3D.f90 create mode 100644 src/ChiPy/pre_tools/wrap_deposit3D.h rename src/ChiPy/{src => }/pre_tools/wrap_mesh2D.f90 (100%) rename src/ChiPy/{src => }/pre_tools/wrap_mesh2D.h (100%) rename src/ChiPy/{src => }/pre_tools/wrap_surface_T3.f90 (100%) rename src/ChiPy/{src => }/pre_tools/wrap_surface_T3.h (100%) rename src/ChiPy/{src => }/rigid_2D/CMakeLists.txt (100%) rename src/ChiPy/{src => }/rigid_2D/wrap_DISKx.f90 (96%) rename src/ChiPy/{src => }/rigid_2D/wrap_DISKx.h (96%) rename src/ChiPy/{src => }/rigid_2D/wrap_DISPx.f90 (96%) rename src/ChiPy/{src => }/rigid_2D/wrap_DISPx.h (95%) rename src/ChiPy/{src => }/rigid_2D/wrap_JONCx.f90 (87%) rename src/ChiPy/{src => }/rigid_2D/wrap_JONCx.h (94%) rename src/ChiPy/{src => }/rigid_2D/wrap_POLYG.f90 (97%) rename src/ChiPy/{src => }/rigid_2D/wrap_POLYG.h (96%) rename src/ChiPy/{src => }/rigid_2D/wrap_PT2Dx.f90 (94%) rename src/ChiPy/{src => }/rigid_2D/wrap_PT2Dx.h (93%) rename src/ChiPy/{src => }/rigid_2D/wrap_RBDY2.f90 (97%) rename src/ChiPy/{src => }/rigid_2D/wrap_RBDY2.h (95%) rename src/ChiPy/{src => }/rigid_2D/wrap_xKSID.f90 (95%) rename src/ChiPy/{src => }/rigid_2D/wrap_xKSID.h (94%) rename src/ChiPy/{src => }/rigid_2D/wrap_xPSID.f90 (94%) rename src/ChiPy/{src => }/rigid_2D/wrap_xPSID.h (93%) rename src/ChiPy/{src => }/rigid_3D/CMakeLists.txt (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_CYLND.f90 (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_CYLND.h (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_DNLYC.f90 (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_DNLYC.h (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_PLANx.f90 (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_PLANx.h (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_POLYR.f90 (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_POLYR.h (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_PT3Dx.f90 (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_PT3Dx.h (99%) rename src/ChiPy/{src => }/rigid_3D/wrap_RBDY3.f90 (99%) rename src/ChiPy/{src => }/rigid_3D/wrap_RBDY3.h (98%) rename src/ChiPy/{src => }/rigid_3D/wrap_SPHER.f90 (100%) rename src/ChiPy/{src => }/rigid_3D/wrap_SPHER.h (100%) rename src/ChiPy/{src => }/shared/CMakeLists.txt (100%) rename src/ChiPy/{src => }/shared/wrap_ExternalModels.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_ExternalModels.h (100%) rename src/ChiPy/{src => }/shared/wrap_a_EF.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_a_EF.h (100%) rename src/ChiPy/{src => }/shared/wrap_afterall.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_afterall.h (100%) rename src/ChiPy/{src => }/shared/wrap_bulk_behav.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_bulk_behav.h (100%) rename src/ChiPy/{src => }/shared/wrap_models.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_models.h (100%) rename src/ChiPy/{src => }/shared/wrap_overall.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_overall.h (100%) rename src/ChiPy/{src => }/shared/wrap_parameters.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_parameters.h (100%) rename src/ChiPy/{src => }/shared/wrap_tact_behav.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_tact_behav.h (100%) rename src/ChiPy/{src => }/shared/wrap_timer.f90 (100%) rename src/ChiPy/{src => }/shared/wrap_timer.h (100%) rename src/ChiPy/{src => }/shared/wrap_utilities.f90 (86%) rename src/ChiPy/{src => }/shared/wrap_utilities.h (81%) rename src/ChiPy/{src => }/simulation/CMakeLists.txt (100%) rename src/ChiPy/{src => }/simulation/wrap_hdfio.f90 (100%) rename src/ChiPy/{src => }/simulation/wrap_hdfio.h (100%) rename src/ChiPy/{src => }/simulation/wrap_integrator.f90 (100%) rename src/ChiPy/{src => }/simulation/wrap_integrator.h (100%) rename src/ChiPy/{src => }/simulation/wrap_interaction_handler.f90 (100%) rename src/ChiPy/{src => }/simulation/wrap_interaction_handler.h (100%) rename src/ChiPy/{src => }/simulation/wrap_model_handler.f90 (100%) rename src/ChiPy/{src => }/simulation/wrap_model_handler.h (100%) rename src/ChiPy/{src => }/simulation/wrap_nlgs_newarch.f90 (100%) rename src/ChiPy/{src => }/simulation/wrap_nlgs_newarch.h (100%) rename src/ChiPy/{src => }/simulation/wrap_soe.f90 (100%) rename src/ChiPy/{src => }/simulation/wrap_soe.h (100%) delete mode 100644 src/ChiPy/src/CMakeLists.txt delete mode 100644 src/ChiPy/src/mbs/CMakeLists.txt delete mode 100644 src/ChiPy/src/pre_tools/wrap_deposit3D.f90 delete mode 100644 src/ChiPy/src/pre_tools/wrap_deposit3D.h rename src/ChiPy/{src => }/user/CMakeLists.txt (93%) rename src/ChiPy/{src => }/user/wrap_user.f90 (100%) rename src/ChiPy/{src => }/user/wrap_user.h (100%) rename src/ChiPy/{src => }/wrap_GGCxx.f90 (100%) rename src/Core/{src => }/IO/CMakeLists.txt (100%) rename src/Core/{src => }/IO/mod_IO.f90 (100%) rename src/Core/{src => }/IO/mod_parser.f90 (100%) rename src/Core/{src => }/contact_2D/CMakeLists.txt (71%) rename src/Core/{src => }/contact_2D/mod_CLALp.f90 (87%) rename src/Core/{src => }/contact_2D/mod_CLJCx.f90 (75%) rename src/Core/{src => }/contact_2D/mod_DKALp.f90 (81%) rename src/Core/{src => }/contact_2D/mod_DKDKL.f90 (82%) rename src/Core/{src => }/contact_2D/mod_DKDKx.f90 (93%) rename src/Core/{src => }/contact_2D/mod_DKDPx.f90 (82%) rename src/Core/{src => }/contact_2D/mod_DKJCx.f90 (83%) rename src/Core/{src => }/contact_2D/mod_DKKDx.f90 (80%) rename src/Core/{src => }/contact_2D/mod_DKPDx.f90 (82%) rename src/Core/{src => }/contact_2D/mod_DKPLx.f90 (80%) rename src/Core/{src => }/contact_2D/mod_DPALp.f90 (81%) rename src/Core/{src => }/contact_2D/mod_P2P2L.f90 (77%) rename src/Core/{src => }/contact_2D/mod_PLALp.f90 (76%) rename src/Core/{src => }/contact_2D/mod_PLJCx.f90 (79%) rename src/Core/{src => }/contact_2D/mod_PLPLx.f90 (84%) rename src/Core/{src => }/contact_2D/mod_PTPT2.f90 (81%) create mode 100644 src/Core/contact_2D/mod_inter_meca2D.f90 rename src/Core/{src => }/contact_3D/CMakeLists.txt (97%) rename src/Core/{src => }/contact_3D/mod_CDCDx.f90 (95%) rename src/Core/{src => }/contact_3D/mod_CDPLx.f90 (87%) rename src/Core/{src => }/contact_3D/mod_CSASp.f90 (83%) rename src/Core/{src => }/contact_3D/mod_CSPRx.f90 (83%) rename src/Core/{src => }/contact_3D/mod_PRASp.f90 (82%) rename src/Core/{src => }/contact_3D/mod_PRPLx.f90 (82%) rename src/Core/{src => }/contact_3D/mod_PRPRx.f90 (96%) rename src/Core/{src => }/contact_3D/mod_PTPT3.f90 (84%) mode change 100755 => 100644 rename src/Core/{src => }/contact_3D/mod_SPCDx.f90 (92%) rename src/Core/{src => }/contact_3D/mod_SPDCx.f90 (92%) rename src/Core/{src => }/contact_3D/mod_SPPLx.f90 (87%) rename src/Core/{src => }/contact_3D/mod_SPSPx.f90 (90%) create mode 100644 src/Core/contact_3D/mod_inter_meca3D.f90 rename src/Core/{src => }/contactor_2D/CMakeLists.txt (73%) rename src/Core/{src => }/contactor_2D/mod_ALpxx.f90 (95%) rename src/Core/{src => }/contactor_2D/mod_CLxxx.f90 (97%) rename src/Core/{src => }/contactor_2D/mod_DISKL.f90 (99%) rename src/Core/{src => }/contactor_2D/mod_DISKx.f90 (98%) rename src/Core/{src => }/contactor_2D/mod_DISPx.f90 (99%) rename src/Core/{src => }/contactor_2D/mod_JONCx.f90 (75%) rename src/Core/{src => }/contactor_2D/mod_POLYG.f90 (89%) rename src/Core/{src => }/contactor_2D/mod_PT2DL.f90 (100%) rename src/Core/{src => }/contactor_2D/mod_PT2Dx.f90 (92%) rename src/Core/{src => }/contactor_2D/mod_xKSID.f90 (99%) rename src/Core/{src => }/contactor_2D/mod_xPSID.f90 (98%) rename src/Core/{src => }/contactor_3D/CMakeLists.txt (89%) rename src/Core/{src => }/contactor_3D/mod_ASpxx.f90 (99%) rename src/Core/{src => }/contactor_3D/mod_CSxxx.f90 (99%) rename src/Core/{src => }/contactor_3D/mod_CYLND.f90 (99%) rename src/Core/{src => }/contactor_3D/mod_DNLYC.f90 (99%) rename src/Core/{src => }/contactor_3D/mod_PLANx.f90 (91%) rename src/Core/{src => }/contactor_3D/mod_POLYR.f90 (94%) rename src/Core/{src => }/contactor_3D/mod_PT3Dx.f90 (99%) mode change 100755 => 100644 rename src/Core/{src => }/contactor_3D/mod_SPHER.f90 (99%) rename src/Core/{src => }/contactor_3D/mod_xSpxx.f90 (100%) rename src/Core/{src => }/contribs/CMakeLists.txt (86%) rename src/Core/{src => }/contribs/ann.cpp (100%) rename src/Core/{src => }/contribs/ann.h (100%) rename src/Core/{src => }/contribs/exception.c (100%) rename src/Core/{src => }/contribs/exception.h (100%) rename src/Core/{src => }/contribs/mod_ann.f90 (100%) rename src/Core/{src => }/contribs/mod_exception.f90 (100%) rename src/Core/{src => }/contribs/mod_predicates.f90 (100%) rename src/Core/{src => }/contribs/mod_rtree.f90 (100%) rename src/Core/{src => }/contribs/tst_ann.f90 (100%) rename src/Core/{src => }/contribs/tst_exception.c (100%) rename src/Core/{src => }/contribs/tst_predicates.f90 (100%) rename src/Core/{src => }/contribs/tst_rtree.f90 (100%) create mode 100644 src/Core/interactions/CMakeLists.txt create mode 100644 src/Core/interactions/mod_interactions.f90 create mode 100755 src/Core/interactions/mod_interactions.f90.py create mode 100644 src/Core/interactions/mod_interactions_3D.f90 create mode 100755 src/Core/interactions/mod_interactions_3D.f90.py create mode 100644 src/Core/interactions/mod_interactions_utils.py rename src/Core/{src => }/kernel/CMakeLists.txt (86%) rename src/Core/{src => }/kernel/inc_interaction_law.f90 (100%) rename src/Core/{src => }/kernel/inc_nlgs_new_int.f90 (99%) rename src/Core/{src => }/kernel/mod_DDM_2D.f90 (99%) rename src/Core/{src => }/kernel/mod_DDM_3D.f90 (100%) rename src/Core/{src => }/kernel/mod_DDM_ExternalFEM.f90 (100%) rename src/Core/{src => }/kernel/mod_SiconosNumerics.f90 (96%) rename src/Core/{src => }/kernel/mod_ThermalSolver.f90 (98%) rename src/Core/{src => }/kernel/mod_cpg.f90 (70%) rename src/Core/{src => }/kernel/mod_cpg_3D.f90 (100%) create mode 100644 src/Core/kernel/mod_global_thermal_solver.f90 rename src/Core/{src => }/kernel/mod_interaction_law_2D.f90 (99%) rename src/Core/{src => }/kernel/mod_interaction_law_3D.f90 (99%) rename src/Core/{src => }/kernel/mod_md_3D.f90 (100%) rename src/Core/{src => }/kernel/mod_mp_solver.f90 (91%) rename src/Core/{src => }/kernel/mod_mp_solver_3D.f90 (92%) rename src/Core/{src => }/kernel/mod_nlgs.f90 (76%) rename src/Core/{src => }/kernel/mod_nlgs_3D.f90 (81%) rename src/Core/{src => }/kernel/mod_nlgs_newint.f90 (99%) rename src/Core/{src => }/kernel/mod_nlgs_newint_3D.f90 (99%) rename src/Core/{src => }/mailx/CMakeLists.txt (89%) rename src/Core/{src => }/mailx/EF_utilities.f90 (100%) rename src/Core/{src => }/mailx/mod_MAILx.f90 (94%) rename src/Core/{src => }/mailx/mod_a_BDARY_ALpxx.f90 (100%) rename src/Core/{src => }/mailx/mod_a_BDARY_CLxxx.f90 (100%) rename src/Core/{src => }/mailx/mod_a_BDARY_DISKL.f90 (100%) rename src/Core/{src => }/mailx/mod_a_BDARY_POLYD.f90 (100%) rename src/Core/{src => }/mailx/mod_a_BDARY_PT2DL.f90 (100%) rename src/Core/{src => }/mailx/mod_a_BDARY_xSpxx.f90 (100%) rename src/Core/{src => }/mailx/mod_a_genericEF_iso.f90 (99%) rename src/Core/{src => }/mailx/mod_a_mecaEF.f90 (100%) rename src/Core/{src => }/mailx/mod_a_mecaEF_bar.f90 (99%) rename src/Core/{src => }/mailx/mod_a_mecaEF_discrete.f90 (100%) rename src/Core/{src => }/mailx/mod_a_mecaEF_iso.f90 (99%) rename src/Core/{src => }/mailx/mod_a_mecaEF_shb.f90 (92%) rename src/Core/{src => }/mailx/mod_a_mecaEF_shell.f90 (100%) rename src/Core/{src => }/mailx/mod_a_multiEF.f90 (99%) rename src/Core/{src => }/mailx/mod_a_multiEF_iso.f90 (99%) rename src/Core/{src => }/mailx/mod_a_poroEF.f90 (99%) rename src/Core/{src => }/mailx/mod_a_poroEF_iso.f90 (91%) rename src/Core/{src => }/mailx/mod_a_therEF.f90 (99%) rename src/Core/{src => }/mailx/mod_a_therEF_bar.f90 (98%) rename src/Core/{src => }/mailx/mod_a_therEF_iso.f90 (94%) rename src/Core/{src => }/mailx/mod_mecaMAILx.f90 (95%) rename src/Core/{src => }/mailx/mod_multiMAILx.f90 (98%) rename src/Core/{src => }/mailx/mod_poroMAILx.f90 (96%) rename src/Core/{src => }/mailx/mod_therMAILx.f90 (95%) rename src/Core/{src => }/mailx/test_genericEF_iso.f90 (95%) create mode 100644 src/Core/mbs/CMakeLists.txt create mode 100644 src/Core/mbs/mod_mbs2D.f90 rename src/Core/{src/mbs/mod_mbs.f90 => mbs/mod_mbs3D.f90} (84%) create mode 100644 src/Core/mbs/tst_mbs_2D.f90 rename src/Core/{src/mbs/tst_mbs.f90 => mbs/tst_mbs_3D.f90} (99%) rename src/Core/{src => }/melimelo/CMakeLists.txt (100%) rename src/Core/{src => }/melimelo/README (100%) rename src/Core/{src => }/melimelo/melimelo.f90 (100%) rename src/Core/{src => }/melimelo/mod_avatar.f90 (100%) rename src/Core/{src => }/melimelo/mod_avatar_container.f90 (100%) rename src/Core/{src => }/melimelo/mod_blmty.f90 (100%) rename src/Core/{src => }/melimelo/mod_drvdofty.f90 (100%) rename src/Core/{src => }/melimelo/mod_entity.f90 (100%) rename src/Core/{src => }/melimelo/mod_entity_container.f90 (100%) rename src/Core/{src => }/melimelo/mod_initvalty.f90 (100%) rename src/Core/{src => }/melimelo/mod_nodty.f90 (100%) rename src/Core/{src => }/melimelo/mod_tacty.f90 (100%) rename src/Core/{src => }/melimelo/mod_visitor.f90 (100%) rename src/Core/{src => }/melimelo/tst_avatar.f90 (100%) rename src/Core/{src => }/melimelo/tst_bulk_visit.f90 (100%) rename src/Core/{src/templates => obsolete}/interaction_methods.f90 (100%) rename src/Core/{src/templates => obsolete}/interaction_type.f90 (100%) rename src/Core/{src/contact_2D => obsolete}/mod_interaction.f90 (100%) rename src/Core/{src/contact_3D => obsolete}/mod_interaction_3D.f90 (100%) rename src/Core/{src/contact_2D => obsolete}/mod_interaction_handler.f90 (100%) rename src/Core/{src/contact_3D => obsolete}/mod_interaction_handler_3D.f90 (100%) rename src/Core/{src/contact_2D => obsolete}/mod_newarch_interaction.f90 (100%) rename src/Core/{src => }/parameters/CMakeLists.txt (100%) rename src/Core/{src => }/parameters/mod_integrator_parameters.f90 (100%) rename src/Core/{src => }/parameters/mod_mdl_hdl_parameters.f90 (100%) rename src/Core/{src => }/parameters/mod_no_mdl_hdl_parameters.f90 (100%) rename src/Core/{src => }/post/CMakeLists.txt (90%) rename src/Core/{src => }/post/gmshwrite/CMakeLists.txt (100%) rename src/Core/{src => }/post/gmshwrite/fgmshwrite.c (100%) rename src/Core/{src => }/post/gmshwrite/gmshwrite.c (100%) rename src/Core/{src => }/post/gmshwrite/gmshwrite.h (100%) rename src/Core/{src => }/post/gmvwrite/CMakeLists.txt (100%) rename src/Core/{src => }/post/gmvwrite/makefile_noC (100%) rename src/Core/{src => }/post/gmvwrite/mod_f90gmvwrite_noC.f90 (100%) rename src/Core/{src => }/post/gmvwrite/old_with_C/gmvwrite.c (100%) rename src/Core/{src => }/post/gmvwrite/old_with_C/gmvwrite.h (100%) rename src/Core/{src => }/post/gmvwrite/old_with_C/gmvwritef.c (100%) rename src/Core/{src => }/post/gmvwrite/old_with_C/mod_f90gmvwrite.f90 (100%) rename src/Core/{src => }/post/mod_geompack.f90 (100%) rename src/Core/{src => }/post/mod_gmsh_display_3D.f90 (100%) rename src/Core/{src => }/post/mod_gmv_display_3D.f90 (100%) rename src/Core/{src => }/post/mod_post2D.f90 (83%) rename src/Core/{src => }/post/mod_post3D.f90 (90%) rename src/Core/{src => }/post/mod_postpro_2D.f90 (75%) rename src/Core/{src => }/post/mod_postpro_3D.f90 (78%) rename src/Core/{src => }/post/mod_vtk_display_3D.f90 (100%) rename src/Core/{src => }/post/vtkwrite/CMakeLists.txt (100%) rename src/Core/{src => }/post/vtkwrite/LIB_VTK_IO.f90 (100%) rename src/Core/{src => }/post/vtkwrite/LIB_VTK_IO_Guide.pdf (100%) rename src/Core/{src => }/post/vtkwrite/full_LIB_VTK_IO.f90 (100%) rename src/Core/{src => }/pre_tools/CMakeLists.txt (83%) rename src/Core/{src => }/pre_tools/doxygen.cfg (100%) rename src/Core/{src => }/pre_tools/mod_a_surface_T3.f90 (100%) rename src/Core/{src => }/pre_tools/mod_cut2D.f90 (98%) rename src/Core/{src => }/pre_tools/mod_deposit2D.f90 (98%) create mode 100644 src/Core/pre_tools/mod_deposit3D.f90 rename src/Core/{src => }/pre_tools/mod_mesh2D.f90 (100%) rename src/Core/{src => }/rigid_2D/CMakeLists.txt (100%) rename src/Core/{src => }/rigid_2D/mod_RBDY2.f90 (98%) rename src/Core/{src => }/rigid_2D/mod_a_BDARY_DISKx.f90 (97%) rename src/Core/{src => }/rigid_2D/mod_a_BDARY_DISPx.f90 (97%) rename src/Core/{src => }/rigid_2D/mod_a_BDARY_JONCx.f90 (94%) create mode 100644 src/Core/rigid_2D/mod_a_BDARY_POLYG.f90 rename src/Core/{src => }/rigid_2D/mod_a_BDARY_PT2Dx.f90 (100%) rename src/Core/{src => }/rigid_2D/mod_a_BDARY_xKSID.f90 (97%) rename src/Core/{src => }/rigid_2D/mod_a_BDARY_xPSID.f90 (97%) rename src/Core/{src => }/rigid_3D/CMakeLists.txt (100%) rename src/Core/{src => }/rigid_3D/mod_RBDY3.f90 (99%) rename src/Core/{src => }/rigid_3D/mod_a_BDARY_CYLND.f90 (95%) rename src/Core/{src => }/rigid_3D/mod_a_BDARY_DNLYC.f90 (96%) rename src/Core/{src => }/rigid_3D/mod_a_BDARY_PLANx.f90 (100%) rename src/Core/{src => }/rigid_3D/mod_a_BDARY_POLYR.f90 (100%) rename src/Core/{src => }/rigid_3D/mod_a_BDARY_PT3Dx.f90 (93%) mode change 100755 => 100644 rename src/Core/{src => }/rigid_3D/mod_a_BDARY_SPHER.f90 (93%) rename src/Core/{src => }/shared/CMakeLists.txt (93%) rename src/Core/{src => }/shared/mod_DiscreteGeometry.f90 (99%) rename src/Core/{src => }/shared/mod_LMGC90_MPI.f90 (100%) rename src/Core/{src => }/shared/mod_LMGC90_no_MPI.f90 (100%) rename src/Core/{src => }/shared/mod_RigidKinematic.f90 (98%) rename src/Core/{src => }/shared/mod_a_DOF.f90 (100%) rename src/Core/{src => }/shared/mod_a_EF.f90 (99%) rename src/Core/{src => }/shared/mod_a_MATRIX.f90 (100%) rename src/Core/{src => }/shared/mod_a_system.f90 (84%) rename src/Core/{src => }/shared/mod_algebra.f90 (100%) rename src/Core/{src => }/shared/mod_anonymous.f90 (100%) rename src/Core/{src => }/shared/mod_anonymous_container.f90 (100%) rename src/Core/{src => }/shared/mod_anonymous_ptr_container.f90 (100%) rename src/Core/{src => }/shared/mod_bulk_behav.f90 (100%) rename src/Core/{src => }/shared/mod_face2face.f90 (100%) rename src/Core/{src => }/shared/mod_models.f90 (100%) rename src/Core/{src => }/shared/mod_no_paranoid_checks.f90 (100%) create mode 100644 src/Core/shared/mod_ompTimer.f90 rename src/Core/{src => }/shared/mod_overall.f90 (99%) rename src/Core/{src => }/shared/mod_overall.f90-new (100%) rename src/Core/{src => }/shared/mod_parameters.f90 (99%) rename src/Core/{src => }/shared/mod_paranoid_checks.f90 (74%) rename src/Core/{src => }/shared/mod_renum.f90 (100%) rename src/Core/{src => }/shared/mod_rough_detections.f90 (100%) rename src/Core/{src => }/shared/mod_tact_behav.f90 (96%) rename src/Core/{src => }/shared/mod_timer.f90 (98%) rename src/Core/{src => }/shared/mod_utilities.f90 (93%) rename src/Core/{src => }/shared/tst_DiscreteGeometry.f90 (100%) rename src/Core/{src => }/shared/tst_a_EF.f90 (100%) rename src/Core/{src => }/shared/tst_a_MATRIX.f90 (100%) rename src/Core/{src => }/shared/tst_algebra.f90 (100%) rename src/Core/{src => }/shared/tst_anonymous_container.f90 (100%) rename src/Core/{src => }/shared/tst_anonymous_ptr_container.f90 (100%) rename src/Core/{src => }/shared/tst_case_vs_gmatrix.f90 (100%) rename src/Core/{src => }/shared/tst_dictionary.f90 (100%) rename src/Core/{src => }/shared/tst_paranoid_checks.f90 (100%) rename src/Core/{src => }/shared/tst_rough_detections.f90 (100%) rename src/Core/{src => }/simulation/CMakeLists.txt (100%) rename src/Core/{src => }/simulation/inc_model_mecaFE.f90 (100%) rename src/Core/{src => }/simulation/inc_model_therFE.f90 (100%) rename src/Core/{src => }/simulation/mod_contactor.f90 (100%) rename src/Core/{src => }/simulation/mod_hdfio.f90 (100%) rename src/Core/{src => }/simulation/mod_integrator.f90 (100%) rename src/Core/{src => }/simulation/mod_integrator_list.f90 (100%) rename src/Core/{src => }/simulation/mod_interaction_handler.f90 (100%) rename src/Core/{src => }/simulation/mod_model_handler.f90 (100%) rename src/Core/{src => }/simulation/mod_modelization.f90 (100%) rename src/Core/{src => }/simulation/mod_nlgs_new_arch.f90 (99%) rename src/Core/{src => }/simulation/mod_soe.f90 (100%) rename src/Core/{src => }/simulation/mod_state.f90 (100%) delete mode 100644 src/Core/src/CMakeLists.txt delete mode 100644 src/Core/src/mbs/CMakeLists.txt delete mode 100644 src/Core/src/pre_tools/mod_a_granulo.f90 delete mode 100644 src/Core/src/pre_tools/mod_deposit3D.f90 delete mode 100644 src/Core/src/rigid_2D/mod_a_BDARY_POLYG.f90 create mode 100644 src/Core/templates/contactor_2D.f90 rename src/Core/{src => }/templates/container_methods.f90 (100%) rename src/Core/{src => }/templates/container_type.f90 (100%) rename src/Core/{src => }/templates/dictionary.f90 (100%) create mode 100644 src/Core/templates/interaction_common.f90 create mode 100644 src/Core/templates/interaction_methods.f90 create mode 100644 src/Core/templates/interaction_type.f90 rename src/Core/{src => }/templates/linkedlist_methods.f90 (100%) rename src/Core/{src => }/templates/linkedlist_type.f90 (100%) rename src/Core/{src => }/templates/pointer_container_methods.f90 (100%) rename src/Core/{src => }/templates/pointer_container_type.f90 (100%) delete mode 100644 src/Docs/doxygen.cfg rename src/Docs/sphinx/Pre/source/{conf.py => conf.py.in} (99%) rename src/Docs/sphinx/chipy/source/{conf.py => conf.py.in} (99%) rename src/Docs/sphinx/dev/source/{conf.py => conf.py.in} (99%) delete mode 100644 src/README.md create mode 100644 src/Sandbox/CMakeLists.txt create mode 100644 src/Sandbox/Standalone/CMakeLists.txt create mode 100644 src/Sandbox/Standalone/mod_DDM_MDS_2D.f90 create mode 100644 src/Sandbox/Standalone/stand_alone.f90 create mode 100644 src/Sandbox/meca_lib/CMakeLists.txt create mode 100644 src/Sandbox/meca_lib/dummy.f90 create mode 100644 src/Sandbox/meca_lib/lmgc90.cfg.in create mode 100755 src/addons/closePvdFiles create mode 100755 src/addons/update_gen_2016.py delete mode 100644 src/contribs/MUMPS_5.0.0.tar.gz create mode 100644 src/contribs/MUMPS_THREADSAFE_4.9.2.tar.gz create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHGOFiber1Potential.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHGOFiber1Potential.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHGOFiber2Potential.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHGOFiber2Potential.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHGOwithEOS.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHGOwithEOS.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHGOwithoutEOS.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHGOwithoutEOS.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/AnisotropicHyperElasticity.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/FiberPotential.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/IsotropicNeohookeanPotential.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/Makefile create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/OsmoticAnisotropicHGOwithEOS.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/OsmoticAnisotropicHGOwithEOS.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/OsmoticAnisotropicHGOwithoutEOS.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/OsmoticAnisotropicHGOwithoutEOS.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/OsmoticNeohookeanwithEOS.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/OsmoticNeohookeanwithEOS.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/OsmoticNeohookeanwithoutEOS.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/anisotropichyper/OsmoticNeohookeanwithoutEOS.h rename src/contribs/MatLib3.2_LMGC/Materials/matl/meca/eos/{DonnanOSMOTIC.cpp => DonnanOsmotic.cpp} (68%) rename src/contribs/MatLib3.2_LMGC/Materials/matl/meca/eos/{DonnanOSMOTIC.h => DonnanOsmotic.h} (77%) create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/eos/Osmotic.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/hyper/NeohookeanSHBPotential.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/hyper/NeohookeanSHBPotential.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/hyper/OsmoticNeohookean.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/hyper/OsmoticNeohookean.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/hyper/RubinBodnerPotential.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/hyper/RubinBodnerPotential.h create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/hyper/YeohWithoutEOSPotential.cpp create mode 100644 src/contribs/MatLib3.2_LMGC/Materials/matl/meca/hyper/YeohWithoutEOSPotential.h create mode 100644 src/contribs/PETSc_SparseLinearAlgebra.f90 create mode 100644 src/contribs/UMFPackFortranBinding/CMakeLists.txt create mode 100644 src/contribs/UMFPackFortranBinding/umfpackBinding.c create mode 100644 src/contribs/UMFPackFortranBinding/umfpackBinding.h create mode 100644 src/contribs/UMFPack_SparseLinearAlgebra.f90 rename src/{pre_lmgc => pre}/CMakeLists.txt (100%) rename src/{pre_lmgc/files => pre/IO}/__init__.py (74%) rename src/{pre_lmgc/files/bodiesFile.py => pre/IO/bodies2File.py} (88%) rename src/{pre_lmgc/files/bulkBehavFile.py => pre/IO/bulkBehav2File.py} (98%) rename src/{pre_lmgc/files/dofIniFile.py => pre/IO/dofIni2File.py} (94%) rename src/{pre_lmgc/files/drvDofFile.py => pre/IO/drvDof2File.py} (89%) rename src/{pre_lmgc/files/evolutionFile.py => pre/IO/evolution2File.py} (52%) rename src/{pre_lmgc/files/gpvIniFile.py => pre/IO/gpvIni2File.py} (100%) rename src/{pre_lmgc/files/melimeloFile.py => pre/IO/melimelo2File.py} (76%) rename src/{pre_lmgc/files/modelFile.py => pre/IO/model2File.py} (92%) rename src/{pre_lmgc/files/postproFile.py => pre/IO/postpro2File.py} (96%) rename src/{pre_lmgc/files/tactBehavFile.py => pre/IO/tactBehav2File.py} (89%) rename src/{pre_lmgc/files/vlocrlocIniFile.py => pre/IO/vlocrlocIni2File.py} (100%) rename src/{pre_lmgc => pre}/README (100%) rename src/{pre_lmgc => pre}/__init__.py (91%) rename src/{pre_lmgc => pre}/arg_parse.py (100%) rename src/{pre_lmgc => pre}/avatar/__init__.py (100%) rename src/{pre_lmgc => pre}/avatar/avatar.py (92%) rename src/{pre_lmgc => pre}/avatar/bulk/__init__.py (100%) rename src/{pre_lmgc => pre}/avatar/bulk/bulk.py (83%) rename src/{pre_lmgc => pre}/avatar/bulk/element.py (67%) rename src/{pre_lmgc => pre}/avatar/bulk/rigid2d.py (91%) rename src/{pre_lmgc => pre}/avatar/bulk/rigid3d.py (90%) rename src/{pre_lmgc => pre}/avatar/bulks.py (93%) rename src/{pre_lmgc => pre}/avatar/contactor/__init__.py (100%) rename src/{pre_lmgc => pre}/avatar/contactor/contactor.py (88%) rename src/{pre_lmgc => pre}/avatar/contactor/contactorFactory.py (60%) rename src/{pre_lmgc => pre}/avatar/contactor/meshedContactor.py (87%) rename src/{pre_lmgc => pre}/avatar/contactor/rigidContactor2D.py (82%) rename src/{pre_lmgc => pre}/avatar/contactor/rigidContactor3D.py (90%) rename src/{pre_lmgc => pre}/avatar/contactor/rigid_properties_3D.py (96%) rename src/{pre_lmgc => pre}/avatar/contactors.py (94%) rename src/{pre_lmgc => pre}/avatar/group/__init__.py (100%) rename src/{pre_lmgc => pre}/avatar/group/group.py (88%) rename src/{pre_lmgc => pre}/avatar/groups.py (95%) rename src/{pre_lmgc => pre}/avatar/node/__init__.py (100%) rename src/{pre_lmgc => pre}/avatar/node/dof.py (89%) rename src/{pre_lmgc => pre}/avatar/node/node.py (82%) rename src/{pre_lmgc => pre}/avatar/nodes.py (91%) rename src/{pre_lmgc => pre}/avatars.py (81%) rename src/{pre_lmgc => pre}/build_avatar/__init__.py (92%) rename src/{pre_lmgc => pre}/build_avatar/brick.py (88%) rename src/{pre_lmgc => pre}/build_avatar/brick_row.py (99%) rename src/{pre_lmgc => pre}/build_avatar/brick_wall.py (99%) create mode 100644 src/pre/build_avatar/entites.py rename src/{pre_lmgc => pre}/build_avatar/extrusion.py (86%) rename src/{pre_lmgc => pre}/build_avatar/lattices2D.py (99%) rename src/{pre_lmgc => pre}/build_avatar/lattices3D.py (100%) rename src/{pre_lmgc => pre}/build_avatar/lecture.py (69%) rename src/{pre_lmgc => pre}/build_avatar/medpre/CMakeLists.txt (100%) rename src/{pre_lmgc => pre}/build_avatar/medpre/__init__.py (100%) rename src/{pre_lmgc => pre}/build_avatar/medpre/lecturemed.py (92%) rename src/{pre_lmgc => pre}/build_avatar/medpre/medpre.c (100%) rename src/{pre_lmgc => pre}/build_avatar/medpre/medpre.h (100%) rename src/{pre_lmgc => pre}/build_avatar/medpre/medpre.i (100%) rename src/{pre_lmgc => pre}/build_avatar/melimeloLecture.py (84%) rename src/{pre_lmgc => pre}/build_avatar/mesh.py (96%) rename src/{pre_lmgc => pre}/build_avatar/mesh2D.py (89%) rename src/{pre_lmgc => pre}/build_avatar/mesh3D.py (91%) rename src/{pre_lmgc => pre}/build_avatar/old_mesh.py (87%) rename src/{pre_lmgc => pre}/build_avatar/particles.py (61%) rename src/{pre_lmgc => pre}/build_avatar/tools/__init__.py (100%) rename src/{pre_lmgc => pre}/build_avatar/tools/containers2D.py (98%) rename src/{pre_lmgc => pre}/build_avatar/tools/containers3D.py (59%) rename src/{pre_lmgc => pre}/build_avatar/tools/granulometry.py (72%) rename src/{pre_lmgc => pre}/build_avatar/walls.py (87%) rename src/{pre_lmgc => pre}/bulk_behavs.py (88%) rename src/{pre_lmgc => pre}/config/__init__.py (94%) rename src/{pre_lmgc => pre}/config/lmgc90dicts.py (94%) create mode 100644 src/pre/config/readMeshFormat.py rename src/{pre_lmgc => pre}/doc/Doxyfile (100%) rename src/{pre_lmgc => pre}/doc/pre_lmgc.pdf (100%) rename src/{pre_lmgc => pre}/doc/pre_lmgc.tex (100%) rename src/{pre_lmgc => pre}/models.py (97%) rename src/{pre_lmgc => pre}/postpro_commands.py (100%) rename src/{pre_lmgc => pre}/shared/__init__.py (100%) rename src/{pre_lmgc => pre}/shared/bulk_behav.py (92%) rename src/{pre_lmgc => pre}/shared/model.py (93%) rename src/{pre_lmgc => pre}/shared/postpro_command.py (90%) rename src/{pre_lmgc => pre}/shared/tact_behav.py (95%) rename src/{pre_lmgc => pre}/tact_behavs.py (100%) rename src/{pre_lmgc => pre}/utilities/__init__.py (100%) rename src/{pre_lmgc => pre}/utilities/check_compiled_modules.py (100%) rename src/{pre_lmgc => pre}/utilities/check_compiled_modules_fake.py (100%) rename src/{pre_lmgc => pre}/utilities/check_compiled_modules_real.py (99%) rename src/{pre_lmgc => pre}/utilities/container.py (100%) rename src/{pre_lmgc => pre}/utilities/error.py (100%) rename src/{pre_lmgc => pre}/utilities/nTree.py (95%) rename src/{pre_lmgc => pre}/viz/__init__.py (100%) rename src/{pre_lmgc => pre}/viz/visuVtk.py (73%) rename src/{pre_lmgc => pre}/viz/vtkContactor.py (99%) rename src/{pre_lmgc => pre}/viz/vtkContactorUtils.py (99%) rename src/{pre_lmgc => pre}/viz/winEntities.py (95%) delete mode 100644 src/pre_lmgc/build_avatar/entites.py delete mode 100644 src/pre_lmgc/config/readMeshFormat.py delete mode 100644 src/pre_lmgc/utilities/variables.py create mode 100644 src/tools/cmake/modules/FindUMFPack.cmake create mode 100644 test/RIGID_2D/1DKPL/command.py create mode 100644 test/RIGID_2D/1DKPL/gen_sample.py diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..506077f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,29 @@ + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0) +if( CMAKE_MAJOR_VERSION EQUAL 2 ) + if( CMAKE_MINOR_VERSION EQUAL 8 ) + if( CMAKE_PATCH_VERSION LESS 3 ) + message(WARNING "CMake version is inferior to 2.8.3, some features may not be well supported") + endif( CMAKE_PATCH_VERSION LESS 3 ) + endif( CMAKE_MINOR_VERSION EQUAL 8 ) +endif( CMAKE_MAJOR_VERSION EQUAL 2 ) + +# path to homemade/taken macros/finds +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/src/tools/cmake/modules ${CMAKE_MODULE_PATH}) + +# Force out-of-source build +include(OutOfSourcesBuild) + +project(LMGC90_dev Fortran C CXX) + +SET(LMGC90_MAJOR_VERSION 2) +SET(LMGC90_MINOR_VERSION 0) +SET(LMGC90_PATCH_VERSION 0) + +MESSAGE(STATUS "You try to build LMGC90_dev") + + +include(CTest) + +add_subdirectory(src) + diff --git a/README.md b/README.md index 2c5d46e..f3ce3c0 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,21 @@ - - # LMGC90 project: user version # # Downloading -To get the project please check [here](https://git-xen.lmgc.univ-montp2.fr/lmgc90/lmgc90_user/wikis/download_and_install) +To get the project please check [here](https://git-xen.lmgc.univ-montp2.fr/lmgc90/lmgc90_user/wikis/home) + +# Contact us +If you'd like to speak about a bad behavior of a simulation, to propose a non +regression test, to propose a new feature or any thing relative to the +development of LMGC90, please contact us via this mailing list: + +lmgc90-dev@groupes.renater.fr + +To stay aware, you can subscribe to this mailing list by asking to: + - Dubois Frédéric : frederic.dubois@umontpellier.fr + - Rémy Mozul : remy.mozul@umontpellier.fr # Organization @@ -24,6 +33,14 @@ For Windows user, jump to [Windows Version section](#winversion) # Linux and MacOS version +# Versionning + +People contributing to the project can view up-to-date information +[here](https://git-xen.lmgc.univ-montp2.fr/lmgc90/lmgc90_user/tree/master) + +The versionning tool used is git. To have more information the workflow used +and how to use git check [there](https://git-xen.lmgc.univ-montp2.fr/lmgc90/lmgc90_user/wikis/LMGC90_user) + With MacOS and Linux the installation and use of LMGC90 software is through the use of the terminal. You must know how to open a terminal in a specific directory and move through your directory tree. @@ -59,11 +76,20 @@ For visualisation: * Python VTK module * Paraview +To build the sphinx documentation: + + * Latex distribution (with pdflatex utility) + * Sphinx and numpydoc + * Doxygen + * Graphviz + * dvipng + To read some tutorials: * Jupyter * iPython + ### Ubuntu 12.04/14.04 Debian 7 To compile: @@ -78,6 +104,12 @@ To visualize: apt-get install python-vtk paraview ``` +To build the documentation: + +``` +apt-get install doxygen graphviz python-numpydoc texlive-latex-extra dvipng imagemagick +``` + To read tutorials ``` @@ -105,6 +137,12 @@ Due to some problem one must add to the *.bashrc* file a line similar to: export LD_LIBRARY_PATH=/usr/lib64/mpi/gcc/openmpi/lib64 ``` +To build the documentation: + +``` +zypper install doxygen graphviz python-numpydoc texlive-dvipng ImageMagick +``` + To read tutorials ``` @@ -128,6 +166,12 @@ yum install epel-release yum install vtk-python paraview ``` +To build the documentation: + +``` +yum install doxygen graphviz tex-preview textlive-latex texlive-dvipng python-sphinx python-numpydoc ImageMagick +``` + To read tutorials ``` @@ -152,7 +196,7 @@ sudo port select gcc mp-gcc49 sudo port select python python27 ``` -For the doc: +To build the documentation: ``` doxygen graphviz py27-sphinx py27-numpydoc texlive-latex-extra dvipng ImageMagick @@ -176,10 +220,47 @@ In the *lmgc90_user* directory run: ```shell mkdir build cd build -cmake ../src +cmake .. +make +``` + +CMake is used to generate the makefile. Out of source build is advised. +So you need to know the source tree path, decide on a build path then: + +``` +cd build_path +cmake source_path make ``` +Instead of cmake, one can use *ccmake* to change variable values on +the command line, or *cmake-gui* to use graphical interface. + +If you are only interested in rigid computations, some external libraries +can be disabled ; before the ```make``` command, run: + +``` +cmake . -DMATLIB_VERSION=none -DMUMPS_VERSION=none +``` + +If you want to build the documentation run : + +``` +make docs +``` + +It will build the sphinx documentation in: + + * docs/chipy/ + * docs/dev/ + * docs/Pre/ + +Where you should open the ```index.html``` file. + +The doxygen documentation of the the core of the software would be in ```src/Docs/html/index.html```. + + + ## Installing Our policy is to not mess with default system paths. So instead we advise to @@ -234,7 +315,7 @@ in general. The only pre-requisite to use LMGC90 on Windows is the Python distribution used. A binary build is provided to work with the Anaconda python distribution -which can be downloaded from [here](https://repo.continuum.io/archive/.winzip/Anaconda2-2.5.0-Windows-x86_64.zip). +which can be downloaded from [here](https://repo.continuum.io/archive/.winzip/Anaconda2-2.5.0-Windows-x86.zip). Once the file downloaded, unzip it and run the installer. To generate visualization files the **vtk** python module must be added. To do that diff --git a/docs/Pre/.buildinfo b/docs/Pre/.buildinfo index be3e421..d2e5716 100644 --- a/docs/Pre/.buildinfo +++ b/docs/Pre/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 7087fddd1fcf46ba6ed4e8ccea462539 +config: 18d4cbd131087e90d4cf97685dfe9ec3 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/Pre/_downloads/granular.py b/docs/Pre/_downloads/granular.py index 47266ae..16278b3 100644 --- a/docs/Pre/_downloads/granular.py +++ b/docs/Pre/_downloads/granular.py @@ -1,6 +1,6 @@ import math -from pylmgc90.pre_lmgc import * +from pylmgc90.pre import * nb_particles = 10000 radius_min = 1.0 @@ -12,8 +12,8 @@ ly = 100. [nb_laid_particles, coors] = depositInBox2D(radii,lx,ly) -mat = material(name='TDURx', type='RIGID', density=100.) -mod = model(name='rigid', type='MECAx', element='Rxx2D', dimension=2) +mat = material(name='TDURx', materialType='RIGID', density=100.) +mod = model(name='rigid', physics='MECAx', element='Rxx2D', dimension=2) # generate the triangles bodies = avatars() @@ -24,7 +24,7 @@ for i in range(nb_laid_particles): max_radius = max(radii) -mut = material(name='TDURx', type='RIGID', density=1000.) +mut = material(name='TDURx', materialType='RIGID', density=1000.) # left wall : rough wall left = roughWall( center=[-radius_max, 0.5*ly], theta=-0.5*math.pi, l=ly + 2.*radius_max, @@ -55,7 +55,7 @@ svs = see_tables() tacts = tact_behavs() # interaction definition: -lplpl=tact_behav(name='iqsc0', type='IQS_CLB', fric=0.3) +lplpl=tact_behav(name='iqsc0', law='IQS_CLB', fric=0.3) tacts+=lplpl svplpl = see_table(CorpsCandidat='RBDY2', candidat='POLYG', colorCandidat='BLUEx', behav=lplpl, CorpsAntagoniste='RBDY2', antagoniste='POLYG', colorAntagoniste='BLUEx', alert=.1) diff --git a/docs/Pre/_downloads/masonry.py b/docs/Pre/_downloads/masonry.py index d3913f8..40f81f9 100644 --- a/docs/Pre/_downloads/masonry.py +++ b/docs/Pre/_downloads/masonry.py @@ -1,13 +1,13 @@ import numpy import math -from pylmgc90.pre_lmgc import * +from pylmgc90.pre import * dim = 2 bodies = avatars() -mat = material(name='PLEXx',type='RIGID',density=2000.) -mod = model(name='rigid', type='MECAx', element='Rxx2D', dimension=dim) +mat = material(name='PLEXx',materialType='RIGID',density=2000.) +mod = model(name='rigid', physics='MECAx', element='Rxx2D', dimension=dim) # bricks, half-brick, linteau and opening definition brick = brick2D('brick', 1.e-1, 5.e-2) @@ -71,7 +71,7 @@ mats = materials() svs = see_tables() tacts = tact_behavs() -mut = material(name='TDURx',type='RIGID',density=2500.) +mut = material(name='TDURx',materialType='RIGID',density=2500.) mats.addMaterial(mat,mut) floor = rigidJonc(axe1=3.e-1, axe2=2.5e-2, center=[2.5e-1, -2.5e-2], @@ -86,9 +86,9 @@ except: pass # interactions management : -lplpl=tact_behav(name='iqsc0',type='IQS_CLB',fric=0.3) +lplpl=tact_behav(name='iqsc0',law='IQS_CLB',fric=0.3) tacts+=lplpl -lpljc=tact_behav(name='iqsc1',type='IQS_CLB',fric=0.5) +lpljc=tact_behav(name='iqsc1',law='IQS_CLB',fric=0.5) tacts+=lpljc svbbbb = see_table(CorpsCandidat='RBDY2',candidat='POLYG', colorCandidat='BLEUx',behav=lplpl, CorpsAntagoniste='RBDY2', antagoniste='POLYG',colorAntagoniste='BLEUx',alert=5.e-3) diff --git a/docs/Pre/_downloads/philosophie.py b/docs/Pre/_downloads/philosophie.py index b9de7dc..3c0103f 100644 --- a/docs/Pre/_downloads/philosophie.py +++ b/docs/Pre/_downloads/philosophie.py @@ -1,30 +1,30 @@ import numpy import math -from pylmgc90.pre_lmgc import * +from pylmgc90.pre import * dim = 2 # disk creation radius = 0.1 -disk = avatar(type='RBDY2', dimension=dim) -disk.addNode( node(type='NO2xx',coor=numpy.array([0.,0.1]),number=1) ) +disk = avatar(dimension=dim) +disk.addNode( node(coor=numpy.array([0.,0.1]),number=1) ) disk.addBulk( rigid2d() ) disk.defineGroups() -disk.addContactors(type='DISKx',color='BLUEx',byrd=radius) +disk.addContactors(shape='DISKx',color='BLUEx',byrd=radius) # foundation creation -floor = avatar(type='RBDY2', dimension=dim) -floor.addNode( node(type='NO2xx',coor=numpy.array([0.,-0.05]),number=1) ) +floor = avatar(dimension=dim) +floor.addNode( node(coor=numpy.array([0.,-0.05]),number=1) ) floor.addBulk( rigid2d() ) floor.defineGroups() -floor.addContactors(type='JONCx',color='BLUEx',axe1=1.,axe2=0.05) +floor.addContactors(shape='JONCx',color='BLUEx',axe1=1.,axe2=0.05) # materials, model and groups definition -mat = material(name='TDURx',type='RIGID',density=1000.) -mut = material(name='MOUxx',type='RIGID',density=100.) -mod = model(name='rigid', type='MECAx', element='Rxx2D', dimension=dim) +mat = material(name='TDURx',materialType='RIGID',density=1000.) +mut = material(name='MOUxx',materialType='RIGID',density=100.) +mod = model(name='rigid', physics='MECAx', element='Rxx2D', dimension=dim) disk.defineModel(model=mod) disk.defineMaterial(material=mut) disk.computeRigidProperties() @@ -56,7 +56,7 @@ for i in range(nb_columns): # adding floor and rotation sample bodies.addAvatar(floor) -bodies.rotate(type='axis', alpha=-math.pi/6., axis=[0., 0., 1.], center=[1.,-0.05]) +bodies.rotate(description='axis', alpha=-math.pi/6., axis=[0., 0., 1.], center=[1.,-0.05]) try: visuAvatars(bodies) @@ -70,7 +70,7 @@ svs = see_tables() tacts = tact_behavs() # interaction definition: -ldkjc=tact_behav(name='iqsc0', type='IQS_CLB', fric=0.3) +ldkjc=tact_behav(name='iqsc0', law='IQS_CLB', fric=0.3) tacts+=ldkjc svdkjc = see_table(CorpsCandidat='RBDY2', candidat='DISKx', colorCandidat='BLUEx', behav=ldkjc, CorpsAntagoniste='RBDY2', antagoniste='JONCx', colorAntagoniste='BLUEx', alert=.1) diff --git a/docs/Pre/_images/math/034415649a7db35f209020f05e7ab6ac3d6e086b.png b/docs/Pre/_images/math/034415649a7db35f209020f05e7ab6ac3d6e086b.png deleted file mode 100644 index fe812875f214753e4dc87f422cb924915056cae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2728 zcmb7Fc{mhm7q^XN!p&%OF-B;HX0jVglxrzuUozDoQnnew$etx7bVsEuV;>P3LuE^h z#@1q)(Y1uJ7DgCLF2=1fpYHeH_uqG(=bZQVobx-s_m6Yl=S_EVu#y1E0r~j&By6lL zUHJF}C zO#QIdIFnTDd{7e$wZ4SsPBBrcV6^wr0*49%V}s|<(t+lwt zZ8=9o33tzN(kq|medyZ6CX?W4(Q~n~`Vc_LA>Q1hNM(yg zT|dWBLJ-w%$7^aGagscd?;4>0foMv_UW4y;p&#@#>K3X@GGmMOSTi1_k}5WRe{LkM zTf?M@;wFtWCmL)c87l0qDZRW@5V9?&tgm(s@Dx>Y?g;XXl($p;(6Z49{my}crmS>C zcaMMtzY&s^>J-%9_I%yccS@uEoPF&%LZ(>lQAOTk^Siz)sRPq>J_PfivQz~&Onxpl z#R3xFn$EAWuY1Jlx+ls$Y)taoM2LJs<96cxiD_+NS6!R9naKbbrAfJL*}0gMm-*=v zJV%~5U^pqy-=Od4!_y(+yQZTVA~H;2urkG&DD~dJspwQq9)dV_EB5}5v7GmcwDz(| zf7{j#@doViMItk;IG0iTM~JMAlB9}kkivM8sBBoQAS(PZWw&5#?vLY#m(^)!U&J^S z_}bkg8d9QijND_dHu~(Bn3MJ1g9APN?r?=yRR0{Y6Q_`FQvt8j{32D%q3$PBr0OMf zgD@U#a2=hf}U+7Q~dh4$`eg( z5-Ne&QXUCm4Zu-^VI%p(XPwokrYR4SRI$Oa@~rfZRa%Hzsh{3MOQN-Se}7))2F?Fc zNbRKPXZcxDR=U9NTift&XhV|u$ve9eM`L=F&O@4 zX@;}v-BJs-_r3pP{$<0I$0Mmlc}P@MP@br&@Y~lPf{tU`w*r_0Q(WO(N8eVvJ40iM zpqLOzJE8x5kx6eQ)JgyxvuLxulbm-yqpS9b7F7!IzI^CUOOM|MHkHK9QZ};p^Dsy{ z8-z0ax}jo5cqP=ev&Fw|Of8lFlJF6?TDNii4BUJ6{Exy6{APZ%80&q$Gfs2z0Vw)A zFf@3%-9fK2rIb2aL+aA|iI4%y5d^{QS>yRv!ZfPk&h-{JhRGhGaRVi>pv-s`U!+OqCkw)C<$w zL34DV7Q&3n2+9`^GkcR1hegCKjz5LN$jM(J+k3r>HNpQTWRdm*waoi)*+!wb2JZC)=0JZ)jw4o?yB z{k;$IySa0ZFtuek_6OC}6`3e~Aq163kg$Sy^|Ou1RZ?!}?Q$6oWJ9!*G~+@TJwlmq z#*nB5fNDBN`O~#kEHp$Ixa|+>Xffl9q|gUg zCP+msLLTeRcdy(kZdo|*{|bC40Dt;B z^gE_(>yi!v@)2N*0YmHx_r`5x!8KwkoDBanJ!C72{XikTZT$y!ZAn|Bzw$#={-C9zakvY{A}{C0+|JAmeBGG_ygM>x9T+tVizElw3~`aKMTK(U}__zb=Dn`4P4yW{@#@_5F3&l6`Ko> z@@_2rN^dW~XP#*Gxa-(xQZ={}924(MV*9VOFLFNj=LGnRwowI_)_GTQ@pdf>%P?Rt z4|zaPxJqtW47G016`GzK?-}R4)nMg)NuMbl+`;MHxzip_j{(y;WaHDCjkd{@s+~Zw zd+)xT2C@g7UPUiEAl4+jig5Na(HOo3L04&dFmM?;|N`JXZ13FrVe%bfX}F7EVZB+mkzyn96hWSnNwv{;m*_E+0<&0u7Z zS3P)w{LW8`vz!M)G#uTb&R5ua|+B$~k&gk)G`Yv`$W8?%98v>O8QN&pEyKEzyN-Td=*HMgq6 QzrHq`vksQE=H9pe17i6pO>_%)r2R1cVu;+Q^ou1#xa z$Uc12XBs0{Is3f2(#EJa8%3|Lbo~4x0{`X*}Z?z*#bshtiF=RKAa0xbd4LN?pl@E@J9d}*!K zs+IrmPnO+Ywfvb-F|WdY&VXEP`xTQvZ24QAHMRfQ*IifUy?JqB@4_VC8t0dt@z)uu znv!;G%dY4Z=1RF@am6J4oeJ|cXOBLNLZ#S^d0iQ@*_IS zc}7ZEPjM9U3jSGpbAH?3=ob2a=Yl|WIK%v}PfSj^uI;;Fo|ROXwQ#?4$O^|;#tVNY zY&YmCSrZ$dccl1=mFdP+;#(!f=7~$lS>F{>TQ74!>VQbigDJZj%<4bo%>8Ls4{$eh*AJ$L*q#VA<#!Bcu!;UrTQx3Ji&1aYw;HW2`8Ww$Fe?YPS75?zv cl0?}W#@6*B1&)0m96@Qu)78&qol`;+0P-38ssI20 literal 0 HcmV?d00001 diff --git a/docs/Pre/_images/math/389ab841ae16a7cebd461d3c10bda5daa9b232a2.png b/docs/Pre/_images/math/389ab841ae16a7cebd461d3c10bda5daa9b232a2.png deleted file mode 100644 index 031b1f61f9d0ddfc23211fcab38c83624300e8e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2023 zcmb7_dpHw}7ssbUE-m-_ZE9Y_M$HUqL$l51ZkcjPLQ!FoTqc@i2+3uyS;{R;$@SIy zx+{8J)-q(Ii(HfB)~~tcxBmS7`8&^ZzUMs8`JD5|dCv2kR2L`QAxSk!003~v9*=PY z07S}#IriXwp?X!v9S{aH7YCBv-rk-t{eKN-Tv{XSk&Se7atEk9OYeAaeBJL0H}d^9 zJ_#ma+@&TgN`&LjTmt}rFMqp8o*_^j01&sd$JmgfC%$>7=9d{rD;@~QiP_oXq9}&{ zv8!$|ddG5ah^#m$gYW)97<-^#gge>SdHUz6wRNR-XT0_=hfi9=m1cGaE=`Kin)K$G z1pHfD2PTwSz9GFW53WFaUIFKv-&%-qy8XC|ey&4x zA&kfh31?T0lrfA1yem_2$%Ft7-OMm2v#POpzC*_9)y&rBSj?BH%-d^R23o+u$Ml^>v$DRjh9=w23eY@%QwbLFK9k7zawDz8X zk`Q?d_>APS`+Vr6!=I2ITF=;bRWLgIks_3IuE}v+(=~}*n<#*-eDG!F9M|NHs-Cfp z*QIYvkj}N%1Pz+aMq)A=Cur)cr0d12jx0DJJ@|n-Nmw-$1tVQ#4KW0lxoqsuSRxmf5 zZE6#Et_Z^u*id-%vYnf$E)G)1XKx^a+Y?#6k6SZGJn=;#VPvaF87ZrLYh}!Qfb5gV zc5~X@Qb_Y^E)9sxTlm*i>ZiP?I!JQ1mZUj*TPuvs&sLIZHtM~+*k$|0)K0x~Ti#Le z1kZ2E;~ibKkz=XU?-TyjW6k+bN5@Ugn3qLReG{tX+P_D#to}zvOUz^RrWW@hZVHt~ z-6!jfMgVKb@iTW_zMXm+v3o_5`ldm8>Keuw0r|ERVO~F~rrk3Qwg{-u!ryuRRz=ss zvB7etJSgh#nAp}c`-jnliJuosv#jR9Cen9a_vibNC!$hS!vYz`;0)gej+{CC7Z$>Od zgt^N--EJD~mI)oehOO}~eOBl?vRvOK8|P48(5K7LbbA3Ke+a{!+*Y`o>>1@{7F)=8 z{05!}tSkLa%+pz}(16GIJ!mm)VRaO3#Q9_s9|e}X{Kj$^w}bpAyR!-o%T&r~xp~ja z9L<-kr**U^>ing>>5ZxtF~{x!)!R5kYCq1s2NAj+P^WXvml@-KDY%X4^V$e2&1^lu zx7<`+ob?%Bxa!L!o+$hA*j!Jyh=B?!;@4gQ7Wx#O1WQzWRvCF7{|8xp2c^C{HdRo< zxSdagA*k+%$8+xBoM|n4y35 z)x|VlwJoTl^g8gK!LTR@DSrQbEEJRg#x!_KnF$EFPJ*g*OFO!CoS8v?_ zXq1xI-LxK3R{!$;^!gKAm&NJ!wQXa&Z~$hw4l4hXz^< zs90(4Zt(Y2H?@ZpQdMMjqb2oDCO0THg>hUkSj5Pmu%T>MdZuz^-Y004ZQV2uTq$5I z#vYNhiHD<-Ucg7d<`~1q8w#vAWl_kn=!8jCYOlu+d3OX#e%yilNv7PT)Z!9d9~;m> zpU}sDc@Y`1QclT&oJJlSorbH;wQg7dT_=c|z|0g-dgU!zZj@WZN;2i0OX{-_pZKvv zZY$$dB%qY=IojtR%3jp)!Su=^T5jfWUl*hIstve!5w&?pFnGcOlVZYtg1ev50z!4` zvMY3E!IpyNPB>IB_|6=IJH{p(SxXofh|5o58$yv8_4E)3zE0y}K|1i4@Pd#OI`9HX z0x0X9&=_iMvU^1T+6X_)UccM9s$55Os2{=5+6n9TGRI`Unw+=5RNuP!;ZBl^X#uOm zmn{UITFxC$>d0ppm}7>H44eTDh4_t|3?@7dRgQI4a)pZawQRqFGgNn)T1h>iGzWo@ z@b~Mp7>11fjgbEbm!Xng$)wFhb^T__TS+fKX+7D)8YMl6XW6HMd;Xv)=~yq-q}9>c z5d3m)1ZP$(0b+~@r?cdiOj9l)OxEcOrdR#O+%KQqw_NqM4bdPRmUbD26cA&oQhzTm z?P12-Z-IVN{B$juWtjirgy{Fo@s7-4yqz(^X!UYm~0MxHzV)B0LSGsnw zPJG(H(KCe%R5vIhE-_$kpk!nozIF`e9zC?GXn`3mgcVJG#M*4BF#6CXRAkCR&G&}= ob8Y53;dB@zni~2%W+rG2?XMlYmqvw8|NhnXc21ZYTR+-=0Zt^RsQ>@~ diff --git a/docs/Pre/_images/math/667188468983fb96809cdfaec211b867038325ef.png b/docs/Pre/_images/math/667188468983fb96809cdfaec211b867038325ef.png deleted file mode 100644 index 7a247b6e7e1680c70536955ac39720c2e4a64f01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2507 zcmb7`c{mi>8^^~!*~VD9jBE`i#?2T@akFOMw=5|#6(+;AmMw9O-5_LQ#@5IfTh?S} z>^qT$TcL(m+z@U60KjKvYG@At zu&Ob&IgpJx6F%xtn2Uz3rK8d5=_ynGzhRQ0RJv8R`~7ofDHq61g~!K7XaNUcGgv@H zSmv>}OpaX}oGXIOF3Y9z{);ltuX-G~20JAo7tsI;`8+KmaDRrJS>A722TT%8$vl{8 z5C{?p$7oJPCaupKcX{paTnzvtEROVS@0k+kP>xD-sB=l~Ho>oi)OgRwvqCyPD`B;~ z1XuOC>=7kt^Bb{St%)Oq@Xz$Xk93xx)`BR@L88q3OZliEPOK1a_p+h8Y%R-UJ(k^D zLgyti5GXp)!e^{ATUy+_6cdm`DUMaSD67 z!Ld7c9#*t5!TU2!LGXIFaq3WKpIDZmuP`gvq;50Te-B=+&Et6()89(Y^g!lo>InM< z@Vrq<4H;UrSKU-AHi~vC&k>IwxDMM7R1tOp?Mj~`X|i~xLPs4OZ$22Fuo{sga7YEC zjY=C9olEYv7oFHc3NB>`RrgAxF0@N3Ei&(cIQx0vO{kE}OjXtw5r_SWhz~ZT!M3F@ zYBp8$u3=qk_PbVLrd4y7&*rx=O+?Ad&`3@y3kRP3s?|R`mkujBdI#TQop8eO73)2{ zm>Q#2LC?wGCtwp2`|e33KYGagxBH-XzcbDNNp4%PsmL}+P1r0!(K_#GFNX)tm)SxlrJ-4#e0?to3T@eJ>lQL2$^TM;%!E2HhMr#jrlT(5L_ zN(`^fY5NWs!<*#R)dg=hNW{}Tel(ms6t)E=>2Q@4clj$DK5L0NbewSrt0U=?(gX3; z_K)V)VzzBBYt#HGHu^3Z#?nT@u%hrr-3`!I&(>8JX=(&;BimkM15Q=ER^dpoe{TNd ze}unm>tPKPxF;Ap$)mC_nz;vCvk4|hj&ga}xX+sR4PsmFLU`YFa@- zdAf}4p62>Ow~6xbEd83|HvKnsI_6kA6^rhUI|VAl+URq7$7R!B*W%*vz@%B^n-I`c z*pb}9nAA!}7wn;Uu+%F**vrxzV{m^D@ccLz=*Ia>ox$hhtdbd@v#*awXX~D%^WGfu z`4M7?uf8Gdu~|3`M3jA)`~?DtqJE9yb=Ce>a@ylBb_N#_kX&BJ6+s1uULh+qXt3?@ zU@6vuy|{s%zUG@&0)LgG7>(6Exn!(rxpB3ZEBzT<>;X{qyCk`Y6QwJ4B_tVupe`Kj z_l(J>B+j;ehaP>?MdnZUWY{4Zx7+hI#@a0Zgs@!!^{_;3cgwL(%8?@r{6ZsUl~XG% zFaDuRl{ytC*%?)|Y}Bs!^orTP^tpY0(Vvqi+VW%D1h=$J^1U zfh!RH*wx`=F)uC4$|*|JHp|4s1vt@vZ~I5CPtKtblSMDO73R?KVL|y-X=mg$IoUiD zHFa<^qOUD^sNqaQ3R=q>q!BUP@AZH8{wg?4 zF##jkPEX12&4+)IrW+@J*R_E$PLQQ7cltR;{%dI51&cQ}++GhYg?-7(lF3qtpT_{n z-+E-UURAoH+_k@cQalPi`B9UC1C(sl(7MAN+fdnctNe-J$7O$8SXh6GW4p_K37VE; ziq(_Kkq{Ao)9bsxm0~5GagVYf4B^X7`mENZbR?@2rXcZ-8m&%JsGv<*-9p>6zZW6s zNrrCB2G(mVRp&W+tA*BoBX9SN(wE%6I;-ZZ|20aX1&F1M?>l2y!)N`<%VT`gg09xM zIGCsN(PeagFr=svWK>-8qvpZKB80Ts(!Iawd$6nA`CHEa@Et5sQus2X61V!aUZR9X zP#wj)5%&Mc=bIqq~+p`bBImGxj9FE#6aPRq^>Io`SV@+^2*XqpV7pv!DR}Sxwjvuc~;%GoOV&Pc;JYXFd zehx5gP4`dfFz4&JC zjA@r;K4uKQZb5_qod@hL_NM-5$?`r6Ck%2$K!Y{l{tgm@6@eAJcdBdza%vP$-(fN@nhJlj z`}o_442B&s7zoy&rUVDVUTbf+yf=sq!D5hc-> z`(M}ke_;x@pe}7$m9=0eqAFBBE$&BD@OD=BLZMpBhc>*8SHM~8jc^sY57Ry=G$2RI zrmiQnYQo!GS*YTIzgA?zAFj)9BN^-PHoTQr?OWJ?P-Iy$7QEPP3``Y&O#?+81##ys zkD`gapgJ&7)>}%UyWH{ZgW**l@bd#**L8Gf9xih;YYDM;8QJ^B2OR&g>sm`a80ju{ z@adyGRZ+aeeBkGG<;E&|rKobe?lsB|-;QpteU2HT;a>Q!e$33s+OWpp)?fbui{YW) diff --git a/docs/Pre/_images/math/a6795d14a31aa864e162da06bcc14d9801cbdc11.png b/docs/Pre/_images/math/a6795d14a31aa864e162da06bcc14d9801cbdc11.png new file mode 100644 index 0000000000000000000000000000000000000000..b87f7eda16af2c7e0e4d1b0643527aa53f2e89e0 GIT binary patch literal 2724 zcmb7_c{J2tAIGO}CS#dwStBMpWlixjlCh0#%vcL!FJ?k0X$&!bQbLlYDNATV31Ljx zC$d!bJ-bL4O9&w|kDmT}{(J5@_j5nzzF+se-{;(O&y7Q)Ore}&oFEVgYKAnj0f7MO zL2m&$d{AjMv(SS@6K!c{%wn+)+W%{;MOktm9N@iSgR%vQl*Tt?X>7PJbln)=L#mvQ z%ElaM9D&G7*Fm78AO6fkY05{BAMEX!85!8!8d=81J)$V_vKfFeCs?e?u9|P>;Uf#h z3FNp$EbTO`MnR$c0_4XGJpw8RFh%}3@~4hCXG&MSH;VS4GPM_Pqoqesb8kz`P8UoH z8d_OE>c+Ig?#7WD3mdo-n{?uW=ErQMpF_{C(L@34~l#4CGXkb0_I z8S(PG><#Hs14Myvh#uuy^GDm<+oqL-vcA0e8bp>c>8S zWc6c#04y<4K$7;gE+2bIYRJPE-KP`l=_lv=JwwgPB*t0S(n7s)ACSaj1M=2ceXVGE z)>L1nPxX=V*3@Yax_LRhe9Ya5Qdy^9sevFK`tqqOZ&6NQw7A0e?Q@{_yeJ*j)Zw%$ zgs3pWWpgAI;&PWc*XIs>`>mFfJD41i@Q`nptBoW|shjv9#NPNX`r08CgdQ{?1oA7e zqf)j9zQ$=SK4i^GR(>+qad}n-O2F2JP$BLSWsJh!QjtH>NLV2R=!0$Nop3QxTcru|$JnVO} zd6-^yA43`4_{)Fp36H`_ z=1YW>JU5=b0Zd(TW{=c8o5qA40w6k?k)w$8Q=7 zQ?^(dg}Faghn_)SUmZxGB@q=X${HS~?~tQNTzl6SYnqk2WySMe9jUJmJO`Qjm_bif zOz9ntA)<6&EZ*Oe=JGz}c}9$#6DON;wxQnH2K_rjbMAlnK!+&yZ%wUYzhXuyM}Ew;yn z6HS8E`BbI-#VwZb@0ccvA`F(ksw^P?8*)zZ(a^ZH}8O zb?b=8z1-2*aAe~tBS>;K)+JJBWOP(s!zvQgr6O>pmGO`2WKXux2kF$Kt~uuJbJ zPjo1&*HeGjZtG)sR|G#ACh-OJ-t@Zlj|%0ke><&OuB008Fr(4ixd~P5>_vO}TD zFE4y|(OR&-k01Etu}7X#Vq67Jmsq*u-4@GR;XwxWsZ_+~=cnGm+Nm0!t}b1U@6n#h zrrsf6f&_g1DAJ2cur6A4uptEmHdC|8IMh*MTs}#w`}xsDfM>JXI@S)DmVxE3`&Ev-dbZRF?L%lK0FL}wG&$9krVo`m@f`wAZ4=oSQ z@FJ-O!*EREcw!_lGcCvniI|u`Q+Q-#wM3RmJ$?72UfoXD!mZm524HEJ@!sQ9w zva?#CR5ffaS}D!Usl6u|wB{59rVQk#Qg#D&1m}YpHKMEgsNNC`1_x-WGhDAnQhv69 z?T5oE$ptTDW-hixaU!pJ8+HwbUU$g(T)LXRIWZ}-9LIJAF(~2qpf|aSqdi5~jzbxZ za+A*vwkEYcT4zFDwl7@en|g~RUIY57f*z*O;SmM{w{54TL9$EIlsa8f+}vJ_Rw+4)4!>@Y z<|~PHj*9txsCOcho*It*EV=DfE zHbaWmkn~X~Ar{bs53&7~Z|^|)gS$HWw`FH_aRq(lTjWFrU#&oYF3j2?rv{kq+OVnl zIr;uTR;e{WxE4oNhAk<6@rq!5yFddC!dk5ya-2_C6J7C-0UXcduCukf_D_e^kdE14u1YCs;VlUFop=kx1|Wq zw~Y7hZiF9j&^HSQoQzh9Rpw)4o3P>ITY{VWYuLc%%5)Vdp&G!xHHdV5!y-{pXR~xk zd{$R?e~B^FBD4Xn?8&a5S%xe3J!OD_t!y(geh#PvqP-d&X~x~ z7Hwp$UlrtIJD0@-pDFjuhz*}ax7p+{*50oXrkU)$a!baSv*`-9GpNRL_&9?PlgI+ETFPy7wC_NlY8Xy^6pk3)h=~baxYvc^j6yVU1VYW%7o;+K}pH s!o2T?f92Ic`uD=3#JNDATM*V^v$9w9JIynf{(NX=#weo_gnRUV0HiMuVE_OC literal 0 HcmV?d00001 diff --git a/docs/Pre/_images/math/b39229bb92adf679ebe7aa3a58f330b21d6ed3d5.png b/docs/Pre/_images/math/b39229bb92adf679ebe7aa3a58f330b21d6ed3d5.png new file mode 100644 index 0000000000000000000000000000000000000000..8507e989301b4e24fdeebea8d0e6ac322a9429f8 GIT binary patch literal 2109 zcmb7`dpr|t8^_nu<17o2LL-smh|-)EV=Ob~P+B=uPX}Sb<4m4456>K{IYbQG9GeiP z#Vac#XA^~x!>|x0r;vC3_5S_dpU-_?zt89TUcc+U@4v2pog5L8Vv1q_06@~-4vql; z4$uYKLFAy|qM^)C6uAI?v-okqQ{SsL4TF*zBO{uocD#;?j&+gS+GiqeTF&Wd zkKsVnKWz~Mgann-b@}$^8yAhhUF@|Z3j%CYfN{t1)m}2jXd=;_%6q-ZCKZF9<)rzf zFaio0nI-OF1==smKdNQZ?TGByB_*ojHP_?O%yI?>yePCKT33l@*As3`iG%0^<8AKD#)Gs?DkczB%Rq&PBh04^R4D?EP}=r=Pq$sP+sl% zf2Yx^GHNO#2I@)AxJ4B&d`l1zY~fm&dfG5nkvlaL`IUs|*7Xkys&%{U;l@PNQlzm+ zJ&t7`cG@{F>5Qi#;@WO6oU~fy9*>K-DCNHZx*>1K1$Ce7+s@qMa4SBCg*8Gjj6<(y3^cP+!vkQrKT{}a1aADQV? zr--%-Wq*O~d352FjWuz;efWSD86+pYva*{)%gD>4CN)<{=G^9nJHzz5{7^(@^SSY= z7hi#?DNlyJc~1H;dDwBNr);0}b`3khGBnq+B+(lkcscOEGV}4H8_%)2QEk|^Bw(>i zC$u7ZWmH*a(cVVLRP|QNp-3vR^x0i`GP}EJrJQ*GuE_DRmGd*%FN{z zvf@uxg!SkWf+rfRh(J6Fx#-|(_2$i{z@wx|oxNpK+lTsqy(Y}tfS+Oow84nLyDMHk z8WTa)@>9xg@W2tQwVfg+`D31+KawPoMtvZ)Z5F>>1bB_n!RLF+$8`q~qGWaVUNEwa z9U562BU3X!bn zTVI?O=-gB9-HCisN!8Tua7DtcpGQ8Rt^>vpWgqH72*s_ z{L|aC|0b0 zulUf3`MjdIlFhplWsBgOJv+Q1q{+Wr3yl`AmotO=e+3+zY_P`8m zz;cQXpkcw;w0nH}00^nFrJ;;}0T-`1HhZ<&2z9~(LJEk{amYvu*M{>r+rcC$mJ@Wy z+$1&T(N}j{UcGekL~W~bRgN_euVGs|Rh_$_EyPeF1&Fuk%w={OlzurWbb<7J0MZjRIq)Cu zMC+iXEkY+HHVkMc!p415x)wpwW5xJ+eQU9aX3_tihar=7Ps%D&)n-fHnEc!m{cHvC z8R(`!#5J!c?#MciEo>1YaK=y;@P^eS2zq1OgWFGTjq!|{6~R`_(<#xcnW4xuboQqE zZu>W(!WDp$fy&!XN;8nQbCO&I`92-Zdct4@LoaHY!4Nu^Vt-sN2q90&*al^y8^Z7J zRvIYJ%|0Hqw*qIUWGO=SM|}ztwQ?jOgKu-Z>a> z@L4+I6-weM!Af8eu8Q^6Ke5+}-rbcTLkw2$Y!iCoOrQQU$`8#9U-r^;Ay}Cx^)Fis zpr(efQ-l>!mr1S>x$jtkUhezcDjU)}xzAHIvW3!)h#%*3aQX^O3FQ<0Sm7;#XGds` z;6m9Z@k@}X&a?YUv2}YG{dJLB0zdf)Pm@UcauY*pRTONeo`^QVF+hLtK-SOg9-@T9 z**`^Y)q1A2gupFjBR5$6(@D+J?`OYeY+|EXK-G_Pb^7~T59bpv%N%#k_LxXV&xgS# zSqa0AS-l_D-?QOE(WVyQaGB!ZxZZw{zQ(zr>8yAAM&y;lW>{gTRW#Xu3 Uzz5YUl;0D8y^SNh(#jkEUwp>wt^fc4 literal 0 HcmV?d00001 diff --git a/docs/Pre/_images/math/b425d925f1283bab52dde13193ba99f3de20e162.png b/docs/Pre/_images/math/b425d925f1283bab52dde13193ba99f3de20e162.png new file mode 100644 index 0000000000000000000000000000000000000000..2cad59e1aa1a722d76aebc26b40d8efb25566129 GIT binary patch literal 2025 zcmb7F`#Tei7vEemG^VmpcqOuODKF)^ve70Bxg?B9xqA>Qw9eMOofX=!C&egA{+d7g95=Q*Fx=Q-!MbKlt!1(s8j0{{SEd$g?!003;* z#pgkiyA_>exxU*@J7e7J#A5L-{C@*wRNlDjQHphObOoq1J?MUHyy^F8H1@p+on|O& z)T6db%0{6*V*mh!zTXKfJfUz10Fbe=x3zJLd$)?c-(Ic7r3)ZT6 zz5bf(%2x~LCXbDAG|vCJ^dN+BWR0!-)=Cu&6kZPfev5ZNVpF`I3LZrijdwn-_onEr z&ta8jf=n4Mbv#i9W~iA^a^|>FOIuk{H>At2F-9%iyqs4j#nRBS474Bc_4L2e-acvR zoqg`^)!6&-dT{&(HsvNU`0LgFU`8q7k3`{63g2a znY9lz@@R-9F8e*<7bS{2rAR!=3~h)qj8Ts!>Zn0xq<1puMf{5c!KcpDlm6J}onYz_ zR^L2?VFxrIqb-CRj`@DJ|pHs#3 zTw}0rVZPU@P@YUTSVYxQ$p=oczYXX^LB$PL$@1b?(yDxRE6v|9NZn5DC;Aa~b^p7% zklfRWuTSSkb=Sy99Z$QHgLT`mnF6}xnE=Wm&w;5#aU7t zc2v?I)y3BTNgP^0v@m-=n>Fy567t%pDgxy?YWf^!w9p4tn29>LA-#C5ip#YDHMiFE z#so}VD(B@7W^;n)#(f++=iikt-mEo^G5;LAPXYbcwdptG74`+X7fVb+xc>tJ{fA&S z=))0bUSN8p(!VFu=D)!tyJ30 zFa9Owrh10xMENnc46Jr>BIJ|%oYw`Lib=R*x;CxA7kXrxp#d!jr0`oA?j(Xs*PUaY zh@{-2ozWXqGM!QKhJ1D{8h;s7rjlN}H!BZ5<5}Hcp6+R~DduNMyz1&FTexTjGqHM2|xOfz$(s6LY;)L z$3*F^D??HEs>IU!N%1yK_VDs6Brubcm{_dg$_@xs$KNjKn74^@{w5xa(p2rh zd1Q)W3nIgrc)1Gy<;b{^e!K$cqly~ZGk`I=lY3ux>i3Ay-m9`wm=?fL)SNjqXSh}L zK-9MqWbEneqa{GvT4E0-jP&3!ppQe|VL4i)@fhd=yhHi(*<8H!ptqsm8sg;O*s8m} z!q*tjd|#qfY7HF)YVaHp25nk01o|Nqg)fBQKdDV8v(CE;;Pw*(|?2YVGb) zwcr!~Wo2^@WSn++p_YX|(4`=f8#d>-&U&kV>u{icbwiS}El=RLJSDF{2$qv^D4et) z2DVgVnS$?+>NSKjMYrAnKGmceD=W@_svAATO85IoGcuZ-haZflaIWHDqqfKB+R1mn zy4jE}IQ(2Wn8G2SiCN!ItDtpX# zjvy+kqlbz3v2Z->-?iMi+IcHaotc^6%X$-!yi4%YJVtMm<_o6p%mkSS3`4zfa@(Ed z^jb5gpynpO$Y<(w)jcWJYdtK!_3FIp;0#<;Zf#hFc}pAP79(~dNc4U4Q@BMd9f+0+ z6)#>`bFPA4d{Gkom=5oWZ#{Uos?TWiu&=NviJY|fymvd7T)lu)X#_TwWANl8<>ebM viZ{Q0UlIeKX*NfYs}tp+t8AN#8b)HtiOvvl2Iiya_qVpUbF^(l_@(|AcjwP_ literal 0 HcmV?d00001 diff --git a/docs/Pre/_images/math/cb4e1cb31029f79454cae98fb73221ca8662ea5b.png b/docs/Pre/_images/math/cb4e1cb31029f79454cae98fb73221ca8662ea5b.png new file mode 100644 index 0000000000000000000000000000000000000000..38d7d5bc966f44f881013cad97c45c5bee7b376f GIT binary patch literal 2649 zcmb7GXH*l&8V#60C;|yc2TcgQsYoXZA&>w&%=q@KTPcig@Wh0g!PswB29 z&#f~TIc{SeLI41szF(asUy(I2DWIacjl|J5 zYi)d{V<+$9W3%O^Uq3slE?5>nXY`S5?a%Khd|to}J`;5vSb&3>;FA3=2n6ws_;xq( z&G4x~f|Ek8^X#^v)9UO0Ah$B)UuqR8cluaKt-cZ@C)5b;#HB?Qk0!c-ImLlmDb9kZ zvmR`y^kQS};jU6o-)pn26oTY^DgCb#HPv5=t7W^zc(*SgL(&EU=c#YCFSU=LhYZgc za|$xmRG=L=Nop7N&pGtfRp61>h3$yO;zF0URBIFvg;b#mniTXAH>`aD_(_z?T4 z-m>n6MEAjc7FGMOEe^$&OqQ=g#70%(u7hHL#%`zvsZZfxc8q3r@$^F@>Ssbg z+o&08lf7T6dssJ@Gb3x<^8gHZs;9e&32iI0mLJ+#AEPPuk5(z60$J46^dLKpkc?Ed znkBFUGAt7i+Bp}JRC>W5Q#jn0X*s}1r(LDAj?j|%KSanK$emv&`Z%#6{%cFplmHmk zcQllJ@Ou_&s)W5_EWyC^tNo;FJKh(pB>PUX9Z;1$4JIqzRVH}e*qcJK4p?0(8L;e- z6@6uEUo}BGOUht~ty&t_ep~)&uWa4rt4XNK9cMfvu37gqWQ`kWG=y!0T$A!{X&%eh zi8b{66EIF+{MbKwwuO~=6&ed)qm?49pzoi9 zo#i>S(|dl4aYK?7hF#hzmIGyI3Hegvm!>0O>JP6f`~WrSpg{+=vn5>5(>N@~UN3?IUH1ZKzx~?v(2-|520-P3HTyvr@o6l7nv) zl9aj`6=d@6rZ|P7qoA48Zz%09VlH7gL`o>k9XG34(%7FB<#mAu+YS!?7+s9Hkx$4< z!7HiW)QuJukgy^?_0pLiqiioGaR$0~)zdaATq+T3c9N?wCl?cN4fySLQy8`;q51q3 zgyEy6f10xy;nqEdNMkb;#(D-Y8IxB)Xk1TK>n*tKQ+-gzE$?&G9@SOEDJhz159Q1~ z64jfvbA+}A$Iv3R+{I1ue~M(f{))T3wswL>Rl!4Dx|~1T^{+DTy7F@4h=M!^(ivh! zch%E8h}qy+I+y4SO_AO!3=h-_gj+&6$zC{H0`NBWX_M^bK)qNKF!tYdWv7Y6(r#=X z;Y8>Lg;)#D9&GH(Jr3CKbJ=QjY>YZ{$Z8Fb=ehV=8g{;>YcXoEc>r8xigJI+%{*Mr z(Y{^jDtj(NE4r6W)Q6>!E%S<{ai{)-!`0+CNqP<*QS+T0`F9RJOW9BX^`f$~6v6F0 z6#hbXrQa|jOOE4^AGDVGdUMGXfkW)gm&-apIh(w&Msi`N>aP=hhQ+-_qTx-jV?;DO zP;XgLhUEl(`4GMp9weRfl$m;c@RKy`%Jusn*?+J(zJl+f_R*mW_i~W&BAMS0e{+}b zl9=8yd%U#VO)BM zfWgp(2gnzvyq=w1&leo&X1_#q+BTxrTZDH)_rfcye^IOv;qJH%ea!q4DHp+&TD<+~okRsbt zA}Mjx7_stjpm(ln``*~ML3{X@uI0#-DSo?mA-wy2TWJM%@4OKp%`aI*s#5NDN@bNg z^g3-PwFPQ3w7->nme2Zc# zNiSQD3pwQKjl0n%r$vkrIb5ky%JAS=5OAL6N6-r>3b#@9O|rEDO5J;G!wQ8-xIK+J e1>2L#7=9d{rD;@~QiP_oXq9}&{ zv8!$|ddG5ah^#m$gYW)97<-^#gge>SdHUz6wRNR-XT0_=hfi9=m1cGaE=`Kin)K$G z1pHfD2PTwSz9GFW53WFaUIFKv-&%-qy8XC|ey&4x zA&kfh31?T0lrfA1yem_2$%Ft7-OMm2v#POpzC*_9)y&rBSj?BH%-d^R23o+u$Ml^>v$DRjh9=w23eY@%QwbLFK9k7zawDz8X zk`Q?d_>APS`+Vr6!=I2ITF=;bRWLgIks_3IuE}v+(=~}*n<#*-eDG!F9M|NHs-Cfp z*QIYvkj}N%1Pz+aMq)A=Cur)cr0d12jx0DJJ@|n-Nmw-$1tVQ#4KW0lxoqsuSRxmf5 zZE6#Et_Z^u*id-%vYnf$E)G)1XKx^a+Y?#6k6SZGJn=;#VPvaF87ZrLYh}!Qfb5gV zc5~X@Qb_Y^E)9sxTlm*i>ZiP?I!JQ1mZUj*TPuvs&sLIZHtM~+*k$|0)K0x~Ti#Le z1kZ2E;~ibKkz=XU?-TyjW6k+bN5@Ugn3qLReG{tX+P_D#to}zvOUz^RrWW@hZVHt~ z-6!jfMgVKb@iTW_zMXm+v3o_5`ldm8>Keuw0r|ERVO~F~rrk3Qwg{-u!ryuRRz=ss zvB7etJSgh#nAp}c`-jnliJuosv#jR9Cen9a_vibNC!$hS!vYz`;0)gej+{CC7Z$>Od zgt^N--EJD~mI)oehOO}~eOBl?vRvOK8|P48(5K7LbbA3Ke+a{!+*Y`o>>1@{7F)=8 z{05!}tSkLa%+pz}(16GIJ!mm)VRaO3#Q9_s9|e}X{Kj$^w}bpAyR!-o%T&r~xp~ja z9L<-kr**U^>ing>>5ZxtF~{x!)!R5kYCq1s2NAj+P^WXvml@-KDY%X4^V$e2&1^lu zx7<`+ob?%Bxa!L!o+$hA*j!Jyh=B?!;@4gQ7Wx#O1WQzWRvCF7{|8xp2c^C{HdRo< zxSdagA*k+%$8+xBoM|n4y35 z)x|VlwJoTl^g8gK!LTR@DSrQbEEJRg#x!_KnF$EFPJ*g*OFO!CoS8v?_ zXq1xI-LxK3R{!$;^!gKAm&NJ!wQXa&Z~$hw4l4hXz^< zs90(4Zt(Y2H?@ZpQdMMjqb2oDCO0THg>hUkSj5Pmu%T>MdZuz^-Y004ZQV2uTq$5I z#vYNhiHD<-Ucg7d<`~1q8w#vAWl_kn=!8jCYOlu+d3OX#e%yilNv7PT)Z!9d9~;m> zpU}sDc@Y`1QclT&oJJlSorbH;wQg7dT_=c|z|0g-dgU!zZj@WZN;2i0OX{-_pZKvv zZY$$dB%qY=IojtR%3jp)!Su=^T5jfWUl*hIstve!5w&?pFnGcOlVZYtg1ev50z!4` zvMY3E!IpyNPB>IB_|6=IJH{p(SxXofh|5o58$yv8_4E)3zE0y}K|1i4@Pd#OI`9HX z0x0X9&=_iMvU^1T+6X_)UccM9s$55Os2{=5+6n9TGRI`Unw+=5RNuP!;ZBl^X#uOm zmn{UITFxC$>d0ppm}7>H44eTDh4_t|3?@7dRgQI4a)pZawQRqFGgNn)T1h>iGzWo@ z@b~Mp7>11fjgbEbm!Xng$)wFhb^T__TS+fKX+7D)8YMl6XW6HMd;Xv)=~yq-q}9>c z5d3m)1ZP$(0b+~@r?cdiOj9l)OxEcOrdR#O+%KQqw_NqM4bdPRmUbD26cA&oQhzTm z?P12-Z-IVN{B$juWtjirgy{Fo@s7-4yqz(^X!UYm~0MxHzV)B0LSGsnw zPJG(H(KCe%R5vIhE-_$kpk!nozIF`e9zC?GXn`3mgcVJG#M*4BF#6CXRAkCR&G&}= ob8Y53;dB@zni~2%W+rG2?XMlYmqvw8|NhnXc21ZYTR+-=0Zt^RsQ>@~ diff --git a/docs/Pre/_images/math/ddbf765aa11044bb82b756cb3413f75341a70edf.png b/docs/Pre/_images/math/ddbf765aa11044bb82b756cb3413f75341a70edf.png deleted file mode 100644 index fe812875f214753e4dc87f422cb924915056cae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2728 zcmb7Fc{mhm7q^XN!p&%OF-B;HX0jVglxrzuUozDoQnnew$etx7bVsEuV;>P3LuE^h z#@1q)(Y1uJ7DgCLF2=1fpYHeH_uqG(=bZQVobx-s_m6Yl=S_EVu#y1E0r~j&By6lL zUHJF}C zO#QIdIFnTDd{7e$wZ4SsPBBrcV6^wr0*49%V}s|<(t+lwt zZ8=9o33tzN(kq|medyZ6CX?W4(Q~n~`Vc_LA>Q1hNM(yg zT|dWBLJ-w%$7^aGagscd?;4>0foMv_UW4y;p&#@#>K3X@GGmMOSTi1_k}5WRe{LkM zTf?M@;wFtWCmL)c87l0qDZRW@5V9?&tgm(s@Dx>Y?g;XXl($p;(6Z49{my}crmS>C zcaMMtzY&s^>J-%9_I%yccS@uEoPF&%LZ(>lQAOTk^Siz)sRPq>J_PfivQz~&Onxpl z#R3xFn$EAWuY1Jlx+ls$Y)taoM2LJs<96cxiD_+NS6!R9naKbbrAfJL*}0gMm-*=v zJV%~5U^pqy-=Od4!_y(+yQZTVA~H;2urkG&DD~dJspwQq9)dV_EB5}5v7GmcwDz(| zf7{j#@doViMItk;IG0iTM~JMAlB9}kkivM8sBBoQAS(PZWw&5#?vLY#m(^)!U&J^S z_}bkg8d9QijND_dHu~(Bn3MJ1g9APN?r?=yRR0{Y6Q_`FQvt8j{32D%q3$PBr0OMf zgD@U#a2=hf}U+7Q~dh4$`eg( z5-Ne&QXUCm4Zu-^VI%p(XPwokrYR4SRI$Oa@~rfZRa%Hzsh{3MOQN-Se}7))2F?Fc zNbRKPXZcxDR=U9NTift&XhV|u$ve9eM`L=F&O@4 zX@;}v-BJs-_r3pP{$<0I$0Mmlc}P@MP@br&@Y~lPf{tU`w*r_0Q(WO(N8eVvJ40iM zpqLOzJE8x5kx6eQ)JgyxvuLxulbm-yqpS9b7F7!IzI^CUOOM|MHkHK9QZ};p^Dsy{ z8-z0ax}jo5cqP=ev&Fw|Of8lFlJF6?TDNii4BUJ6{Exy6{APZ%80&q$Gfs2z0Vw)A zFf@3%-9fK2rIb2aL+aA|iI4%y5d^{QS>yRv!ZfPk&h-{JhRGhGaRVi>pv-s`U!+OqCkw)C<$w zL34DV7Q&3n2+9`^GkcR1hegCKjz5LN$jM(J+k3r>HNpQTWRdm*waoi)*+!wb2JZC)=0JZ)jw4o?yB z{k;$IySa0ZFtuek_6OC}6`3e~Aq163kg$Sy^|Ou1RZ?!}?Q$6oWJ9!*G~+@TJwlmq z#*nB5fNDBN`O~#kEHp$Ixa|+>Xffl9q|gUg zCP+msLLTeRcdy(kZdo|*{|bC40Dt;B z^gE_(>yi!v@)2N*0YmHx_r`5x!8KwkoDBanJ!C72{XikTZT$y!ZAn|Bzw$#={-C9zakvY{A}{C0+|JAmeBGG_ygM>x9T+tVizElw3~`aKMTK(U}__zb=Dn`4P4yW{@#@_5F3&l6`Ko> z@@_2rN^dW~XP#*Gxa-(xQZ={}924(MV*9VOFLFNj=LGnRwowI_)_GTQ@pdf>%P?Rt z4|zaPxJqtW47G016`GzK?-}R4)nMg)NuMbl+`;MHxzip_j{(y;WaHDCjkd{@s+~Zw zd+)xT2C@g7UPUiEAl4+jig5Na(HOo3L04&dFmM?;|N`JXZ13FrVe%bfX}F7EVZB+mkzyn96hWSnNwv{;m*_E+0<&0u7Z zS3P)w{LW8`vz!M)G#uTb&R5ua|+B$~k&gk)G`Yv`$W8?%98v>O8QN&pEyKEzyN-Td=*HMgq6 QzrHq`vksQE=H9pe17i6pQw9eMOofX=!C&egA{+d7g95=Q*Fx=Q-!MbKlt!1(s8j0{{SEd$g?!003;* z#pgkiyA_>exxU*@J7e7J#A5L-{C@*wRNlDjQHphObOoq1J?MUHyy^F8H1@p+on|O& z)T6db%0{6*V*mh!zTXKfJfUz10Fbe=x3zJLd$)?c-(Ic7r3)ZT6 zz5bf(%2x~LCXbDAG|vCJ^dN+BWR0!-)=Cu&6kZPfev5ZNVpF`I3LZrijdwn-_onEr z&ta8jf=n4Mbv#i9W~iA^a^|>FOIuk{H>At2F-9%iyqs4j#nRBS474Bc_4L2e-acvR zoqg`^)!6&-dT{&(HsvNU`0LgFU`8q7k3`{63g2a znY9lz@@R-9F8e*<7bS{2rAR!=3~h)qj8Ts!>Zn0xq<1puMf{5c!KcpDlm6J}onYz_ zR^L2?VFxrIqb-CRj`@DJ|pHs#3 zTw}0rVZPU@P@YUTSVYxQ$p=oczYXX^LB$PL$@1b?(yDxRE6v|9NZn5DC;Aa~b^p7% zklfRWuTSSkb=Sy99Z$QHgLT`mnF6}xnE=Wm&w;5#aU7t zc2v?I)y3BTNgP^0v@m-=n>Fy567t%pDgxy?YWf^!w9p4tn29>LA-#C5ip#YDHMiFE z#so}VD(B@7W^;n)#(f++=iikt-mEo^G5;LAPXYbcwdptG74`+X7fVb+xc>tJ{fA&S z=))0bUSN8p(!VFu=D)!tyJ30 zFa9Owrh10xMENnc46Jr>BIJ|%oYw`Lib=R*x;CxA7kXrxp#d!jr0`oA?j(Xs*PUaY zh@{-2ozWXqGM!QKhJ1D{8h;s7rjlN}H!BZ5<5}Hcp6+R~DduNMyz1&FTexTjGqHM2|xOfz$(s6LY;)L z$3*F^D??HEs>IU!N%1yK_VDs6Brubcm{_dg$_@xs$KNjKn74^@{w5xa(p2rh zd1Q)W3nIgrc)1Gy<;b{^e!K$cqly~ZGk`I=lY3ux>i3Ay-m9`wm=?fL)SNjqXSh}L zK-9MqWbEneqa{GvT4E0-jP&3!ppQe|VL4i)@fhd=yhHi(*<8H!ptqsm8sg;O*s8m} z!q*tjd|#qfY7HF)YVaHp25nk01o|Nqg)fBQKdDV8v(CE;;Pw*(|?2YVGb) zwcr!~Wo2^@WSn++p_YX|(4`=f8#d>-&U&kV>u{icbwiS}El=RLJSDF{2$qv^D4et) z2DVgVnS$?+>NSKjMYrAnKGmceD=W@_svAATO85IoGcuZ-haZflaIWHDqqfKB+R1mn zy4jE}IQ(2Wn8G2SiCN!ItDtpX# zjvy+kqlbz3v2Z->-?iMi+IcHaotc^6%X$-!yi4%YJVtMm<_o6p%mkSS3`4zfa@(Ed z^jb5gpynpO$Y<(w)jcWJYdtK!_3FIp;0#<;Zf#hFc}pAP79(~dNc4U4Q@BMd9f+0+ z6)#>`bFPA4d{Gkom=5oWZ#{Uos?TWiu&=NviJY|fymvd7T)lu)X#_TwWANl8<>ebM viZ{Q0UlIeKX*NfYs}tp+t8AN#8b)HtiOvvl2Iiya_qVpUbF^(l_@(|AcjwP_ literal 0 HcmV?d00001 diff --git a/docs/Pre/_images/math/ec6a660dca89c326a9f6d7a6ee1caf28c29025c9.png b/docs/Pre/_images/math/ec6a660dca89c326a9f6d7a6ee1caf28c29025c9.png deleted file mode 100644 index e5f4bd03ae7fa2564d57568118eb01b880934224..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2121 zcmb7`hf@>U5{H8f(h(6P5Cjy_7`pV9U<@_X5Q+j3q>CUz$fbmUfTDn)C`LlPNaz9N zQj{V^E+8!sM7$uygepBM5TfSB_vZZp@64RDznT4ZXV1>gne)KW-cnRZRtNw9h+11A zPyhfAnX7FDc)91Hru%iS(Q~v#n{zlEuKa(OrN)a|Zp?8k%HA1}KI?ta3Jd(orgj$8 zt*IvmK08?EIt9b6u0#R=V!gjNPmYQh2ms*Ew?Y?D)-z8WX({@euQ zE%F$bjd@wLO>4P1+h^CSuCzouyoL=e(bcE?X>E%BqlaXH?VAR#mt&V){M%9*Cgr~D zg?{qOVXM8p7@{-&?a^A1RuiF(aQJe_HXP(&RijcTv??*^+EblKX}gbEf%hZBH0t(U<|5=hJJ|iq@toIwpC#8$x0LL+ znz=X<9h>oY+Tx!uvOS*VlKY-c!xLH>{U#3mFCK@ze>Ge`>Jhu1v4i2KVSb1tnNL5PTtG)`w&2^+mduEoPk*fz1pBLnludUBGd84*P z-QA@XSraJWaW(X!$pA9)=;%GMI)io3L~2T=VQzS}qJm6m6_)tCG{}R{>$?hPH1ve} z((EMyzD<2a?K5p<&;6A>9?*lX5Ju;0bMKBeHERw#(|2QY`F1gdkjkfph(4cte!9Z5 z%fof!$L5ZMlXNL$Mmd9GK=0;)$x-R~RH^lPwS&yD;oWf3BgEh>_R>^POnLMbE;yz9 zl(JE|H%GlRtP)lqtjXt{k>@(0(_5CWWOQLAqOC^Q(Pe{H-dv~{V6(NlFw$9`UWAUU zm~WBpk*zZNM0!CFX;pLq>slWE1Zda=UkTkUcx*TPnSw<~TUHxRRM_M|T&mEODDGJN zPe`S_&y$by`I7DIbSrklzaF}5R0Des`&*w9VS^p$Qd*}%(BE;7p@d$L&dA{HR*qu- zBq=)zru#l3=nJ1rQ^N-llI_GWlu7ex<^1sG_}kfXE;PO2d{4}NBtNZKvK@#UT>T+v ztYgfuT>GW2awX8k_7}v2f$#aAm}JEl^KMvGq64)_UrTF8oVY8Hy*2+*)2kMgMckvE zsO5j!UYh`#te1h6JagjY`E_w#y1!eFk&SJJduH%h}cXf=a7Gx9{Lo z?>1P9QytfwFd%Z%FUR_6phVy!#GN?og7ztpO*$saA0@zYL7dcoF~a@}rDFr0W!uiVq0 zKmo%5lA^*T-QcU^$auERiJuL;0=%tV??M{xIYp{tks#GsnB0)}yqD5ctNcP12r+(L z!zotI{4$!}t*}7KWa(2%*M6Pe8w)4t#qzm_!oq;&>5zbn_ZeW4>8i4po?2P(8_i#d zTiY@nB%-(ENKpxn`2JXNP>BFLrNrZ2kPtwxXzb^{McuM8(EO{D6S(6DST<|Q#AyDK z-HatnE~CG|e7w2rI*>trfEYhKxZM0panWodHSU7hxI5O}x>G_lwd6Pr%}OG|B{$>M zKa$E&5<=#2ovGwOLyfy&lCAE;A!Et3KKA+4YK60D%JQHMr$$pKLzmp!ZyX6GaYm0q zirR7s+2E5fy&cC!Q*^_UvYWAH6Krh7u`wap4fZjXcTX52DEg zdIKv4`;9lq;^t4*%6zU5z6j!hKKW=%TwqW%S>`RGS}Vgx~JdP+xvv z=^+R@H)r-VT*6lv7}LLsXZN_;Z}-)=R^+||<xRfgZA>r zZ${X}3L;n18)KIfyRQu)1)vz_K*Y1G7TIu6fC%dX8?Nzg;4O`n-iwPEfcjQuX=ToBC?yjcQ znY65yusWG$;MKV_dsezZm%^L|f7pEgRn-FOv6w<`zD}X-O#ZB@&c1%$;=I#!@oc)~ zDn8+F;hQgxu#)g5o%|#~!Z0!(s+7<#ERsHtWbTgTsTX|ev{+$lV~T;v>$5G(4AcEt laSNORJ(=SM#pDbPC7e^kgk`uTf`9)8tj+BawQ%pGe*qX=0}B8E diff --git a/docs/Pre/_images/math/f577ce5d55c8fcd63b7fdb0ac8a27d2550e1ede8.png b/docs/Pre/_images/math/f577ce5d55c8fcd63b7fdb0ac8a27d2550e1ede8.png deleted file mode 100644 index 72c7557a9133c939b951c91030debcfdd52f2de2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^vw)bNgBeI_cd1vCE1LU&s~dDXY7GDYYGo75Zur-m6(>XyVa~H(k;VV%3>*FWP8c&B(v)&S152>rn-V z?GM+S%4_ht+qf*gIH22hTZ+Bu4IQgjUoM=N;AfbTSn%~ramf-j`>lzyGnXl!d*fw@po!7OdRa>9h7*!rWVXzAu^Po9t>T8+VdZpzuY>n`X9b(LcHSdwCD1=WJuT z&?{Bzoy()P>d`(g^9;F$ZI|DqM(?k(4*R)tq2jmM6W)JLF?r>>w)X~q)|$d|PW5bt z3_loBZXTa~(rsbHgn0ioI|cn$mS(N-)yp#0xg#E7SGH@}oHa!kISttD0=#M)s+?Y4 zwrsk-@nEDD~DMYWAbNq#&sh3Ci5HAK*`3_)z4*}Q$iB}F!BFu diff --git a/docs/Pre/_modules/index.html b/docs/Pre/_modules/index.html index fb3db01..011ac38 100644 --- a/docs/Pre/_modules/index.html +++ b/docs/Pre/_modules/index.html @@ -45,36 +45,36 @@

All modules for which code is available

-
@@ -85,8 +85,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/files/evolutionFile.html b/docs/Pre/_modules/pylmgc90/pre/IO/evolution2File.html similarity index 76% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/files/evolutionFile.html rename to docs/Pre/_modules/pylmgc90/pre/IO/evolution2File.html index f6a16ec..859d23b 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/files/evolutionFile.html +++ b/docs/Pre/_modules/pylmgc90/pre/IO/evolution2File.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.files.evolutionFile — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.IO.evolution2File — pylmgc90.pre 2015.2 documentation @@ -46,24 +46,26 @@
-

Source code for pylmgc90.pre_lmgc.files.evolutionFile

+  

Source code for pylmgc90.pre.IO.evolution2File

 # module gerant l'ecriture du fichier d'evolution pour l'application des conditions limites
 import os
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
-
[docs]def writeEvolution(f, instants, path='', name='evolution.dat'): - """writeEvolution(f, instants, path='', name='evolution.dat'): - this function writes an evolution file used to apply - specific boundary conditions. - parameters: - - f: a function of time - - instants: for each instant t in the list, the function - f is evaluated and the couple (t, f(t)) is write - in the file - optional parameters: - - path='': path to the direactory where to write the evolution - file - - name='evolution.dat': name of the evolution file""" +
[docs]def writeEvolution(f, instants, path='', name='evolution.dat'): + """ + this function writes an evolution file used to apply specific boundary conditions. + parameters: + ----------- + - f: a function of time + - instants: for each instant t in the list, the function + f is evaluated and the couple (t, f(t)) is write in the file + + optional parameters: + -------------------- + - path='': path to the direactory where to write the evolution file + - name='evolution.dat': name of the evolution file + + """ # on verifie que la fonction donnee est bien appelable if not callable(f): @@ -92,8 +94,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/avatar.html b/docs/Pre/_modules/pylmgc90/pre/avatar/avatar.html similarity index 87% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/avatar.html rename to docs/Pre/_modules/pylmgc90/pre/avatar/avatar.html index 7c8b281..58c5fc1 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/avatar.html +++ b/docs/Pre/_modules/pylmgc90/pre/avatar/avatar.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.avatar.avatar — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.avatar.avatar — pylmgc90.pre 2015.2 documentation @@ -46,7 +46,7 @@
-

Source code for pylmgc90.pre_lmgc.avatar.avatar

+  

Source code for pylmgc90.pre.avatar.avatar

 import sys
 import numpy
 import math
@@ -60,35 +60,35 @@
 from contactors import *
 from groups import *
 from group import group
-from pylmgc90.pre_lmgc.config.lmgc90dicts import *
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.config.lmgc90dicts import *
+from pylmgc90.pre.utilities.error    import *
 
 # pour la verification des types (modele et materiau)
-from pylmgc90.pre_lmgc.shared.bulk_behav import material as class_material
-from pylmgc90.pre_lmgc.shared.model import model as class_model
+from pylmgc90.pre.shared.bulk_behav import material as class_material
+from pylmgc90.pre.shared.model import model as class_model
 
 from contactor.contactorFactory import contactorFactory
 
-from pylmgc90.pre_lmgc.build_avatar.mesh import mesh as class_mesh
+from pylmgc90.pre.build_avatar.mesh import mesh as class_mesh
 
 ## @class avatar
 # attributs:  \n
+#   atype is a string describing the numerical spatial discretization\n
 #   nodes is a node iterator with number as key\n
 #   bulks is a bulk iterator with number as key\n
 #   contactors is a contactor iterator with number as key\n
 #   groups is a group iterator with number as key\n
-
[docs]class avatar: +
[docs]class avatar(): ## constructor - def __init__(self, type, dimension, number=None): - """__init__(self, type, dimension, number=None): + def __init__(self, dimension, number=None): + """__init__(self, dimension, number=None): allow to define an avatar parameters: - self: the avatar itself - - type: type of the avatar - dimension: spatial dimension (2, in 2D, 3 in 3D) optional parameters: @@ -104,18 +104,7 @@ # un nouveau container) self.number = None - # si on reconnait le type de corps - if type in listeBodyType: - # on le stocke - self.type = type - # sinon, - else: - # on construit un message d'erreur rappelant les types disponibles - msg = "Type de corps inconnu\n le type doit etre choisi dans:\n" - for i in listeBodyType: - msg+=i+'\n' - # on l'affiche - showError(msg) + self.atype = None # am : ajout de la notion de dimension, pour la gestion des mailles # si la dimension est impossible @@ -123,18 +112,6 @@ # on affiche un message d'erreur showError("spatial dimension must be 2 (in 2D) or 3 (in 3D)!") - # verification de la compatibilite du type de corps avec la dimension - # * cas du rigide 2D - # si on demande un avatar rigide 2D, et qu'on est pas en 2D - if self.type == 'RBDY2' and dimension != 2: - # on affiche un message d'erreur - showError("RBDY2 avatars are only available in 2D!") - # * cas du rigide 3D - # si on demande un avatar rigide 3D, et qu'on est pas en 3D - if self.type == 'RBDY3' and dimension != 3: - # on affiche un message d'erreur - showError("RBDY3 avatars are only available in 3D!") - # si tous les tests sur la dimension ont reussi, on la stocke self.dimension = dimension @@ -149,7 +126,7 @@ ## add one node # @arg Noeud a node -
[docs] def addNode(self,Noeud): +
[docs] def addNode(self,Noeud): """ Usage : avatar.addNode(noeud) where noeud is a node object @@ -162,7 +139,7 @@ ## add nodes of an iterator # @arg Noeuds node iterator -
[docs] def addNodes(self,Noeuds): +
[docs] def addNodes(self,Noeuds): """ Usage : avatar.addNodes(noeuds) where noeuds is a node iterator @@ -173,7 +150,7 @@ ## add one bulk # @arg Ele a bulk # @todo : check that bulk type matches avatar type -
[docs] def addBulk(self,Ele): +
[docs] def addBulk(self,Ele): """ Usage : avatar.addBulk(Ele) where Ele is a bulk @@ -186,11 +163,41 @@ # l'avatar auquel il appartient Ele.number=len(self.bulks) # on l'ajoute dans le container de bulks de l'avatar - self.bulks.addBulk(Ele)
+ self.bulks.addBulk(Ele) + if isinstance(Ele,rigid2d): + + if self.dimension != 2: + showError("Trying to assign a rigid 2D element to a 3D avatar!") + + if self.atype is None: + self.atype = 'RBDY2' + else: + if self.atype=='MAILx': + showError("Trying to assign a rigid 2D element to a meshed avatar!") + + elif isinstance(Ele,rigid3d): + + if self.dimension != 3: + showError("Trying to assign a rigid 3D element to a 2D avatar!") + + if self.atype is None: + self.atype = 'RBDY3' + else: + if self.atype=='MAILx': + showError("Trying to assign a rigid 3D element to a meshed avatar!") + + elif isinstance(Ele,element): + + if self.atype is None: + self.atype = 'MAILx' + else: + if self.atype!='MAILx': + showError("Trying to assign a finite element to a rigid avatar!")
+ ## add bulks of an iterator # @arg Eles bulks iterator -
[docs] def addBulks(self,Eles): +
[docs] def addBulks(self,Eles): """ Usage : avatar.addBulks(Eles) where Eles is a bulk iterator @@ -221,7 +228,7 @@ self.contactors.addContactor(tact) # methode qui calcule les proprietes specifiques d'un corps rigide : masse, inertie et position du centre de gravite -
[docs] def computeRigidProperties(self): +
[docs] def computeRigidProperties(self): """computeRigidProperties(self): this function computes rigid properties of a rigid avatar : mass, inertia and mass center, from the contactors @@ -232,7 +239,7 @@ """ # si l'avatar n'est pas rigide - if self.type != 'RBDY2' and self.type != 'RBDY3': + if self.atype != 'RBDY2' and self.atype != 'RBDY3': # il n'est pas concerne par cette fonction showWarning("skipping deformable body") # on quitte la fonction @@ -262,7 +269,7 @@ # ici, on a affaire a un rigide bien defini # si l'avatar est un rigide 2D - if self.type == 'RBDY2': + if self.atype == 'RBDY2': # on cherche si on doit recalculer la position du centre d'inertie # on suppose initialement qu'il n'y a pas a la recalculer @@ -294,7 +301,7 @@ #fd # si le seul contacteur porte par l'objet est un point - if self.contactors[0].type == 'PT2Dx': + if self.contactors[0].shape == 'PT2Dx': # on indique que ca n'a pas de sens msg = "Attention pour le RBDY2 " + str(self.number) + " frontiere 1\n" msg += "Vous avez defini un seul contacteur de type point\n" @@ -366,7 +373,7 @@ self.bulks[0].gyrd = math.sqrt(I/area) # si l'avatar est un rigide 3D - if self.type == 'RBDY3': + if self.atype == 'RBDY3': # on cherche si on doit recalculer la position du centre d'inertie # on suppose initialement qu'il n'y a pas a la recalculer @@ -393,7 +400,7 @@ # absolu et pas dans le repere barycentrique # si le seul contacteur porte par l'objet est un point - if self.contactors[0].type == 'PT3Dx': + if self.contactors[0].shape == 'PT3Dx': msg = "Attention pour le RBDY3 " + str(self.number) + " frontiere 1\n" msg += "Vous avez defini un seul contacteur de type point\n" msg += "Ce contacteur ne contribue pas au calcul de la surface et de l'inertie de l'objet\n" @@ -520,7 +527,7 @@ # fonction qui verifie que tous les elements d'un avatar sont associes # a un modele et un element -
[docs] def checkModelAndMaterialDefinitions(self): +
[docs] def checkModelAndMaterialDefinitions(self): """checkModelAndMaterialDefinitions(self): this functions checks if all volumic (or surfacic, in 2D) elements of the given avatar @@ -536,7 +543,7 @@ # pour chaque element de l'avatar for ele in self.bulks: # si l'element est suppose porter un modele et un materiau - if ele.type in dimension2geoElement[self.dimension]: + if ele.etype in dimension2geoElement[self.dimension]: # si l'element ne porte pas de modele if ele.model == None: # on indique que tous les elements ne portent pas un modele @@ -555,12 +562,12 @@ # on parcours les groupes de l'avatar for group in self.groups.keys(): # si l'avatar est maille, on laisse tomber le groupe "all" - if self.type == "MAILx" and group == "all": + if self.atype == "MAILx" and group == "all": continue # on parcours les elements du groupe courant for ele in self.groups[group].bulks: # si l'element est suppose porter un modele et n'en porte pas - if ele.type in dimension2geoElement[self.dimension] and ele.model == None: + if ele.etype in dimension2geoElement[self.dimension] and ele.model == None: # on a trouve un groupe qui ne porte de modele # et on construit un message d'erreur pour prvenir l'utilisateur showError("bulks belonging to group \"" + group + "\" are not associated to any model!") @@ -570,12 +577,12 @@ # on parcours les groupes de l'avatar for group in self.groups.keys(): # si l'avatar est maille, on laisse tomber le groupe "all" - if self.type == "MAILx" and group == "all": + if self.atype == "MAILx" and group == "all": continue # on parcours les elements du groupe courant for ele in self.groups[group].bulks: # si l'element est suppose porter un materiau et n'en porte pas - if ele.type in dimension2geoElement[self.dimension] and ele.material == None: + if ele.etype in dimension2geoElement[self.dimension] and ele.material == None: # on a trouve un groupe qui ne porte de materiau # et on construit un message d'erreur pour prvenir l'utilisateur showError("bulks belonging to group \"" + group + "\" are not associated to any material!")
@@ -583,7 +590,7 @@ # ca doit appeler une routine dans nodes ## translate an avatar # @param dx,dy, dz tranlation vector -
[docs] def translate(self,dx=0.,dy=0.,dz=0.): +
[docs] def translate(self,dx=0.,dy=0.,dz=0.): """ usage self.tranlsate(dx=0.,dy=0.,dz=0.) where dx,dy, dz are components of translation vector @@ -591,8 +598,18 @@ for no in self.nodes: no.translate(dx=dx,dy=dy,dz=dz)
-
[docs] def rotate(self, type='Euler', phi=0., theta=0., psi=0., alpha=0., axis=[0., 0., 1.], center=[0., 0., 0.]): - """ rotate(self, type='Euler', phi=0., theta=0., psi=0., alpha=0., axis=[0., 0., 1.], center=[0., 0., 0.]) + ## scale an avatar + # @param scale +
[docs] def scale(self,scale=1.0): + """ usage self.scale(scale = 1.0) + + where scale is the scale + """ + for no in self.nodes: + no.scale(scale=scale)
+ +
[docs] def rotate(self, description='Euler', phi=0., theta=0., psi=0., alpha=0., axis=[0., 0., 1.], center=[0., 0., 0.]): + """ rotate(self, description='Euler', phi=0., theta=0., psi=0., alpha=0., axis=[0., 0., 1.], center=[0., 0., 0.]) this function rotates the considered avatar, according to the given rotation parameters and a rotation center. Supported rotation paramters are: Euler's angles or an axis and an angle @@ -600,11 +617,11 @@ parameters: - self: the avatar itself - - type='Euler': type defines the rotation parameters: + - description='Euler': defines the rotation parameters: - - if type = 'Euler', the rotation uses Euler's angles, consequently only phi, theta, psi and + - if description = 'Euler', the rotation uses Euler's angles, consequently only phi, theta, psi and center are considered - - if type = 'axis', the rotation uses an axis and an angle, consequently only axis, alpha and + - if description = 'axis', the rotation uses an axis and an angle, consequently only axis, alpha and center are considered - phi: first Euler's angle (rotation with respect to z-axis) - theta: second Euler's angle (rotation with respect to x-axis) @@ -616,7 +633,7 @@ N.B. all angles are in radians """ # selon la parametrisation utilisee - if type == 'Euler': # cas des angles d'Euler + if description == 'Euler': # cas des angles d'Euler # test de coherence if (self.dimension == 2 and (phi != 0. or theta != 0.)): showError('in 2D only psi should be defined (rotation around z axis)') @@ -633,7 +650,7 @@ [0., 0., 1.]],'d') q = numpy.dot(numpy.dot(q1,q2),q3) - elif type == 'axis': # cas ou on donne un axe de rotation + elif description == 'axis': # cas ou on donne un axe de rotation # tests de coherence : # * taille du vecteur if numpy.size(axis) != 3: @@ -680,7 +697,7 @@ self.imposeInitValue()
# fonction qui transforme l'objet en son symetrique par rapport a un plan -
[docs] def mirror(self, n, center, atol=1.e-8): +
[docs] def mirror(self, n, center, atol=1.e-8): """mirror(slef, n, center, atol=1.e-8): this function changes an avatar to its symmetrical through the @@ -774,7 +791,7 @@ showError('mirror :: unknown bulk type!')
# fonction qui cherche un noeud dans l'avatar, a partir de ces coordonnees -
[docs] def findNode(self, coor, atol=1.e-8): +
[docs] def findNode(self, coor, atol=1.e-8): """findNode(self, n, atol=1.e-8): this function return the index of the node which coordinates are @@ -828,7 +845,7 @@ # # # -
[docs] def defineGroups(self): +
[docs] def defineGroups(self): # A REVOIR L ENDROIT DE LA DEFINITION DES GROUPES """defineGroups(self) @@ -845,7 +862,7 @@ self.groups['all'].addNode(node) # test pour savoir si on est bien un MAILx - if (self.type != 'MAILx'): + if (self.atype != 'MAILx'): # fd affichage casse burne <- une variable de bavardage ? # print 'Only the group all will be defined' return @@ -854,13 +871,13 @@ listeTypeElement = [] for bulk in self.bulks: - if bulk.type not in listeTypeElement: - listeTypeElement.append(bulk.type) - self.groups.addGroup(group.group(bulk.type)) + if bulk.etype not in listeTypeElement: + listeTypeElement.append(bulk.etype) + self.groups.addGroup(group.group(bulk.etype)) - self.groups[bulk.type].addBulk(bulk) + self.groups[bulk.etype].addBulk(bulk) for j in bulk.connectivity: - self.groups[bulk.type].addNode(self.nodes[j]) + self.groups[bulk.etype].addNode(self.nodes[j]) if bulk.physicalEntity not in listeGroupes: self.groups.addGroup(group.group(bulk.physicalEntity)) @@ -871,7 +888,7 @@ self.groups[bulk.physicalEntity].addNode(self.nodes[j])
# fonction qui inidque si un groupe appartient a un avatar ou non -
[docs] def hasGroup(self, group): +
[docs] def hasGroup(self, group): """hasGroup(self,group): this functions return "True" iff the given group belongs to the given avatar @@ -879,7 +896,7 @@ return (group in self.groups.keys())
## setting model -
[docs] def defineModel(self,group='all',model=None): +
[docs] def defineModel(self,group='all',model=None): """defineModel(self,group='all',model=None) match a model (class model) or a set of models (class model) to a group @@ -907,17 +924,17 @@ # si l'element fini est incomptible avec l'avatar # * cas de l'element fini classique avec un rigide # si on refile un modele base sur element fini classique a un avatar rigide - if (self.type == 'RBDY2' or self.type == 'RBDY3') and not model.element in rigidElements: + if (self.atype == 'RBDY2' or self.atype == 'RBDY3') and not model.element in rigidElements: # on affiche un message d'erreur showError("a standard finite element cannot be handled by a rigid avatar!") # si on refile un element fini rigide a un avatar deformable - if self.type == 'MAILx' and model.element in rigidElements: + if self.atype == 'MAILx' and model.element in rigidElements: # on affiche un message d'erreur showError("a rigid finite element cannot be handled by a meshed avatar!") # si un modele a deja ete affecte a une partie des elements de l'avatar # et que le modele qu'on s'apprete a affecter est d'un type different - if self.modelType != None and model.type != self.modelType: + if self.modelType != None and model.physics != self.modelType: # on affiche un message d'erreur showError("Different types of models cannot be associated to the same avatar!") @@ -953,11 +970,11 @@ showError(msg) # on garde le type de model associe a l'avatar - self.modelType = model.type
+ self.modelType = model.physics
## set the material of an element # -
[docs] def defineMaterial(self,group='all',material=None): +
[docs] def defineMaterial(self,group='all',material=None): """ defineMaterial(self,group='all',material=None) associate a material or a material container to the element @@ -983,7 +1000,7 @@ # ici, on est sur que le materiau est un objet de type material # si le materiau est defini en externe (i.e. un USER_MAT) - if material.type == 'USER_MAT': + if material.materialType == 'USER_MAT': # on affiche un message inidquant que les tests de coherence materiau/modele sont desactives showWarning("Consistancy tests will not be performed since the given material is user defined!") @@ -1017,20 +1034,20 @@ ## build a string to represent the avatar def __str__(self): - impr ='avatar number : %10s of type %5s' %(self.number, self.type) + impr ='avatar number : %10s of type %5s' %(self.number, self.atype) return impr ## add contactors # @arg Tact a contactor -
[docs] def addContactors(self,type,color,group='all',**options): - """addContactors(self,type,color,group='all',**options) +
[docs] def addContactors(self,shape,color,group='all',**options): + """addContactors(self,shape,color,group='all',**options) define contactors for the elements of a group parameters: - self: the contactor itself - - type: type of the contactors + - shape: type of the contactors - color: color of the contactor optional parameters: @@ -1044,7 +1061,7 @@ showError('group: ' + group + ' do not belong to this avatar!') # si la dimension du contacteur differe de celle de l'avatar - if not type in dimension2contactor[self.dimension]: + if not shape in dimension2contactor[self.dimension]: # on construit un message d'erreur rappelant les types disponibles msg = "Type de contacteur inutilisable en " + str(self.dimension) + "D\n les contacteurs utilisables en " + str(self.dimension) + "D sont:\n" for i in dimension2contactor[self.dimension]: @@ -1055,7 +1072,7 @@ # si le type de contacteur est incomptible avec l'avatar # * cas du contaceur element fini avec un rigide # si on refile un contacteur base sur element fini a un avatar rigide - if (self.type == 'RBDY2' or self.type == 'RBDY3') and not type in rigidContactor: + if (self.atype == 'RBDY2' or self.atype == 'RBDY3') and not shape in rigidContactor: # on construit un message d'erreur rappelant les types disponibles msg = "Type de contacteur inutilisable avec un avatar rigide\n les contacteurs utilisables avec un avatar rigide sont:\n" for i in rigidContactor: @@ -1064,7 +1081,7 @@ showError(msg) # * cas du contaceur rigide (autre que le POLYD) avec un maillage element fini # si on refile un contacteur rigide a un avatar deformable - if self.type == 'MAILx' and type in rigidContactor: + if self.atype == 'MAILx' and shape in rigidContactor: # on construit un message d'erreur rappelant les types disponibles msg = "Type de contacteur inutilisable avec un avatar maille\n les contacteurs utilisables avec un avatar maille sont:\n" for i in listeContactor: @@ -1077,7 +1094,7 @@ cles = options.keys() # si le contacteur est une ligne ou une surface candidtate - if type == 'CLxxx' or type == 'CSxx3' or type == 'CSxx4': + if shape == 'CLxxx' or shape == 'CSxx3' or shape == 'CSxx4': # si on ne donne pas de poids pour placer le contacteur if 'weights' not in cles: # on affecte la vaeur None a l'option weights, pour activer le positionnement automatique des candidats aux noeuds @@ -1093,24 +1110,24 @@ # on construit un seul nouveau contacteur avec tous les elements du groupe # N.B.: la copie profonde de la liste d'element est effectuee par chaque contructeur de contacteur maille, # il est donc inutile de le faire ici - contact=contactorFactory(type=type, elements=list_ele, color=color, **options) + contact=contactorFactory(shape=shape, elements=list_ele, color=color, **options) # une fois le contacteur entierement defini, on l'ajoute au container de contacteurs de l'avatar self._addContactor(contact) # et au container de contacteurs portes par le groupe self.groups[group].addContactor(contact)
-
[docs] def imposeDrivenDof(self,group='all',component=1, type='predefined',ct=0.,amp=0.,omega=0., +
[docs] def imposeDrivenDof(self,group='all',component=1, description='predefined',ct=0.,amp=0.,omega=0., phi=0.,rampi=1.,ramp=0.,evolutionFile='', dofty='temp'): - """imposeDrivenDof(self,group='all',component=1,type='predefined',ct=0.,amp=0.,omega=0., + """imposeDrivenDof(self,group='all',component=1,description='predefined',ct=0.,amp=0.,omega=0., phi=0.,rampi=1.,ramp=0.,evolutionFile='',dofty='temp') - this function associate a boundary conditiojn to each node of the considered group of the + this function associate a boundary condition to each node of the considered group of the considered avatar parameters: - dofty : type of boundary condition (vlocy for velocity, force for.. force, temp for temperature and flux for heat flux) - - type : 'predefined' or 'evolution' + - description : 'predefined' or 'evolution' * 'predefined': ct, amp, omega, phi, rampi and ramp must be defined so that the boundary value will be : [ ct + amp * cos(omega*t+phi) ] * sgn(rampi + ramp*t) * min(abs(rampi + ramp*t), 1), @@ -1166,7 +1183,7 @@ showError(msg) # si la C.L. imposee est de type 'predefined' - if type == 'predefined': + if description == 'predefined': # on identife les parties de la fonction identiquement nulles ct_is_zero = (ct == 0.) cos_is_zero = (amp == 0. or (omega == 0. and phi == 0.)) @@ -1225,10 +1242,10 @@ if no.dof == None: showError("no dof defined. It's defined when you define a model.") - no.imposeDrivenDof(component,type, ct,amp,omega,phi,rampi, + no.imposeDrivenDof(component,description, ct,amp,omega,phi,rampi, ramp,evolutionFile,dofty)
-
[docs] def relaxDrivenDof(self, group='all', component=1): +
[docs] def relaxDrivenDof(self, group='all', component=1): """relaxDrivenDof(self, group='all', component=1): this function relax driven dof @@ -1279,7 +1296,7 @@ # on relaxe la condition limite porte par le ddl du noeud, suivant la composante donnee no.relaxDrivenDof(component)
-
[docs] def imposeInitValue(self,group='all',component=1,value=0.): +
[docs] def imposeInitValue(self,group='all',component=1,value=0.): """imposeInitValue(self,group='all',component=1,value=0.) impose a value to a degree of freedom @@ -1341,7 +1358,7 @@ # fonction qui construit un nouveau groupe comme le sous-groupe # d'un groupe existant -
[docs] def addGroupUsingPredicate(self, name, predicate, super_group='all'): +
[docs] def addGroupUsingPredicate(self, name, predicate, super_group='all'): """adddGroupUsingPredicate(self, name, predicate, super_group='all'): this function builds and add a new group to the avatar, by @@ -1442,7 +1459,7 @@ # fonction qui renvoie la liste des noeuds d'un groupe physique # existant -
[docs] def getNodebyGroup(self, group): +
[docs] def getNodebyGroup(self, group): """getNodebyGroup(self,group): this functions return the node list by physical group to this avatar """ @@ -1457,7 +1474,7 @@ return numpy.array(listnode)
# construction d'un avatar a partir d'un maillage -
[docs]def buildMeshedAvatar(mesh, model, material): +
[docs]def buildMeshedAvatar(mesh, model, material): """buildMeshedAvatar(mesh, model, material): this function builds a meshed avatar from the mesh. @@ -1472,7 +1489,7 @@ showError("The given mesh is not a mesh!") # on cree un avatar maille - body = avatar(type='MAILx', dimension=mesh.dimension) + body = avatar(dimension=mesh.dimension) # on renumerote les noeuds du maillage en utilisant leur rang mesh.rankRenumbering() # on ajoute les noeuds du maillage a l'avatar maille @@ -1499,8 +1516,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/bulk/bulk.html b/docs/Pre/_modules/pylmgc90/pre/avatar/bulk/bulk.html similarity index 82% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/bulk/bulk.html rename to docs/Pre/_modules/pylmgc90/pre/avatar/bulk/bulk.html index 7bf222a..fe2ee0e 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/bulk/bulk.html +++ b/docs/Pre/_modules/pylmgc90/pre/avatar/bulk/bulk.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.avatar.bulk.bulk — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.avatar.bulk.bulk — pylmgc90.pre 2015.2 documentation @@ -46,35 +46,35 @@
-

Source code for pylmgc90.pre_lmgc.avatar.bulk.bulk

+  

Source code for pylmgc90.pre.avatar.bulk.bulk

 import sys
 
-from pylmgc90.pre_lmgc.shared.bulk_behav import *
-from pylmgc90.pre_lmgc.shared.model import *
+from pylmgc90.pre.shared.bulk_behav import *
+from pylmgc90.pre.shared.model import *
 import numpy
 
-from pylmgc90.pre_lmgc.config.lmgc90dicts import *
+from pylmgc90.pre.config.lmgc90dicts import *
 
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
 
 ## @class bulk
 #
 # description 
-
[docs]class bulk: +
[docs]class bulk(): - def __init__(self, type, connectivity, physicalEntity='1', geometricalEntity='1', number=None, nbNodes=None): - """ __init__(self, type, connectivity, physicalEntity='1', geometricalEntity='1', number=None, nbNodes=None) + def __init__(self, elem_dim, connectivity, physicalEntity='1', geometricalEntity='1', number=None, nbNodes=None): + """ __init__(self, elem_dim, connectivity, physicalEntity='1', geometricalEntity='1', number=None, nbNodes=None) this function initializes a new bulk - N.B.: a bulk is always a finite element; a rigid body have a single finite element, which geomtrical support + N.B.: a bulk is always a finite element; a rigid body have a single finite element, which geometrical support is a point parameters: - self: the bulk itself - - type: element type + - elem_dim: dimension of the element (volumic=3, surfacic=2, lineic=1, point=0) - connectivity: connectivity of the element optional parameters: @@ -105,21 +105,17 @@ showWarning("assign a number of nodes to an element is useless since its can be computed from the connectivity!") # on calcule le nombre de noeuds a partir de la connecivite - nbNodes = len(connectivity) + nbNodes = len(connectivity) - # si le type d'element geometrique n'a pas ete reconnu - if not type in listeGeo: - # on affiche un message d'erreur - showError("unknown geometrical element : " + type + "!") + if elem_dim not in geoAndnbNodes2Element.keys(): + showError("unknown geometrical element dimension: " + str(elem_dim) + "!") - # si le nombre de noeuds de l'element est incompatible avec son type - if nbNodes != geo2nbNodes[type]: - # on affiche un message d'erreur - showError("the given number of nodes (" + str(nbNodes) + ") is incompatible with an element " + type) + if nbNodes not in geoAndnbNodes2Element[elem_dim].keys(): + showError("the given number of nodes (" + str(nbNodes) + ") is incompatible with element geometric dimension" + str(elem_dim)) # ici, on est sur que le type d'element et la connectivite donnes sont valides - self.type = type + self.etype = geoAndnbNodes2Element[elem_dim][nbNodes] self.nbNodes = nbNodes self.connectivity = connectivity @@ -134,7 +130,7 @@ ## @brief define material of the bulk # -
[docs] def defineMaterial(self,mat): +
[docs] def defineMaterial(self,mat): """defineMaterial(mat) 'mat' is either a string or a of the class 'material' @@ -153,11 +149,11 @@ # on teste la coherence entre le modele et le materiau en fonction # du type de modele - if self.model.type == 'MECAx': # cas du modele mecanique + if self.model.physics == 'MECAx': # cas du modele mecanique # * cas du modele rigide if self.model.element in rigidElements: # on verifie que que le materiau definisse une masse volumique - if not 'density' in bulkBehavOptions[mat.type]: + if not 'density' in bulkBehavOptions[mat.materialType]: # si ce n'est pas le cas on indique la liste des materiaux compatibles msg = "Type de materiau incompatible avec un modele rigide, en mecanique\n" + \ "les materiaux utilisables avec ce modele sont:\n" @@ -168,7 +164,7 @@ # * cas du modele discret elif self.model.element in discreteElements: # on verifie que le materiau soit du bon type - if mat.type != 'DISCRETE': + if mat.materialType != 'DISCRETE': showError("the only material available for a discrete element model for a meshed avatar is DISCRETE!") # on verifie que le materiau soit compatible avec la dimension if numpy.size(mat.masses) != self.model.dimension: @@ -176,17 +172,17 @@ # * cas d'un modele associe a un element fini non gere par LMGC90 elif self.model.element.startswith('EXT'): # on verifie que le materiau soit du bon type - if mat.type != 'EXTERNAL': + if mat.materialType != 'EXTERNAL': showError("the only material available for a an external finite element is EXTERNAL!") # * cas du modele utilisateur (associe a un fichier MatLib) elif hasattr(self.model, 'user_model_name'): # on verifie que le materiau soit du bon type - if mat.type != 'USER_MAT': + if mat.materialType != 'USER_MAT': showError("Un materiau utilisateur (type \"USER_MAT\") doit etre associe a un modele utilisateur (i.e. option \"user_model_name\" definie)!\n") # * cas d'un modele gere par LMGC90 (interne a LMGC90 ou un modele de MatLib deja cable) elif hasattr(self.model, 'material'): # on verifie que le materiau est compatible avec le modele - if not mat.type in mecaModel2bulkBehavs[self.model.material]: + if not mat.materialType in mecaModel2bulkBehavs[self.model.material]: # si ce n'est pas le cas, on inidque a l'utilisateur la liste des modeles compatibles msg = "Type de materiau incompatible avec un modele \"material=\"" + self.model.material + "\", " + \ "les materiaux utilisables avec ce modele sont:\n" @@ -203,7 +199,7 @@ else: showError("Model associated to the current bulk is unhandled!") - if self.model.type == 'THERx': # cas du modele thermique + if self.model.physics == 'THERx': # cas du modele thermique # * cas du modele rigide if self.model.element in rigidElements: # on leve une exception pour indiquer que ce n'est pas encore @@ -212,7 +208,7 @@ # * cas general (element fini avec thermique claculee en uitilisant le modele interne de LMGC90) else: # si le modele n'est pas adapte - if mat.type != 'THERMO_ELAS': + if mat.materialType != 'THERMO_ELAS': # on affiche une message d'erreur showError("the only material available for a thermic model for a meshed avatar is THERMO_ELAS!") @@ -221,7 +217,7 @@ ## @brief define models of the bulk # -
[docs] def defineModel(self,mod): +
[docs] def defineModel(self,mod): """defineModel(mod) 'mod' is a model @@ -230,7 +226,7 @@ if isinstance(mod, model): # si l'element porte par le modele repose sur l'element # geometrique porte par l'element - if mod.element in geo2element[self.type]: + if mod.element in geo2element[self.etype]: # on associe le modele a l'element self.model = mod # sinon, si le modele est un modele caracterisant un element dini externe, non gere par LMGC90 @@ -247,7 +243,7 @@ showError('[bulk.defineModel] Could not add the model to the bulk')
def __str__(self): - impr = "%5s\tnumber :\t%10s\n" % (self.type,self.number) + impr = "%5s\tnumber :\t%10s\n" % (self.etype,self.number) return impr
@@ -260,8 +256,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/bulks.html b/docs/Pre/_modules/pylmgc90/pre/avatar/bulks.html similarity index 86% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/bulks.html rename to docs/Pre/_modules/pylmgc90/pre/avatar/bulks.html index 52888ab..46a0fd4 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/bulks.html +++ b/docs/Pre/_modules/pylmgc90/pre/avatar/bulks.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.avatar.bulks — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.avatar.bulks — pylmgc90.pre 2015.2 documentation @@ -46,22 +46,22 @@
-

Source code for pylmgc90.pre_lmgc.avatar.bulks

-from pylmgc90.pre_lmgc.utilities.container import *
+  

Source code for pylmgc90.pre.avatar.bulks

+from pylmgc90.pre.utilities.container import *
 
 from bulk.bulk import *
 from groups import *
 
 ## @class bulks(sequence_container)
 # bulk iterator
-
[docs]class bulks(sequence_container): +
[docs]class bulks(sequence_container): """ bulk container inherits from container class 'sequence_container' i.e. keys are automatically attributed """ -
[docs] def addBulk(self,new): +
[docs] def addBulk(self,new): """addBulk(self,new) add a bulk to the container and index it with its number """ @@ -86,8 +86,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/contactor/contactor.html b/docs/Pre/_modules/pylmgc90/pre/avatar/contactor/contactor.html similarity index 87% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/contactor/contactor.html rename to docs/Pre/_modules/pylmgc90/pre/avatar/contactor/contactor.html index de23f51..dcaf4d6 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/contactor/contactor.html +++ b/docs/Pre/_modules/pylmgc90/pre/avatar/contactor/contactor.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.avatar.contactor.contactor — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.avatar.contactor.contactor — pylmgc90.pre 2015.2 documentation @@ -46,24 +46,24 @@
-

Source code for pylmgc90.pre_lmgc.avatar.contactor.contactor

+  

Source code for pylmgc90.pre.avatar.contactor.contactor

 import numpy
 import copy
 
-from pylmgc90.pre_lmgc.config.lmgc90dicts import *
+from pylmgc90.pre.config.lmgc90dicts import *
 
-from pylmgc90.pre_lmgc.avatar.bulks import *
-from pylmgc90.pre_lmgc.avatar.bulk.bulk import *
+from pylmgc90.pre.avatar.bulks import *
+from pylmgc90.pre.avatar.bulk.bulk import *
 
 ## @class contactor
 #
-
[docs]class contactor: - """ class contactor +
[docs]class contactor(): + """ class contactor() attributs: - number : an identifier - - type : lmgc90 tact type (char[5]) + - shape : lmgc90 tact type (char[5]) - elements: a bulk list - color : lmgc90 color for tact_behav (char[5]) - connectivity: nodes' indices defining the contactor @@ -77,8 +77,8 @@ ## @brief default constructor # - def __init__(self, elements, type, color, number=None): - """__init__(self, elements, type, color, number=None) + def __init__(self, elements, shape, color, number=None): + """__init__(self, elements, shape, color, number=None) allow to define a contactor @@ -87,7 +87,7 @@ - self: the contactor itself - elements: a list of connex elements, which is the base of the contactor WARNING: elements must be of the same type! - - type: type of the contactor + - shape: type of the contactor - color: color of the contactor optional parameters: @@ -111,7 +111,7 @@ msg='all elements of the given elements list keyword must be element objects!' showError(msg) # on conserve le type de l'element - element_type=first_element.type + element_type=first_element.etype # pour chaque autre element de la liste for i in xrange(1, len(elements)): @@ -122,7 +122,7 @@ msg='all elements of the given elements list keyword must be element objects!' showError(msg) # si l'element n'est pas du bon type - if ele.type != element_type: + if ele.etype != element_type: # on affiche un message d'erreur msg='all elements of the given elements list must have the same type!' showError(msg) @@ -130,9 +130,9 @@ # ici, on est sur que la liste elements ne contient que des elements du meme type # si le type de contacteur n'est compatible avec le type d'element - if not type in geo2contactor[element_type]: + if not shape in geo2contactor[element_type]: # on construit un message d'erreur - msg='Incompatible element (%s) and contactor type (%s)\n' %(element_type, type) + msg='Incompatible element (%s) and contactor type (%s)\n' %(element_type, shape) if number != None: msg+='for contactor :%s' % str(number) # on l'affiche @@ -170,11 +170,11 @@ # @param attribut : name of the attribut to get the value # @return : value of attribut # @todo : to put in contactor class ? -
[docs] def getOption(self,attribut): +
[docs] def getOption(self,attribut): """ getOption(self,attribut) """ value=0. - if attribut in contactorOptions[self.type]: + if attribut in contactorOptions[self.shape]: value=getattr(self, attribut) return value
@@ -183,17 +183,17 @@ # @todo : to put in contactor class ? def writeOpt(self): ligne='' - for opt in contactorOptions[self.type]: + for opt in contactorOptions[self.shape]: ligne+=' %5s=%14.7E' % (opt, getattr(self, opt)) return ligne def __str__(self): """method allowing to print informations concerning the contactor """ - impr='Contactor number :\t%5s \t of type :\t%5s' % (self.number,self.type) + impr='Contactor number :\t%5s \t of type :\t%5s' % (self.number,self.shape) return impr -
[docs] def strInBodiesFile(self, number): +
[docs] def strInBodiesFile(self, number): """strInBodiesFile(self, number): this function returns a string used to represent the contactor in the BODIES.DAT file. @@ -210,7 +210,7 @@ ## @brief get the contactor in anonymous shape # Get the contactor in the form of 3 vectors of different type (char[5], int and double) -
[docs] def get_anonymous_shape(self): +
[docs] def get_anonymous_shape(self): """get_anonympous_shape(self, number): this function returns the contactor type (type), the contactor color (color), @@ -221,7 +221,7 @@ - self: the contactor itself - returned value: the tuple (type, color, i4_vector, r8_vector). + returned value: the tuple (shape, color, i4_vector, r8_vector). """ # N.B.: il s'agit d'une fonction virtuelle pure, qui n'a donc pas d'implementation generique. raise NotImplementedError
@@ -235,8 +235,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/contactors.html b/docs/Pre/_modules/pylmgc90/pre/avatar/contactors.html similarity index 83% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/contactors.html rename to docs/Pre/_modules/pylmgc90/pre/avatar/contactors.html index 9598212..09b65b1 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/contactors.html +++ b/docs/Pre/_modules/pylmgc90/pre/avatar/contactors.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.avatar.contactors — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.avatar.contactors — pylmgc90.pre 2015.2 documentation @@ -46,21 +46,21 @@
-

Source code for pylmgc90.pre_lmgc.avatar.contactors

-from pylmgc90.pre_lmgc.utilities.container import *
+  

Source code for pylmgc90.pre.avatar.contactors

+from pylmgc90.pre.utilities.container import *
 
 from contactor.contactor import *
 
 ## @class contactors(sequence_container)
 # contactor iterator
-
[docs]class contactors(sequence_container): +
[docs]class contactors(sequence_container): """ contactor container inherits from container class 'sequence container' i.e. keys are automatically attributed """ -
[docs] def addContactor(self,tact): +
[docs] def addContactor(self,tact): """addcontactor(self,tact) assign a number to a contactor and add it to the container @@ -75,7 +75,7 @@ return self
-
[docs] def lastContactor(self): +
[docs] def lastContactor(self): """lastContactor(self) returns last contactor number of the list @@ -91,8 +91,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/node/node.html b/docs/Pre/_modules/pylmgc90/pre/avatar/node/node.html similarity index 83% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/node/node.html rename to docs/Pre/_modules/pylmgc90/pre/avatar/node/node.html index 49fc1b0..efca067 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/node/node.html +++ b/docs/Pre/_modules/pylmgc90/pre/avatar/node/node.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.avatar.node.node — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.avatar.node.node — pylmgc90.pre 2015.2 documentation @@ -46,22 +46,22 @@
-

Source code for pylmgc90.pre_lmgc.avatar.node.node

+  

Source code for pylmgc90.pre.avatar.node.node

 ## module node
 # define node class
 
 import numpy
 
-from pylmgc90.pre_lmgc.config.lmgc90dicts      import *
+from pylmgc90.pre.config.lmgc90dicts      import *
 
 import sys
 import numpy
 
-from pylmgc90.pre_lmgc.models             import *
-from pylmgc90.pre_lmgc.shared.model       import *
+from pylmgc90.pre.models             import *
+from pylmgc90.pre.shared.model       import *
 from dof import *
 
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
 
 
@@ -70,36 +70,37 @@
 #  \n
 # attributs: \n
 # number its number (as an integer)\n
-# type type of the node (NO2xx...)\n
 # coor coordinates \n
 # dofs degrees of freedom \n 
 # \n
 # methods: \n
 #  __init__ constructor \n
 #  getCoor: gets back coor \n
-#  defineDof: defines the dofs associated to the node (depend on the models) \n
+#  defineDof: defines the dofs associated to the node (depends on the model) \n
 #  imposeDrivenDof: imposes degrees of freedom\n
 #  relaxDrivenDof: frees a dof previously imposed\n
 #  translate: translate the node\n
-
[docs]class node: +
[docs]class node(): """ Class defining the node entity """ ## node constructor # - def __init__(self,type=None,coor=None,number=0): - """ __init__(self,type=None,coor=None,number=0): + def __init__(self,coor=None,number=0): + """ __init__(self,coor=None,number=0): - initialize a node entity + initialize a node entity. + coor an array defining the corrdinates """ - self.type = type self.number = number if coor is None: self.coor = [] else : self.coor = coor - self.dof = None + self.ntype = dimensionTypeNode[coor.shape[0]] + + self.dof = None # necessaire pour garder le lien avec le maillage de depart if number != 0: @@ -109,11 +110,11 @@ if not self.checkType(): msg = 'instanciating node: uncompatible type/dimension ' - msg += type + '\t' + str(self.coor.size) + msg += self.ntype + '\t' + str(self.coor.size) showError(msg) ## coordinates -
[docs] def getCoor(self): +
[docs] def getCoor(self): """ getCoor(self) returns coor @@ -135,11 +136,11 @@ sys.exit(1) ## impose dofs - def imposeDrivenDof(self,composantes,type='predefined',ct=0.,amp=0.,omega=0., + def imposeDrivenDof(self,composantes,description='predefined',ct=0.,amp=0.,omega=0., phi=0.,rampi=0.,ramp=0.,evolutionFile='unknown',dofty='unknown'): if self.dof != None: - self.dof.imposeDrivenDof(composantes,type,ct,amp,omega,phi,rampi,ramp,evolutionFile,dofty) + self.dof.imposeDrivenDof(composantes,description,ct,amp,omega,phi,rampi,ramp,evolutionFile,dofty) else: msg='Cannot impose dof on node %s' % self.number showWarning(msg) @@ -158,19 +159,19 @@ ## \brief return a node with anonynous shape def get_anonymous_shape(self): - type = self.type + ntype = self.ntype r8_vect = self.coor - return [type, r8_vect] + return [ntype, r8_vect] ## \brief check type and size consistency def checkType(self): res = True dim = -1 for key in dimensionTypeNode: - if self.type in dimensionTypeNode[key]: + if self.ntype in dimensionTypeNode[key]: dim = key if dim == -1: - msg = '[checkType] unknown node type ' + self.type + msg = '[checkType] unknown node type ' + self.ntype showError(msg) if dim != self.coor.size : res = False @@ -190,8 +191,13 @@ msg = '[translate]: do not know how to apply translation to a node with ' + numpy.size(self.coor) + 'coordinates' showWarning(msg) + ## @brief scale the node + # The coordinates to change depends on type + def scale(self, scale): + self.coor *= scale + ## @brief apply an affine map to the node coordinates -
[docs] def applyAffineMapToCoor(self, q, center): +
[docs] def applyAffineMapToCoor(self, q, center): """applyAffineMapToCoor(self, q, center): this function applies an affine map to the node coordinates. @@ -227,8 +233,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/nodes.html b/docs/Pre/_modules/pylmgc90/pre/avatar/nodes.html similarity index 85% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/nodes.html rename to docs/Pre/_modules/pylmgc90/pre/avatar/nodes.html index 1f36a68..853d4d7 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatar/nodes.html +++ b/docs/Pre/_modules/pylmgc90/pre/avatar/nodes.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.avatar.nodes — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.avatar.nodes — pylmgc90.pre 2015.2 documentation @@ -46,21 +46,21 @@
-

Source code for pylmgc90.pre_lmgc.avatar.nodes

-from pylmgc90.pre_lmgc.utilities.container import *
+  

Source code for pylmgc90.pre.avatar.nodes

+from pylmgc90.pre.utilities.container import *
 
 from node.node import *
 
 ## @class nodes(mapping_container)
 #  node iterator
-
[docs]class nodes(mapping_container): +
[docs]class nodes(mapping_container): """ node container inherits from container class 'iterator' key is the number of the node """ -
[docs] def addNode(self,noeud): +
[docs] def addNode(self,noeud): """addNode(self,noeud) add a node to the container and index it with its number @@ -83,8 +83,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatars.html b/docs/Pre/_modules/pylmgc90/pre/avatars.html similarity index 70% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/avatars.html rename to docs/Pre/_modules/pylmgc90/pre/avatars.html index 0f487c5..aa8e5ac 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/avatars.html +++ b/docs/Pre/_modules/pylmgc90/pre/avatars.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.avatars — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.avatars — pylmgc90.pre 2015.2 documentation @@ -46,14 +46,14 @@
-

Source code for pylmgc90.pre_lmgc.avatars

+  

Source code for pylmgc90.pre.avatars

 import numpy
 from utilities.container import *
 
 from avatar.avatar import *
 
 ## @class avatars : avatar list
-
[docs]class avatars(sequence_container): +
[docs]class avatars(sequence_container): """ avatar container class Methods: @@ -79,24 +79,26 @@ # showWarning(msg) ## add an avatar to container -
[docs] def addAvatar(self, avatar): - '''addAvatar(self,avatar): +
[docs] def addAvatar(self, av): + '''addAvatar(self,av): this function adds the input avatar to the container parameters: - self: the container itself - - avatar: a given avatar + - av: a given avatar ''' + assert isinstance(av,avatar), "%r is not an avatar"%av + # on atribue a l'avatar le prochain numero disponible # N.B.: si l'avatar provient d'un autre container, son # son numero est ecrase, et renvoie au dernier # container ou il a ete ajoute - avatar.number = len(self) + av.number = len(self) # on ajoute l'avatar dans le container - self.append(avatar)
+ self.append(av)
## add one avatar, or a list of avatars, to the container def __iadd__(self,object): @@ -130,7 +132,7 @@ # on renvoie le conteneur modifie return self -
[docs] def getFemAvatar(self): +
[docs] def getFemAvatar(self): """ getFemAvatar(self) get the list of avatar of MAILx type @@ -138,13 +140,13 @@ listeMesh=[] for j in self.keys(): - if self[j].type == 'MAILx': + if self[j].atype == 'MAILx': listeMesh.append(j) return listeMesh
## -
[docs] def getRigidAvatar(self): +
[docs] def getRigidAvatar(self): """getRigidAvatar(self) get the list of avatar of RBDY2 or RBDY3 type @@ -152,13 +154,13 @@ listeRigid = [] for j in self.keys(): - if self[j].type == 'RBDY2' or self[j].type == 'RBDY3': + if self[j].atype == 'RBDY2' or self[j].atype == 'RBDY3': listeRigid.append(j) return listeRigid
## translate a set of avatars # @param dx,dy, dz tranlation vector -
[docs] def translate(self, dx=0., dy=0., dz=0.): +
[docs] def translate(self, dx=0., dy=0., dz=0.): """ usage self.tranlsate(dx=0., dy=0., dz=0.) where dx, dy, dz are components of translation vector @@ -168,8 +170,8 @@ avatar.translate(dx=dx,dy=dy,dz=dz)
## translate a set of avatars -
[docs] def rotate(self, type='Euler', phi=0., theta=0., psi=0., alpha=0., axis=[0., 0., 1.], center=[0., 0., 0.]): - """rotate(self, type='Euler', phi=0., theta=0., psi=0., alpha=0., axis=[0., 0., 1.], center=[0., 0., 0.]) +
[docs] def rotate(self, description='Euler', phi=0., theta=0., psi=0., alpha=0., axis=[0., 0., 1.], center=[0., 0., 0.]): + """rotate(self, description='Euler', phi=0., theta=0., psi=0., alpha=0., axis=[0., 0., 1.], center=[0., 0., 0.]) this function rotates every avatar in the set, according to the given rotation parameters and a rotation center. Supported rotation paramters are: Euler's angles or an axis and an angle @@ -177,11 +179,11 @@ parameters: - self: the avatar itself - - type='Euler': type defines the rotation parameters: + - description='Euler': defines the rotation parameters: - - if type = 'Euler', the rotation uses Euler's angles, consequently only phi, theta, psi and + - if description = 'Euler', the rotation uses Euler's angles, consequently only phi, theta, psi and center are considered - - if type = 'axis', the rotation uses an axis and an angle, consequently only axis, alpha and + - if description = 'axis', the rotation uses an axis and an angle, consequently only axis, alpha and center are considered - phi: first Euler's angle (rotation with respect to z-axis) @@ -194,7 +196,7 @@ # on applique la rotation a chaque avatar du conteneur for avatar in self: - avatar.rotate(type=type, phi=phi, theta=theta, psi=psi, alpha=alpha, axis=axis, center=center)
+ avatar.rotate(description=description, phi=phi, theta=theta, psi=psi, alpha=alpha, axis=axis, center=center)
@@ -205,8 +207,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/brick.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/brick.html similarity index 89% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/brick.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/brick.html index 9bc0cd4..ced1c4b 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/brick.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/brick.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.brick — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.brick — pylmgc90.pre 2015.2 documentation @@ -46,20 +46,20 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.brick

+  

Source code for pylmgc90.pre.build_avatar.brick

 # module qui fournit une classe brique 2D, ou 3D
 
 import numpy
 import math
 
-from pylmgc90.pre_lmgc.avatar.bulk.rigid2d import *
-from pylmgc90.pre_lmgc.avatar.bulk.element import *
+from pylmgc90.pre.avatar.bulk.rigid2d import *
+from pylmgc90.pre.avatar.bulk.element import *
 
 # macros pour generer des maillages de rectangles (2D)
 from mesh2D import *
 
 # classe brique 2D
-
[docs]class brick2D: +
[docs]class brick2D(): '''class designed to build rigid or deformable bricks in 2D Methods: @@ -90,7 +90,7 @@ self.ly=ly # hauteur # creation d'une brique rigide -
[docs] def rigidBrick(self, center, model, material, color='BLEUx', number=None): +
[docs] def rigidBrick(self, center, model, material, color='BLEUx', number=None): '''rigidBrick(self, center, model, material, color='BLEUx', number=None): this function build and returns a rigid brick @@ -108,13 +108,11 @@ - number=None: index of the avatar (still present to ensure compatibility)''' # creation d'une nouvelle brique rigide - body = avatar(type='RBDY2', dimension=2, number=number) + body = avatar(dimension=2, number=number) # on lui attribue un comportement volumique de type rigide body.addBulk( rigid2d() ) # ajout de la position du centre d'inertie de la brique - body.addNode( - node(type='NO2xx',coor=numpy.array(center), - number=1) ) + body.addNode( node(coor=numpy.array(center), number=1) ) # on definit les groupes pour la brique body.defineGroups() # on affecte son modele rigide a la brique @@ -139,7 +137,7 @@ vertices[3, 0] = -0.5*self.lx vertices[3, 1] = 0.5*self.ly # on peut alors ajouter son contacteur polygone a la brique - body.addContactors(type='POLYG',color=color, nb_vertices=4, + body.addContactors(shape='POLYG',color=color, nb_vertices=4, vertices=vertices) # on calcule la surface et l'inertie de la brique body.computeRigidProperties() @@ -148,10 +146,10 @@ return body
# creation d'une brique deformable -
[docs] def deformableBrick(self, center, material, model, type='4T3', +
[docs] def deformableBrick(self, center, material, model, mesh_type='4T3', nb_elem_x=1, nb_elem_y=1, apabh=None, apabv=None, apabhc=0.25, apabvc=0.25, colors=['HORIx', 'VERTx', 'HORIx', 'VERTx'], number=None): - '''deformableBrick(self, center, material, model, number, type='4T3', + '''deformableBrick(self, center, material, model, number, mesh_type='4T3', nb_elem_x=1, nb_elem_y=1, apabh=None, apabv=None, apabhc=0.25, apabvc=0.25, colors=['HORIx', 'VERTx', 'HORIx', 'VERTx']): @@ -166,7 +164,7 @@ optional parameters : - - type='4T3': meshing strategy for the brick + - mesh_type='4T3': meshing strategy for the brick (possible values: 'Q4', 'Q8', '2T3' and '4T3') - nb_elem_x: number of elements Q4 following direction Ox - nb_elem_y: number of elements Q4 following direction Oy @@ -185,25 +183,25 @@ x0=center[0] - 0.5*self.lx y0=center[1] - 0.5*self.ly # on genere le maillage de la brique - mesh_brick=buildMesh2D(type, x0, y0, self.lx, self.ly, nb_elem_x, nb_elem_y) + mesh_brick=buildMesh2D(mesh_type, x0, y0, self.lx, self.ly, nb_elem_x, nb_elem_y) # on contruit un corps maille a partir du maillage de la brique body=buildMeshedAvatar(mesh=mesh_brick, model=model, material=material) # on ajoute les contacteurs : # * une ligne antagoniste sur le dessus du bloc - body.addContactors(group='up',type='ALpxx',color=colors[2]) + body.addContactors(group='up',shape='ALpxx',color=colors[2]) # * les points candidats sur le dessous du bloc # si on donne des positions pour le points de contacts, on les # utilise if ( apabh ): # fd pas comprendre - #body.addContactors(group='down',type='CLxxx',color=colors[0], + #body.addContactors(group='down',shape='CLxxx',color=colors[0], # connex='no', weights=apabh) - body.addContactors(group='down',type='CLxxx',color=colors[0], + body.addContactors(group='down',shape='CLxxx',color=colors[0], weights=apabh) # sinon, else: # on les place aux sommets du maillage - body.addContactors(group='down',type='CLxxx',color=colors[0]) + body.addContactors(group='down',shape='CLxxx',color=colors[0]) # on deplace les noeuds situes : # * dans le coin inferieur gauche de la brique _moveContactorCLxxx(coor=[x0, y0], body=body, color=colors[0], apab=apabhc) @@ -211,19 +209,19 @@ _moveContactorCLxxx(coor=[x0 + self.lx, y0], body=body, color=colors[0], apab=apabhc) # * une ligne antagoniste sur le cote gauche du bloc - body.addContactors(group='left',type='ALpxx',color=colors[3]) + body.addContactors(group='left',shape='ALpxx',color=colors[3]) # * les points candidats sur le cote droit du bloc # si on donne des positions pour le points de contacts, on les # utilise if ( apabv ): - #body.addContactors(group='right',type='CLxxx',color=colors[1], + #body.addContactors(group='right',shape='CLxxx',color=colors[1], # connex='no', weights=apabv) - body.addContactors(group='right',type='CLxxx',color=colors[1], + body.addContactors(group='right',shape='CLxxx',color=colors[1], weights=apabv) # sinon, else: # on les place aux sommets - body.addContactors(group='right',type='CLxxx',color=colors[1]) + body.addContactors(group='right',shape='CLxxx',color=colors[1]) # on deplace les noeuds situes : # * dans le coin inferieur droit de la brique _moveContactorCLxxx(coor=[x0 + self.lx, y0], body=body, color=colors[1], apab=apabvc) @@ -234,10 +232,10 @@ return body
# creation d'une brique deformable, explosee -
[docs] def explodedDeformableBrick(self, center, material, model, type='4T3', +
[docs] def explodedDeformableBrick(self, center, material, model, mesh_type='4T3', nb_elem_x=1, nb_elem_y=1, apabh=None, apabv=None, apabhc=0.25, apabvc=0.25, colors=['HORIx', 'VERTx', 'HORIx', 'VERTx'], color='BLEUx', shift=0): - '''explodedDeformableBrick(self, center, material, model, type='4T3', + '''explodedDeformableBrick(self, center, material, model, mesh_type='4T3', nb_elem_x=1, nb_elem_y=1, apabh=None, apabv=None, apabhc=0.25, apabvc=0.25, colors=['HORIx', 'VERTx', 'HORIx', 'VERTx'], color='BLEUx', shift=0): @@ -252,7 +250,7 @@ optional parameters : - - type='4T3': meshing strategy for the brick + - mesh_type='4T3': meshing strategy for the brick (possible values: 'Q4', 'Q8', '2T3' and '4T3') - nb_elem_x: number of elements Q4 following direction Ox - nb_elem_y: number of elements Q4 following direction Oy @@ -272,7 +270,7 @@ x0=center[0] - 0.5*self.lx y0=center[1] - 0.5*self.ly # on genere le maillage de la brique - mesh_brick=buildMesh2D(type, x0, y0, self.lx, self.ly, nb_elem_x, nb_elem_y) + mesh_brick=buildMesh2D(mesh_type, x0, y0, self.lx, self.ly, nb_elem_x, nb_elem_y) # on contruit un corps maille a partir du maillage de la brique body=buildMeshedAvatar(mesh=mesh_brick, model=model, material=material) # on explose le corps maille represenant la brique @@ -282,20 +280,20 @@ # on ajoute les contacteurs : # * une ligne antagoniste sur le dessus du bloc if new_body.hasGroup('up'): - new_body.addContactors(group='up',type='ALpxx',color=colors[2]) + new_body.addContactors(group='up',shape='ALpxx',color=colors[2]) # * les points candidats sur le dessous du bloc if new_body.hasGroup('down'): # si on donne des positions pour le points de contacts, on les # utilise if ( apabh ): - #body.addContactors(group='down',type='CLxxx',color=colors[0], + #body.addContactors(group='down',shape='CLxxx',color=colors[0], # connex='no', weights=apabh) - body.addContactors(group='down',type='CLxxx',color=colors[0], + body.addContactors(group='down',shape='CLxxx',color=colors[0], weights=apabh) # sinon, else: # on les place aux sommets - new_body.addContactors(group='down',type='CLxxx',color=colors[0]) + new_body.addContactors(group='down',shape='CLxxx',color=colors[0]) # on deplace les noeuds situes : # * dans le coin inferieur gauche de la brique _moveContactorCLxxx(coor=[x0, y0], body=new_body, color=colors[0], apab=apabhc) @@ -304,20 +302,20 @@ # * une ligne antagoniste sur le cote gauche du bloc if new_body.hasGroup('left'): - new_body.addContactors(group='left',type='ALpxx',color=colors[3]) + new_body.addContactors(group='left',shape='ALpxx',color=colors[3]) # * les points candidats sur le cote droit du bloc if new_body.hasGroup('right'): # si on donne des positions pour le points de contacts, on les # utilise if ( apabv ): - #body.addContactors(group='right',type='CLxxx',color=colors[1], + #body.addContactors(group='right',shape='CLxxx',color=colors[1], # connex='no', weights=apabv) - body.addContactors(group='right',type='CLxxx',color=colors[1], + body.addContactors(group='right',shape='CLxxx',color=colors[1], weights=apabv) # sinon, else: # on les place aux sommets - new_body.addContactors(group='right',type='CLxxx',color=colors[1]) + new_body.addContactors(group='right',shape='CLxxx',color=colors[1]) # on deplace les noeuds situes : # * dans le coin inferieur droit de la brique _moveContactorCLxxx(coor=[x0 + self.lx, y0], body=new_body, color=colors[1], apab=apabvc) @@ -328,7 +326,7 @@ return bodies
# classe brique 3D -
[docs]class brick3D: +
[docs]class brick3D(): '''class designed to build rigid bricks in 3D Methods: @@ -359,7 +357,7 @@ self.lz=lz # hauteur # creation d'une brique rigide -
[docs] def rigidBrick(self, center, model, material, color='BLEUx'): +
[docs] def rigidBrick(self, center, model, material, color='BLEUx'): '''rigidBrick(self, center, model, material, color='BLEUx'): this function build and returns a rigid brick @@ -376,13 +374,11 @@ ''' # creation d'une nouvelle brique rigide - body = avatar(type='RBDY3', dimension=3) + body = avatar(dimension=3) # on lui attribue un comportement volumique de type rigide body.addBulk( rigid3d() ) # ajout de la position du centre d'inertie de la brique - body.addNode( - node(type='NO3xx',coor=numpy.array(center), - number=1) ) + body.addNode( node(coor=numpy.array(center), number=1) ) # on definit les groupes pour la brique body.defineGroups() # on affecte son modele rigide a la brique @@ -481,7 +477,7 @@ connectivity[11, 2]=6 # on peut alors ajouter son contacteur polygone a la brique - body.addContactors(type='POLYR', color=color, nb_vertices=8, nb_faces=12, + body.addContactors(shape='POLYR', color=color, nb_vertices=8, nb_faces=12, vertices=vertices, connectivity=connectivity) # on calcule le volume et l'inertie de la brique @@ -517,7 +513,7 @@ # pour chaque contacteur du corps for contact in body.contactors: # si le contacteur n'est pas un CLxxx - if contact.type != 'CLxxx': + if contact.shape != 'CLxxx': # on passe au suivant continue # si le contacteur n'a pas la bonne couleur @@ -552,8 +548,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/brick_wall.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/brick_wall.html similarity index 95% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/brick_wall.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/brick_wall.html index 5951ef4..a74036a 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/brick_wall.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/brick_wall.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.brick_wall — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.brick_wall — pylmgc90.pre 2015.2 documentation @@ -46,18 +46,18 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.brick_wall

+  

Source code for pylmgc90.pre.build_avatar.brick_wall

 # module definissant des classes "murs de brique"
 import sys
-from pylmgc90.pre_lmgc.avatars import *
+from pylmgc90.pre.avatars import *
 from brick_row import *
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
 # classe definissant un mur construit avec un apareil type paneresse generique, i.e. la classe fournit
 # toutes les fonctions pour donner ou calculer le nombre de rangees, la hauteur du mur, la taille du joint
 # mais pas la methode de construction
-class paneresse_generic:
-   """class paneresse_generic:
+class paneresse_generic():
+   """class paneresse_generic():
       this class defines an objet representing a wall, using the so called "apareil en paneresses"
    """
 
@@ -519,7 +519,7 @@
 # classe definissant un mur construit avec un apareil type paneresse simple, i.e. permet de construire un
 # mur avec apareil en paneresse simple, pour des briques disposees en paneresse, un apraeil en boutisse
 # pour des briques disposees en boutisse, et sur chant pour des briques disposees sur chant
-
[docs]class paneresse_simple(paneresse_generic): +
[docs]class paneresse_simple(paneresse_generic): """class paneresse_simple: this class defines an objet representing a brick wall, using the so called "apareil en paneresses, simple" @@ -540,7 +540,7 @@ # pose le mur de briques sous la forme de corps rigides (modele, materiau, couleurs), par rapport a une origine donnee 0 # le parement exterieur se trouve dans le plan xOz, et les briques sont posees suivant l'axe Ox -
[docs] def buildRigidWall(self, origin, model, material, colors=['BLEUx', 'REDxx'], rtol=1e-5): +
[docs] def buildRigidWall(self, origin, model, material, colors=['BLEUx', 'REDxx'], rtol=1e-5): """buildRigidWall(self, origin, model, material, color, rtol=1e-5): this function builds the wall, as it generates a list of rigid avatars representing bricks of the wall @@ -598,7 +598,7 @@ # le parement exterieur se trouve dans le plan xOz, et les briques sont posees suivant l'axe Ox # le mur genere par cette focntion est pret pour le harpage, puisque les demi-briques pouvant aparaitre au debut ou la fin de # chaque rangee ne sont pas posees -
[docs] def buildRigidWallWithoutHalfBricks(self, origin, model, material, colors=['BLEUx', 'REDxx'], rtol=1e-5): +
[docs] def buildRigidWallWithoutHalfBricks(self, origin, model, material, colors=['BLEUx', 'REDxx'], rtol=1e-5): """buildRigidWallWithoutHalfBricks(self, origin, model, material, color, rtol=1e-5): this function builds the wall, as it generates a list of rigid avatars representing bricks of the wall ; @@ -663,7 +663,7 @@ # classe definissant un mur construit avec un apareil type paneresse simple, i.e. permet de construire un # mur avec apareil en paneresse simple, pour des briques disposees en paneresse et sur chant pour des briques disposees sur chant -
[docs]class paneresse_double(paneresse_generic): +
[docs]class paneresse_double(paneresse_generic): """class paneresse_double: this class defines an objet representing a brick wall, using the so called "apareil en paneresses, double" @@ -692,7 +692,7 @@ # pose le mur de briques sous la forme de corps rigides (modele, materiau, couleurs), par rapport a une origine donnee 0 # le parement exterieur se trouve dans le plan xOz, et les briques sont posees suivant l'axe Ox -
[docs] def buildRigidWall(self, origin, model, material, colors=['BLEUx', 'REDxx', 'JAUNE', 'VERTx'], rtol=1e-5): +
[docs] def buildRigidWall(self, origin, model, material, colors=['BLEUx', 'REDxx', 'JAUNE', 'VERTx'], rtol=1e-5): """buildRigidWall(self, origin, model, material, colors, rtol=1e-5): this function builds the wall, as it generates a list of rigid avatars representing bricks of the wall @@ -768,8 +768,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/extrusion.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/extrusion.html similarity index 82% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/extrusion.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/extrusion.html index a275a82..ebe587a 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/extrusion.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/extrusion.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.extrusion — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.extrusion — pylmgc90.pre 2015.2 documentation @@ -46,7 +46,7 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.extrusion

+  

Source code for pylmgc90.pre.build_avatar.extrusion

 # module qui fournit des macros pour extruder des corps rigides 2D
 
 import sys
@@ -54,15 +54,15 @@
 import math
 import copy
 
-from pylmgc90.pre_lmgc.avatar.avatar import *
-from pylmgc90.pre_lmgc.avatar.bulk.rigid3d import *
-from pylmgc90.pre_lmgc.avatars import *
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.avatar.avatar import *
+from pylmgc90.pre.avatar.bulk.rigid3d import *
+from pylmgc90.pre.avatars import *
+from pylmgc90.pre.utilities.error    import *
 
 from mesh import *
 
 # fonction qui extrude un rigide 2D (defini dans le plan xOy), suivant l'axe Oz
-
[docs]def extrudeRigid(body2D, model3D, depth, factor=1.e0, extrudedDisk='Sphere', number=None): +
[docs]def extrudeRigid(body2D, model3D, depth, factor=1.e0, extrudedDisk='Sphere', number=None): '''extrudeRigid(body2D, model3D, depth, factor=1.e0, number=None): this function builds a 3D rigid body by extruding a given 2D rigid avatar and returns @@ -94,13 +94,13 @@ showError("In extrudeRigid: first argument of this function must be an avatar!") # verification du type d'avatar - if body2D.type != 'RBDY2': + if body2D.atype != 'RBDY2': showError("In extrudeRigid: first argument of this function must be a rigid avatar!") # creation d'un nouveau corps rigide 3D # N.B.: on ne renseigne ni le rayoin pour la masse, ni les inerties # principales pour qu'elles soient calculees par LMGC90 - body3D = avatar(type='RBDY3', dimension=3, number=number) + body3D = avatar(dimension=3, number=number) # on lui attribue un comportement volumique de type rigide body3D.addBulk( rigid3d() ) @@ -114,14 +114,14 @@ # on determine si le coprs possede (au moins) un contacteur polygone has_polygon = False for contactor in body2D.contactors: - if contactor.type == 'POLYG': + if contactor.shape == 'POLYG': has_polygon = True break # on determine si le corps est un jonc (i.e. possede un contacteur jonc) is_jonc = False for contactor in body2D.contactors: - if contactor.type == 'JONCx': + if contactor.shape == 'JONCx': is_jonc = True break @@ -130,7 +130,7 @@ # on place le centre d'inertie a l'origine, pour que LMGC90 le # recalcule a partir des positions des contacteurs (sommets ou centres) body3D.addNode( - node(type='NO3xx',coor=numpy.array([0., 0., 0.]), + node(coor=numpy.array([0., 0., 0.]), number=1) ) # sinon, else: @@ -138,14 +138,14 @@ if is_jonc: # on place le centre d'inertie dans le plan y = depth/2 body3D.addNode( - node(type='NO3xx',coor=numpy.array([factor*mass_center[0], + node(coor=numpy.array([factor*mass_center[0], 0.5*depth, factor*mass_center[1]]), number=1) ) # sinon, else: # on place le centre d'inertie dans le plan z = depth/2 # N.B. : le corps est donc un disque (creux ou plein) body3D.addNode( - node(type='NO3xx',coor=numpy.array([factor*mass_center[0], + node(coor=numpy.array([factor*mass_center[0], factor*mass_center[1], 0.5*depth]), number=1) ) # on definit les groupes pour le corps @@ -160,15 +160,15 @@ try: try: # on tente de calculer le type et les options du contacteur constituant l'extrusion 3D du contacteur courant - type, options=contactor.extrusion(mass_center=mass_center, depth=depth, factor=factor, extrudedDisk=extrudedDisk) + shape, options=contactor.extrusion(mass_center=mass_center, depth=depth, factor=factor, extrudedDisk=extrudedDisk) # si ca reussi, on ajoute le contacteur au corps resulatant de l'extrusion - body3D.addContactors(type=type, color=contactor.color, **options) + body3D.addContactors(shape=shape, color=contactor.color, **options) except ValueError, e: # si on echoue a cause de la valeur d'une option, on affiche le warning ad hoc showWarning(str(e)) except NotImplementedError: # si on echoue parce que le contatceur n'a pas defini sa facon d'etre extrude, on previent l'utilisateur - showWarning("In extrudeRigid: a contactor " + contactor.type + " CANNOT be extruded! Skipping.") + showWarning("In extrudeRigid: a contactor " + contactor.shape + " CANNOT be extruded! Skipping.") # si le corps n'est pas un jonc, on passe la face extrude (z=depth) du plan xOy, au plan xOz (y=0) if not is_jonc: @@ -184,7 +184,7 @@ # fonction qui extrude un ensemble de corps rigides 2D et place # les corps extrudes dans le plan xOz -
[docs]def extrudeRigids(bodies2D, model3D, depth, factor=1.e0, extrudedDisk='Sphere', number=None): +
[docs]def extrudeRigids(bodies2D, model3D, depth, factor=1.e0, extrudedDisk='Sphere', number=None): '''extrudeRigids(bodies2D, model3D, depth, factor=1.e0, number=None): this function extrudes each avatar in a given avatar container and returns @@ -267,7 +267,7 @@ for l in range(nb_lz+1): for n in m.nodes: new_coor = numpy.array([n.coor[0],n.coor[1],l*lz/nb_lz]) - vol_mesh.addNode(node(type='NO3xx',coor=new_coor,number=l*nb_nodes+n.number)) + vol_mesh.addNode(node(coor=new_coor,number=l*nb_nodes+n.number)) #adding elements for i, e in enumerate(m.bulks): @@ -299,13 +299,14 @@ nnew_c = [ c+l*nb_nodes for c in new_c ] vol_mesh.addBulk(element(connec_type[elem_size], nnew_c, e.physicalEntity+'E',e.geometricalEntity)) + elem_dim = geoElement2dimension[e.etype] #needs to add original surfacic elements on top and bottom if perm: - vol_mesh.addBulk(element(e.type, e.connectivity, e.physicalEntity+'B',e.geometricalEntity)) - vol_mesh.addBulk(element(e.type, [x+nb_lz*nb_nodes for x in e.connectivity[::-1]], e.physicalEntity+'T',e.geometricalEntity)) + vol_mesh.addBulk(element(elem_dim, e.connectivity, e.physicalEntity+'B',e.geometricalEntity)) + vol_mesh.addBulk(element(elem_dim, [x+nb_lz*nb_nodes for x in e.connectivity[::-1]], e.physicalEntity+'T',e.geometricalEntity)) else: - vol_mesh.addBulk(element(e.type, e.connectivity[::-1], e.physicalEntity+'B',e.geometricalEntity)) - vol_mesh.addBulk(element(e.type, [x+nb_lz*nb_nodes for x in e.connectivity], e.physicalEntity+'T',e.geometricalEntity)) + vol_mesh.addBulk(element(elem_dim, e.connectivity[::-1], e.physicalEntity+'B',e.geometricalEntity)) + vol_mesh.addBulk(element(elem_dim, [x+nb_lz*nb_nodes for x in e.connectivity], e.physicalEntity+'T',e.geometricalEntity)) return vol_mesh @@ -319,8 +320,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lattices2D.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/lattices2D.html similarity index 94% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lattices2D.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/lattices2D.html index 1233aae..15fd2b1 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lattices2D.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/lattices2D.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.lattices2D — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.lattices2D — pylmgc90.pre 2015.2 documentation @@ -46,13 +46,13 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.lattices2D

+  

Source code for pylmgc90.pre.build_avatar.lattices2D

 # module dedie au depot de particules sur un reseau
 
 import sys
 import numpy
 import math
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
 # fonction qui genere une liste de coordonnees sur un reseau carre
 # parametres :
@@ -71,7 +71,7 @@
 #          max(rayons) <= l/2
 #    2. l'ensemble particules deposees sur ce resau est inclus dans une boite 
 #       rectangulaire de dimensions : nb_ele*l x nb_layer*l
-
[docs]def squareLattice2D(nb_ele, nb_layer, l, x0=0., y0=0.): +
[docs]def squareLattice2D(nb_ele, nb_layer, l, x0=0., y0=0.): '''coor=squareLattice2D(nb_ele, nb_layer, l, x0=0., y0=0.): this function compute a list of positions on a square lattice @@ -196,7 +196,7 @@ showError(str(orientation) + " is not an orientation!") # fonction qui genere une liste de coordonnees sur un reseau triangulaire -
[docs]def triangularLattice2D(nb_ele, nb_layer, l, x0=0., y0=0., orientation='up'): +
[docs]def triangularLattice2D(nb_ele, nb_layer, l, x0=0., y0=0., orientation='up'): '''coor=triangularLattice2D(nb_ele, nb_layer, l, x0=0., y0=0., orientation='up'): this function compute a list of positions on an equilateral triangular lattice @@ -293,8 +293,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lattices3D.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/lattices3D.html similarity index 91% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lattices3D.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/lattices3D.html index a336a3c..2c7e180 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lattices3D.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/lattices3D.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.lattices3D — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.lattices3D — pylmgc90.pre 2015.2 documentation @@ -46,7 +46,7 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.lattices3D

+  

Source code for pylmgc90.pre.build_avatar.lattices3D

 # module dedie au depot de particules sur un reseau
 
 import sys
@@ -75,7 +75,7 @@
 #          max(rayons) <= l/2
 #    2. l'ensemble particules deposees sur ce resau est inclus dans une boite 
 #       rectangulaire de dimensions : nb_ele_x*l x nb_ele_y*l x nb_layer*l
-
[docs]def cubicLattice3D(nb_ele_x, nb_ele_y, nb_layer, l, x0=0., y0=0., z0=0.): +
[docs]def cubicLattice3D(nb_ele_x, nb_ele_y, nb_layer, l, x0=0., y0=0., z0=0.): '''coor=cubicLattice3D(nb_ele_x, nb_ele_y, nb_layer, l, x0=0., y0=0., z0=0.): this function compute a list of positions on a cubic lattice @@ -132,8 +132,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lecture.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/lecture.html similarity index 61% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lecture.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/lecture.html index b4c3a06..ec8a30f 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/lecture.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/lecture.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.lecture — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.lecture — pylmgc90.pre 2015.2 documentation @@ -46,7 +46,7 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.lecture

+  

Source code for pylmgc90.pre.build_avatar.lecture

 # MODULE lecture
 # 
 # Module permettant la lecture des differents formats
@@ -73,19 +73,19 @@
 
 import os,string,sys
 
-from pylmgc90.pre_lmgc.config.readMeshFormat import *
-from pylmgc90.pre_lmgc.config.lmgc90dicts import *
+from pylmgc90.pre.config.readMeshFormat import *
+from pylmgc90.pre.config.lmgc90dicts import *
 
-from pylmgc90.pre_lmgc.avatar.nodes        import *
-from pylmgc90.pre_lmgc.avatar.node.node    import *
-from pylmgc90.pre_lmgc.avatar.bulks        import *
-from pylmgc90.pre_lmgc.avatar.bulk.element import *
+from pylmgc90.pre.avatar.nodes        import *
+from pylmgc90.pre.avatar.node.node    import *
+from pylmgc90.pre.avatar.bulks        import *
+from pylmgc90.pre.avatar.bulk.element import *
 from mesh import *
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
 ## routine de lecture du fichier maillage
 #@todo gerer l'extension med
-
[docs]def lecture(name, dim, keep_elements=None, scale_factor=None, incomplete_elements=None): +
[docs]def lecture(name, dim, keep_elements=None, scale_factor=None, incomplete_elements=True): """lecture(name, dim): this function builds sets of nodes and elements by reading a file @@ -150,11 +150,7 @@ # si le mot clef lu est "MeshFormat" et que le numero de version est 2 ou 2.x if (res0[0] == '$MeshFormat' and (res1[0] == "2" or res1[0].startswith("2."))): - # c'est un fichier au format 2.x - if ( incomplete_elements ): - read_mesh = gmshv2(mesh_file, dim, keep_elements, incomplete_elements) - else: - read_mesh = gmshv2(mesh_file, dim, keep_elements, []) + read_mesh = readGmshv2(mesh_file, dim, keep_elements, incomplete_elements) # sinon, else: # c'est un fichier au format 1.0, qui n'a pas d'en-tete @@ -163,15 +159,18 @@ mesh_file.close() mesh_file = open(name, 'r') # on lit le fichier - read_mesh = gmshv1(mesh_file, dim) + read_mesh = readGmshv1(mesh_file, dim) # * cas du maillage maillage sysweld elif name.endswith('txt'): - read_mesh = sysweld(mesh_file, dim) + read_mesh = readSysweld(mesh_file, dim) # * cas du maillage maillage au format MED #elif name.endswith('med'): # * cas du maillage maillage au format MAIL elif name.endswith('mail'): - read_mesh = mail(mesh_file, dim) + read_mesh = readMail(mesh_file, dim) + # * cas du maillage maillage au format VTK + elif name.endswith('vtu'): + read_mesh = readVtu(name, dim, keep_elements) # si on a donne un facteur d'echelle if scale_factor != None: @@ -183,8 +182,8 @@ # on renvoie le maillage lu dans le fichier return read_mesh
-def gmshv1(mesh_file, dim): - """gmshv1(mesh_file, dim): +def readGmshv1(mesh_file, dim): + """readGmshv1(mesh_file, dim): this function builds sets of nodes and elements from a mesh built by gmsh, and using format 1.0 @@ -220,22 +219,27 @@ if motcle == '$NOD' and res[0]!='$NOD' and len(res) > 1: # si on est en 2D if dim == 2: - # on lit un noeud a deux composantes - type = 'NO2xx' coor = numpy.array( [ float(res[1]), float(res[2]) ] ) # si on est en 3D elif dim == 3: - # on lit un noeud a trois composantes - type = 'NO3xx' coor = numpy.array( [ float(res[1]), float(res[2]), float(res[3]) ] ) # on ajoute le noeud lu au maillage - read_mesh.addNode(node(type=type,coor=coor,number=int(res[0]))) + read_mesh.addNode(node(coor=coor,number=int(res[0]))) # si le dernier mot-clef lu est le debut de la section des elements, # et qu'on a pas atteint la fin de cette section # N.B.: le test 'len(res) > 1' permet de sauter la ligne donnant le nombre d'elements if motcle == '$ELM' and res[0]!='$ELM' and len(res) > 1 : # on lit le nouvel element et on l'ajoute au maillage - read_mesh.addBulk(element(type=gmsh2lmgc_element[res[1]], connectivity=map(int,res[5:]), physicalEntity=res[2], number=int(res[0]))) + if res[1] in gmshElementPoint: + read_mesh.addBulk(element(elem_dim=0, connectivity=map(int,res[5:]), physicalEntity=res[2], number=int(res[0]))) + elif res[1] in gmshElementLine: + read_mesh.addBulk(element(elem_dim=1, connectivity=map(int,res[5:]), physicalEntity=res[2], number=int(res[0]))) + elif res[1] in gmshElementSurface: + read_mesh.addBulk(element(elem_dim=2, connectivity=map(int,res[5:]), physicalEntity=res[2], number=int(res[0]))) + elif res[1] in gmshElementVolume: + read_mesh.addBulk(element(elem_dim=3, connectivity=map(int,res[5:]), physicalEntity=res[2], number=int(res[0]))) + else: + showError("[lecture::gmsh] : unknown gmsh element type: "+res[1]) # on ferme le fichier contenant le mailage mesh_file.close() @@ -243,8 +247,8 @@ # on renvoie le maillage ainsi construit return read_mesh -def gmshv2(mesh_file, dim, keep_elements, incomplete_elements): - """gmshv2(mesh_file, dim, keep_elements, incomplete_elements): +def readGmshv2(mesh_file, dim, keep_elements, incomplete_elements): + """readGmshv2(mesh_file, dim, keep_elements, incomplete_elements): this function builds sets of nodes and elements from a mesh built by gmsh, and using format 2.x @@ -292,26 +296,30 @@ if motcle == '$Nodes' and res[0]!='$Nodes' and len(res) > 1: # si on est en 2D if dim == 2: - # on lit un noeud a deux composantes - type = 'NO2xx' coor = numpy.array( [ float(res[1]), float(res[2]) ] ) # si on est en 3D elif dim == 3: - # on lit un noeud a trois composantes - type = 'NO3xx' coor = numpy.array( [ float(res[1]), float(res[2]), float(res[3]) ] ) # on ajoute le noeud lu au maillage - read_mesh.addNode(node(type=type,coor=coor,number=int(res[0]))) + read_mesh.addNode(node(coor=coor,number=int(res[0]))) # si le dernier mot-clef lu est le debut de la section des elements, # et qu'on a pas atteint la fin de cette section # N.B.: le test 'len(res) > 1' permet de sauter la ligne donnant le nombre d'elements if motcle == '$Elements' and res[0]!='$Elements' and len(res) > 1 : # on lit le nouvel element et on l'ajoute a la liste des elements - # on recupere : - # * le type de l'element (et on le passe au format LMGC90) - type_lmgc = gmshv22lmgc_element[res[1]] + if res[1] in gmshv2ElementPoint: + elem_dim = 0 + elif res[1] in gmshv2ElementLine: + elem_dim = 1 + elif res[1] in gmshv2ElementSurface: + elem_dim = 2 + elif res[1] in gmshv2ElementVolume: + elem_dim = 3 + else: + showError("[lecture::readGmshv2] : unknown gmsh element type: "+res[1]) + # on recupere : # * le nombre de tags (et on le passe en entier) nb_tags = int(res[2]) # s'il y a au moins un tag @@ -327,41 +335,44 @@ # si le filtrage des elements est active et que l'element ne fait pas # partie des elements conserves - if keep_elements != [] and not type_lmgc in keep_elements: + if keep_elements != [] and not elem_dim in keep_elements: # on passe au suivant continue - if type_lmgc == 'TE10x': + if res[1] == '11': # TE10 + # on permute la numerotation des noeuds de l'element pour retrouver l'ordre choisi dans LMGC90 conn_TE10 = [conn[0], conn[1], conn[2], conn[3], conn[4], conn[5], conn[6], conn[7], conn[9], conn[8]] # on construit l'element et on l'ajoute au maillage - read_mesh.addBulk(element(type=type_lmgc, connectivity=conn_TE10, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) + read_mesh.addBulk(element(elem_dim=elem_dim, connectivity=conn_TE10, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) - elif type_lmgc == 'H20xx': - # si l'element est un H20 - # on permute la numerotation des noeuds de l'element pour retrouver l'ordre choisi dans LMGC90 - conn_H20 = [conn[0], conn[1], conn[2], conn[3], conn[4], conn[5], conn[6], conn[7], - conn[8], conn[11], conn[13], conn[9], conn[16], conn[18], conn[19], conn[17], - conn[10], conn[12], conn[14], conn[15]] + if res[1] == '13' or (res[1]=='18' and incomplete_elements) : + # on permute la numerotation des noeuds de l'element pour retrouver l'ordre choisi dans LMGC90 + conn_PRI15 = [conn[0] , conn[1] , conn[2], conn[3] , conn[4] , + conn[5] , conn[6] , conn[9], conn[7] , conn[12], + conn[14], conn[13], conn[8], conn[10], conn[11]] # on construit l'element et on l'ajoute au maillage - read_mesh.addBulk(element(type=type_lmgc, connectivity=conn_H20, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) + read_mesh.addBulk(element(elem_dim=elem_dim, connectivity=conn_PRI15, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) - elif type_lmgc == 'Q8xxx': - # si l'element est un Q8 - conn_Q8 = [conn[0], conn[1], conn[2], conn[3], conn[4], conn[5], conn[6], conn[7]] + elif res[1] == '17' or (res[1]=='12' and incomple_elements) : + # on permute la numerotation des noeuds de l'element pour retrouver l'ordre choisi dans LMGC90 + conn_H20 = [conn[0] , conn[1] , conn[2] , conn[3] , conn[4] , + conn[5] , conn[6] , conn[7] , conn[8] , conn[11], + conn[13], conn[9] , conn[16], conn[18], conn[19], + conn[17], conn[10], conn[12], conn[14], conn[15]] # on construit l'element et on l'ajoute au maillage - read_mesh.addBulk(element(type=type_lmgc, connectivity=conn_Q8, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) + read_mesh.addBulk(element(elem_dim=elem_dim, connectivity=conn_H20, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) - elif type_lmgc == 'Q9xxx' and type_lmgc in incomplete_elements: + elif res[1] == '10' and incomplete_elements: # si l'element est un Q9 on lit un Q8 conn_Q8 = [conn[0], conn[1], conn[2], conn[3], conn[4], conn[5], conn[6], conn[7]] # on construit l'element et on l'ajoute au maillage - read_mesh.addBulk(element(type='Q8xxx', connectivity=conn_Q8, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) + read_mesh.addBulk(element(elem_dim=elem_dim, connectivity=conn_Q8, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) else: @@ -381,7 +392,7 @@ #print xx if xx < 0.: - if type_lmgc == 'T6xxx': + if len(conn)==6 : conn0=copy.deepcopy(conn) conn = [conn0[0],conn0[2],conn0[1],conn0[5],conn0[4],conn[3]] else: @@ -392,7 +403,7 @@ # on construit l'element et on l'ajoute au maillage - read_mesh.addBulk(element(type=type_lmgc, connectivity=conn, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) + read_mesh.addBulk(element(elem_dim=elem_dim, connectivity=conn, physicalEntity=pE, geometricalEntity=gE, number=int(res[0]))) # si le dernier mot-clef lu est le debut de la section des noms des entites physiques, # et qu'on a pas atteint la fin de cette section @@ -436,8 +447,8 @@ # on renvoie le maillage ainsi construit return read_mesh -def sysweld(mesh_file,dim): - """sysweld(mesh_file, dim): +def readSysweld(mesh_file,dim): + """readSysweld(mesh_file, dim): this function builds sets of nodes and elements from a mesh built by sysweld @@ -482,25 +493,22 @@ if motcle == 'NOEUD' and res[0]=='NOEUD': # si on est en 2D if dim == 2: - # on lit un noeud a deux composantes - type = 'NO2xx' - coor = numpy.array( [ float(res[5]), float(res[7]) ] ) + coor = numpy.array( [ float(res[5]), float(res[7]) ] ) # si on est en 3D elif dim == 3: - # on lit un noeud a trois composantes - type = 'NO3xx' - coor = numpy.array( [ float(res[5]), float(res[7]), float(res[9]) ] ) - read_mesh.addNode(node(type=type,coor=coor,number=int(res[0]))) + coor = numpy.array( [ float(res[5]), float(res[7]), float(res[9]) ] ) + read_mesh.addNode(node(coor=coor,number=int(res[0]))) # si la ligne courante est la premiere des deux lignes decrivant un element if motcle == 'ELEMENT' and res[0]=='ELEMENT': # on recupere le type, le numero et le groupe du nouvel element - type = res[3] + if res[3] not in sysweldElementSurface: + showError("[lecture::readSysweld] : unknown sysweld element type: "+res[3]) num = res[1] group = res[6] # si la ligne courante est la seconde des deux lignes decrivant un element if motcle == 'ELEMENT' and res[0]!='ELEMENT': # on complete la description du nouvel element et on l'ajoute au maillage - read_mesh.addBulk(element(type=sysweld2lmgc_element[type], connectivity=res[1:], physicalEntity=group)) + read_mesh.addBulk(element(elem_dim=2, connectivity=res[1:], physicalEntity=group)) # on ferme le fichier contenant le mailage mesh_file.close() @@ -508,8 +516,8 @@ # on renvoie le maillage ainsi construit return read_mesh -def mail(mesh_file, dim): - """mail(mesh_file, dim): +def readMail(mesh_file, dim): + """readMail(mesh_file, dim): this function builds a mesh by reading a file using the 'mail' format @@ -530,8 +538,6 @@ 'GROUP_NO', # groupe de noeuds 'FINSF', # fin de section 'FIN') # fin du fichier - # on recupere la liste des types d'elements connus - mail_elements = mail2lmgc_element.keys() # on definit le maillage read_mesh = mesh(dim) @@ -564,18 +570,18 @@ # * si le mot-clef est 'COOR_3D' et que le maillage est 2D if res[0] == 'COOR_3D' and dim == 2: # on affiche un message d'erreur - showError("[lecture::mail] : The file decribes 3D coordinates while you want to build a 2D mesh!") + showError("[lecture::readMail] : The file decribes 3D coordinates while you want to build a 2D mesh!") # si le mot clef est valide, on le stocke motcle=res[0] # si la chaine de la premiere colonne est un nom d'element - if res[0] in mail_elements: + if res[0] in mailElementSurface: # on stocke le type d'element decrit dans la prochaine liste d'elements type_ele=res[0] - # on stocke le type d'element corespondant dans la nomenclature de LMGC90 - type_ele_lmgc=mail2lmgc_element[type_ele] # on le stocke comme un mot clef motcle=res[0] + else: + showError("[lecture::readMail] : unknown mail element type: "+res[0]) # si le dernier mot-clef lu est le debut d'une de noeuds, avec des coordonnees 3D, # et qu'on a pas atteint la fin de cette section # N.B.: le test 'len(res) > 1' permet de sauter la ligne qui contient le mot-clef @@ -584,11 +590,9 @@ num += 1 # on associe l'identifiant du noeud courant a son numero node_id2num[res[0]] = num - # on lit un noeud a trois composantes - type = 'NO3xx' - coor = numpy.array( [ float(res[1]), float(res[2]), float(res[3]) ] ) + coor = numpy.array( [ float(res[1]), float(res[2]), float(res[3]) ] ) # on ajoute le noeud lu au maillage - read_mesh.addNode(node(type=type, coor=coor, number=num)) + read_mesh.addNode(node( coor=coor, number=num)) # si le dernier mot-clef lu est un type d'element # et qu'on a pas atteint la fin de la liste des elements de ce type # N.B.: le test 'len(res) > 1' permet de sauter la ligne qui contient le type de l'element @@ -607,7 +611,7 @@ conn.append(node_id2num[id_node]) # on peut alors construire le nouvel element - ele=element(type=type_ele_lmgc, connectivity=conn) + ele=element(elem_dim=2, connectivity=conn) # on l'ajoute au maillage read_mesh.addBulk(ele) # on associe le nouvel element a son identifiant @@ -638,7 +642,7 @@ # si on a deja associe un groupe a l'element if ele_id2bulk[res[0]].physicalEntity != '1': # on affiche un message d'erreur - showError("[lecture::mail] : A group have been already added to this element!") + showError("[lecture::readMail] : A group have been already added to this element!") # sinon, else: # on associe le groupe courant l'element identifie par l'identifiant courant @@ -667,7 +671,7 @@ # a ce groupe # on ajoute un element point, appuye sur ce noeud, au maillage - read_mesh.addBulk( element(type='Point', connectivity=[node_id2num[res[0]]], physicalEntity=group_name) ) + read_mesh.addBulk( element(elem_dim=0, connectivity=[node_id2num[res[0]]], physicalEntity=group_name) ) # si le dernier mot-clef lu indique la fin du fichier if motcle == 'FIN': # on arrete la lecture du fichier @@ -678,6 +682,122 @@ # on renvoie le maillage ainsi construit return read_mesh + +def readVtu(mesh_file, dim, keep_elements): + """readVtu(mesh_file, dim): + + this function builds sets of nodes and elements from a mesh + built by vtk, and using format vtu + + parameters: + + - mesh_file: a file object coresponding to the file in wherein the mesh is stored + N.B.: the file is supposed to be open for reading + - dim: dim=2, in 2D and dim=3, in 3D + + optional parameters: + + - keep_elements: this parameter is used to filter elements, if + keep_elements=None, no filter used, else keep_elements is the list + of elements types that can be stored in the built mesh, other will be + forgotten + + returned value: + + - read_mesh: the built mesh + """ + + import vtk + + # on utilise le reader vtk des maillages non structure + # Read the source file. + try : + reader = vtk.vtkXMLUnstructuredGridReader() + except: + reader = vtk.vtkUnstructuredGridReader() + reader.SetFileName(mesh_file) + reader.Update() + datavtu = reader.GetOutput() + + # Recuperation du maillage + nb_nodes = int(datavtu.GetNumberOfPoints()) + nb_cells = int(datavtu.GetNumberOfCells()) + + # on definit le dictionnaire associant un nom a certaines entites physiques + physicalEntity2physicalName={} + + # on definit le maillage au format LMGC90 + read_mesh = mesh(dimension=dim) + + # pour chaque noeud du maillage vtu + for i in range(nb_nodes): + coor = numpy.asarray(datavtu.GetPoints().GetPoint(i))[:dim] + read_mesh.addNode(node(coor=coor,number=int(i))) + + # on charge les entites physiques et geometriques par un array nomme PhysicalGroup + PhysicalGroup = datavtu.GetCellData().GetArray('PhysicalGroup') + if PhysicalGroup == None : + showWarning('No physical groups defined on this mesh!') + + # pour chaque element du maillage vtu + for i in range(nb_cells): + vtkid = str(datavtu.GetCellType(i)) + if vtkid in vtkElementPoint: + elem_dim = 0 + elif vtkid in vtkElementLine: + elem_dim = 1 + elif vtkid in vtkElementSurface: + elem_dim = 2 + elif vtkid in vtkElementVolume: + elem_dim = 3 + else: + print int(datavtu.GetCell(i).GetNumberOfPoints()) + showError("[lecture::readVtu] : unknown vtk element type: "+vtkid) + + # filtre des elements non interressant + if keep_elements != [] and not elem_dim in keep_elements: + # on passe au suivant + continue + # lecture d'un element interressant + conn = [] + nb_points = int(datavtu.GetCell(i).GetNumberOfPoints()) + for j in range(nb_points): + conn.append(int(datavtu.GetCell(i).GetPointIds().GetId(j))) + + if vtkid == '13': + conn_PRI6 = [conn[0], conn[2], conn[1], conn[3], conn[5], conn[4]] + conn = conn_PRI6 + elif vtkid == '26': + conn_PRI15 = [conn[0] , conn[2], conn[1] , conn[3] , conn[5] , + conn[4] , conn[8], conn[7] , conn[6] , conn[11], + conn[10], conn[9], conn[12], conn[14], conn[13]] + conn = conn_PRI15 + + if PhysicalGroup <> None : + # on construit les entites physiques et geometriques par un array nomme PhysicalGroup + pE = str(int(PhysicalGroup.GetValue(i))) + gE = str(int(PhysicalGroup.GetValue(i))) + else : + pE = '1' + gE = '1' + + # on construit l'element et on l'ajoute au maillage + read_mesh.addBulk(element(elem_dim=elem_dim, connectivity=conn, physicalEntity=pE, geometricalEntity=gE, number=int(i))) + + # si certaines entites physiques possedent un nom + if len(physicalEntity2physicalName) != 0: + # le nom remplace le numero d'entite physique pour les elements concernes + # on recupere la liste des numeros d'entite physiques concernes + named_physicalEntities=physicalEntity2physicalName.keys() + # pour chaque element + for ele in read_mesh.bulks: + # si un nom est associe a son numero d'entite physique + if ele.physicalEntity in named_physicalEntities: + # on remplace le numero par le nom + ele.physicalEntity = physicalEntity2physicalName[ele.physicalEntity] + + # on renvoie le maillage ainsi construit + return read_mesh
@@ -688,8 +808,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh.html similarity index 91% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh.html index 65d2684..9893f00 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.mesh — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.mesh — pylmgc90.pre 2015.2 documentation @@ -46,19 +46,19 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.mesh

+  

Source code for pylmgc90.pre.build_avatar.mesh

 # module definissant une classe permettant de manipuler un maillage 2D ou 3D
 import sys
 import numpy as np
 import copy
-from pylmgc90.pre_lmgc.avatar.bulks import *
-from pylmgc90.pre_lmgc.avatar.nodes import *
-from pylmgc90.pre_lmgc.avatar.bulk.element import *
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.avatar.bulks import *
+from pylmgc90.pre.avatar.nodes import *
+from pylmgc90.pre.avatar.bulk.element import *
+from pylmgc90.pre.utilities.error    import *
 
 # classe maillage
-
[docs]class mesh: - """class mesh: +
[docs]class mesh(): + """class mesh(): this class defines a mesh object, as a couple of a nodes set and a bulk set. """ @@ -81,7 +81,7 @@ self.bulks = bulks() # fonction qui ajoute un noeud au maillage -
[docs] def addNode(self, noeud): +
[docs] def addNode(self, noeud): """addNode(noeud): this function add a node to the mesh @@ -98,7 +98,7 @@ showError('incompatible size between coor array and dimension')
# fonction qui ajoute un element au maillage -
[docs] def addBulk(self, ele): +
[docs] def addBulk(self, ele): """addBulk(ele): this function add an element to the mesh @@ -113,7 +113,7 @@ self.bulks.addBulk(ele)
# remove nodes not attached to elements -
[docs] def removeFreeNodes(self): +
[docs] def removeFreeNodes(self): """ removeFreeNodes(self) removes nodes not attached to an element """ @@ -142,7 +142,7 @@ # - il se peut aussi que certains noeuds soient inutiles (car on a lu un maillage lineaire # dans un maillage quadratique par exemple) dans ce cas il faut virer les noeuds inutiles et tasser la numerotation -
[docs] def rankRenumbering(self): +
[docs] def rankRenumbering(self): """rankRenumbering(self): this function renumbers the nodes of the mesh, in order to avoid holes in the numbering, i.e. @@ -194,7 +194,7 @@ # fonction qui donne acces a des sous-maillage d'un maillage, suivant la valeur d'une entite -
[docs] def getSubMeshes(self, entity_type="geometricalEntity"): +
[docs] def getSubMeshes(self, entity_type="geometricalEntity"): """getSubMeshes(self, entity_type="geometricalEntity"): this function computes handles to sub-meshes of the given mesh and returns the @@ -259,7 +259,7 @@ return entity2subMesh
# fonction qui separe les differents maillages lus dans un meme fichier -
[docs] def separateMeshes(self, dim, entity_type="geometricalEntity", keep_all_elements=True): +
[docs] def separateMeshes(self, dim, entity_type="geometricalEntity", keep_all_elements=True): """separateMeshes(self, dim, entity_type="geometricalEntity"): this function separates several meshes, stored in a single one (read from a mesh), @@ -298,7 +298,7 @@ # pour chaque element for bulk in self.bulks: # si l'element est de la dimension condideree - if bulk.type in dimension2geoElement[dim]: + if bulk.etype in dimension2geoElement[dim]: # on recupere l'entite consideree (physique ou geometrique) de l'element courant entity=getattr(bulk, entity_type) # si l'entite n'a pas encore ete rencontree @@ -363,7 +363,7 @@ # pour chaque element for bulk in self.bulks: # si l'element courant est de dimension inferieure a celle consideree - if geoElement2dimension[bulk.type] < dim: + if geoElement2dimension[bulk.etype] < dim: # on recupere la connectivite de l'element courant connectivity=bulk.connectivity # on recupere le numero du premier noeud @@ -406,12 +406,12 @@ return entity2mesh
-
[docs] def computeNormal(self, n, e, reverse): +
[docs] def computeNormal(self, n, e, reverse): """ Compute normal of a node of an element """ - if self.bulks[e].type == 'S2xxx': + if self.bulks[e].etype == 'S2xxx': normal = np.zeros([self.dimension]) if reverse: normal[0] =-self.nodes[self.bulks[e].connectivity[0]].coor[1]+self.nodes[self.bulks[e].connectivity[1]].coor[1] @@ -419,7 +419,7 @@ else: normal[0] =-self.nodes[self.bulks[e].connectivity[1]].coor[1]+self.nodes[self.bulks[e].connectivity[0]].coor[1] normal[1] = self.nodes[self.bulks[e].connectivity[1]].coor[0]-self.nodes[self.bulks[e].connectivity[0]].coor[0] - elif self.bulks[e].type == 'T3xxx': + elif self.bulks[e].etype == 'T3xxx': if reverse: normal = np.cross( self.nodes[self.bulks[e].connectivity[1]].coor-self.nodes[self.bulks[e].connectivity[0]].coor, self.nodes[self.bulks[e].connectivity[2]].coor-self.nodes[self.bulks[e].connectivity[0]].coor @@ -442,7 +442,7 @@ return normal
-
[docs] def extrudePhysicalEntity(self, pE, length, reverse=False): +
[docs] def extrudePhysicalEntity(self, pE, length, reverse=False): """ Extrude an external layer of mesh. @@ -469,7 +469,7 @@ # list nodes and elements of the desired physical entity el_list = []; no_list = [] for e, el in enumerate(self.bulks): - if pE == el.physicalEntity and el.type in dimension2geoElement[self.dimension-1]: + if pE == el.physicalEntity and el.etype in dimension2geoElement[self.dimension-1]: el_list.append(e) for n in el.connectivity: if n not in no_list: @@ -480,7 +480,7 @@ for nod in no_list: n2b.append([]) for bul in el_list: - if nod in self.bulks[bul].connectivity and self.bulks[bul].type in extr_map.keys() : + if nod in self.bulks[bul].connectivity and self.bulks[bul].etype in extr_map.keys() : n2b[-1].append(bul) # keeps the last node number to be able to create elements @@ -496,8 +496,7 @@ n += normal[:] s += np.linalg.norm(normal) n /= s - self.addNode( node(type='NO'+str(self.dimension)+'xx', - coor=length*n+self.nodes[no].coor, + self.addNode( node(coor=length*n+self.nodes[no].coor, number=node_shift+no) ) # create new elements: @@ -511,12 +510,13 @@ new_c = new_c + [x+node_shift for x in new_c] # new extruded element - self.addBulk( element( extr_map[elem.type], new_c, + self.addBulk( element( geoElement2dimension[extr_map[elem.etype]], new_c, 'E'+elem.physicalEntity, elem.geometricalEntity) ) # the projection of the original element along the normals - self.addBulk( element( elem.type, [x+node_shift for x in elem.connectivity], + self.addBulk( element( geoElement2dimension[elem.etype], + [x+node_shift for x in elem.connectivity], 'P'+elem.physicalEntity, elem.geometricalEntity ) ) @@ -533,8 +533,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh2D.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh2D.html similarity index 86% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh2D.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh2D.html index a9b612c..be1ddee 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh2D.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh2D.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.mesh2D — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.mesh2D — pylmgc90.pre 2015.2 documentation @@ -46,22 +46,22 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.mesh2D

+  

Source code for pylmgc90.pre.build_avatar.mesh2D

 # module qui fournit des macros pour construire et/ou manipuler des maillages 2D
 
 import numpy
-from pylmgc90.pre_lmgc.avatar.avatar import *
-from pylmgc90.pre_lmgc.avatar.bulk.element import *
-from pylmgc90.pre_lmgc.avatar.contactor.contactor import *
-from pylmgc90.pre_lmgc.avatar.group.group import *
-from pylmgc90.pre_lmgc.avatars import *
+from pylmgc90.pre.avatar.avatar import *
+from pylmgc90.pre.avatar.bulk.element import *
+from pylmgc90.pre.avatar.contactor.contactor import *
+from pylmgc90.pre.avatar.group.group import *
+from pylmgc90.pre.avatars import *
 from mesh import *
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
 # import du module permettant de savoir si on pourra importer les pre_tools
-from pylmgc90.pre_lmgc.utilities.check_compiled_modules import *
+from pylmgc90.pre.utilities.check_compiled_modules import *
 
-from pylmgc90.pre_lmgc.avatar.contactor.contactorFactory import contactorFactory
+from pylmgc90.pre.avatar.contactor.contactorFactory import contactorFactory
 
 # si on peut essayer d'importer le module pre_tools sans tout faire planter
 if import_lmgc90():
@@ -75,7 +75,7 @@
       raise
 
 # fonction qui construit un corps deformable a partir en maillant un rectangle :
-#   - type_mesh : type de maillage :
+#   - mesh_type : type de maillage :
 #        - 'Q4' : maillage en Q4
 #        - '2T3' : maillage en T3, obtenus en coupant en deux des Q4
 #        - '4T3' : maillage en T3, obtenus en coupant en quatre des Q4
@@ -88,8 +88,8 @@
 #   - material : materiau
 #   - model : modele
 #   - number : numero du corps
-
[docs]def buildMesh2D(type_mesh, x0, y0, lx, ly, nb_elem_x, nb_elem_y, vertices=None, number=None): - '''buildMesh2D=buildMesh2D(type_mesh, x0, y0, lx, ly, nb_elem_x, nb_elem_y, vertices=None, number=None): +
[docs]def buildMesh2D(mesh_type, x0, y0, lx, ly, nb_elem_x, nb_elem_y, vertices=None, number=None): + '''buildMesh2D=buildMesh2D(mesh_type, x0, y0, lx, ly, nb_elem_x, nb_elem_y, vertices=None, number=None): this function meshes a given rectangle, and returns the generated mesh @@ -98,7 +98,7 @@ parameters: - - type_mesh: type of mesh: + - mesh_type: type of mesh: - 'Q4': mesh with elements Q4 - '2T3': mesh with elements T3, obtained by spitting one Q4 in two T3 @@ -121,7 +121,7 @@ if ( vertices ): # le maillage doit etre en Q4, partir du point (0, 0), et verifier # lx = nb_elem_x et ly = nb_elem_y - if type_mesh != 'Q4': + if mesh_type != 'Q4': showError('only a Q4 mesh accepts a list of vertices!') if x0 != 0. or y0 != 0.: showError('when list of vertices is given, (x0, y0) must be (0., 0.)!' ) @@ -130,7 +130,7 @@ # calcul du maillage, selon son type : - if type_mesh == 'Q4': # cas du maillage en Q4 + if mesh_type == 'Q4': # cas du maillage en Q4 # dimensionnement des vecteurs pour stocker le maillage [size_nodes, size_nb_node_per_ele_vol, size_conn_vol]=lmgc90.mesh2D_SizeMeshQ4(nb_elem_x, nb_elem_y) @@ -138,7 +138,7 @@ [nodes, nb_node_per_ele_vol, conn_vol]=lmgc90.mesh2D_MeshQ4(x0, y0, lx, ly, nb_elem_x, nb_elem_y, size_nodes, size_nb_node_per_ele_vol, size_conn_vol) - elif type_mesh == '2T3': # cas du maillage en T3, obtenus en coupant en deux + elif mesh_type == '2T3': # cas du maillage en T3, obtenus en coupant en deux # des Q4 [size_nodes, size_nb_node_per_ele_vol, size_conn_vol]=lmgc90.mesh2D_SizeMesh2T3(nb_elem_x, nb_elem_y) @@ -146,7 +146,7 @@ [nodes, nb_node_per_ele_vol, conn_vol]=lmgc90.mesh2D_Mesh2T3(x0, y0, lx, ly, nb_elem_x, nb_elem_y, size_nodes, size_nb_node_per_ele_vol, size_conn_vol) - elif type_mesh == '4T3': # cas du maillage en T3, obtenus en coupant en + elif mesh_type == '4T3': # cas du maillage en T3, obtenus en coupant en # quatre des Q4 [size_nodes, size_nb_node_per_ele_vol, size_conn_vol]=lmgc90.mesh2D_SizeMesh4T3(nb_elem_x, nb_elem_y) @@ -154,7 +154,7 @@ [nodes, nb_node_per_ele_vol, conn_vol]=lmgc90.mesh2D_Mesh4T3(x0, y0, lx, ly, nb_elem_x, nb_elem_y, size_nodes, size_nb_node_per_ele_vol, size_conn_vol) - elif type_mesh == 'Q8': # cas du maillage en Q8 + elif mesh_type == 'Q8': # cas du maillage en Q8 # dimensionnement des vecteurs pour stocker le maillage [size_nodes, size_nb_node_per_ele_vol, size_conn_vol]=lmgc90.mesh2D_SizeMeshQ8(nb_elem_x, nb_elem_y) @@ -176,16 +176,6 @@ beg_conn = 0 # pour chaque element for i in xrange(0, len(nb_node_per_ele_vol), 1): - # on retrouve le type de l'element en fonction de son nombre de noeuds - if nb_node_per_ele_vol[i] == 3: # cas du T3 - type = 'T3xxx' - elif nb_node_per_ele_vol[i] == 4: # cas du Q4 - type = 'Q4xxx' - elif nb_node_per_ele_vol[i] == 8: # cas du Q8 - type = 'Q8xxx' - else: # cas par defaut - # on stoppe tout - showError('unknown volumic element!') # on recupere la connectivite de l'element, sous la forme d'une liste conn=conn_vol[beg_conn:beg_conn + nb_node_per_ele_vol[i]].tolist() @@ -212,7 +202,7 @@ conn.reverse() # on ajoute l'element au maillage - surfacic_mesh.addBulk( element(type=type, connectivity=conn) ) + surfacic_mesh.addBulk( element(elem_dim=2, connectivity=conn) ) # on met a jour l'indice de debut de lecture beg_conn = beg_conn + nb_node_per_ele_vol[i] @@ -220,7 +210,7 @@ # pour chaque noeud for i in xrange(0, len(nodes)/2, 1): # on ajoute le noeud au maillage - surfacic_mesh.addNode( node(type='NO2xx', coor=nodes[2*i: 2*(i + 1)], + surfacic_mesh.addNode( node( coor=nodes[2*i: 2*(i + 1)], number=i + 1) ) # on definit la tolerance pour la recherche de l'appartenance des noeuds @@ -264,14 +254,14 @@ # pour chaque noeud de l'element for ic in xrange(0, ele.nbNodes, 1): # si l'element est un Q8 - if ele.type == 'Q8xxx' and ic >= ele.nbNodes/2: + if ele.etype == 'Q8xxx' and ic >= ele.nbNodes/2: # on laisse tomber les noeuds aux centres des lignes continue # on recupere le numero du noeud i = ele.connectivity[ic] # et le numero du noeud suivant, dans la table de connectivite de # l'element - if ele.type == 'Q8xxx': # cas particulier du Q8 + if ele.etype == 'Q8xxx': # cas particulier du Q8 # on recupere le noeud sommet suivant j = ele.connectivity[(ic + 1) % (ele.nbNodes/2)] else: # cas general @@ -317,7 +307,7 @@ [xj, yj] = nj.coor # on determine le groupe de l'element # si le maillage est en Q4 - if type_mesh == 'Q4': + if mesh_type == 'Q4': # on utilise les inidces corespondant aux noeuds # on recuepre les indices pour le noeud i @@ -354,18 +344,18 @@ # on construit le nouvel element sur la surface libre : # * cas particulier du Q8 : une ligne a trois noeuds - if ele.type == 'Q8xxx': + if ele.etype == 'Q8xxx': # on recupere le numero nu noeud au centre de l'arete k = ele.connectivity[(ic + (ele.nbNodes/2)) % ele.nbNodes] # ATTENTION: on conserve le sens trigonometrique de la # description de la connectivite des Q8, pour definir la # ligne a trois noeuds - surf = element(type='S3xxx', connectivity=[i, k, j], physicalEntity=pE) + surf = element(elem_dim=1, connectivity=[i, k, j], physicalEntity=pE) # * cas general : une ligne a deux noeuds else: # ATTENTION : la connectivite d'une ligne supportant un # contacteur est definie dans le sens anti-trigonometrique - surf = element(type='S2xxx', connectivity=[j, i], physicalEntity=pE) + surf = element(elem_dim=1, connectivity=[j, i], physicalEntity=pE) # on ajoute l'element au maillage surfacic_mesh.addBulk(surf) @@ -374,7 +364,7 @@ return surfacic_mesh
# fonction qui eclate un objet maille -
[docs]def explodeMeshedAvatar2D(body, nbPoints=2, color='BLEUx', w=None): +
[docs]def explodeMeshedAvatar2D(body, nbPoints=2, color='BLEUx', w=None, color_dict=None): '''bodies=explodeMeshedAvatar2D(body, nbPoints=2, color='BLEUx', w=None): this function "explodes" a given 2D meshed avatar, i.e. gets a meshed avatar and returns a @@ -388,14 +378,15 @@ optional parameters: - nbPoints: number of points on the contactors candidate - - color: color of the contactors + - color: default color of the contactors - w: vector of CLxxx positions + - color_dict: a dictionnary associating a color to the physical entity of the element ''' # on verifie que l'objet est bien un maillage : if not isinstance(body, avatar): showError('this object is not a body!') - if body.type != 'MAILx': + if body.atype != 'MAILx': showError('this body is not a MAILx!') # on verifie sa dimension @@ -404,7 +395,7 @@ # on verifie que l'objet soit maille avec des elements d'ordre 1 for ele in body.bulks: - if ele.type == 'Q8xxx' or ele.type == 'T6xxx': + if ele.etype == 'Q8xxx' or ele.etype == 'T6xxx': showError('this function is designed for linear elements!') # on definit une liste d'avatar, qui va contenir la liste des elements @@ -419,13 +410,16 @@ # qui lui correspond body2eleIndex={} + if not color_dict: + color_dict = {} + # on cree un corps pour chaque element fini bodyIndex=0 # pour chaque element fini for ele in body.bulks: # si l'element n'est pas un element de surface - if not ele.type in dimension2geoElement[2]: + if not ele.etype in dimension2geoElement[2]: # on saute l'element continue @@ -438,13 +432,13 @@ bodyIndex += 1 # on cree un nouveau corps maille 2D - new_body = avatar(type='MAILx', dimension=2) - # on ajoute au nouveau corps un nouvel element fini, du meme type que + new_body = avatar(dimension=2) + # on ajoute au nouveau corps un nouvel element fini, du meme type que # l'element courant mais dont la connectivite est triviale # N.B.: on conserve la physical entity, i.e. le groupe de l'element - new_body.addBulk( element(type=ele.type, - connectivity=range(1, ele.nbNodes + 1, 1), - physicalEntity=ele.physicalEntity) ) + new_body.addBulk( element(elem_dim=geoElement2dimension[ele.etype], + connectivity=range(1, ele.nbNodes + 1, 1), + physicalEntity=ele.physicalEntity) ) # on ajoute au corps les seuls noeuds dont il a besoin @@ -458,7 +452,7 @@ n = body.nodes[i] # on peut alors construire le nouveau noeud, connaissant ses # coordonnees - new_body.addNode( node(type='NO2xx', coor=n.coor, number=nbNodes) ) + new_body.addNode( node( coor=n.coor, number=nbNodes) ) # on ajoute le corps genere au container bodies += new_body @@ -474,7 +468,7 @@ # pour chaque element du maillage for ele in body.bulks: # si l'element n'est pas un element de surface - if not ele.type in dimension2geoElement[2]: + if not ele.etype in dimension2geoElement[2]: # on saute l'element continue # pour chaque noeud de l'element @@ -492,7 +486,7 @@ for ele in body.bulks: # si l'element n'est pas un element de surface - if not ele.type in dimension2geoElement[2]: + if not ele.etype in dimension2geoElement[2]: # on saute l'element continue @@ -544,9 +538,14 @@ # a deux noeuds # ATTENTION : la connectivite d'une ligne supportant un contacteur # est definie dans le sens anti-trigonometrique - surf = element(type='S2xxx', connectivity=[(ic + 1) % ele.nbNodes + 1, ic + 1]) + surf = element(elem_dim=1, connectivity=[(ic + 1) % ele.nbNodes + 1, ic + 1]) # on positionne un contacteur sur l'element courant, en fonction # de son numero + try: + col = color_dict[ele.physicalEntity] + except KeyError: + col = color + if ele.number > found_ele.number: # si son numero est plus grand que celui de l'element adjacent # il porte des noeuds candidats @@ -565,8 +564,7 @@ # on calcule le poids associe au point courant weights[i]=(0.5 + i)/nbPoints # on cree un contacteur candidat - cd = contactorFactory(elements=[surf], type='CLxxx', color=color, - weights=weights) + cd = contactorFactory(elements=[surf], shape='CLxxx', color=col, weights=weights) # on l'ajoute au nouveau corps corespondant a l'element # courant # N.B.: on utilise ici une methode privee de la classe avatar @@ -578,7 +576,7 @@ # sinon, il porte une ligne antagoniste # on cree un contacteur antagoniste - an = contactorFactory(elements=[surf], type='ALpxx', color=color) + an = contactorFactory(elements=[surf], shape='ALpxx', color=col) # on l'ajoute au nouveau corps corespondant a l'element # courant # N.B.: on utilise ici une methode privee de la classe avatar @@ -597,7 +595,7 @@ # pour chaque element for ele_surf in body.bulks: # si l'element n'est pas une ligne - if ele_surf.type != 'S2xxx': + if ele_surf.etype != 'S2xxx': # on passe au suivant continue # si la connectivite correspond @@ -612,9 +610,9 @@ # on cree l'element ligne a ajouter au corps # ATTENTION : la connectivite d'une ligne supportant un # contacteur est definie dans le sens anti-trigonometrique - surf = element(type='S2xxx', - connectivity=[(ic + 1) % ele.nbNodes + 1, ic + 1], - physicalEntity=found_line.physicalEntity) + surf = element(elem_dim=1, + connectivity=[(ic + 1) % ele.nbNodes + 1, ic + 1], + physicalEntity=found_line.physicalEntity) # on l'ajoute au nouveau corps new_body.addBulk(surf) @@ -636,7 +634,7 @@ return bodies
# fonction qui prend un maillage 2D et l'eclate en rigides (polygones) -
[docs]def rigidsFromMesh2D(surfacic_mesh, model, material, color='BLEUx', reverse=False, shrink=0.): +
[docs]def rigidsFromMesh2D(surfacic_mesh, model, material, color='BLEUx', reverse=False, shrink=0.): """rigidsFromMesh2D(surfacic_mesh, model, material, color='BLEUx', reverse=False, shrink=0.): this function build a set of rigids from a 2D mesh, each rigid @@ -670,16 +668,16 @@ # pour chaque element du maillage for bulk in surfacic_mesh.bulks: # si l'element n'est pas un triangle a 3 noeuds ou un quadrangle a quatre noeuds - if bulk.type != 'T3xxx' and bulk.type != 'Q4xxx': + if bulk.etype != 'T3xxx' and bulk.etype != 'Q4xxx': # on passe au suivant continue # on cree un avatar pour le nouveau rigide - body=avatar(type='RBDY2', dimension=2) + body=avatar(dimension=2) # on cree un comportement volumique de type rigide body.addBulk( rigid2d() ) # on place le centre d'inertie a l'origine (recalcul de la position par la suite) - body.addNode( node(type='NO2xx', coor=numpy.zeros(2), number=1) ) + body.addNode( node( coor=numpy.zeros(2), number=1) ) # on definit les groupes sur le corps body.defineGroups() # on affecte son modele au corps @@ -724,7 +722,7 @@ # on inverse la liste des coordonnees des noeuds de l'element l_coor.reverse() # on ajoute son contacteur polygone au corps - body.addContactors(type='POLYG', color=color, nb_vertices=len(l_coor), vertices=numpy.array(l_coor)) + body.addContactors(shape='POLYG', color=color, nb_vertices=len(l_coor), vertices=numpy.array(l_coor)) # on calcule de la surface et de l'inertie du corps body.computeRigidProperties() @@ -736,7 +734,7 @@ return bodies
# fonction qui prend un maillage 2D et cree un corps rigide comme un cluster de polygones (chaque maille devenant un contacteur) -
[docs]def rigidFromMesh2D(surfacic_mesh, model, material, color='BLEUx', reverse=False): +
[docs]def rigidFromMesh2D(surfacic_mesh, model, material, color='BLEUx', reverse=False): """rigidFromMesh2D(surfacic_mesh, model, material, color='BLEUx', reverse=False): this function build a rigid from a 2D mesh, each contactor @@ -764,11 +762,11 @@ showError("the given mesh is not a surfacic mesh") # on cree un avatar pour le nouveau rigide - body=avatar(type='RBDY2', dimension=2) + body=avatar(dimension=2) # on cree un comportement volumique de type rigide body.addBulk( rigid2d() ) # on place le centre d'inertie a l'origine (recalcul de la position par la suite) - body.addNode( node(type='NO2xx', coor=numpy.zeros(2), number=1) ) + body.addNode( node( coor=numpy.zeros(2), number=1) ) # on definit les groupes sur le corps body.defineGroups() # on affecte son modele au corps @@ -779,7 +777,7 @@ # pour chaque element du maillage for bulk in surfacic_mesh.bulks: # si l'element n'est pas un triangle a 3 noeuds ou un quadrangle a quatre noeuds - if bulk.type != 'T3xxx' and bulk.type != 'Q4xxx': + if bulk.etype != 'T3xxx' and bulk.etype != 'Q4xxx': # on passe au suivant continue @@ -796,7 +794,7 @@ # on inverse la liste des coordonnees des noeuds de l'element l_coor.reverse() # on ajoute son contacteur polygone au corps - body.addContactors(type='POLYG', color=color, nb_vertices=len(l_coor), vertices=numpy.array(l_coor)) + body.addContactors(shape='POLYG', color=color, nb_vertices=len(l_coor), vertices=numpy.array(l_coor)) # on calcule de la surface et de l'inertie du corps body.computeRigidProperties() @@ -865,9 +863,9 @@ # pour chaque element for bulk in given_mesh.bulks: # si l'element est un element surfacique - if bulk.type in dimension2geoElement[2]: + if bulk.etype in dimension2geoElement[2]: # si l'element est un triangle - if bulk.type == 'T3xxx': # ca pourrait etre T6xxx aussi ... + if bulk.etype == 'T3xxx': # ca pourrait etre T6xxx aussi ... # on suppose que tous les bords sont sur le contour is_free_face[bulk.number]=[True, True, True] @@ -889,7 +887,7 @@ continue # si l'element courant n'est pas un element surfacique - if not adj_bulk.type in dimension2geoElement[2]: + if not adj_bulk.etype in dimension2geoElement[2]: # on passe au suivant continue @@ -915,7 +913,7 @@ # on passe au suivant continue # si l'element courant n'est pas un element surfacique - if not adj_bulk.type in dimension2geoElement[2]: + if not adj_bulk.etype in dimension2geoElement[2]: # on passe au suivant continue @@ -926,7 +924,7 @@ # on incremente le nombre de bords de l'ele qui n'appartiennent pas au contour nb_non_free_faces[bulk.number] += 1 - elif bulk.type == 'Q4xxx': + elif bulk.etype == 'Q4xxx': # on suppose que tous les bords sont sur le contour is_free_face[bulk.number]=[True]*4 @@ -944,7 +942,7 @@ continue # si l'element courant n'est pas un element surfacique - if not adj_bulk.type in dimension2geoElement[2] : + if not adj_bulk.etype in dimension2geoElement[2] : continue # si le bord 0 {i1, i2} fait partie de l'adjacent @@ -969,7 +967,7 @@ continue # si l'element courant n'est pas un tetraedre - if not adj_bulk.type in dimension2geoElement[2]: + if not adj_bulk.etype in dimension2geoElement[2]: # on passe au suivant continue @@ -991,7 +989,7 @@ else: ## on quitte le pgm msg = "no contour can be built from this mesh, since it involves unhandled elements!" - msg += bulk.type + ' is not supported' + msg += bulk.etype + ' is not supported' showError(msg) # ici, on est sur que tous les elements du maillage sont pris en charge @@ -1006,16 +1004,16 @@ # pour chaque element for bulk in given_mesh.bulks: # si element surfacique - if bulk.type in dimension2geoElement[2]: + if bulk.etype in dimension2geoElement[2]: ###print nb_non_free_faces[bulk.number] # si l'element est un tetraedre - if bulk.type == 'T3xxx': + if bulk.etype == 'T3xxx': nbn=3 # 0->2 # si aucun bord libre if nb_non_free_faces[bulk.number] == 3: # on passe a l'element suivant continue - elif bulk.type == 'Q4xxx': + elif bulk.etype == 'Q4xxx': nbn=4 # 0->3 # si aucun bord libre if nb_non_free_faces[bulk.number] == 4: @@ -1029,11 +1027,11 @@ for i in xrange(0, len(is_free_face[bulk.number])): # si la face courante est libre if is_free_face[bulk.number][i]: - ###print bulk.number,bulk.type,nbn,' bord ',i,(i+1)%nbn + ###print bulk.number,bulk.etype,nbn,' bord ',i,(i+1)%nbn # on recupere la connectivite de la face bord=[ bulk.connectivity[i] , bulk.connectivity[(i+1)%nbn]] # on ajoute le bord au contour - contour.addBulk( element(type='S2xxx', connectivity=bord) ) + contour.addBulk( element(elem_dim=1, connectivity=bord) ) # recuperation des noeuds du contour @@ -1064,8 +1062,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh3D.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh3D.html similarity index 90% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh3D.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh3D.html index e0ef280..0626032 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/mesh3D.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/mesh3D.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.mesh3D — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.mesh3D — pylmgc90.pre 2015.2 documentation @@ -46,22 +46,22 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.mesh3D

+  

Source code for pylmgc90.pre.build_avatar.mesh3D

 # module qui fournit des macros pour construire et/ou manipuler des maillages 3D
 
 import sys
 import numpy
 import math
 import copy
-from pylmgc90.pre_lmgc.avatar.avatar import *
-from pylmgc90.pre_lmgc.avatar.bulk.element import *
-from pylmgc90.pre_lmgc.avatar.bulk.rigid3d import *
-from pylmgc90.pre_lmgc.avatar.contactor.rigid_properties_3D import computeVolumeInertiaMesh
+from pylmgc90.pre.avatar.avatar import *
+from pylmgc90.pre.avatar.bulk.element import *
+from pylmgc90.pre.avatar.bulk.rigid3d import *
+from pylmgc90.pre.avatar.contactor.rigid_properties_3D import computeVolumeInertiaMesh
 from mesh import *
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
 # import du module permettant de savoir si on pourra importer les pre_tools
-from pylmgc90.pre_lmgc.utilities.check_compiled_modules import *
+from pylmgc90.pre.utilities.check_compiled_modules import *
 
 
 # si on peut essayer d'importer le module pre_tools sans tout faire planter
@@ -98,7 +98,7 @@
 
 # fonction qui extrait la surface libre d'un maillage 3D volumique, sous la forme d'un maillage 3D surfacique
 # N.B.: les numeros des noeuds du maillage surfacique ne sont pas renumerotes
-
[docs]def extractFreeSurface(volumic_mesh): +
[docs]def extractFreeSurface(volumic_mesh): """extractFreeSurface(volumic_mesh): this function computes and returns the free surface of a volumic mesh, as a @@ -155,9 +155,9 @@ # pour chaque element for bulk in volumic_mesh.bulks: # si l'element est un element volumique - if bulk.type in dimension2geoElement[3]: + if bulk.etype in dimension2geoElement[3]: # si l'element est un tetraedre - if bulk.type == 'TE4xx': + if bulk.etype == 'TE4xx': # on suppose que les quatre faces du tetraedre sont sur la surface libre is_free_face[bulk.number]=[True, True, True, True] # on recupere les numeros des noeuds du tetraedre @@ -175,7 +175,7 @@ # on passe au suivant continue # si l'element courant n'est pas un tetraedre - if adj_bulk.type != 'TE4xx': + if adj_bulk.etype != 'TE4xx': # on passe au suivant continue @@ -207,7 +207,7 @@ # on passe au suivant continue # si l'element courant n'est pas un tetraedre - if adj_bulk.type != 'TE4xx': + if adj_bulk.etype != 'TE4xx': # on passe au suivant continue # si la face {i4, i2, i3} fait partie du tetraedre adjacent courant @@ -217,7 +217,7 @@ # on incremente le nombre de faces du tetraedre courant qui n'appartiennent pas a la surface libre nb_non_free_faces[bulk.number] += 1 - elif bulk.type == 'PRI6x': + elif bulk.etype == 'PRI6x': # on suppose que les faces sont sur la surface libre (ce commentaire est reellement debile) # par contre on ne test qu'avec d'autres pri6 !! @@ -245,7 +245,7 @@ continue # on ne test qu'avec des PRI6 ... a modifier. - if adj_bulk.type != 'PRI6x': + if adj_bulk.etype != 'PRI6x': continue # si la face {i1, i2, i5, i4} fait partie de l'adjacent if i2 in adj_bulk.connectivity and i5 in adj_bulk.connectivity and i4 in adj_bulk.connectivity: @@ -273,7 +273,7 @@ # on passe au suivant continue # si l'element courant n'est pas un tetraedre - if adj_bulk.type != 'PRI6x': + if adj_bulk.etype != 'PRI6x': # on passe au suivant continue # si la face {i4, i5, i6} fait partie de l'adjacent @@ -293,7 +293,7 @@ else: ## on quitte le pgm msg = "no rigid can be built from this mesh, since it involves unhandled elements!" - msg += bulk.type + ' is not supported' + msg += bulk.etype + ' is not supported' showError(msg) # ici, on est sur que tous les elements volumiques du maillage sont pris en charge @@ -311,9 +311,9 @@ # pour chaque element for bulk in volumic_mesh.bulks: # si l'element est un element volumique - if bulk.type in dimension2geoElement[3]: + if bulk.etype in dimension2geoElement[3]: # si l'element est un tetraedre - if bulk.type == 'TE4xx': + if bulk.etype == 'TE4xx': # si aucune face du tetraedre appartient a la surface libre if nb_non_free_faces[bulk.number] == 4: # on passe a l'element suivant @@ -327,8 +327,8 @@ bulk.connectivity[faces_tetra[i][1]], bulk.connectivity[faces_tetra[i][2]] ] # on ajoute la face a la liste des faces de la surface libre - free_surface.addBulk( element(type='T3xxx', connectivity=conn_free_face) ) - elif bulk.type == 'PRI6x': + free_surface.addBulk( element(elem_dim=2, connectivity=conn_free_face) ) + elif bulk.etype == 'PRI6x': # si aucune face du tetraedre appartient a la surface libre if nb_non_free_faces[bulk.number] == 6: # on passe a l'element suivant @@ -343,7 +343,7 @@ bulk.connectivity[faces_pri[i][1]], bulk.connectivity[faces_pri[i][2]] ] # on ajoute la face a la liste des faces de la surface libre - free_surface.addBulk( element(type='T3xxx', connectivity=conn_free_face) ) + free_surface.addBulk( element(elem_dim=2, connectivity=conn_free_face) ) else: #print i @@ -355,7 +355,7 @@ bulk.connectivity[faces_pri[i][2]], bulk.connectivity[faces_pri[i][3]] ] # on ajoute la face a la liste des faces de la surface libre - free_surface.addBulk( element(type='Q4xxx', connectivity=conn_free_face) ) + free_surface.addBulk( element(elem_dim=2, connectivity=conn_free_face) ) # recuperation des noeuds de la surface libre @@ -376,7 +376,7 @@ return free_surface
# fonction qui reoriente les elements surfacique d'un maillage 3D, en se servant de l'orientation des elements volumiques -
[docs]def reorientSurfacicElements(volumic_mesh): +
[docs]def reorientSurfacicElements(volumic_mesh): """reorientSurfacicElements(volumic_mesh): this function reorient surfacic elements of a 3D mesh, using orientation of volumic elements @@ -422,7 +422,7 @@ # pour chaque element du maillage for bulk in volumic_mesh.bulks: # si l'element est un element surfacique - if bulk.type in dimension2geoElement[2]: + if bulk.etype in dimension2geoElement[2]: # on recupere la connectivite de l'element courant connectivity=bulk.connectivity @@ -456,7 +456,7 @@ # fonction qui construit un corps rigide a partir d'un maillage 3D, decrit comme un ensemble de noeuds et # un ensemble d'elements -
[docs]def volumicMeshToRigid3D(volumic_mesh, model, material, color='BLEUx'): +
[docs]def volumicMeshToRigid3D(volumic_mesh, model, material, color='BLEUx'): """volumicMeshToRigid3D(volumic_mesh, model, material, color='BLEUx'): this function builds a rigid body from a volumic mesh, by extracting the skin mesh and compute mass and inertia @@ -494,7 +494,7 @@ # pour chaque element for ele in volumic_mesh.bulks: # si l'element est un element volumique - if ele.type in dimension2geoElement[3]: + if ele.etype in dimension2geoElement[3]: # on incremente le nombre d'elements volumiques nb_volumic_bulks += 1 @@ -508,10 +508,10 @@ # # on declare le nouvel avatar - body=avatar(type='RBDY3', dimension=3) + body=avatar(dimension=3) # on positionne le centre d'inertie du rigide a l'origine, pour pouvoir # donner les coordonnees des sommets du polyedre dans le repere global - body.addNode( node(type='NO3xx', coor=numpy.zeros(3), number=1) ) + body.addNode( node( coor=numpy.zeros(3), number=1) ) # on cree un comportement volumique pour le corps body.addBulk( rigid3d() ) # on definit les groupes pour l'avatar @@ -546,7 +546,7 @@ volume, I, OG=computeVolumeInertiaMesh(volumic_mesh) # on ajoute son contacteur polyedre a l'avatar - body.addContactors(type='POLYR', color=color, volume=volume, I=I, shift=OG, + body.addContactors(shape='POLYR', color=color, volume=volume, I=I, shift=OG, nb_vertices=len(l_free_coor), nb_faces=len(l_free_conn), vertices=numpy.array(l_free_coor), connectivity=numpy.array(l_free_conn)) @@ -595,15 +595,15 @@ # pour chaque element for i, ele in enumerate(surfacic_mesh.bulks): # si l'element est un element volumique - if ele.type in dimension2geoElement[3]: + if ele.etype in dimension2geoElement[3]: # on affiche un message d'erreur showError("the given mesh is not a surfacic mesh") # sinon, si l'element est un point ou une ligne - if not ele.type in dimension2geoElement[2]: + if not ele.etype in dimension2geoElement[2]: # on passe au suivant continue # si l'element courant est un element surfacique, mais n'est pas un triangle a trois noeuds - if ele.type != 'T3xxx': + if ele.etype != 'T3xxx': # on affiche un message d'erreur showError("the given surfacic mesh contains unhandled elements!") # sinon, @@ -649,7 +649,7 @@ # pour chaque element for ele in surfacic_mesh.bulks: # si l'element courant est un triangle - if ele.type == 'T3xxx': + if ele.etype == 'T3xxx': # on stocke sa connectivite connec[3*i:3*(i + 1)]=ele.connectivity # on incremente l'indice de l'element triangle courant @@ -665,7 +665,7 @@ # fonction qui construit un corps rigide a partir d'un maillage de surface 3D, decrit comme un ensemble de noeuds et # un ensemble d'elements -
[docs]def surfacicMeshToRigid3D(surfacic_mesh, model, material, color='BLEUx'): +
[docs]def surfacicMeshToRigid3D(surfacic_mesh, model, material, color='BLEUx'): """surfacicMeshToRigid3D(surfacic_mesh, model, material, color='BLEUx'): this function builds a rigid body from a surfacic mesh, by computing mass and inertia @@ -703,15 +703,15 @@ # pour chaque element for ele in surfacic_mesh.bulks: # si l'element est un element volumique - if ele.type in dimension2geoElement[3]: + if ele.etype in dimension2geoElement[3]: # on affiche un message d'erreur showError("the given mesh is not a surfacic mesh") # sinon, si l'element est un point ou une ligne - if not ele.type in dimension2geoElement[2]: + if not ele.etype in dimension2geoElement[2]: # on passe au suivant continue # si l'element courant est un element surfacique, mais n'est pas un triangle a trois noeuds - if ele.type != 'T3xxx': + if ele.etype != 'T3xxx': # on affiche un message d'erreur showError("the given surfacic mesh contains unhandled elements!") # sinon, @@ -732,10 +732,10 @@ # # on declare le nouvel avatar - body=avatar(type='RBDY3', dimension=3) + body=avatar(dimension=3) # on positionne le centre d'inertie du rigide a l'origine, pour pouvoir # donner les coordonnees des sommets du polyedre dans le repere global - body.addNode( node(type='NO3xx', coor=numpy.zeros(3), number=1) ) + body.addNode( node( coor=numpy.zeros(3), number=1) ) # on cree un comportement volumique pour le corps body.addBulk( rigid3d() ) # on definit les groupes pour l'avatar @@ -771,7 +771,7 @@ # pour chaque element for ele in surfacic_mesh.bulks: # si l'element courant est un triangle - if ele.type == 'T3xxx': + if ele.etype == 'T3xxx': # on stocke sa connectivite connec[3*i:3*(i + 1)]=ele.connectivity # on incremente l'indice de l'element triangle courant @@ -789,7 +789,7 @@ connec=connec.T.reshape([nb_bulks_T3, 3]) # on ajoute son contacteur polyedre a l'avatar - body.addContactors(type='POLYR', color=color, volume=volume, I=I, shift=OG, + body.addContactors(shape='POLYR', color=color, volume=volume, I=I, shift=OG, nb_vertices=nb_nodes, nb_faces=nb_bulks_T3, vertices=coor, connectivity=connec) # calcul du volume et de l'inertie du corps (a partir du volume et de l'inertie @@ -801,7 +801,7 @@ # fonction qui construit un corps rigide a partir d'un ensemble de surface 3D, # decrit comme un ensemble de noeuds et un ensemble d'elements -
[docs]def surfacicMeshesToRigid3D(surfacic_meshes, model, material, color='BLEUx',reverse='no'): +
[docs]def surfacicMeshesToRigid3D(surfacic_meshes, model, material, color='BLEUx',reverse='no'): """surfacicMeshesToRigid3D(surfacic_meshes, model, material, color='BLEUx'): this function builds a rigid body from a list of surfacic mesh, by computing mass and inertia @@ -823,10 +823,10 @@ """ # on declare le nouvel avatar - body=avatar(type='RBDY3', dimension=3) + body=avatar(dimension=3) # on positionne le centre d'inertie du rigide a l'origine, pour pouvoir # donner les coordonnees des sommets du polyedre dans le repere global - body.addNode( node(type='NO3xx', coor=numpy.zeros(3), number=1) ) + body.addNode( node( coor=numpy.zeros(3), number=1) ) # on cree un comportement volumique pour le corps body.addBulk( rigid3d() ) # on definit les groupes pour l'avatar @@ -866,15 +866,15 @@ # pour chaque element for ele in surfacic_mesh.bulks: # si l'element est un element volumique - if ele.type in dimension2geoElement[3]: + if ele.etype in dimension2geoElement[3]: # on affiche un message d'erreur showError("the given mesh is not a surfacic mesh") # sinon, si l'element est un point ou une ligne - if not ele.type in dimension2geoElement[2]: + if not ele.etype in dimension2geoElement[2]: # on passe au suivant continue # si l'element courant est un element surfacique, mais n'est pas un triangle a trois noeuds - if ele.type != 'T3xxx': + if ele.etype != 'T3xxx': # on affiche un message d'erreur showError("the given surfacic mesh contains unhandled elements!") # sinon, @@ -919,7 +919,7 @@ # pour chaque element for ele in surfacic_mesh.bulks: # si l'element courant est un triangle - if ele.type == 'T3xxx': + if ele.etype == 'T3xxx': #print 'ajout de l element ',nb_elements+i,' : ', [x+nb_nodes for x in ele.connectivity] # on stocke sa connectivite connec[3*(nb_elements+i):3*(nb_elements+i+1)]=ele.connectivity @@ -942,7 +942,7 @@ #print I # on ajoute son contacteur polyedre a l'avatar - body.addContactors(type='POLYF', color=color, volume=volume, I=I, shift=OG, + body.addContactors(shape='POLYF', color=color, volume=volume, I=I, shift=OG, nb_patch=len(surfacic_meshes), patch=surfacic_meshes) # calcul du volume et de l'inertie du corps (a partir du volume et de l'inertie @@ -953,7 +953,7 @@ return body
# fonction qui consrtuit le maillage en hexaedres d'un paralepipede rectangle -
[docs]def buildMeshH8(x0, y0, z0, lx, ly, lz, nb_elem_x, nb_elem_y, nb_elem_z, surfacic_mesh_type='Q4'): +
[docs]def buildMeshH8(x0, y0, z0, lx, ly, lz, nb_elem_x, nb_elem_y, nb_elem_z, surfacic_mesh_type='Q4'): """buildMeshH8(x0, y0, z0, lx, ly, lz, nb_elem_x, nb_elem_y, nb_elem_z): this function meshes a given box, and returns the generated mesh @@ -1010,7 +1010,7 @@ # on calcule les coordonnees du noeud courant coor = numpy.array([x0 + i*delta_x, y0 + j*delta_y, z0 + k*delta_z]) # on ajoute le noeud courant au maillage - volumic_mesh.addNode( node(type='NO3xx', coor=coor, number=num) ) + volumic_mesh.addNode( node( coor=coor, number=num) ) # calcul des connectivites des elements volumiques @@ -1024,7 +1024,7 @@ connectivity=[index(i, j, k), index(i + 1, j, k), index(i + 1, j + 1, k), index(i, j + 1, k), index(i, j, k + 1), index(i + 1, j, k + 1), index(i + 1, j + 1, k + 1), index(i, j + 1, k + 1)] # on ajoute l'element courant au maillage - volumic_mesh.addBulk( element(type='H8xxx', connectivity=connectivity) ) + volumic_mesh.addBulk( element(elem_dim=3, connectivity=connectivity) ) # calcul des connectivites des elements surfaciques @@ -1037,7 +1037,7 @@ # on construit la connectivite de l'element courant connectivity=[index(i, j, k), index(i, j + 1, k), index(i + 1, j + 1, k), index(i + 1, j, k)] # on ajoute l'element courant au maillage - volumic_mesh.addBulk( element(type='Q4xxx', connectivity=connectivity, physicalEntity='down') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='down') ) # * face du dessus (i.e. z=z0 + lz) k = nb_elem_z - 1 @@ -1048,7 +1048,7 @@ # on construit la connectivite de l'element courant connectivity=[index(i, j, k + 1), index(i + 1, j, k + 1), index(i + 1, j + 1, k + 1), index(i, j + 1, k + 1)] # on ajoute l'element courant au maillage - volumic_mesh.addBulk( element(type='Q4xxx', connectivity=connectivity, physicalEntity='up') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='up') ) # * face de gauche (i.e. y=y0) j = 0 @@ -1059,7 +1059,7 @@ # on construit la connectivite de l'element courant connectivity=[index(i, j, k), index(i + 1, j, k), index(i + 1, j, k + 1), index(i, j, k + 1)] # on ajoute l'element courant au maillage - volumic_mesh.addBulk( element(type='Q4xxx', connectivity=connectivity, physicalEntity='left') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='left') ) # * face de droite (i.e. y=y0 + ly) j = nb_elem_y - 1 @@ -1070,7 +1070,7 @@ # on construit la connectivite de l'element courant connectivity=[index(i + 1, j + 1, k), index(i, j + 1, k), index(i, j + 1, k + 1), index(i + 1, j + 1, k + 1)] # on ajoute l'element courant au maillage - volumic_mesh.addBulk( element(type='Q4xxx', connectivity=connectivity, physicalEntity='right') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='right') ) # * face de derriere (i.e. x=x0) i = 0 @@ -1081,7 +1081,7 @@ # on construit la connectivite de l'element courant connectivity=[index(i, j, k), index(i, j, k + 1), index(i, j + 1, k + 1), index(i, j + 1, k)] # on ajoute l'element courant au maillage - volumic_mesh.addBulk( element(type='Q4xxx', connectivity=connectivity, physicalEntity='rear') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='rear') ) # * face de devant (i.e. x=x0 + lx) i = nb_elem_x - 1 @@ -1092,7 +1092,7 @@ # on construit la connectivite de l'element courant connectivity=[index(i + 1, j, k), index(i + 1, j + 1, k), index(i + 1, j + 1, k + 1), index(i + 1, j, k + 1)] # on ajoute l'element courant au maillage - volumic_mesh.addBulk( element(type='Q4xxx', connectivity=connectivity, physicalEntity='front') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='front') ) # si l'utilisateur a demande autre chose que le maillage surfacique en Q4 classique if surfacic_mesh_type != "Q4": @@ -1103,7 +1103,7 @@ # on recupere l'element courant ele=volumic_mesh.bulks[i_ele] # si l'element n'est pas un Q4 - if ele.type != 'Q4xxx': + if ele.etype != 'Q4xxx': # on passe au suivant continue @@ -1118,12 +1118,12 @@ # on construit la connectivite du premier element connectivity_1=[connectivity_Q4[0], connectivity_Q4[1], connectivity_Q4[3]] # on cree le premier element - ele_T3_1=element(type='T3xxx', connectivity=connectivity_1, physicalEntity=physicalEntity_Q4) + ele_T3_1=element(elem_dim=2, connectivity=connectivity_1, physicalEntity=physicalEntity_Q4) # * deuxieme element : # on construit la connectivite du deuxieme element connectivity_2=[connectivity_Q4[2], connectivity_Q4[3], connectivity_Q4[1]] # on cree le deuxieme element - ele_T3_2=element(type='T3xxx', connectivity=connectivity_2, physicalEntity=physicalEntity_Q4) + ele_T3_2=element(elem_dim=2, connectivity=connectivity_2, physicalEntity=physicalEntity_Q4) # on remplace l'element courant par le premier T3 ele_T3_1.number=i_ele @@ -1203,7 +1203,7 @@ # on calcule les coordonnees du noeud courant coor = numpy.array([x0 + i*ddx, y0 + j*ddy, z0 + k*ddz]) # on ajoute le noeud courant au maillage - volumic_mesh.addNode( node(type='NO3xx', coor=coor, number=num) ) + volumic_mesh.addNode( node( coor=coor, number=num) ) # calcul des connectivites des elements volumiques @@ -1221,7 +1221,7 @@ index(i, j, k ,0,0,1), index(i+1, j, k ,0,0,1), index(i+1, j+1, k ,0,0,1), index(i, j+1, k ,0,0,1) ] # on ajoute l'element courant au maillage - volumic_mesh.addBulk( element(type='H20xx', connectivity=connectivity) ) + volumic_mesh.addBulk( element(elem_dim=3, connectivity=connectivity) ) # copy past from above... @@ -1232,7 +1232,7 @@ for i in range(0, nb_elem_x): connectivity=[index(i,j,k), index(i,j+1,k), index(i+1,j+1,k), index(i+1,j,k), index(i,j,k,0,1,0), index(i,j+1,k,1,0,0), index(i+1,j,k,0,1,0), index(i,j,k,1,0,0)] - volumic_mesh.addBulk( element(type='Q8xxx', connectivity=connectivity, physicalEntity='down') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='down') ) # up (i.e. z=z0 + lz) k = nb_elem_z - 1 @@ -1240,7 +1240,7 @@ for i in range(0, nb_elem_x): connectivity=[index(i,j,k+1), index(i+1,j,k+1), index(i+1,j+1,k+1), index(i,j+1,k+1), index(i,j,k+1,1,0,0), index(i+1,j,k+1,0,1,0), index(i,j+1,k+1,1,0,0), index(i,j,k+1,0,1,0)] - volumic_mesh.addBulk( element(type='Q8xxx', connectivity=connectivity, physicalEntity='up') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='up') ) # left (i.e. y=y0) j = 0 @@ -1248,7 +1248,7 @@ for i in range(0, nb_elem_x): connectivity=[index(i,j,k), index(i+1,j,k), index(i+1,j,k+1), index(i,j,k+1), index(i,j,k,1,0,0), index(i+1,j,k,0,0,1), index(i,j,k+1,1,0,0), index(i,j,k,0,0,1)] - volumic_mesh.addBulk( element(type='Q8xxx', connectivity=connectivity, physicalEntity='left') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='left') ) # right (i.e. y=y0 + ly) j = nb_elem_y - 1 @@ -1256,7 +1256,7 @@ for i in range(0, nb_elem_x): connectivity=[index(i+1,j+1,k), index(i,j+1,k), index(i,j+1,k+1), index(i+1,j+1,k+1), index(i,j+1,k,1,0,0), index(i,j+1,k,0,0,1), index(i,j+1,k+1,1,0,0), index(i+1,j+1,k,0,0,1)] - volumic_mesh.addBulk( element(type='Q8xxx', connectivity=connectivity, physicalEntity='right') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='right') ) # rear (i.e. x=x0) i = 0 @@ -1264,7 +1264,7 @@ for j in range(0, nb_elem_y): connectivity=[index(i,j,k), index(i,j,k + 1), index(i,j+1,k+1), index(i,j+1,k), index(i,j,k,0,0,1), index(i,j,k+1,0,1,0), index(i,j+1,k,0,0,1), index(i,j,k,0,1,0)] - volumic_mesh.addBulk( element(type='Q8xxx', connectivity=connectivity, physicalEntity='rear') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='rear') ) # front (i.e. x=x0 + lx) i = nb_elem_x - 1 @@ -1272,7 +1272,7 @@ for j in range(0, nb_elem_y): connectivity=[index(i+1,j,k), index(i+1,j+1,k), index(i+1,j+1,k+1), index(i+1,j,k+1), index(i+1,j,k,0,1,0), index(i+1,j+1,k,0,0,1), index(i+1,j,k+1,0,1,0), index(i+1,j,k,0,0,1)] - volumic_mesh.addBulk( element(type='Q8xxx', connectivity=connectivity, physicalEntity='front') ) + volumic_mesh.addBulk( element(elem_dim=2, connectivity=connectivity, physicalEntity='front') ) return volumic_mesh ##new_mesh = mesh(3) @@ -1284,11 +1284,11 @@ ## # new intermediate nodes ## for n in m2.nodes[::2]: ## new_coor = np.array([n.coor[0],n.coor[1],z0+nb_z*lz/(2*nb_elem_z)]) - ## new_mesh.addNode(node(type='NO3xx',coor=new_coor,number=l*nb_nodes+n.number)) + ## new_mesh.addNode(node(coor=new_coor,number=l*nb_nodes+n.number)) ## # new layer ## for n in m2.nodes: ## new_coor = np.array([n.coor[0],n.coor[1],z0+nb_z*lz/nb_elem_z]) - ## new_mesh.addNode(node(type='NO3xx',coor=new_coor,number=l*nb_nodes+n.number)) + ## new_mesh.addNode(node(coor=new_coor,number=l*nb_nodes+n.number))
@@ -1299,8 +1299,8 @@ \ No newline at end of file diff --git a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/particles.html b/docs/Pre/_modules/pylmgc90/pre/build_avatar/particles.html similarity index 61% rename from docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/particles.html rename to docs/Pre/_modules/pylmgc90/pre/build_avatar/particles.html index 6b1b48b..9c6857b 100644 --- a/docs/Pre/_modules/pylmgc90/pre_lmgc/build_avatar/particles.html +++ b/docs/Pre/_modules/pylmgc90/pre/build_avatar/particles.html @@ -6,7 +6,7 @@ - pylmgc90.pre_lmgc.build_avatar.particles — pylmgc90.pre 2015.2 documentation + pylmgc90.pre.build_avatar.particles — pylmgc90.pre 2015.2 documentation @@ -46,21 +46,21 @@
-

Source code for pylmgc90.pre_lmgc.build_avatar.particles

+  

Source code for pylmgc90.pre.build_avatar.particles

 # module qui fournit des macros pour construire des particules
 
 import copy
 import random
 import numpy
 import math
-from pylmgc90.pre_lmgc.avatar.avatar import *
-from pylmgc90.pre_lmgc.avatar.bulk.rigid2d import *
-from pylmgc90.pre_lmgc.avatar.bulk.rigid3d import *
-from pylmgc90.pre_lmgc.avatar.bulk.element import *
+from pylmgc90.pre.avatar.avatar import *
+from pylmgc90.pre.avatar.bulk.rigid2d import *
+from pylmgc90.pre.avatar.bulk.rigid3d import *
+from pylmgc90.pre.avatar.bulk.element import *
 from mesh import *
-from pylmgc90.pre_lmgc.utilities.error    import *
+from pylmgc90.pre.utilities.error    import *
 
-
[docs]def rigidDisk(r, center, model, material, color='BLEUx', number=None, is_Hollow=False, is_Pneum=False): +
[docs]def rigidDisk(r, center, model, material, color='BLEUx', number=None, is_Hollow=False, is_Pneum=False): ''' usage: @@ -84,27 +84,27 @@ - is_Pneum = False: is the contactor to be a pneumatic one (DISPx instead of DISKx or xPSID instead of xKSID). ''' - body = avatar(type='RBDY2', dimension=2, number=number) - body.addBulk( rigid2d() ) - body.addNode( node(type='NO2xx',coor=numpy.array(center), number=1) ) + body = avatar(dimension=2, number=number) + body.addBulk( rigid2d() ) + body.addNode( node(coor=numpy.array(center), number=1) ) body.defineGroups() body.defineModel(model=model) body.defineMaterial(material=material) if is_Hollow: if is_Pneum: - body.addContactors(type='xPSID', color=color, byrd=r) + body.addContactors(shape='xPSID', color=color, byrd=r) else: - body.addContactors(type='xKSID', color=color, byrd=r) + body.addContactors(shape='xKSID', color=color, byrd=r) else: if is_Pneum: - body.addContactors(type='DISPx', color=color, byrd=r) + body.addContactors(shape='DISPx', color=color, byrd=r) else: - body.addContactors(type='DISKx', color=color, byrd=r) + body.addContactors(shape='DISKx', color=color, byrd=r) body.computeRigidProperties() return body
-
[docs]def rigidSphere(r, center, model, material, color='BLEUx', number=None): +
[docs]def rigidSphere(r, center, model, material, color='BLEUx', number=None): ''' usage: @@ -125,18 +125,18 @@ - color='BLEUx' : color of the contactor - number=None: index of the avatar (still present to ensure compatibility)''' - body = avatar(type='RBDY3', dimension=3, number=number) - body.addBulk( rigid3d() ) - body.addNode( node(type='NO3xx',coor=numpy.array(center), number=1) ) + body = avatar(dimension=3, number=number) + body.addBulk( rigid3d() ) + body.addNode( node(coor=numpy.array(center), number=1) ) body.defineGroups() body.defineModel(model=model) body.defineMaterial(material=material) - body.addContactors(type='SPHER', color=color, byrd=r) + body.addContactors(shape='SPHER', color=color, byrd=r) body.computeRigidProperties() return body
-
[docs]def rigidCylinder(r, h, center, model, material, color='BLEUx', number=None, is_Hollow=False): +
[docs]def rigidCylinder(r, h, center, model, material, color='BLEUx', number=None, is_Hollow=False): ''' usage: @@ -160,21 +160,21 @@ - is_Hollow = False: is the contactor to be a hollow one (DNLYC instead of CYLND) ''' - body = avatar(type='RBDY3', dimension=3, number=number) - body.addBulk( rigid3d() ) - body.addNode( node(type='NO3xx',coor=numpy.array(center), number=1) ) + body = avatar(dimension=3, number=number) + body.addBulk( rigid3d() ) + body.addNode( node(coor=numpy.array(center), number=1) ) body.defineGroups() body.defineModel(model=model) body.defineMaterial(material=material) if is_Hollow: - body.addContactors(type='DNLYC', color=color, byrd=r,High=h/2.) + body.addContactors(shape='DNLYC', color=color, byrd=r,High=h/2.) else: - body.addContactors(type='CYLND', color=color, byrd=r,High=h/2.) + body.addContactors(shape='CYLND', color=color, byrd=r,High=h/2.) body.computeRigidProperties() return body
-
[docs]def rigidJonc(axe1, axe2, center, model, material, color='BLEUx', number=None): +
[docs]def rigidJonc(axe1, axe2, center, model, material, color='BLEUx', number=None): ''' usage: @@ -196,18 +196,18 @@ - color='BLEUx' : color of the contactor - number=None: index of the avatar (still present to ensure compatibility)''' - body = avatar(type='RBDY2', dimension=2, number=number) + body = avatar(dimension=2, number=number) body.addBulk( rigid2d() ) - body.addNode(node(type='NO2xx',coor=numpy.array(center),number=1)) + body.addNode(node(coor=numpy.array(center),number=1)) body.defineGroups() body.defineModel(model=model) body.defineMaterial(material=material) - body.addContactors(type='JONCx', color=color, axe1=axe1, axe2=axe2) + body.addContactors(shape='JONCx', color=color, axe1=axe1, axe2=axe2) body.computeRigidProperties() return body
-
[docs]def rigidPlan(axe1, axe2, axe3, center, model, material, color='BLEUx', number=None): +
[docs]def rigidPlan(axe1, axe2, axe3, center, model, material, color='BLEUx', number=None): ''' usage: @@ -218,9 +218,9 @@ parameters : - - axe1 : half length of the jonc - - axe2 : half width of the jonc - - axe3 : half height of the jonc + - axe1 : half length of the plan + - axe2 : half width of the plan + - axe3 : half thickness of the plan - center : position of the center of inertia in the global frame, as a three coordinates vector - model : rigid model for the particle @@ -231,25 +231,25 @@ - color='BLEUx' : color of the contactor - number=None: index of the avatar (still present to ensure compatibility)''' - body = avatar(type='RBDY3', dimension=3, number=number) - body.addBulk( rigid3d() ) - body.addNode(node(type='NO3xx',coor=numpy.array(center),number=1)) + body = avatar(dimension=3, number=number) + body.addBulk( rigid3d() ) + body.addNode(node(coor=numpy.array(center),number=1)) body.defineGroups() body.defineModel(model=model) body.defineMaterial(material=material) - body.addContactors(type='PLANx', color=color, axe1=axe1, axe2=axe2, axe3=axe3) + body.addContactors(shape='PLANx', color=color, axe1=axe1, axe2=axe2, axe3=axe3) body.computeRigidProperties() return body
-
[docs]def rigidCluster(r, center, nb_disk, model, material, color='BLEUx', number=None): +
[docs]def rigidCluster(r, center, nb_disk, model, material, color='BLEUx', number=None): ''' usage: body=rigidCluster(r, center, nb_disk, model, material, color='BLEUx', number=None) - this function builds a rigid cluster of disks and returns the generated body + this function builds a rigid cluster of disks in a disk and returns the generated body parameters : @@ -264,9 +264,9 @@ - color='BLEUx' : color of the contactors - number=None: index of the avatar (still present to ensure compatibility)''' - body = avatar(type='RBDY2', dimension=2, number=number) - body.addBulk( rigid2d() ) - body.addNode( node(type='NO2xx',coor=numpy.array(center), number=1) ) + body = avatar(dimension=2, number=number) + body.addBulk( rigid2d() ) + body.addNode( node(coor=numpy.array(center), number=1) ) body.defineGroups() body.defineModel(model=model) body.defineMaterial(material=material) @@ -278,13 +278,13 @@ # on calcule la position de son centre par rapport au centre d'inertie x_disk = (r_disk - r)*math.cos(2.*math.pi*i/nb_disk) y_disk = (r_disk - r)*math.sin(2.*math.pi*i/nb_disk) - body.addContactors(type='DISKx', color=color, byrd=r_disk, shift=[x_disk, y_disk]) + body.addContactors(shape='DISKx', color=color, byrd=r_disk, shift=[x_disk, y_disk]) body.computeRigidProperties() return body
-
[docs]def rigidPolygon( model, material, center, theta=0., color='BLEUx', generation_type='regular', nb_vertices=0, vertices=None, radius=1., number=None): +
[docs]def rigidPolygon( model, material, center, theta=0., color='BLEUx', generation_type='regular', nb_vertices=0, vertices=None, radius=1., number=None): ''' usage: @@ -321,11 +321,11 @@ ''' # creation d'un nouveau polygone rigide 2D - body = avatar(type='RBDY2', dimension=2, number=number) + body = avatar(dimension=2, number=number) # on cree comportement volumique de type rigide - body.addBulk( rigid2d() ) + body.addBulk( rigid2d() ) # ajout de la position du centre d'inertie au disque - body.addNode(node(type='NO2xx',coor=numpy.array(center),number=1) ) + body.addNode(node(coor=numpy.array(center),number=1) ) # on definit les groupes pour le disque body.defineGroups() # on affecte son modele au disque @@ -343,11 +343,11 @@ vertices[i, 1] = radius*math.sin(2.*math.pi*i/float(nb_vertices)) # ajout de son contacteur au polygone - body.addContactors(type='POLYG', color=color, nb_vertices=nb_vertices, vertices=vertices) + body.addContactors(shape='POLYG', color=color, nb_vertices=nb_vertices, vertices=vertices) elif generation_type == 'full': # ajout de son contacteur au polygone - body.addContactors(type='POLYG', color=color, nb_vertices=vertices.shape[0], vertices=vertices) + body.addContactors(shape='POLYG', color=color, nb_vertices=vertices.shape[0], vertices=vertices) elif generation_type == 'bevel': # gestion des conges @@ -370,7 +370,7 @@ inv+=1 # ajout de son contacteur au polygone - body.addContactors(type='POLYG', color=color, nb_vertices=inv, vertices=nvertices) + body.addContactors(shape='POLYG', color=color, nb_vertices=inv, vertices=nvertices) else: showError('In rigidPolygon: unknow type '+generation_type) @@ -386,13 +386,13 @@ # on renvoie le corps genere return body
-
[docs]def rigidPolyhedron(model, material, center=numpy.zeros(3), color='BLEUx', generation_type='regular', - nb_vertices=0, vertices=None, faces=None, radius=1., tol=0., number=None): +
[docs]def rigidPolyhedron(model, material, center=numpy.zeros(3), color='BLEUx', generation_type='regular', + nb_vertices=0, vertices=None, faces=None, radius=1., tol=0., number=None, seed=None): ''' usage: body = rigidPolyhedron(model, material, center=numpy.zeros(3,'d'), generation_type='regular', color='BLEUx', - nb_vertices=0, vertices=None, faces=None, radius=1., tol=0., number=None) + nb_vertices=0, vertices=None, faces=None, radius=1., tol=0., number=None, s=None) This function builds a rigid convex polyhedron using 4 methods (see below). @@ -429,6 +429,7 @@ - nb_vertices=0. : number of vertices of the contactor - radius=1. : radius of the encompassing sphere. - tol=0. : tolerance to use to remove a vertex if the one found is to close to others (if 0. no check) + - seed=None : seed to use to control the randomness - Third method (generation_type ='vertices') generates the polyhedron defined by the convex hull of the vertices given in input. The 'vertices' array may be modified on output if the vertices @@ -447,8 +448,8 @@ ''' - body = avatar(type='RBDY3', dimension=3, number=number) - body.addBulk( rigid3d() ) + body = avatar(dimension=3, number=number) + body.addBulk( rigid3d() ) if type(center) != numpy.ndarray: try: @@ -457,7 +458,7 @@ showError('In rigidPolyhedron: center parameter must be convertible to a numpy array') #body.addNode( node(type='NO3xx',coor=numpy.array(center), number=1) ) - body.addNode( node(type='NO3xx',coor=numpy.zeros(3,'d'), number=1) ) + body.addNode( node(coor=numpy.zeros(3,'d'), number=1) ) body.defineGroups() body.defineModel(model=model) @@ -475,7 +476,7 @@ if nb_vertices < 4: showError('In rigidpolyhedron: nb_vertices must be > 4') # nodes generation - vertices = getRandomPolyhedronVertices(nb_vertices, radius, tol) + vertices = getRandomPolyhedronVertices(nb_vertices, radius, tol, seed) vertices += center # connectivity generation faces,vertices = buildPolyhedronConnectivity(vertices) @@ -498,7 +499,7 @@ else: showError('In rigidpolyhedron: unknow type '+generation_type) - body.addContactors(type='POLYR', color=color, nb_vertices=vertices.shape[0], vertices=vertices, + body.addContactors(shape='POLYR', color=color, nb_vertices=vertices.shape[0], vertices=vertices, nb_faces=len(faces), connectivity=faces) body.computeRigidProperties() @@ -506,7 +507,7 @@ # on renvoie le corps genere return body
-
[docs]def deformableParticle2D(r, center, type_part, model, material, color='BLEUx', number=None): +
[docs]def deformableParticle2D(r, center, type_part, model, material, color='BLEUx', number=None): """ usage: @@ -557,9 +558,9 @@ # on definit les contacteurs pour le corps : # * un contacteur candidat sur chaque noeud : - body.addContactors(group='S2xxx', type='CLxxx', color=color) + body.addContactors(group='S2xxx', shape='CLxxx', color=color) # * un contacteur antagoniste - body.addContactors(group='S2xxx', type='ALpxx', color=color) + body.addContactors(group='S2xxx', shape='ALpxx', color=color) # on renvoie l'objet genere return body
@@ -581,73 +582,73 @@ rad2 = math.cos(A36) # on ajoute les noeuds au maillage - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ math.cos(3.*A72),math.sin(3.*A72) ]), number= 1) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ math.cos(2.*A72), 0.0000000e+00 ]), number= 2) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ math.cos(2.*A72),math.sin(2.*A72) ]), number= 3) ) + mesh_penta.addNode( node( coor=numpy.array([ math.cos(3.*A72),math.sin(3.*A72) ]), number= 1) ) + mesh_penta.addNode( node( coor=numpy.array([ math.cos(2.*A72), 0.0000000e+00 ]), number= 2) ) + mesh_penta.addNode( node( coor=numpy.array([ math.cos(2.*A72),math.sin(2.*A72) ]), number= 3) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1*math.cos(3.*A72),rad1*math.sin(3.*A72) ]), number= 4) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([-rad1, 0.0000000e+00 ]), number= 5) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1*math.cos(2.*A72),rad1*math.sin(2.*A72) ]), number= 6) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1*math.cos(3.*A72),rad1*math.sin(3.*A72) ]), number= 4) ) + mesh_penta.addNode( node( coor=numpy.array([-rad1, 0.0000000e+00 ]), number= 5) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1*math.cos(2.*A72),rad1*math.sin(2.*A72) ]), number= 6) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad2*math.cos(7.*A36),rad2*math.sin(7.*A36) ]), number= 7) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1*math.cos(7.*A36),rad1*math.sin(7.*A36) ]), number= 8) ) + mesh_penta.addNode( node( coor=numpy.array([ rad2*math.cos(7.*A36),rad2*math.sin(7.*A36) ]), number= 7) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1*math.cos(7.*A36),rad1*math.sin(7.*A36) ]), number= 8) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1*math.cos(3.*A36),rad1*math.sin(3.*A36) ]), number= 9) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad2*math.cos(3.*A36),rad2*math.sin(3.*A36) ]), number=10) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1*math.cos(3.*A36),rad1*math.sin(3.*A36) ]), number= 9) ) + mesh_penta.addNode( node( coor=numpy.array([ rad2*math.cos(3.*A36),rad2*math.sin(3.*A36) ]), number=10) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00 , 0.0000000e+00 ]), number=11) ) + mesh_penta.addNode( node( coor=numpy.array([ 0.0000000e+00 , 0.0000000e+00 ]), number=11) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1*math.cos(4.*A72),rad1*math.sin(4.*A72) ]), number=12) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1*math.cos(1.*A72),rad1*math.sin(1.*A72) ]), number=13) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1*math.cos(4.*A72),rad1*math.sin(4.*A72) ]), number=12) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1*math.cos(1.*A72),rad1*math.sin(1.*A72) ]), number=13) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ math.cos(4.*A72),math.sin(4.*A72) ]), number=14) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1*math.cos(9.*A36),rad1*math.sin(9.*A36) ]), number=15) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1, 0.0000000e+00 ]), number=16) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad1*math.cos(1.*A36),rad1*math.sin(1.*A36) ]), number=17) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ math.cos(1.*A72),math.sin(1.*A72) ]), number=18) ) + mesh_penta.addNode( node( coor=numpy.array([ math.cos(4.*A72),math.sin(4.*A72) ]), number=14) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1*math.cos(9.*A36),rad1*math.sin(9.*A36) ]), number=15) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1, 0.0000000e+00 ]), number=16) ) + mesh_penta.addNode( node( coor=numpy.array([ rad1*math.cos(1.*A36),rad1*math.sin(1.*A36) ]), number=17) ) + mesh_penta.addNode( node( coor=numpy.array([ math.cos(1.*A72),math.sin(1.*A72) ]), number=18) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad2*math.cos(9.*A36),rad2*math.sin(9.*A36) ]), number=19) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ rad2*math.cos(1.*A36),rad2*math.sin(1.*A36) ]), number=20) ) + mesh_penta.addNode( node( coor=numpy.array([ rad2*math.cos(9.*A36),rad2*math.sin(9.*A36) ]), number=19) ) + mesh_penta.addNode( node( coor=numpy.array([ rad2*math.cos(1.*A36),rad2*math.sin(1.*A36) ]), number=20) ) - mesh_penta.addNode( node(type='NO2xx', coor=numpy.array([ 1.0000000e+00 , 0.0000000e+00 ]), number=21) ) + mesh_penta.addNode( node( coor=numpy.array([ 1.0000000e+00 , 0.0000000e+00 ]), number=21) ) # on ajoute les elements au maillage # * les elements surfaciques - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 1, 4, 5, 2]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 2, 5 , 6, 3]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 4, 11, 6, 5]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 1, 4, 5, 2]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 2, 5 , 6, 3]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 4, 11, 6, 5]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 6, 9, 10, 3]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 1, 7, 8, 4]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 7, 14, 12, 8]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 6, 9, 10, 3]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 1, 7, 8, 4]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 7, 14, 12, 8]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 4, 8, 12, 11]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 6, 11, 13, 9]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[ 9, 13 ,18, 10]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 4, 8, 12, 11]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 6, 11, 13, 9]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[ 9, 13 ,18, 10]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[14, 19, 15, 12]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[19, 21, 16, 15]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[12, 15, 16, 11]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[14, 19, 15, 12]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[19, 21, 16, 15]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[12, 15, 16, 11]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[11, 16, 17, 13]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[16, 21, 20, 17]) ) - mesh_penta.addBulk( element(type='Q4xxx', connectivity=[17, 20, 18, 13]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[11, 16, 17, 13]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[16, 21, 20, 17]) ) + mesh_penta.addBulk( element(elem_dim=2, connectivity=[17, 20, 18, 13]) ) # * les elements lineiques # N.B.: la connectivite est donne dans le sens antitrigonmetrique qui # est le sens conventionnel pour decrire les contacteurs - mesh_penta.addBulk( element(type='S2xxx', connectivity=[ 7, 1], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[ 1, 2], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[ 2, 3], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[ 3, 10], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[10, 18], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[18, 20], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[20, 21], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[21, 19], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[19, 14], physicalEntity='skin') ) - mesh_penta.addBulk( element(type='S2xxx', connectivity=[14, 7], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[ 7, 1], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[ 1, 2], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[ 2, 3], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[ 3, 10], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[10, 18], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[18, 20], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[20, 21], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[21, 19], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[19, 14], physicalEntity='skin') ) + mesh_penta.addBulk( element(elem_dim=1, connectivity=[14, 7], physicalEntity='skin') ) # on renvoie le maillage ainsi construit return mesh_penta @@ -665,63 +666,63 @@ # on ajoute les noeuds au maillage - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, 0.0000000e+00]), number= 1) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.5000000e-02, 0.0000000e+00]), number= 2) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, 0.5000000e-02]), number= 3) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.4267767e-02, 0.4267767e-02]), number= 4) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1000000e-01, 0.0000000e+00]), number= 5) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1500000e-01, 0.0000000e+00]), number= 6) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.8535534e-02, 0.3535534e-02]), number= 7) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1350656e-01, 0.5594601e-02]), number= 8) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.7071068e-02, 0.7071068e-02]), number= 9) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1060660e-01, 0.1060660e-01]), number=10) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.3535534e-02, 0.8535534e-02]), number=11) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.5594601e-02, 0.1350656e-01]), number=12) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, -0.5000000e-02]), number=13) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.4267767e-02, -0.4267767e-02]), number=14) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.8535534e-02, -0.3535534e-02]), number=15) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1350656e-01, -0.5594601e-02]), number=16) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.7071068e-02, -0.7071068e-02]), number=17) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1060660e-01, -0.1060660e-01]), number=18) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.3535534e-02, -0.8535534e-02]), number=19) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.5594601e-02, -0.1350656e-01]), number=20) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.5000000e-02, 0.0000000e+00]), number=21) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.4267767e-02, 0.4267767e-02]), number=22) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1000000e-01, 0.0000000e+00]), number=23) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1500000e-01, 0.0000000e+00]), number=24) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.8535534e-02, 0.3535534e-02]), number=25) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1350656e-01, 0.5594601e-02]), number=26) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.7071068e-02, 0.7071068e-02]), number=27) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1060660e-01, 0.1060660e-01]), number=28) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.3535534e-02, 0.8535534e-02]), number=29) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.5594601e-02, 0.1350656e-01]), number=30) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.4267767e-02, -0.4267767e-02]), number=31) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.8535534e-02, -0.3535534e-02]), number=32) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1350656e-01, -0.5594601e-02]), number=33) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.7071068e-02, -0.7071068e-02]), number=34) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1060660e-01, -0.1060660e-01]), number=35) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.3535534e-02, -0.8535534e-02]), number=36) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.5594601e-02, -0.1350656e-01]), number=37) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.2000000e-01, 0.0000000e+00]), number=38) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1847759e-01, 0.7653669e-02]), number=39) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1414214e-01, 0.1414214e-01]), number=40) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.7653669e-02, 0.1847759e-01]), number=41) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, -0.1000000e-01]), number=42) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, -0.1500000e-01]), number=43) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, 0.1000000e-01]), number=44) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, 0.1500000e-01]), number=45) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.2000000e-01, 0.0000000e+00]), number=46) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1847759e-01, -0.7653669e-02]), number=47) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1414214e-01, -0.1414214e-01]), number=48) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.7653669e-02, -0.1847759e-01]), number=49) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, 0.2000000e-01]), number=50) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1847759e-01, -0.7653669e-02]), number=51) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.1414214e-01, -0.1414214e-01]), number=52) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.7653669e-02, -0.1847759e-01]), number=53) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([ 0.0000000e+00, -0.2000000e-01]), number=54) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1847759e-01, 0.7653669e-02]), number=55) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.1414214e-01, 0.1414214e-01]), number=56) ) - mesh_disk.addNode( node(type='NO2xx', coor=numpy.array([-0.7653669e-02, 0.1847759e-01]), number=57) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, 0.0000000e+00]), number= 1) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.5000000e-02, 0.0000000e+00]), number= 2) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, 0.5000000e-02]), number= 3) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.4267767e-02, 0.4267767e-02]), number= 4) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1000000e-01, 0.0000000e+00]), number= 5) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1500000e-01, 0.0000000e+00]), number= 6) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.8535534e-02, 0.3535534e-02]), number= 7) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1350656e-01, 0.5594601e-02]), number= 8) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.7071068e-02, 0.7071068e-02]), number= 9) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1060660e-01, 0.1060660e-01]), number=10) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.3535534e-02, 0.8535534e-02]), number=11) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.5594601e-02, 0.1350656e-01]), number=12) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, -0.5000000e-02]), number=13) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.4267767e-02, -0.4267767e-02]), number=14) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.8535534e-02, -0.3535534e-02]), number=15) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1350656e-01, -0.5594601e-02]), number=16) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.7071068e-02, -0.7071068e-02]), number=17) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1060660e-01, -0.1060660e-01]), number=18) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.3535534e-02, -0.8535534e-02]), number=19) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.5594601e-02, -0.1350656e-01]), number=20) ) + mesh_disk.addNode( node( coor=numpy.array([-0.5000000e-02, 0.0000000e+00]), number=21) ) + mesh_disk.addNode( node( coor=numpy.array([-0.4267767e-02, 0.4267767e-02]), number=22) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1000000e-01, 0.0000000e+00]), number=23) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1500000e-01, 0.0000000e+00]), number=24) ) + mesh_disk.addNode( node( coor=numpy.array([-0.8535534e-02, 0.3535534e-02]), number=25) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1350656e-01, 0.5594601e-02]), number=26) ) + mesh_disk.addNode( node( coor=numpy.array([-0.7071068e-02, 0.7071068e-02]), number=27) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1060660e-01, 0.1060660e-01]), number=28) ) + mesh_disk.addNode( node( coor=numpy.array([-0.3535534e-02, 0.8535534e-02]), number=29) ) + mesh_disk.addNode( node( coor=numpy.array([-0.5594601e-02, 0.1350656e-01]), number=30) ) + mesh_disk.addNode( node( coor=numpy.array([-0.4267767e-02, -0.4267767e-02]), number=31) ) + mesh_disk.addNode( node( coor=numpy.array([-0.8535534e-02, -0.3535534e-02]), number=32) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1350656e-01, -0.5594601e-02]), number=33) ) + mesh_disk.addNode( node( coor=numpy.array([-0.7071068e-02, -0.7071068e-02]), number=34) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1060660e-01, -0.1060660e-01]), number=35) ) + mesh_disk.addNode( node( coor=numpy.array([-0.3535534e-02, -0.8535534e-02]), number=36) ) + mesh_disk.addNode( node( coor=numpy.array([-0.5594601e-02, -0.1350656e-01]), number=37) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.2000000e-01, 0.0000000e+00]), number=38) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1847759e-01, 0.7653669e-02]), number=39) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1414214e-01, 0.1414214e-01]), number=40) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.7653669e-02, 0.1847759e-01]), number=41) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, -0.1000000e-01]), number=42) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, -0.1500000e-01]), number=43) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, 0.1000000e-01]), number=44) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, 0.1500000e-01]), number=45) ) + mesh_disk.addNode( node( coor=numpy.array([-0.2000000e-01, 0.0000000e+00]), number=46) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1847759e-01, -0.7653669e-02]), number=47) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1414214e-01, -0.1414214e-01]), number=48) ) + mesh_disk.addNode( node( coor=numpy.array([-0.7653669e-02, -0.1847759e-01]), number=49) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, 0.2000000e-01]), number=50) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1847759e-01, -0.7653669e-02]), number=51) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.1414214e-01, -0.1414214e-01]), number=52) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.7653669e-02, -0.1847759e-01]), number=53) ) + mesh_disk.addNode( node( coor=numpy.array([ 0.0000000e+00, -0.2000000e-01]), number=54) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1847759e-01, 0.7653669e-02]), number=55) ) + mesh_disk.addNode( node( coor=numpy.array([-0.1414214e-01, 0.1414214e-01]), number=56) ) + mesh_disk.addNode( node( coor=numpy.array([-0.7653669e-02, 0.1847759e-01]), number=57) ) # am : magouille heritee de preprogranul... for nod in mesh_disk.nodes: @@ -730,74 +731,74 @@ # on ajoute les elements au maillage # * les elements surfaciques - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 1, 2, 4, 3]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 2, 5 , 7, 4]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 3, 4, 11, 44]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 4, 7, 9, 11]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 5, 6, 8, 7]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 6, 38, 39, 8]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 7, 8, 10, 9]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 8, 39, 40, 10]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 9, 10 ,12, 11]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[10, 40, 41, 12]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[11, 12, 45, 44]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[12, 41, 50, 45]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 1, 13, 14, 2]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 2, 14, 15, 5]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[13, 42, 19, 14]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[14, 19, 17, 15]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 5, 15, 16, 6]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 6, 16, 51, 38]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[15, 17, 18, 16]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[16, 18, 52, 51]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[17, 19, 20, 18]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[18, 20, 53, 52]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[19, 42, 43, 20]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[20, 43, 54, 53]) ) - mesh_disk.addBulk( element(type='Q4xxx', connectivity=[ 1, 3<