diff --git a/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.ele b/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.ele new file mode 100644 index 0000000000000000000000000000000000000000..06649ceaea192490ec3c7bcb6e4b2a84b8d220c5 --- /dev/null +++ b/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.ele @@ -0,0 +1,726 @@ +724 4 0 + 1 48 170 84 171 + 2 78 202 171 213 + 3 16 48 45 171 + 4 128 159 108 191 + 5 167 168 77 200 + 6 72 166 25 199 + 7 8 197 44 198 + 8 162 166 72 199 + 9 50 84 83 196 + 10 67 126 17 172 + 11 48 125 45 171 + 12 103 150 63 210 + 13 102 177 59 194 + 14 119 172 75 213 + 15 10 157 69 208 + 16 126 167 119 172 + 17 30 157 107 190 + 18 52 182 180 209 + 19 88 192 105 205 + 20 152 194 104 203 + 21 107 187 150 190 + 22 23 141 86 192 + 23 97 99 140 184 + 24 55 189 133 207 + 25 97 138 31 151 + 26 35 142 60 194 + 27 27 118 74 164 + 28 101 127 21 152 + 29 126 171 167 200 + 30 90 109 55 133 + 31 21 178 152 203 + 32 134 173 93 174 + 33 27 83 50 84 + 34 85 127 29 211 + 35 164 176 111 202 + 36 65 153 105 156 + 37 149 186 59 203 + 38 88 87 129 130 + 39 23 141 97 151 + 40 177 178 136 203 + 41 76 164 43 198 + 42 84 176 126 202 + 43 89 116 90 133 + 44 40 112 71 113 + 45 40 70 71 112 + 46 125 126 45 171 + 47 133 161 66 176 + 48 65 105 14 156 + 49 66 189 187 207 + 50 67 68 38 110 + 51 60 144 62 61 + 52 124 165 33 204 + 53 52 128 108 191 + 54 26 90 89 116 + 55 114 164 76 198 + 56 150 190 104 192 + 57 59 186 102 194 + 58 69 157 103 190 + 59 120 170 196 122 + 60 116 164 117 197 + 61 5 112 41 113 + 62 37 110 107 157 + 63 132 181 32 189 + 64 121 122 18 196 + 65 84 123 27 202 + 66 73 195 163 199 + 67 182 204 137 209 + 68 140 97 23 99 + 69 96 136 135 178 + 70 28 80 57 81 + 71 23 99 97 141 + 72 153 156 63 193 + 73 100 152 21 178 + 74 148 151 146 190 + 75 115 43 15 213 + 76 138 186 139 188 + 77 48 125 84 170 + 78 105 153 65 155 + 79 108 204 182 209 + 80 104 193 192 205 + 81 18 83 40 121 + 82 32 111 89 133 + 83 59 95 94 149 + 84 135 136 34 178 + 85 95 137 132 189 + 86 57 80 52 108 + 87 104 151 149 186 + 88 186 194 59 203 + 89 152 191 150 193 + 90 115 197 8 198 + 91 170 125 201 48 + 92 140 183 7 184 + 93 9 108 52 128 + 94 70 5 71 112 + 95 44 116 26 117 + 96 84 126 125 171 + 97 66 159 126 161 + 98 52 191 108 209 + 99 41 112 72 113 + 100 108 191 159 209 + 101 125 170 201 160 + 102 77 168 167 169 + 103 103 157 30 190 + 104 52 9 57 108 + 105 127 152 101 193 + 106 38 68 37 110 + 107 133 189 66 207 + 108 8 76 115 198 + 109 65 153 143 154 + 110 31 151 138 206 + 111 62 144 6 61 + 112 192 193 105 205 + 113 153 154 101 211 + 114 72 163 111 199 + 115 13 101 100 212 + 116 104 187 150 191 + 117 13 154 101 212 + 118 23 97 86 151 + 119 102 61 144 194 + 120 153 193 63 211 + 121 20 159 126 160 + 122 14 88 130 156 + 123 30 107 37 159 + 124 65 154 2 155 + 125 42 111 89 162 + 126 85 150 30 191 + 127 194 205 142 212 + 128 97 141 99 151 + 129 120 82 50 170 + 130 22 60 61 102 + 131 66 161 126 176 + 132 30 128 85 191 + 133 59 139 102 186 + 134 54 89 26 90 + 135 70 112 40 114 + 136 66 159 107 187 + 137 32 132 91 181 + 138 49 124 80 160 + 139 56 91 12 92 + 140 126 159 37 161 + 141 78 168 46 169 + 142 144 177 102 194 + 143 113 121 40 196 + 144 86 148 129 192 + 145 7 184 183 185 + 146 17 109 90 133 + 147 141 192 88 205 + 148 167 168 45 169 + 149 97 184 139 185 + 150 2 154 64 155 + 151 111 195 181 199 + 152 78 123 47 171 + 153 84 176 111 195 + 154 49 160 80 201 + 155 43 197 115 198 + 156 38 67 24 68 + 157 93 174 173 189 + 158 150 152 104 191 + 159 24 167 77 200 + 160 122 170 49 201 + 161 71 112 5 113 + 162 163 195 111 199 + 163 17 172 126 176 + 164 124 160 49 195 + 165 37 106 30 159 + 166 40 113 71 121 + 167 136 178 96 203 + 168 127 191 152 193 + 169 67 167 126 172 + 170 139 185 102 186 + 171 66 187 107 207 + 172 104 187 149 206 + 173 40 74 19 114 + 174 84 170 123 171 + 175 107 110 37 161 + 176 42 164 114 198 + 177 63 193 150 211 + 178 39 161 107 207 + 179 50 123 84 170 + 180 49 170 160 201 + 181 46 168 4 169 + 182 84 170 49 196 + 183 49 195 84 196 + 184 183 184 99 185 + 185 111 114 42 164 + 186 31 158 146 190 + 187 109 161 39 207 + 188 54 90 55 175 + 189 44 197 117 198 + 190 111 163 84 195 + 191 117 164 42 198 + 192 73 121 113 163 + 193 86 97 31 151 + 194 90 133 55 175 + 195 125 160 84 170 + 196 80 160 81 201 + 197 160 176 126 195 + 198 144 100 34 177 + 199 139 149 59 188 + 200 103 146 69 190 + 201 74 114 40 163 + 202 107 150 30 190 + 203 74 118 43 164 + 204 4 168 77 169 + 205 27 84 50 123 + 206 189 206 187 207 + 207 151 192 141 205 + 208 163 195 73 196 + 209 71 18 40 121 + 210 149 151 138 186 + 211 43 118 15 213 + 212 35 145 141 205 + 213 146 148 86 151 + 214 100 194 152 203 + 215 36 138 97 139 + 216 147 192 190 210 + 217 107 158 39 207 + 218 95 132 94 149 + 219 60 102 22 145 + 220 183 140 99 184 + 221 89 111 32 162 + 222 28 81 48 201 + 223 34 177 100 178 + 224 146 147 53 148 + 225 111 162 72 199 + 226 60 142 13 194 + 227 181 195 66 204 + 228 108 160 33 204 + 229 31 138 93 206 + 230 119 167 126 171 + 231 107 161 66 207 + 232 180 191 52 209 + 233 126 202 176 213 + 234 45 126 68 200 + 235 53 146 103 147 + 236 38 37 10 110 + 237 15 118 78 213 + 238 101 152 100 212 + 239 138 151 149 206 + 240 26 116 89 117 + 241 10 110 37 157 + 242 171 202 126 213 + 243 129 147 87 148 + 244 100 101 21 152 + 245 97 98 36 139 + 246 52 80 33 108 + 247 48 170 79 201 + 248 98 184 7 185 + 249 153 154 65 155 + 250 55 173 133 189 + 251 149 151 104 206 + 252 143 2 65 154 + 253 78 171 119 213 + 254 58 108 9 128 + 255 9 52 51 128 + 256 60 62 144 194 + 257 94 138 93 188 + 258 132 149 95 189 + 259 9 58 57 108 + 260 104 190 151 192 + 261 105 192 156 193 + 262 69 103 53 146 + 263 70 40 19 114 + 264 95 149 137 189 + 265 192 193 150 210 + 266 58 81 57 108 + 267 102 145 60 194 + 268 57 81 80 108 + 269 52 127 51 191 + 270 12 92 91 179 + 271 60 61 102 194 + 272 150 192 104 193 + 273 30 150 103 190 + 274 130 88 87 156 + 275 13 142 100 194 + 276 53 147 129 148 + 277 125 126 84 160 + 278 55 109 39 207 + 279 129 131 88 130 + 280 30 159 128 191 + 281 86 141 23 151 + 282 153 155 105 193 + 283 40 114 112 163 + 284 27 196 84 202 + 285 85 128 51 191 + 286 160 195 33 204 + 287 94 134 93 174 + 288 109 133 17 161 + 289 109 110 39 161 + 290 84 160 49 170 + 291 89 90 54 175 + 292 96 137 92 179 + 293 31 146 86 151 + 294 117 197 164 198 + 295 15 78 46 119 + 296 91 92 56 166 + 297 112 113 40 163 + 298 45 168 167 200 + 299 68 126 67 200 + 300 136 177 34 178 + 301 49 122 121 196 + 302 92 137 91 179 + 303 63 103 85 150 + 304 92 165 56 166 + 305 167 171 45 200 + 306 81 160 125 201 + 307 29 85 51 127 + 308 46 119 78 169 + 309 172 176 75 213 + 310 131 130 129 3 + 311 88 129 87 192 + 312 119 171 126 213 + 313 39 158 55 207 + 314 105 193 155 212 + 315 15 119 75 213 + 316 33 182 108 204 + 317 104 187 152 203 + 318 16 123 48 171 + 319 107 159 66 161 + 320 123 170 48 171 + 321 84 125 48 171 + 322 124 195 165 204 + 323 146 151 31 190 + 324 74 83 27 163 + 325 37 159 107 161 + 326 47 4 46 168 + 327 136 149 59 203 + 328 20 68 45 126 + 329 82 123 50 170 + 330 20 106 68 126 + 331 37 110 68 161 + 332 80 81 28 201 + 333 24 68 67 200 + 334 46 78 47 168 + 335 67 126 68 161 + 336 93 138 134 188 + 337 68 106 37 126 + 338 20 126 125 160 + 339 163 196 27 202 + 340 72 114 111 163 + 341 33 108 80 160 + 342 55 173 54 175 + 343 45 125 20 126 + 344 50 170 84 196 + 345 133 173 55 175 + 346 80 124 33 160 + 347 63 193 156 210 + 348 68 126 37 161 + 349 104 152 150 193 + 350 133 164 116 176 + 351 145 194 186 205 + 352 126 160 66 176 + 353 107 206 158 207 + 354 12 96 92 179 + 355 118 164 27 202 + 356 164 197 43 198 + 357 89 133 90 175 + 358 67 109 17 161 + 359 105 193 35 205 + 360 55 133 109 207 + 361 33 160 124 195 + 362 173 174 11 175 + 363 137 187 149 203 + 364 79 170 122 201 + 365 39 158 107 190 + 366 150 191 85 211 + 367 40 121 83 196 + 368 32 133 132 189 + 369 56 165 25 166 + 370 42 114 111 162 + 371 141 145 99 205 + 372 27 163 83 196 + 373 92 137 96 182 + 374 149 187 104 203 + 375 126 167 67 200 + 376 137 180 96 182 + 377 102 186 145 194 + 378 62 60 13 194 + 379 15 75 115 213 + 380 85 103 30 150 + 381 49 160 84 195 + 382 137 181 66 204 + 383 59 149 139 186 + 384 98 139 97 184 + 385 51 127 85 191 + 386 149 187 137 189 + 387 91 166 32 181 + 388 139 184 98 185 + 389 31 190 151 206 + 390 100 178 177 194 + 391 150 187 107 191 + 392 149 186 138 188 + 393 51 128 52 191 + 394 108 182 52 209 + 395 59 136 95 149 + 396 93 138 94 149 + 397 94 149 132 189 + 398 132 133 32 175 + 399 135 136 96 179 + 400 92 182 33 204 + 401 137 187 66 189 + 402 137 181 132 189 + 403 88 141 23 192 + 404 187 206 107 207 + 405 107 110 39 208 + 406 37 126 106 159 + 407 94 149 138 188 + 408 11 173 134 174 + 409 159 191 187 209 + 410 13 100 62 194 + 411 105 155 142 212 + 412 35 205 193 212 + 413 152 187 104 191 + 414 60 145 35 194 + 415 14 105 88 156 + 416 33 165 92 204 + 417 133 181 66 189 + 418 107 190 157 208 + 419 39 190 107 208 + 420 20 125 81 160 + 421 80 108 81 160 + 422 100 177 144 194 + 423 138 139 36 188 + 424 49 170 122 196 + 425 132 174 94 189 + 426 139 186 149 188 + 427 134 138 36 188 + 428 144 62 100 194 + 429 91 137 92 181 + 430 92 166 91 181 + 431 107 187 159 191 + 432 141 151 86 192 + 433 165 199 181 204 + 434 150 159 30 191 + 435 129 148 87 192 + 436 100 142 13 212 + 437 52 180 21 191 + 438 107 159 150 191 + 439 142 205 35 212 + 440 37 107 30 157 + 441 21 127 52 191 + 442 92 181 137 204 + 443 129 88 131 192 + 444 103 147 146 190 + 445 137 182 92 204 + 446 87 156 88 192 + 447 91 137 95 179 + 448 135 96 12 179 + 449 164 202 118 213 + 450 110 157 10 208 + 451 101 193 152 212 + 452 152 205 194 212 + 453 21 152 127 191 + 454 193 205 152 212 + 455 59 149 94 188 + 456 30 106 58 159 + 457 67 110 109 161 + 458 68 110 67 161 + 459 66 204 108 209 + 460 32 181 133 189 + 461 17 126 67 161 + 462 106 126 20 159 + 463 111 114 72 162 + 464 40 83 74 163 + 465 48 79 28 201 + 466 30 150 107 159 + 467 108 128 58 159 + 468 58 128 30 159 + 469 39 110 107 161 + 470 83 121 18 196 + 471 134 94 93 188 + 472 86 129 131 192 + 473 126 159 66 160 + 474 66 159 108 160 + 475 166 181 165 199 + 476 186 194 104 205 + 477 81 108 58 160 + 478 108 159 58 160 + 479 81 106 20 160 + 480 106 159 20 160 + 481 99 186 151 205 + 482 52 108 33 182 + 483 178 194 100 203 + 484 78 169 119 171 + 485 58 106 81 160 + 486 58 159 106 160 + 487 112 114 72 163 + 488 111 164 133 176 + 489 54 173 11 175 + 490 177 194 178 203 + 491 25 166 165 199 + 492 19 74 43 164 + 493 19 114 74 164 + 494 111 163 114 164 + 495 114 163 74 164 + 496 152 178 100 203 + 497 111 181 162 199 + 498 76 19 43 164 + 499 76 114 19 164 + 500 89 117 116 164 + 501 116 133 89 164 + 502 42 117 89 164 + 503 89 111 42 164 + 504 89 133 111 164 + 505 48 82 79 170 + 506 82 48 16 170 + 507 48 123 16 170 + 508 16 123 82 170 + 509 43 115 76 198 + 510 75 164 116 197 + 511 126 171 84 202 + 512 84 196 163 202 + 513 84 171 123 202 + 514 78 118 27 202 + 515 120 1 82 170 + 516 120 122 1 170 + 517 82 1 79 170 + 518 1 122 79 170 + 519 47 168 78 171 + 520 45 168 47 171 + 521 16 45 47 171 + 522 47 123 16 171 + 523 59 194 177 203 + 524 152 191 21 203 + 525 32 133 89 175 + 526 104 186 149 203 + 527 119 169 167 171 + 528 167 169 45 171 + 529 45 169 168 171 + 530 168 169 78 171 + 531 104 194 186 203 + 532 59 177 136 203 + 533 137 149 95 203 + 534 95 149 136 203 + 535 17 161 133 176 + 536 126 161 17 176 + 537 116 164 75 176 + 538 75 172 116 176 + 539 90 133 116 176 + 540 116 172 90 176 + 541 17 133 90 176 + 542 90 172 17 176 + 543 150 193 63 210 + 544 195 199 165 204 + 545 66 181 137 189 + 546 81 125 48 201 + 547 165 166 92 181 + 548 32 162 111 181 + 549 32 166 162 181 + 550 45 171 126 200 + 551 111 133 32 181 + 552 147 148 146 190 + 553 105 156 153 193 + 554 66 161 133 207 + 555 91 132 95 181 + 556 132 137 95 181 + 557 95 137 91 181 + 558 99 151 141 205 + 559 111 176 133 181 + 560 133 176 66 181 + 561 66 176 111 181 + 562 40 163 113 196 + 563 145 186 99 205 + 564 88 105 35 205 + 565 113 163 121 196 + 566 84 195 163 196 + 567 121 163 73 196 + 568 187 191 152 203 + 569 83 163 40 196 + 570 83 84 27 196 + 571 138 149 93 206 + 572 107 190 158 206 + 573 97 151 99 186 + 574 144 61 60 194 + 575 187 190 107 206 + 576 157 190 69 208 + 577 22 145 102 186 + 578 102 185 22 186 + 579 104 192 151 205 + 580 126 176 84 195 + 581 67 167 24 200 + 582 116 117 44 197 + 583 97 139 138 186 + 584 138 151 97 186 + 585 162 181 166 199 + 586 66 181 111 195 + 587 99 145 22 186 + 588 97 185 139 186 + 589 66 176 160 195 + 590 183 99 22 186 + 591 183 185 99 186 + 592 22 185 183 186 + 593 99 184 97 186 + 594 99 185 184 186 + 595 184 185 97 186 + 596 111 176 66 195 + 597 84 160 126 195 + 598 35 141 88 205 + 599 87 148 147 192 + 600 137 204 66 209 + 601 86 151 148 192 + 602 181 199 195 204 + 603 174 175 173 189 + 604 173 175 133 189 + 605 132 175 174 189 + 606 133 175 132 189 + 607 133 161 109 207 + 608 159 187 66 209 + 609 93 149 94 189 + 610 94 174 93 189 + 611 146 190 158 208 + 612 158 190 39 208 + 613 66 187 137 209 + 614 180 182 137 209 + 615 108 159 66 209 + 616 190 192 150 210 + 617 85 191 127 211 + 618 127 193 101 211 + 619 101 193 153 211 + 620 103 190 150 210 + 621 69 190 146 208 + 622 88 156 105 192 + 623 63 150 85 211 + 624 23 131 88 192 + 625 86 131 23 192 + 626 151 190 148 192 + 627 148 190 147 192 + 628 101 154 143 211 + 629 29 127 101 211 + 630 29 101 143 211 + 631 143 154 153 211 + 632 78 119 15 213 + 633 118 202 78 213 + 634 33 195 124 204 + 635 93 158 31 206 + 636 158 190 31 206 + 637 107 157 110 208 + 638 66 160 108 204 + 639 165 181 92 204 + 640 66 195 160 204 + 641 156 193 192 210 + 642 149 189 93 206 + 643 187 189 149 206 + 644 170 120 196 50 + 645 73 124 121 196 + 646 73 195 124 196 + 647 121 124 49 196 + 648 124 195 49 196 + 649 50 83 18 196 + 650 50 18 120 196 + 651 18 122 120 196 + 652 151 186 104 205 + 653 73 165 124 199 + 654 165 195 124 199 + 655 124 195 73 199 + 656 73 163 113 199 + 657 25 165 73 199 + 658 73 113 41 199 + 659 41 113 72 199 + 660 113 72 163 112 + 661 72 113 163 199 + 662 41 72 25 199 + 663 25 73 41 199 + 664 111 176 84 202 + 665 27 123 78 202 + 666 123 171 78 202 + 667 84 163 111 202 + 668 163 164 111 202 + 669 74 163 27 202 + 670 74 164 163 202 + 671 27 164 74 202 + 672 95 179 137 203 + 673 136 179 95 203 + 674 137 179 96 203 + 675 96 179 136 203 + 676 96 178 21 203 + 677 147 190 103 210 + 678 156 192 87 210 + 679 87 192 147 210 + 680 96 180 137 203 + 681 21 180 96 203 + 682 35 194 145 205 + 683 43 164 118 213 + 684 142 194 35 205 + 685 152 193 104 205 + 686 104 194 152 205 + 687 126 176 172 213 + 688 126 172 119 213 + 689 151 190 104 206 + 690 150 187 104 206 + 691 150 190 187 206 + 692 104 190 150 206 + 693 93 206 189 207 + 694 158 206 93 207 + 695 158 173 55 207 + 696 173 189 55 207 + 697 93 173 158 207 + 698 93 189 173 207 + 699 187 203 137 209 + 700 137 203 180 209 + 701 191 203 187 209 + 702 21 191 180 209 + 703 21 203 191 209 + 704 180 203 21 209 + 705 150 193 191 211 + 706 191 193 127 211 + 707 13 142 64 212 + 708 64 154 13 212 + 709 152 194 100 212 + 710 100 194 142 212 + 711 105 142 35 212 + 712 35 193 105 212 + 713 64 155 154 212 + 714 142 155 64 212 + 715 154 155 153 212 + 716 155 193 153 212 + 717 101 154 153 212 + 718 153 193 101 212 + 719 75 176 164 213 + 720 176 202 164 213 + 721 43 197 164 213 + 722 164 197 75 213 + 723 75 197 115 213 + 724 115 197 43 213 +# Generated by tetgen -qfa0.005 beam.poly diff --git a/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.face b/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.face new file mode 100644 index 0000000000000000000000000000000000000000..df487d717837b81fce0b0e43c5081c3e67faa0b4 --- /dev/null +++ b/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.face @@ -0,0 +1,1619 @@ +1617 1 + 1 48 170 84 0 + 2 48 171 170 0 + 3 170 171 84 0 + 4 84 171 48 0 + 5 78 202 171 0 + 6 78 213 202 0 + 7 202 213 171 0 + 8 171 213 78 0 + 9 16 48 45 1 + 10 16 171 48 0 + 11 48 171 45 0 + 12 45 171 16 0 + 13 128 159 108 0 + 14 128 191 159 0 + 15 159 191 108 0 + 16 108 191 128 0 + 17 167 168 77 0 + 18 167 200 168 0 + 19 168 200 77 1 + 20 77 200 167 0 + 21 72 166 25 1 + 22 72 199 166 0 + 23 166 199 25 0 + 24 25 199 72 0 + 25 8 197 44 4 + 26 8 198 197 0 + 27 197 198 44 0 + 28 44 198 8 1 + 29 162 166 72 1 + 30 162 199 166 0 + 31 72 199 162 0 + 32 50 84 83 0 + 33 50 196 84 0 + 34 84 196 83 0 + 35 83 196 50 0 + 36 67 126 17 0 + 37 67 172 126 0 + 38 126 172 17 0 + 39 17 172 67 4 + 40 48 125 45 1 + 41 48 171 125 0 + 42 125 171 45 0 + 43 103 150 63 0 + 44 103 210 150 0 + 45 150 210 63 0 + 46 63 210 103 1 + 47 102 177 59 1 + 48 102 194 177 0 + 49 177 194 59 0 + 50 59 194 102 0 + 51 119 172 75 4 + 52 119 213 172 0 + 53 172 213 75 0 + 54 75 213 119 0 + 55 10 157 69 1 + 56 10 208 157 0 + 57 157 208 69 0 + 58 69 208 10 4 + 59 126 167 119 0 + 60 126 172 167 0 + 61 167 172 119 4 + 62 119 172 126 0 + 63 30 157 107 0 + 64 30 190 157 0 + 65 157 190 107 0 + 66 107 190 30 0 + 67 52 182 180 2 + 68 52 209 182 0 + 69 182 209 180 0 + 70 180 209 52 0 + 71 88 192 105 0 + 72 88 205 192 0 + 73 192 205 105 0 + 74 105 205 88 0 + 75 152 194 104 0 + 76 152 203 194 0 + 77 194 203 104 0 + 78 104 203 152 0 + 79 107 187 150 0 + 80 107 190 187 0 + 81 187 190 150 0 + 82 150 190 107 0 + 83 23 141 86 0 + 84 23 192 141 0 + 85 141 192 86 0 + 86 86 192 23 0 + 87 97 99 140 0 + 88 97 184 99 0 + 89 99 184 140 0 + 90 140 184 97 4 + 91 55 189 133 0 + 92 55 207 189 0 + 93 189 207 133 0 + 94 133 207 55 0 + 95 97 138 31 4 + 96 97 151 138 0 + 97 138 151 31 0 + 98 31 151 97 0 + 99 35 142 60 3 + 100 35 194 142 0 + 101 142 194 60 0 + 102 60 194 35 0 + 103 27 118 74 5 + 104 27 164 118 0 + 105 118 164 74 0 + 106 74 164 27 0 + 107 101 127 21 2 + 108 101 152 127 0 + 109 127 152 21 0 + 110 21 152 101 0 + 111 126 171 167 0 + 112 126 200 171 0 + 113 171 200 167 0 + 114 167 200 126 0 + 115 90 109 55 4 + 116 90 133 109 0 + 117 109 133 55 0 + 118 55 133 90 0 + 119 21 178 152 0 + 120 21 203 178 0 + 121 178 203 152 0 + 122 152 203 21 0 + 123 134 173 93 4 + 124 134 174 173 0 + 125 173 174 93 0 + 126 93 174 134 0 + 127 27 83 50 5 + 128 27 84 83 0 + 129 50 84 27 0 + 130 85 127 29 0 + 131 85 211 127 0 + 132 127 211 29 0 + 133 29 211 85 1 + 134 164 176 111 0 + 135 164 202 176 0 + 136 176 202 111 0 + 137 111 202 164 0 + 138 65 153 105 0 + 139 65 156 153 1 + 140 153 156 105 0 + 141 105 156 65 0 + 142 149 186 59 0 + 143 149 203 186 0 + 144 186 203 59 0 + 145 59 203 149 0 + 146 88 87 129 0 + 147 88 130 87 0 + 148 87 130 129 1 + 149 129 130 88 0 + 150 23 141 97 0 + 151 23 151 141 0 + 152 141 151 97 0 + 153 97 151 23 0 + 154 177 178 136 0 + 155 177 203 178 0 + 156 178 203 136 0 + 157 136 203 177 0 + 158 76 164 43 0 + 159 76 198 164 0 + 160 164 198 43 0 + 161 43 198 76 0 + 162 84 176 126 0 + 163 84 202 176 0 + 164 176 202 126 0 + 165 126 202 84 0 + 166 89 116 90 0 + 167 89 133 116 0 + 168 116 133 90 0 + 169 90 133 89 0 + 170 40 112 71 0 + 171 40 113 112 0 + 172 112 113 71 0 + 173 71 113 40 0 + 174 40 70 71 5 + 175 40 112 70 0 + 176 70 112 71 0 + 177 125 126 45 0 + 178 125 171 126 0 + 179 126 171 45 0 + 180 133 161 66 0 + 181 133 176 161 0 + 182 161 176 66 0 + 183 66 176 133 0 + 184 65 105 14 3 + 185 105 156 14 0 + 186 14 156 65 1 + 187 66 189 187 0 + 188 66 207 189 0 + 189 189 207 187 0 + 190 187 207 66 0 + 191 67 68 38 0 + 192 67 110 68 0 + 193 68 110 38 0 + 194 38 110 67 4 + 195 60 144 62 0 + 196 60 61 144 0 + 197 144 61 62 0 + 198 62 61 60 3 + 199 124 165 33 2 + 200 124 204 165 0 + 201 165 204 33 0 + 202 33 204 124 0 + 203 52 128 108 0 + 204 52 191 128 0 + 205 108 191 52 0 + 206 26 90 89 0 + 207 26 116 90 4 + 208 89 116 26 0 + 209 114 164 76 0 + 210 114 198 164 0 + 211 76 198 114 1 + 212 150 190 104 0 + 213 150 192 190 0 + 214 190 192 104 0 + 215 104 192 150 0 + 216 59 186 102 0 + 217 59 194 186 0 + 218 186 194 102 0 + 219 69 157 103 1 + 220 69 190 157 0 + 221 157 190 103 0 + 222 103 190 69 0 + 223 120 170 196 0 + 224 120 122 170 0 + 225 170 122 196 0 + 226 196 122 120 0 + 227 116 164 117 0 + 228 116 197 164 0 + 229 164 197 117 0 + 230 117 197 116 0 + 231 5 112 41 1 + 232 5 113 112 0 + 233 112 113 41 0 + 234 41 113 5 2 + 235 37 110 107 0 + 236 37 157 110 0 + 237 110 157 107 0 + 238 107 157 37 0 + 239 132 181 32 0 + 240 132 189 181 0 + 241 181 189 32 0 + 242 32 189 132 0 + 243 121 122 18 2 + 244 121 196 122 0 + 245 122 196 18 0 + 246 18 196 121 0 + 247 84 123 27 0 + 248 84 202 123 0 + 249 123 202 27 0 + 250 27 202 84 0 + 251 73 195 163 0 + 252 73 199 195 0 + 253 195 199 163 0 + 254 163 199 73 0 + 255 182 204 137 0 + 256 182 209 204 0 + 257 204 209 137 0 + 258 137 209 182 0 + 259 140 97 23 4 + 260 97 99 23 0 + 261 23 99 140 3 + 262 96 136 135 0 + 263 96 178 136 0 + 264 136 178 135 0 + 265 135 178 96 2 + 266 28 80 57 2 + 267 28 81 80 0 + 268 80 81 57 0 + 269 57 81 28 1 + 270 23 141 99 3 + 271 99 141 97 0 + 272 153 156 63 1 + 273 153 193 156 0 + 274 156 193 63 0 + 275 63 193 153 0 + 276 100 152 21 0 + 277 100 178 152 0 + 278 21 178 100 2 + 279 148 151 146 0 + 280 148 190 151 0 + 281 151 190 146 0 + 282 146 190 148 0 + 283 115 43 15 5 + 284 115 213 43 0 + 285 43 213 15 0 + 286 15 213 115 0 + 287 138 186 139 0 + 288 138 188 186 0 + 289 186 188 139 0 + 290 139 188 138 0 + 291 48 125 84 0 + 292 48 170 125 0 + 293 125 170 84 0 + 294 105 155 153 0 + 295 153 155 65 0 + 296 65 155 105 3 + 297 108 204 182 0 + 298 108 209 204 0 + 299 182 209 108 0 + 300 104 193 192 0 + 301 104 205 193 0 + 302 193 205 192 0 + 303 192 205 104 0 + 304 18 83 40 5 + 305 18 121 83 0 + 306 83 121 40 0 + 307 40 121 18 0 + 308 32 111 89 0 + 309 32 133 111 0 + 310 111 133 89 0 + 311 89 133 32 0 + 312 59 95 94 1 + 313 59 149 95 0 + 314 95 149 94 0 + 315 94 149 59 0 + 316 135 136 34 1 + 317 136 178 34 0 + 318 34 178 135 2 + 319 95 137 132 0 + 320 95 189 137 0 + 321 137 189 132 0 + 322 132 189 95 0 + 323 57 80 52 2 + 324 57 108 80 0 + 325 80 108 52 0 + 326 52 108 57 0 + 327 104 151 149 0 + 328 104 186 151 0 + 329 151 186 149 0 + 330 149 186 104 0 + 331 186 203 194 0 + 332 194 203 59 0 + 333 152 191 150 0 + 334 152 193 191 0 + 335 191 193 150 0 + 336 150 193 152 0 + 337 115 197 8 4 + 338 115 198 197 0 + 339 8 198 115 0 + 340 170 125 201 0 + 341 125 48 201 0 + 342 201 48 170 0 + 343 140 183 7 3 + 344 140 184 183 0 + 345 183 184 7 0 + 346 7 184 140 4 + 347 9 108 52 0 + 348 9 128 108 0 + 349 52 128 9 0 + 350 70 5 71 5 + 351 70 112 5 1 + 352 5 112 71 0 + 353 44 116 26 4 + 354 44 117 116 0 + 355 116 117 26 0 + 356 26 117 44 1 + 357 84 126 125 0 + 358 84 171 126 0 + 359 125 171 84 0 + 360 66 159 126 0 + 361 66 161 159 0 + 362 159 161 126 0 + 363 126 161 66 0 + 364 52 209 191 0 + 365 191 209 108 0 + 366 108 209 52 0 + 367 41 112 72 1 + 368 112 113 72 0 + 369 72 113 41 0 + 370 191 209 159 0 + 371 159 209 108 0 + 372 125 160 170 0 + 373 170 160 201 0 + 374 201 160 125 0 + 375 77 169 168 0 + 376 168 169 167 0 + 377 167 169 77 4 + 378 103 157 30 1 + 379 30 190 103 0 + 380 52 9 57 2 + 381 9 108 57 0 + 382 127 193 152 0 + 383 152 193 101 0 + 384 101 193 127 0 + 385 38 68 37 1 + 386 68 110 37 0 + 387 37 110 38 0 + 388 133 189 66 0 + 389 66 207 133 0 + 390 8 76 115 5 + 391 8 198 76 1 + 392 76 198 115 0 + 393 65 153 143 1 + 394 65 154 153 0 + 395 153 154 143 0 + 396 143 154 65 0 + 397 31 206 151 0 + 398 151 206 138 0 + 399 138 206 31 0 + 400 62 144 6 2 + 401 144 61 6 1 + 402 6 61 62 3 + 403 192 193 105 0 + 404 193 205 105 0 + 405 153 154 101 0 + 406 153 211 154 0 + 407 154 211 101 0 + 408 101 211 153 0 + 409 72 163 111 0 + 410 72 199 163 0 + 411 163 199 111 0 + 412 111 199 72 0 + 413 13 101 100 2 + 414 13 212 101 0 + 415 101 212 100 0 + 416 100 212 13 0 + 417 104 187 150 0 + 418 104 191 187 0 + 419 187 191 150 0 + 420 150 191 104 0 + 421 13 154 101 2 + 422 13 212 154 0 + 423 154 212 101 0 + 424 23 97 86 4 + 425 97 151 86 0 + 426 86 151 23 0 + 427 102 61 144 1 + 428 102 194 61 0 + 429 61 194 144 0 + 430 144 194 102 0 + 431 153 211 193 0 + 432 193 211 63 0 + 433 63 211 153 1 + 434 20 159 126 0 + 435 20 160 159 0 + 436 159 160 126 0 + 437 126 160 20 0 + 438 14 88 130 3 + 439 14 156 88 0 + 440 88 156 130 0 + 441 130 156 14 1 + 442 30 107 37 0 + 443 30 159 107 0 + 444 107 159 37 0 + 445 37 159 30 0 + 446 65 154 2 0 + 447 65 155 154 0 + 448 154 155 2 0 + 449 2 155 65 3 + 450 42 111 89 0 + 451 42 162 111 0 + 452 111 162 89 0 + 453 89 162 42 1 + 454 85 150 30 0 + 455 85 191 150 0 + 456 150 191 30 0 + 457 30 191 85 0 + 458 194 205 142 0 + 459 194 212 205 0 + 460 205 212 142 0 + 461 142 212 194 0 + 462 141 151 99 0 + 463 99 151 97 0 + 464 120 82 50 5 + 465 120 170 82 0 + 466 82 170 50 0 + 467 50 170 120 0 + 468 22 60 61 3 + 469 22 102 60 0 + 470 60 102 61 0 + 471 61 102 22 1 + 472 161 176 126 0 + 473 126 176 66 0 + 474 30 128 85 1 + 475 30 191 128 0 + 476 128 191 85 0 + 477 59 139 102 1 + 478 59 186 139 0 + 479 139 186 102 0 + 480 54 89 26 1 + 481 54 90 89 0 + 482 26 90 54 4 + 483 70 114 112 1 + 484 112 114 40 0 + 485 40 114 70 0 + 486 66 159 107 0 + 487 66 187 159 0 + 488 159 187 107 0 + 489 107 187 66 0 + 490 32 132 91 1 + 491 132 181 91 0 + 492 91 181 32 0 + 493 49 124 80 2 + 494 49 160 124 0 + 495 124 160 80 0 + 496 80 160 49 0 + 497 56 91 12 1 + 498 56 92 91 0 + 499 91 92 12 0 + 500 12 92 56 2 + 501 126 159 37 0 + 502 159 161 37 0 + 503 37 161 126 0 + 504 78 168 46 0 + 505 78 169 168 0 + 506 168 169 46 0 + 507 46 169 78 0 + 508 144 177 102 1 + 509 144 194 177 0 + 510 113 121 40 0 + 511 113 196 121 0 + 512 121 196 40 0 + 513 40 196 113 0 + 514 86 148 129 4 + 515 86 192 148 0 + 516 148 192 129 0 + 517 129 192 86 0 + 518 7 185 184 0 + 519 184 185 183 0 + 520 183 185 7 1 + 521 17 109 90 4 + 522 17 133 109 0 + 523 90 133 17 0 + 524 141 192 88 0 + 525 141 205 192 0 + 526 88 205 141 0 + 527 167 168 45 0 + 528 168 169 45 0 + 529 45 169 167 0 + 530 97 184 139 0 + 531 97 185 184 0 + 532 184 185 139 0 + 533 139 185 97 0 + 534 2 154 64 2 + 535 154 155 64 0 + 536 64 155 2 3 + 537 111 195 181 0 + 538 111 199 195 0 + 539 195 199 181 0 + 540 181 199 111 0 + 541 78 123 47 5 + 542 78 171 123 0 + 543 123 171 47 0 + 544 47 171 78 0 + 545 84 176 111 0 + 546 84 195 176 0 + 547 176 195 111 0 + 548 111 195 84 0 + 549 49 201 160 0 + 550 160 201 80 0 + 551 80 201 49 2 + 552 43 197 115 0 + 553 43 198 197 0 + 554 115 198 43 0 + 555 38 67 24 4 + 556 67 68 24 0 + 557 24 68 38 1 + 558 93 189 174 0 + 559 174 189 173 0 + 560 173 189 93 0 + 561 150 152 104 0 + 562 152 191 104 0 + 563 24 167 77 4 + 564 24 200 167 0 + 565 77 200 24 1 + 566 122 170 49 0 + 567 122 201 170 0 + 568 170 201 49 0 + 569 49 201 122 2 + 570 5 113 71 2 + 571 163 195 111 0 + 572 17 176 172 0 + 573 172 176 126 0 + 574 126 176 17 0 + 575 124 195 160 0 + 576 160 195 49 0 + 577 49 195 124 0 + 578 37 106 30 1 + 579 37 159 106 0 + 580 106 159 30 0 + 581 113 121 71 2 + 582 71 121 40 0 + 583 178 203 96 0 + 584 96 203 136 0 + 585 127 191 152 0 + 586 127 193 191 0 + 587 67 167 126 0 + 588 67 172 167 4 + 589 139 185 102 1 + 590 139 186 185 0 + 591 185 186 102 0 + 592 187 207 107 0 + 593 107 207 66 0 + 594 104 187 149 0 + 595 104 206 187 0 + 596 187 206 149 0 + 597 149 206 104 0 + 598 40 74 19 5 + 599 40 114 74 0 + 600 74 114 19 0 + 601 19 114 40 0 + 602 84 170 123 0 + 603 170 171 123 0 + 604 123 171 84 0 + 605 107 161 110 0 + 606 110 161 37 0 + 607 37 161 107 0 + 608 42 164 114 0 + 609 42 198 164 0 + 610 114 198 42 1 + 611 63 193 150 0 + 612 193 211 150 0 + 613 150 211 63 0 + 614 39 161 107 0 + 615 39 207 161 0 + 616 161 207 107 0 + 617 107 207 39 0 + 618 50 123 84 0 + 619 50 170 123 0 + 620 84 170 50 0 + 621 49 170 160 0 + 622 46 168 4 0 + 623 168 169 4 0 + 624 4 169 46 4 + 625 84 170 49 0 + 626 84 196 170 0 + 627 170 196 49 0 + 628 49 196 84 0 + 629 49 195 84 0 + 630 49 196 195 0 + 631 195 196 84 0 + 632 183 184 99 0 + 633 184 185 99 0 + 634 99 185 183 0 + 635 111 114 42 0 + 636 111 164 114 0 + 637 42 164 111 0 + 638 31 158 146 4 + 639 31 190 158 0 + 640 158 190 146 0 + 641 146 190 31 0 + 642 109 161 39 0 + 643 109 207 161 0 + 644 39 207 109 0 + 645 54 90 55 4 + 646 54 175 90 0 + 647 90 175 55 0 + 648 55 175 54 0 + 649 44 197 117 0 + 650 197 198 117 0 + 651 117 198 44 1 + 652 111 163 84 0 + 653 163 195 84 0 + 654 117 164 42 0 + 655 117 198 164 0 + 656 42 198 117 1 + 657 73 121 113 2 + 658 73 163 121 0 + 659 121 163 113 0 + 660 113 163 73 0 + 661 86 97 31 4 + 662 31 151 86 0 + 663 90 175 133 0 + 664 133 175 55 0 + 665 125 160 84 0 + 666 160 170 84 0 + 667 80 160 81 0 + 668 160 201 81 0 + 669 81 201 80 0 + 670 160 176 126 0 + 671 160 195 176 0 + 672 176 195 126 0 + 673 126 195 160 0 + 674 144 100 34 2 + 675 144 177 100 0 + 676 100 177 34 0 + 677 34 177 144 1 + 678 139 149 59 0 + 679 139 188 149 0 + 680 149 188 59 0 + 681 59 188 139 1 + 682 103 146 69 0 + 683 103 190 146 0 + 684 146 190 69 0 + 685 74 163 114 0 + 686 114 163 40 0 + 687 40 163 74 0 + 688 107 150 30 0 + 689 150 190 30 0 + 690 74 118 43 5 + 691 118 164 43 0 + 692 43 164 74 0 + 693 4 168 77 1 + 694 77 169 4 4 + 695 50 123 27 5 + 696 189 206 187 0 + 697 189 207 206 0 + 698 206 207 187 0 + 699 151 192 141 0 + 700 151 205 192 0 + 701 141 205 151 0 + 702 163 196 195 0 + 703 195 196 73 0 + 704 73 196 163 0 + 705 71 18 40 5 + 706 71 121 18 2 + 707 149 151 138 0 + 708 151 186 138 0 + 709 138 186 149 0 + 710 43 118 15 5 + 711 43 213 118 0 + 712 118 213 15 0 + 713 35 145 141 3 + 714 35 205 145 0 + 715 145 205 141 0 + 716 141 205 35 0 + 717 146 148 86 4 + 718 148 151 86 0 + 719 86 151 146 0 + 720 100 194 152 0 + 721 100 203 194 0 + 722 152 203 100 0 + 723 36 138 97 4 + 724 36 139 138 0 + 725 138 139 97 0 + 726 97 139 36 0 + 727 147 192 190 0 + 728 147 210 192 0 + 729 192 210 190 0 + 730 190 210 147 0 + 731 107 158 39 0 + 732 107 207 158 0 + 733 158 207 39 0 + 734 95 132 94 1 + 735 95 149 132 0 + 736 132 149 94 0 + 737 60 145 102 0 + 738 102 145 22 0 + 739 22 145 60 3 + 740 183 140 99 3 + 741 111 162 32 0 + 742 32 162 89 1 + 743 28 81 48 1 + 744 28 201 81 0 + 745 81 201 48 0 + 746 48 201 28 0 + 747 34 178 177 0 + 748 177 178 100 0 + 749 100 178 34 2 + 750 146 147 53 0 + 751 146 148 147 0 + 752 147 148 53 0 + 753 53 148 146 4 + 754 111 162 72 0 + 755 111 199 162 0 + 756 60 142 13 3 + 757 142 194 13 0 + 758 13 194 60 0 + 759 181 195 66 0 + 760 181 204 195 0 + 761 195 204 66 0 + 762 66 204 181 0 + 763 108 160 33 0 + 764 108 204 160 0 + 765 160 204 33 0 + 766 33 204 108 0 + 767 31 138 93 4 + 768 138 206 93 0 + 769 93 206 31 0 + 770 119 171 167 0 + 771 126 171 119 0 + 772 107 161 66 0 + 773 161 207 66 0 + 774 180 191 52 0 + 775 180 209 191 0 + 776 126 213 202 0 + 777 202 213 176 0 + 778 176 213 126 0 + 779 45 126 68 0 + 780 45 200 126 0 + 781 126 200 68 0 + 782 68 200 45 1 + 783 53 146 103 0 + 784 146 147 103 0 + 785 103 147 53 1 + 786 38 37 10 1 + 787 37 110 10 0 + 788 10 110 38 4 + 789 15 118 78 5 + 790 118 213 78 0 + 791 78 213 15 0 + 792 101 152 100 0 + 793 101 212 152 0 + 794 152 212 100 0 + 795 151 206 149 0 + 796 149 206 138 0 + 797 116 117 89 0 + 798 89 117 26 1 + 799 10 157 110 0 + 800 37 157 10 1 + 801 171 202 126 0 + 802 126 213 171 0 + 803 129 147 87 1 + 804 129 148 147 0 + 805 147 148 87 0 + 806 87 148 129 0 + 807 100 101 21 2 + 808 97 98 36 4 + 809 97 139 98 0 + 810 98 139 36 1 + 811 52 80 33 2 + 812 80 108 33 0 + 813 33 108 52 0 + 814 48 170 79 0 + 815 170 201 79 0 + 816 79 201 48 0 + 817 98 184 7 4 + 818 98 185 184 0 + 819 7 185 98 1 + 820 153 155 154 0 + 821 55 173 133 0 + 822 55 189 173 0 + 823 173 189 133 0 + 824 151 206 104 0 + 825 143 2 65 1 + 826 143 154 2 2 + 827 78 171 119 0 + 828 171 213 119 0 + 829 119 213 78 0 + 830 58 108 9 0 + 831 58 128 108 0 + 832 9 128 58 1 + 833 9 52 51 2 + 834 52 128 51 0 + 835 51 128 9 1 + 836 60 194 62 0 + 837 62 194 144 0 + 838 144 194 60 0 + 839 94 138 93 0 + 840 94 188 138 0 + 841 138 188 93 0 + 842 93 188 94 0 + 843 132 189 149 0 + 844 149 189 95 0 + 845 9 58 57 1 + 846 58 108 57 0 + 847 104 190 151 0 + 848 190 192 151 0 + 849 151 192 104 0 + 850 105 192 156 0 + 851 192 193 156 0 + 852 156 193 105 0 + 853 69 103 53 1 + 854 53 146 69 4 + 855 70 40 19 5 + 856 19 114 70 1 + 857 95 149 137 0 + 858 149 189 137 0 + 859 192 193 150 0 + 860 192 210 193 0 + 861 193 210 150 0 + 862 150 210 192 0 + 863 58 81 57 1 + 864 58 108 81 0 + 865 81 108 57 0 + 866 102 194 145 0 + 867 145 194 60 0 + 868 60 194 102 0 + 869 81 108 80 0 + 870 52 127 51 2 + 871 52 191 127 0 + 872 127 191 51 0 + 873 51 191 52 0 + 874 12 179 92 0 + 875 92 179 91 0 + 876 91 179 12 1 + 877 60 194 61 0 + 878 104 193 150 0 + 879 30 150 103 0 + 880 150 190 103 0 + 881 88 156 87 0 + 882 87 156 130 1 + 883 13 142 100 0 + 884 142 194 100 0 + 885 100 194 13 0 + 886 53 147 129 1 + 887 129 148 53 4 + 888 125 160 126 0 + 889 126 160 84 0 + 890 55 109 39 4 + 891 55 207 109 0 + 892 39 207 55 0 + 893 129 131 88 0 + 894 129 130 131 0 + 895 131 130 88 3 + 896 30 159 128 0 + 897 30 191 159 0 + 898 86 151 141 0 + 899 153 193 155 0 + 900 155 193 105 0 + 901 105 193 153 0 + 902 114 163 112 0 + 903 112 163 40 0 + 904 27 196 84 0 + 905 27 202 196 0 + 906 196 202 84 0 + 907 85 128 51 1 + 908 128 191 51 0 + 909 51 191 85 0 + 910 160 195 33 0 + 911 160 204 195 0 + 912 195 204 33 0 + 913 94 134 93 0 + 914 94 174 134 1 + 915 93 174 94 0 + 916 109 161 133 0 + 917 133 161 17 0 + 918 17 161 109 0 + 919 109 110 39 4 + 920 109 161 110 0 + 921 110 161 39 0 + 922 84 160 49 0 + 923 89 175 90 0 + 924 54 175 89 1 + 925 96 137 92 0 + 926 96 179 137 0 + 927 137 179 92 0 + 928 92 179 96 0 + 929 31 146 86 4 + 930 31 151 146 0 + 931 197 198 164 0 + 932 15 78 46 5 + 933 15 119 78 0 + 934 78 119 46 0 + 935 46 119 15 4 + 936 91 166 92 0 + 937 92 166 56 0 + 938 56 166 91 1 + 939 112 163 113 0 + 940 113 163 40 0 + 941 45 200 168 1 + 942 167 200 45 0 + 943 68 126 67 0 + 944 126 200 67 0 + 945 67 200 68 0 + 946 136 177 34 1 + 947 49 122 121 2 + 948 49 196 122 0 + 949 121 196 49 0 + 950 92 137 91 0 + 951 137 179 91 0 + 952 63 103 85 1 + 953 103 150 85 0 + 954 85 150 63 0 + 955 92 165 56 2 + 956 92 166 165 0 + 957 165 166 56 0 + 958 167 171 45 0 + 959 171 200 45 0 + 960 81 160 125 0 + 961 125 201 81 0 + 962 29 85 51 1 + 963 85 127 51 0 + 964 51 127 29 2 + 965 46 169 119 4 + 966 119 169 78 0 + 967 172 176 75 0 + 968 172 213 176 0 + 969 176 213 75 0 + 970 131 3 130 3 + 971 130 3 129 1 + 972 129 3 131 4 + 973 88 192 129 0 + 974 129 192 87 0 + 975 87 192 88 0 + 976 126 213 119 0 + 977 39 158 55 4 + 978 158 207 55 0 + 979 105 212 193 0 + 980 193 212 155 0 + 981 155 212 105 0 + 982 15 119 75 4 + 983 15 213 119 0 + 984 75 213 15 0 + 985 33 182 108 0 + 986 33 204 182 0 + 987 104 187 152 0 + 988 104 203 187 0 + 989 187 203 152 0 + 990 16 123 48 0 + 991 16 171 123 0 + 992 123 171 48 0 + 993 107 161 159 0 + 994 123 170 48 0 + 995 124 195 165 0 + 996 124 204 195 0 + 997 195 204 165 0 + 998 151 190 31 0 + 999 74 83 27 5 + 1000 74 163 83 0 + 1001 83 163 27 0 + 1002 27 163 74 0 + 1003 47 4 46 5 + 1004 47 168 4 1 + 1005 46 168 47 0 + 1006 136 149 59 0 + 1007 136 203 149 0 + 1008 59 203 136 0 + 1009 20 68 45 1 + 1010 20 126 68 0 + 1011 45 126 20 0 + 1012 82 123 50 5 + 1013 82 170 123 0 + 1014 20 106 68 1 + 1015 20 126 106 0 + 1016 106 126 68 0 + 1017 110 161 68 0 + 1018 68 161 37 0 + 1019 28 201 80 2 + 1020 24 200 68 1 + 1021 67 200 24 0 + 1022 46 78 47 5 + 1023 78 168 47 0 + 1024 67 161 126 0 + 1025 126 161 68 0 + 1026 68 161 67 0 + 1027 93 138 134 4 + 1028 138 188 134 0 + 1029 134 188 93 0 + 1030 68 106 37 1 + 1031 106 126 37 0 + 1032 37 126 68 0 + 1033 20 126 125 0 + 1034 125 160 20 0 + 1035 163 196 27 0 + 1036 163 202 196 0 + 1037 27 202 163 0 + 1038 72 114 111 0 + 1039 72 163 114 0 + 1040 114 163 111 0 + 1041 108 160 80 0 + 1042 80 160 33 0 + 1043 55 173 54 4 + 1044 55 175 173 0 + 1045 173 175 54 0 + 1046 45 125 20 1 + 1047 50 196 170 0 + 1048 133 175 173 0 + 1049 80 124 33 2 + 1050 124 160 33 0 + 1051 63 210 193 0 + 1052 193 210 156 0 + 1053 156 210 63 1 + 1054 104 193 152 0 + 1055 133 164 116 0 + 1056 133 176 164 0 + 1057 164 176 116 0 + 1058 116 176 133 0 + 1059 145 194 186 0 + 1060 145 205 194 0 + 1061 194 205 186 0 + 1062 186 205 145 0 + 1063 126 160 66 0 + 1064 160 176 66 0 + 1065 107 206 158 0 + 1066 107 207 206 0 + 1067 206 207 158 0 + 1068 12 96 92 2 + 1069 12 179 96 0 + 1070 118 202 164 0 + 1071 164 202 27 0 + 1072 27 202 118 0 + 1073 164 197 43 0 + 1074 89 175 133 0 + 1075 67 109 17 4 + 1076 67 161 109 0 + 1077 17 161 67 0 + 1078 105 193 35 0 + 1079 193 205 35 0 + 1080 35 205 105 0 + 1081 133 207 109 0 + 1082 124 195 33 0 + 1083 173 174 11 0 + 1084 173 175 174 0 + 1085 174 175 11 1 + 1086 11 175 173 0 + 1087 137 187 149 0 + 1088 137 203 187 0 + 1089 187 203 149 0 + 1090 149 203 137 0 + 1091 79 170 122 0 + 1092 122 201 79 2 + 1093 39 190 158 0 + 1094 158 190 107 0 + 1095 107 190 39 0 + 1096 150 211 191 0 + 1097 191 211 85 0 + 1098 85 211 150 0 + 1099 121 196 83 0 + 1100 83 196 40 0 + 1101 32 133 132 0 + 1102 32 189 133 0 + 1103 133 189 132 0 + 1104 56 165 25 2 + 1105 165 166 25 0 + 1106 25 166 56 1 + 1107 42 162 114 1 + 1108 114 162 111 0 + 1109 141 145 99 3 + 1110 145 205 99 0 + 1111 99 205 141 0 + 1112 163 196 83 0 + 1113 83 196 27 0 + 1114 92 182 137 0 + 1115 137 182 96 0 + 1116 96 182 92 2 + 1117 104 203 149 0 + 1118 167 200 67 0 + 1119 137 180 96 0 + 1120 137 182 180 0 + 1121 180 182 96 2 + 1122 102 186 145 0 + 1123 62 60 13 3 + 1124 13 194 62 0 + 1125 15 75 115 4 + 1126 75 213 115 0 + 1127 85 103 30 1 + 1128 160 195 84 0 + 1129 137 181 66 0 + 1130 137 204 181 0 + 1131 66 204 137 0 + 1132 149 186 139 0 + 1133 98 184 139 0 + 1134 97 184 98 4 + 1135 127 191 85 0 + 1136 149 189 187 0 + 1137 187 189 137 0 + 1138 91 166 32 1 + 1139 91 181 166 0 + 1140 166 181 32 0 + 1141 98 185 139 1 + 1142 31 206 190 0 + 1143 190 206 151 0 + 1144 100 194 178 0 + 1145 178 194 177 0 + 1146 177 194 100 0 + 1147 187 191 107 0 + 1148 107 191 150 0 + 1149 149 188 186 0 + 1150 138 188 149 0 + 1151 108 182 52 0 + 1152 59 136 95 1 + 1153 136 149 95 0 + 1154 93 149 138 0 + 1155 138 149 94 0 + 1156 94 149 93 0 + 1157 94 189 149 0 + 1158 132 189 94 0 + 1159 132 175 133 0 + 1160 133 175 32 0 + 1161 32 175 132 1 + 1162 135 179 136 1 + 1163 136 179 96 0 + 1164 96 179 135 0 + 1165 92 182 33 2 + 1166 92 204 182 0 + 1167 33 204 92 0 + 1168 137 187 66 0 + 1169 66 189 137 0 + 1170 137 181 132 0 + 1171 137 189 181 0 + 1172 88 141 23 3 + 1173 23 192 88 0 + 1174 187 206 107 0 + 1175 107 110 39 0 + 1176 107 208 110 0 + 1177 110 208 39 4 + 1178 39 208 107 0 + 1179 126 159 106 0 + 1180 94 188 149 0 + 1181 11 173 134 4 + 1182 134 174 11 1 + 1183 159 191 187 0 + 1184 191 209 187 0 + 1185 187 209 159 0 + 1186 13 100 62 2 + 1187 100 194 62 0 + 1188 105 155 142 3 + 1189 155 212 142 0 + 1190 142 212 105 0 + 1191 35 212 205 0 + 1192 205 212 193 0 + 1193 193 212 35 0 + 1194 152 191 187 0 + 1195 60 145 35 3 + 1196 145 194 35 0 + 1197 14 105 88 3 + 1198 105 156 88 0 + 1199 33 165 92 2 + 1200 165 204 92 0 + 1201 133 181 66 0 + 1202 133 189 181 0 + 1203 181 189 66 0 + 1204 107 208 190 0 + 1205 190 208 157 0 + 1206 157 208 107 0 + 1207 39 208 190 0 + 1208 20 125 81 1 + 1209 81 160 20 0 + 1210 108 160 81 0 + 1211 144 194 100 0 + 1212 139 188 36 1 + 1213 36 188 138 0 + 1214 132 174 94 1 + 1215 132 189 174 0 + 1216 174 189 94 0 + 1217 134 138 36 4 + 1218 36 188 134 1 + 1219 144 62 100 2 + 1220 91 181 137 0 + 1221 137 181 92 0 + 1222 92 181 91 0 + 1223 92 181 166 0 + 1224 159 191 107 0 + 1225 151 192 86 0 + 1226 165 199 181 0 + 1227 165 204 199 0 + 1228 199 204 181 0 + 1229 181 204 165 0 + 1230 150 159 30 0 + 1231 150 191 159 0 + 1232 148 192 87 0 + 1233 100 212 142 0 + 1234 142 212 13 0 + 1235 52 180 21 2 + 1236 180 191 21 0 + 1237 21 191 52 0 + 1238 107 159 150 0 + 1239 142 205 35 0 + 1240 35 212 142 0 + 1241 30 157 37 1 + 1242 21 127 52 2 + 1243 21 191 127 0 + 1244 92 204 181 0 + 1245 137 204 92 0 + 1246 88 192 131 0 + 1247 131 192 129 0 + 1248 103 190 147 0 + 1249 147 190 146 0 + 1250 87 192 156 0 + 1251 156 192 88 0 + 1252 91 137 95 0 + 1253 137 179 95 0 + 1254 95 179 91 1 + 1255 135 96 12 2 + 1256 12 179 135 1 + 1257 164 213 202 0 + 1258 202 213 118 0 + 1259 118 213 164 0 + 1260 110 208 157 0 + 1261 10 208 110 4 + 1262 101 212 193 0 + 1263 193 212 152 0 + 1264 152 205 194 0 + 1265 152 212 205 0 + 1266 194 212 152 0 + 1267 21 191 152 0 + 1268 193 205 152 0 + 1269 94 188 59 1 + 1270 30 106 58 1 + 1271 106 159 58 0 + 1272 58 159 30 0 + 1273 67 110 109 4 + 1274 67 161 110 0 + 1275 66 204 108 0 + 1276 66 209 204 0 + 1277 108 209 66 0 + 1278 32 181 133 0 + 1279 17 161 126 0 + 1280 20 159 106 0 + 1281 114 162 72 1 + 1282 40 83 74 5 + 1283 40 163 83 0 + 1284 48 79 28 1 + 1285 79 201 28 2 + 1286 128 159 58 0 + 1287 58 159 108 0 + 1288 58 128 30 1 + 1289 18 196 83 0 + 1290 134 188 94 1 + 1291 86 129 131 4 + 1292 131 192 86 0 + 1293 159 160 66 0 + 1294 66 159 108 0 + 1295 159 160 108 0 + 1296 108 160 66 0 + 1297 166 181 165 0 + 1298 166 199 181 0 + 1299 165 199 166 0 + 1300 186 194 104 0 + 1301 194 205 104 0 + 1302 104 205 186 0 + 1303 108 160 58 0 + 1304 58 160 81 0 + 1305 159 160 58 0 + 1306 81 106 20 1 + 1307 81 160 106 0 + 1308 106 160 20 0 + 1309 106 160 159 0 + 1310 99 186 151 0 + 1311 99 205 186 0 + 1312 186 205 151 0 + 1313 151 205 99 0 + 1314 33 182 52 2 + 1315 178 203 194 0 + 1316 100 203 178 0 + 1317 78 171 169 0 + 1318 169 171 119 0 + 1319 58 106 81 1 + 1320 58 160 106 0 + 1321 112 114 72 1 + 1322 72 163 112 0 + 1323 111 164 133 0 + 1324 133 176 111 0 + 1325 54 173 11 4 + 1326 11 175 54 1 + 1327 177 203 194 0 + 1328 165 199 25 0 + 1329 19 74 43 5 + 1330 19 164 74 0 + 1331 43 164 19 0 + 1332 19 164 114 0 + 1333 114 164 74 0 + 1334 111 164 163 0 + 1335 163 164 114 0 + 1336 163 164 74 0 + 1337 111 181 162 0 + 1338 181 199 162 0 + 1339 76 19 43 5 + 1340 76 164 19 0 + 1341 76 114 19 1 + 1342 89 164 117 0 + 1343 116 164 89 0 + 1344 133 164 89 0 + 1345 42 117 89 1 + 1346 89 164 42 0 + 1347 89 164 111 0 + 1348 48 82 79 1 + 1349 48 170 82 0 + 1350 82 170 79 0 + 1351 82 48 16 1 + 1352 48 170 16 0 + 1353 16 170 82 0 + 1354 123 170 16 0 + 1355 16 123 82 5 + 1356 43 115 76 5 + 1357 75 164 116 0 + 1358 75 197 164 0 + 1359 116 197 75 4 + 1360 171 202 84 0 + 1361 84 196 163 0 + 1362 163 202 84 0 + 1363 171 202 123 0 + 1364 78 118 27 5 + 1365 78 202 118 0 + 1366 27 202 78 0 + 1367 120 1 82 5 + 1368 120 170 1 0 + 1369 1 170 82 0 + 1370 120 122 1 2 + 1371 122 170 1 0 + 1372 82 1 79 1 + 1373 1 170 79 0 + 1374 1 122 79 2 + 1375 47 171 168 0 + 1376 168 171 78 0 + 1377 45 168 47 1 + 1378 45 171 168 0 + 1379 47 171 45 0 + 1380 16 45 47 1 + 1381 47 171 16 0 + 1382 47 123 16 5 + 1383 177 203 59 0 + 1384 152 203 191 0 + 1385 191 203 21 0 + 1386 89 175 32 1 + 1387 104 203 186 0 + 1388 119 169 167 4 + 1389 169 171 167 0 + 1390 169 171 45 0 + 1391 169 171 168 0 + 1392 59 177 136 1 + 1393 149 203 95 0 + 1394 95 203 137 0 + 1395 136 203 95 0 + 1396 17 176 161 0 + 1397 133 176 17 0 + 1398 164 176 75 0 + 1399 75 176 116 0 + 1400 75 172 116 4 + 1401 172 176 116 0 + 1402 90 176 133 0 + 1403 116 176 90 0 + 1404 116 172 90 4 + 1405 172 176 90 0 + 1406 90 176 17 0 + 1407 90 172 17 4 + 1408 195 199 165 0 + 1409 195 204 199 0 + 1410 81 125 48 1 + 1411 92 181 165 0 + 1412 32 181 162 0 + 1413 111 181 32 0 + 1414 32 166 162 1 + 1415 166 181 162 0 + 1416 111 181 133 0 + 1417 147 190 148 0 + 1418 161 207 133 0 + 1419 91 132 95 1 + 1420 132 181 95 0 + 1421 95 181 91 0 + 1422 137 181 95 0 + 1423 111 181 176 0 + 1424 176 181 133 0 + 1425 176 181 66 0 + 1426 66 176 111 0 + 1427 111 181 66 0 + 1428 40 196 163 0 + 1429 163 196 113 0 + 1430 145 186 99 0 + 1431 88 105 35 3 + 1432 35 205 88 0 + 1433 163 196 121 0 + 1434 73 196 121 0 + 1435 187 203 191 0 + 1436 149 206 93 0 + 1437 107 206 190 0 + 1438 190 206 158 0 + 1439 97 186 151 0 + 1440 99 186 97 0 + 1441 187 206 190 0 + 1442 190 208 69 0 + 1443 22 186 145 0 + 1444 102 186 22 0 + 1445 102 185 22 1 + 1446 185 186 22 0 + 1447 151 205 104 0 + 1448 84 195 126 0 + 1449 67 167 24 4 + 1450 44 197 116 4 + 1451 97 186 139 0 + 1452 138 186 97 0 + 1453 111 195 66 0 + 1454 99 145 22 3 + 1455 22 186 99 0 + 1456 97 186 185 0 + 1457 66 195 176 0 + 1458 160 195 66 0 + 1459 183 99 22 3 + 1460 183 186 99 0 + 1461 22 186 183 0 + 1462 183 186 185 0 + 1463 185 186 99 0 + 1464 22 185 183 1 + 1465 99 186 184 0 + 1466 184 186 97 0 + 1467 185 186 184 0 + 1468 35 141 88 3 + 1469 148 192 147 0 + 1470 147 192 87 0 + 1471 66 209 137 0 + 1472 151 192 148 0 + 1473 174 189 175 0 + 1474 175 189 173 0 + 1475 175 189 133 0 + 1476 132 175 174 1 + 1477 132 189 175 0 + 1478 187 209 66 0 + 1479 66 209 159 0 + 1480 93 189 149 0 + 1481 94 189 93 0 + 1482 146 208 190 0 + 1483 190 208 158 0 + 1484 158 208 146 4 + 1485 39 208 158 4 + 1486 187 209 137 0 + 1487 137 209 180 0 + 1488 150 210 190 0 + 1489 191 211 127 0 + 1490 127 211 193 0 + 1491 193 211 101 0 + 1492 101 211 127 0 + 1493 101 193 153 0 + 1494 103 210 190 0 + 1495 146 208 69 4 + 1496 85 211 63 1 + 1497 23 131 88 3 + 1498 23 192 131 0 + 1499 86 131 23 4 + 1500 190 192 148 0 + 1501 101 154 143 2 + 1502 154 211 143 0 + 1503 143 211 101 0 + 1504 29 127 101 2 + 1505 101 211 29 0 + 1506 29 101 143 2 + 1507 143 211 29 1 + 1508 153 211 143 1 + 1509 93 158 31 4 + 1510 93 206 158 0 + 1511 158 206 31 0 + 1512 66 204 160 0 + 1513 192 210 156 0 + 1514 149 206 189 0 + 1515 189 206 93 0 + 1516 120 50 196 0 + 1517 73 124 121 2 + 1518 73 196 124 0 + 1519 124 196 121 0 + 1520 73 195 124 0 + 1521 195 196 124 0 + 1522 121 124 49 2 + 1523 124 196 49 0 + 1524 50 83 18 5 + 1525 18 196 50 0 + 1526 50 18 120 5 + 1527 18 196 120 0 + 1528 18 122 120 2 + 1529 73 165 124 2 + 1530 73 199 165 0 + 1531 165 199 124 0 + 1532 124 199 73 0 + 1533 195 199 124 0 + 1534 163 199 113 0 + 1535 113 199 73 0 + 1536 25 165 73 2 + 1537 73 199 25 0 + 1538 73 113 41 2 + 1539 113 199 41 0 + 1540 41 199 73 0 + 1541 113 199 72 0 + 1542 72 199 41 0 + 1543 113 72 163 0 + 1544 41 72 25 1 + 1545 25 199 41 0 + 1546 25 73 41 2 + 1547 84 202 111 0 + 1548 27 123 78 5 + 1549 123 202 78 0 + 1550 163 202 111 0 + 1551 163 202 164 0 + 1552 74 202 163 0 + 1553 27 202 74 0 + 1554 74 202 164 0 + 1555 95 203 179 0 + 1556 179 203 137 0 + 1557 136 179 95 1 + 1558 136 203 179 0 + 1559 179 203 96 0 + 1560 96 203 137 0 + 1561 96 178 21 2 + 1562 21 203 96 0 + 1563 103 210 147 1 + 1564 192 210 87 0 + 1565 87 210 156 1 + 1566 147 210 87 1 + 1567 96 203 180 0 + 1568 180 203 137 0 + 1569 21 180 96 2 + 1570 21 203 180 0 + 1571 35 205 194 0 + 1572 43 213 164 0 + 1573 104 205 152 0 + 1574 172 213 126 0 + 1575 190 206 104 0 + 1576 150 206 187 0 + 1577 104 206 150 0 + 1578 150 206 190 0 + 1579 93 207 206 0 + 1580 189 207 93 0 + 1581 93 207 158 0 + 1582 158 173 55 4 + 1583 158 207 173 0 + 1584 173 207 55 0 + 1585 173 207 189 0 + 1586 93 173 158 4 + 1587 93 207 173 0 + 1588 187 209 203 0 + 1589 203 209 137 0 + 1590 203 209 180 0 + 1591 191 209 203 0 + 1592 21 209 191 0 + 1593 180 209 21 0 + 1594 21 209 203 0 + 1595 193 211 191 0 + 1596 13 142 64 3 + 1597 142 212 64 0 + 1598 64 212 13 0 + 1599 64 154 13 2 + 1600 64 212 154 0 + 1601 194 212 100 0 + 1602 105 142 35 3 + 1603 35 212 105 0 + 1604 64 212 155 0 + 1605 155 212 154 0 + 1606 142 155 64 3 + 1607 155 212 153 0 + 1608 153 212 154 0 + 1609 193 212 153 0 + 1610 153 212 101 0 + 1611 176 213 164 0 + 1612 164 213 75 0 + 1613 43 213 197 0 + 1614 197 213 164 0 + 1615 197 213 75 0 + 1616 75 197 115 4 + 1617 197 213 115 0 +# Generated by tetgen -qfa0.005 beam.poly diff --git a/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.node b/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.node new file mode 100644 index 0000000000000000000000000000000000000000..5b233914d8cf018f3ba92cac61104e20abce02b4 --- /dev/null +++ b/applications/utilities/mesh/conversion/tetgenToFoam/beam.1.node @@ -0,0 +1,215 @@ +213 3 0 0 + 1 0 0 0 + 2 2 0 0 + 3 2 1 0 + 4 0 1 0 + 5 0 0 1 + 6 2 0 1 + 7 2 1 1 + 8 0 1 1 + 9 1.0000469999999999 0 0 + 10 0.999668 1 0 + 11 0.99944500000000003 1 1 + 12 1.000594 0 1 + 13 2 0 0.50021530000000003 + 14 2 0.50012599999999996 0 + 15 0 1 0.50045629999999997 + 16 0 0.49964989999999998 0 + 17 0.62483357601847556 1 0.49991643678795222 + 18 0 0 0.5 + 19 0 0.5 1 + 20 0.62494657145582122 0.49985790875808178 0 + 21 1.375120204581187 0 0.4997949845615941 + 22 2 0.5 1 + 23 2 1 0.5 + 24 0.499834 1 0 + 25 0.50029699999999999 0 1 + 26 0.49972250000000001 1 1 + 27 0 0.50000006130646835 0.49999993869353165 + 28 0.50002349999999995 0 0 + 29 1.5000235 0 0 + 30 1.1458145624989733 0.5000553177266871 0 + 31 1.3748336567109987 1 0.5000836868059465 + 32 0.75044549999999999 0.49971323947400004 1 + 33 0.75044549999999999 0 0.50013668162500002 + 34 1.500297 0 1 + 35 2 0.49999999206099965 0.49999999206099965 + 36 1.4997225000000001 1 1 + 37 0.88530655619767451 0.69523571541331353 0 + 38 0.74975100000000006 1 0 + 39 0.99985800700011418 1 0.39062501526316751 + 40 0 0.2500000613064608 0.7499999386935392 + 41 0.2501485 0 1 + 42 0.37527044007359472 0.62466041202689604 1 + 43 0 0.7497720581817594 0.74999999997204392 + 44 0.24986125000000001 1 1 + 45 0.31241083060970776 0.68739558038665782 0 + 46 0 1 0.25022814999999998 + 47 0 0.74982495000000005 0 + 48 0.3125356465289606 0.31239559711921033 0 + 49 0.37524548555134551 0 0.37523962153691648 + 50 0 0.25000000002145584 0.25017492745143088 + 51 1.2500352499999998 0 0 + 52 1.0626973305232652 0 0.34361890927552119 + 53 1.4998339999999999 1 0 + 54 0.74958374999999999 1 1 + 55 0.88519156134454835 1 0.69523493182271912 + 56 0.75044549999999999 0 1 + 57 0.75003524999999993 0 0 + 58 0.88545457775712011 0.3046775110714553 0 + 59 1.4999999173907641 0.49999999435116604 1 + 60 2 0.25010760364761792 0.74999999999829137 + 61 2 0.25 1 + 62 2 0 0.75010765000000001 + 63 1.5729133203896351 0.4271084905205621 0 + 64 2 0 0.25010765000000001 + 65 2 0.25006299999999998 0 + 66 0.81619988117037301 0.51616065956439328 0.48387527405505287 + 67 0.62479250000000008 1 0.23434098330631092 + 68 0.62479250000000008 0.7655391212272894 0 + 69 1.2497509999999998 1 0 + 70 0 0.25 1 + 71 0 0 0.75 + 72 0.37522274999999999 0.29980854989635936 1 + 73 0.37522274999999999 0 0.70013946473134281 + 74 0 0.49988605975809192 0.74988593714516283 + 75 0.31255174452459605 1 0.65638401293888804 + 76 0 0.75 1 + 77 0.249917 1 0 + 78 0 0.70831779089254521 0.29167340665919461 + 79 0.25001174999999998 0 0 + 80 0.62526649037406934 0 0.25017085386153537 + 81 0.625029375 0.23429805042184107 0 + 82 0 0.24982494999999999 0 + 83 0 0.25008755567468249 0.50008743306175329 + 84 0.33552291795286748 0.37713361953826796 0.37295234921245662 + 85 1.3275022682494733 0.27703395451399626 0 + 86 1.6873917295541676 1 0.31254602883562033 + 87 1.7393002110516891 0.73944000928409781 0 + 88 2 0.7499999999989998 0.25006298412499983 + 89 0.62528740222670842 0.74964177558619371 1 + 90 0.62465312500000003 1 0.76556323888302447 + 91 0.87551975000000004 0.24985661973700002 1 + 92 0.87551975000000004 0 0.75006834081249996 + 93 1.1922864636768418 1 0.75390684273024755 + 94 1.24958375 0.74986113453803516 1 + 95 1.1698804466514103 0.41956399899988917 1 + 96 1.187959730551635 0 0.74997433471920583 + 97 1.6874419282782818 1 0.68754603555472626 + 98 1.7498612499999999 1 1 + 99 2 0.74999999206099988 0.74999999206099988 + 100 1.6597700161872737 0 0.69432640578660343 + 101 1.6597808229817657 0 0.30542952755181008 + 102 1.7499999601075902 0.375 1 + 103 1.3990667318832528 0.69603906683685635 0 + 104 1.4950021306707608 0.49065317884606224 0.49500212996719484 + 105 2 0.37509449999999989 0.24996850198475024 + 106 0.82837583873678577 0.49993500845038119 0 + 107 1.0695558475797649 0.66971322958604163 0.29687786818700823 + 108 0.85307867962811157 0.24362257622712302 0.31516017245746403 + 109 0.82827226523186892 1 0.49992109713449329 + 110 0.85617934854666022 1 0.20723770847200895 + 111 0.52956259724790877 0.46221182650782827 0.70815142735106607 + 112 0.197844687328108 0.19781366296788089 1 + 113 0.19785716305721113 0 0.8021738538924329 + 114 0.2208783106844166 0.46225714309073845 1 + 115 0 1 0.75022814999999998 + 116 0.43264896150206789 1 0.81375076634557386 + 117 0.374791875 0.83312128766119486 1 + 118 0 0.72915434172921567 0.52082680685839422 + 119 0.25758862433333551 1 0.37534222499999997 + 120 0 0 0.25 + 121 0.22089000562634489 0 0.53767874257955828 + 122 0.21890193241166289 0 0.21890047052636122 + 123 0 0.48262354769989868 0.23265983080935737 + 124 0.52955330709238257 0 0.53770034194467331 + 125 0.49219718763882514 0.367036574432759 0 + 126 0.5505556528350013 0.63265541955504201 0.30493806376468496 + 127 1.4081582558189005 0 0.24254676799800692 + 128 1.1015512434437607 0.21206527974784434 0 + 129 1.7499169999999999 1 0 + 130 2 0.75006299999999992 0 + 131 2 1 0.25 + 132 0.99401036538229792 0.63676792199224752 1 + 133 0.75067050430146165 0.71769786903092825 0.71464771158468776 + 134 1.24958375 1 1 + 135 1.2504455000000001 0 1 + 136 1.3860715978416591 0.24993221667186555 1 + 137 1.0317202752404047 0.31469238410894046 0.6853270709080328 + 138 1.4426349216014702 1 0.74140038799848562 + 139 1.6247918750000001 0.75006931305374525 1 + 140 2 1 0.75 + 141 2 0.74996849602949978 0.50003148809249964 + 142 2 0.24999994966813449 0.49999998078418173 + 143 1.7500117500000001 0 0 + 144 1.7501484999999999 0 1 + 145 2 0.5000537978534545 0.74994618626854503 + 146 1.3747924999999996 1 0.23440908488585499 + 147 1.5571177737167572 0.81232629338982021 0 + 148 1.5545253193695066 1 0.17972930755262501 + 149 1.3104200347998118 0.56041577372755713 0.74814782862252316 + 150 1.3685266838244452 0.48564116582667954 0.21802764397288932 + 151 1.5873602781685263 0.78126669962189421 0.50005942609143139 + 152 1.5838618227448735 0.20899413185535243 0.49987585715718413 + 153 1.7498120256325995 0.25018792583716926 0 + 154 1.8148371462917434 0 0.18519382949207305 + 155 2 0.18752406345187056 0.18753523208397008 + 156 1.7770110643184227 0.51886547556217666 0 + 157 1.1389013076817112 0.76226887437066193 0 + 158 1.1602175406966813 1 0.53828850106094039 + 159 0.90095306490776128 0.48470516503498373 0.2446998657917499 + 160 0.57742475390278236 0.27551969863450299 0.27345305390889807 + 161 0.81036655925196366 0.7630643710333207 0.35054165377955776 + 162 0.52956259724790877 0.46221182650782827 1 + 163 0.29250079461431827 0.2842960350422109 0.71570127112180726 + 164 0.27385619515889037 0.6248453002643185 0.71436194557321087 + 165 0.62168045737651678 0 0.77560610491729931 + 166 0.62537124999999993 0.2188435803315899 1 + 167 0.40196038774740384 1 0.20267603513549107 + 168 0.17704223351222992 0.82288246470050785 0 + 169 0.18892018646284411 1 0.18899622733072144 + 170 0.23373058746113159 0.23679172957531613 0.21078402860060638 + 171 0.24428427259573549 0.59937304517793366 0.24724219230200442 + 172 0.42388190576270124 1 0.4887158204143946 + 173 1.0208555875954755 1 0.81817459887813815 + 174 1.0669175695053206 0.81733378836053194 1 + 175 0.8464712840664248 0.80134170756139955 1 + 176 0.60552202714220704 0.62419153018194229 0.54239960836207701 + 177 1.606777848712118 0.19973253606683206 1 + 178 1.4250560553222698 0 0.732249791887851 + 179 1.12551975 0.19352873225326209 1 + 180 1.1620342234529084 0 0.53548179044497457 + 181 0.77419059143108437 0.35536625456813642 0.76865650139332142 + 182 0.95600842566592681 0 0.52050427577014857 + 183 2 0.75 1 + 184 1.8229055680968635 1 0.82294606919028224 + 185 1.8124074661770861 0.8124421408239394 1 + 186 1.6847465495324894 0.55699324455967203 0.74450659675858755 + 187 1.1945125727535346 0.47020737648361044 0.48501348343009743 + 188 1.4371531545555845 0.81243056656291324 1 + 189 1.0230031981183827 0.60745624022002409 0.70905352953001077 + 190 1.3178218537541635 0.74283221838842173 0.24644567916733129 + 191 1.2298563370114035 0.23209604059822986 0.27403980288191482 + 192 1.7289412043422971 0.73378563235104455 0.27218740896208421 + 193 1.6944192651948711 0.39497422853539144 0.28096087015676863 + 194 1.719021973042385 0.27206088666699435 0.73925099693622187 + 195 0.51628118103442489 0.26487001488387318 0.53136856951372224 + 196 0.22693818747394334 0.22584860839480125 0.50499300132112901 + 197 0.18870598201308805 1 0.81131589108741564 + 198 0.18140974929389231 0.81855222162009078 1 + 199 0.52377345173705003 0.22575111801259504 0.77599180569982884 + 200 0.44512574719134834 0.82031319413422632 0 + 201 0.43769402753141229 0 0.18763960779463965 + 202 0.23194582827732274 0.56348972010969589 0.48517047319960538 + 203 1.404605953982319 0.2885118284317002 0.71332319773860509 + 204 0.83285106746651061 0.22679389369216291 0.56316489552371896 + 205 1.746191712341544 0.57096666984982924 0.48834249131610469 + 206 1.2698479063322867 0.73902081556323673 0.53223169180184582 + 207 1.0027339377070847 0.7783240018776667 0.51915438810718473 + 208 1.1247094999999998 1 0.19525173141898322 + 209 1.0585177272595161 0.22306568484158776 0.45497453797743681 + 210 1.5766743500280587 0.62019545180903912 0 + 211 1.5362846212581589 0.2135856104587727 0 + 212 1.7956396187713533 0.19223457391785517 0.37621602432494938 + 213 0.2338562054207384 0.80644498148268706 0.52587899633894741 +# Generated by tetgen -qfa0.005 beam.poly diff --git a/applications/utilities/mesh/generation/blockMesh/blockPoints.C b/applications/utilities/mesh/generation/blockMesh/blockPoints.C index 8f4993150c04e975d97560e7a1aa4a02a19a9511..107b9d7fd8f5abcb2f1b13a209d36a5f617d2397 100644 --- a/applications/utilities/mesh/generation/blockMesh/blockPoints.C +++ b/applications/utilities/mesh/generation/blockMesh/blockPoints.C @@ -35,23 +35,23 @@ Description void Foam::block::blockPoints() { // set local variables for mesh specification - label ni = blockDef_.n().x(); - label nj = blockDef_.n().y(); - label nk = blockDef_.n().z(); + const label ni = blockDef_.n().x(); + const label nj = blockDef_.n().y(); + const label nk = blockDef_.n().z(); - point start = blockDef_.points()[blockDef_.blockShape()[0]]; - point xEnd = blockDef_.points()[blockDef_.blockShape()[1]]; - point xyEnd = blockDef_.points()[blockDef_.blockShape()[2]]; - point yEnd = blockDef_.points()[blockDef_.blockShape()[3]]; + const point p000 = blockDef_.points()[blockDef_.blockShape()[0]]; + const point p100 = blockDef_.points()[blockDef_.blockShape()[1]]; + const point p110 = blockDef_.points()[blockDef_.blockShape()[2]]; + const point p010 = blockDef_.points()[blockDef_.blockShape()[3]]; - point zEnd = blockDef_.points()[blockDef_.blockShape()[4]]; - point xzEnd = blockDef_.points()[blockDef_.blockShape()[5]]; - point xyzEnd = blockDef_.points()[blockDef_.blockShape()[6]]; - point yzEnd = blockDef_.points()[blockDef_.blockShape()[7]]; + const point p001 = blockDef_.points()[blockDef_.blockShape()[4]]; + const point p101 = blockDef_.points()[blockDef_.blockShape()[5]]; + const point p111 = blockDef_.points()[blockDef_.blockShape()[6]]; + const point p011 = blockDef_.points()[blockDef_.blockShape()[7]]; - // set reference to the list of edge point and weighting factors - const List<List<point> >& edgePoints = blockDef_.blockEdgePoints(); - const scalarListList& edgeWeights = blockDef_.blockEdgeWeights(); + // list of edge point and weighting factors + const List<List<point> >& p = blockDef_.blockEdgePoints(); + const scalarListList& w = blockDef_.blockEdgeWeights(); // generate vertices @@ -63,193 +63,138 @@ void Foam::block::blockPoints() { label vertexNo = vtxLabel(i, j, k); - vector edgex1 = start*(1.0 - edgeWeights[0][i]) - + xEnd*edgeWeights[0][i]; + // points on edges + vector edgex1 = p000 + (p100 - p000)*w[0][i]; + vector edgex2 = p010 + (p110 - p010)*w[1][i]; + vector edgex3 = p011 + (p111 - p011)*w[2][i]; + vector edgex4 = p001 + (p101 - p001)*w[3][i]; - vector edgex2 = yEnd*(1.0 - edgeWeights[1][i]) - + xyEnd*edgeWeights[1][i]; + vector edgey1 = p000 + (p010 - p000)*w[4][j]; + vector edgey2 = p100 + (p110 - p100)*w[5][j]; + vector edgey3 = p101 + (p111 - p101)*w[6][j]; + vector edgey4 = p001 + (p011 - p001)*w[7][j]; - vector edgex3 = yzEnd*(1.0 - edgeWeights[2][i]) - + xyzEnd*edgeWeights[2][i]; - - vector edgex4 = zEnd*(1.0 - edgeWeights[3][i]) - + xzEnd*edgeWeights[3][i]; - - - - vector edgey1 = start*(1.0 - edgeWeights[4][j]) - + yEnd*edgeWeights[4][j]; - - vector edgey2 = xEnd*(1.0 - edgeWeights[5][j]) - + xyEnd*edgeWeights[5][j]; - - vector edgey3 = xzEnd*(1.0 - edgeWeights[6][j]) - + xyzEnd*edgeWeights[6][j]; - - vector edgey4 = zEnd*(1.0 - edgeWeights[7][j]) - + yzEnd*edgeWeights[7][j]; - - - - vector edgez1 = start*(1.0 - edgeWeights[8][k]) - + zEnd*edgeWeights[8][k]; - - vector edgez2 = xEnd*(1.0 - edgeWeights[9][k]) - + xzEnd*edgeWeights[9][k]; - - vector edgez3 = xyEnd*(1.0 - edgeWeights[10][k]) - + xyzEnd*edgeWeights[10][k]; - - vector edgez4 = yEnd*(1.0 - edgeWeights[11][k]) - + yzEnd*edgeWeights[11][k]; + vector edgez1 = p000 + (p001 - p000)*w[8][k]; + vector edgez2 = p100 + (p101 - p100)*w[9][k]; + vector edgez3 = p110 + (p111 - p110)*w[10][k]; + vector edgez4 = p010 + (p011 - p010)*w[11][k]; // calculate the importance factors for all edges // x - direction scalar impx1 = ( - (1.0 - edgeWeights[0][i]) - *(1.0 - edgeWeights[4][j]) - *(1.0 - edgeWeights[8][k]) - + edgeWeights[0][i] - *(1.0 - edgeWeights[5][j]) - *(1.0 - edgeWeights[9][k]) + (1.0 - w[0][i])*(1.0 - w[4][j])*(1.0 - w[8][k]) + + w[0][i]*(1.0 - w[5][j])*(1.0 - w[9][k]) ); scalar impx2 = ( - (1.0 - edgeWeights[1][i]) - *edgeWeights[4][j] - *(1.0 - edgeWeights[11][k]) - + edgeWeights[1][i] - *edgeWeights[5][j] - *(1.0 - edgeWeights[10][k]) + (1.0 - w[1][i])*w[4][j]*(1.0 - w[11][k]) + + w[1][i]*w[5][j]*(1.0 - w[10][k]) ); - scalar impx3 = - ( - (1.0 - edgeWeights[2][i]) - *edgeWeights[7][j] - *edgeWeights[11][k] - + edgeWeights[2][i] - *edgeWeights[6][j] - *edgeWeights[10][k] - ); + scalar impx3 = + ( + (1.0 - w[2][i])*w[7][j]*w[11][k] + + w[2][i]*w[6][j]*w[10][k] + ); - scalar impx4 = - ( - (1.0 - edgeWeights[3][i]) - *(1.0 - edgeWeights[7][j]) - *edgeWeights[8][k] - + edgeWeights[3][i] - *(1.0 - edgeWeights[6][j]) - *edgeWeights[9][k] - ); + scalar impx4 = + ( + (1.0 - w[3][i])*(1.0 - w[7][j])*w[8][k] + + w[3][i]*(1.0 - w[6][j])*w[9][k] + ); + scalar magImpx = impx1 + impx2 + impx3 + impx4; + impx1 /= magImpx; + impx2 /= magImpx; + impx3 /= magImpx; + impx4 /= magImpx; // y - direction scalar impy1 = ( - (1.0 - edgeWeights[4][j]) - *(1.0 - edgeWeights[0][i]) - *(1.0 - edgeWeights[8][k]) - + edgeWeights[4][j] - *(1.0 - edgeWeights[1][i]) - *(1.0 - edgeWeights[11][k]) + (1.0 - w[4][j])*(1.0 - w[0][i])*(1.0 - w[8][k]) + + w[4][j]*(1.0 - w[1][i])*(1.0 - w[11][k]) ); scalar impy2 = ( - (1.0 - edgeWeights[5][j]) - *edgeWeights[0][i] - *(1.0 - edgeWeights[9][k]) - + edgeWeights[5][j] - *edgeWeights[1][i] - *(1.0 - edgeWeights[10][k]) + (1.0 - w[5][j])*w[0][i]*(1.0 - w[9][k]) + + w[5][j]*w[1][i]*(1.0 - w[10][k]) ); scalar impy3 = ( - (1.0 - edgeWeights[6][j]) - *edgeWeights[3][i] - *edgeWeights[9][k] - + edgeWeights[6][j] - *edgeWeights[2][i] - *edgeWeights[10][k] + (1.0 - w[6][j])*w[3][i]*w[9][k] + + w[6][j]*w[2][i]*w[10][k] ); scalar impy4 = ( - (1.0 - edgeWeights[7][j]) - *(1.0 - edgeWeights[3][i]) - *edgeWeights[8][k] - + edgeWeights[7][j] - *(1.0 - edgeWeights[2][i]) - *edgeWeights[11][k] + (1.0 - w[7][j])*(1.0 - w[3][i])*w[8][k] + + w[7][j]*(1.0 - w[2][i])*w[11][k] ); + scalar magImpy = impy1 + impy2 + impy3 + impy4; + impy1 /= magImpy; + impy2 /= magImpy; + impy3 /= magImpy; + impy4 /= magImpy; // z - direction scalar impz1 = ( - (1.0 - edgeWeights[8][k]) - *(1.0 - edgeWeights[0][i]) - *(1.0 - edgeWeights[4][j]) - + edgeWeights[8][k] - *(1.0 - edgeWeights[3][i]) - *(1.0 - edgeWeights[7][j]) + (1.0 - w[8][k])*(1.0 - w[0][i])*(1.0 - w[4][j]) + + w[8][k]*(1.0 - w[3][i])*(1.0 - w[7][j]) ); scalar impz2 = ( - (1.0 - edgeWeights[9][k]) - *edgeWeights[0][i] - *(1.0 - edgeWeights[5][j]) - + edgeWeights[9][k] - *edgeWeights[3][i] - *(1.0 - edgeWeights[6][j]) + (1.0 - w[9][k])*w[0][i]*(1.0 - w[5][j]) + + w[9][k]*w[3][i]*(1.0 - w[6][j]) ); scalar impz3 = ( - (1.0 - edgeWeights[10][k]) - *edgeWeights[1][i] - *edgeWeights[5][j] - + edgeWeights[10][k] - *edgeWeights[2][i] - *edgeWeights[6][j] + (1.0 - w[10][k])*w[1][i]*w[5][j] + + w[10][k]*w[2][i]*w[6][j] ); scalar impz4 = ( - (1.0 - edgeWeights[11][k]) - *(1.0 - edgeWeights[1][i]) - *edgeWeights[4][j] - + edgeWeights[11][k] - *(1.0 - edgeWeights[2][i]) - *edgeWeights[7][j] + (1.0 - w[11][k])*(1.0 - w[1][i])*w[4][j] + + w[11][k]*(1.0 - w[2][i])*w[7][j] ); + scalar magImpz = impz1 + impz2 + impz3 + impz4; + impz1 /= magImpz; + impz2 /= magImpz; + impz3 /= magImpz; + impz4 /= magImpz; + // calculate the correction vectors - vector corx1 = impx1*(edgePoints[0][i] - edgex1); - vector corx2 = impx2*(edgePoints[1][i] - edgex2); - vector corx3 = impx3*(edgePoints[2][i] - edgex3); - vector corx4 = impx4*(edgePoints[3][i] - edgex4); + vector corx1 = impx1*(p[0][i] - edgex1); + vector corx2 = impx2*(p[1][i] - edgex2); + vector corx3 = impx3*(p[2][i] - edgex3); + vector corx4 = impx4*(p[3][i] - edgex4); - vector cory1 = impy1*(edgePoints[4][j] - edgey1); - vector cory2 = impy2*(edgePoints[5][j] - edgey2); - vector cory3 = impy3*(edgePoints[6][j] - edgey3); - vector cory4 = impy4*(edgePoints[7][j] - edgey4); + vector cory1 = impy1*(p[4][j] - edgey1); + vector cory2 = impy2*(p[5][j] - edgey2); + vector cory3 = impy3*(p[6][j] - edgey3); + vector cory4 = impy4*(p[7][j] - edgey4); - vector corz1 = impz1*(edgePoints[8][k] - edgez1); - vector corz2 = impz2*(edgePoints[9][k] - edgez2); - vector corz3 = impz3*(edgePoints[10][k] - edgez3); - vector corz4 = impz4*(edgePoints[11][k] - edgez4); + vector corz1 = impz1*(p[8][k] - edgez1); + vector corz2 = impz2*(p[9][k] - edgez2); + vector corz3 = impz3*(p[10][k] - edgez3); + vector corz4 = impz4*(p[11][k] - edgez4); // multiply by the importance factor + // x - direction edgex1 *= impx1; edgex2 *= impx2; @@ -279,7 +224,6 @@ void Foam::block::blockPoints() vertices_[vertexNo] += corx1 + corx2 + corx3 + corx4; vertices_[vertexNo] += cory1 + cory2 + cory3 + cory4; vertices_[vertexNo] += corz1 + corz2 + corz3 + corz4; - } } } diff --git a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C index cbd2d9e4191ccceac1505046fc5b468abbf20cd8..d8d12c08452286fff48d769389f881dd50581dcb 100644 --- a/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C +++ b/applications/utilities/mesh/manipulation/mergeOrSplitBaffles/mergeOrSplitBaffles.C @@ -154,10 +154,77 @@ void insertDuplicateMerge } +labelList findBaffles(const polyMesh& mesh, const labelList& boundaryFaces) +{ + // Get all duplicate face labels (in boundaryFaces indices!). + labelList duplicates = localPointRegion::findDuplicateFaces + ( + mesh, + boundaryFaces + ); + + + // Check that none are on processor patches + const polyBoundaryMesh& patches = mesh.boundaryMesh(); + + forAll(duplicates, bFaceI) + { + if (duplicates[bFaceI] != -1) + { + label faceI = mesh.nInternalFaces() + bFaceI; + label patchI = patches.whichPatch(faceI); + + if (isA<processorPolyPatch>(patches[patchI])) + { + FatalErrorIn("findBaffles(const polyMesh&, const labelList&)") + << "Duplicate face " << faceI + << " is on a processorPolyPatch." + << "This is not allowed." << nl + << "Face:" << faceI + << " is on patch:" << patches[patchI].name() + << abort(FatalError); + } + } + } + + + // Write to faceSet for ease of postprocessing. + { + faceSet duplicateSet + ( + mesh, + "duplicateFaces", + (mesh.nFaces() - mesh.nInternalFaces())/256 + ); + + forAll(duplicates, bFaceI) + { + label otherFaceI = duplicates[bFaceI]; + + if (otherFaceI != -1 && otherFaceI > bFaceI) + { + duplicateSet.insert(mesh.nInternalFaces() + bFaceI); + duplicateSet.insert(mesh.nInternalFaces() + otherFaceI); + } + } + + Pout<< "Writing " << duplicateSet.size() + << " duplicate faces to faceSet " << duplicateSet.objectPath() + << nl << endl; + duplicateSet.write(); + } + + return duplicates; +} + + + + int main(int argc, char *argv[]) { argList::validOptions.insert("split", ""); argList::validOptions.insert("overwrite", ""); + argList::validOptions.insert("detectOnly", ""); # include "setRootCase.H" # include "createTime.H" runTime.functionObjects().off(); @@ -165,6 +232,7 @@ int main(int argc, char *argv[]) bool split = args.options().found("split"); bool overwrite = args.options().found("overwrite"); + bool detectOnly = args.options().found("detectOnly"); // Collect all boundary faces labelList boundaryFaces(mesh.nFaces() - mesh.nInternalFaces()); @@ -175,6 +243,15 @@ int main(int argc, char *argv[]) } + if (detectOnly) + { + findBaffles(mesh, boundaryFaces); + + return 0; + } + + + // Read objects in time directory IOobjectList objects(mesh, runTime.timeName()); @@ -238,62 +315,7 @@ int main(int argc, char *argv[]) << nl << endl; // Get all duplicate face labels (in boundaryFaces indices!). - labelList duplicates = localPointRegion::findDuplicateFaces - ( - mesh, - boundaryFaces - ); - - - // Check that none are on processor patches - const polyBoundaryMesh& patches = mesh.boundaryMesh(); - - forAll(duplicates, bFaceI) - { - if (duplicates[bFaceI] != -1) - { - label faceI = mesh.nInternalFaces() + bFaceI; - label patchI = patches.whichPatch(faceI); - - if (isA<processorPolyPatch>(patches[patchI])) - { - FatalErrorIn(args.executable()) - << "Duplicate face " << faceI - << " is on a processorPolyPatch." - << "This is not allowed." << nl - << "Face:" << faceI - << " is on patch:" << patches[patchI].name() - << abort(FatalError); - } - } - } - - - // Write to faceSet for ease of postprocessing. - { - faceSet duplicateSet - ( - mesh, - "duplicateFaces", - (mesh.nFaces() - mesh.nInternalFaces())/256 - ); - - forAll(duplicates, bFaceI) - { - label otherFaceI = duplicates[bFaceI]; - - if (otherFaceI != -1 && otherFaceI > bFaceI) - { - duplicateSet.insert(mesh.nInternalFaces() + bFaceI); - duplicateSet.insert(mesh.nInternalFaces() + otherFaceI); - } - } - - Pout<< "Writing " << duplicateSet.size() - << " duplicate faces to faceSet " << duplicateSet.objectPath() - << nl << endl; - duplicateSet.write(); - } + labelList duplicates(findBaffles(mesh, boundaryFaces)); // Merge into internal faces. insertDuplicateMerge(mesh, duplicates, meshMod); diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C index f8f05747f8bcbf9ea7039be14c3c0b26fcbd3edb..c0503e5bf529a85621ea3eb80344638655990e83 100644 --- a/applications/utilities/mesh/manipulation/setSet/setSet.C +++ b/applications/utilities/mesh/manipulation/setSet/setSet.C @@ -714,9 +714,11 @@ commandStatus parseAction(const word& actionName) int main(int argc, char *argv[]) { +# include "addRegionOption.H" +# include "addTimeOptions.H" + argList::validOptions.insert("noVTK", ""); argList::validOptions.insert("batch", "file"); -# include "addTimeOptions.H" # include "setRootCase.H" # include "createTime.H" @@ -730,7 +732,7 @@ int main(int argc, char *argv[]) runTime.setTime(Times[startTime], startTime); -# include "createPolyMesh.H" +# include "createNamedPolyMesh.H" // Print some mesh info printMesh(runTime, mesh); diff --git a/applications/utilities/postProcessing/patch/patchAverage/patchAverage.C b/applications/utilities/postProcessing/patch/patchAverage/patchAverage.C index 41140a33fea2bf551f1d4de65a276e5ce11dbd13..f66a5cf2f3664e25125cd391795e12a657de7857 100644 --- a/applications/utilities/postProcessing/patch/patchAverage/patchAverage.C +++ b/applications/utilities/postProcessing/patch/patchAverage/patchAverage.C @@ -79,12 +79,12 @@ int main(int argc, char *argv[]) Info<< " Reading volScalarField " << fieldName << endl; volScalarField field(fieldHeader, mesh); - scalar area = sum(mesh.magSf().boundaryField()[patchi]); + scalar area = gSum(mesh.magSf().boundaryField()[patchi]); scalar sumField = 0; if (area > 0) { - sumField = sum + sumField = gSum ( mesh.magSf().boundaryField()[patchi] * field.boundaryField()[patchi] diff --git a/applications/utilities/postProcessing/patch/patchIntegrate/patchIntegrate.C b/applications/utilities/postProcessing/patch/patchIntegrate/patchIntegrate.C index 3c0e18a9cf37e841cd8ca6a79b9b4f6aeeeef11a..c4eb708ff71453935bc8813cdc6059f557fd6f58 100644 --- a/applications/utilities/postProcessing/patch/patchIntegrate/patchIntegrate.C +++ b/applications/utilities/postProcessing/patch/patchIntegrate/patchIntegrate.C @@ -75,14 +75,14 @@ int main(int argc, char *argv[]) } // Give patch area - Info<< " Patch area = " << sum(mesh.Sf().boundaryField()[patchi]) << endl; + Info<< " Patch area = " << gSum(mesh.Sf().boundaryField()[patchi]) << endl; if (fieldHeader.headerClassName() == "volScalarField") { Info<< " Reading volScalarField " << fieldName << endl; volScalarField field(fieldHeader, mesh); - vector sumField = sum + vector sumField = gSum ( mesh.Sf().boundaryField()[patchi] * field.boundaryField()[patchi] @@ -97,7 +97,7 @@ int main(int argc, char *argv[]) Info<< " Reading surfaceScalarField " << fieldName << endl; surfaceScalarField field(fieldHeader, mesh); - scalar sumField = sum(field.boundaryField()[patchi]); + scalar sumField = gSum(field.boundaryField()[patchi]); Info<< " Integral of " << fieldName << " over patch " << patchName << '[' << patchi << ']' << " = " diff --git a/applications/utilities/surface/surfaceCheck/surfaceCheck.C b/applications/utilities/surface/surfaceCheck/surfaceCheck.C index 3506b05de7942769a2a425868ba0ddb2f7a51f59..2cd26f757e6ed75f3e9a00516f15b354eacb3a03 100644 --- a/applications/utilities/surface/surfaceCheck/surfaceCheck.C +++ b/applications/utilities/surface/surfaceCheck/surfaceCheck.C @@ -36,7 +36,7 @@ License using namespace Foam; // Does face use valid vertices? -bool validTri(const triSurface& surf, const label faceI) +bool validTri(const bool verbose, const triSurface& surf, const label faceI) { // Simple check on indices ok. @@ -49,20 +49,21 @@ bool validTri(const triSurface& surf, const label faceI) || (f[2] < 0) || (f[2] >= surf.points().size()) ) { - //WarningIn("validTri(const triSurface&, const label)") - // << "triangle " << faceI << " vertices " << f - // << " uses point indices outside point range 0.." - // << surf.points().size()-1 << endl; + WarningIn("validTri(const triSurface&, const label)") + << "triangle " << faceI << " vertices " << f + << " uses point indices outside point range 0.." + << surf.points().size()-1 << endl; return false; } if ((f[0] == f[1]) || (f[0] == f[2]) || (f[1] == f[2])) { - //WarningIn("validTri(const triSurface&, const label)") - // << "triangle " << faceI - // << " uses non-unique vertices " << f - // << endl; + WarningIn("validTri(const triSurface&, const label)") + << "triangle " << faceI + << " uses non-unique vertices " << f + << " coords:" << f.points(surf.points()) + << endl; return false; } @@ -91,11 +92,12 @@ bool validTri(const triSurface& surf, const label faceI) && ((f[2] == nbrF[0]) || (f[2] == nbrF[1]) || (f[2] == nbrF[2])) ) { - //WarningIn("validTri(const triSurface&, const label)") - // << "triangle " << faceI << " vertices " << f - // << " has the same vertices as triangle " << nbrFaceI - // << " vertices " << nbrF - // << endl; + WarningIn("validTri(const triSurface&, const label)") + << "triangle " << faceI << " vertices " << f + << " has the same vertices as triangle " << nbrFaceI + << " vertices " << nbrF + << " coords:" << f.points(surf.points()) + << endl; return false; } @@ -170,9 +172,11 @@ int main(int argc, char *argv[]) argList::validArgs.clear(); argList::validArgs.append("surface file"); argList::validOptions.insert("noSelfIntersection", ""); + argList::validOptions.insert("verbose", ""); argList args(argc, argv); bool checkSelfIntersection = !args.options().found("noSelfIntersection"); + bool verbose = args.options().found("verbose"); fileName surfFileName(args.additionalArgs()[0]); Pout<< "Reading surface from " << surfFileName << " ..." << nl << endl; @@ -232,7 +236,7 @@ int main(int argc, char *argv[]) forAll(surf, faceI) { - if (!validTri(surf, faceI)) + if (!validTri(verbose, surf, faceI)) { illegalFaces.append(faceI); } diff --git a/applications/utilities/surface/surfaceSubset/surfaceSubsetDict b/applications/utilities/surface/surfaceSubset/surfaceSubsetDict index 70879af6f428700fe0b8d8f9dcd7cbd325732327..83f5399b4431f23bb58557ed8eab60fba36f3888 100644 --- a/applications/utilities/surface/surfaceSubset/surfaceSubsetDict +++ b/applications/utilities/surface/surfaceSubset/surfaceSubsetDict @@ -42,4 +42,7 @@ surface // Extend selection with edge neighbours addFaceNeighbours no; +// Invert selection +invertSelection false; + // ************************************************************************* // diff --git a/etc/apps/cint/bashrc b/etc/apps/cint/bashrc index 74827dfeed23e180a716d4bda555d112a0cbd4bf..11909e0487036cc94cf8dc613568c1b3bab0c01c 100644 --- a/etc/apps/cint/bashrc +++ b/etc/apps/cint/bashrc @@ -31,7 +31,7 @@ # #------------------------------------------------------------------------------ -export CINTSYSDIR=~/pub/CINT/cint +export CINTSYSDIR=~/pub/CINT/cint7 export PATH=$PATH:$CINTSYSDIR export MANPATH=$MANPATH:$CINTSYSDIR/doc export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$CINTSYSDIR diff --git a/src/OpenFOAM/containers/Lists/SortableList/SortableList.C b/src/OpenFOAM/containers/Lists/SortableList/SortableList.C index 7ebfa9de9ef185d82ee77f4e1e0c7c07d0d3921d..9eaf99c801b994d8f2a93f31c3ca2b8b8a83ca03 100644 --- a/src/OpenFOAM/containers/Lists/SortableList/SortableList.C +++ b/src/OpenFOAM/containers/Lists/SortableList/SortableList.C @@ -32,7 +32,7 @@ License // Construct from List template <class Type> -Foam::SortableList<Type>::SortableList(const List<Type>& values) +Foam::SortableList<Type>::SortableList(const UList<Type>& values) : List<Type>(values), indices_(values.size()) diff --git a/src/OpenFOAM/containers/Lists/SortableList/SortableList.H b/src/OpenFOAM/containers/Lists/SortableList/SortableList.H index 1a5272e5b7823098dec984927c1ede3d23066286..305da6e32eed03ef9194d42a1247925e992b203f 100644 --- a/src/OpenFOAM/containers/Lists/SortableList/SortableList.H +++ b/src/OpenFOAM/containers/Lists/SortableList/SortableList.H @@ -88,7 +88,7 @@ public: //- Construct from List, sorting the elements. // Starts with indices set to index in argument - explicit SortableList(const List<Type>&); + explicit SortableList(const UList<Type>&); //- Construct from tranferred List, sorting the elements. // Starts with indices set to index in argument diff --git a/src/OpenFOAM/fields/Fields/Field/Field.C b/src/OpenFOAM/fields/Fields/Field/Field.C index 994f8ee6301b63f66c26e5532b5c755c2f86dece..c906bcbf5559b9e601109e01f4f10281af24b96c 100644 --- a/src/OpenFOAM/fields/Fields/Field/Field.C +++ b/src/OpenFOAM/fields/Fields/Field/Field.C @@ -575,20 +575,6 @@ void Field<Type>::replace } -template<class Type> -void Field<Type>::transfer(Field<Type>& f) -{ - List<Type>::transfer(f); -} - - -template<class Type> -void Field<Type>::transfer(List<Type>& lst) -{ - List<Type>::transfer(lst); -} - - template<class Type> tmp<Field<Type> > Field<Type>::T() const { diff --git a/src/OpenFOAM/fields/Fields/Field/Field.H b/src/OpenFOAM/fields/Fields/Field/Field.H index 8e168cb0ac9b5911a8b52da259615bf751365cca..1b372925e340ea410302b1162ad6598c7b65ccee 100644 --- a/src/OpenFOAM/fields/Fields/Field/Field.H +++ b/src/OpenFOAM/fields/Fields/Field/Field.H @@ -297,12 +297,6 @@ public: //- Replace a component field of the field void replace(const direction, const cmptType&); - //- Transfer the contents of the argument Field into this Field - void transfer(Field<Type>&); - - //- Transfer the contents of the argument List into this Field - void transfer(List<Type>&); - //- Return the field transpose (only defined for second rank tensors) tmp<Field<Type> > T() const; diff --git a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointFaces.C b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointFaces.C index dc8d865f59cf8a48175efd0e7e4b3f9946a19302..b7a90375b7ce1cfba075922e47529dce67fd1ea7 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointFaces.C +++ b/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshPointFaces.C @@ -38,6 +38,11 @@ const labelListList& primitiveMesh::pointFaces() const { if (!pfPtr_) { + if (debug) + { + Pout<< "primitiveMesh::pointFaces() : " + << "calculating pointFaces" << endl; + } // Invert faces() pfPtr_ = new labelListList(nPoints()); invertManyToMany(nPoints(), faces(), *pfPtr_); diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C index fdf89f4123b23c22d5e092eedb01e906ace6c6aa..f24117e15f7e81cc2062e1f29c7124c4c5d37e92 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C @@ -218,7 +218,8 @@ Foam::label Foam::autoSnapDriver::getCollocatedPoints // Calculate displacement as average of patch points. Foam::pointField Foam::autoSnapDriver::smoothPatchDisplacement ( - const motionSmoother& meshMover + const motionSmoother& meshMover, + const List<labelPair>& baffles ) const { const indirectPrimitivePatch& pp = meshMover.patch(); @@ -253,6 +254,34 @@ Foam::pointField Foam::autoSnapDriver::smoothPatchDisplacement const pointField& points = pp.points(); const polyMesh& mesh = meshMover.mesh(); + // Get labels of faces to count (master of coupled faces and baffle pairs) + PackedList<1> isMasterFace(syncTools::getMasterFaces(mesh)); + + { + forAll(baffles, i) + { + label f0 = baffles[i].first(); + label f1 = baffles[i].second(); + + if (isMasterFace.get(f0) == 1) + { + // Make f1 a slave + isMasterFace.set(f1, 0); + } + else if (isMasterFace.get(f1) == 1) + { + isMasterFace.set(f0, 0); + } + else + { + FatalErrorIn("autoSnapDriver::smoothPatchDisplacement(..)") + << "Both sides of baffle consisting of faces " << f0 + << " and " << f1 << " are already slave faces." + << abort(FatalError); + } + } + } + // Get average position of boundary face centres // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -266,9 +295,14 @@ Foam::pointField Foam::autoSnapDriver::smoothPatchDisplacement forAll(pFaces, pfI) { - avgBoundary[patchPointI] += pp[pFaces[pfI]].centre(points); + label faceI = pFaces[pfI]; + + if (isMasterFace.get(pp.addressing()[faceI]) == 1) + { + avgBoundary[patchPointI] += pp[faceI].centre(points); + nBoundary[patchPointI]++; + } } - nBoundary[patchPointI] = pFaces.size(); } syncTools::syncPointList @@ -886,7 +920,7 @@ void Foam::autoSnapDriver::preSmoothPatch checkFaces[faceI] = faceI; } - pointField patchDisp(smoothPatchDisplacement(meshMover)); + pointField patchDisp(smoothPatchDisplacement(meshMover, baffles)); // The current mesh is the starting mesh to smooth from. meshMover.setDisplacement(patchDisp); @@ -1008,9 +1042,11 @@ Foam::vectorField Foam::autoSnapDriver::calcNearestSurface // Displacement per patch point vectorField patchDisp(localPoints.size(), vector::zero); - if (returnReduce(localPoints.size(), sumOp<label>()) > 0) { + // Current surface snapped to + labelList snapSurf(localPoints.size(), -1); + // Divide surfaces into zoned and unzoned labelList zonedSurfaces; labelList unzonedSurfaces; @@ -1039,16 +1075,9 @@ Foam::vectorField Foam::autoSnapDriver::calcNearestSurface patchDisp[pointI] = hitInfo[pointI].hitPoint() - localPoints[pointI]; + + snapSurf[pointI] = hitSurface[pointI]; } - //else - //{ - // WarningIn("autoSnapDriver::calcNearestSurface(..)") - // << "For point:" << pointI - // << " coordinate:" << localPoints[pointI] - // << " did not find any surface within:" - // << 4*snapDist[pointI] - // << " meter." << endl; - //} } } @@ -1060,6 +1089,7 @@ Foam::vectorField Foam::autoSnapDriver::calcNearestSurface // Surfaces with zone information const wordList& faceZoneNames = surfaces.faceZoneNames(); + // Current best snap distance scalarField minSnapDist(snapDist); forAll(zonedSurfaces, i) @@ -1105,19 +1135,25 @@ Foam::vectorField Foam::autoSnapDriver::calcNearestSurface minSnapDist[pointI], mag(patchDisp[pointI]) ); - } - else - { - WarningIn("autoSnapDriver::calcNearestSurface(..)") - << "For point:" << pointI - << " coordinate:" << localPoints[pointI] - << " did not find any surface within:" - << 4*minSnapDist[pointI] - << " meter." << endl; + + snapSurf[pointI] = zoneSurfI; } } } + // Check if all points are being snapped + forAll(snapSurf, pointI) + { + if (snapSurf[pointI] == -1) + { + WarningIn("autoSnapDriver::calcNearestSurface(..)") + << "For point:" << pointI + << " coordinate:" << localPoints[pointI] + << " did not find any surface within:" + << minSnapDist[pointI] + << " meter." << endl; + } + } { scalarField magDisp(mag(patchDisp)); diff --git a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H index 1604e358593d6bab3969820c9a5af5ee2b8b36f0..dc19397243da4556b9833a7c263ffbe0c3446f17 100644 --- a/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H +++ b/src/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H @@ -100,7 +100,11 @@ class autoSnapDriver //- Calculate displacement per patch point to smooth out patch. // Quite complicated in determining which points to move where. - pointField smoothPatchDisplacement(const motionSmoother&) const; + pointField smoothPatchDisplacement + ( + const motionSmoother&, + const List<labelPair>& + ) const; //- Check that face zones are synced void checkCoupledFaceZones() const; diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H index d3eb52b7c42d0ce699d1d8b189fe976456468e3a..da533c4d136da55dcce274038dd8a619ceff242c 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H @@ -382,10 +382,12 @@ private: //- Finds zone per cell for cells inside closed named surfaces. // (uses geometric test for insideness) + // Adapts namedSurfaceIndex so all faces on boundary of cellZone + // have corresponding faceZone. void findCellZoneGeometric ( const labelList& closedNamedSurfaces, - const labelList& namedSurfaceIndex, + labelList& namedSurfaceIndex, const labelList& surfaceToCellZone, labelList& cellToZone ) const; diff --git a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C index 7b2ecfc395226c9d680f63fdf5301ab98afaa148..fdcd15f0e98d548b2d10647e81a3ef7001221a5a 100644 --- a/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C +++ b/src/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C @@ -47,6 +47,7 @@ License #include "motionSmoother.H" #include "polyMeshGeometry.H" #include "IOmanip.H" +#include "cellSet.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -1490,7 +1491,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::mergeBaffles void Foam::meshRefinement::findCellZoneGeometric ( const labelList& closedNamedSurfaces, // indices of closed surfaces - const labelList& namedSurfaceIndex, // per face index of named surface + labelList& namedSurfaceIndex, // per face index of named surface const labelList& surfaceToCellZone, // cell zone index per surface labelList& cellToZone @@ -1627,6 +1628,76 @@ void Foam::meshRefinement::findCellZoneGeometric } } } + + + // Adapt the namedSurfaceIndex + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // for if any cells were not completely covered. + + for (label faceI = 0; faceI < mesh_.nInternalFaces(); faceI++) + { + label ownZone = cellToZone[mesh_.faceOwner()[faceI]]; + label neiZone = cellToZone[mesh_.faceNeighbour()[faceI]]; + + if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone)) + { + // Give face the zone of the owner + namedSurfaceIndex[faceI] = findIndex + ( + surfaceToCellZone, + max(ownZone, neiZone) + ); + } + } + + labelList neiCellZone(mesh_.nFaces()-mesh_.nInternalFaces()); + for + ( + label faceI = mesh_.nInternalFaces(); + faceI < mesh_.nFaces(); + faceI++ + ) + { + label own = mesh_.faceOwner()[faceI]; + neiCellZone[faceI-mesh_.nInternalFaces()] = cellToZone[own]; + } + syncTools::swapBoundaryFaceList(mesh_, neiCellZone, false); + + const polyBoundaryMesh& patches = mesh_.boundaryMesh(); + + forAll(patches, patchI) + { + const polyPatch& pp = patches[patchI]; + + if (pp.coupled()) + { + forAll(pp, i) + { + label faceI = pp.start()+i; + label ownZone = cellToZone[mesh_.faceOwner()[faceI]]; + label neiZone = neiCellZone[faceI-mesh_.nInternalFaces()]; + + if (namedSurfaceIndex[faceI] == -1 && (ownZone != neiZone)) + { + // Give face the zone of the owner + namedSurfaceIndex[faceI] = findIndex + ( + surfaceToCellZone, + max(ownZone, neiZone) + ); + } + } + } + } + + // Sync + syncTools::syncFaceList + ( + mesh_, + namedSurfaceIndex, + maxEqOp<label>(), + false + ); } @@ -1656,7 +1727,7 @@ void Foam::meshRefinement::findCellZoneTopo blockedFace[faceI] = true; } } - syncTools::syncFaceList(mesh_, blockedFace, orEqOp<bool>(), false); + // No need to sync since namedSurfaceIndex already is synced // Set region per cell based on walking regionSplit cellRegion(mesh_, blockedFace); @@ -2149,8 +2220,8 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::splitMesh { FatalErrorIn ( - "meshRefinement::findCellZoneTopo" - "(const point&, const labelList&, const labelList&, labelList&)" + "meshRefinement::splitMesh" + "(const label, const labelList&, const point&)" ) << "Point " << keepPoint << " is not inside the mesh." << nl << "Bounding box of the mesh:" << mesh_.globalData().bb() @@ -2703,6 +2774,79 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify } + // Put the cells into the correct zone + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + // Closed surfaces with cellZone specified. + labelList closedNamedSurfaces(surfaces_.getClosedNamedSurfaces()); + + // Zone per cell: + // -2 : unset + // -1 : not in any zone + // >=0: zoneID + labelList cellToZone(mesh_.nCells(), -2); + + + // Set using geometric test + // ~~~~~~~~~~~~~~~~~~~~~~~~ + + if (closedNamedSurfaces.size() > 0) + { + findCellZoneGeometric + ( + closedNamedSurfaces, // indices of closed surfaces + namedSurfaceIndex, // per face index of named surface + surfaceToCellZone, // cell zone index per surface + cellToZone + ); + } + + //{ + // Pout<< "** finding out blocked faces." << endl; + // + // cellSet zonedCellsGeom(mesh_, "zonedCellsGeom", 100); + // forAll(cellToZone, cellI) + // { + // if (cellToZone[cellI] >= 0) + // { + // zonedCellsGeom.insert(cellI); + // } + // } + // Pout<< "Writing zoned cells to " << zonedCellsGeom.objectPath() + // << endl; + // zonedCellsGeom.write(); + // + // + // faceSet zonedFaces(mesh_, "zonedFaces", 100); + // forAll(namedSurfaceIndex, faceI) + // { + // label surfI = namedSurfaceIndex[faceI]; + // + // if (surfI != -1) + // { + // zonedFaces.insert(faceI); + // } + // } + // Pout<< "Writing zoned faces to " << zonedFaces.objectPath() << endl; + // zonedFaces.write(); + //} + + // Set using walking + // ~~~~~~~~~~~~~~~~~ + + //if (returnReduce(nSet, sumOp<label>()) < mesh_.globalData().nTotalCells()) + { + // Topological walk + findCellZoneTopo + ( + keepPoint, + namedSurfaceIndex, + surfaceToCellZone, + cellToZone + ); + } + + // Topochange container polyTopoChange meshMod(mesh_); @@ -2770,50 +2914,6 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::meshRefinement::zonify // Put the cells into the correct zone // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Closed surfaces with cellZone specified. - labelList closedNamedSurfaces(surfaces_.getClosedNamedSurfaces()); - - // Zone per cell: - // -2 : unset - // -1 : not in any zone - // >=0: zoneID - labelList cellToZone(mesh_.nCells(), -2); - - - // Set using geometric test - // ~~~~~~~~~~~~~~~~~~~~~~~~ - - if (closedNamedSurfaces.size() > 0) - { - findCellZoneGeometric - ( - closedNamedSurfaces, // indices of closed surfaces - namedSurfaceIndex, // per face index of named surface - surfaceToCellZone, // cell zone index per surface - cellToZone - ); - } - - - // Set using walking - // ~~~~~~~~~~~~~~~~~ - - //if (returnReduce(nSet, sumOp<label>()) < mesh_.globalData().nTotalCells()) - { - // Topological walk - findCellZoneTopo - ( - keepPoint, - namedSurfaceIndex, - surfaceToCellZone, - cellToZone - ); - } - - - // Actually move the cells to their zone - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - forAll(cellToZone, cellI) { label zoneI = cellToZone[cellI]; diff --git a/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C b/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C index 00ce11355a3ceebabe00dffd59f1605453f76ee2..321eeba6a87be806089b4cafd53ea2195286ca56 100644 --- a/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C +++ b/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.C @@ -33,15 +33,68 @@ void Foam::setRefCell const volScalarField& field, const dictionary& dict, label& refCelli, - scalar& refValue + scalar& refValue, + bool forceReference ) { - if (field.needReference()) + if (field.needReference() || forceReference) { word refCellName = field.name() + "RefCell"; + word refPointName = field.name() + "RefPoint"; + word refValueName = field.name() + "RefValue"; - refCelli = readLabel(dict.lookup(refCellName)); + if (dict.found(refCellName)) + { + if (Pstream::master()) + { + refCelli = readLabel(dict.lookup(refCellName)); + } + else + { + refCelli = -1; + } + } + else if (dict.found(refPointName)) + { + point refPointi(dict.lookup(refPointName)); + refCelli = field.mesh().findCell(refPointi); + label hasRef = (refCelli >= 0 ? 1 : 0); + label sumHasRef = returnReduce<label>(hasRef, sumOp<label>()); + if (sumHasRef != 1) + { + FatalErrorIn + ( + "void Foam::setRefCell" + "(" + " const volScalarField&," + " const dictionary&," + " label& scalar&," + " bool" + ")" + ) + << "Unable to set reference cell for field " << field.name() + << nl << " Reference point " << refPointName + << " found on multiple domains" << nl << abort(FatalError); + } + } + else + { + FatalErrorIn + ( + "void Foam::setRefCell" + "(" + " const volScalarField&," + " const dictionary&," + " label& scalar&," + " bool" + ")" + ) + << "Unable to set reference cell for field" << field.name() << nl + << " Please supply either " << refCellName + << " or " << refPointName << nl << abort(FatalError); + } + refValue = readScalar(dict.lookup(refValueName)); } } diff --git a/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.H b/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.H index 724f44ed175186e6c765dc4b3fd7472cace9b41c..db9858ce27aed5b35cd2518281721d71c6c524ad 100644 --- a/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.H +++ b/src/finiteVolume/cfdTools/general/findRefCell/findRefCell.H @@ -52,7 +52,8 @@ void setRefCell const volScalarField& field, const dictionary& dict, label& refCelli, - scalar& refValue + scalar& refValue, + bool forceReference = false ); } diff --git a/src/finiteVolume/fields/fvPatchFields/derived/directMappedFixedValue/directMappedFixedValueFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/directMappedFixedValue/directMappedFixedValueFvPatchField.C index 279e72a0c55620bc270bd21ba3d65c022529434c..ab3af1717e006ce47754d5affaa9b7d93de5bc3a 100644 --- a/src/finiteVolume/fields/fvPatchFields/derived/directMappedFixedValue/directMappedFixedValueFvPatchField.C +++ b/src/finiteVolume/fields/fvPatchFields/derived/directMappedFixedValue/directMappedFixedValueFvPatchField.C @@ -234,6 +234,16 @@ void directMappedFixedValueFvPatchField<Type>::updateCoeffs() ( mpp.samplePatch() ); + if (patchID < 0) + { + FatalErrorIn + ( + "void directMappedFixedValueFvPatchField<Type>::" + "updateCoeffs()" + )<< "Unable to find sample patch " << mpp.samplePatch() + << " for patch " << this->patch().name() << nl + << abort(FatalError); + } typedef GeometricField<Type, fvPatchField, volMesh> fieldType; const word& fieldName = this->dimensionedInternalField().name(); const fieldType& sendField = diff --git a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C index 9dab83d168a4e57c7041331ca349b95dd1fdcf44..b8698eb17738d2e5e39adfd6ac0eaa3568356a15 100644 --- a/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C +++ b/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C @@ -483,7 +483,7 @@ void Foam::fvMatrix<Type>::setReference { if (psi_.needReference() || forceReference) { - if (Pstream::master()) + if (cell >= 0) { source()[cell] += diag()[cell]*value; diag()[cell] += diag()[cell]; diff --git a/src/meshTools/Make/files b/src/meshTools/Make/files index 64437bdda84ba379092b0f2295a87ed05be1843b..99587f8d3c07989d6e6af07e0766db4f9df8c4f7 100644 --- a/src/meshTools/Make/files +++ b/src/meshTools/Make/files @@ -107,6 +107,7 @@ $(pointSources)/faceToPoint/faceToPoint.C $(pointSources)/boxToPoint/boxToPoint.C $(pointSources)/surfaceToPoint/surfaceToPoint.C $(pointSources)/zoneToPoint/zoneToPoint.C +$(pointSources)/nearestToPoint/nearestToPoint.C surfaceSets/surfaceSets.C diff --git a/src/meshTools/searchableSurface/searchableSurfaceWithGaps.C b/src/meshTools/searchableSurface/searchableSurfaceWithGaps.C index 50e851296bda5973890d81f579d27c2334ea8b22..b41a4409b20eedcadd924aa9082220acdc33882a 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceWithGaps.C +++ b/src/meshTools/searchableSurface/searchableSurfaceWithGaps.C @@ -26,7 +26,6 @@ License #include "searchableSurfaceWithGaps.H" #include "addToRunTimeSelectionTable.H" -#include "SortableList.H" #include "Time.H" #include "ListOps.H" @@ -82,7 +81,7 @@ Foam::Pair<Foam::vector> Foam::searchableSurfaceWithGaps::offsetVecs // Do second offset vector perp to original edge and first offset vector offsets[1] = n ^ offsets[0]; - offsets[1] *= gap_/mag(offsets[1]); + offsets[1] *= gap_; } return offsets; @@ -207,6 +206,10 @@ void Foam::searchableSurfaceWithGaps::findLine List<pointIndexHit>& info ) const { + + // Test with unperturbed vectors + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + surface().findLine(start, end, info); // Count number of misses. Determine map @@ -215,6 +218,10 @@ void Foam::searchableSurfaceWithGaps::findLine if (returnReduce(nMiss, sumOp<label>()) > 0) { + //Pout<< "** retesting with offset0 " << nMiss << " misses out of " + // << start.size() << endl; + + // extract segments according to map pointField compactStart(start, compactMap); pointField compactEnd(end, compactMap); @@ -228,20 +235,36 @@ void Foam::searchableSurfaceWithGaps::findLine offset1 ); + // Test with offset0 perturbed vectors + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // test in pairs: only if both perturbations hit something // do we accept the hit. + const vectorField smallVec(SMALL*(compactEnd-compactStart)); + List<pointIndexHit> plusInfo; - surface().findLine(compactStart+offset0, compactEnd+offset0, plusInfo); + surface().findLine + ( + compactStart+offset0-smallVec, + compactEnd+offset0+smallVec, + plusInfo + ); List<pointIndexHit> minInfo; - surface().findLine(compactStart-offset0, compactEnd-offset0, minInfo); + surface().findLine + ( + compactStart-offset0-smallVec, + compactEnd-offset0+smallVec, + minInfo + ); // Extract any hits forAll(plusInfo, i) { if (plusInfo[i].hit() && minInfo[i].hit()) { - info[compactMap[i]] = plusInfo[i].hitPoint()-offset0[i]; + info[compactMap[i]] = plusInfo[i]; + info[compactMap[i]].rawPoint() -= offset0[i]; } } @@ -250,6 +273,12 @@ void Foam::searchableSurfaceWithGaps::findLine if (returnReduce(nMiss, sumOp<label>()) > 0) { + //Pout<< "** retesting with offset1 " << nMiss << " misses out of " + // << start.size() << endl; + + // Test with offset1 perturbed vectors + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Extract (inplace possible because of order) forAll(plusMissMap, i) { @@ -266,17 +295,18 @@ void Foam::searchableSurfaceWithGaps::findLine offset0.setSize(plusMissMap.size()); offset1.setSize(plusMissMap.size()); + const vectorField smallVec(SMALL*(compactEnd-compactStart)); surface().findLine ( - compactStart+offset1, - compactEnd+offset1, + compactStart+offset1-smallVec, + compactEnd+offset1+smallVec, plusInfo ); surface().findLine ( - compactStart-offset1, - compactEnd-offset1, + compactStart-offset1-smallVec, + compactEnd-offset1+smallVec, minInfo ); @@ -285,7 +315,8 @@ void Foam::searchableSurfaceWithGaps::findLine { if (plusInfo[i].hit() && minInfo[i].hit()) { - info[compactMap[i]] = plusInfo[i].hitPoint()-offset1[i]; + info[compactMap[i]] = plusInfo[i]; + info[compactMap[i]].rawPoint() -= offset1[i]; } } } diff --git a/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H b/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H index a5392867f15899e8dda89511944574cfa60f680f..e88cae68290aa257942f17b18ecb75e2f0c2b5b0 100644 --- a/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H +++ b/src/meshTools/searchableSurface/searchableSurfaceWithGaps.H @@ -27,7 +27,13 @@ Class Description searchableSurface using multiple slightly shifted underlying surfaces - to make sure pierces don't go through gaps. + to make sure pierces don't go through gaps: + - shift test vector with two small vectors (of size gap_) perpendicular + to the original. + Test with + and - this vector. Only if both register a hit is it seen + as one. + - extend the test vector slightly (with SMALL) to account for numerical + inaccuracies. SourceFiles searchableSurfaceWithGaps.C diff --git a/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.C b/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.C new file mode 100644 index 0000000000000000000000000000000000000000..f4b759c6fe43c2d007757ba34d1cbb729696d518 --- /dev/null +++ b/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.C @@ -0,0 +1,154 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "nearestToPoint.H" +#include "polyMesh.H" +#include "meshSearch.H" + +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + +defineTypeNameAndDebug(nearestToPoint, 0); + +addToRunTimeSelectionTable(topoSetSource, nearestToPoint, word); + +addToRunTimeSelectionTable(topoSetSource, nearestToPoint, istream); + +} + + +Foam::topoSetSource::addToUsageTable Foam::nearestToPoint::usage_ +( + nearestToPoint::typeName, + "\n Usage: nearestToPoint (pt0 .. ptn)\n\n" + " Select the nearest point for each of the points pt0 ..ptn\n\n" +); + + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void Foam::nearestToPoint::combine(topoSet& set, const bool add) const +{ + // Do linear search since usually just a few points. + + forAll(points_, pointI) + { + const pointField& pts = mesh_.points(); + + if (pts.size() > 0) + { + label minPointI = 0; + scalar minDistSqr = magSqr(pts[minPointI] - points_[pointI]); + + for (label i = 1; i < pts.size(); i++) + { + scalar distSqr = magSqr(pts[i] - points_[pointI]); + + if (distSqr < minDistSqr) + { + minDistSqr = distSqr; + minPointI = i; + } + } + + addOrDelete(set, minPointI, add); + } + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +// Construct from components +Foam::nearestToPoint::nearestToPoint +( + const polyMesh& mesh, + const pointField& points +) +: + topoSetSource(mesh), + points_(points) +{} + + +// Construct from dictionary +Foam::nearestToPoint::nearestToPoint +( + const polyMesh& mesh, + const dictionary& dict +) +: + topoSetSource(mesh), + points_(dict.lookup("points")) +{} + + +// Construct from Istream +Foam::nearestToPoint::nearestToPoint +( + const polyMesh& mesh, + Istream& is +) +: + topoSetSource(mesh), + points_(checkIs(is)) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::nearestToPoint::~nearestToPoint() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::nearestToPoint::applyToSet +( + const topoSetSource::setAction action, + topoSet& set +) const +{ + if ((action == topoSetSource::NEW) || (action == topoSetSource::ADD)) + { + Info<< " Adding points nearest to " << points_ << endl; + + combine(set, true); + } + else if (action == topoSetSource::DELETE) + { + Info<< " Removing points nearest to " << points_ << endl; + + combine(set, false); + } +} + + +// ************************************************************************* // diff --git a/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H b/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H new file mode 100644 index 0000000000000000000000000000000000000000..ba63cc14f28d059f88eb35eda2b58dbd0e20eb43 --- /dev/null +++ b/src/meshTools/sets/pointSources/nearestToPoint/nearestToPoint.H @@ -0,0 +1,122 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::nearestToPoint + +Description + A topoSetSource to select points nearest to points. + +SourceFiles + nearestToPoint.C + +\*---------------------------------------------------------------------------*/ + +#ifndef nearestToPoint_H +#define nearestToPoint_H + +#include "topoSetSource.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class nearestToPoint Declaration +\*---------------------------------------------------------------------------*/ + +class nearestToPoint +: + public topoSetSource +{ + + // Private data + + //- Add usage string + static addToUsageTable usage_; + + //- points to select nearest to + pointField points_; + + + // Private Member Functions + + void combine(topoSet& set, const bool add) const; + + +public: + + //- Runtime type information + TypeName("nearestToPoint"); + + // Constructors + + //- Construct from components + nearestToPoint + ( + const polyMesh& mesh, + const pointField& points + ); + + //- Construct from dictionary + nearestToPoint + ( + const polyMesh& mesh, + const dictionary& dict + ); + + //- Construct from Istream + nearestToPoint + ( + const polyMesh& mesh, + Istream& + ); + + + // Destructor + + virtual ~nearestToPoint(); + + + // Member Functions + + virtual void applyToSet + ( + const topoSetSource::setAction action, + topoSet& + ) const; + +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/thermophysicalModels/specie/thermo/janaf/janafThermoI.H b/src/thermophysicalModels/specie/thermo/janaf/janafThermoI.H index 754996f27c6c6cc8797596629309270fd2e0fbc3..7881a307987c9f98d2e8df05ea5ae76a61bc3107 100644 --- a/src/thermophysicalModels/specie/thermo/janaf/janafThermoI.H +++ b/src/thermophysicalModels/specie/thermo/janaf/janafThermoI.H @@ -164,7 +164,7 @@ inline Foam::scalar Foam::janafThermo<equationOfState>::hc() const ( (((a[4]/5.0*Tstd + a[3]/4.0)*Tstd + a[2]/3.0)*Tstd + a[1]/2.0)*Tstd + a[0] - )*Tstd + )*Tstd + a[5] ); } diff --git a/src/turbulenceModels/LES/incompressible/Make/files b/src/turbulenceModels/LES/incompressible/Make/files index b6c245c866bb81e3c6767c2f6fbde1823bd0c430..feda56ca15f600f00a5efd2f24da1f3ab9c2cdc0 100644 --- a/src/turbulenceModels/LES/incompressible/Make/files +++ b/src/turbulenceModels/LES/incompressible/Make/files @@ -27,6 +27,7 @@ dynMixedSmagorinsky/dynMixedSmagorinsky.C /*Smagorinsky2/Smagorinsky2.C*/ +kOmegaSSTSAS/kOmegaSSTSAS.C /* Wall functions */ wallFunctions=derivedFvPatchFields/wallFunctions diff --git a/src/turbulenceModels/LES/incompressible/kOmegaSSTSAS/kOmegaSSTSAS.C b/src/turbulenceModels/LES/incompressible/kOmegaSSTSAS/kOmegaSSTSAS.C new file mode 100644 index 0000000000000000000000000000000000000000..a06f4298c64bdb8f8f202e781682ead49d8b8773 --- /dev/null +++ b/src/turbulenceModels/LES/incompressible/kOmegaSSTSAS/kOmegaSSTSAS.C @@ -0,0 +1,447 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "kOmegaSSTSAS.H" +#include "addToRunTimeSelectionTable.H" +#include "wallDist.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace incompressible +{ +namespace LESModels +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(kOmegaSSTSAS, 0); +addToRunTimeSelectionTable(LESModel, kOmegaSSTSAS, dictionary); + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +tmp<volScalarField> kOmegaSSTSAS::F1(const volScalarField& CDkOmega) const +{ + volScalarField CDkOmegaPlus = max + ( + CDkOmega, + dimensionedScalar("1.0e-10", dimless/sqr(dimTime), 1.0e-10) + ); + + volScalarField arg1 = min + ( + min + ( + max + ( + (scalar(1)/betaStar_)*sqrt(k_)/(omega_*y_), + scalar(500)*nu()/(sqr(y_)*omega_) + ), + (4*alphaOmega2_)*k_/(CDkOmegaPlus*sqr(y_)) + ), + scalar(10) + ); + + return tanh(pow4(arg1)); +} + + +tmp<volScalarField> kOmegaSSTSAS::F2() const +{ + volScalarField arg2 = min + ( + max + ( + (scalar(2)/betaStar_)*sqrt(k_)/(omega_*y_), + scalar(500)*nu()/(sqr(y_)*omega_) + ), + scalar(100) + ); + + return tanh(sqr(arg2)); +} + + +tmp<volScalarField> kOmegaSSTSAS::Lvk2 +( + const volScalarField& S2 +) const +{ + return kappa_*sqrt(S2) + /( + mag(fvc::laplacian(U())) + + dimensionedScalar + ( + "ROOTVSMALL", + dimensionSet(0, -1 , -1, 0, 0, 0, 0), + ROOTVSMALL + ) + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +kOmegaSSTSAS::kOmegaSSTSAS +( + const volVectorField& U, + const surfaceScalarField& phi, + transportModel& transport, + const word& modelName +) +: + LESModel(modelName, U, phi, transport), + + alphaK1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "alphaK1", + coeffDict(), + 0.85034 + ) + ), + alphaK2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "alphaK2", + coeffDict(), + 1.0 + ) + ), + alphaOmega1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "alphaOmega1", + coeffDict(), + 0.5 + ) + ), + alphaOmega2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "alphaOmega2", + coeffDict(), + 0.85616 + ) + ), + gamma1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "gamma1", + coeffDict(), + 0.5532 + ) + ), + gamma2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "gamma2", + coeffDict(), + 0.4403 + ) + ), + beta1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "beta1", + coeffDict(), + 0.075 + ) + ), + beta2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "beta2", + coeffDict(), + 0.0828 + ) + ), + betaStar_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "betaStar", + coeffDict(), + 0.09 + ) + ), + a1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "a1", + coeffDict(), + 0.31 + ) + ), + c1_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "c1", + coeffDict(), + 10.0 + ) + ), + alphaPhi_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "alphaPhi", + coeffDict(), + 0.666667 + ) + ), + zetaTilda2_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "zetaTilda2", + coeffDict(), + 1.755 + ) + ), + FSAS_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "FSAS", + coeffDict(), + 1.25 + ) + ), + + omega0_("omega0", dimless/dimTime, SMALL), + omegaSmall_("omegaSmall", dimless/dimTime, SMALL), + y_(mesh_), + Cmu_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "Cmu", + coeffDict(), + 0.09 + ) + ), + kappa_ + ( + dimensioned<scalar>::lookupOrAddToDict + ( + "kappa", + *this, + 0.4187 + ) + ), + + k_ + ( + IOobject + ( + "k", + runTime_.timeName(), + mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh_ + ), + + omega_ + ( + IOobject + ( + "omega", + runTime_.timeName(), + mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh_ + ), + + nuSgs_ + ( + IOobject + ( + "nuSgs", + runTime_.timeName(), + mesh_, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh_ + ) +{ + printCoeffs(); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void kOmegaSSTSAS::correct(const tmp<volTensorField>& gradU) +{ + LESModel::correct(gradU); + + if (mesh_.changing()) + { + y_.correct(); + } + + volScalarField S2 = magSqr(symm(gradU())); + gradU.clear(); + + volVectorField gradK = fvc::grad(k_); + volVectorField gradOmega = fvc::grad(omega_); + volScalarField L = sqrt(k_)/(pow(Cmu_, 0.25)*(omega_ + omegaSmall_)); + volScalarField CDkOmega = (2.0*alphaOmega2_)*(gradK & gradOmega)/(omega_ + omegaSmall_); + volScalarField F1 = this->F1(CDkOmega); + volScalarField G = nuSgs_*2.0*S2; + + // Turbulent kinetic energy equation + solve + ( + fvm::ddt(k_) + + fvm::div(phi(), k_) + - fvm::Sp(fvc::div(phi()), k_) + - fvm::laplacian(DkEff(F1), k_) + == + min(G, c1_*betaStar_*k_*omega_) + - fvm::Sp(betaStar_*omega_, k_) + ); + + + bound(k_, k0()); + + volScalarField grad_omega_k = max + ( + magSqr(gradOmega)/ + sqr(omega_ + omegaSmall_), + magSqr(gradK)/ + sqr(k_ + k0()) + ); + + // Turbulent frequency equation + solve + ( + fvm::ddt(omega_) + + fvm::div(phi(), omega_) + - fvm::Sp(fvc::div(phi()), omega_) + - fvm::laplacian(DomegaEff(F1), omega_) + == + gamma(F1)*2.0*S2 + - fvm::Sp(beta(F1)*omega_, omega_) + - fvm::SuSp // cross diffusion term + ( + (F1 - scalar(1))*CDkOmega/omega_, + omega_ + ) + + FSAS_ + *max + ( + dimensionedScalar("zero",dimensionSet(0, 0 , -2, 0, 0),0. ), + zetaTilda2_*kappa_*S2*(L/Lvk2(S2))- 2.0/alphaPhi_*k_*grad_omega_k + ) + + ); + bound(omega_, omega0_); + + // Re-calculate viscosity + nuSgs_ == a1_*k_/max(a1_*omega_, F2()*sqrt(S2)); + nuSgs_.correctBoundaryConditions(); +} + + +tmp<volScalarField> kOmegaSSTSAS::epsilon() const +{ + return 2.0*nuEff()*magSqr(symm(fvc::grad(U()))); +} + + +tmp<volSymmTensorField> kOmegaSSTSAS::B() const +{ + return ((2.0/3.0)*I)*k() - nuSgs()*twoSymm(fvc::grad(U())); +} + + +tmp<volSymmTensorField> kOmegaSSTSAS::devBeff() const +{ + return -nuEff()*dev(twoSymm(fvc::grad(U()))); +} + + +tmp<fvVectorMatrix> kOmegaSSTSAS::divDevBeff(volVectorField& U) const +{ + return + ( + - fvm::laplacian(nuEff(), U) - fvc::div(nuEff()*dev(fvc::grad(U)().T())) + ); +} + + +bool kOmegaSSTSAS::read() +{ + if (LESModel::read()) + { + alphaK1_.readIfPresent(coeffDict()); + alphaK2_.readIfPresent(coeffDict()); + alphaOmega1_.readIfPresent(coeffDict()); + alphaOmega2_.readIfPresent(coeffDict()); + gamma1_.readIfPresent(coeffDict()); + gamma2_.readIfPresent(coeffDict()); + beta1_.readIfPresent(coeffDict()); + beta2_.readIfPresent(coeffDict()); + betaStar_.readIfPresent(coeffDict()); + a1_.readIfPresent(coeffDict()); + c1_.readIfPresent(coeffDict()); + alphaPhi_.readIfPresent(coeffDict()); + zetaTilda2_.readIfPresent(coeffDict()); + FSAS_.readIfPresent(coeffDict()); + + return true; + } + else + { + return false; + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace LESModels +} // End namespace incompressible +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/turbulenceModels/LES/incompressible/kOmegaSSTSAS/kOmegaSSTSAS.H b/src/turbulenceModels/LES/incompressible/kOmegaSSTSAS/kOmegaSSTSAS.H new file mode 100644 index 0000000000000000000000000000000000000000..8048be0adf729fce3a06c0166537ed279d6dee8e --- /dev/null +++ b/src/turbulenceModels/LES/incompressible/kOmegaSSTSAS/kOmegaSSTSAS.H @@ -0,0 +1,258 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::LESmodels::kOmegaSSTSAS + +Description + kOmegaSSTSAS LES turbulence model for incompressible flows + + Note: does not have an explicit dependency on spatial discretisation + i.e. LESdelta not used. + +SourceFiles + kOmegaSSTSAS.C + +\*---------------------------------------------------------------------------*/ + +#ifndef kOmegaSSTSAS_H +#define kOmegaSSTSAS_H + +#include "LESModel.H" +#include "volFields.H" +#include "wallDist.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace incompressible +{ +namespace LESModels +{ + +/*---------------------------------------------------------------------------*\ + Class kOmegaSSTSAS Declaration +\*---------------------------------------------------------------------------*/ + +class kOmegaSSTSAS +: + public LESModel +{ + // Private member functions + + // Disallow default bitwise copy construct and assignment + kOmegaSSTSAS(const kOmegaSSTSAS&); + kOmegaSSTSAS& operator=(const kOmegaSSTSAS&); + + +protected: + + // Protected data + + // Model constants + + dimensionedScalar alphaK1_; + dimensionedScalar alphaK2_; + + dimensionedScalar alphaOmega1_; + dimensionedScalar alphaOmega2_; + + dimensionedScalar gamma1_; + dimensionedScalar gamma2_; + + dimensionedScalar beta1_; + dimensionedScalar beta2_; + + dimensionedScalar betaStar_; + + dimensionedScalar a1_; + dimensionedScalar c1_; + + dimensionedScalar alphaPhi_; + dimensionedScalar zetaTilda2_; + dimensionedScalar FSAS_; + + dimensionedScalar omega0_; + dimensionedScalar omegaSmall_; + + wallDist y_; + dimensionedScalar Cmu_; + dimensionedScalar kappa_; + + + // Fields + + volScalarField k_; + volScalarField omega_; + volScalarField nuSgs_; + + + // Protected member functions + + tmp<volScalarField> Lvk2 + ( + const volScalarField& S2 + ) const; + + tmp<volScalarField> F1(const volScalarField& CDkOmega) const; + tmp<volScalarField> F2() const; + + tmp<volScalarField> blend + ( + const volScalarField& F1, + const dimensionedScalar& psi1, + const dimensionedScalar& psi2 + ) const + { + return F1*(psi1 - psi2) + psi2; + } + + tmp<volScalarField> alphaK + ( + const volScalarField& F1 + ) const + { + return blend(F1, alphaK1_, alphaK2_); + } + + tmp<volScalarField> alphaOmega + ( + const volScalarField& F1 + ) const + { + return blend(F1, alphaOmega1_, alphaOmega2_); + } + + tmp<volScalarField> beta + ( + const volScalarField& F1 + ) const + { + return blend(F1, beta1_, beta2_); + } + + tmp<volScalarField> gamma + ( + const volScalarField& F1 + ) const + { + return blend(F1, gamma1_, gamma2_); + } + + +public: + + //- Runtime type information + TypeName("kOmegaSSTSAS"); + + + // Constructors + + //- Constructor from components + kOmegaSSTSAS + ( + const volVectorField& U, + const surfaceScalarField& phi, + transportModel& transport, + const word& modelName = typeName + ); + + + //- Destructor + virtual ~kOmegaSSTSAS() + {} + + + // Member Functions + + //- Return SGS kinetic energy + tmp<volScalarField> k() const + { + return k_; + } + + //- Return omega + tmp<volScalarField> omega() const + { + return omega_; + } + + //- Return the effective diffusivity for k + tmp<volScalarField> DkEff(const volScalarField& F1) const + { + return tmp<volScalarField> + ( + new volScalarField("DkEff", alphaK(F1)*nuSgs_ + nu()) + ); + } + + //- Return the effective diffusivity for omega + tmp<volScalarField> DomegaEff(const volScalarField& F1) const + { + return tmp<volScalarField> + ( + new volScalarField("DomegaEff", alphaOmega(F1)*nuSgs_ + nu()) + ); + } + + //- Return sub-grid disipation rate + tmp<volScalarField> epsilon() const; + + //- Return SGS viscosity + tmp<volScalarField> nuSgs() const + { + return nuSgs_; + } + + //- Return the sub-grid stress tensor. + tmp<volSymmTensorField> B() const; + + //- Return the effective sub-grid turbulence stress tensor + // including the laminar stress + tmp<volSymmTensorField> devBeff() const; + + //- Return the deviatoric part of the divergence of Beff + // i.e. the additional term in the filtered NSE. + tmp<fvVectorMatrix> divDevBeff(volVectorField& U) const; + + //- Solve the turbulence equations (k-w) and correct the turbulence viscosity + virtual void correct(const tmp<volTensorField>& gradU); + + //- Read turbulenceProperties dictionary + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace LESModels +} // End namespace incompressible +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //