diff --git a/data/Groups_Test.uff b/data/Groups_Test.uff new file mode 100644 index 0000000..d754ee2 --- /dev/null +++ b/data/Groups_Test.uff @@ -0,0 +1,982 @@ + -1 + 164 + 1 SI: Meter (newton) 2 + 1.0000000000000000E+0 1.0000000000000000E+0 1.0000000000000000E+0 + 2.7314999999999998E+2 + -1 + -1 + 2420 + 1 +SMESH_Mesh + 1 0 0 +Global Cartesian Coordinate System + 1.0000000000000000E+0 0.0000000000000000E+0 0.0000000000000000E+0 + 0.0000000000000000E+0 1.0000000000000000E+0 0.0000000000000000E+0 + 0.0000000000000000E+0 0.0000000000000000E+0 1.0000000000000000E+0 + 0.0000000000000000E+0 0.0000000000000000E+0 0.0000000000000000E+0 + -1 + -1 + 2411 + 1 1 1 11 + 2.0000000000000000E+02 1.0000000000000000E+01 0.0000000000000000E+00 + 2 1 1 11 + 2.0000000000000000E+02 1.0000000000000000E+01 5.0000000000000000E+01 + 3 1 1 11 + 2.0000000000000000E+02 0.0000000000000000E+00 0.0000000000000000E+00 + 4 1 1 11 + 2.0000000000000000E+02 0.0000000000000000E+00 5.0000000000000000E+01 + 5 1 1 11 + 0.0000000000000000E+00 1.0000000000000000E+01 0.0000000000000000E+00 + 6 1 1 11 + 0.0000000000000000E+00 1.0000000000000000E+01 5.0000000000000000E+01 + 7 1 1 11 + 0.0000000000000000E+00 0.0000000000000000E+00 0.0000000000000000E+00 + 8 1 1 11 + 0.0000000000000000E+00 0.0000000000000000E+00 5.0000000000000000E+01 + 9 1 1 11 + 2.1072535389137332E+01 1.0000000000000000E+01 5.0000000000000000E+01 + 10 1 1 11 + 4.3810472772335899E+01 1.0000000000000000E+01 5.0000000000000000E+01 + 11 1 1 11 + 6.7100231678605240E+01 1.0000000000000000E+01 5.0000000000000000E+01 + 12 1 1 11 + 8.7982712937057244E+01 1.0000000000000000E+01 5.0000000000000000E+01 + 13 1 1 11 + 1.0912499257421686E+02 1.0000000000000000E+01 5.0000000000000000E+01 + 14 1 1 11 + 1.3228811380107928E+02 1.0000000000000000E+01 5.0000000000000000E+01 + 15 1 1 11 + 1.5305162131679475E+02 1.0000000000000000E+01 5.0000000000000000E+01 + 16 1 1 11 + 1.7640541353144110E+02 1.0000000000000000E+01 5.0000000000000000E+01 + 17 1 1 11 + 2.0464318403879997E+01 0.0000000000000000E+00 5.0000000000000000E+01 + 18 1 1 11 + 4.2917919614589280E+01 0.0000000000000000E+00 5.0000000000000000E+01 + 19 1 1 11 + 6.5761401941985298E+01 0.0000000000000000E+00 5.0000000000000000E+01 + 20 1 1 11 + 8.8551633403223676E+01 0.0000000000000000E+00 5.0000000000000000E+01 + 21 1 1 11 + 1.1103047332127983E+02 0.0000000000000000E+00 5.0000000000000000E+01 + 22 1 1 11 + 1.3423859805801595E+02 0.0000000000000000E+00 5.0000000000000000E+01 + 23 1 1 11 + 1.5449920050875460E+02 0.0000000000000000E+00 5.0000000000000000E+01 + 24 1 1 11 + 1.7715651767260502E+02 0.0000000000000000E+00 5.0000000000000000E+01 + 25 1 1 11 + 2.1072535389137332E+01 1.0000000000000000E+01 0.0000000000000000E+00 + 26 1 1 11 + 4.3810472772335899E+01 1.0000000000000000E+01 0.0000000000000000E+00 + 27 1 1 11 + 6.7100231678605240E+01 1.0000000000000000E+01 0.0000000000000000E+00 + 28 1 1 11 + 8.7982712937057244E+01 1.0000000000000000E+01 0.0000000000000000E+00 + 29 1 1 11 + 1.0912499257421686E+02 1.0000000000000000E+01 0.0000000000000000E+00 + 30 1 1 11 + 1.3228811380107928E+02 1.0000000000000000E+01 0.0000000000000000E+00 + 31 1 1 11 + 1.5305162131679475E+02 1.0000000000000000E+01 0.0000000000000000E+00 + 32 1 1 11 + 1.7640541353144110E+02 1.0000000000000000E+01 0.0000000000000000E+00 + 33 1 1 11 + 2.0464318403879997E+01 0.0000000000000000E+00 0.0000000000000000E+00 + 34 1 1 11 + 4.2917919614589280E+01 0.0000000000000000E+00 0.0000000000000000E+00 + 35 1 1 11 + 6.5761401941985298E+01 0.0000000000000000E+00 0.0000000000000000E+00 + 36 1 1 11 + 8.8551633403223676E+01 0.0000000000000000E+00 0.0000000000000000E+00 + 37 1 1 11 + 1.1103047332127983E+02 0.0000000000000000E+00 0.0000000000000000E+00 + 38 1 1 11 + 1.3423859805801595E+02 0.0000000000000000E+00 0.0000000000000000E+00 + 39 1 1 11 + 1.5449920050875460E+02 0.0000000000000000E+00 0.0000000000000000E+00 + 40 1 1 11 + 1.7715651767260502E+02 0.0000000000000000E+00 0.0000000000000000E+00 + 41 1 1 11 + 2.0000000000000000E+02 1.0000000000000000E+01 2.3622133838168594E+01 + 42 1 1 11 + 0.0000000000000000E+00 1.0000000000000000E+01 2.3622133838168594E+01 + 43 1 1 11 + 2.0000000000000000E+02 0.0000000000000000E+00 2.3622133838168594E+01 + 44 1 1 11 + 0.0000000000000000E+00 0.0000000000000000E+00 2.3622133838168594E+01 + 45 1 1 11 + 5.8140821635870836E+01 1.0000000000000000E+01 1.7307744502728017E+01 + 46 1 1 11 + 8.0684147617385875E+01 1.0000000000000000E+01 1.6726823861186098E+01 + 47 1 1 11 + 1.0237546456637712E+02 1.0000000000000000E+01 1.6712797836941771E+01 + 48 1 1 11 + 1.2417314246107620E+02 1.0000000000000000E+01 1.6583349096504886E+01 + 49 1 1 11 + 1.4572437193246842E+02 1.0000000000000000E+01 1.6681200939522789E+01 + 50 1 1 11 + 1.6657116327272939E+02 1.0000000000000000E+01 1.6178967469751726E+01 + 51 1 1 11 + 1.8528363243887387E+02 1.0000000000000000E+01 1.4358243968159936E+01 + 52 1 1 11 + 1.8181615539440907E+02 1.0000000000000000E+01 3.2160762923847798E+01 + 53 1 1 11 + 3.2988676825093350E+01 1.0000000000000000E+01 2.4955679675259130E+01 + 54 1 1 11 + 7.4180692772042889E+01 1.0000000000000000E+01 3.3406339595614369E+01 + 55 1 1 11 + 1.1697401580412679E+02 1.0000000000000000E+01 3.3413651252203628E+01 + 56 1 1 11 + 1.6036579761415192E+02 1.0000000000000000E+01 3.3312446861885739E+01 + 57 1 1 11 + 5.4372438549139474E+01 1.0000000000000000E+01 3.4949158974272251E+01 + 58 1 1 11 + 9.5297418273009455E+01 1.0000000000000000E+01 3.3325645054189344E+01 + 59 1 1 11 + 1.3871635778594185E+02 1.0000000000000000E+01 3.3274173091537364E+01 + 60 1 1 11 + 2.2496510680258730E+01 0.0000000000000000E+00 1.5384611010668054E+01 + 61 1 1 11 + 7.6457233633260230E+01 0.0000000000000000E+00 2.4929418668735781E+01 + 62 1 1 11 + 1.2549994242848182E+02 0.0000000000000000E+00 1.6600429610583376E+01 + 63 1 1 11 + 1.6742507437123666E+02 0.0000000000000000E+00 1.6160997291791833E+01 + 64 1 1 11 + 1.8568606813220001E+02 0.0000000000000000E+00 1.4347124298126921E+01 + 65 1 1 11 + 1.8231636846332015E+02 0.0000000000000000E+00 3.2124831215344159E+01 + 66 1 1 11 + 3.0999686098095065E+01 0.0000000000000000E+00 3.2790048723013044E+01 + 67 1 1 11 + 5.3735930837446304E+01 0.0000000000000000E+00 3.4652981681671847E+01 + 68 1 1 11 + 1.1892415492136064E+02 0.0000000000000000E+00 3.3507909780448074E+01 + 69 1 1 11 + 1.4025196652692034E+02 0.0000000000000000E+00 3.3241963339057804E+01 + 70 1 1 11 + 1.6143332852481205E+02 0.0000000000000000E+00 3.3286840208975995E+01 + 71 1 1 11 + 4.9413200767722394E+01 0.0000000000000000E+00 1.7174171908409413E+01 + 72 1 1 11 + 1.0255906342463149E+02 0.0000000000000000E+00 1.7319181011156186E+01 + 73 1 1 11 + 1.4703074524533014E+02 0.0000000000000000E+00 1.6671302901145019E+01 + 74 1 1 11 + 9.8733478566579237E+01 0.0000000000000000E+00 3.4837513639327810E+01 + -1 + -1 + 2412 + 1 11 2 1 7 2 + 0 1 1 + 6 8 + 2 11 2 1 7 2 + 0 1 1 + 9 6 + 3 11 2 1 7 2 + 0 1 1 + 10 9 + 4 11 2 1 7 2 + 0 1 1 + 11 10 + 5 11 2 1 7 2 + 0 1 1 + 12 11 + 6 11 2 1 7 2 + 0 1 1 + 13 12 + 7 11 2 1 7 2 + 0 1 1 + 14 13 + 8 11 2 1 7 2 + 0 1 1 + 15 14 + 9 11 2 1 7 2 + 0 1 1 + 16 15 + 10 11 2 1 7 2 + 0 1 1 + 2 16 + 11 11 2 1 7 2 + 0 1 1 + 4 2 + 12 11 2 1 7 2 + 0 1 1 + 8 17 + 13 11 2 1 7 2 + 0 1 1 + 17 18 + 14 11 2 1 7 2 + 0 1 1 + 18 19 + 15 11 2 1 7 2 + 0 1 1 + 19 20 + 16 11 2 1 7 2 + 0 1 1 + 20 21 + 17 11 2 1 7 2 + 0 1 1 + 21 22 + 18 11 2 1 7 2 + 0 1 1 + 22 23 + 19 11 2 1 7 2 + 0 1 1 + 23 24 + 20 11 2 1 7 2 + 0 1 1 + 24 4 + 21 11 2 1 7 2 + 0 1 1 + 7 5 + 22 11 2 1 7 2 + 0 1 1 + 5 25 + 23 11 2 1 7 2 + 0 1 1 + 25 26 + 24 11 2 1 7 2 + 0 1 1 + 26 27 + 25 11 2 1 7 2 + 0 1 1 + 27 28 + 26 11 2 1 7 2 + 0 1 1 + 28 29 + 27 11 2 1 7 2 + 0 1 1 + 29 30 + 28 11 2 1 7 2 + 0 1 1 + 30 31 + 29 11 2 1 7 2 + 0 1 1 + 31 32 + 30 11 2 1 7 2 + 0 1 1 + 32 1 + 31 11 2 1 7 2 + 0 1 1 + 1 3 + 32 11 2 1 7 2 + 0 1 1 + 33 7 + 33 11 2 1 7 2 + 0 1 1 + 34 33 + 34 11 2 1 7 2 + 0 1 1 + 35 34 + 35 11 2 1 7 2 + 0 1 1 + 36 35 + 36 11 2 1 7 2 + 0 1 1 + 37 36 + 37 11 2 1 7 2 + 0 1 1 + 38 37 + 38 11 2 1 7 2 + 0 1 1 + 39 38 + 39 11 2 1 7 2 + 0 1 1 + 40 39 + 40 11 2 1 7 2 + 0 1 1 + 3 40 + 41 11 2 1 7 2 + 0 1 1 + 41 1 + 42 11 2 1 7 2 + 0 1 1 + 2 41 + 43 11 2 1 7 2 + 0 1 1 + 5 42 + 44 11 2 1 7 2 + 0 1 1 + 42 6 + 45 11 2 1 7 2 + 0 1 1 + 3 43 + 46 11 2 1 7 2 + 0 1 1 + 43 4 + 47 11 2 1 7 2 + 0 1 1 + 44 7 + 48 11 2 1 7 2 + 0 1 1 + 8 44 + 49 41 2 1 7 3 + 6 8 17 + 50 41 2 1 7 3 + 9 6 17 + 51 41 2 1 7 3 + 13 12 20 + 52 41 2 1 7 3 + 14 13 21 + 53 41 2 1 7 3 + 15 14 22 + 54 41 2 1 7 3 + 14 21 22 + 55 41 2 1 7 3 + 15 22 23 + 56 41 2 1 7 3 + 20 21 13 + 57 41 2 1 7 3 + 20 12 11 + 58 41 2 1 7 3 + 10 9 18 + 59 41 2 1 7 3 + 11 10 19 + 60 41 2 1 7 3 + 19 10 18 + 61 41 2 1 7 3 + 18 9 17 + 62 41 2 1 7 3 + 11 19 20 + 63 41 2 1 7 3 + 16 15 23 + 64 41 2 1 7 3 + 2 16 24 + 65 41 2 1 7 3 + 4 2 24 + 66 41 2 1 7 3 + 23 24 16 + 67 41 2 1 7 3 + 7 5 33 + 68 41 2 1 7 3 + 5 25 33 + 69 41 2 1 7 3 + 28 29 36 + 70 41 2 1 7 3 + 29 30 37 + 71 41 2 1 7 3 + 30 31 38 + 72 41 2 1 7 3 + 37 30 38 + 73 41 2 1 7 3 + 36 29 37 + 74 41 2 1 7 3 + 39 38 31 + 75 41 2 1 7 3 + 25 26 34 + 76 41 2 1 7 3 + 26 27 35 + 77 41 2 1 7 3 + 27 28 36 + 78 41 2 1 7 3 + 26 35 34 + 79 41 2 1 7 3 + 27 36 35 + 80 41 2 1 7 3 + 31 32 39 + 81 41 2 1 7 3 + 32 1 40 + 82 41 2 1 7 3 + 1 3 40 + 83 41 2 1 7 3 + 33 25 34 + 84 41 2 1 7 3 + 39 32 40 + 85 41 2 1 7 3 + 25 5 42 + 86 41 2 1 7 3 + 26 25 53 + 87 41 2 1 7 3 + 27 26 45 + 88 41 2 1 7 3 + 26 53 45 + 89 41 2 1 7 3 + 28 27 46 + 90 41 2 1 7 3 + 27 45 46 + 91 41 2 1 7 3 + 29 28 47 + 92 41 2 1 7 3 + 28 46 47 + 93 41 2 1 7 3 + 30 29 48 + 94 41 2 1 7 3 + 31 30 49 + 95 41 2 1 7 3 + 30 48 49 + 96 41 2 1 7 3 + 32 31 50 + 97 41 2 1 7 3 + 1 32 51 + 98 41 2 1 7 3 + 41 1 51 + 99 41 2 1 7 3 + 32 50 51 + 100 41 2 1 7 3 + 2 41 52 + 101 41 2 1 7 3 + 16 2 52 + 102 41 2 1 7 3 + 41 51 52 + 103 41 2 1 7 3 + 9 10 53 + 104 41 2 1 7 3 + 11 12 54 + 105 41 2 1 7 3 + 13 14 55 + 106 41 2 1 7 3 + 15 16 56 + 107 41 2 1 7 3 + 16 52 56 + 108 41 2 1 7 3 + 29 47 48 + 109 41 2 1 7 3 + 31 49 50 + 110 41 2 1 7 3 + 44 8 42 + 111 41 2 1 7 3 + 10 11 57 + 112 41 2 1 7 3 + 12 13 58 + 113 41 2 1 7 3 + 14 15 59 + 114 41 2 1 7 3 + 42 6 9 + 115 41 2 1 7 3 + 25 42 53 + 116 41 2 1 7 3 + 59 15 56 + 117 41 2 1 7 3 + 42 5 44 + 118 41 2 1 7 3 + 14 59 55 + 119 41 2 1 7 3 + 57 11 54 + 120 41 2 1 7 3 + 47 46 58 + 121 41 2 1 7 3 + 50 49 56 + 122 41 2 1 7 3 + 6 42 8 + 123 41 2 1 7 3 + 55 59 48 + 124 41 2 1 7 3 + 52 51 50 + 125 41 2 1 7 3 + 54 12 58 + 126 41 2 1 7 3 + 10 57 53 + 127 41 2 1 7 3 + 58 55 47 + 128 41 2 1 7 3 + 13 55 58 + 129 41 2 1 7 3 + 48 47 55 + 130 41 2 1 7 3 + 56 52 50 + 131 41 2 1 7 3 + 59 56 49 + 132 41 2 1 7 3 + 58 46 54 + 133 41 2 1 7 3 + 46 45 54 + 134 41 2 1 7 3 + 59 49 48 + 135 41 2 1 7 3 + 7 44 5 + 136 41 2 1 7 3 + 45 53 57 + 137 41 2 1 7 3 + 53 42 9 + 138 41 2 1 7 3 + 57 54 45 + 139 41 2 1 7 3 + 33 60 7 + 140 41 2 1 7 3 + 33 34 60 + 141 41 2 1 7 3 + 35 36 61 + 142 41 2 1 7 3 + 37 38 62 + 143 41 2 1 7 3 + 39 40 63 + 144 41 2 1 7 3 + 40 3 64 + 145 41 2 1 7 3 + 63 40 64 + 146 41 2 1 7 3 + 3 43 64 + 147 41 2 1 7 3 + 43 4 65 + 148 41 2 1 7 3 + 64 43 65 + 149 41 2 1 7 3 + 4 24 65 + 150 41 2 1 7 3 + 18 17 66 + 151 41 2 1 7 3 + 19 18 67 + 152 41 2 1 7 3 + 18 66 67 + 153 41 2 1 7 3 + 20 19 61 + 154 41 2 1 7 3 + 22 21 68 + 155 41 2 1 7 3 + 23 22 69 + 156 41 2 1 7 3 + 22 68 69 + 157 41 2 1 7 3 + 24 23 70 + 158 41 2 1 7 3 + 65 24 70 + 159 41 2 1 7 3 + 23 69 70 + 160 41 2 1 7 3 + 34 35 71 + 161 41 2 1 7 3 + 36 37 72 + 162 41 2 1 7 3 + 38 39 73 + 163 41 2 1 7 3 + 17 8 44 + 164 41 2 1 7 3 + 19 67 61 + 165 41 2 1 7 3 + 21 20 74 + 166 41 2 1 7 3 + 72 37 62 + 167 41 2 1 7 3 + 20 61 74 + 168 41 2 1 7 3 + 2 4 41 + 169 41 2 1 7 3 + 44 7 60 + 170 41 2 1 7 3 + 62 38 73 + 171 41 2 1 7 3 + 66 17 44 + 172 41 2 1 7 3 + 73 39 63 + 173 41 2 1 7 3 + 21 74 68 + 174 41 2 1 7 3 + 60 34 71 + 175 41 2 1 7 3 + 36 72 61 + 176 41 2 1 7 3 + 74 61 72 + 177 41 2 1 7 3 + 68 74 72 + 178 41 2 1 7 3 + 73 63 70 + 179 41 2 1 7 3 + 63 64 65 + 180 41 2 1 7 3 + 72 62 68 + 181 41 2 1 7 3 + 62 73 69 + 182 41 2 1 7 3 + 69 68 62 + 183 41 2 1 7 3 + 44 60 66 + 184 41 2 1 7 3 + 63 65 70 + 185 41 2 1 7 3 + 69 73 70 + 186 41 2 1 7 3 + 35 61 71 + 187 41 2 1 7 3 + 60 71 66 + 188 41 2 1 7 3 + 67 66 71 + 189 41 2 1 7 3 + 61 67 71 + 190 41 2 1 7 3 + 1 41 43 + 191 41 2 1 7 3 + 43 3 1 + 192 41 2 1 7 3 + 43 41 4 + 193 111 2 1 7 4 + 56 70 50 52 + 194 111 2 1 7 4 + 55 68 72 48 + 195 111 2 1 7 4 + 41 65 64 43 + 196 111 2 1 7 4 + 32 51 40 1 + 197 111 2 1 7 4 + 55 13 58 74 + 198 111 2 1 7 4 + 20 54 61 19 + 199 111 2 1 7 4 + 13 20 58 74 + 200 111 2 1 7 4 + 23 69 56 70 + 201 111 2 1 7 4 + 41 65 43 4 + 202 111 2 1 7 4 + 58 61 72 74 + 203 111 2 1 7 4 + 30 48 29 37 + 204 111 2 1 7 4 + 64 1 41 43 + 205 111 2 1 7 4 + 2 65 41 4 + 206 111 2 1 7 4 + 67 54 45 57 + 207 111 2 1 7 4 + 42 66 17 44 + 208 111 2 1 7 4 + 20 54 12 58 + 209 111 2 1 7 4 + 20 13 58 12 + 210 111 2 1 7 4 + 31 49 30 38 + 211 111 2 1 7 4 + 67 53 45 71 + 212 111 2 1 7 4 + 20 61 58 74 + 213 111 2 1 7 4 + 24 65 2 4 + 214 111 2 1 7 4 + 25 33 34 60 + 215 111 2 1 7 4 + 33 60 5 7 + 216 111 2 1 7 4 + 25 5 33 60 + 217 111 2 1 7 4 + 71 26 60 53 + 218 111 2 1 7 4 + 61 54 58 46 + 219 111 2 1 7 4 + 61 20 58 54 + 220 111 2 1 7 4 + 36 35 61 46 + 221 111 2 1 7 4 + 16 70 52 24 + 222 111 2 1 7 4 + 63 51 64 40 + 223 111 2 1 7 4 + 69 15 56 59 + 224 111 2 1 7 4 + 56 70 52 16 + 225 111 2 1 7 4 + 69 68 22 59 + 226 111 2 1 7 4 + 28 27 36 46 + 227 111 2 1 7 4 + 6 8 42 17 + 228 111 2 1 7 4 + 56 70 69 73 + 229 111 2 1 7 4 + 20 11 12 54 + 230 111 2 1 7 4 + 52 65 63 51 + 231 111 2 1 7 4 + 63 70 50 73 + 232 111 2 1 7 4 + 11 54 20 19 + 233 111 2 1 7 4 + 55 59 68 48 + 234 111 2 1 7 4 + 53 67 45 57 + 235 111 2 1 7 4 + 9 66 42 53 + 236 111 2 1 7 4 + 63 65 52 70 + 237 111 2 1 7 4 + 47 55 72 48 + 238 111 2 1 7 4 + 62 59 49 48 + 239 111 2 1 7 4 + 36 47 28 46 + 240 111 2 1 7 4 + 22 68 14 59 + 241 111 2 1 7 4 + 69 59 49 62 + 242 111 2 1 7 4 + 31 73 50 49 + 243 111 2 1 7 4 + 29 47 72 48 + 244 111 2 1 7 4 + 41 1 64 51 + 245 111 2 1 7 4 + 30 62 49 48 + 246 111 2 1 7 4 + 68 59 62 48 + 247 111 2 1 7 4 + 61 46 45 54 + 248 111 2 1 7 4 + 67 66 53 71 + 249 111 2 1 7 4 + 52 65 41 2 + 250 111 2 1 7 4 + 45 54 67 61 + 251 111 2 1 7 4 + 52 65 2 24 + 252 111 2 1 7 4 + 3 40 64 1 + 253 111 2 1 7 4 + 39 32 31 50 + 254 111 2 1 7 4 + 31 38 39 73 + 255 111 2 1 7 4 + 28 47 36 29 + 256 111 2 1 7 4 + 67 19 61 54 + 257 111 2 1 7 4 + 68 59 69 62 + 258 111 2 1 7 4 + 14 68 55 59 + 259 111 2 1 7 4 + 42 17 9 6 + 260 111 2 1 7 4 + 41 65 52 51 + 261 111 2 1 7 4 + 64 65 41 51 + 262 111 2 1 7 4 + 52 65 24 70 + 263 111 2 1 7 4 + 42 5 25 60 + 264 111 2 1 7 4 + 19 57 67 10 + 265 111 2 1 7 4 + 69 59 22 15 + 266 111 2 1 7 4 + 29 48 72 37 + 267 111 2 1 7 4 + 52 70 50 63 + 268 111 2 1 7 4 + 23 70 16 24 + 269 111 2 1 7 4 + 62 48 30 37 + 270 111 2 1 7 4 + 72 48 62 37 + 271 111 2 1 7 4 + 50 70 56 73 + 272 111 2 1 7 4 + 72 46 58 47 + 273 111 2 1 7 4 + 72 47 58 55 + 274 111 2 1 7 4 + 61 58 72 46 + 275 111 2 1 7 4 + 71 35 34 26 + 276 111 2 1 7 4 + 40 51 64 1 + 277 111 2 1 7 4 + 14 68 22 21 + 278 111 2 1 7 4 + 69 62 49 73 + 279 111 2 1 7 4 + 19 57 11 54 + 280 111 2 1 7 4 + 44 7 5 60 + 281 111 2 1 7 4 + 63 65 64 51 + 282 111 2 1 7 4 + 39 32 63 40 + 283 111 2 1 7 4 + 19 10 67 18 + 284 111 2 1 7 4 + 39 63 50 73 + 285 111 2 1 7 4 + 67 10 53 66 + 286 111 2 1 7 4 + 66 60 53 71 + 287 111 2 1 7 4 + 22 59 14 15 + 288 111 2 1 7 4 + 44 60 5 42 + 289 111 2 1 7 4 + 55 74 72 68 + 290 111 2 1 7 4 + 30 62 38 49 + 291 111 2 1 7 4 + 42 25 53 60 + 292 111 2 1 7 4 + 72 36 61 46 + 293 111 2 1 7 4 + 23 70 56 16 + 294 111 2 1 7 4 + 38 62 30 37 + 295 111 2 1 7 4 + 29 37 72 36 + 296 111 2 1 7 4 + 9 18 66 10 + 297 111 2 1 7 4 + 39 32 50 63 + 298 111 2 1 7 4 + 16 24 52 2 + 299 111 2 1 7 4 + 69 22 23 15 + 300 111 2 1 7 4 + 23 15 56 69 + 301 111 2 1 7 4 + 9 18 17 66 + 302 111 2 1 7 4 + 45 61 67 71 + 303 111 2 1 7 4 + 56 15 23 16 + 304 111 2 1 7 4 + 17 8 42 44 + 305 111 2 1 7 4 + 27 35 45 26 + 306 111 2 1 7 4 + 25 26 53 60 + 307 111 2 1 7 4 + 45 35 71 26 + 308 111 2 1 7 4 + 26 71 60 34 + 309 111 2 1 7 4 + 45 35 61 71 + 310 111 2 1 7 4 + 56 49 50 73 + 311 111 2 1 7 4 + 34 26 25 60 + 312 111 2 1 7 4 + 66 18 67 10 + 313 111 2 1 7 4 + 50 51 52 63 + 314 111 2 1 7 4 + 61 35 45 46 + 315 111 2 1 7 4 + 45 35 27 46 + 316 111 2 1 7 4 + 11 57 19 10 + 317 111 2 1 7 4 + 67 57 53 10 + 318 111 2 1 7 4 + 72 47 36 46 + 319 111 2 1 7 4 + 27 35 36 46 + 320 111 2 1 7 4 + 72 55 58 74 + 321 111 2 1 7 4 + 67 57 19 54 + 322 111 2 1 7 4 + 53 10 9 66 + 323 111 2 1 7 4 + 49 62 38 73 + 324 111 2 1 7 4 + 29 36 72 47 + 325 111 2 1 7 4 + 31 73 39 50 + 326 111 2 1 7 4 + 68 62 72 48 + 327 111 2 1 7 4 + 31 49 38 73 + 328 111 2 1 7 4 + 69 59 56 49 + 329 111 2 1 7 4 + 55 68 14 21 + 330 111 2 1 7 4 + 42 66 44 60 + 331 111 2 1 7 4 + 53 66 42 60 + 332 111 2 1 7 4 + 14 13 55 21 + 333 111 2 1 7 4 + 74 13 20 21 + 334 111 2 1 7 4 + 74 68 55 21 + 335 111 2 1 7 4 + 55 13 74 21 + 336 111 2 1 7 4 + 45 71 53 26 + 337 111 2 1 7 4 + 32 51 63 40 + 338 111 2 1 7 4 + 3 1 64 43 + 339 111 2 1 7 4 + 42 66 9 17 + 340 111 2 1 7 4 + 63 32 50 51 + 341 111 2 1 7 4 + 69 49 56 73 + -1 + -1 + 2467 + 1 0 0 0 0 0 0 4 +Left_Side + 8 110 0 0 8 117 0 0 + 8 122 0 0 8 135 0 0 + 2 0 0 0 0 0 0 4 +Right_Side + 8 168 0 0 8 190 0 0 + 8 191 0 0 8 192 0 0 + 3 0 0 0 0 0 0 136 +Surface + 8 49 0 0 8 50 0 0 + 8 51 0 0 8 52 0 0 + 8 53 0 0 8 54 0 0 + 8 55 0 0 8 56 0 0 + 8 57 0 0 8 58 0 0 + 8 59 0 0 8 60 0 0 + 8 61 0 0 8 62 0 0 + 8 63 0 0 8 64 0 0 + 8 65 0 0 8 66 0 0 + 8 85 0 0 8 86 0 0 + 8 87 0 0 8 88 0 0 + 8 89 0 0 8 90 0 0 + 8 91 0 0 8 92 0 0 + 8 93 0 0 8 94 0 0 + 8 95 0 0 8 96 0 0 + 8 97 0 0 8 98 0 0 + 8 99 0 0 8 100 0 0 + 8 101 0 0 8 102 0 0 + 8 103 0 0 8 104 0 0 + 8 105 0 0 8 106 0 0 + 8 107 0 0 8 108 0 0 + 8 109 0 0 8 111 0 0 + 8 112 0 0 8 113 0 0 + 8 114 0 0 8 115 0 0 + 8 116 0 0 8 118 0 0 + 8 119 0 0 8 120 0 0 + 8 121 0 0 8 123 0 0 + 8 124 0 0 8 125 0 0 + 8 126 0 0 8 127 0 0 + 8 128 0 0 8 129 0 0 + 8 130 0 0 8 131 0 0 + 8 132 0 0 8 133 0 0 + 8 134 0 0 8 136 0 0 + 8 137 0 0 8 138 0 0 + 8 139 0 0 8 140 0 0 + 8 141 0 0 8 142 0 0 + 8 143 0 0 8 144 0 0 + 8 145 0 0 8 146 0 0 + 8 147 0 0 8 148 0 0 + 8 149 0 0 8 150 0 0 + 8 151 0 0 8 152 0 0 + 8 153 0 0 8 154 0 0 + 8 155 0 0 8 156 0 0 + 8 157 0 0 8 158 0 0 + 8 159 0 0 8 160 0 0 + 8 161 0 0 8 162 0 0 + 8 163 0 0 8 164 0 0 + 8 165 0 0 8 166 0 0 + 8 167 0 0 8 169 0 0 + 8 170 0 0 8 171 0 0 + 8 172 0 0 8 173 0 0 + 8 174 0 0 8 175 0 0 + 8 176 0 0 8 177 0 0 + 8 178 0 0 8 179 0 0 + 8 180 0 0 8 181 0 0 + 8 182 0 0 8 183 0 0 + 8 184 0 0 8 185 0 0 + 8 186 0 0 8 187 0 0 + 8 188 0 0 8 189 0 0 + 8 67 0 0 8 68 0 0 + 8 69 0 0 8 70 0 0 + 8 71 0 0 8 72 0 0 + 8 73 0 0 8 74 0 0 + 8 75 0 0 8 76 0 0 + 8 77 0 0 8 78 0 0 + 8 79 0 0 8 80 0 0 + 8 81 0 0 8 82 0 0 + 8 83 0 0 8 84 0 0 + -1 diff --git a/pyuff/datasets/__init__.py b/pyuff/datasets/__init__.py index b1039b3..9a40438 100644 --- a/pyuff/datasets/__init__.py +++ b/pyuff/datasets/__init__.py @@ -8,4 +8,5 @@ from .dataset_2412 import prepare_2412 from .dataset_2414 import prepare_2414 from .dataset_2420 import prepare_2420 -from .dataset_2429 import prepare_2429, prepare_group \ No newline at end of file +from .dataset_2429 import prepare_2429, prepare_group +from .dataset_2467 import prepare_2467 \ No newline at end of file diff --git a/pyuff/datasets/dataset_2467.py b/pyuff/datasets/dataset_2467.py new file mode 100644 index 0000000..9a7f01e --- /dev/null +++ b/pyuff/datasets/dataset_2467.py @@ -0,0 +1,295 @@ +""" +Dataset 2467 (source: https://github.com/victorsndvg/FEconv/blob/master/source/unv/module_dataset_2467.f90) + +Name: Permanent Groups +Record 1: FORMAT(8I10) + Field 1 -- group number + Field 2 -- active constraint set no. for group + Field 3 -- active restraint set no. for group + Field 4 -- active load set no. for group + Field 5 -- active dof set no. for group + Field 6 -- active temperature set no. for group + Field 7 -- active contact set no. for group + Field 8 -- number of entities in group + +Record 2: FORMAT(20A2) + Field 1 -- group name + +Record 3-N: FORMAT(8I10) + Field 1 -- entity type code + Field 2 -- entity tag + Field 3 -- entity node leaf id. + Field 4 -- entity component/ ham id. + Field 5 -- entity type code + Field 6 -- entity tag + Field 7 -- entity node leaf id. + Field 8 -- entity component/ ham id. + +Repeat record 3 for all entities as defined by record 1, field 8. +Records 1 thru n are repeated for each group in the model. +Entity node leaf id. and the component/ ham id. are zero for all +entities except "reference point", "reference point series" +and "coordinate system". + +Example: + + -1 +2467 + 11 0 0 0 0 0 0 3 +Group_1 + 8 1 0 0 8 2 0 0 + 8 3 0 0 + -1 + """ +import numpy as np +import math + +import pyuff.datasets.dataset_2467 +from ..tools import _opt_fields, _parse_header_line, check_dict_for_none + +def _write2467(fh, dset): + try: + dict = {'active_constraint_set_no_for_group': 0, + 'active_restraint_set_no_for_group': 0, + 'active_load_set_no_for_group': 0, + 'active_dof_set_no_for_group': 0, + 'active_temperature_set_no_for_group': 0, + 'active_contact_set_no_for_group': 0} + + dset = _opt_fields(dset, dict) + fh.write('%6i\n%6i\n' % (-1, 2467)) + + for group in dset['groups']: + # Record 1 + # Field 8 (last field) contains the number or entities in the group + fh.write('%10i%10i%10i%10i%10i%10i%10i%10i\n' % (group['group_number'], + group['active_constraint_set_no_for_group'], + group['active_restraint_set_no_for_group'], + group['active_load_set_no_for_group'], + group['active_dof_set_no_for_group'], + group['active_temperature_set_no_for_group'], + group['active_contact_set_no_for_group'], + len(group['entity_type_code']))) + # Record 2 + fh.write('%-40s\n' % (group['group_name'])) + + # Record 3-N + # Write the full lines (which have 4 pairs) + end = len(group['entity_type_code']) + for i in range(0, end, 2): + if end-i > 1: + fh.write('%10i%10i%10i%10i%10i%10i%10i%10i\n' % (group['entity_type_code'][i], + group['entity_tag'][i], + group['entity_node_leaf_id'][i], + group['entity_component_id'][i], + group['entity_type_code'][i+1], + group['entity_tag'][i+1], + group['entity_node_leaf_id'][i+1], + group['entity_component_id'][i+1])) + else: + fh.write('%10i%10i%10i%10i\n' % (group['entity_type_code'][i], + group['entity_tag'][i], + group['entity_node_leaf_id'][i], + group['entity_component_id'][i])) + fh.write('%6i\n' % -1) + + except: + raise Exception('Error writing data-set #2467') + +def _extract2467(block_data): + '''Extract physical groups -- data-set 2467.''' + dset = {'type': 2467, 'groups': []} + split_data = block_data.splitlines(True)[2:] + + group_ids = [] + constraint_sets = [] + restraint_sets = [] + load_sets = [] + dof_sets = [] + temp_sets = [] + contact_sets = [] + num_entities = [] + group_names = [] + + ent_types = [] + ent_tags = [] + ent_node_ids = [] + ent_comp_ids = [] + + lineIndex = 0 + while lineIndex < len(split_data): + group = {} + print(f"<{split_data[lineIndex]}>") + group.update( + _parse_header_line(split_data[lineIndex], 8, [10, 10, 10, 10, 10, 10, 10, 10], [2, 2, 2, 2, 2, 2, 2, 2], + ['group_number', 'active_constraint_set_no_for_group', + 'active_restraint_set_no_for_group', 'active_load_set_no_for_group', + 'active_dof_set_no_for_group', 'active_temperature_set_no_for_group', + 'active_contact_set_no_for_group', 'number_of_entities_in_group'])) + group.update(_parse_header_line(split_data[lineIndex + 1], 1, [40], [1], ['group_name'])) + indexLastLineForGroup = math.ceil(group['number_of_entities_in_group'] / 2) + lineIndex + 2 + # split all lines and then each line in separate integers. Put this in a ndarray + values = [[int(elem) for elem in line.split()] for line in split_data[lineIndex + 2: indexLastLineForGroup]] + # flatten the list and put in ndarray + values = np.array([item for sublist in values for item in sublist], dtype=int) + group['entity_type_code'] = np.array(values[::4].copy(), dtype=int) + group['entity_tag'] = np.array(values[1::4].copy(), dtype=int) + group['entity_node_leaf_id'] = np.array(values[2::4].copy(), dtype=int) + group['entity_component_id'] = np.array(values[3::4].copy(), dtype=int) + print(group) + print("\n\n") + dset['groups'].append(group) # dset is a dictionary, but 'groups' is a list + + lineIndex = indexLastLineForGroup + + dset.update({'group_ids': group_ids, 'active_constraint_set_no_for_group': constraint_sets, 'active_restraint_set_no_for_group': restraint_sets, 'active_load_set_no_for_group': load_sets, 'active_dof_set_no_for_group': dof_sets, 'active_temperature_set_no_for_group': temp_sets, 'active_contact_set_no_for_group': contact_sets, 'num_of_entities_in_group': num_entities, 'group_name': group_names, 'entity_type_code': ent_types, 'entity_tag': ent_tags, 'entity_node_leaf_id': ent_node_ids, 'entity_component_id': ent_comp_ids}) + return dset + + +def prepare_group( + group_number, + group_name, + entity_type_code, + entity_tag, + entity_node_leaf_id, + entity_component_id, + active_constraint_set_no_for_group=0, + active_restraint_set_no_for_group=0, + active_load_set_no_for_group=0, + active_dof_set_no_for_group=0, + active_temperature_set_no_for_group=0, + active_contact_set_no_for_group=0, + return_full_dict=False): + """Name: Permanent Groups + + R-Record, F-Field + + :param group_number: R1 F1, group number + :param group_name: R2 F1, group name + :param entity_type_code: R3-N, entity type code + :param entity_tag: R3-N, entity tag + :param entity_node_leaf_id: R3-N, entity node leaf id. + :param entity_component_id: R3-N, entity component/ ham id. + :param active_constraint_set_no_for_group: R1 F2, active constraint set no. for group + :param active_restraint_set_no_for_group: R1 F3, active restraint set no. for group + :param active_load_set_no_for_group: R1 F3, active restraint set no. for group + :param active_dof_set_no_for_group: R1 F3, active restraint set no. for group + :param active_temperature_set_no_for_group: R1 F3, active restraint set no. for group + :param active_contact_set_no_for_group: R1 F3, active restraint set no. for group + :param return_full_dict: If True full dict with all keys is returned, else only specified arguments are included + + Records 1 and 2 are repeated for each permanent group in the model. + Record 3 is repeated multiple times for each group + """ + + if type(group_number) != int: + raise TypeError('group_number must be integer') + if type(group_name) != str: + raise TypeError('group_name must be string') + if np.array(entity_type_code).dtype != int: + raise TypeError('entity_type_code must all be positive integers') + if np.array(entity_tag).dtype != int: + raise TypeError('entity_tag must all be positive integers') + if np.array(entity_node_leaf_id).dtype != int: + raise TypeError('entity_node_leaf_id must all be positive integers') + if np.array(entity_component_id).dtype != int: + raise TypeError('entity_component_id must all be positive integers') + if type(active_constraint_set_no_for_group) != int: + raise TypeError('active_constraint_set_no_for_group must be integer') + if type(active_restraint_set_no_for_group) != int: + raise TypeError('active_restraint_set_no_for_group must be integer') + if type(active_load_set_no_for_group) != int: + raise TypeError('active_load_set_no_for_group must be integer') + if type(active_dof_set_no_for_group) != int: + raise TypeError('active_dof_set_no_for_group must be integer') + if type(active_temperature_set_no_for_group) != int: + raise TypeError('active_temperature_set_no_for_group must be integer') + if type(active_contact_set_no_for_group) != int: + raise TypeError('active_contact_set_no_for_group must be integer') + + if group_number < 0: + raise ValueError('group_number needs to be a positive integer') + if group_name == '': + raise ValueError('group_name needs to be a non emtpy string') + if active_constraint_set_no_for_group < 0: + raise ValueError('active_constraint_set_no_for_group needs to be a positive integer') + if active_restraint_set_no_for_group < 0: + raise ValueError('active_restraint_set_no_for_group needs to be a positive integer') + if active_load_set_no_for_group < 0: + raise ValueError('active_load_set_no_for_group needs to be a positive integer') + if active_dof_set_no_for_group < 0: + raise ValueError('active_dof_set_no_for_group needs to be a positive integer') + if active_temperature_set_no_for_group < 0: + raise ValueError('active_temperature_set_no_for_group needs to be a positive integer') + if active_contact_set_no_for_group < 0: + raise ValueError('active_contact_set_no_for_group needs to be a positive integer') + + group = { + 'group_number': group_number, + 'group_name': group_name, + 'entity_type_code': entity_type_code, + 'entity_tag': entity_tag, + 'entity_node_leaf_id': entity_node_leaf_id, + 'entity_component_id': entity_component_id, + 'active_constraint_set_no_for_group': active_constraint_set_no_for_group, + 'active_restraint_set_no_for_group': active_restraint_set_no_for_group, + 'active_load_set_no_for_group': active_load_set_no_for_group, + 'active_dof_set_no_for_group': active_dof_set_no_for_group, + 'active_temperature_set_no_for_group': active_dof_set_no_for_group, + 'active_contact_set_no_for_group': active_dof_set_no_for_group, + } + + if return_full_dict is False: + group = check_dict_for_none(group) + + return group + +def prepare_2467( + groups, + return_full_dict = False): + """Name: Permanent Groups + + :param groups: a list of permanent groups + :param return_full_dict: If True full dict with all keys is returned, else only specified arguments are included + """ + # **Test prepare_2467** + #>>> save_to_file = 'test_pyuff' + #>>> myGroup1 = pyuff.prepare_group( + #>>> group_number = 1, + #>>> group_name = 'myGroup', + #>>> entity_type_code = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), + #>>> entity_tag = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), + #>>> active_constraint_set_no_for_group = 0) + #>>> dataset = pyuff.prepare_2467( + #>>> groups = [myGroup1]) + #>>> if save_to_file: + #>>> if os.path.exists(save_to_file): + #>>> os.remove(save_to_file) + #>>> uffwrite = pyuff.UFF(save_to_file) + #>>> uffwrite.write_sets(dataset, mode='add') + #>>> dataset + + if type(groups) != list: + raise TypeError('groups must be in a list, also a single group') + for item in groups: + pyuff.datasets.dataset_2467.prepare_group( + item['group_number'], + item['group_name'], + item['entity_type_code'], + item['entity_tag'], + item['active_constraint_set_no_for_group'], + item['active_restraint_set_no_for_group'], + item['active_load_set_no_for_group'], + item['active_dof_set_no_for_group'], + item['active_temperature_set_no_for_group'], + item['active_contact_set_no_for_group']) + + dataset={ + 'type': 2467, + 'groups': groups, + } + + if return_full_dict is False: + dataset = check_dict_for_none(dataset) + + return dataset diff --git a/pyuff/pyuff.py b/pyuff/pyuff.py index 1d317a4..f2a34d2 100644 --- a/pyuff/pyuff.py +++ b/pyuff/pyuff.py @@ -7,7 +7,7 @@ UFF (Universal File Format) files, i.e., to read from and write to UFF files. Among the variety of UFF formats, only some of the formats (data-set types) frequently used in structural dynamics -are supported: **15, 55, 58, 58b, 82, 151, 164, 2411, 2412, 2414, 2420, 2429** Data-set **58b** +are supported: **15, 55, 58, 58b, 82, 151, 164, 2411, 2412, 2414, 2420, 2429, 2467** Data-set **58b** is actually a hybrid format [1]_ where the signal is written in the binary form, while the header-part is slightly different from 58 but still in the ascii format. @@ -58,8 +58,9 @@ from .datasets.dataset_2414 import _write2414, _extract2414 from .datasets.dataset_2420 import _write2420, _extract2420 from .datasets.dataset_2429 import _write2429, _extract2429 +from .datasets.dataset_2467 import _write2467, _extract2467 -_SUPPORTED_SETS = ['15', '55', '58', '58b', '82', '151','164', '2411', '2412', '2414', '2420', '2429'] +_SUPPORTED_SETS = ['15', '55', '58', '58b', '82', '151','164', '2411', '2412', '2414', '2420', '2429', '2467'] class UFF: @@ -367,6 +368,8 @@ def _read_set(self, n): dset = _extract2420(block_data) elif self._set_types[int(n)] == 2429: dset = _extract2429(block_data) + elif self._set_types[int(n)] == 2467: + dset = _extract2467(block_data) else: dset['type'] = self._set_types[int(n)] # Unsupported data-set - do nothing @@ -436,6 +439,8 @@ def _write_set(self, dset, mode='add', force_double=True): _write2420(fh, dset) elif set_type == 2429: _write2429(fh, dset) + elif set_type == 2467: + _write2467(fh, dset) else: # Unsupported data-set - do nothing pass diff --git a/tests/test_2467.py b/tests/test_2467.py new file mode 100644 index 0000000..8e24035 --- /dev/null +++ b/tests/test_2467.py @@ -0,0 +1,180 @@ +import numpy as np +import sys, os +my_path = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, my_path + '/../') + +import pyuff + +def test_prepare_2467(): + mygroup = pyuff.datasets.dataset_2467.prepare_group( + 1, + 'testGroup', + [8, 8], + [1, 2], + [8, 8], + [1, 2]) + dict_2467 = pyuff.prepare_2467([mygroup], return_full_dict=True) + + x = sorted(list(dict_2467.keys())) + y = sorted(['type', + 'groups']) + np.testing.assert_array_equal(x,y) + + v = sorted(list(dict_2467['groups'][0].keys())) + w = sorted(['group_number', + 'group_name', + 'entity_type_code', + 'entity_tag', + 'entity_node_leaf_id', + 'entity_component_id', + 'active_constraint_set_no_for_group', + 'active_restraint_set_no_for_group', + 'active_load_set_no_for_group', + 'active_dof_set_no_for_group', + 'active_temperature_set_no_for_group', + 'active_contact_set_no_for_group']) + np.testing.assert_array_equal(v,w) + + #empty dictionary test + x2 = pyuff.prepare_2467([mygroup], return_full_dict=True) + + if 'type' not in x2.keys(): + raise Exception('Not correct keys') + if x2['type'] != 2467: + raise Exception('Not correct type') + +def test_write_2467(): + a = pyuff.prepare_2467( + [ + { + 'group_number': 1, + 'group_name': 'One', + 'entity_type_code': [8, 8, 8, 8, 8], + 'entity_tag': [1, 2, 3, 4, 5], + 'entity_node_leaf_id': [2, 2, 2, 2, 2], + 'entity_component_id': [3, 3, 3, 3, 3], + 'active_constraint_set_no_for_group': 5, + 'active_restraint_set_no_for_group': 5, + 'active_load_set_no_for_group': 5, + 'active_dof_set_no_for_group': 5, + 'active_temperature_set_no_for_group': 5, + 'active_contact_set_no_for_group': 5, + }, + { + 'group_number': 2, + 'group_name': 'Two', + 'entity_type_code': [4, 4, 4, 4, 4], + 'entity_tag': [6, 7, 8, 9, 10], + 'entity_node_leaf_id': [2, 2, 2, 2, 2], + 'entity_component_id': [3, 3, 3, 3, 3], + 'active_constraint_set_no_for_group': 6, + 'active_restraint_set_no_for_group': 6, + 'active_load_set_no_for_group': 6, + 'active_dof_set_no_for_group': 6, + 'active_temperature_set_no_for_group': 6, + 'active_contact_set_no_for_group': 6, + } + ], + return_full_dict=True) + + save_to_file = './data/group_output.uff' + if os.path.exists(save_to_file): + os.remove(save_to_file) + _ = pyuff.UFF(save_to_file) + _.write_sets(a, 'add') + + with open(save_to_file, 'r') as f: + written_data = f.read() + comp_str = ''' -1 + 2467 + 1 5 5 5 5 5 5 5 +One + 8 1 2 3 8 2 2 3 + 8 3 2 3 8 4 2 3 + 8 5 2 3 + 2 6 6 6 6 6 6 5 +Two + 4 6 2 3 4 7 2 3 + 4 8 2 3 4 9 2 3 + 4 10 2 3 + -1 +''' + assert written_data == comp_str + + if os.path.exists(save_to_file): + os.remove(save_to_file) + +def test_read_2467(): + uff_ascii = pyuff.UFF('./data/groups_test.uff') + sets = uff_ascii.get_set_types() + a = uff_ascii.read_sets(4) + + assert a['type'] == 2467 + assert len(a['groups']) == 3 + + assert a['groups'][0]['number_of_entities_in_group'] == 4 + assert a['groups'][1]['number_of_entities_in_group'] == 4 + assert a['groups'][2]['number_of_entities_in_group'] == 136 + + assert len(a['groups'][0]['entity_tag']) == 4 + assert len(a['groups'][1]['entity_tag']) == 4 + assert len(a['groups'][2]['entity_tag']) == 136 + + assert a['groups'][0]['group_name'] == 'Left_Side' + assert a['groups'][1]['group_name'] == 'Right_Side' + assert a['groups'][2]['group_name'] == 'Surface' + + np.testing.assert_array_equal(a['groups'][0]['entity_tag'], np.array([110, 117, 122, 135])) + np.testing.assert_array_equal(a['groups'][1]['entity_tag'], np.array([168, 190, 191, 192])) + +def test_write_read_2467(): + groups = [ + { + 'group_number': 1, + 'group_name': 'One', + 'entity_type_code': [8, 8, 8, 8, 8], + 'entity_tag': [1, 2, 3, 4, 5], + 'entity_node_leaf_id': [2, 2, 2, 2, 2], + 'entity_component_id': [3, 3, 3, 3, 3], + 'active_constraint_set_no_for_group': 5, + 'active_restraint_set_no_for_group': 5, + 'active_load_set_no_for_group': 5, + 'active_dof_set_no_for_group': 5, + 'active_temperature_set_no_for_group': 5, + 'active_contact_set_no_for_group': 5, + }, + { + 'group_number': 2, + 'group_name': 'Two', + 'entity_type_code': [4, 4, 4, 4, 4], + 'entity_tag': [6, 7, 8, 9, 10], + 'entity_node_leaf_id': [2, 2, 2, 2, 2], + 'entity_component_id': [3, 3, 3, 3, 3], + 'active_constraint_set_no_for_group': 6, + 'active_restraint_set_no_for_group': 6, + 'active_load_set_no_for_group': 6, + 'active_dof_set_no_for_group': 6, + 'active_temperature_set_no_for_group': 6, + 'active_contact_set_no_for_group': 6, + } + ] + + a = pyuff.prepare_2467(groups=groups, return_full_dict=True) + save_to_file = './data/group_output.uff' + if os.path.exists(save_to_file): + os.remove(save_to_file) + _ = pyuff.UFF(save_to_file) + _.write_sets(a, 'add') + + uff_ascii = pyuff.UFF(save_to_file) + groups_read = uff_ascii.read_sets(0)['groups'] + + for group, group_read in zip(groups, groups_read): + for key in group.keys(): + np.testing.assert_array_equal(group[key], group_read[key]) + + if os.path.exists(save_to_file): + os.remove(save_to_file) + +if __name__ == '__main__': + test_write_read_2467() \ No newline at end of file