]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Some tests for the new CompressedSetSparsityPattern
authorbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 19 Jun 2007 09:02:36 +0000 (09:02 +0000)
committerbangerth <bangerth@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 19 Jun 2007 09:02:36 +0000 (09:02 +0000)
git-svn-id: https://svn.dealii.org/trunk@14784 0785d39b-7218-0410-832d-ea1e28bc413d

25 files changed:
tests/bits/Makefile
tests/bits/compressed_set_sparsity_pattern_01.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_01/cmp/generic [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_02.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_02/cmp/generic [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_03.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_03/cmp/generic [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_04.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_04/cmp/generic [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_05.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_05/cmp/generic [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_06.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_06/cmp/generic [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_07.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_07/cmp/generic [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_08.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_08/cmp/generic [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_09.cc [new file with mode: 0644]
tests/bits/compressed_set_sparsity_pattern_09/cmp/generic [new file with mode: 0644]
tests/hp/crash_17_compressed_set_sparsity.cc [new file with mode: 0644]
tests/hp/crash_17_compressed_set_sparsity/cmp/generic [new file with mode: 0644]
tests/hp/crash_18_compressed_set_sparsity.cc [new file with mode: 0644]
tests/hp/crash_18_compressed_set_sparsity/cmp/generic [new file with mode: 0644]
tests/hp/step-11_compressed_set_sparsity.cc [new file with mode: 0644]
tests/hp/step-11_compressed_set_sparsity/cmp/generic [new file with mode: 0644]

index 005bda582eeb1a3a378572c040fa1aba0ebad352..a4d698ccabc7768a712ec02780b8b5b4a93ad1fe 100644 (file)
@@ -68,6 +68,7 @@ tests_x = grid_generator_?? \
          error_estimator_* \
          cylinder_shell_* \
          compressed_sparsity_pattern_* \
+         compressed_set_sparsity_pattern_* \
          point_difference_* \
          point_value_* \
          fe_q_3d* \
diff --git a/tests/bits/compressed_set_sparsity_pattern_01.cc b/tests/bits/compressed_set_sparsity_pattern_01.cc
new file mode 100644 (file)
index 0000000..aa0963f
--- /dev/null
@@ -0,0 +1,53 @@
+//----------------------------  compressed_set_sparsity_pattern_01.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_01.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::n_nonzero_elements. test n_rows() and
+// n_cols() in passing
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+void test ()
+{
+                                   // set up a sparsity pattern. since
+                                   // CompressedSetSparsityPatterns are most
+                                   // often used for 3d, use a rather large
+                                   // number of entries per row
+  const unsigned int N = 1000;
+  CompressedSetSparsityPattern csp (N,N);
+  for (unsigned int i=0; i<N; ++i)
+    for (unsigned int j=0; j<40; ++j)
+      csp.add (i, (i+(i+1)*(j*j+i))%N);
+
+  Assert (csp.n_rows() == N, ExcInternalError());
+  Assert (csp.n_cols() == N, ExcInternalError());
+  deallog << csp.n_nonzero_elements () << std::endl;
+}
+
+
+
+int main () 
+{
+  std::ofstream logfile("compressed_set_sparsity_pattern_01/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_01/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_01/cmp/generic
new file mode 100644 (file)
index 0000000..73e4be8
--- /dev/null
@@ -0,0 +1,2 @@
+
+DEAL::34607
diff --git a/tests/bits/compressed_set_sparsity_pattern_02.cc b/tests/bits/compressed_set_sparsity_pattern_02.cc
new file mode 100644 (file)
index 0000000..82f1957
--- /dev/null
@@ -0,0 +1,50 @@
+//----------------------------  compressed_set_sparsity_pattern_02.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_02.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::bandwidth
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+void test ()
+{
+                                   // set up a sparsity pattern. since
+                                   // CompressedSetSparsityPatterns are most
+                                   // often used for 3d, use a rather large
+                                   // number of entries per row
+  const unsigned int N = 1000;
+  CompressedSetSparsityPattern csp (N,N);
+  for (unsigned int i=0; i<N; ++i)
+    for (unsigned int j=0; j<40; ++j)
+      csp.add (i, (i+(i+1)*(j*j+i))%N);
+
+  deallog << csp.bandwidth () << std::endl;
+}
+
+
+
+int main () 
+{
+  std::ofstream logfile("compressed_set_sparsity_pattern_02/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_02/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_02/cmp/generic
new file mode 100644 (file)
index 0000000..c9ff15a
--- /dev/null
@@ -0,0 +1,2 @@
+
+DEAL::998
diff --git a/tests/bits/compressed_set_sparsity_pattern_03.cc b/tests/bits/compressed_set_sparsity_pattern_03.cc
new file mode 100644 (file)
index 0000000..f13d369
--- /dev/null
@@ -0,0 +1,62 @@
+//----------------------------  compressed_set_sparsity_pattern_03.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_03.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::row_length
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+void test ()
+{
+                                   // set up a sparsity pattern. since
+                                   // CompressedSetSparsityPatterns are most
+                                   // often used for 3d, use a rather large
+                                   // number of entries per row
+  const unsigned int N = 1000;
+  CompressedSetSparsityPattern csp (N,N);
+  for (unsigned int i=0; i<N; ++i)
+    for (unsigned int j=0; j<40; ++j)
+      csp.add (i, (i+(i+1)*(j*j+i))%N);
+
+  for (unsigned int i=0; i<N; ++i)
+    {
+      std::vector<bool> xx(1000, false);
+      for (unsigned int j=0; j<40; ++j)
+        xx[(i+(i+1)*(j*j+i))%N] = true;
+
+      Assert (static_cast<unsigned int>(std::count (xx.begin(), xx.end(),
+                                                    true))
+              == csp.row_length(i),
+              ExcInternalError());
+      
+      deallog << i << ' ' << csp.row_length (i) << std::endl;
+    }
+}
+
+
+
+int main () 
+{
+  std::ofstream logfile("compressed_set_sparsity_pattern_03/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_03/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_03/cmp/generic
new file mode 100644 (file)
index 0000000..b88a23e
--- /dev/null
@@ -0,0 +1,1001 @@
+
+DEAL::0 39
+DEAL::1 38
+DEAL::2 39
+DEAL::3 38
+DEAL::4 29
+DEAL::5 38
+DEAL::6 39
+DEAL::7 35
+DEAL::8 39
+DEAL::9 22
+DEAL::10 39
+DEAL::11 38
+DEAL::12 39
+DEAL::13 38
+DEAL::14 29
+DEAL::15 35
+DEAL::16 39
+DEAL::17 38
+DEAL::18 39
+DEAL::19 22
+DEAL::20 39
+DEAL::21 38
+DEAL::22 39
+DEAL::23 35
+DEAL::24 9
+DEAL::25 38
+DEAL::26 39
+DEAL::27 38
+DEAL::28 39
+DEAL::29 22
+DEAL::30 39
+DEAL::31 35
+DEAL::32 39
+DEAL::33 38
+DEAL::34 29
+DEAL::35 38
+DEAL::36 39
+DEAL::37 38
+DEAL::38 39
+DEAL::39 11
+DEAL::40 39
+DEAL::41 38
+DEAL::42 39
+DEAL::43 38
+DEAL::44 29
+DEAL::45 38
+DEAL::46 39
+DEAL::47 35
+DEAL::48 39
+DEAL::49 6
+DEAL::50 39
+DEAL::51 38
+DEAL::52 39
+DEAL::53 38
+DEAL::54 29
+DEAL::55 35
+DEAL::56 39
+DEAL::57 38
+DEAL::58 39
+DEAL::59 22
+DEAL::60 39
+DEAL::61 38
+DEAL::62 39
+DEAL::63 35
+DEAL::64 29
+DEAL::65 38
+DEAL::66 39
+DEAL::67 38
+DEAL::68 39
+DEAL::69 22
+DEAL::70 39
+DEAL::71 35
+DEAL::72 39
+DEAL::73 38
+DEAL::74 9
+DEAL::75 38
+DEAL::76 39
+DEAL::77 38
+DEAL::78 39
+DEAL::79 11
+DEAL::80 39
+DEAL::81 38
+DEAL::82 39
+DEAL::83 38
+DEAL::84 29
+DEAL::85 38
+DEAL::86 39
+DEAL::87 35
+DEAL::88 39
+DEAL::89 22
+DEAL::90 39
+DEAL::91 38
+DEAL::92 39
+DEAL::93 38
+DEAL::94 29
+DEAL::95 35
+DEAL::96 39
+DEAL::97 38
+DEAL::98 39
+DEAL::99 6
+DEAL::100 39
+DEAL::101 38
+DEAL::102 39
+DEAL::103 35
+DEAL::104 29
+DEAL::105 38
+DEAL::106 39
+DEAL::107 38
+DEAL::108 39
+DEAL::109 22
+DEAL::110 39
+DEAL::111 35
+DEAL::112 39
+DEAL::113 38
+DEAL::114 29
+DEAL::115 38
+DEAL::116 39
+DEAL::117 38
+DEAL::118 39
+DEAL::119 11
+DEAL::120 39
+DEAL::121 38
+DEAL::122 39
+DEAL::123 38
+DEAL::124 3
+DEAL::125 38
+DEAL::126 39
+DEAL::127 35
+DEAL::128 39
+DEAL::129 22
+DEAL::130 39
+DEAL::131 38
+DEAL::132 39
+DEAL::133 38
+DEAL::134 29
+DEAL::135 35
+DEAL::136 39
+DEAL::137 38
+DEAL::138 39
+DEAL::139 22
+DEAL::140 39
+DEAL::141 38
+DEAL::142 39
+DEAL::143 35
+DEAL::144 29
+DEAL::145 38
+DEAL::146 39
+DEAL::147 38
+DEAL::148 39
+DEAL::149 6
+DEAL::150 39
+DEAL::151 35
+DEAL::152 39
+DEAL::153 38
+DEAL::154 29
+DEAL::155 38
+DEAL::156 39
+DEAL::157 38
+DEAL::158 39
+DEAL::159 11
+DEAL::160 39
+DEAL::161 38
+DEAL::162 39
+DEAL::163 38
+DEAL::164 29
+DEAL::165 38
+DEAL::166 39
+DEAL::167 35
+DEAL::168 39
+DEAL::169 22
+DEAL::170 39
+DEAL::171 38
+DEAL::172 39
+DEAL::173 38
+DEAL::174 9
+DEAL::175 35
+DEAL::176 39
+DEAL::177 38
+DEAL::178 39
+DEAL::179 22
+DEAL::180 39
+DEAL::181 38
+DEAL::182 39
+DEAL::183 35
+DEAL::184 29
+DEAL::185 38
+DEAL::186 39
+DEAL::187 38
+DEAL::188 39
+DEAL::189 22
+DEAL::190 39
+DEAL::191 35
+DEAL::192 39
+DEAL::193 38
+DEAL::194 29
+DEAL::195 38
+DEAL::196 39
+DEAL::197 38
+DEAL::198 39
+DEAL::199 3
+DEAL::200 39
+DEAL::201 38
+DEAL::202 39
+DEAL::203 38
+DEAL::204 29
+DEAL::205 38
+DEAL::206 39
+DEAL::207 35
+DEAL::208 39
+DEAL::209 22
+DEAL::210 39
+DEAL::211 38
+DEAL::212 39
+DEAL::213 38
+DEAL::214 29
+DEAL::215 35
+DEAL::216 39
+DEAL::217 38
+DEAL::218 39
+DEAL::219 22
+DEAL::220 39
+DEAL::221 38
+DEAL::222 39
+DEAL::223 35
+DEAL::224 9
+DEAL::225 38
+DEAL::226 39
+DEAL::227 38
+DEAL::228 39
+DEAL::229 22
+DEAL::230 39
+DEAL::231 35
+DEAL::232 39
+DEAL::233 38
+DEAL::234 29
+DEAL::235 38
+DEAL::236 39
+DEAL::237 38
+DEAL::238 39
+DEAL::239 11
+DEAL::240 39
+DEAL::241 38
+DEAL::242 39
+DEAL::243 38
+DEAL::244 29
+DEAL::245 38
+DEAL::246 39
+DEAL::247 35
+DEAL::248 39
+DEAL::249 2
+DEAL::250 39
+DEAL::251 38
+DEAL::252 39
+DEAL::253 38
+DEAL::254 29
+DEAL::255 35
+DEAL::256 39
+DEAL::257 38
+DEAL::258 39
+DEAL::259 22
+DEAL::260 39
+DEAL::261 38
+DEAL::262 39
+DEAL::263 35
+DEAL::264 29
+DEAL::265 38
+DEAL::266 39
+DEAL::267 38
+DEAL::268 39
+DEAL::269 22
+DEAL::270 39
+DEAL::271 35
+DEAL::272 39
+DEAL::273 38
+DEAL::274 9
+DEAL::275 38
+DEAL::276 39
+DEAL::277 38
+DEAL::278 39
+DEAL::279 11
+DEAL::280 39
+DEAL::281 38
+DEAL::282 39
+DEAL::283 38
+DEAL::284 29
+DEAL::285 38
+DEAL::286 39
+DEAL::287 35
+DEAL::288 39
+DEAL::289 22
+DEAL::290 39
+DEAL::291 38
+DEAL::292 39
+DEAL::293 38
+DEAL::294 29
+DEAL::295 35
+DEAL::296 39
+DEAL::297 38
+DEAL::298 39
+DEAL::299 6
+DEAL::300 39
+DEAL::301 38
+DEAL::302 39
+DEAL::303 35
+DEAL::304 29
+DEAL::305 38
+DEAL::306 39
+DEAL::307 38
+DEAL::308 39
+DEAL::309 22
+DEAL::310 39
+DEAL::311 35
+DEAL::312 39
+DEAL::313 38
+DEAL::314 29
+DEAL::315 38
+DEAL::316 39
+DEAL::317 38
+DEAL::318 39
+DEAL::319 11
+DEAL::320 39
+DEAL::321 38
+DEAL::322 39
+DEAL::323 38
+DEAL::324 9
+DEAL::325 38
+DEAL::326 39
+DEAL::327 35
+DEAL::328 39
+DEAL::329 22
+DEAL::330 39
+DEAL::331 38
+DEAL::332 39
+DEAL::333 38
+DEAL::334 29
+DEAL::335 35
+DEAL::336 39
+DEAL::337 38
+DEAL::338 39
+DEAL::339 22
+DEAL::340 39
+DEAL::341 38
+DEAL::342 39
+DEAL::343 35
+DEAL::344 29
+DEAL::345 38
+DEAL::346 39
+DEAL::347 38
+DEAL::348 39
+DEAL::349 6
+DEAL::350 39
+DEAL::351 35
+DEAL::352 39
+DEAL::353 38
+DEAL::354 29
+DEAL::355 38
+DEAL::356 39
+DEAL::357 38
+DEAL::358 39
+DEAL::359 11
+DEAL::360 39
+DEAL::361 38
+DEAL::362 39
+DEAL::363 38
+DEAL::364 29
+DEAL::365 38
+DEAL::366 39
+DEAL::367 35
+DEAL::368 39
+DEAL::369 22
+DEAL::370 39
+DEAL::371 38
+DEAL::372 39
+DEAL::373 38
+DEAL::374 3
+DEAL::375 35
+DEAL::376 39
+DEAL::377 38
+DEAL::378 39
+DEAL::379 22
+DEAL::380 39
+DEAL::381 38
+DEAL::382 39
+DEAL::383 35
+DEAL::384 29
+DEAL::385 38
+DEAL::386 39
+DEAL::387 38
+DEAL::388 39
+DEAL::389 22
+DEAL::390 39
+DEAL::391 35
+DEAL::392 39
+DEAL::393 38
+DEAL::394 29
+DEAL::395 38
+DEAL::396 39
+DEAL::397 38
+DEAL::398 39
+DEAL::399 3
+DEAL::400 39
+DEAL::401 38
+DEAL::402 39
+DEAL::403 38
+DEAL::404 29
+DEAL::405 38
+DEAL::406 39
+DEAL::407 35
+DEAL::408 39
+DEAL::409 22
+DEAL::410 39
+DEAL::411 38
+DEAL::412 39
+DEAL::413 38
+DEAL::414 29
+DEAL::415 35
+DEAL::416 39
+DEAL::417 38
+DEAL::418 39
+DEAL::419 22
+DEAL::420 39
+DEAL::421 38
+DEAL::422 39
+DEAL::423 35
+DEAL::424 9
+DEAL::425 38
+DEAL::426 39
+DEAL::427 38
+DEAL::428 39
+DEAL::429 22
+DEAL::430 39
+DEAL::431 35
+DEAL::432 39
+DEAL::433 38
+DEAL::434 29
+DEAL::435 38
+DEAL::436 39
+DEAL::437 38
+DEAL::438 39
+DEAL::439 11
+DEAL::440 39
+DEAL::441 38
+DEAL::442 39
+DEAL::443 38
+DEAL::444 29
+DEAL::445 38
+DEAL::446 39
+DEAL::447 35
+DEAL::448 39
+DEAL::449 6
+DEAL::450 39
+DEAL::451 38
+DEAL::452 39
+DEAL::453 38
+DEAL::454 29
+DEAL::455 35
+DEAL::456 39
+DEAL::457 38
+DEAL::458 39
+DEAL::459 22
+DEAL::460 39
+DEAL::461 38
+DEAL::462 39
+DEAL::463 35
+DEAL::464 29
+DEAL::465 38
+DEAL::466 39
+DEAL::467 38
+DEAL::468 39
+DEAL::469 22
+DEAL::470 39
+DEAL::471 35
+DEAL::472 39
+DEAL::473 38
+DEAL::474 9
+DEAL::475 38
+DEAL::476 39
+DEAL::477 38
+DEAL::478 39
+DEAL::479 11
+DEAL::480 39
+DEAL::481 38
+DEAL::482 39
+DEAL::483 38
+DEAL::484 29
+DEAL::485 38
+DEAL::486 39
+DEAL::487 35
+DEAL::488 39
+DEAL::489 22
+DEAL::490 39
+DEAL::491 38
+DEAL::492 39
+DEAL::493 38
+DEAL::494 29
+DEAL::495 35
+DEAL::496 39
+DEAL::497 38
+DEAL::498 39
+DEAL::499 2
+DEAL::500 39
+DEAL::501 38
+DEAL::502 39
+DEAL::503 35
+DEAL::504 29
+DEAL::505 38
+DEAL::506 39
+DEAL::507 38
+DEAL::508 39
+DEAL::509 22
+DEAL::510 39
+DEAL::511 35
+DEAL::512 39
+DEAL::513 38
+DEAL::514 29
+DEAL::515 38
+DEAL::516 39
+DEAL::517 38
+DEAL::518 39
+DEAL::519 11
+DEAL::520 39
+DEAL::521 38
+DEAL::522 39
+DEAL::523 38
+DEAL::524 9
+DEAL::525 38
+DEAL::526 39
+DEAL::527 35
+DEAL::528 39
+DEAL::529 22
+DEAL::530 39
+DEAL::531 38
+DEAL::532 39
+DEAL::533 38
+DEAL::534 29
+DEAL::535 35
+DEAL::536 39
+DEAL::537 38
+DEAL::538 39
+DEAL::539 22
+DEAL::540 39
+DEAL::541 38
+DEAL::542 39
+DEAL::543 35
+DEAL::544 29
+DEAL::545 38
+DEAL::546 39
+DEAL::547 38
+DEAL::548 39
+DEAL::549 6
+DEAL::550 39
+DEAL::551 35
+DEAL::552 39
+DEAL::553 38
+DEAL::554 29
+DEAL::555 38
+DEAL::556 39
+DEAL::557 38
+DEAL::558 39
+DEAL::559 11
+DEAL::560 39
+DEAL::561 38
+DEAL::562 39
+DEAL::563 38
+DEAL::564 29
+DEAL::565 38
+DEAL::566 39
+DEAL::567 35
+DEAL::568 39
+DEAL::569 22
+DEAL::570 39
+DEAL::571 38
+DEAL::572 39
+DEAL::573 38
+DEAL::574 9
+DEAL::575 35
+DEAL::576 39
+DEAL::577 38
+DEAL::578 39
+DEAL::579 22
+DEAL::580 39
+DEAL::581 38
+DEAL::582 39
+DEAL::583 35
+DEAL::584 29
+DEAL::585 38
+DEAL::586 39
+DEAL::587 38
+DEAL::588 39
+DEAL::589 22
+DEAL::590 39
+DEAL::591 35
+DEAL::592 39
+DEAL::593 38
+DEAL::594 29
+DEAL::595 38
+DEAL::596 39
+DEAL::597 38
+DEAL::598 39
+DEAL::599 3
+DEAL::600 39
+DEAL::601 38
+DEAL::602 39
+DEAL::603 38
+DEAL::604 29
+DEAL::605 38
+DEAL::606 39
+DEAL::607 35
+DEAL::608 39
+DEAL::609 22
+DEAL::610 39
+DEAL::611 38
+DEAL::612 39
+DEAL::613 38
+DEAL::614 29
+DEAL::615 35
+DEAL::616 39
+DEAL::617 38
+DEAL::618 39
+DEAL::619 22
+DEAL::620 39
+DEAL::621 38
+DEAL::622 39
+DEAL::623 35
+DEAL::624 3
+DEAL::625 38
+DEAL::626 39
+DEAL::627 38
+DEAL::628 39
+DEAL::629 22
+DEAL::630 39
+DEAL::631 35
+DEAL::632 39
+DEAL::633 38
+DEAL::634 29
+DEAL::635 38
+DEAL::636 39
+DEAL::637 38
+DEAL::638 39
+DEAL::639 11
+DEAL::640 39
+DEAL::641 38
+DEAL::642 39
+DEAL::643 38
+DEAL::644 29
+DEAL::645 38
+DEAL::646 39
+DEAL::647 35
+DEAL::648 39
+DEAL::649 6
+DEAL::650 39
+DEAL::651 38
+DEAL::652 39
+DEAL::653 38
+DEAL::654 29
+DEAL::655 35
+DEAL::656 39
+DEAL::657 38
+DEAL::658 39
+DEAL::659 22
+DEAL::660 39
+DEAL::661 38
+DEAL::662 39
+DEAL::663 35
+DEAL::664 29
+DEAL::665 38
+DEAL::666 39
+DEAL::667 38
+DEAL::668 39
+DEAL::669 22
+DEAL::670 39
+DEAL::671 35
+DEAL::672 39
+DEAL::673 38
+DEAL::674 9
+DEAL::675 38
+DEAL::676 39
+DEAL::677 38
+DEAL::678 39
+DEAL::679 11
+DEAL::680 39
+DEAL::681 38
+DEAL::682 39
+DEAL::683 38
+DEAL::684 29
+DEAL::685 38
+DEAL::686 39
+DEAL::687 35
+DEAL::688 39
+DEAL::689 22
+DEAL::690 39
+DEAL::691 38
+DEAL::692 39
+DEAL::693 38
+DEAL::694 29
+DEAL::695 35
+DEAL::696 39
+DEAL::697 38
+DEAL::698 39
+DEAL::699 6
+DEAL::700 39
+DEAL::701 38
+DEAL::702 39
+DEAL::703 35
+DEAL::704 29
+DEAL::705 38
+DEAL::706 39
+DEAL::707 38
+DEAL::708 39
+DEAL::709 22
+DEAL::710 39
+DEAL::711 35
+DEAL::712 39
+DEAL::713 38
+DEAL::714 29
+DEAL::715 38
+DEAL::716 39
+DEAL::717 38
+DEAL::718 39
+DEAL::719 11
+DEAL::720 39
+DEAL::721 38
+DEAL::722 39
+DEAL::723 38
+DEAL::724 9
+DEAL::725 38
+DEAL::726 39
+DEAL::727 35
+DEAL::728 39
+DEAL::729 22
+DEAL::730 39
+DEAL::731 38
+DEAL::732 39
+DEAL::733 38
+DEAL::734 29
+DEAL::735 35
+DEAL::736 39
+DEAL::737 38
+DEAL::738 39
+DEAL::739 22
+DEAL::740 39
+DEAL::741 38
+DEAL::742 39
+DEAL::743 35
+DEAL::744 29
+DEAL::745 38
+DEAL::746 39
+DEAL::747 38
+DEAL::748 39
+DEAL::749 2
+DEAL::750 39
+DEAL::751 35
+DEAL::752 39
+DEAL::753 38
+DEAL::754 29
+DEAL::755 38
+DEAL::756 39
+DEAL::757 38
+DEAL::758 39
+DEAL::759 11
+DEAL::760 39
+DEAL::761 38
+DEAL::762 39
+DEAL::763 38
+DEAL::764 29
+DEAL::765 38
+DEAL::766 39
+DEAL::767 35
+DEAL::768 39
+DEAL::769 22
+DEAL::770 39
+DEAL::771 38
+DEAL::772 39
+DEAL::773 38
+DEAL::774 9
+DEAL::775 35
+DEAL::776 39
+DEAL::777 38
+DEAL::778 39
+DEAL::779 22
+DEAL::780 39
+DEAL::781 38
+DEAL::782 39
+DEAL::783 35
+DEAL::784 29
+DEAL::785 38
+DEAL::786 39
+DEAL::787 38
+DEAL::788 39
+DEAL::789 22
+DEAL::790 39
+DEAL::791 35
+DEAL::792 39
+DEAL::793 38
+DEAL::794 29
+DEAL::795 38
+DEAL::796 39
+DEAL::797 38
+DEAL::798 39
+DEAL::799 3
+DEAL::800 39
+DEAL::801 38
+DEAL::802 39
+DEAL::803 38
+DEAL::804 29
+DEAL::805 38
+DEAL::806 39
+DEAL::807 35
+DEAL::808 39
+DEAL::809 22
+DEAL::810 39
+DEAL::811 38
+DEAL::812 39
+DEAL::813 38
+DEAL::814 29
+DEAL::815 35
+DEAL::816 39
+DEAL::817 38
+DEAL::818 39
+DEAL::819 22
+DEAL::820 39
+DEAL::821 38
+DEAL::822 39
+DEAL::823 35
+DEAL::824 9
+DEAL::825 38
+DEAL::826 39
+DEAL::827 38
+DEAL::828 39
+DEAL::829 22
+DEAL::830 39
+DEAL::831 35
+DEAL::832 39
+DEAL::833 38
+DEAL::834 29
+DEAL::835 38
+DEAL::836 39
+DEAL::837 38
+DEAL::838 39
+DEAL::839 11
+DEAL::840 39
+DEAL::841 38
+DEAL::842 39
+DEAL::843 38
+DEAL::844 29
+DEAL::845 38
+DEAL::846 39
+DEAL::847 35
+DEAL::848 39
+DEAL::849 6
+DEAL::850 39
+DEAL::851 38
+DEAL::852 39
+DEAL::853 38
+DEAL::854 29
+DEAL::855 35
+DEAL::856 39
+DEAL::857 38
+DEAL::858 39
+DEAL::859 22
+DEAL::860 39
+DEAL::861 38
+DEAL::862 39
+DEAL::863 35
+DEAL::864 29
+DEAL::865 38
+DEAL::866 39
+DEAL::867 38
+DEAL::868 39
+DEAL::869 22
+DEAL::870 39
+DEAL::871 35
+DEAL::872 39
+DEAL::873 38
+DEAL::874 3
+DEAL::875 38
+DEAL::876 39
+DEAL::877 38
+DEAL::878 39
+DEAL::879 11
+DEAL::880 39
+DEAL::881 38
+DEAL::882 39
+DEAL::883 38
+DEAL::884 29
+DEAL::885 38
+DEAL::886 39
+DEAL::887 35
+DEAL::888 39
+DEAL::889 22
+DEAL::890 39
+DEAL::891 38
+DEAL::892 39
+DEAL::893 38
+DEAL::894 29
+DEAL::895 35
+DEAL::896 39
+DEAL::897 38
+DEAL::898 39
+DEAL::899 6
+DEAL::900 39
+DEAL::901 38
+DEAL::902 39
+DEAL::903 35
+DEAL::904 29
+DEAL::905 38
+DEAL::906 39
+DEAL::907 38
+DEAL::908 39
+DEAL::909 22
+DEAL::910 39
+DEAL::911 35
+DEAL::912 39
+DEAL::913 38
+DEAL::914 29
+DEAL::915 38
+DEAL::916 39
+DEAL::917 38
+DEAL::918 39
+DEAL::919 11
+DEAL::920 39
+DEAL::921 38
+DEAL::922 39
+DEAL::923 38
+DEAL::924 9
+DEAL::925 38
+DEAL::926 39
+DEAL::927 35
+DEAL::928 39
+DEAL::929 22
+DEAL::930 39
+DEAL::931 38
+DEAL::932 39
+DEAL::933 38
+DEAL::934 29
+DEAL::935 35
+DEAL::936 39
+DEAL::937 38
+DEAL::938 39
+DEAL::939 22
+DEAL::940 39
+DEAL::941 38
+DEAL::942 39
+DEAL::943 35
+DEAL::944 29
+DEAL::945 38
+DEAL::946 39
+DEAL::947 38
+DEAL::948 39
+DEAL::949 6
+DEAL::950 39
+DEAL::951 35
+DEAL::952 39
+DEAL::953 38
+DEAL::954 29
+DEAL::955 38
+DEAL::956 39
+DEAL::957 38
+DEAL::958 39
+DEAL::959 11
+DEAL::960 39
+DEAL::961 38
+DEAL::962 39
+DEAL::963 38
+DEAL::964 29
+DEAL::965 38
+DEAL::966 39
+DEAL::967 35
+DEAL::968 39
+DEAL::969 22
+DEAL::970 39
+DEAL::971 38
+DEAL::972 39
+DEAL::973 38
+DEAL::974 9
+DEAL::975 35
+DEAL::976 39
+DEAL::977 38
+DEAL::978 39
+DEAL::979 22
+DEAL::980 39
+DEAL::981 38
+DEAL::982 39
+DEAL::983 35
+DEAL::984 29
+DEAL::985 38
+DEAL::986 39
+DEAL::987 38
+DEAL::988 39
+DEAL::989 22
+DEAL::990 39
+DEAL::991 35
+DEAL::992 39
+DEAL::993 38
+DEAL::994 29
+DEAL::995 38
+DEAL::996 39
+DEAL::997 38
+DEAL::998 39
+DEAL::999 1
diff --git a/tests/bits/compressed_set_sparsity_pattern_04.cc b/tests/bits/compressed_set_sparsity_pattern_04.cc
new file mode 100644 (file)
index 0000000..3cb2d99
--- /dev/null
@@ -0,0 +1,55 @@
+//----------------------------  compressed_set_sparsity_pattern_04.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005, 2007 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_04.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::row_begin iterators. since we create
+// quite some output here, choose smaller number of rows and entries than in
+// the other tests
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+void test ()
+{
+  const unsigned int N = 100;
+  CompressedSetSparsityPattern csp (N,N);
+  for (unsigned int i=0; i<N; ++i)
+    for (unsigned int j=0; j<10; ++j)
+      csp.add (i, (i+(i+1)*(j*j+i))%N);
+
+  for (unsigned int i=0; i<N; ++i)
+    {
+      unsigned int index = 0;
+      for (CompressedSetSparsityPattern::row_iterator
+            j = csp.row_begin(i); j != csp.row_end(i); ++j, ++index)
+       deallog << i << ' ' << index << ' ' << *j
+               << std::endl;
+    }
+}
+
+
+
+int main () 
+{
+  std::ofstream logfile("compressed_set_sparsity_pattern_04/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_04/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_04/cmp/generic
new file mode 100644 (file)
index 0000000..e299ad0
--- /dev/null
@@ -0,0 +1,872 @@
+
+DEAL::0 0 0
+DEAL::0 1 1
+DEAL::0 2 4
+DEAL::0 3 9
+DEAL::0 4 16
+DEAL::0 5 25
+DEAL::0 6 36
+DEAL::0 7 49
+DEAL::0 8 64
+DEAL::0 9 81
+DEAL::1 0 1
+DEAL::1 1 3
+DEAL::1 2 5
+DEAL::1 3 11
+DEAL::1 4 21
+DEAL::1 5 31
+DEAL::1 6 35
+DEAL::1 7 53
+DEAL::1 8 65
+DEAL::1 9 75
+DEAL::2 0 0
+DEAL::2 1 8
+DEAL::2 2 11
+DEAL::2 3 16
+DEAL::2 4 20
+DEAL::2 5 35
+DEAL::2 6 51
+DEAL::2 7 55
+DEAL::2 8 56
+DEAL::2 9 83
+DEAL::3 0 11
+DEAL::3 1 15
+DEAL::3 2 19
+DEAL::3 3 31
+DEAL::3 4 39
+DEAL::3 5 51
+DEAL::3 6 59
+DEAL::3 7 71
+DEAL::3 8 79
+DEAL::4 0 4
+DEAL::4 1 24
+DEAL::4 2 29
+DEAL::4 3 44
+DEAL::4 4 49
+DEAL::4 5 69
+DEAL::5 0 19
+DEAL::5 1 21
+DEAL::5 2 29
+DEAL::5 3 31
+DEAL::5 4 35
+DEAL::5 5 41
+DEAL::5 6 51
+DEAL::5 7 59
+DEAL::5 8 85
+DEAL::5 9 89
+DEAL::6 0 0
+DEAL::6 1 11
+DEAL::6 2 15
+DEAL::6 3 23
+DEAL::6 4 48
+DEAL::6 5 55
+DEAL::6 6 60
+DEAL::6 7 76
+DEAL::6 8 91
+DEAL::6 9 96
+DEAL::7 0 11
+DEAL::7 1 35
+DEAL::7 2 51
+DEAL::7 3 55
+DEAL::7 4 63
+DEAL::7 5 71
+DEAL::7 6 75
+DEAL::7 7 91
+DEAL::7 8 95
+DEAL::8 0 4
+DEAL::8 1 5
+DEAL::8 2 9
+DEAL::8 3 16
+DEAL::8 4 21
+DEAL::8 5 24
+DEAL::8 6 56
+DEAL::8 7 61
+DEAL::8 8 80
+DEAL::8 9 89
+DEAL::9 0 9
+DEAL::9 1 39
+DEAL::9 2 49
+DEAL::9 3 59
+DEAL::9 4 89
+DEAL::9 5 99
+DEAL::10 0 11
+DEAL::10 1 16
+DEAL::10 2 19
+DEAL::10 3 20
+DEAL::10 4 24
+DEAL::10 5 31
+DEAL::10 6 59
+DEAL::10 7 64
+DEAL::10 8 95
+DEAL::10 9 96
+DEAL::11 0 11
+DEAL::11 1 15
+DEAL::11 2 31
+DEAL::11 3 35
+DEAL::11 4 43
+DEAL::11 5 51
+DEAL::11 6 55
+DEAL::11 7 75
+DEAL::11 8 91
+DEAL::12 0 0
+DEAL::12 1 5
+DEAL::12 2 20
+DEAL::12 3 21
+DEAL::12 4 36
+DEAL::12 5 68
+DEAL::12 6 76
+DEAL::12 7 81
+DEAL::12 8 85
+DEAL::12 9 93
+DEAL::13 0 9
+DEAL::13 1 19
+DEAL::13 2 21
+DEAL::13 3 29
+DEAL::13 4 45
+DEAL::13 5 51
+DEAL::13 6 81
+DEAL::13 7 91
+DEAL::13 8 95
+DEAL::13 9 99
+DEAL::14 0 24
+DEAL::14 1 39
+DEAL::14 2 59
+DEAL::14 3 64
+DEAL::14 4 84
+DEAL::14 5 99
+DEAL::15 0 11
+DEAL::15 1 19
+DEAL::15 2 31
+DEAL::15 3 39
+DEAL::15 4 51
+DEAL::15 5 55
+DEAL::15 6 71
+DEAL::15 7 79
+DEAL::15 8 99
+DEAL::16 0 0
+DEAL::16 1 5
+DEAL::16 2 13
+DEAL::16 3 21
+DEAL::16 4 41
+DEAL::16 5 56
+DEAL::16 6 60
+DEAL::16 7 65
+DEAL::16 8 76
+DEAL::16 9 88
+DEAL::17 0 5
+DEAL::17 1 11
+DEAL::17 2 23
+DEAL::17 3 41
+DEAL::17 4 71
+DEAL::17 5 73
+DEAL::17 6 75
+DEAL::17 7 81
+DEAL::17 8 85
+DEAL::17 9 95
+DEAL::18 0 31
+DEAL::18 1 35
+DEAL::18 2 36
+DEAL::18 3 44
+DEAL::18 4 60
+DEAL::18 5 64
+DEAL::18 6 76
+DEAL::18 7 79
+DEAL::18 8 91
+DEAL::18 9 99
+DEAL::19 0 19
+DEAL::19 1 79
+DEAL::19 2 99
+DEAL::20 0 24
+DEAL::20 1 29
+DEAL::20 2 40
+DEAL::20 3 41
+DEAL::20 4 61
+DEAL::20 5 65
+DEAL::20 6 69
+DEAL::20 7 76
+DEAL::20 8 84
+DEAL::20 9 96
+DEAL::21 0 5
+DEAL::21 1 33
+DEAL::21 2 35
+DEAL::21 3 61
+DEAL::21 4 65
+DEAL::21 5 71
+DEAL::21 6 75
+DEAL::21 7 81
+DEAL::21 8 83
+DEAL::21 9 91
+DEAL::22 0 0
+DEAL::22 1 3
+DEAL::22 2 20
+DEAL::22 3 28
+DEAL::22 4 35
+DEAL::22 5 51
+DEAL::22 6 55
+DEAL::22 7 56
+DEAL::22 8 91
+DEAL::22 9 96
+DEAL::23 0 11
+DEAL::23 1 19
+DEAL::23 2 39
+DEAL::23 3 51
+DEAL::23 4 59
+DEAL::23 5 71
+DEAL::23 6 75
+DEAL::23 7 91
+DEAL::23 8 99
+DEAL::24 0 24
+DEAL::24 1 49
+DEAL::25 0 1
+DEAL::25 1 9
+DEAL::25 2 11
+DEAL::25 3 25
+DEAL::25 4 39
+DEAL::25 5 49
+DEAL::25 6 75
+DEAL::25 7 79
+DEAL::25 8 81
+DEAL::25 9 91
+DEAL::26 0 0
+DEAL::26 1 3
+DEAL::26 2 15
+DEAL::26 3 28
+DEAL::26 4 36
+DEAL::26 5 51
+DEAL::26 6 55
+DEAL::26 7 56
+DEAL::26 8 60
+DEAL::26 9 71
+DEAL::27 0 11
+DEAL::27 1 31
+DEAL::27 2 35
+DEAL::27 3 51
+DEAL::27 4 55
+DEAL::27 5 75
+DEAL::27 6 83
+DEAL::27 7 91
+DEAL::27 8 95
+DEAL::28 0 1
+DEAL::28 1 4
+DEAL::28 2 40
+DEAL::28 3 56
+DEAL::28 4 61
+DEAL::28 5 65
+DEAL::28 6 69
+DEAL::28 7 84
+DEAL::28 8 89
+DEAL::28 9 96
+DEAL::29 0 19
+DEAL::29 1 29
+DEAL::29 2 49
+DEAL::29 3 69
+DEAL::29 4 79
+DEAL::29 5 99
+DEAL::30 0 35
+DEAL::30 1 39
+DEAL::30 2 44
+DEAL::30 3 56
+DEAL::30 4 60
+DEAL::30 5 71
+DEAL::30 6 76
+DEAL::30 7 79
+DEAL::30 8 84
+DEAL::30 9 91
+DEAL::31 0 11
+DEAL::31 1 15
+DEAL::31 2 23
+DEAL::31 3 35
+DEAL::31 4 51
+DEAL::31 5 55
+DEAL::31 6 71
+DEAL::31 7 75
+DEAL::31 8 91
+DEAL::32 0 0
+DEAL::32 1 5
+DEAL::32 2 13
+DEAL::32 3 16
+DEAL::32 4 20
+DEAL::32 5 21
+DEAL::32 6 61
+DEAL::32 7 76
+DEAL::32 8 85
+DEAL::32 9 88
+DEAL::33 0 5
+DEAL::33 1 9
+DEAL::33 2 21
+DEAL::33 3 31
+DEAL::33 4 55
+DEAL::33 5 61
+DEAL::33 6 79
+DEAL::33 7 89
+DEAL::33 8 91
+DEAL::33 9 99
+DEAL::34 0 24
+DEAL::34 1 39
+DEAL::34 2 59
+DEAL::34 3 64
+DEAL::34 4 84
+DEAL::34 5 99
+DEAL::35 0 11
+DEAL::35 1 19
+DEAL::35 2 31
+DEAL::35 3 39
+DEAL::35 4 59
+DEAL::35 5 71
+DEAL::35 6 91
+DEAL::35 7 95
+DEAL::35 8 99
+DEAL::36 0 0
+DEAL::36 1 1
+DEAL::36 2 5
+DEAL::36 3 16
+DEAL::36 4 36
+DEAL::36 5 60
+DEAL::36 6 65
+DEAL::36 7 68
+DEAL::36 8 81
+DEAL::36 9 93
+DEAL::37 0 5
+DEAL::37 1 11
+DEAL::37 2 21
+DEAL::37 3 43
+DEAL::37 4 51
+DEAL::37 5 75
+DEAL::37 6 81
+DEAL::37 7 85
+DEAL::37 8 93
+DEAL::37 9 95
+DEAL::38 0 16
+DEAL::38 1 20
+DEAL::38 2 24
+DEAL::38 3 31
+DEAL::38 4 44
+DEAL::38 5 59
+DEAL::38 6 71
+DEAL::38 7 76
+DEAL::38 8 79
+DEAL::38 9 95
+DEAL::39 0 39
+DEAL::39 1 59
+DEAL::39 2 99
+DEAL::40 0 1
+DEAL::40 1 4
+DEAL::40 2 5
+DEAL::40 3 21
+DEAL::40 4 36
+DEAL::40 5 44
+DEAL::40 6 49
+DEAL::40 7 56
+DEAL::40 8 80
+DEAL::40 9 89
+DEAL::41 0 5
+DEAL::41 1 13
+DEAL::41 2 21
+DEAL::41 3 31
+DEAL::41 4 35
+DEAL::41 5 41
+DEAL::41 6 51
+DEAL::41 7 63
+DEAL::41 8 65
+DEAL::41 9 75
+DEAL::42 0 0
+DEAL::42 1 20
+DEAL::42 2 23
+DEAL::42 3 31
+DEAL::42 4 35
+DEAL::42 5 36
+DEAL::42 6 48
+DEAL::42 7 55
+DEAL::42 8 91
+DEAL::42 9 96
+DEAL::43 0 11
+DEAL::43 1 19
+DEAL::43 2 31
+DEAL::43 3 35
+DEAL::43 4 39
+DEAL::43 5 51
+DEAL::43 6 79
+DEAL::43 7 91
+DEAL::43 8 99
+DEAL::44 0 4
+DEAL::44 1 24
+DEAL::44 2 29
+DEAL::44 3 44
+DEAL::44 4 49
+DEAL::44 5 69
+DEAL::45 0 15
+DEAL::45 1 29
+DEAL::45 2 41
+DEAL::45 3 51
+DEAL::45 4 59
+DEAL::45 5 61
+DEAL::45 6 65
+DEAL::45 7 69
+DEAL::45 8 71
+DEAL::45 9 99
+DEAL::46 0 0
+DEAL::46 1 8
+DEAL::46 2 11
+DEAL::46 3 15
+DEAL::46 4 16
+DEAL::46 5 31
+DEAL::46 6 55
+DEAL::46 7 60
+DEAL::46 8 83
+DEAL::46 9 96
+DEAL::47 0 3
+DEAL::47 1 31
+DEAL::47 2 35
+DEAL::47 3 51
+DEAL::47 4 55
+DEAL::47 5 71
+DEAL::47 6 75
+DEAL::47 7 91
+DEAL::47 8 95
+DEAL::48 0 0
+DEAL::48 1 1
+DEAL::48 2 25
+DEAL::48 3 36
+DEAL::48 4 41
+DEAL::48 5 49
+DEAL::48 6 64
+DEAL::48 7 69
+DEAL::48 8 84
+DEAL::48 9 96
+DEAL::49 0 49
+DEAL::49 1 99
+DEAL::50 0 0
+DEAL::50 1 4
+DEAL::50 2 16
+DEAL::50 3 31
+DEAL::50 4 36
+DEAL::50 5 51
+DEAL::50 6 59
+DEAL::50 7 64
+DEAL::50 8 75
+DEAL::50 9 99
+DEAL::51 0 3
+DEAL::51 1 11
+DEAL::51 2 15
+DEAL::51 3 31
+DEAL::51 4 35
+DEAL::51 5 51
+DEAL::51 6 55
+DEAL::51 7 71
+DEAL::51 8 75
+DEAL::52 0 0
+DEAL::52 1 1
+DEAL::52 2 5
+DEAL::52 3 8
+DEAL::52 4 16
+DEAL::52 5 20
+DEAL::52 6 33
+DEAL::52 7 56
+DEAL::52 8 61
+DEAL::52 9 85
+DEAL::53 0 1
+DEAL::53 1 15
+DEAL::53 2 31
+DEAL::53 3 59
+DEAL::53 4 61
+DEAL::53 5 65
+DEAL::53 6 69
+DEAL::53 7 71
+DEAL::53 8 79
+DEAL::53 9 89
+DEAL::54 0 4
+DEAL::54 1 19
+DEAL::54 2 24
+DEAL::54 3 44
+DEAL::54 4 79
+DEAL::54 5 99
+DEAL::55 0 19
+DEAL::55 1 31
+DEAL::55 2 35
+DEAL::55 3 39
+DEAL::55 4 51
+DEAL::55 5 59
+DEAL::55 6 71
+DEAL::55 7 79
+DEAL::55 8 91
+DEAL::56 0 0
+DEAL::56 1 5
+DEAL::56 2 41
+DEAL::56 3 48
+DEAL::56 4 60
+DEAL::56 5 61
+DEAL::56 6 65
+DEAL::56 7 73
+DEAL::56 8 76
+DEAL::56 9 96
+DEAL::57 0 5
+DEAL::57 1 13
+DEAL::57 2 21
+DEAL::57 3 51
+DEAL::57 4 61
+DEAL::57 5 63
+DEAL::57 6 75
+DEAL::57 7 85
+DEAL::57 8 91
+DEAL::57 9 95
+DEAL::58 0 4
+DEAL::58 1 11
+DEAL::58 2 16
+DEAL::58 3 24
+DEAL::58 4 39
+DEAL::58 5 55
+DEAL::58 6 56
+DEAL::58 7 59
+DEAL::58 8 71
+DEAL::58 9 80
+DEAL::59 0 39
+DEAL::59 1 59
+DEAL::59 2 99
+DEAL::60 0 9
+DEAL::60 1 16
+DEAL::60 2 20
+DEAL::60 3 24
+DEAL::60 4 45
+DEAL::60 5 61
+DEAL::60 6 64
+DEAL::60 7 69
+DEAL::60 8 81
+DEAL::60 9 96
+DEAL::61 0 1
+DEAL::61 1 5
+DEAL::61 2 11
+DEAL::61 3 35
+DEAL::61 4 43
+DEAL::61 5 65
+DEAL::61 6 75
+DEAL::61 7 81
+DEAL::61 8 91
+DEAL::61 9 93
+DEAL::62 0 0
+DEAL::62 1 20
+DEAL::62 2 31
+DEAL::62 3 35
+DEAL::62 4 36
+DEAL::62 5 43
+DEAL::62 6 55
+DEAL::62 7 68
+DEAL::62 8 71
+DEAL::62 9 76
+DEAL::63 0 19
+DEAL::63 1 31
+DEAL::63 2 51
+DEAL::63 3 59
+DEAL::63 4 71
+DEAL::63 5 79
+DEAL::63 6 91
+DEAL::63 7 95
+DEAL::63 8 99
+DEAL::64 0 9
+DEAL::64 1 24
+DEAL::64 2 49
+DEAL::64 3 64
+DEAL::64 4 84
+DEAL::64 5 89
+DEAL::65 0 1
+DEAL::65 1 5
+DEAL::65 2 11
+DEAL::65 3 19
+DEAL::65 4 21
+DEAL::65 5 31
+DEAL::65 6 49
+DEAL::65 7 55
+DEAL::65 8 79
+DEAL::65 9 89
+DEAL::66 0 0
+DEAL::66 1 15
+DEAL::66 2 55
+DEAL::66 3 56
+DEAL::66 4 60
+DEAL::66 5 63
+DEAL::66 6 71
+DEAL::66 7 76
+DEAL::66 8 88
+DEAL::66 9 91
+DEAL::67 0 11
+DEAL::67 1 23
+DEAL::67 2 31
+DEAL::67 3 35
+DEAL::67 4 55
+DEAL::67 5 71
+DEAL::67 6 75
+DEAL::67 7 91
+DEAL::67 8 95
+DEAL::68 0 29
+DEAL::68 1 36
+DEAL::68 2 41
+DEAL::68 3 44
+DEAL::68 4 49
+DEAL::68 5 60
+DEAL::68 6 64
+DEAL::68 7 76
+DEAL::68 8 81
+DEAL::68 9 85
+DEAL::69 0 19
+DEAL::69 1 29
+DEAL::69 2 49
+DEAL::69 3 69
+DEAL::69 4 79
+DEAL::69 5 99
+DEAL::70 0 11
+DEAL::70 1 15
+DEAL::70 2 19
+DEAL::70 3 24
+DEAL::70 4 40
+DEAL::70 5 76
+DEAL::70 6 79
+DEAL::70 7 84
+DEAL::70 8 91
+DEAL::70 9 96
+DEAL::71 0 11
+DEAL::71 1 15
+DEAL::71 2 31
+DEAL::71 3 35
+DEAL::71 4 55
+DEAL::71 5 71
+DEAL::71 6 75
+DEAL::71 7 83
+DEAL::71 8 91
+DEAL::72 0 0
+DEAL::72 1 1
+DEAL::72 2 5
+DEAL::72 3 20
+DEAL::72 4 28
+DEAL::72 5 41
+DEAL::72 6 53
+DEAL::72 7 56
+DEAL::72 8 85
+DEAL::72 9 96
+DEAL::73 0 1
+DEAL::73 1 11
+DEAL::73 2 25
+DEAL::73 3 39
+DEAL::73 4 41
+DEAL::73 5 49
+DEAL::73 6 59
+DEAL::73 7 69
+DEAL::73 8 71
+DEAL::73 9 75
+DEAL::74 0 24
+DEAL::74 1 99
+DEAL::75 0 11
+DEAL::75 1 31
+DEAL::75 2 39
+DEAL::75 3 51
+DEAL::75 4 59
+DEAL::75 5 75
+DEAL::75 6 79
+DEAL::75 7 91
+DEAL::75 8 99
+DEAL::76 0 0
+DEAL::76 1 1
+DEAL::76 2 5
+DEAL::76 3 21
+DEAL::76 4 28
+DEAL::76 5 36
+DEAL::76 6 53
+DEAL::76 7 56
+DEAL::76 8 60
+DEAL::76 9 65
+DEAL::77 0 1
+DEAL::77 1 5
+DEAL::77 2 31
+DEAL::77 3 33
+DEAL::77 4 61
+DEAL::77 5 75
+DEAL::77 6 83
+DEAL::77 7 85
+DEAL::77 8 91
+DEAL::77 9 95
+DEAL::78 0 4
+DEAL::78 1 11
+DEAL::78 2 15
+DEAL::78 3 19
+DEAL::78 4 39
+DEAL::78 5 40
+DEAL::78 6 51
+DEAL::78 7 56
+DEAL::78 8 84
+DEAL::78 9 96
+DEAL::79 0 19
+DEAL::79 1 79
+DEAL::79 2 99
+DEAL::80 0 21
+DEAL::80 1 29
+DEAL::80 2 41
+DEAL::80 3 44
+DEAL::80 4 56
+DEAL::80 5 60
+DEAL::80 6 76
+DEAL::80 7 84
+DEAL::80 8 85
+DEAL::80 9 89
+DEAL::81 0 5
+DEAL::81 1 23
+DEAL::81 2 35
+DEAL::81 3 41
+DEAL::81 4 51
+DEAL::81 5 61
+DEAL::81 6 65
+DEAL::81 7 71
+DEAL::81 8 73
+DEAL::81 9 75
+DEAL::82 0 0
+DEAL::82 1 11
+DEAL::82 2 16
+DEAL::82 3 20
+DEAL::82 4 35
+DEAL::82 5 55
+DEAL::82 6 63
+DEAL::82 7 71
+DEAL::82 8 76
+DEAL::82 9 88
+DEAL::83 0 11
+DEAL::83 1 31
+DEAL::83 2 39
+DEAL::83 3 55
+DEAL::83 4 59
+DEAL::83 5 71
+DEAL::83 6 79
+DEAL::83 7 91
+DEAL::83 8 99
+DEAL::84 0 9
+DEAL::84 1 24
+DEAL::84 2 49
+DEAL::84 3 64
+DEAL::84 4 84
+DEAL::84 5 89
+DEAL::85 0 9
+DEAL::85 1 39
+DEAL::85 2 45
+DEAL::85 3 61
+DEAL::85 4 69
+DEAL::85 5 71
+DEAL::85 6 81
+DEAL::85 7 91
+DEAL::85 8 95
+DEAL::85 9 99
+DEAL::86 0 0
+DEAL::86 1 15
+DEAL::86 2 16
+DEAL::86 3 31
+DEAL::86 4 36
+DEAL::86 5 43
+DEAL::86 6 51
+DEAL::86 7 55
+DEAL::86 8 60
+DEAL::86 9 68
+DEAL::87 0 11
+DEAL::87 1 31
+DEAL::87 2 35
+DEAL::87 3 43
+DEAL::87 4 51
+DEAL::87 5 55
+DEAL::87 6 71
+DEAL::87 7 75
+DEAL::87 8 95
+DEAL::88 0 9
+DEAL::88 1 16
+DEAL::88 2 20
+DEAL::88 3 21
+DEAL::88 4 24
+DEAL::88 5 29
+DEAL::88 6 44
+DEAL::88 7 45
+DEAL::88 8 76
+DEAL::88 9 81
+DEAL::89 0 9
+DEAL::89 1 39
+DEAL::89 2 49
+DEAL::89 3 59
+DEAL::89 4 89
+DEAL::89 5 99
+DEAL::90 0 4
+DEAL::90 1 36
+DEAL::90 2 39
+DEAL::90 3 44
+DEAL::90 4 51
+DEAL::90 5 55
+DEAL::90 6 56
+DEAL::90 7 71
+DEAL::90 8 80
+DEAL::90 9 99
+DEAL::91 0 15
+DEAL::91 1 31
+DEAL::91 2 35
+DEAL::91 3 51
+DEAL::91 4 55
+DEAL::91 5 63
+DEAL::91 6 71
+DEAL::91 7 75
+DEAL::91 8 91
+DEAL::92 0 0
+DEAL::92 1 5
+DEAL::92 2 20
+DEAL::92 3 36
+DEAL::92 4 41
+DEAL::92 5 48
+DEAL::92 6 73
+DEAL::92 7 81
+DEAL::92 8 85
+DEAL::92 9 96
+DEAL::93 0 11
+DEAL::93 1 19
+DEAL::93 2 29
+DEAL::93 3 35
+DEAL::93 4 39
+DEAL::93 5 41
+DEAL::93 6 49
+DEAL::93 7 51
+DEAL::93 8 81
+DEAL::93 9 85
+DEAL::94 0 4
+DEAL::94 1 19
+DEAL::94 2 24
+DEAL::94 3 44
+DEAL::94 4 79
+DEAL::94 5 99
+DEAL::95 0 11
+DEAL::95 1 15
+DEAL::95 2 19
+DEAL::95 3 51
+DEAL::95 4 59
+DEAL::95 5 71
+DEAL::95 6 79
+DEAL::95 7 91
+DEAL::95 8 99
+DEAL::96 0 0
+DEAL::96 1 5
+DEAL::96 2 8
+DEAL::96 3 16
+DEAL::96 4 33
+DEAL::96 5 60
+DEAL::96 6 61
+DEAL::96 7 65
+DEAL::96 8 81
+DEAL::96 9 96
+DEAL::97 0 1
+DEAL::97 1 3
+DEAL::97 2 5
+DEAL::97 3 31
+DEAL::97 4 41
+DEAL::97 5 53
+DEAL::97 6 71
+DEAL::97 7 75
+DEAL::97 8 85
+DEAL::97 9 95
+DEAL::98 0 0
+DEAL::98 1 19
+DEAL::98 2 36
+DEAL::98 3 51
+DEAL::98 4 64
+DEAL::98 5 75
+DEAL::98 6 84
+DEAL::98 7 91
+DEAL::98 8 96
+DEAL::98 9 99
+DEAL::99 0 99
diff --git a/tests/bits/compressed_set_sparsity_pattern_05.cc b/tests/bits/compressed_set_sparsity_pattern_05.cc
new file mode 100644 (file)
index 0000000..c18ff3a
--- /dev/null
@@ -0,0 +1,56 @@
+//----------------------------  compressed_set_sparsity_pattern_05.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005, 2007 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_05.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::symmetrize. since we create quite some
+// output here, choose smaller number of rows and entries than in the other
+// tests
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+void test ()
+{
+  const unsigned int N = 100;
+  CompressedSetSparsityPattern csp (N,N);
+  for (unsigned int i=0; i<N; ++i)
+    for (unsigned int j=0; j<10; ++j)
+      csp.add (i, (i+(i+1)*(j*j+i))%N);
+  csp.symmetrize ();
+
+  for (unsigned int i=0; i<N; ++i)
+    {
+      unsigned int index = 0;
+      for (CompressedSetSparsityPattern::row_iterator
+            j = csp.row_begin(i); j != csp.row_end(i); ++j, ++index)
+       deallog << i << ' ' << index << ' ' << *j
+               << std::endl;
+    }
+}
+
+
+
+int main () 
+{
+  std::ofstream logfile("compressed_set_sparsity_pattern_05/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_05/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_05/cmp/generic
new file mode 100644 (file)
index 0000000..b321f36
--- /dev/null
@@ -0,0 +1,1625 @@
+
+DEAL::0 0 0
+DEAL::0 1 1
+DEAL::0 2 2
+DEAL::0 3 4
+DEAL::0 4 6
+DEAL::0 5 9
+DEAL::0 6 12
+DEAL::0 7 16
+DEAL::0 8 22
+DEAL::0 9 25
+DEAL::0 10 26
+DEAL::0 11 32
+DEAL::0 12 36
+DEAL::0 13 42
+DEAL::0 14 46
+DEAL::0 15 48
+DEAL::0 16 49
+DEAL::0 17 50
+DEAL::0 18 52
+DEAL::0 19 56
+DEAL::0 20 62
+DEAL::0 21 64
+DEAL::0 22 66
+DEAL::0 23 72
+DEAL::0 24 76
+DEAL::0 25 81
+DEAL::0 26 82
+DEAL::0 27 86
+DEAL::0 28 92
+DEAL::0 29 96
+DEAL::0 30 98
+DEAL::1 0 0
+DEAL::1 1 1
+DEAL::1 2 3
+DEAL::1 3 5
+DEAL::1 4 11
+DEAL::1 5 21
+DEAL::1 6 25
+DEAL::1 7 28
+DEAL::1 8 31
+DEAL::1 9 35
+DEAL::1 10 36
+DEAL::1 11 40
+DEAL::1 12 48
+DEAL::1 13 52
+DEAL::1 14 53
+DEAL::1 15 61
+DEAL::1 16 65
+DEAL::1 17 72
+DEAL::1 18 73
+DEAL::1 19 75
+DEAL::1 20 76
+DEAL::1 21 77
+DEAL::1 22 97
+DEAL::2 0 0
+DEAL::2 1 8
+DEAL::2 2 11
+DEAL::2 3 16
+DEAL::2 4 20
+DEAL::2 5 35
+DEAL::2 6 51
+DEAL::2 7 55
+DEAL::2 8 56
+DEAL::2 9 83
+DEAL::3 0 1
+DEAL::3 1 11
+DEAL::3 2 15
+DEAL::3 3 19
+DEAL::3 4 22
+DEAL::3 5 26
+DEAL::3 6 31
+DEAL::3 7 39
+DEAL::3 8 47
+DEAL::3 9 51
+DEAL::3 10 59
+DEAL::3 11 71
+DEAL::3 12 79
+DEAL::3 13 97
+DEAL::4 0 0
+DEAL::4 1 4
+DEAL::4 2 8
+DEAL::4 3 24
+DEAL::4 4 28
+DEAL::4 5 29
+DEAL::4 6 40
+DEAL::4 7 44
+DEAL::4 8 49
+DEAL::4 9 50
+DEAL::4 10 54
+DEAL::4 11 58
+DEAL::4 12 69
+DEAL::4 13 78
+DEAL::4 14 90
+DEAL::4 15 94
+DEAL::5 0 1
+DEAL::5 1 8
+DEAL::5 2 12
+DEAL::5 3 16
+DEAL::5 4 17
+DEAL::5 5 19
+DEAL::5 6 21
+DEAL::5 7 29
+DEAL::5 8 31
+DEAL::5 9 32
+DEAL::5 10 33
+DEAL::5 11 35
+DEAL::5 12 36
+DEAL::5 13 37
+DEAL::5 14 40
+DEAL::5 15 41
+DEAL::5 16 51
+DEAL::5 17 52
+DEAL::5 18 56
+DEAL::5 19 57
+DEAL::5 20 59
+DEAL::5 21 61
+DEAL::5 22 65
+DEAL::5 23 72
+DEAL::5 24 76
+DEAL::5 25 77
+DEAL::5 26 81
+DEAL::5 27 85
+DEAL::5 28 89
+DEAL::5 29 92
+DEAL::5 30 96
+DEAL::5 31 97
+DEAL::6 0 0
+DEAL::6 1 11
+DEAL::6 2 15
+DEAL::6 3 23
+DEAL::6 4 48
+DEAL::6 5 55
+DEAL::6 6 60
+DEAL::6 7 76
+DEAL::6 8 91
+DEAL::6 9 96
+DEAL::7 0 11
+DEAL::7 1 35
+DEAL::7 2 51
+DEAL::7 3 55
+DEAL::7 4 63
+DEAL::7 5 71
+DEAL::7 6 75
+DEAL::7 7 91
+DEAL::7 8 95
+DEAL::8 0 2
+DEAL::8 1 4
+DEAL::8 2 5
+DEAL::8 3 9
+DEAL::8 4 16
+DEAL::8 5 21
+DEAL::8 6 24
+DEAL::8 7 46
+DEAL::8 8 52
+DEAL::8 9 56
+DEAL::8 10 61
+DEAL::8 11 80
+DEAL::8 12 89
+DEAL::8 13 96
+DEAL::9 0 0
+DEAL::9 1 8
+DEAL::9 2 9
+DEAL::9 3 13
+DEAL::9 4 25
+DEAL::9 5 33
+DEAL::9 6 39
+DEAL::9 7 49
+DEAL::9 8 59
+DEAL::9 9 60
+DEAL::9 10 64
+DEAL::9 11 84
+DEAL::9 12 85
+DEAL::9 13 88
+DEAL::9 14 89
+DEAL::9 15 99
+DEAL::10 0 11
+DEAL::10 1 16
+DEAL::10 2 19
+DEAL::10 3 20
+DEAL::10 4 24
+DEAL::10 5 31
+DEAL::10 6 59
+DEAL::10 7 64
+DEAL::10 8 95
+DEAL::10 9 96
+DEAL::11 0 1
+DEAL::11 1 2
+DEAL::11 2 3
+DEAL::11 3 6
+DEAL::11 4 7
+DEAL::11 5 10
+DEAL::11 6 11
+DEAL::11 7 15
+DEAL::11 8 17
+DEAL::11 9 23
+DEAL::11 10 25
+DEAL::11 11 27
+DEAL::11 12 31
+DEAL::11 13 35
+DEAL::11 14 37
+DEAL::11 15 43
+DEAL::11 16 46
+DEAL::11 17 51
+DEAL::11 18 55
+DEAL::11 19 58
+DEAL::11 20 61
+DEAL::11 21 65
+DEAL::11 22 67
+DEAL::11 23 70
+DEAL::11 24 71
+DEAL::11 25 73
+DEAL::11 26 75
+DEAL::11 27 78
+DEAL::11 28 82
+DEAL::11 29 83
+DEAL::11 30 87
+DEAL::11 31 91
+DEAL::11 32 93
+DEAL::11 33 95
+DEAL::12 0 0
+DEAL::12 1 5
+DEAL::12 2 20
+DEAL::12 3 21
+DEAL::12 4 36
+DEAL::12 5 68
+DEAL::12 6 76
+DEAL::12 7 81
+DEAL::12 8 85
+DEAL::12 9 93
+DEAL::13 0 9
+DEAL::13 1 16
+DEAL::13 2 19
+DEAL::13 3 21
+DEAL::13 4 29
+DEAL::13 5 32
+DEAL::13 6 41
+DEAL::13 7 45
+DEAL::13 8 51
+DEAL::13 9 57
+DEAL::13 10 81
+DEAL::13 11 91
+DEAL::13 12 95
+DEAL::13 13 99
+DEAL::14 0 24
+DEAL::14 1 39
+DEAL::14 2 59
+DEAL::14 3 64
+DEAL::14 4 84
+DEAL::14 5 99
+DEAL::15 0 3
+DEAL::15 1 6
+DEAL::15 2 11
+DEAL::15 3 19
+DEAL::15 4 26
+DEAL::15 5 31
+DEAL::15 6 39
+DEAL::15 7 45
+DEAL::15 8 46
+DEAL::15 9 51
+DEAL::15 10 53
+DEAL::15 11 55
+DEAL::15 12 66
+DEAL::15 13 70
+DEAL::15 14 71
+DEAL::15 15 78
+DEAL::15 16 79
+DEAL::15 17 86
+DEAL::15 18 91
+DEAL::15 19 95
+DEAL::15 20 99
+DEAL::16 0 0
+DEAL::16 1 2
+DEAL::16 2 5
+DEAL::16 3 8
+DEAL::16 4 10
+DEAL::16 5 13
+DEAL::16 6 21
+DEAL::16 7 32
+DEAL::16 8 36
+DEAL::16 9 38
+DEAL::16 10 41
+DEAL::16 11 46
+DEAL::16 12 50
+DEAL::16 13 52
+DEAL::16 14 56
+DEAL::16 15 58
+DEAL::16 16 60
+DEAL::16 17 65
+DEAL::16 18 76
+DEAL::16 19 82
+DEAL::16 20 86
+DEAL::16 21 88
+DEAL::16 22 96
+DEAL::17 0 5
+DEAL::17 1 11
+DEAL::17 2 23
+DEAL::17 3 41
+DEAL::17 4 71
+DEAL::17 5 73
+DEAL::17 6 75
+DEAL::17 7 81
+DEAL::17 8 85
+DEAL::17 9 95
+DEAL::18 0 31
+DEAL::18 1 35
+DEAL::18 2 36
+DEAL::18 3 44
+DEAL::18 4 60
+DEAL::18 5 64
+DEAL::18 6 76
+DEAL::18 7 79
+DEAL::18 8 91
+DEAL::18 9 99
+DEAL::19 0 3
+DEAL::19 1 5
+DEAL::19 2 10
+DEAL::19 3 13
+DEAL::19 4 15
+DEAL::19 5 19
+DEAL::19 6 23
+DEAL::19 7 29
+DEAL::19 8 35
+DEAL::19 9 43
+DEAL::19 10 54
+DEAL::19 11 55
+DEAL::19 12 63
+DEAL::19 13 65
+DEAL::19 14 69
+DEAL::19 15 70
+DEAL::19 16 78
+DEAL::19 17 79
+DEAL::19 18 93
+DEAL::19 19 94
+DEAL::19 20 95
+DEAL::19 21 98
+DEAL::19 22 99
+DEAL::20 0 2
+DEAL::20 1 10
+DEAL::20 2 12
+DEAL::20 3 22
+DEAL::20 4 24
+DEAL::20 5 29
+DEAL::20 6 32
+DEAL::20 7 38
+DEAL::20 8 40
+DEAL::20 9 41
+DEAL::20 10 42
+DEAL::20 11 52
+DEAL::20 12 60
+DEAL::20 13 61
+DEAL::20 14 62
+DEAL::20 15 65
+DEAL::20 16 69
+DEAL::20 17 72
+DEAL::20 18 76
+DEAL::20 19 82
+DEAL::20 20 84
+DEAL::20 21 88
+DEAL::20 22 92
+DEAL::20 23 96
+DEAL::21 0 1
+DEAL::21 1 5
+DEAL::21 2 8
+DEAL::21 3 12
+DEAL::21 4 13
+DEAL::21 5 16
+DEAL::21 6 32
+DEAL::21 7 33
+DEAL::21 8 35
+DEAL::21 9 37
+DEAL::21 10 40
+DEAL::21 11 41
+DEAL::21 12 57
+DEAL::21 13 61
+DEAL::21 14 65
+DEAL::21 15 71
+DEAL::21 16 75
+DEAL::21 17 76
+DEAL::21 18 80
+DEAL::21 19 81
+DEAL::21 20 83
+DEAL::21 21 88
+DEAL::21 22 91
+DEAL::22 0 0
+DEAL::22 1 3
+DEAL::22 2 20
+DEAL::22 3 28
+DEAL::22 4 35
+DEAL::22 5 51
+DEAL::22 6 55
+DEAL::22 7 56
+DEAL::22 8 91
+DEAL::22 9 96
+DEAL::23 0 6
+DEAL::23 1 11
+DEAL::23 2 17
+DEAL::23 3 19
+DEAL::23 4 31
+DEAL::23 5 39
+DEAL::23 6 42
+DEAL::23 7 51
+DEAL::23 8 59
+DEAL::23 9 67
+DEAL::23 10 71
+DEAL::23 11 75
+DEAL::23 12 81
+DEAL::23 13 91
+DEAL::23 14 99
+DEAL::24 0 4
+DEAL::24 1 8
+DEAL::24 2 10
+DEAL::24 3 14
+DEAL::24 4 20
+DEAL::24 5 24
+DEAL::24 6 34
+DEAL::24 7 38
+DEAL::24 8 44
+DEAL::24 9 49
+DEAL::24 10 54
+DEAL::24 11 58
+DEAL::24 12 60
+DEAL::24 13 64
+DEAL::24 14 70
+DEAL::24 15 74
+DEAL::24 16 84
+DEAL::24 17 88
+DEAL::24 18 94
+DEAL::25 0 0
+DEAL::25 1 1
+DEAL::25 2 9
+DEAL::25 3 11
+DEAL::25 4 25
+DEAL::25 5 39
+DEAL::25 6 48
+DEAL::25 7 49
+DEAL::25 8 73
+DEAL::25 9 75
+DEAL::25 10 79
+DEAL::25 11 81
+DEAL::25 12 91
+DEAL::26 0 0
+DEAL::26 1 3
+DEAL::26 2 15
+DEAL::26 3 28
+DEAL::26 4 36
+DEAL::26 5 51
+DEAL::26 6 55
+DEAL::26 7 56
+DEAL::26 8 60
+DEAL::26 9 71
+DEAL::27 0 11
+DEAL::27 1 31
+DEAL::27 2 35
+DEAL::27 3 51
+DEAL::27 4 55
+DEAL::27 5 75
+DEAL::27 6 83
+DEAL::27 7 91
+DEAL::27 8 95
+DEAL::28 0 1
+DEAL::28 1 4
+DEAL::28 2 22
+DEAL::28 3 26
+DEAL::28 4 40
+DEAL::28 5 56
+DEAL::28 6 61
+DEAL::28 7 65
+DEAL::28 8 69
+DEAL::28 9 72
+DEAL::28 10 76
+DEAL::28 11 84
+DEAL::28 12 89
+DEAL::28 13 96
+DEAL::29 0 4
+DEAL::29 1 5
+DEAL::29 2 13
+DEAL::29 3 19
+DEAL::29 4 20
+DEAL::29 5 29
+DEAL::29 6 44
+DEAL::29 7 45
+DEAL::29 8 49
+DEAL::29 9 68
+DEAL::29 10 69
+DEAL::29 11 79
+DEAL::29 12 80
+DEAL::29 13 88
+DEAL::29 14 93
+DEAL::29 15 99
+DEAL::30 0 35
+DEAL::30 1 39
+DEAL::30 2 44
+DEAL::30 3 56
+DEAL::30 4 60
+DEAL::30 5 71
+DEAL::30 6 76
+DEAL::30 7 79
+DEAL::30 8 84
+DEAL::30 9 91
+DEAL::31 0 1
+DEAL::31 1 3
+DEAL::31 2 5
+DEAL::31 3 10
+DEAL::31 4 11
+DEAL::31 5 15
+DEAL::31 6 18
+DEAL::31 7 23
+DEAL::31 8 27
+DEAL::31 9 33
+DEAL::31 10 35
+DEAL::31 11 38
+DEAL::31 12 41
+DEAL::31 13 42
+DEAL::31 14 43
+DEAL::31 15 46
+DEAL::31 16 47
+DEAL::31 17 50
+DEAL::31 18 51
+DEAL::31 19 53
+DEAL::31 20 55
+DEAL::31 21 62
+DEAL::31 22 63
+DEAL::31 23 65
+DEAL::31 24 67
+DEAL::31 25 71
+DEAL::31 26 75
+DEAL::31 27 77
+DEAL::31 28 83
+DEAL::31 29 86
+DEAL::31 30 87
+DEAL::31 31 91
+DEAL::31 32 97
+DEAL::32 0 0
+DEAL::32 1 5
+DEAL::32 2 13
+DEAL::32 3 16
+DEAL::32 4 20
+DEAL::32 5 21
+DEAL::32 6 61
+DEAL::32 7 76
+DEAL::32 8 85
+DEAL::32 9 88
+DEAL::33 0 5
+DEAL::33 1 9
+DEAL::33 2 21
+DEAL::33 3 31
+DEAL::33 4 52
+DEAL::33 5 55
+DEAL::33 6 61
+DEAL::33 7 77
+DEAL::33 8 79
+DEAL::33 9 89
+DEAL::33 10 91
+DEAL::33 11 96
+DEAL::33 12 99
+DEAL::34 0 24
+DEAL::34 1 39
+DEAL::34 2 59
+DEAL::34 3 64
+DEAL::34 4 84
+DEAL::34 5 99
+DEAL::35 0 1
+DEAL::35 1 2
+DEAL::35 2 5
+DEAL::35 3 7
+DEAL::35 4 11
+DEAL::35 5 18
+DEAL::35 6 19
+DEAL::35 7 21
+DEAL::35 8 22
+DEAL::35 9 27
+DEAL::35 10 30
+DEAL::35 11 31
+DEAL::35 12 39
+DEAL::35 13 41
+DEAL::35 14 42
+DEAL::35 15 43
+DEAL::35 16 47
+DEAL::35 17 51
+DEAL::35 18 55
+DEAL::35 19 59
+DEAL::35 20 61
+DEAL::35 21 62
+DEAL::35 22 67
+DEAL::35 23 71
+DEAL::35 24 81
+DEAL::35 25 82
+DEAL::35 26 87
+DEAL::35 27 91
+DEAL::35 28 93
+DEAL::35 29 95
+DEAL::35 30 99
+DEAL::36 0 0
+DEAL::36 1 1
+DEAL::36 2 5
+DEAL::36 3 12
+DEAL::36 4 16
+DEAL::36 5 18
+DEAL::36 6 26
+DEAL::36 7 36
+DEAL::36 8 40
+DEAL::36 9 42
+DEAL::36 10 48
+DEAL::36 11 50
+DEAL::36 12 60
+DEAL::36 13 62
+DEAL::36 14 65
+DEAL::36 15 68
+DEAL::36 16 76
+DEAL::36 17 81
+DEAL::36 18 86
+DEAL::36 19 90
+DEAL::36 20 92
+DEAL::36 21 93
+DEAL::36 22 98
+DEAL::37 0 5
+DEAL::37 1 11
+DEAL::37 2 21
+DEAL::37 3 43
+DEAL::37 4 51
+DEAL::37 5 75
+DEAL::37 6 81
+DEAL::37 7 85
+DEAL::37 8 93
+DEAL::37 9 95
+DEAL::38 0 16
+DEAL::38 1 20
+DEAL::38 2 24
+DEAL::38 3 31
+DEAL::38 4 44
+DEAL::38 5 59
+DEAL::38 6 71
+DEAL::38 7 76
+DEAL::38 8 79
+DEAL::38 9 95
+DEAL::39 0 3
+DEAL::39 1 9
+DEAL::39 2 14
+DEAL::39 3 15
+DEAL::39 4 23
+DEAL::39 5 25
+DEAL::39 6 30
+DEAL::39 7 34
+DEAL::39 8 35
+DEAL::39 9 39
+DEAL::39 10 43
+DEAL::39 11 55
+DEAL::39 12 58
+DEAL::39 13 59
+DEAL::39 14 73
+DEAL::39 15 75
+DEAL::39 16 78
+DEAL::39 17 83
+DEAL::39 18 85
+DEAL::39 19 89
+DEAL::39 20 90
+DEAL::39 21 93
+DEAL::39 22 99
+DEAL::40 0 1
+DEAL::40 1 4
+DEAL::40 2 5
+DEAL::40 3 20
+DEAL::40 4 21
+DEAL::40 5 28
+DEAL::40 6 36
+DEAL::40 7 44
+DEAL::40 8 49
+DEAL::40 9 56
+DEAL::40 10 70
+DEAL::40 11 78
+DEAL::40 12 80
+DEAL::40 13 89
+DEAL::41 0 5
+DEAL::41 1 13
+DEAL::41 2 16
+DEAL::41 3 17
+DEAL::41 4 20
+DEAL::41 5 21
+DEAL::41 6 31
+DEAL::41 7 35
+DEAL::41 8 41
+DEAL::41 9 45
+DEAL::41 10 48
+DEAL::41 11 51
+DEAL::41 12 56
+DEAL::41 13 63
+DEAL::41 14 65
+DEAL::41 15 68
+DEAL::41 16 72
+DEAL::41 17 73
+DEAL::41 18 75
+DEAL::41 19 80
+DEAL::41 20 81
+DEAL::41 21 92
+DEAL::41 22 93
+DEAL::41 23 97
+DEAL::42 0 0
+DEAL::42 1 20
+DEAL::42 2 23
+DEAL::42 3 31
+DEAL::42 4 35
+DEAL::42 5 36
+DEAL::42 6 48
+DEAL::42 7 55
+DEAL::42 8 91
+DEAL::42 9 96
+DEAL::43 0 11
+DEAL::43 1 19
+DEAL::43 2 31
+DEAL::43 3 35
+DEAL::43 4 37
+DEAL::43 5 39
+DEAL::43 6 51
+DEAL::43 7 61
+DEAL::43 8 62
+DEAL::43 9 79
+DEAL::43 10 86
+DEAL::43 11 87
+DEAL::43 12 91
+DEAL::43 13 99
+DEAL::44 0 4
+DEAL::44 1 18
+DEAL::44 2 24
+DEAL::44 3 29
+DEAL::44 4 30
+DEAL::44 5 38
+DEAL::44 6 40
+DEAL::44 7 44
+DEAL::44 8 49
+DEAL::44 9 54
+DEAL::44 10 68
+DEAL::44 11 69
+DEAL::44 12 80
+DEAL::44 13 88
+DEAL::44 14 90
+DEAL::44 15 94
+DEAL::45 0 13
+DEAL::45 1 15
+DEAL::45 2 29
+DEAL::45 3 41
+DEAL::45 4 51
+DEAL::45 5 59
+DEAL::45 6 60
+DEAL::45 7 61
+DEAL::45 8 65
+DEAL::45 9 69
+DEAL::45 10 71
+DEAL::45 11 85
+DEAL::45 12 88
+DEAL::45 13 99
+DEAL::46 0 0
+DEAL::46 1 8
+DEAL::46 2 11
+DEAL::46 3 15
+DEAL::46 4 16
+DEAL::46 5 31
+DEAL::46 6 55
+DEAL::46 7 60
+DEAL::46 8 83
+DEAL::46 9 96
+DEAL::47 0 3
+DEAL::47 1 31
+DEAL::47 2 35
+DEAL::47 3 51
+DEAL::47 4 55
+DEAL::47 5 71
+DEAL::47 6 75
+DEAL::47 7 91
+DEAL::47 8 95
+DEAL::48 0 0
+DEAL::48 1 1
+DEAL::48 2 6
+DEAL::48 3 25
+DEAL::48 4 36
+DEAL::48 5 41
+DEAL::48 6 42
+DEAL::48 7 49
+DEAL::48 8 56
+DEAL::48 9 64
+DEAL::48 10 69
+DEAL::48 11 84
+DEAL::48 12 92
+DEAL::48 13 96
+DEAL::49 0 0
+DEAL::49 1 4
+DEAL::49 2 9
+DEAL::49 3 24
+DEAL::49 4 25
+DEAL::49 5 29
+DEAL::49 6 40
+DEAL::49 7 44
+DEAL::49 8 48
+DEAL::49 9 49
+DEAL::49 10 64
+DEAL::49 11 65
+DEAL::49 12 68
+DEAL::49 13 69
+DEAL::49 14 73
+DEAL::49 15 84
+DEAL::49 16 89
+DEAL::49 17 93
+DEAL::49 18 99
+DEAL::50 0 0
+DEAL::50 1 4
+DEAL::50 2 16
+DEAL::50 3 31
+DEAL::50 4 36
+DEAL::50 5 51
+DEAL::50 6 59
+DEAL::50 7 64
+DEAL::50 8 75
+DEAL::50 9 99
+DEAL::51 0 2
+DEAL::51 1 3
+DEAL::51 2 5
+DEAL::51 3 7
+DEAL::51 4 11
+DEAL::51 5 13
+DEAL::51 6 15
+DEAL::51 7 22
+DEAL::51 8 23
+DEAL::51 9 26
+DEAL::51 10 27
+DEAL::51 11 31
+DEAL::51 12 35
+DEAL::51 13 37
+DEAL::51 14 41
+DEAL::51 15 43
+DEAL::51 16 45
+DEAL::51 17 47
+DEAL::51 18 50
+DEAL::51 19 51
+DEAL::51 20 55
+DEAL::51 21 57
+DEAL::51 22 63
+DEAL::51 23 71
+DEAL::51 24 75
+DEAL::51 25 78
+DEAL::51 26 81
+DEAL::51 27 86
+DEAL::51 28 87
+DEAL::51 29 90
+DEAL::51 30 91
+DEAL::51 31 93
+DEAL::51 32 95
+DEAL::51 33 98
+DEAL::52 0 0
+DEAL::52 1 1
+DEAL::52 2 5
+DEAL::52 3 8
+DEAL::52 4 16
+DEAL::52 5 20
+DEAL::52 6 33
+DEAL::52 7 56
+DEAL::52 8 61
+DEAL::52 9 85
+DEAL::53 0 1
+DEAL::53 1 15
+DEAL::53 2 31
+DEAL::53 3 59
+DEAL::53 4 61
+DEAL::53 5 65
+DEAL::53 6 69
+DEAL::53 7 71
+DEAL::53 8 72
+DEAL::53 9 76
+DEAL::53 10 79
+DEAL::53 11 89
+DEAL::53 12 97
+DEAL::54 0 4
+DEAL::54 1 19
+DEAL::54 2 24
+DEAL::54 3 44
+DEAL::54 4 79
+DEAL::54 5 99
+DEAL::55 0 2
+DEAL::55 1 6
+DEAL::55 2 7
+DEAL::55 3 11
+DEAL::55 4 15
+DEAL::55 5 19
+DEAL::55 6 22
+DEAL::55 7 26
+DEAL::55 8 27
+DEAL::55 9 31
+DEAL::55 10 33
+DEAL::55 11 35
+DEAL::55 12 39
+DEAL::55 13 42
+DEAL::55 14 46
+DEAL::55 15 47
+DEAL::55 16 51
+DEAL::55 17 58
+DEAL::55 18 59
+DEAL::55 19 62
+DEAL::55 20 65
+DEAL::55 21 66
+DEAL::55 22 67
+DEAL::55 23 71
+DEAL::55 24 79
+DEAL::55 25 82
+DEAL::55 26 83
+DEAL::55 27 86
+DEAL::55 28 87
+DEAL::55 29 90
+DEAL::55 30 91
+DEAL::56 0 0
+DEAL::56 1 2
+DEAL::56 2 5
+DEAL::56 3 8
+DEAL::56 4 16
+DEAL::56 5 22
+DEAL::56 6 26
+DEAL::56 7 28
+DEAL::56 8 30
+DEAL::56 9 40
+DEAL::56 10 41
+DEAL::56 11 48
+DEAL::56 12 52
+DEAL::56 13 58
+DEAL::56 14 60
+DEAL::56 15 61
+DEAL::56 16 65
+DEAL::56 17 66
+DEAL::56 18 72
+DEAL::56 19 73
+DEAL::56 20 76
+DEAL::56 21 78
+DEAL::56 22 80
+DEAL::56 23 90
+DEAL::56 24 96
+DEAL::57 0 5
+DEAL::57 1 13
+DEAL::57 2 21
+DEAL::57 3 51
+DEAL::57 4 61
+DEAL::57 5 63
+DEAL::57 6 75
+DEAL::57 7 85
+DEAL::57 8 91
+DEAL::57 9 95
+DEAL::58 0 4
+DEAL::58 1 11
+DEAL::58 2 16
+DEAL::58 3 24
+DEAL::58 4 39
+DEAL::58 5 55
+DEAL::58 6 56
+DEAL::58 7 59
+DEAL::58 8 71
+DEAL::58 9 80
+DEAL::59 0 3
+DEAL::59 1 5
+DEAL::59 2 9
+DEAL::59 3 10
+DEAL::59 4 14
+DEAL::59 5 23
+DEAL::59 6 34
+DEAL::59 7 35
+DEAL::59 8 38
+DEAL::59 9 39
+DEAL::59 10 45
+DEAL::59 11 50
+DEAL::59 12 53
+DEAL::59 13 55
+DEAL::59 14 58
+DEAL::59 15 59
+DEAL::59 16 63
+DEAL::59 17 73
+DEAL::59 18 75
+DEAL::59 19 83
+DEAL::59 20 89
+DEAL::59 21 95
+DEAL::59 22 99
+DEAL::60 0 6
+DEAL::60 1 9
+DEAL::60 2 16
+DEAL::60 3 18
+DEAL::60 4 20
+DEAL::60 5 24
+DEAL::60 6 26
+DEAL::60 7 30
+DEAL::60 8 36
+DEAL::60 9 45
+DEAL::60 10 46
+DEAL::60 11 56
+DEAL::60 12 61
+DEAL::60 13 64
+DEAL::60 14 66
+DEAL::60 15 68
+DEAL::60 16 69
+DEAL::60 17 76
+DEAL::60 18 80
+DEAL::60 19 81
+DEAL::60 20 86
+DEAL::60 21 96
+DEAL::61 0 1
+DEAL::61 1 5
+DEAL::61 2 8
+DEAL::61 3 11
+DEAL::61 4 20
+DEAL::61 5 21
+DEAL::61 6 28
+DEAL::61 7 32
+DEAL::61 8 33
+DEAL::61 9 35
+DEAL::61 10 43
+DEAL::61 11 45
+DEAL::61 12 52
+DEAL::61 13 53
+DEAL::61 14 56
+DEAL::61 15 57
+DEAL::61 16 60
+DEAL::61 17 65
+DEAL::61 18 75
+DEAL::61 19 77
+DEAL::61 20 81
+DEAL::61 21 85
+DEAL::61 22 91
+DEAL::61 23 93
+DEAL::61 24 96
+DEAL::62 0 0
+DEAL::62 1 20
+DEAL::62 2 31
+DEAL::62 3 35
+DEAL::62 4 36
+DEAL::62 5 43
+DEAL::62 6 55
+DEAL::62 7 68
+DEAL::62 8 71
+DEAL::62 9 76
+DEAL::63 0 7
+DEAL::63 1 19
+DEAL::63 2 31
+DEAL::63 3 41
+DEAL::63 4 51
+DEAL::63 5 57
+DEAL::63 6 59
+DEAL::63 7 66
+DEAL::63 8 71
+DEAL::63 9 79
+DEAL::63 10 82
+DEAL::63 11 91
+DEAL::63 12 95
+DEAL::63 13 99
+DEAL::64 0 0
+DEAL::64 1 9
+DEAL::64 2 10
+DEAL::64 3 14
+DEAL::64 4 18
+DEAL::64 5 24
+DEAL::64 6 34
+DEAL::64 7 48
+DEAL::64 8 49
+DEAL::64 9 50
+DEAL::64 10 60
+DEAL::64 11 64
+DEAL::64 12 68
+DEAL::64 13 84
+DEAL::64 14 89
+DEAL::64 15 98
+DEAL::65 0 1
+DEAL::65 1 5
+DEAL::65 2 11
+DEAL::65 3 16
+DEAL::65 4 19
+DEAL::65 5 20
+DEAL::65 6 21
+DEAL::65 7 28
+DEAL::65 8 31
+DEAL::65 9 36
+DEAL::65 10 41
+DEAL::65 11 45
+DEAL::65 12 49
+DEAL::65 13 53
+DEAL::65 14 55
+DEAL::65 15 56
+DEAL::65 16 61
+DEAL::65 17 76
+DEAL::65 18 79
+DEAL::65 19 81
+DEAL::65 20 89
+DEAL::65 21 96
+DEAL::66 0 0
+DEAL::66 1 15
+DEAL::66 2 55
+DEAL::66 3 56
+DEAL::66 4 60
+DEAL::66 5 63
+DEAL::66 6 71
+DEAL::66 7 76
+DEAL::66 8 88
+DEAL::66 9 91
+DEAL::67 0 11
+DEAL::67 1 23
+DEAL::67 2 31
+DEAL::67 3 35
+DEAL::67 4 55
+DEAL::67 5 71
+DEAL::67 6 75
+DEAL::67 7 91
+DEAL::67 8 95
+DEAL::68 0 12
+DEAL::68 1 29
+DEAL::68 2 36
+DEAL::68 3 41
+DEAL::68 4 44
+DEAL::68 5 49
+DEAL::68 6 60
+DEAL::68 7 62
+DEAL::68 8 64
+DEAL::68 9 76
+DEAL::68 10 81
+DEAL::68 11 85
+DEAL::68 12 86
+DEAL::69 0 4
+DEAL::69 1 19
+DEAL::69 2 20
+DEAL::69 3 28
+DEAL::69 4 29
+DEAL::69 5 44
+DEAL::69 6 45
+DEAL::69 7 48
+DEAL::69 8 49
+DEAL::69 9 53
+DEAL::69 10 60
+DEAL::69 11 69
+DEAL::69 12 73
+DEAL::69 13 79
+DEAL::69 14 85
+DEAL::69 15 99
+DEAL::70 0 11
+DEAL::70 1 15
+DEAL::70 2 19
+DEAL::70 3 24
+DEAL::70 4 40
+DEAL::70 5 76
+DEAL::70 6 79
+DEAL::70 7 84
+DEAL::70 8 91
+DEAL::70 9 96
+DEAL::71 0 3
+DEAL::71 1 7
+DEAL::71 2 11
+DEAL::71 3 15
+DEAL::71 4 17
+DEAL::71 5 21
+DEAL::71 6 23
+DEAL::71 7 26
+DEAL::71 8 30
+DEAL::71 9 31
+DEAL::71 10 35
+DEAL::71 11 38
+DEAL::71 12 45
+DEAL::71 13 47
+DEAL::71 14 51
+DEAL::71 15 53
+DEAL::71 16 55
+DEAL::71 17 58
+DEAL::71 18 62
+DEAL::71 19 63
+DEAL::71 20 66
+DEAL::71 21 67
+DEAL::71 22 71
+DEAL::71 23 73
+DEAL::71 24 75
+DEAL::71 25 81
+DEAL::71 26 82
+DEAL::71 27 83
+DEAL::71 28 85
+DEAL::71 29 87
+DEAL::71 30 90
+DEAL::71 31 91
+DEAL::71 32 95
+DEAL::71 33 97
+DEAL::72 0 0
+DEAL::72 1 1
+DEAL::72 2 5
+DEAL::72 3 20
+DEAL::72 4 28
+DEAL::72 5 41
+DEAL::72 6 53
+DEAL::72 7 56
+DEAL::72 8 85
+DEAL::72 9 96
+DEAL::73 0 1
+DEAL::73 1 11
+DEAL::73 2 17
+DEAL::73 3 25
+DEAL::73 4 39
+DEAL::73 5 41
+DEAL::73 6 49
+DEAL::73 7 56
+DEAL::73 8 59
+DEAL::73 9 69
+DEAL::73 10 71
+DEAL::73 11 75
+DEAL::73 12 81
+DEAL::73 13 92
+DEAL::74 0 24
+DEAL::74 1 99
+DEAL::75 0 1
+DEAL::75 1 7
+DEAL::75 2 11
+DEAL::75 3 17
+DEAL::75 4 21
+DEAL::75 5 23
+DEAL::75 6 25
+DEAL::75 7 27
+DEAL::75 8 31
+DEAL::75 9 37
+DEAL::75 10 39
+DEAL::75 11 41
+DEAL::75 12 47
+DEAL::75 13 50
+DEAL::75 14 51
+DEAL::75 15 57
+DEAL::75 16 59
+DEAL::75 17 61
+DEAL::75 18 67
+DEAL::75 19 71
+DEAL::75 20 73
+DEAL::75 21 75
+DEAL::75 22 77
+DEAL::75 23 79
+DEAL::75 24 81
+DEAL::75 25 87
+DEAL::75 26 91
+DEAL::75 27 97
+DEAL::75 28 98
+DEAL::75 29 99
+DEAL::76 0 0
+DEAL::76 1 1
+DEAL::76 2 5
+DEAL::76 3 6
+DEAL::76 4 12
+DEAL::76 5 16
+DEAL::76 6 18
+DEAL::76 7 20
+DEAL::76 8 21
+DEAL::76 9 28
+DEAL::76 10 30
+DEAL::76 11 32
+DEAL::76 12 36
+DEAL::76 13 38
+DEAL::76 14 53
+DEAL::76 15 56
+DEAL::76 16 60
+DEAL::76 17 62
+DEAL::76 18 65
+DEAL::76 19 66
+DEAL::76 20 68
+DEAL::76 21 70
+DEAL::76 22 80
+DEAL::76 23 82
+DEAL::76 24 88
+DEAL::77 0 1
+DEAL::77 1 5
+DEAL::77 2 31
+DEAL::77 3 33
+DEAL::77 4 61
+DEAL::77 5 75
+DEAL::77 6 83
+DEAL::77 7 85
+DEAL::77 8 91
+DEAL::77 9 95
+DEAL::78 0 4
+DEAL::78 1 11
+DEAL::78 2 15
+DEAL::78 3 19
+DEAL::78 4 39
+DEAL::78 5 40
+DEAL::78 6 51
+DEAL::78 7 56
+DEAL::78 8 84
+DEAL::78 9 96
+DEAL::79 0 3
+DEAL::79 1 15
+DEAL::79 2 18
+DEAL::79 3 19
+DEAL::79 4 25
+DEAL::79 5 29
+DEAL::79 6 30
+DEAL::79 7 33
+DEAL::79 8 38
+DEAL::79 9 43
+DEAL::79 10 53
+DEAL::79 11 54
+DEAL::79 12 55
+DEAL::79 13 63
+DEAL::79 14 65
+DEAL::79 15 69
+DEAL::79 16 70
+DEAL::79 17 75
+DEAL::79 18 79
+DEAL::79 19 83
+DEAL::79 20 94
+DEAL::79 21 95
+DEAL::79 22 99
+DEAL::80 0 8
+DEAL::80 1 21
+DEAL::80 2 29
+DEAL::80 3 40
+DEAL::80 4 41
+DEAL::80 5 44
+DEAL::80 6 56
+DEAL::80 7 58
+DEAL::80 8 60
+DEAL::80 9 76
+DEAL::80 10 84
+DEAL::80 11 85
+DEAL::80 12 89
+DEAL::80 13 90
+DEAL::81 0 0
+DEAL::81 1 5
+DEAL::81 2 12
+DEAL::81 3 13
+DEAL::81 4 17
+DEAL::81 5 21
+DEAL::81 6 23
+DEAL::81 7 25
+DEAL::81 8 35
+DEAL::81 9 36
+DEAL::81 10 37
+DEAL::81 11 41
+DEAL::81 12 51
+DEAL::81 13 60
+DEAL::81 14 61
+DEAL::81 15 65
+DEAL::81 16 68
+DEAL::81 17 71
+DEAL::81 18 73
+DEAL::81 19 75
+DEAL::81 20 85
+DEAL::81 21 88
+DEAL::81 22 92
+DEAL::81 23 93
+DEAL::81 24 96
+DEAL::82 0 0
+DEAL::82 1 11
+DEAL::82 2 16
+DEAL::82 3 20
+DEAL::82 4 35
+DEAL::82 5 55
+DEAL::82 6 63
+DEAL::82 7 71
+DEAL::82 8 76
+DEAL::82 9 88
+DEAL::83 0 2
+DEAL::83 1 11
+DEAL::83 2 21
+DEAL::83 3 27
+DEAL::83 4 31
+DEAL::83 5 39
+DEAL::83 6 46
+DEAL::83 7 55
+DEAL::83 8 59
+DEAL::83 9 71
+DEAL::83 10 77
+DEAL::83 11 79
+DEAL::83 12 91
+DEAL::83 13 99
+DEAL::84 0 9
+DEAL::84 1 14
+DEAL::84 2 20
+DEAL::84 3 24
+DEAL::84 4 28
+DEAL::84 5 30
+DEAL::84 6 34
+DEAL::84 7 48
+DEAL::84 8 49
+DEAL::84 9 64
+DEAL::84 10 70
+DEAL::84 11 78
+DEAL::84 12 80
+DEAL::84 13 84
+DEAL::84 14 89
+DEAL::84 15 98
+DEAL::85 0 5
+DEAL::85 1 9
+DEAL::85 2 12
+DEAL::85 3 17
+DEAL::85 4 32
+DEAL::85 5 37
+DEAL::85 6 39
+DEAL::85 7 45
+DEAL::85 8 52
+DEAL::85 9 57
+DEAL::85 10 61
+DEAL::85 11 68
+DEAL::85 12 69
+DEAL::85 13 71
+DEAL::85 14 72
+DEAL::85 15 77
+DEAL::85 16 80
+DEAL::85 17 81
+DEAL::85 18 91
+DEAL::85 19 92
+DEAL::85 20 93
+DEAL::85 21 95
+DEAL::85 22 97
+DEAL::85 23 99
+DEAL::86 0 0
+DEAL::86 1 15
+DEAL::86 2 16
+DEAL::86 3 31
+DEAL::86 4 36
+DEAL::86 5 43
+DEAL::86 6 51
+DEAL::86 7 55
+DEAL::86 8 60
+DEAL::86 9 68
+DEAL::87 0 11
+DEAL::87 1 31
+DEAL::87 2 35
+DEAL::87 3 43
+DEAL::87 4 51
+DEAL::87 5 55
+DEAL::87 6 71
+DEAL::87 7 75
+DEAL::87 8 95
+DEAL::88 0 9
+DEAL::88 1 16
+DEAL::88 2 20
+DEAL::88 3 21
+DEAL::88 4 24
+DEAL::88 5 29
+DEAL::88 6 32
+DEAL::88 7 44
+DEAL::88 8 45
+DEAL::88 9 66
+DEAL::88 10 76
+DEAL::88 11 81
+DEAL::88 12 82
+DEAL::89 0 5
+DEAL::89 1 8
+DEAL::89 2 9
+DEAL::89 3 28
+DEAL::89 4 33
+DEAL::89 5 39
+DEAL::89 6 40
+DEAL::89 7 49
+DEAL::89 8 53
+DEAL::89 9 59
+DEAL::89 10 64
+DEAL::89 11 65
+DEAL::89 12 80
+DEAL::89 13 84
+DEAL::89 14 89
+DEAL::89 15 99
+DEAL::90 0 4
+DEAL::90 1 36
+DEAL::90 2 39
+DEAL::90 3 44
+DEAL::90 4 51
+DEAL::90 5 55
+DEAL::90 6 56
+DEAL::90 7 71
+DEAL::90 8 80
+DEAL::90 9 99
+DEAL::91 0 6
+DEAL::91 1 7
+DEAL::91 2 11
+DEAL::91 3 13
+DEAL::91 4 15
+DEAL::91 5 18
+DEAL::91 6 21
+DEAL::91 7 22
+DEAL::91 8 23
+DEAL::91 9 25
+DEAL::91 10 27
+DEAL::91 11 30
+DEAL::91 12 31
+DEAL::91 13 33
+DEAL::91 14 35
+DEAL::91 15 42
+DEAL::91 16 43
+DEAL::91 17 47
+DEAL::91 18 51
+DEAL::91 19 55
+DEAL::91 20 57
+DEAL::91 21 61
+DEAL::91 22 63
+DEAL::91 23 66
+DEAL::91 24 67
+DEAL::91 25 70
+DEAL::91 26 71
+DEAL::91 27 75
+DEAL::91 28 77
+DEAL::91 29 83
+DEAL::91 30 85
+DEAL::91 31 91
+DEAL::91 32 95
+DEAL::91 33 98
+DEAL::92 0 0
+DEAL::92 1 5
+DEAL::92 2 20
+DEAL::92 3 36
+DEAL::92 4 41
+DEAL::92 5 48
+DEAL::92 6 73
+DEAL::92 7 81
+DEAL::92 8 85
+DEAL::92 9 96
+DEAL::93 0 11
+DEAL::93 1 12
+DEAL::93 2 19
+DEAL::93 3 29
+DEAL::93 4 35
+DEAL::93 5 36
+DEAL::93 6 37
+DEAL::93 7 39
+DEAL::93 8 41
+DEAL::93 9 49
+DEAL::93 10 51
+DEAL::93 11 61
+DEAL::93 12 81
+DEAL::93 13 85
+DEAL::94 0 4
+DEAL::94 1 19
+DEAL::94 2 24
+DEAL::94 3 44
+DEAL::94 4 79
+DEAL::94 5 99
+DEAL::95 0 7
+DEAL::95 1 10
+DEAL::95 2 11
+DEAL::95 3 13
+DEAL::95 4 15
+DEAL::95 5 17
+DEAL::95 6 19
+DEAL::95 7 27
+DEAL::95 8 35
+DEAL::95 9 37
+DEAL::95 10 38
+DEAL::95 11 47
+DEAL::95 12 51
+DEAL::95 13 57
+DEAL::95 14 59
+DEAL::95 15 63
+DEAL::95 16 67
+DEAL::95 17 71
+DEAL::95 18 77
+DEAL::95 19 79
+DEAL::95 20 85
+DEAL::95 21 87
+DEAL::95 22 91
+DEAL::95 23 97
+DEAL::95 24 99
+DEAL::96 0 0
+DEAL::96 1 5
+DEAL::96 2 6
+DEAL::96 3 8
+DEAL::96 4 10
+DEAL::96 5 16
+DEAL::96 6 20
+DEAL::96 7 22
+DEAL::96 8 28
+DEAL::96 9 33
+DEAL::96 10 42
+DEAL::96 11 46
+DEAL::96 12 48
+DEAL::96 13 56
+DEAL::96 14 60
+DEAL::96 15 61
+DEAL::96 16 65
+DEAL::96 17 70
+DEAL::96 18 72
+DEAL::96 19 78
+DEAL::96 20 81
+DEAL::96 21 92
+DEAL::96 22 96
+DEAL::96 23 98
+DEAL::97 0 1
+DEAL::97 1 3
+DEAL::97 2 5
+DEAL::97 3 31
+DEAL::97 4 41
+DEAL::97 5 53
+DEAL::97 6 71
+DEAL::97 7 75
+DEAL::97 8 85
+DEAL::97 9 95
+DEAL::98 0 0
+DEAL::98 1 19
+DEAL::98 2 36
+DEAL::98 3 51
+DEAL::98 4 64
+DEAL::98 5 75
+DEAL::98 6 84
+DEAL::98 7 91
+DEAL::98 8 96
+DEAL::98 9 99
+DEAL::99 0 9
+DEAL::99 1 13
+DEAL::99 2 14
+DEAL::99 3 15
+DEAL::99 4 18
+DEAL::99 5 19
+DEAL::99 6 23
+DEAL::99 7 29
+DEAL::99 8 33
+DEAL::99 9 34
+DEAL::99 10 35
+DEAL::99 11 39
+DEAL::99 12 43
+DEAL::99 13 45
+DEAL::99 14 49
+DEAL::99 15 50
+DEAL::99 16 54
+DEAL::99 17 59
+DEAL::99 18 63
+DEAL::99 19 69
+DEAL::99 20 74
+DEAL::99 21 75
+DEAL::99 22 79
+DEAL::99 23 83
+DEAL::99 24 85
+DEAL::99 25 89
+DEAL::99 26 90
+DEAL::99 27 94
+DEAL::99 28 95
+DEAL::99 29 98
+DEAL::99 30 99
diff --git a/tests/bits/compressed_set_sparsity_pattern_06.cc b/tests/bits/compressed_set_sparsity_pattern_06.cc
new file mode 100644 (file)
index 0000000..64ca91f
--- /dev/null
@@ -0,0 +1,51 @@
+//----------------------------  compressed_set_sparsity_pattern_06.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_06.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::print_gnuplot. since we create quite some
+// output here, choose smaller number of rows and entries than in the other
+// tests
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+std::ofstream logfile("compressed_set_sparsity_pattern_06/output");
+
+void test ()
+{
+  const unsigned int N = 100;
+  CompressedSetSparsityPattern csp (N,N);
+  for (unsigned int i=0; i<N; ++i)
+    for (unsigned int j=0; j<10; ++j)
+      csp.add (i, (i+(i+1)*(j*j+i))%N);
+  csp.symmetrize ();
+
+  csp.print_gnuplot (logfile);
+  deallog << "OK" << std::endl;
+}
+
+
+
+int main () 
+{
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_06/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_06/cmp/generic
new file mode 100644 (file)
index 0000000..380aed4
--- /dev/null
@@ -0,0 +1,1626 @@
+
+0 0
+1 0
+2 0
+4 0
+6 0
+9 0
+12 0
+16 0
+22 0
+25 0
+26 0
+32 0
+36 0
+42 0
+46 0
+48 0
+49 0
+50 0
+52 0
+56 0
+62 0
+64 0
+66 0
+72 0
+76 0
+81 0
+82 0
+86 0
+92 0
+96 0
+98 0
+0 -1
+1 -1
+3 -1
+5 -1
+11 -1
+21 -1
+25 -1
+28 -1
+31 -1
+35 -1
+36 -1
+40 -1
+48 -1
+52 -1
+53 -1
+61 -1
+65 -1
+72 -1
+73 -1
+75 -1
+76 -1
+77 -1
+97 -1
+0 -2
+8 -2
+11 -2
+16 -2
+20 -2
+35 -2
+51 -2
+55 -2
+56 -2
+83 -2
+1 -3
+11 -3
+15 -3
+19 -3
+22 -3
+26 -3
+31 -3
+39 -3
+47 -3
+51 -3
+59 -3
+71 -3
+79 -3
+97 -3
+0 -4
+4 -4
+8 -4
+24 -4
+28 -4
+29 -4
+40 -4
+44 -4
+49 -4
+50 -4
+54 -4
+58 -4
+69 -4
+78 -4
+90 -4
+94 -4
+1 -5
+8 -5
+12 -5
+16 -5
+17 -5
+19 -5
+21 -5
+29 -5
+31 -5
+32 -5
+33 -5
+35 -5
+36 -5
+37 -5
+40 -5
+41 -5
+51 -5
+52 -5
+56 -5
+57 -5
+59 -5
+61 -5
+65 -5
+72 -5
+76 -5
+77 -5
+81 -5
+85 -5
+89 -5
+92 -5
+96 -5
+97 -5
+0 -6
+11 -6
+15 -6
+23 -6
+48 -6
+55 -6
+60 -6
+76 -6
+91 -6
+96 -6
+11 -7
+35 -7
+51 -7
+55 -7
+63 -7
+71 -7
+75 -7
+91 -7
+95 -7
+2 -8
+4 -8
+5 -8
+9 -8
+16 -8
+21 -8
+24 -8
+46 -8
+52 -8
+56 -8
+61 -8
+80 -8
+89 -8
+96 -8
+0 -9
+8 -9
+9 -9
+13 -9
+25 -9
+33 -9
+39 -9
+49 -9
+59 -9
+60 -9
+64 -9
+84 -9
+85 -9
+88 -9
+89 -9
+99 -9
+11 -10
+16 -10
+19 -10
+20 -10
+24 -10
+31 -10
+59 -10
+64 -10
+95 -10
+96 -10
+1 -11
+2 -11
+3 -11
+6 -11
+7 -11
+10 -11
+11 -11
+15 -11
+17 -11
+23 -11
+25 -11
+27 -11
+31 -11
+35 -11
+37 -11
+43 -11
+46 -11
+51 -11
+55 -11
+58 -11
+61 -11
+65 -11
+67 -11
+70 -11
+71 -11
+73 -11
+75 -11
+78 -11
+82 -11
+83 -11
+87 -11
+91 -11
+93 -11
+95 -11
+0 -12
+5 -12
+20 -12
+21 -12
+36 -12
+68 -12
+76 -12
+81 -12
+85 -12
+93 -12
+9 -13
+16 -13
+19 -13
+21 -13
+29 -13
+32 -13
+41 -13
+45 -13
+51 -13
+57 -13
+81 -13
+91 -13
+95 -13
+99 -13
+24 -14
+39 -14
+59 -14
+64 -14
+84 -14
+99 -14
+3 -15
+6 -15
+11 -15
+19 -15
+26 -15
+31 -15
+39 -15
+45 -15
+46 -15
+51 -15
+53 -15
+55 -15
+66 -15
+70 -15
+71 -15
+78 -15
+79 -15
+86 -15
+91 -15
+95 -15
+99 -15
+0 -16
+2 -16
+5 -16
+8 -16
+10 -16
+13 -16
+21 -16
+32 -16
+36 -16
+38 -16
+41 -16
+46 -16
+50 -16
+52 -16
+56 -16
+58 -16
+60 -16
+65 -16
+76 -16
+82 -16
+86 -16
+88 -16
+96 -16
+5 -17
+11 -17
+23 -17
+41 -17
+71 -17
+73 -17
+75 -17
+81 -17
+85 -17
+95 -17
+31 -18
+35 -18
+36 -18
+44 -18
+60 -18
+64 -18
+76 -18
+79 -18
+91 -18
+99 -18
+3 -19
+5 -19
+10 -19
+13 -19
+15 -19
+19 -19
+23 -19
+29 -19
+35 -19
+43 -19
+54 -19
+55 -19
+63 -19
+65 -19
+69 -19
+70 -19
+78 -19
+79 -19
+93 -19
+94 -19
+95 -19
+98 -19
+99 -19
+2 -20
+10 -20
+12 -20
+22 -20
+24 -20
+29 -20
+32 -20
+38 -20
+40 -20
+41 -20
+42 -20
+52 -20
+60 -20
+61 -20
+62 -20
+65 -20
+69 -20
+72 -20
+76 -20
+82 -20
+84 -20
+88 -20
+92 -20
+96 -20
+1 -21
+5 -21
+8 -21
+12 -21
+13 -21
+16 -21
+32 -21
+33 -21
+35 -21
+37 -21
+40 -21
+41 -21
+57 -21
+61 -21
+65 -21
+71 -21
+75 -21
+76 -21
+80 -21
+81 -21
+83 -21
+88 -21
+91 -21
+0 -22
+3 -22
+20 -22
+28 -22
+35 -22
+51 -22
+55 -22
+56 -22
+91 -22
+96 -22
+6 -23
+11 -23
+17 -23
+19 -23
+31 -23
+39 -23
+42 -23
+51 -23
+59 -23
+67 -23
+71 -23
+75 -23
+81 -23
+91 -23
+99 -23
+4 -24
+8 -24
+10 -24
+14 -24
+20 -24
+24 -24
+34 -24
+38 -24
+44 -24
+49 -24
+54 -24
+58 -24
+60 -24
+64 -24
+70 -24
+74 -24
+84 -24
+88 -24
+94 -24
+0 -25
+1 -25
+9 -25
+11 -25
+25 -25
+39 -25
+48 -25
+49 -25
+73 -25
+75 -25
+79 -25
+81 -25
+91 -25
+0 -26
+3 -26
+15 -26
+28 -26
+36 -26
+51 -26
+55 -26
+56 -26
+60 -26
+71 -26
+11 -27
+31 -27
+35 -27
+51 -27
+55 -27
+75 -27
+83 -27
+91 -27
+95 -27
+1 -28
+4 -28
+22 -28
+26 -28
+40 -28
+56 -28
+61 -28
+65 -28
+69 -28
+72 -28
+76 -28
+84 -28
+89 -28
+96 -28
+4 -29
+5 -29
+13 -29
+19 -29
+20 -29
+29 -29
+44 -29
+45 -29
+49 -29
+68 -29
+69 -29
+79 -29
+80 -29
+88 -29
+93 -29
+99 -29
+35 -30
+39 -30
+44 -30
+56 -30
+60 -30
+71 -30
+76 -30
+79 -30
+84 -30
+91 -30
+1 -31
+3 -31
+5 -31
+10 -31
+11 -31
+15 -31
+18 -31
+23 -31
+27 -31
+33 -31
+35 -31
+38 -31
+41 -31
+42 -31
+43 -31
+46 -31
+47 -31
+50 -31
+51 -31
+53 -31
+55 -31
+62 -31
+63 -31
+65 -31
+67 -31
+71 -31
+75 -31
+77 -31
+83 -31
+86 -31
+87 -31
+91 -31
+97 -31
+0 -32
+5 -32
+13 -32
+16 -32
+20 -32
+21 -32
+61 -32
+76 -32
+85 -32
+88 -32
+5 -33
+9 -33
+21 -33
+31 -33
+52 -33
+55 -33
+61 -33
+77 -33
+79 -33
+89 -33
+91 -33
+96 -33
+99 -33
+24 -34
+39 -34
+59 -34
+64 -34
+84 -34
+99 -34
+1 -35
+2 -35
+5 -35
+7 -35
+11 -35
+18 -35
+19 -35
+21 -35
+22 -35
+27 -35
+30 -35
+31 -35
+39 -35
+41 -35
+42 -35
+43 -35
+47 -35
+51 -35
+55 -35
+59 -35
+61 -35
+62 -35
+67 -35
+71 -35
+81 -35
+82 -35
+87 -35
+91 -35
+93 -35
+95 -35
+99 -35
+0 -36
+1 -36
+5 -36
+12 -36
+16 -36
+18 -36
+26 -36
+36 -36
+40 -36
+42 -36
+48 -36
+50 -36
+60 -36
+62 -36
+65 -36
+68 -36
+76 -36
+81 -36
+86 -36
+90 -36
+92 -36
+93 -36
+98 -36
+5 -37
+11 -37
+21 -37
+43 -37
+51 -37
+75 -37
+81 -37
+85 -37
+93 -37
+95 -37
+16 -38
+20 -38
+24 -38
+31 -38
+44 -38
+59 -38
+71 -38
+76 -38
+79 -38
+95 -38
+3 -39
+9 -39
+14 -39
+15 -39
+23 -39
+25 -39
+30 -39
+34 -39
+35 -39
+39 -39
+43 -39
+55 -39
+58 -39
+59 -39
+73 -39
+75 -39
+78 -39
+83 -39
+85 -39
+89 -39
+90 -39
+93 -39
+99 -39
+1 -40
+4 -40
+5 -40
+20 -40
+21 -40
+28 -40
+36 -40
+44 -40
+49 -40
+56 -40
+70 -40
+78 -40
+80 -40
+89 -40
+5 -41
+13 -41
+16 -41
+17 -41
+20 -41
+21 -41
+31 -41
+35 -41
+41 -41
+45 -41
+48 -41
+51 -41
+56 -41
+63 -41
+65 -41
+68 -41
+72 -41
+73 -41
+75 -41
+80 -41
+81 -41
+92 -41
+93 -41
+97 -41
+0 -42
+20 -42
+23 -42
+31 -42
+35 -42
+36 -42
+48 -42
+55 -42
+91 -42
+96 -42
+11 -43
+19 -43
+31 -43
+35 -43
+37 -43
+39 -43
+51 -43
+61 -43
+62 -43
+79 -43
+86 -43
+87 -43
+91 -43
+99 -43
+4 -44
+18 -44
+24 -44
+29 -44
+30 -44
+38 -44
+40 -44
+44 -44
+49 -44
+54 -44
+68 -44
+69 -44
+80 -44
+88 -44
+90 -44
+94 -44
+13 -45
+15 -45
+29 -45
+41 -45
+51 -45
+59 -45
+60 -45
+61 -45
+65 -45
+69 -45
+71 -45
+85 -45
+88 -45
+99 -45
+0 -46
+8 -46
+11 -46
+15 -46
+16 -46
+31 -46
+55 -46
+60 -46
+83 -46
+96 -46
+3 -47
+31 -47
+35 -47
+51 -47
+55 -47
+71 -47
+75 -47
+91 -47
+95 -47
+0 -48
+1 -48
+6 -48
+25 -48
+36 -48
+41 -48
+42 -48
+49 -48
+56 -48
+64 -48
+69 -48
+84 -48
+92 -48
+96 -48
+0 -49
+4 -49
+9 -49
+24 -49
+25 -49
+29 -49
+40 -49
+44 -49
+48 -49
+49 -49
+64 -49
+65 -49
+68 -49
+69 -49
+73 -49
+84 -49
+89 -49
+93 -49
+99 -49
+0 -50
+4 -50
+16 -50
+31 -50
+36 -50
+51 -50
+59 -50
+64 -50
+75 -50
+99 -50
+2 -51
+3 -51
+5 -51
+7 -51
+11 -51
+13 -51
+15 -51
+22 -51
+23 -51
+26 -51
+27 -51
+31 -51
+35 -51
+37 -51
+41 -51
+43 -51
+45 -51
+47 -51
+50 -51
+51 -51
+55 -51
+57 -51
+63 -51
+71 -51
+75 -51
+78 -51
+81 -51
+86 -51
+87 -51
+90 -51
+91 -51
+93 -51
+95 -51
+98 -51
+0 -52
+1 -52
+5 -52
+8 -52
+16 -52
+20 -52
+33 -52
+56 -52
+61 -52
+85 -52
+1 -53
+15 -53
+31 -53
+59 -53
+61 -53
+65 -53
+69 -53
+71 -53
+72 -53
+76 -53
+79 -53
+89 -53
+97 -53
+4 -54
+19 -54
+24 -54
+44 -54
+79 -54
+99 -54
+2 -55
+6 -55
+7 -55
+11 -55
+15 -55
+19 -55
+22 -55
+26 -55
+27 -55
+31 -55
+33 -55
+35 -55
+39 -55
+42 -55
+46 -55
+47 -55
+51 -55
+58 -55
+59 -55
+62 -55
+65 -55
+66 -55
+67 -55
+71 -55
+79 -55
+82 -55
+83 -55
+86 -55
+87 -55
+90 -55
+91 -55
+0 -56
+2 -56
+5 -56
+8 -56
+16 -56
+22 -56
+26 -56
+28 -56
+30 -56
+40 -56
+41 -56
+48 -56
+52 -56
+58 -56
+60 -56
+61 -56
+65 -56
+66 -56
+72 -56
+73 -56
+76 -56
+78 -56
+80 -56
+90 -56
+96 -56
+5 -57
+13 -57
+21 -57
+51 -57
+61 -57
+63 -57
+75 -57
+85 -57
+91 -57
+95 -57
+4 -58
+11 -58
+16 -58
+24 -58
+39 -58
+55 -58
+56 -58
+59 -58
+71 -58
+80 -58
+3 -59
+5 -59
+9 -59
+10 -59
+14 -59
+23 -59
+34 -59
+35 -59
+38 -59
+39 -59
+45 -59
+50 -59
+53 -59
+55 -59
+58 -59
+59 -59
+63 -59
+73 -59
+75 -59
+83 -59
+89 -59
+95 -59
+99 -59
+6 -60
+9 -60
+16 -60
+18 -60
+20 -60
+24 -60
+26 -60
+30 -60
+36 -60
+45 -60
+46 -60
+56 -60
+61 -60
+64 -60
+66 -60
+68 -60
+69 -60
+76 -60
+80 -60
+81 -60
+86 -60
+96 -60
+1 -61
+5 -61
+8 -61
+11 -61
+20 -61
+21 -61
+28 -61
+32 -61
+33 -61
+35 -61
+43 -61
+45 -61
+52 -61
+53 -61
+56 -61
+57 -61
+60 -61
+65 -61
+75 -61
+77 -61
+81 -61
+85 -61
+91 -61
+93 -61
+96 -61
+0 -62
+20 -62
+31 -62
+35 -62
+36 -62
+43 -62
+55 -62
+68 -62
+71 -62
+76 -62
+7 -63
+19 -63
+31 -63
+41 -63
+51 -63
+57 -63
+59 -63
+66 -63
+71 -63
+79 -63
+82 -63
+91 -63
+95 -63
+99 -63
+0 -64
+9 -64
+10 -64
+14 -64
+18 -64
+24 -64
+34 -64
+48 -64
+49 -64
+50 -64
+60 -64
+64 -64
+68 -64
+84 -64
+89 -64
+98 -64
+1 -65
+5 -65
+11 -65
+16 -65
+19 -65
+20 -65
+21 -65
+28 -65
+31 -65
+36 -65
+41 -65
+45 -65
+49 -65
+53 -65
+55 -65
+56 -65
+61 -65
+76 -65
+79 -65
+81 -65
+89 -65
+96 -65
+0 -66
+15 -66
+55 -66
+56 -66
+60 -66
+63 -66
+71 -66
+76 -66
+88 -66
+91 -66
+11 -67
+23 -67
+31 -67
+35 -67
+55 -67
+71 -67
+75 -67
+91 -67
+95 -67
+12 -68
+29 -68
+36 -68
+41 -68
+44 -68
+49 -68
+60 -68
+62 -68
+64 -68
+76 -68
+81 -68
+85 -68
+86 -68
+4 -69
+19 -69
+20 -69
+28 -69
+29 -69
+44 -69
+45 -69
+48 -69
+49 -69
+53 -69
+60 -69
+69 -69
+73 -69
+79 -69
+85 -69
+99 -69
+11 -70
+15 -70
+19 -70
+24 -70
+40 -70
+76 -70
+79 -70
+84 -70
+91 -70
+96 -70
+3 -71
+7 -71
+11 -71
+15 -71
+17 -71
+21 -71
+23 -71
+26 -71
+30 -71
+31 -71
+35 -71
+38 -71
+45 -71
+47 -71
+51 -71
+53 -71
+55 -71
+58 -71
+62 -71
+63 -71
+66 -71
+67 -71
+71 -71
+73 -71
+75 -71
+81 -71
+82 -71
+83 -71
+85 -71
+87 -71
+90 -71
+91 -71
+95 -71
+97 -71
+0 -72
+1 -72
+5 -72
+20 -72
+28 -72
+41 -72
+53 -72
+56 -72
+85 -72
+96 -72
+1 -73
+11 -73
+17 -73
+25 -73
+39 -73
+41 -73
+49 -73
+56 -73
+59 -73
+69 -73
+71 -73
+75 -73
+81 -73
+92 -73
+24 -74
+99 -74
+1 -75
+7 -75
+11 -75
+17 -75
+21 -75
+23 -75
+25 -75
+27 -75
+31 -75
+37 -75
+39 -75
+41 -75
+47 -75
+50 -75
+51 -75
+57 -75
+59 -75
+61 -75
+67 -75
+71 -75
+73 -75
+75 -75
+77 -75
+79 -75
+81 -75
+87 -75
+91 -75
+97 -75
+98 -75
+99 -75
+0 -76
+1 -76
+5 -76
+6 -76
+12 -76
+16 -76
+18 -76
+20 -76
+21 -76
+28 -76
+30 -76
+32 -76
+36 -76
+38 -76
+53 -76
+56 -76
+60 -76
+62 -76
+65 -76
+66 -76
+68 -76
+70 -76
+80 -76
+82 -76
+88 -76
+1 -77
+5 -77
+31 -77
+33 -77
+61 -77
+75 -77
+83 -77
+85 -77
+91 -77
+95 -77
+4 -78
+11 -78
+15 -78
+19 -78
+39 -78
+40 -78
+51 -78
+56 -78
+84 -78
+96 -78
+3 -79
+15 -79
+18 -79
+19 -79
+25 -79
+29 -79
+30 -79
+33 -79
+38 -79
+43 -79
+53 -79
+54 -79
+55 -79
+63 -79
+65 -79
+69 -79
+70 -79
+75 -79
+79 -79
+83 -79
+94 -79
+95 -79
+99 -79
+8 -80
+21 -80
+29 -80
+40 -80
+41 -80
+44 -80
+56 -80
+58 -80
+60 -80
+76 -80
+84 -80
+85 -80
+89 -80
+90 -80
+0 -81
+5 -81
+12 -81
+13 -81
+17 -81
+21 -81
+23 -81
+25 -81
+35 -81
+36 -81
+37 -81
+41 -81
+51 -81
+60 -81
+61 -81
+65 -81
+68 -81
+71 -81
+73 -81
+75 -81
+85 -81
+88 -81
+92 -81
+93 -81
+96 -81
+0 -82
+11 -82
+16 -82
+20 -82
+35 -82
+55 -82
+63 -82
+71 -82
+76 -82
+88 -82
+2 -83
+11 -83
+21 -83
+27 -83
+31 -83
+39 -83
+46 -83
+55 -83
+59 -83
+71 -83
+77 -83
+79 -83
+91 -83
+99 -83
+9 -84
+14 -84
+20 -84
+24 -84
+28 -84
+30 -84
+34 -84
+48 -84
+49 -84
+64 -84
+70 -84
+78 -84
+80 -84
+84 -84
+89 -84
+98 -84
+5 -85
+9 -85
+12 -85
+17 -85
+32 -85
+37 -85
+39 -85
+45 -85
+52 -85
+57 -85
+61 -85
+68 -85
+69 -85
+71 -85
+72 -85
+77 -85
+80 -85
+81 -85
+91 -85
+92 -85
+93 -85
+95 -85
+97 -85
+99 -85
+0 -86
+15 -86
+16 -86
+31 -86
+36 -86
+43 -86
+51 -86
+55 -86
+60 -86
+68 -86
+11 -87
+31 -87
+35 -87
+43 -87
+51 -87
+55 -87
+71 -87
+75 -87
+95 -87
+9 -88
+16 -88
+20 -88
+21 -88
+24 -88
+29 -88
+32 -88
+44 -88
+45 -88
+66 -88
+76 -88
+81 -88
+82 -88
+5 -89
+8 -89
+9 -89
+28 -89
+33 -89
+39 -89
+40 -89
+49 -89
+53 -89
+59 -89
+64 -89
+65 -89
+80 -89
+84 -89
+89 -89
+99 -89
+4 -90
+36 -90
+39 -90
+44 -90
+51 -90
+55 -90
+56 -90
+71 -90
+80 -90
+99 -90
+6 -91
+7 -91
+11 -91
+13 -91
+15 -91
+18 -91
+21 -91
+22 -91
+23 -91
+25 -91
+27 -91
+30 -91
+31 -91
+33 -91
+35 -91
+42 -91
+43 -91
+47 -91
+51 -91
+55 -91
+57 -91
+61 -91
+63 -91
+66 -91
+67 -91
+70 -91
+71 -91
+75 -91
+77 -91
+83 -91
+85 -91
+91 -91
+95 -91
+98 -91
+0 -92
+5 -92
+20 -92
+36 -92
+41 -92
+48 -92
+73 -92
+81 -92
+85 -92
+96 -92
+11 -93
+12 -93
+19 -93
+29 -93
+35 -93
+36 -93
+37 -93
+39 -93
+41 -93
+49 -93
+51 -93
+61 -93
+81 -93
+85 -93
+4 -94
+19 -94
+24 -94
+44 -94
+79 -94
+99 -94
+7 -95
+10 -95
+11 -95
+13 -95
+15 -95
+17 -95
+19 -95
+27 -95
+35 -95
+37 -95
+38 -95
+47 -95
+51 -95
+57 -95
+59 -95
+63 -95
+67 -95
+71 -95
+77 -95
+79 -95
+85 -95
+87 -95
+91 -95
+97 -95
+99 -95
+0 -96
+5 -96
+6 -96
+8 -96
+10 -96
+16 -96
+20 -96
+22 -96
+28 -96
+33 -96
+42 -96
+46 -96
+48 -96
+56 -96
+60 -96
+61 -96
+65 -96
+70 -96
+72 -96
+78 -96
+81 -96
+92 -96
+96 -96
+98 -96
+1 -97
+3 -97
+5 -97
+31 -97
+41 -97
+53 -97
+71 -97
+75 -97
+85 -97
+95 -97
+0 -98
+19 -98
+36 -98
+51 -98
+64 -98
+75 -98
+84 -98
+91 -98
+96 -98
+99 -98
+9 -99
+13 -99
+14 -99
+15 -99
+18 -99
+19 -99
+23 -99
+29 -99
+33 -99
+34 -99
+35 -99
+39 -99
+43 -99
+45 -99
+49 -99
+50 -99
+54 -99
+59 -99
+63 -99
+69 -99
+74 -99
+75 -99
+79 -99
+83 -99
+85 -99
+89 -99
+90 -99
+94 -99
+95 -99
+98 -99
+99 -99
+DEAL::OK
diff --git a/tests/bits/compressed_set_sparsity_pattern_07.cc b/tests/bits/compressed_set_sparsity_pattern_07.cc
new file mode 100644 (file)
index 0000000..fd4e7c8
--- /dev/null
@@ -0,0 +1,55 @@
+//----------------------------  compressed_set_sparsity_pattern_07.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_07.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::exists. since we create quite some
+// output here, choose smaller number of rows and entries than in the other
+// tests
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+void test ()
+{
+  const unsigned int N = 100;
+  CompressedSetSparsityPattern csp (N,N);
+  for (unsigned int i=0; i<N; ++i)
+    for (unsigned int j=0; j<10; ++j)
+      csp.add (i, (i+(i+1)*(j*j+i))%N);
+  csp.symmetrize ();
+
+  for (unsigned int i=0; i<N; ++i)
+    {
+      deallog << i << ' ';
+      for (unsigned int j=0; j<N; ++j)
+        deallog << (csp.exists(i,j) ? 'x' : ' ');
+      deallog << std::endl;
+    }
+}
+
+
+
+int main () 
+{
+  std::ofstream logfile("compressed_set_sparsity_pattern_07/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_07/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_07/cmp/generic
new file mode 100644 (file)
index 0000000..0cbd62b
--- /dev/null
@@ -0,0 +1,101 @@
+
+DEAL::0 xxx x x  x  x   x     x  xx     x   x     x   x xxx x   x     x x x     x   x    xx   x     x   x x 
+DEAL::1 xx x x     x         x   x  x  x   xx   x       x   xx       x   x      xx xxx                   x  
+DEAL::2 x       x  x    x   x              x               x   xx                          x                
+DEAL::3  x         x   x   x  x   x    x       x       x   x       x           x       x                 x  
+DEAL::4 x   x   x               x   xx          x   x    xx   x   x          x        x           x   x     
+DEAL::5  x      x   x   xx x x       x xxx xxx  xx         xx   xx x x   x      x   xx   x   x   x  x   xx  
+DEAL::6 x          x   x       x                        x      x    x               x              x    x   
+DEAL::7            x                       x               x   x       x       x   x               x   x    
+DEAL::8   x xx   x      x    x  x                     x     x   x    x                  x        x      x   
+DEAL::9 x       xx   x           x       x     x         x         xx   x                   xx  xx         x
+DEAL::10            x    x  xx   x      x                           x    x                              xx   
+DEAL::11  xxx  xx  xx   x x     x x x   x   x x     x  x    x   x  x  x   x x  xx x x  x   xx   x   x x x    
+DEAL::12 x    x              xx              x                               x       x    x   x       x      
+DEAL::13          x      x  x x       x  x        x   x     x     x                       x         x   x   x
+DEAL::14                         x              x                   x    x                   x              x
+DEAL::15    x  x    x       x      x    x       x     xx    x x x          x   xx      xx      x    x   x   x
+DEAL::16 x x  x  x x  x       x          x   x x  x    x   x x   x x x    x          x     x   x x       x   
+DEAL::17      x     x           x                 x                             x x x     x   x         x    
+DEAL::18                                x   xx       x               x   x           x  x           x       x
+DEAL::19    x x    x  x x   x   x     x     x       x          xx       x x   xx       xx             xxx  xx
+DEAL::20   x       x x         x x    x  x     x xxx         x       xxx  x   x  x   x     x x   x   x   x   
+DEAL::21  x   x  x   xx  x               xx x x  xx               x   x   x     x   xx   xx x    x  x        
+DEAL::22 x  x                x       x      x               x   xx                                  x    x   
+DEAL::23       x    x     x x           x       x  x        x       x       x   x   x     x         x       x
+DEAL::24     x   x x   x     x   x         x   x     x    x    x   x x   x     x   x         x   x     x     
+DEAL::25 xx       x x             x             x        xx                       x x   x x         x        
+DEAL::26 x  x           x            x       x              x   xx   x          x                            
+DEAL::27            x                   x   x               x   x                   x       x       x   x    
+DEAL::28  x  x                 x   x             x               x    x   x   x  x   x       x    x      x   
+DEAL::29     xx       x     xx        x              xx   x                  xx         xx       x    x     x
+DEAL::30                                    x   x    x           x   x          x    x  x    x      x        
+DEAL::31  x x x    xx   x  x    x   x     x x  x  xxx  xx  xx x x      xx x x   x   x x     x  xx   x     x  
+DEAL::32 x    x       x  x   xx                                       x              x        x  x           
+DEAL::33      x   x           x         x                    x  x     x               x x         x x    x  x
+DEAL::34                         x              x                   x    x                   x              x
+DEAL::35  xx  x x   x      xx xx    x  xx       x xxx   x   x   x   x xx    x   x         xx    x   x x x   x
+DEAL::36 xx   x      x   x x       x         x   x x     x x         x x  x  x       x    x    x   x xx    x 
+DEAL::37      x     x         x                     x       x                       x     x   x       x x    
+DEAL::38                 x   x   x      x            x              x           x    x  x               x    
+DEAL::39    x     x    xx       x x    x   xx   x   x           x  xx             x x  x    x x   xx  x     x
+DEAL::40  x  xx              xx      x       x       x    x      x             x       x x        x          
+DEAL::41      x       x  xx  xx         x   x     x   x  x  x    x      x x  x   xx x    xx          xx   x  
+DEAL::42 x                   x  x       x   xx           x      x                                   x    x   
+DEAL::43            x       x           x   x x x           x         xx                x      xx   x       x
+DEAL::44     x             x     x    xx       x x   x    x    x             xx          x       x x   x     
+DEAL::45              x x             x           x         x       xxx   x   x x             x  x          x
+DEAL::46 x       x  x   xx              x                       x    x                      x            x   
+DEAL::47    x                           x   x               x   x               x   x               x   x    
+DEAL::48 xx    x                  x          x    xx      x      x       x    x              x       x   x   
+DEAL::49 x   x    x              xx   x          x   x   xx              xx  xx   x          x    x   x     x
+DEAL::50 x   x           x              x    x              x       x    x          x                       x
+DEAL::51   xx x x   x x x      xx  xx   x   x x   x x x x  xx   x x     x       x   x  x  x    xx  xx x x  x 
+DEAL::52 xx   x  x       x   x            x                      x    x                       x              
+DEAL::53  x             x               x                           x x   x   x xx   x  x         x       x  
+DEAL::54     x              x    x                   x                                  x                   x
+DEAL::55   x   xx   x   x   x  x   xx   x x x   x  x   xx   x      xx  x  xxx   x       x  xx  xx  xx        
+DEAL::56 x x  x  x       x     x   x x x         xx      x   x     x xx   xx     xx  x x x         x     x   
+DEAL::57      x       x       x                             x         x x           x         x     x   x    
+DEAL::58     x      x    x       x              x               xx  x           x        x                   
+DEAL::59    x x   xx   x        x          xx  xx     x    x  x x  xx   x         x x       x     x     x   x
+DEAL::60       x  x      x x x   x x   x     x        xx         x    x  x x xx      x   xx    x         x   
+DEAL::61  x   x  x  x        xx      x   xx x       x x      xx  xx  x    x         x x   x   x     x x  x   
+DEAL::62 x                   x          x   xx      x           x            x  x    x                       
+DEAL::63        x           x           x         x         x     x x      x    x       x  x        x   x   x
+DEAL::64 x        xx   x   x     x         x             xxx         x   x   x               x    x        x 
+DEAL::65  x   x     x    x  xxx      x  x    x    x   x   x   x xx    x              x  x x       x      x   
+DEAL::66 x              x                                       xx   x  x       x    x           x  x        
+DEAL::67            x           x       x   x                   x               x   x               x   x    
+DEAL::68             x                x      x    x  x    x          x x x           x    x   xx             
+DEAL::69     x              xx       xx              xx  xx   x      x        x   x     x     x             x
+DEAL::70            x   x   x    x               x                                   x  x    x      x    x   
+DEAL::71    x   x   x   x x   x x  x   xx   x  x      x x   x x x  x   xx  xx   x x x     xxx x x  xx   x x  
+DEAL::72 xx   x              x       x            x           x  x                            x          x   
+DEAL::73  x         x     x       x             x x       x      x  x         x x   x     x          x       
+DEAL::74                         x                                                                          x
+DEAL::75  x     x   x     x   x x x x   x     x x x     x  xx     x x x     x   x x x x x x     x   x     xxx
+DEAL::76 xx   xx     x   x x xx      x x x   x x              x  x   x x  xx x x         x x     x           
+DEAL::77  x   x                         x x                           x             x       x x     x   x    
+DEAL::78     x      x   x   x                   xx          x    x                           x           x   
+DEAL::79    x           x  xx     x   xx  x    x    x         xxx       x x   xx    x   x   x          xx   x
+DEAL::80         x            x       x          xx  x           x x x               x       xx   xx         
+DEAL::81 x    x      xx   x   x x x         xxx   x         x        xx   x  x  x x x         x  x   xx  x   
+DEAL::82 x          x    x   x              x                   x       x       x    x           x           
+DEAL::83   x        x         x     x   x       x      x        x   x           x     x x           x       x
+DEAL::84          x    x     x   x   x x   x             xx              x     x       x x   x    x        x 
+DEAL::85      x   x  x    x              x    x x     x      x    x   x      xx xx    x  xx         xxx x x x
+DEAL::86 x              xx              x    x      x       x   x    x       x                               
+DEAL::87            x                   x   x       x       x   x               x   x                   x    
+DEAL::88          x      x   xx  x    x  x           xx                    x         x    xx                 
+DEAL::89      x  xx                  x    x     xx        x   x     x    xx              x   x    x         x
+DEAL::90     x                               x  x    x      x   xx              x        x                  x
+DEAL::91       xx   x x x  x  xxx x x  xx x x      xx   x   x   x x   x x  xx  xx   x x     x x     x   x  x 
+DEAL::92 x    x              x               x    x      x                        x       x   x          x   
+DEAL::93            xx      x         x     xxx x x       x x         x                   x   x              
+DEAL::94     x              x    x                   x                                  x                   x
+DEAL::95        x  xx x x x x       x       x xx        x   x     x x   x   x   x     x x     x x   x     x x
+DEAL::96 x    xx x x     x   x x     x    x        x   x x       x   xx   x    x x     x  x          x   x x 
+DEAL::97  x x x                         x         x           x                 x   x         x         x    
+DEAL::98 x                  x                x              x            x          x        x      x    x  x
+DEAL::99          x   xxx  xx   x     x   xxx   x   x x   xx   x    x   x     x    xx   x   x x   xx   xx  xx
diff --git a/tests/bits/compressed_set_sparsity_pattern_08.cc b/tests/bits/compressed_set_sparsity_pattern_08.cc
new file mode 100644 (file)
index 0000000..8c55ed6
--- /dev/null
@@ -0,0 +1,50 @@
+//----------------------------  compressed_set_sparsity_pattern_08.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_08.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::max_entries_per_row
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+void test ()
+{
+                                   // set up a sparsity pattern. since
+                                   // CompressedSetSparsityPatterns are most
+                                   // often used for 3d, use a rather large
+                                   // number of entries per row
+  const unsigned int N = 1000;
+  CompressedSetSparsityPattern csp (N,N);
+  for (unsigned int i=0; i<N; ++i)
+    for (unsigned int j=0; j<40; ++j)
+      csp.add (i, (i+(i+1)*(j*j+i))%N);
+
+  deallog << ' ' << csp.max_entries_per_row () << std::endl;
+}
+
+
+
+int main () 
+{
+  std::ofstream logfile("compressed_set_sparsity_pattern_08/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_08/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_08/cmp/generic
new file mode 100644 (file)
index 0000000..c968392
--- /dev/null
@@ -0,0 +1,2 @@
+
+DEAL:: 39
diff --git a/tests/bits/compressed_set_sparsity_pattern_09.cc b/tests/bits/compressed_set_sparsity_pattern_09.cc
new file mode 100644 (file)
index 0000000..e8b3666
--- /dev/null
@@ -0,0 +1,47 @@
+//----------------------------  compressed_set_sparsity_pattern_09.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2004, 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  compressed_set_sparsity_pattern_09.cc  ---------------------------
+
+
+// check CompressedSetSparsityPattern::empty
+
+#include "../tests.h"
+#include <base/logstream.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <iostream>
+#include <fstream>
+
+
+void test ()
+{
+  const unsigned int N = 1000;
+  CompressedSetSparsityPattern csp;
+  Assert (csp.empty() == true, ExcInternalError());
+
+  csp.reinit (N, N);
+  Assert (csp.empty() == false, ExcInternalError());
+  
+  deallog << "OK" << std::endl;
+}
+
+
+
+int main () 
+{
+  std::ofstream logfile("compressed_set_sparsity_pattern_09/output");
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+
+  test ();
+  return 0;
+}
diff --git a/tests/bits/compressed_set_sparsity_pattern_09/cmp/generic b/tests/bits/compressed_set_sparsity_pattern_09/cmp/generic
new file mode 100644 (file)
index 0000000..0fd8fc1
--- /dev/null
@@ -0,0 +1,2 @@
+
+DEAL::OK
diff --git a/tests/hp/crash_17_compressed_set_sparsity.cc b/tests/hp/crash_17_compressed_set_sparsity.cc
new file mode 100644 (file)
index 0000000..d2feb30
--- /dev/null
@@ -0,0 +1,732 @@
+//----------------------------  crash_17.cc  ---------------------------
+//    $Id: crash_17.cc 12732 2006-03-28 23:15:45Z wolf $
+//    Version: $Name$ 
+//
+//    Copyright (C) 2006, 2007 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  crash_17.cc  ---------------------------
+
+
+// a modified version of step-27 that crashes because of circular constraints.
+// like crash_17, but use a Compressed*Set*SparsityPattern instead to test
+// that class some more
+
+char logname[] = "crash_17_compressed_set_sparsity/output";
+
+
+#include "../tests.h"
+
+
+#include <base/quadrature_lib.h>
+#include <base/function.h>
+#include <base/logstream.h>
+#include <base/utilities.h>
+#include <base/timer.h>
+#include <lac/vector.h>
+#include <lac/full_matrix.h>
+#include <lac/sparse_matrix.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <lac/solver_cg.h>
+#include <lac/precondition.h>
+#include <grid/tria.h>
+#include <hp/dof_handler.h>
+#include <grid/grid_generator.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/tria_boundary_lib.h>
+#include <dofs/dof_accessor.h>
+#include <dofs/dof_tools.h>
+#include <hp/fe_values.h>
+#include <numerics/vectors.h>
+#include <numerics/matrices.h>
+#include <numerics/data_out.h>
+
+#include <fstream>
+#include <iostream>
+
+#include <fe/fe_q.h>
+#include <grid/grid_out.h>
+#include <dofs/dof_constraints.h>
+#include <grid/grid_refinement.h>
+#include <numerics/error_estimator.h>
+
+#include <complex>
+
+                                // Finally, this is as in previous
+                                // programs:
+using namespace dealii;
+
+template <int dim>
+class LaplaceProblem 
+{
+  public:
+    LaplaceProblem ();
+    ~LaplaceProblem ();
+
+    void run ();
+    
+  private:
+    void setup_system ();
+    void assemble_system ();
+    void solve ();
+    void create_coarse_grid ();
+    void refine_grid ();
+    void estimate_smoothness (Vector<float> &smoothness_indicators) const;
+    void output_results (const unsigned int cycle) const;
+
+    Triangulation<dim>   triangulation;
+
+    hp::DoFHandler<dim>      dof_handler;
+    hp::FECollection<dim>    fe_collection;
+    hp::QCollection<dim>     quadrature_collection;
+    hp::QCollection<dim-1>   face_quadrature_collection;
+
+    ConstraintMatrix     hanging_node_constraints;
+
+    SparsityPattern      sparsity_pattern;
+    SparseMatrix<double> system_matrix;
+
+    Vector<double>       solution;
+    Vector<double>       system_rhs;
+
+    Timer distr, condense, hang;
+};
+
+
+
+template <int dim>
+class RightHandSide : public Function<dim>
+{
+  public:
+    RightHandSide () : Function<dim> () {};
+    
+    virtual double value (const Point<dim>   &p,
+                         const unsigned int  component) const;
+};
+
+
+template <int dim>
+double
+RightHandSide<dim>::value (const Point<dim>   &p,
+                          const unsigned int  /*component*/) const
+{
+  double product = 1;
+  for (unsigned int d=0; d<dim; ++d)
+    product *= (p[d]+1);
+  return product;
+}
+
+
+
+
+template <int dim>
+LaplaceProblem<dim>::LaplaceProblem () :
+               dof_handler (triangulation)
+{
+  for (unsigned int degree=2; degree<5; ++degree)
+    {
+      fe_collection.push_back (FE_Q<dim>(degree));
+      quadrature_collection.push_back (QGauss<dim>(degree+2));
+      face_quadrature_collection.push_back (QGauss<dim-1>(degree+2));
+    }
+}
+
+
+template <int dim>
+LaplaceProblem<dim>::~LaplaceProblem () 
+{
+  dof_handler.clear ();
+}
+
+template <int dim>
+void LaplaceProblem<dim>::setup_system ()
+{
+  distr.reset();
+  distr.start();
+  dof_handler.distribute_dofs (fe_collection);
+  distr.stop();
+
+  solution.reinit (dof_handler.n_dofs());
+  system_rhs.reinit (dof_handler.n_dofs());
+
+  hanging_node_constraints.clear ();
+  hang.reset();
+  hang.start();
+  DoFTools::make_hanging_node_constraints (dof_handler,
+                                          hanging_node_constraints);
+  hanging_node_constraints.write_dot (deallog.get_file_stream());
+  hanging_node_constraints.close ();
+  hang.stop();
+
+  if (dim < 3)
+    {
+      sparsity_pattern.reinit (dof_handler.n_dofs(),
+                              dof_handler.n_dofs(),
+                              dof_handler.max_couplings_between_dofs());
+      DoFTools::make_sparsity_pattern (dof_handler, sparsity_pattern);
+
+      condense.reset();
+      condense.start();
+      hanging_node_constraints.condense (sparsity_pattern);
+      condense.stop();
+      sparsity_pattern.compress();      
+    }
+  else
+    {
+      CompressedSetSparsityPattern csp (dof_handler.n_dofs(),
+                                    dof_handler.n_dofs());
+      DoFTools::make_sparsity_pattern (dof_handler, csp);
+
+      condense.reset();
+      condense.start();
+      hanging_node_constraints.condense (csp);
+      condense.stop();
+      
+      sparsity_pattern.copy_from (csp);
+    }  
+
+  system_matrix.reinit (sparsity_pattern);
+}
+
+template <int dim>
+void LaplaceProblem<dim>::assemble_system () 
+{
+  hp::FEValues<dim> hp_fe_values (fe_collection,
+                                 quadrature_collection, 
+                                 update_values    |  update_gradients |
+                                 update_q_points  |  update_JxW_values);
+
+  const RightHandSide<dim> rhs_function;
+  
+  typename hp::DoFHandler<dim>::active_cell_iterator
+    cell = dof_handler.begin_active(),
+    endc = dof_handler.end();
+  for (; cell!=endc; ++cell)
+    {
+      const unsigned int   dofs_per_cell = cell->get_fe().dofs_per_cell;
+      FullMatrix<double>   cell_matrix (dofs_per_cell, dofs_per_cell);
+      Vector<double>       cell_rhs (dofs_per_cell);
+
+      std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+
+      cell_matrix = 0;
+      cell_rhs = 0;
+
+      hp_fe_values.reinit (cell);
+      
+      const FEValues<dim> &fe_values = hp_fe_values.get_present_fe_values ();
+
+      std::vector<double>  rhs_values (fe_values.n_quadrature_points);
+      rhs_function.value_list (fe_values.get_quadrature_points(),
+                              rhs_values);
+      
+      for (unsigned int q_point=0; q_point<fe_values.n_quadrature_points; ++q_point)
+       for (unsigned int i=0; i<dofs_per_cell; ++i)
+         {
+           for (unsigned int j=0; j<dofs_per_cell; ++j)
+             cell_matrix(i,j) += (fe_values.shape_grad(i,q_point) *
+                                  fe_values.shape_grad(j,q_point) *
+                                  fe_values.JxW(q_point));
+
+           cell_rhs(i) += (fe_values.shape_value(i,q_point) *
+                           rhs_values[q_point] *
+                           fe_values.JxW(q_point));
+         }
+
+      cell->get_dof_indices (local_dof_indices);
+      for (unsigned int i=0; i<dofs_per_cell; ++i)
+       {
+         for (unsigned int j=0; j<dofs_per_cell; ++j)
+           system_matrix.add (local_dof_indices[i],
+                              local_dof_indices[j],
+                              cell_matrix(i,j));
+         
+         system_rhs(local_dof_indices[i]) += cell_rhs(i);
+       }
+    }
+
+  condense.start();
+  hanging_node_constraints.condense (system_matrix);
+  hanging_node_constraints.condense (system_rhs);
+  condense.stop();
+  std::map<unsigned int,double> boundary_values;
+  VectorTools::interpolate_boundary_values (dof_handler,
+                                           0,
+                                           ZeroFunction<dim>(),
+                                           boundary_values);
+  MatrixTools::apply_boundary_values (boundary_values,
+                                     system_matrix,
+                                     solution,
+                                     system_rhs);
+}
+
+template <int dim>
+void LaplaceProblem<dim>::solve () 
+{
+  SolverControl           solver_control (system_rhs.size(),
+                                         1e-8*system_rhs.l2_norm());
+  SolverCG<>              cg (solver_control);
+
+  PreconditionSSOR<> preconditioner;
+  preconditioner.initialize(system_matrix, 1.2);
+
+  cg.solve (system_matrix, solution, system_rhs,
+           preconditioner);
+
+  hanging_node_constraints.distribute (solution);
+}
+
+
+unsigned int
+int_pow (const unsigned int x,
+        const unsigned int n)
+{
+  unsigned int p=1;
+  for (unsigned int i=0; i<n; ++i)
+    p *= x;
+  return p;
+}
+
+
+template <int dim>
+void
+LaplaceProblem<dim>::
+estimate_smoothness (Vector<float> &smoothness_indicators) const
+{
+  const unsigned int N = 4;
+
+                                  // form all the Fourier vectors
+                                  // that we want to
+                                  // consider. exclude k=0 to avoid
+                                  // problems with |k|^{-mu} and also
+                                  // logarithms of |k|
+  std::vector<Tensor<1,dim> > k_vectors;
+  std::vector<unsigned int>   k_vectors_magnitude;
+  switch (dim)
+    {
+      case 2:
+      {
+       for (unsigned int i=0; i<N; ++i)
+         for (unsigned int j=0; j<N; ++j)
+           if (!((i==0) && (j==0))
+               &&
+               (i*i + j*j < N*N))
+             {
+               k_vectors.push_back (Point<dim>(deal_II_numbers::PI * i,
+                                               deal_II_numbers::PI * j));
+               k_vectors_magnitude.push_back (i*i+j*j);
+             }
+       
+       break;
+      }
+
+      case 3:
+      {
+       for (unsigned int i=0; i<N; ++i)
+         for (unsigned int j=0; j<N; ++j)
+           for (unsigned int k=0; k<N; ++k)
+             if (!((i==0) && (j==0) && (k==0))
+                 &&
+                 (i*i + j*j + k*k < N*N))
+               {
+                 k_vectors.push_back (Point<dim>(deal_II_numbers::PI * i,
+                                                 deal_II_numbers::PI * j,
+                                                 deal_II_numbers::PI * k));
+                 k_vectors_magnitude.push_back (i*i+j*j+k*k);
+             }
+       
+       break;
+      }
+      
+      default:
+           Assert (false, ExcNotImplemented());
+    }
+
+  const unsigned n_fourier_modes = k_vectors.size();
+  std::vector<double> ln_k (n_fourier_modes);
+  for (unsigned int i=0; i<n_fourier_modes; ++i)
+    ln_k[i] = std::log (k_vectors[i].norm());
+  
+
+                                  // assemble the matrices that do
+                                  // the Fourier transforms for each
+                                  // of the finite elements we deal
+                                  // with. note that these matrices
+                                  // are complex-valued, so we can't
+                                  // use FullMatrix
+  QGauss<1>      base_quadrature (2);
+  QIterated<dim> quadrature (base_quadrature, N);
+  
+  std::vector<Table<2,std::complex<double> > >
+    fourier_transform_matrices (fe_collection.size());
+  for (unsigned int fe=0; fe<fe_collection.size(); ++fe)
+    {
+      fourier_transform_matrices[fe].reinit (n_fourier_modes,
+                                            fe_collection[fe].dofs_per_cell);
+
+      for (unsigned int k=0; k<n_fourier_modes; ++k)
+       for (unsigned int i=0; i<fe_collection[fe].dofs_per_cell; ++i)
+         {
+           std::complex<double> sum = 0;
+           for (unsigned int q=0; q<quadrature.n_quadrature_points; ++q)
+             {
+               const Point<dim> x_q = quadrature.point(q);
+               sum += std::exp(std::complex<double>(0,1) *
+                               (k_vectors[k] * x_q)) *
+                      fe_collection[fe].shape_value(i,x_q) *
+                      quadrature.weight(q);
+             }
+           fourier_transform_matrices[fe](k,i)
+             = sum / std::pow(2*deal_II_numbers::PI, 1.*dim/2);
+         }
+    }
+
+                                  // the next thing is to loop over
+                                  // all cells and do our work there,
+                                  // i.e. to locally do the Fourier
+                                  // transform and estimate the decay
+                                  // coefficient
+  std::vector<std::complex<double> > fourier_coefficients (n_fourier_modes);
+  Vector<double>                     local_dof_values;
+  
+  typename hp::DoFHandler<dim>::active_cell_iterator
+    cell = dof_handler.begin_active(),
+    endc = dof_handler.end();
+  for (unsigned int index=0; cell!=endc; ++cell, ++index)
+    {
+      local_dof_values.reinit (cell->get_fe().dofs_per_cell);
+      cell->get_dof_values (solution, local_dof_values);
+
+                                      // first compute the Fourier
+                                      // transform of the local
+                                      // solution
+      std::fill (fourier_coefficients.begin(), fourier_coefficients.end(), 0);
+      for (unsigned int f=0; f<n_fourier_modes; ++f)
+       for (unsigned int i=0; i<cell->get_fe().dofs_per_cell; ++i)
+         fourier_coefficients[f] += 
+           fourier_transform_matrices[cell->active_fe_index()](f,i)
+           *
+           local_dof_values(i);
+
+                                      // enter the Fourier
+                                      // coefficients into a map with
+                                      // the k-magnitudes, to make
+                                      // sure that we get only the
+                                      // largest magnitude for each
+                                      // value of |k|
+      std::map<unsigned int, double> k_to_max_U_map;
+      for (unsigned int f=0; f<n_fourier_modes; ++f)
+       if ((k_to_max_U_map.find (k_vectors_magnitude[f]) ==
+            k_to_max_U_map.end())
+           ||
+           (k_to_max_U_map[k_vectors_magnitude[f]] <
+            std::abs (fourier_coefficients[f])))
+         k_to_max_U_map[k_vectors_magnitude[f]]
+           = std::abs (fourier_coefficients[f]);
+      
+                                      // now we have to calculate the
+                                      // various contributions to the
+                                      // formula for mu. we'll only
+                                      // take those fourier
+                                      // coefficients with the
+                                      // largest value for a given
+                                      // |k|
+      double  sum_1           = 0,
+             sum_ln_k        = 0,
+             sum_ln_k_square = 0,
+             sum_ln_U        = 0,
+             sum_ln_U_ln_k   = 0;
+      for (unsigned int f=0; f<n_fourier_modes; ++f)
+       if (k_to_max_U_map[k_vectors_magnitude[f]] ==
+           std::abs (fourier_coefficients[f]))
+         {
+           sum_1 += 1;
+           sum_ln_k += ln_k[f];
+           sum_ln_k_square += ln_k[f]*ln_k[f];
+           sum_ln_U += std::log (std::abs (fourier_coefficients[f]));
+           sum_ln_U_ln_k += std::log (std::abs (fourier_coefficients[f])) * ln_k[f];
+         }
+
+      const double mu
+       = (1./(sum_1*sum_ln_k_square - sum_ln_k*sum_ln_k)
+          *
+          (sum_ln_k*sum_ln_U - sum_1*sum_ln_U_ln_k));
+      
+      smoothness_indicators(index) = mu - 1.*dim/2;
+    }
+}
+
+
+
+  
+template <int dim>
+void LaplaceProblem<dim>::refine_grid ()
+{
+  Vector<float> estimated_error_per_cell (triangulation.n_active_cells());
+  KellyErrorEstimator<dim>::estimate (dof_handler,
+                                     face_quadrature_collection,
+                                     typename FunctionMap<dim>::type(),
+                                     solution,
+                                     estimated_error_per_cell);
+
+  Vector<float> smoothness_indicators (triangulation.n_active_cells());
+  estimate_smoothness (smoothness_indicators);
+  
+  GridRefinement::refine_and_coarsen_fixed_number (triangulation,
+                                                  estimated_error_per_cell,
+                                                  0.3, 0.03);
+
+  float max_smoothness = 0,
+        min_smoothness = smoothness_indicators.linfty_norm();
+  {
+    typename hp::DoFHandler<dim>::active_cell_iterator
+      cell = dof_handler.begin_active(),
+      endc = dof_handler.end();
+    for (unsigned int index=0; cell!=endc; ++cell, ++index)
+      if (cell->refine_flag_set())
+       {
+         max_smoothness = std::max (max_smoothness,
+                                    smoothness_indicators(index));
+         min_smoothness = std::min (min_smoothness,
+                                    smoothness_indicators(index));
+       }
+  }
+  const float cutoff_smoothness = (max_smoothness + min_smoothness) / 2;
+  {
+    typename hp::DoFHandler<dim>::active_cell_iterator
+      cell = dof_handler.begin_active(),
+      endc = dof_handler.end();
+    for (unsigned int index=0; cell!=endc; ++cell, ++index)
+      if (cell->refine_flag_set()
+         &&
+         (smoothness_indicators(index) > cutoff_smoothness)
+         &&
+         !(cell->active_fe_index() == fe_collection.size() - 1))
+       {
+         cell->clear_refine_flag();
+         cell->set_active_fe_index (std::min (cell->active_fe_index() + 1,
+                                              fe_collection.size() - 1));
+       }
+  } 
+  
+  triangulation.execute_coarsening_and_refinement ();
+}
+
+
+
+template <int dim>
+void LaplaceProblem<dim>::output_results (const unsigned int cycle) const
+{
+  Assert (cycle < 10, ExcNotImplemented());
+  
+  {
+    const std::string filename = "grid-" +
+                                Utilities::int_to_string (cycle, 2) +
+                                ".eps";
+    std::ofstream output (filename.c_str());
+    
+    GridOut grid_out;
+    grid_out.write_eps (triangulation, output);
+  }
+  
+  {
+    Vector<float> smoothness_indicators (triangulation.n_active_cells());
+    estimate_smoothness (smoothness_indicators);
+
+    Vector<double> smoothness_field (dof_handler.n_dofs());
+    DoFTools::distribute_cell_to_dof_vector (dof_handler,
+                                            smoothness_indicators,
+                                            smoothness_field);
+
+    Vector<float> fe_indices (triangulation.n_active_cells());
+    {
+      typename hp::DoFHandler<dim>::active_cell_iterator
+       cell = dof_handler.begin_active(),
+       endc = dof_handler.end();
+      for (unsigned int index=0; cell!=endc; ++cell, ++index)
+       {
+         
+         fe_indices(index) = cell->active_fe_index();
+//       smoothness_indicators(index) *= std::sqrt(cell->diameter());
+       }
+    }
+    
+    const std::string filename = "solution-" +
+                                Utilities::int_to_string (cycle, 2) +
+                                ".vtk";
+    DataOut<dim,hp::DoFHandler<dim> > data_out;
+
+    data_out.attach_dof_handler (dof_handler);
+    data_out.add_data_vector (solution, "solution");
+    data_out.add_data_vector (smoothness_indicators, "smoothness1");
+    data_out.add_data_vector (smoothness_field, "smoothness2");
+    data_out.add_data_vector (fe_indices, "fe_index");
+    data_out.build_patches ();
+  
+    std::ofstream output (filename.c_str());
+    data_out.write_vtk (output);
+  }
+}
+
+
+template <>
+void LaplaceProblem<2>::create_coarse_grid ()
+{
+  const unsigned int dim = 2;
+  
+  static const Point<2> vertices_1[]
+    = {  Point<2> (-1.,   -1.),
+         Point<2> (-1./2, -1.),
+         Point<2> (0.,    -1.),
+         Point<2> (+1./2, -1.),
+         Point<2> (+1,    -1.),
+            
+         Point<2> (-1.,   -1./2.),
+         Point<2> (-1./2, -1./2.),
+         Point<2> (0.,    -1./2.),
+         Point<2> (+1./2, -1./2.),
+         Point<2> (+1,    -1./2.),
+            
+         Point<2> (-1.,   0.),
+         Point<2> (-1./2, 0.),
+         Point<2> (+1./2, 0.),
+         Point<2> (+1,    0.),
+            
+         Point<2> (-1.,   1./2.),
+         Point<2> (-1./2, 1./2.),
+         Point<2> (0.,    1./2.),
+         Point<2> (+1./2, 1./2.),
+         Point<2> (+1,    1./2.),
+            
+         Point<2> (-1.,   1.),
+         Point<2> (-1./2, 1.),
+         Point<2> (0.,    1.),                   
+         Point<2> (+1./2, 1.),
+         Point<2> (+1,    1.)    };
+  const unsigned int
+    n_vertices = sizeof(vertices_1) / sizeof(vertices_1[0]);
+  const std::vector<Point<dim> > vertices (&vertices_1[0],
+                                           &vertices_1[n_vertices]);
+  static const int cell_vertices[][GeometryInfo<dim>::vertices_per_cell]
+    = {{0, 1, 5, 6},
+       {1, 2, 6, 7},
+       {2, 3, 7, 8},
+       {3, 4, 8, 9},
+       {5, 6, 10, 11},
+       {8, 9, 12, 13},
+       {10, 11, 14, 15},
+       {12, 13, 17, 18},
+       {14, 15, 19, 20},
+       {15, 16, 20, 21},
+       {16, 17, 21, 22},
+       {17, 18, 22, 23}};
+  const unsigned int
+    n_cells = sizeof(cell_vertices) / sizeof(cell_vertices[0]);
+
+  std::vector<CellData<dim> > cells (n_cells, CellData<dim>());
+  for (unsigned int i=0; i<n_cells; ++i) 
+    {
+      for (unsigned int j=0;
+           j<GeometryInfo<dim>::vertices_per_cell;
+           ++j)
+        cells[i].vertices[j] = cell_vertices[i][j];
+      cells[i].material_id = 0;
+    }
+
+  triangulation.create_triangulation (vertices,
+                                    cells,
+                                    SubCellData());
+  triangulation.refine_global (3);
+}
+
+
+
+template <>
+void LaplaceProblem<3>::create_coarse_grid ()
+{
+  GridGenerator::hyper_cube (triangulation);
+  triangulation.refine_global (1);
+}
+
+
+
+template <int dim>
+void LaplaceProblem<dim>::run () 
+{
+  for (unsigned int cycle=0; cycle<4; ++cycle)
+    {
+      deallog << "Cycle " << cycle << ':' << std::endl;
+
+      if (cycle == 0)
+       create_coarse_grid ();
+      else
+       refine_grid ();
+      
+
+      deallog << "   Number of active cells:       "
+               << triangulation.n_active_cells()
+               << std::endl;
+
+      Timer all;
+      all.start();
+      setup_system ();
+
+      deallog << "   Number of degrees of freedom: "
+               << dof_handler.n_dofs()
+               << std::endl;
+      deallog << "   Number of constraints       : "
+               << hanging_node_constraints.n_constraints()
+               << std::endl;
+      
+      assemble_system ();
+      solve ();
+      all.stop();
+
+    }
+}
+
+int main () 
+{
+  std::ofstream logfile(logname);
+  logfile.precision (3);
+  
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+  try
+    {
+      LaplaceProblem<3> laplace_problem_2d;
+      laplace_problem_2d.run ();
+    }
+  catch (std::exception &exc)
+    {
+      std::cerr << std::endl << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      std::cerr << "Exception on processing: " << std::endl
+               << exc.what() << std::endl
+               << "Aborting!" << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+
+      return 1;
+    }
+  catch (...) 
+    {
+      std::cerr << std::endl << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      std::cerr << "Unknown exception!" << std::endl
+               << "Aborting!" << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      return 1;
+    }
+
+  return 0;
+}
diff --git a/tests/hp/crash_17_compressed_set_sparsity/cmp/generic b/tests/hp/crash_17_compressed_set_sparsity/cmp/generic
new file mode 100644 (file)
index 0000000..d0bbff1
--- /dev/null
@@ -0,0 +1,5344 @@
+
+DEAL::Cycle 0:
+DEAL::   Number of active cells:       8
+digraph constraints {
+}
+DEAL::   Number of degrees of freedom: 125
+DEAL::   Number of constraints       : 0
+DEAL:cg::Starting value 0.438
+DEAL:cg::Convergence step 6 value 2.57e-09
+DEAL::Cycle 1:
+DEAL::   Number of active cells:       22
+digraph constraints {
+  150->35; // weight: 1.00
+  151->13; // weight: 1.00
+  152->43; // weight: 1.00
+  157->5; // weight: 0.375
+  157->7; // weight: -0.125
+  157->13; // weight: 0.750
+  158->35; // weight: 0.375
+  158->36; // weight: -0.125
+  158->43; // weight: 0.750
+  159->5; // weight: 0.375
+  159->29; // weight: -0.125
+  159->35; // weight: 0.750
+  160->13; // weight: 0.375
+  160->34; // weight: -0.125
+  160->43; // weight: 0.750
+  173->5; // weight: 0.141
+  173->29; // weight: -0.0469
+  173->7; // weight: -0.0469
+  173->30; // weight: 0.0156
+  173->13; // weight: 0.281
+  173->34; // weight: -0.0938
+  173->35; // weight: 0.281
+  173->36; // weight: -0.0938
+  173->43; // weight: 0.562
+  176->34; // weight: 1.00
+  179->29; // weight: 0.375
+  179->30; // weight: -0.125
+  179->34; // weight: 0.750
+  180->5; // weight: -0.125
+  180->29; // weight: 0.375
+  180->35; // weight: 0.750
+  181->13; // weight: -0.125
+  181->34; // weight: 0.375
+  181->43; // weight: 0.750
+  190->5; // weight: -0.0469
+  190->29; // weight: 0.141
+  190->7; // weight: 0.0156
+  190->30; // weight: -0.0469
+  190->13; // weight: -0.0938
+  190->34; // weight: 0.281
+  190->35; // weight: 0.281
+  190->36; // weight: -0.0938
+  190->43; // weight: 0.562
+  193->36; // weight: 1.00
+  196->5; // weight: -0.125
+  196->7; // weight: 0.375
+  196->13; // weight: 0.750
+  197->35; // weight: -0.125
+  197->36; // weight: 0.375
+  197->43; // weight: 0.750
+  198->7; // weight: 0.375
+  198->30; // weight: -0.125
+  198->36; // weight: 0.750
+  207->5; // weight: -0.0469
+  207->29; // weight: 0.0156
+  207->7; // weight: 0.141
+  207->30; // weight: -0.0469
+  207->13; // weight: 0.281
+  207->34; // weight: -0.0938
+  207->35; // weight: -0.0938
+  207->36; // weight: 0.281
+  207->43; // weight: 0.562
+  211->29; // weight: -0.125
+  211->30; // weight: 0.375
+  211->34; // weight: 0.750
+  212->7; // weight: -0.125
+  212->30; // weight: 0.375
+  212->36; // weight: 0.750
+  218->5; // weight: 0.0156
+  218->29; // weight: -0.0469
+  218->7; // weight: -0.0469
+  218->30; // weight: 0.141
+  218->13; // weight: -0.0938
+  218->34; // weight: 0.281
+  218->35; // weight: -0.0938
+  218->36; // weight: 0.281
+  218->43; // weight: 0.562
+  269->15; // weight: 1.00
+  270->52; // weight: 1.00
+  271->61; // weight: 1.00
+  276->6; // weight: 0.375
+  276->47; // weight: -0.125
+  276->52; // weight: 0.750
+  277->15; // weight: 0.375
+  277->54; // weight: -0.125
+  277->61; // weight: 0.750
+  278->6; // weight: 0.375
+  278->7; // weight: -0.125
+  278->15; // weight: 0.750
+  279->52; // weight: 0.375
+  279->53; // weight: -0.125
+  279->61; // weight: 0.750
+  292->6; // weight: 0.141
+  292->7; // weight: -0.0469
+  292->47; // weight: -0.0469
+  292->48; // weight: 0.0156
+  292->52; // weight: 0.281
+  292->53; // weight: -0.0938
+  292->15; // weight: 0.281
+  292->54; // weight: -0.0938
+  292->61; // weight: 0.562
+  295->53; // weight: 1.00
+  297->7; // weight: 0.375
+  297->48; // weight: -0.125
+  297->53; // weight: 0.750
+  298->6; // weight: -0.125
+  298->7; // weight: 0.375
+  298->15; // weight: 0.750
+  299->52; // weight: -0.125
+  299->53; // weight: 0.375
+  299->61; // weight: 0.750
+  307->6; // weight: -0.0469
+  307->7; // weight: 0.141
+  307->47; // weight: 0.0156
+  307->48; // weight: -0.0469
+  307->52; // weight: -0.0938
+  307->53; // weight: 0.281
+  307->15; // weight: 0.281
+  307->54; // weight: -0.0938
+  307->61; // weight: 0.562
+  310->54; // weight: 1.00
+  313->6; // weight: -0.125
+  313->47; // weight: 0.375
+  313->52; // weight: 0.750
+  314->15; // weight: -0.125
+  314->54; // weight: 0.375
+  314->61; // weight: 0.750
+  315->47; // weight: 0.375
+  315->48; // weight: -0.125
+  315->54; // weight: 0.750
+  324->6; // weight: -0.0469
+  324->7; // weight: 0.0156
+  324->47; // weight: 0.141
+  324->48; // weight: -0.0469
+  324->52; // weight: 0.281
+  324->53; // weight: -0.0938
+  324->15; // weight: -0.0938
+  324->54; // weight: 0.281
+  324->61; // weight: 0.562
+  328->7; // weight: -0.125
+  328->48; // weight: 0.375
+  328->53; // weight: 0.750
+  329->47; // weight: -0.125
+  329->48; // weight: 0.375
+  329->54; // weight: 0.750
+  335->6; // weight: 0.0156
+  335->7; // weight: -0.0469
+  335->47; // weight: -0.0469
+  335->48; // weight: 0.141
+  335->52; // weight: -0.0938
+  335->53; // weight: 0.281
+  335->15; // weight: -0.0938
+  335->54; // weight: 0.281
+  335->61; // weight: 0.562
+  94->7; // weight: 0.222
+  94->48; // weight: -0.111
+  94->53; // weight: 0.889
+  95->7; // weight: -0.111
+  95->48; // weight: 0.222
+  95->53; // weight: 0.889
+  96->30; // weight: 0.222
+  96->64; // weight: -0.111
+  96->67; // weight: 0.889
+  97->30; // weight: -0.111
+  97->64; // weight: 0.222
+  97->67; // weight: 0.889
+  98->7; // weight: 0.222
+  98->30; // weight: -0.111
+  98->36; // weight: 0.889
+  99->7; // weight: -0.111
+  99->30; // weight: 0.222
+  99->36; // weight: 0.889
+  100->48; // weight: 0.222
+  100->64; // weight: -0.111
+  100->68; // weight: 0.889
+  101->48; // weight: -0.111
+  101->64; // weight: 0.222
+  101->68; // weight: 0.889
+  134->7; // weight: 0.0494
+  134->30; // weight: -0.0247
+  134->48; // weight: -0.0247
+  134->64; // weight: 0.0123
+  134->53; // weight: 0.198
+  134->67; // weight: -0.0988
+  134->36; // weight: 0.198
+  134->68; // weight: -0.0988
+  134->73; // weight: 0.790
+  135->7; // weight: -0.0247
+  135->30; // weight: 0.0494
+  135->48; // weight: 0.0123
+  135->64; // weight: -0.0247
+  135->53; // weight: -0.0988
+  135->67; // weight: 0.198
+  135->36; // weight: 0.198
+  135->68; // weight: -0.0988
+  135->73; // weight: 0.790
+  136->7; // weight: -0.0247
+  136->30; // weight: 0.0123
+  136->48; // weight: 0.0494
+  136->64; // weight: -0.0247
+  136->53; // weight: 0.198
+  136->67; // weight: -0.0988
+  136->36; // weight: -0.0988
+  136->68; // weight: 0.198
+  136->73; // weight: 0.790
+  137->7; // weight: 0.0123
+  137->30; // weight: -0.0247
+  137->48; // weight: -0.0247
+  137->64; // weight: 0.0494
+  137->53; // weight: -0.0988
+  137->67; // weight: 0.198
+  137->36; // weight: -0.0988
+  137->68; // weight: 0.198
+  137->73; // weight: 0.790
+  153->84; // weight: 1.00
+  155->88; // weight: 1.00
+  165->5; // weight: 0.375
+  165->76; // weight: -0.125
+  165->84; // weight: 0.750
+  167->13; // weight: 0.375
+  167->80; // weight: -0.125
+  167->88; // weight: 0.750
+  161->84; // weight: 0.375
+  161->86; // weight: -0.125
+  161->88; // weight: 0.750
+  169->5; // weight: 0.141
+  169->7; // weight: -0.0469
+  169->76; // weight: -0.0469
+  169->78; // weight: 0.0156
+  169->84; // weight: 0.281
+  169->86; // weight: -0.0938
+  169->13; // weight: 0.281
+  169->80; // weight: -0.0938
+  169->88; // weight: 0.562
+  194->86; // weight: 1.00
+  202->7; // weight: 0.375
+  202->78; // weight: -0.125
+  202->86; // weight: 0.750
+  199->84; // weight: -0.125
+  199->86; // weight: 0.375
+  199->88; // weight: 0.750
+  204->5; // weight: -0.0469
+  204->7; // weight: 0.141
+  204->76; // weight: 0.0156
+  204->78; // weight: -0.0469
+  204->84; // weight: -0.0938
+  204->86; // weight: 0.281
+  204->13; // weight: 0.281
+  204->80; // weight: -0.0938
+  204->88; // weight: 0.562
+  222->80; // weight: 1.00
+  228->5; // weight: -0.125
+  228->76; // weight: 0.375
+  228->84; // weight: 0.750
+  230->13; // weight: -0.125
+  230->80; // weight: 0.375
+  230->88; // weight: 0.750
+  224->76; // weight: 0.375
+  224->78; // weight: -0.125
+  224->80; // weight: 0.750
+  232->5; // weight: -0.0469
+  232->7; // weight: 0.0156
+  232->76; // weight: 0.141
+  232->78; // weight: -0.0469
+  232->84; // weight: 0.281
+  232->86; // weight: -0.0938
+  232->13; // weight: -0.0938
+  232->80; // weight: 0.281
+  232->88; // weight: 0.562
+  254->7; // weight: -0.125
+  254->78; // weight: 0.375
+  254->86; // weight: 0.750
+  251->76; // weight: -0.125
+  251->78; // weight: 0.375
+  251->80; // weight: 0.750
+  256->5; // weight: 0.0156
+  256->7; // weight: -0.0469
+  256->76; // weight: -0.0469
+  256->78; // weight: 0.141
+  256->84; // weight: -0.0938
+  256->86; // weight: 0.281
+  256->13; // weight: -0.0938
+  256->80; // weight: 0.281
+  256->88; // weight: 0.562
+  272->85; // weight: 1.00
+  273->90; // weight: 1.00
+  282->85; // weight: 0.375
+  282->86; // weight: -0.125
+  282->90; // weight: 0.750
+  284->6; // weight: 0.375
+  284->77; // weight: -0.125
+  284->85; // weight: 0.750
+  285->15; // weight: 0.375
+  285->82; // weight: -0.125
+  285->90; // weight: 0.750
+  290->6; // weight: 0.141
+  290->77; // weight: -0.0469
+  290->7; // weight: -0.0469
+  290->78; // weight: 0.0156
+  290->15; // weight: 0.281
+  290->82; // weight: -0.0938
+  290->85; // weight: 0.281
+  290->86; // weight: -0.0938
+  290->90; // weight: 0.562
+  338->82; // weight: 1.00
+  343->77; // weight: 0.375
+  343->78; // weight: -0.125
+  343->82; // weight: 0.750
+  345->6; // weight: -0.125
+  345->77; // weight: 0.375
+  345->85; // weight: 0.750
+  346->15; // weight: -0.125
+  346->82; // weight: 0.375
+  346->90; // weight: 0.750
+  351->6; // weight: -0.0469
+  351->77; // weight: 0.141
+  351->7; // weight: 0.0156
+  351->78; // weight: -0.0469
+  351->15; // weight: -0.0938
+  351->82; // weight: 0.281
+  351->85; // weight: 0.281
+  351->86; // weight: -0.0938
+  351->90; // weight: 0.562
+  301->85; // weight: -0.125
+  301->86; // weight: 0.375
+  301->90; // weight: 0.750
+  305->6; // weight: -0.0469
+  305->77; // weight: 0.0156
+  305->7; // weight: 0.141
+  305->78; // weight: -0.0469
+  305->15; // weight: 0.281
+  305->82; // weight: -0.0938
+  305->85; // weight: -0.0938
+  305->86; // weight: 0.281
+  305->90; // weight: 0.562
+  357->77; // weight: -0.125
+  357->78; // weight: 0.375
+  357->82; // weight: 0.750
+  361->6; // weight: 0.0156
+  361->77; // weight: -0.0469
+  361->7; // weight: -0.0469
+  361->78; // weight: 0.141
+  361->15; // weight: -0.0938
+  361->82; // weight: 0.281
+  361->85; // weight: -0.0938
+  361->86; // weight: 0.281
+  361->90; // weight: 0.562
+  111->7; // weight: -0.333
+  111->78; // weight: 0.333
+  111->110; // weight: 1.00
+  115->48; // weight: -0.333
+  115->377; // weight: 0.333
+  115->114; // weight: 1.00
+  103->78; // weight: -0.333
+  103->377; // weight: 0.333
+  103->102; // weight: 1.00
+  119->110; // weight: -0.333
+  119->114; // weight: 0.333
+  119->118; // weight: 1.00
+  120->94; // weight: -0.333
+  120->102; // weight: 0.333
+  120->118; // weight: 1.00
+  121->7; // weight: 0.111
+  121->48; // weight: -0.111
+  121->78; // weight: -0.111
+  121->377; // weight: 0.111
+  121->110; // weight: -0.333
+  121->114; // weight: 0.333
+  121->94; // weight: -0.333
+  121->102; // weight: 0.333
+  121->118; // weight: 1.00
+  296->7; // weight: 0.0625
+  296->48; // weight: -0.0312
+  296->78; // weight: -0.0312
+  296->377; // weight: 0.0156
+  296->110; // weight: -0.281
+  296->114; // weight: 0.141
+  296->94; // weight: -0.281
+  296->102; // weight: 0.141
+  296->118; // weight: 1.27
+  303->7; // weight: -0.0469
+  303->48; // weight: 0.0234
+  303->78; // weight: 0.00781
+  303->377; // weight: 0.00391
+  303->110; // weight: -0.211
+  303->114; // weight: 0.105
+  303->94; // weight: 0.211
+  303->102; // weight: -0.0352
+  303->118; // weight: 0.949
+  300->7; // weight: -0.0469
+  300->48; // weight: 0.00781
+  300->78; // weight: 0.0234
+  300->377; // weight: 0.00391
+  300->110; // weight: 0.211
+  300->114; // weight: -0.0352
+  300->94; // weight: -0.211
+  300->102; // weight: 0.105
+  300->118; // weight: 0.949
+  304->7; // weight: 0.0352
+  304->48; // weight: 0.00586
+  304->78; // weight: 0.00586
+  304->377; // weight: 0.000977
+  304->110; // weight: 0.158
+  304->114; // weight: -0.0264
+  304->94; // weight: 0.158
+  304->102; // weight: -0.0264
+  304->118; // weight: 0.712
+  327->48; // weight: -0.250
+  327->377; // weight: 0.125
+  327->114; // weight: 1.12
+  332->48; // weight: 0.188
+  332->377; // weight: -0.0312
+  332->114; // weight: 0.844
+  330->7; // weight: 0.0781
+  330->48; // weight: -0.117
+  330->78; // weight: -0.0391
+  330->377; // weight: 0.0586
+  330->110; // weight: -0.352
+  330->114; // weight: 0.527
+  330->94; // weight: -0.211
+  330->102; // weight: 0.105
+  330->118; // weight: 0.949
+  333->7; // weight: -0.0586
+  333->48; // weight: 0.0879
+  333->78; // weight: 0.00977
+  333->377; // weight: -0.0146
+  333->110; // weight: -0.264
+  333->114; // weight: 0.396
+  333->94; // weight: 0.158
+  333->102; // weight: -0.0264
+  333->118; // weight: 0.712
+  355->78; // weight: -0.250
+  355->377; // weight: 0.125
+  355->102; // weight: 1.12
+  359->7; // weight: 0.0781
+  359->48; // weight: -0.0391
+  359->78; // weight: -0.117
+  359->377; // weight: 0.0586
+  359->110; // weight: -0.211
+  359->114; // weight: 0.105
+  359->94; // weight: -0.352
+  359->102; // weight: 0.527
+  359->118; // weight: 0.949
+  356->78; // weight: 0.188
+  356->377; // weight: -0.0312
+  356->102; // weight: 0.844
+  360->7; // weight: -0.0586
+  360->48; // weight: 0.00977
+  360->78; // weight: 0.0879
+  360->377; // weight: -0.0146
+  360->110; // weight: 0.158
+  360->114; // weight: -0.0264
+  360->94; // weight: -0.264
+  360->102; // weight: 0.396
+  360->118; // weight: 0.712
+  380->48; // weight: -0.312
+  380->377; // weight: 0.469
+  380->114; // weight: 0.844
+  378->78; // weight: -0.312
+  378->377; // weight: 0.469
+  378->102; // weight: 0.844
+  381->7; // weight: 0.0977
+  381->48; // weight: -0.146
+  381->78; // weight: -0.146
+  381->377; // weight: 0.220
+  381->110; // weight: -0.264
+  381->114; // weight: 0.396
+  381->94; // weight: -0.264
+  381->102; // weight: 0.396
+  381->118; // weight: 0.712
+  107->78; // weight: -0.333
+  107->261; // weight: 0.333
+  107->106; // weight: 1.00
+  113->30; // weight: -0.333
+  113->261; // weight: 0.333
+  113->112; // weight: 1.00
+  127->98; // weight: -0.333
+  127->106; // weight: 0.333
+  127->126; // weight: 1.00
+  128->110; // weight: -0.333
+  128->112; // weight: 0.333
+  128->126; // weight: 1.00
+  129->7; // weight: 0.111
+  129->78; // weight: -0.111
+  129->30; // weight: -0.111
+  129->261; // weight: 0.111
+  129->98; // weight: -0.333
+  129->106; // weight: 0.333
+  129->110; // weight: -0.333
+  129->112; // weight: 0.333
+  129->126; // weight: 1.00
+  195->7; // weight: 0.0625
+  195->78; // weight: -0.0312
+  195->30; // weight: -0.0312
+  195->261; // weight: 0.0156
+  195->98; // weight: -0.281
+  195->106; // weight: 0.141
+  195->110; // weight: -0.281
+  195->112; // weight: 0.141
+  195->126; // weight: 1.27
+  201->7; // weight: -0.0469
+  201->78; // weight: 0.0234
+  201->30; // weight: 0.00781
+  201->261; // weight: 0.00391
+  201->98; // weight: -0.211
+  201->106; // weight: 0.105
+  201->110; // weight: 0.211
+  201->112; // weight: -0.0352
+  201->126; // weight: 0.949
+  203->7; // weight: -0.0469
+  203->78; // weight: 0.00781
+  203->30; // weight: 0.0234
+  203->261; // weight: 0.00391
+  203->98; // weight: 0.211
+  203->106; // weight: -0.0352
+  203->110; // weight: -0.211
+  203->112; // weight: 0.105
+  203->126; // weight: 0.949
+  206->7; // weight: 0.0352
+  206->78; // weight: 0.00586
+  206->30; // weight: 0.00586
+  206->261; // weight: 0.000977
+  206->98; // weight: 0.158
+  206->106; // weight: -0.0264
+  206->110; // weight: 0.158
+  206->112; // weight: -0.0264
+  206->126; // weight: 0.712
+  250->78; // weight: -0.250
+  250->261; // weight: 0.125
+  250->106; // weight: 1.12
+  253->78; // weight: 0.188
+  253->261; // weight: -0.0312
+  253->106; // weight: 0.844
+  255->7; // weight: 0.0781
+  255->78; // weight: -0.117
+  255->30; // weight: -0.0391
+  255->261; // weight: 0.0586
+  255->98; // weight: -0.352
+  255->106; // weight: 0.527
+  255->110; // weight: -0.211
+  255->112; // weight: 0.105
+  255->126; // weight: 0.949
+  258->7; // weight: -0.0586
+  258->78; // weight: 0.0879
+  258->30; // weight: 0.00977
+  258->261; // weight: -0.0146
+  258->98; // weight: -0.264
+  258->106; // weight: 0.396
+  258->110; // weight: 0.158
+  258->112; // weight: -0.0264
+  258->126; // weight: 0.712
+  210->30; // weight: -0.250
+  210->261; // weight: 0.125
+  210->112; // weight: 1.12
+  214->7; // weight: 0.0781
+  214->78; // weight: -0.0391
+  214->30; // weight: -0.117
+  214->261; // weight: 0.0586
+  214->98; // weight: -0.211
+  214->106; // weight: 0.105
+  214->110; // weight: -0.352
+  214->112; // weight: 0.527
+  214->126; // weight: 0.949
+  215->30; // weight: 0.188
+  215->261; // weight: -0.0312
+  215->112; // weight: 0.844
+  217->7; // weight: -0.0586
+  217->78; // weight: 0.00977
+  217->30; // weight: 0.0879
+  217->261; // weight: -0.0146
+  217->98; // weight: 0.158
+  217->106; // weight: -0.0264
+  217->110; // weight: -0.264
+  217->112; // weight: 0.396
+  217->126; // weight: 0.712
+  263->78; // weight: -0.312
+  263->261; // weight: 0.469
+  263->106; // weight: 0.844
+  264->30; // weight: -0.312
+  264->261; // weight: 0.469
+  264->112; // weight: 0.844
+  266->7; // weight: 0.0977
+  266->78; // weight: -0.146
+  266->30; // weight: -0.146
+  266->261; // weight: 0.220
+  266->98; // weight: -0.264
+  266->106; // weight: 0.396
+  266->110; // weight: -0.264
+  266->112; // weight: 0.396
+  266->126; // weight: 0.712
+}
+DEAL::   Number of degrees of freedom: 385
+DEAL::   Number of constraints       : 128
+DEAL:cg::Starting value 0.337
+DEAL:cg::Convergence step 11 value 6.99e-10
+DEAL::Cycle 2:
+DEAL::   Number of active cells:       64
+digraph constraints {
+  49->2; // weight: 0.222
+  49->3; // weight: -0.111
+  49->11; // weight: 0.889
+  50->2; // weight: -0.111
+  50->3; // weight: 0.222
+  50->11; // weight: 0.889
+  57->6; // weight: 0.222
+  57->7; // weight: -0.111
+  57->15; // weight: 0.889
+  58->6; // weight: -0.111
+  58->7; // weight: 0.222
+  58->15; // weight: 0.889
+  61->2; // weight: 0.222
+  61->6; // weight: -0.111
+  61->18; // weight: 0.889
+  62->2; // weight: -0.111
+  62->6; // weight: 0.222
+  62->18; // weight: 0.889
+  63->3; // weight: 0.222
+  63->7; // weight: -0.111
+  63->19; // weight: 0.889
+  64->3; // weight: -0.111
+  64->7; // weight: 0.222
+  64->19; // weight: 0.889
+  77->2; // weight: 0.0494
+  77->6; // weight: -0.0247
+  77->3; // weight: -0.0247
+  77->7; // weight: 0.0123
+  77->11; // weight: 0.198
+  77->15; // weight: -0.0988
+  77->18; // weight: 0.198
+  77->19; // weight: -0.0988
+  77->23; // weight: 0.790
+  78->2; // weight: -0.0247
+  78->6; // weight: 0.0494
+  78->3; // weight: 0.0123
+  78->7; // weight: -0.0247
+  78->11; // weight: -0.0988
+  78->15; // weight: 0.198
+  78->18; // weight: 0.198
+  78->19; // weight: -0.0988
+  78->23; // weight: 0.790
+  79->2; // weight: -0.0247
+  79->6; // weight: 0.0123
+  79->3; // weight: 0.0494
+  79->7; // weight: -0.0247
+  79->11; // weight: 0.198
+  79->15; // weight: -0.0988
+  79->18; // weight: -0.0988
+  79->19; // weight: 0.198
+  79->23; // weight: 0.790
+  80->2; // weight: 0.0123
+  80->6; // weight: -0.0247
+  80->3; // weight: -0.0247
+  80->7; // weight: 0.0494
+  80->11; // weight: -0.0988
+  80->15; // weight: 0.198
+  80->18; // weight: -0.0988
+  80->19; // weight: 0.198
+  80->23; // weight: 0.790
+  67->101; // weight: 0.222
+  67->103; // weight: -0.111
+  67->111; // weight: 0.889
+  68->101; // weight: -0.111
+  68->103; // weight: 0.222
+  68->111; // weight: 0.889
+  47->3; // weight: 0.222
+  47->101; // weight: -0.111
+  47->105; // weight: 0.889
+  48->3; // weight: -0.111
+  48->101; // weight: 0.222
+  48->105; // weight: 0.889
+  55->7; // weight: 0.222
+  55->103; // weight: -0.111
+  55->108; // weight: 0.889
+  56->7; // weight: -0.111
+  56->103; // weight: 0.222
+  56->108; // weight: 0.889
+  73->3; // weight: 0.0494
+  73->101; // weight: -0.0247
+  73->7; // weight: -0.0247
+  73->103; // weight: 0.0123
+  73->19; // weight: 0.198
+  73->111; // weight: -0.0988
+  73->105; // weight: 0.198
+  73->108; // weight: -0.0988
+  73->113; // weight: 0.790
+  74->3; // weight: -0.0247
+  74->101; // weight: 0.0494
+  74->7; // weight: 0.0123
+  74->103; // weight: -0.0247
+  74->19; // weight: -0.0988
+  74->111; // weight: 0.198
+  74->105; // weight: 0.198
+  74->108; // weight: -0.0988
+  74->113; // weight: 0.790
+  75->3; // weight: -0.0247
+  75->101; // weight: 0.0123
+  75->7; // weight: 0.0494
+  75->103; // weight: -0.0247
+  75->19; // weight: 0.198
+  75->111; // weight: -0.0988
+  75->105; // weight: -0.0988
+  75->108; // weight: 0.198
+  75->113; // weight: 0.790
+  76->3; // weight: 0.0123
+  76->101; // weight: -0.0247
+  76->7; // weight: -0.0247
+  76->103; // weight: 0.0494
+  76->19; // weight: -0.0988
+  76->111; // weight: 0.198
+  76->105; // weight: -0.0988
+  76->108; // weight: 0.198
+  76->113; // weight: 0.790
+  809->101; // weight: 0.222
+  809->102; // weight: -0.111
+  809->107; // weight: 0.889
+  810->101; // weight: -0.111
+  810->102; // weight: 0.222
+  810->107; // weight: 0.889
+  815->103; // weight: 0.222
+  815->104; // weight: -0.111
+  815->110; // weight: 0.889
+  816->103; // weight: -0.111
+  816->104; // weight: 0.222
+  816->110; // weight: 0.889
+  819->102; // weight: 0.222
+  819->104; // weight: -0.111
+  819->112; // weight: 0.889
+  820->102; // weight: -0.111
+  820->104; // weight: 0.222
+  820->112; // weight: 0.889
+  827->101; // weight: 0.0494
+  827->103; // weight: -0.0247
+  827->102; // weight: -0.0247
+  827->104; // weight: 0.0123
+  827->107; // weight: 0.198
+  827->110; // weight: -0.0988
+  827->111; // weight: 0.198
+  827->112; // weight: -0.0988
+  827->115; // weight: 0.790
+  828->101; // weight: -0.0247
+  828->103; // weight: 0.0494
+  828->102; // weight: 0.0123
+  828->104; // weight: -0.0247
+  828->107; // weight: -0.0988
+  828->110; // weight: 0.198
+  828->111; // weight: 0.198
+  828->112; // weight: -0.0988
+  828->115; // weight: 0.790
+  829->101; // weight: -0.0247
+  829->103; // weight: 0.0123
+  829->102; // weight: 0.0494
+  829->104; // weight: -0.0247
+  829->107; // weight: 0.198
+  829->110; // weight: -0.0988
+  829->111; // weight: -0.0988
+  829->112; // weight: 0.198
+  829->115; // weight: 0.790
+  830->101; // weight: 0.0123
+  830->103; // weight: -0.0247
+  830->102; // weight: -0.0247
+  830->104; // weight: 0.0494
+  830->107; // weight: -0.0988
+  830->110; // weight: 0.198
+  830->111; // weight: -0.0988
+  830->112; // weight: 0.198
+  830->115; // weight: 0.790
+  59->149; // weight: 0.222
+  59->103; // weight: -0.111
+  59->153; // weight: 0.889
+  60->149; // weight: -0.111
+  60->103; // weight: 0.222
+  60->153; // weight: 0.889
+  936->150; // weight: 0.222
+  936->151; // weight: -0.111
+  936->156; // weight: 0.889
+  937->150; // weight: -0.111
+  937->151; // weight: 0.222
+  937->156; // weight: 0.889
+  940->149; // weight: 0.222
+  940->150; // weight: -0.111
+  940->157; // weight: 0.889
+  941->149; // weight: -0.111
+  941->150; // weight: 0.222
+  941->157; // weight: 0.889
+  942->103; // weight: 0.222
+  942->151; // weight: -0.111
+  942->158; // weight: 0.889
+  943->103; // weight: -0.111
+  943->151; // weight: 0.222
+  943->158; // weight: 0.889
+  956->149; // weight: 0.0494
+  956->150; // weight: -0.0247
+  956->103; // weight: -0.0247
+  956->151; // weight: 0.0123
+  956->153; // weight: 0.198
+  956->156; // weight: -0.0988
+  956->157; // weight: 0.198
+  956->158; // weight: -0.0988
+  956->161; // weight: 0.790
+  957->149; // weight: -0.0247
+  957->150; // weight: 0.0494
+  957->103; // weight: 0.0123
+  957->151; // weight: -0.0247
+  957->153; // weight: -0.0988
+  957->156; // weight: 0.198
+  957->157; // weight: 0.198
+  957->158; // weight: -0.0988
+  957->161; // weight: 0.790
+  958->149; // weight: -0.0247
+  958->150; // weight: 0.0123
+  958->103; // weight: 0.0494
+  958->151; // weight: -0.0247
+  958->153; // weight: 0.198
+  958->156; // weight: -0.0988
+  958->157; // weight: -0.0988
+  958->158; // weight: 0.198
+  958->161; // weight: 0.790
+  959->149; // weight: 0.0123
+  959->150; // weight: -0.0247
+  959->103; // weight: -0.0247
+  959->151; // weight: 0.0494
+  959->153; // weight: -0.0988
+  959->156; // weight: 0.198
+  959->157; // weight: -0.0988
+  959->158; // weight: 0.198
+  959->161; // weight: 0.790
+  53->6; // weight: 0.222
+  53->149; // weight: -0.111
+  53->152; // weight: 0.889
+  54->6; // weight: -0.111
+  54->149; // weight: 0.222
+  54->152; // weight: 0.889
+  89->6; // weight: 0.0494
+  89->7; // weight: -0.0247
+  89->149; // weight: -0.0247
+  89->103; // weight: 0.0123
+  89->152; // weight: 0.198
+  89->108; // weight: -0.0988
+  89->15; // weight: 0.198
+  89->153; // weight: -0.0988
+  89->162; // weight: 0.790
+  90->6; // weight: -0.0247
+  90->7; // weight: 0.0494
+  90->149; // weight: 0.0123
+  90->103; // weight: -0.0247
+  90->152; // weight: -0.0988
+  90->108; // weight: 0.198
+  90->15; // weight: 0.198
+  90->153; // weight: -0.0988
+  90->162; // weight: 0.790
+  91->6; // weight: -0.0247
+  91->7; // weight: 0.0123
+  91->149; // weight: 0.0494
+  91->103; // weight: -0.0247
+  91->152; // weight: 0.198
+  91->108; // weight: -0.0988
+  91->15; // weight: -0.0988
+  91->153; // weight: 0.198
+  91->162; // weight: 0.790
+  92->6; // weight: 0.0123
+  92->7; // weight: -0.0247
+  92->149; // weight: -0.0247
+  92->103; // weight: 0.0494
+  92->152; // weight: -0.0988
+  92->108; // weight: 0.198
+  92->15; // weight: -0.0988
+  92->153; // weight: 0.198
+  92->162; // weight: 0.790
+  979->151; // weight: 0.222
+  979->165; // weight: -0.111
+  979->167; // weight: 0.889
+  980->151; // weight: -0.111
+  980->165; // weight: 0.222
+  980->167; // weight: 0.889
+  983->104; // weight: 0.222
+  983->165; // weight: -0.111
+  983->168; // weight: 0.889
+  984->104; // weight: -0.111
+  984->165; // weight: 0.222
+  984->168; // weight: 0.889
+  991->103; // weight: 0.0494
+  991->151; // weight: -0.0247
+  991->104; // weight: -0.0247
+  991->165; // weight: 0.0123
+  991->110; // weight: 0.198
+  991->167; // weight: -0.0988
+  991->158; // weight: 0.198
+  991->168; // weight: -0.0988
+  991->170; // weight: 0.790
+  992->103; // weight: -0.0247
+  992->151; // weight: 0.0494
+  992->104; // weight: 0.0123
+  992->165; // weight: -0.0247
+  992->110; // weight: -0.0988
+  992->167; // weight: 0.198
+  992->158; // weight: 0.198
+  992->168; // weight: -0.0988
+  992->170; // weight: 0.790
+  993->103; // weight: -0.0247
+  993->151; // weight: 0.0123
+  993->104; // weight: 0.0494
+  993->165; // weight: -0.0247
+  993->110; // weight: 0.198
+  993->167; // weight: -0.0988
+  993->158; // weight: -0.0988
+  993->168; // weight: 0.198
+  993->170; // weight: 0.790
+  994->103; // weight: 0.0123
+  994->151; // weight: -0.0247
+  994->104; // weight: -0.0247
+  994->165; // weight: 0.0494
+  994->110; // weight: -0.0988
+  994->167; // weight: 0.198
+  994->158; // weight: -0.0988
+  994->168; // weight: 0.198
+  994->170; // weight: 0.790
+  216->174; // weight: 0.222
+  216->178; // weight: -0.111
+  216->190; // weight: 0.889
+  217->174; // weight: -0.111
+  217->178; // weight: 0.222
+  217->190; // weight: 0.889
+  218->176; // weight: 0.222
+  218->180; // weight: -0.111
+  218->192; // weight: 0.889
+  219->176; // weight: -0.111
+  219->180; // weight: 0.222
+  219->192; // weight: 0.889
+  200->174; // weight: 0.222
+  200->176; // weight: -0.111
+  200->182; // weight: 0.889
+  201->174; // weight: -0.111
+  201->176; // weight: 0.222
+  201->182; // weight: 0.889
+  208->178; // weight: 0.222
+  208->180; // weight: -0.111
+  208->186; // weight: 0.889
+  209->178; // weight: -0.111
+  209->180; // weight: 0.222
+  209->186; // weight: 0.889
+  222->174; // weight: 0.0494
+  222->176; // weight: -0.0247
+  222->178; // weight: -0.0247
+  222->180; // weight: 0.0123
+  222->190; // weight: 0.198
+  222->192; // weight: -0.0988
+  222->182; // weight: 0.198
+  222->186; // weight: -0.0988
+  222->194; // weight: 0.790
+  223->174; // weight: -0.0247
+  223->176; // weight: 0.0494
+  223->178; // weight: 0.0123
+  223->180; // weight: -0.0247
+  223->190; // weight: -0.0988
+  223->192; // weight: 0.198
+  223->182; // weight: 0.198
+  223->186; // weight: -0.0988
+  223->194; // weight: 0.790
+  224->174; // weight: -0.0247
+  224->176; // weight: 0.0123
+  224->178; // weight: 0.0494
+  224->180; // weight: -0.0247
+  224->190; // weight: 0.198
+  224->192; // weight: -0.0988
+  224->182; // weight: -0.0988
+  224->186; // weight: 0.198
+  224->194; // weight: 0.790
+  225->174; // weight: 0.0123
+  225->176; // weight: -0.0247
+  225->178; // weight: -0.0247
+  225->180; // weight: 0.0494
+  225->190; // weight: -0.0988
+  225->192; // weight: 0.198
+  225->182; // weight: -0.0988
+  225->186; // weight: 0.198
+  225->194; // weight: 0.790
+  220->272; // weight: 0.222
+  220->274; // weight: -0.111
+  220->282; // weight: 0.889
+  221->272; // weight: -0.111
+  221->274; // weight: 0.222
+  221->282; // weight: 0.889
+  864->273; // weight: 0.222
+  864->275; // weight: -0.111
+  864->283; // weight: 0.889
+  865->273; // weight: -0.111
+  865->275; // weight: 0.222
+  865->283; // weight: 0.889
+  852->272; // weight: 0.222
+  852->273; // weight: -0.111
+  852->276; // weight: 0.889
+  853->272; // weight: -0.111
+  853->273; // weight: 0.222
+  853->276; // weight: 0.889
+  858->274; // weight: 0.222
+  858->275; // weight: -0.111
+  858->279; // weight: 0.889
+  859->274; // weight: -0.111
+  859->275; // weight: 0.222
+  859->279; // weight: 0.889
+  868->272; // weight: 0.0494
+  868->273; // weight: -0.0247
+  868->274; // weight: -0.0247
+  868->275; // weight: 0.0123
+  868->282; // weight: 0.198
+  868->283; // weight: -0.0988
+  868->276; // weight: 0.198
+  868->279; // weight: -0.0988
+  868->284; // weight: 0.790
+  869->272; // weight: -0.0247
+  869->273; // weight: 0.0494
+  869->274; // weight: 0.0123
+  869->275; // weight: -0.0247
+  869->282; // weight: -0.0988
+  869->283; // weight: 0.198
+  869->276; // weight: 0.198
+  869->279; // weight: -0.0988
+  869->284; // weight: 0.790
+  870->272; // weight: -0.0247
+  870->273; // weight: 0.0123
+  870->274; // weight: 0.0494
+  870->275; // weight: -0.0247
+  870->282; // weight: 0.198
+  870->283; // weight: -0.0988
+  870->276; // weight: -0.0988
+  870->279; // weight: 0.198
+  870->284; // weight: 0.790
+  871->272; // weight: 0.0123
+  871->273; // weight: -0.0247
+  871->274; // weight: -0.0247
+  871->275; // weight: 0.0494
+  871->282; // weight: -0.0988
+  871->283; // weight: 0.198
+  871->276; // weight: -0.0988
+  871->279; // weight: 0.198
+  871->284; // weight: 0.790
+  206->176; // weight: 0.222
+  206->272; // weight: -0.111
+  206->277; // weight: 0.889
+  207->176; // weight: -0.111
+  207->272; // weight: 0.222
+  207->277; // weight: 0.889
+  214->180; // weight: 0.222
+  214->274; // weight: -0.111
+  214->280; // weight: 0.889
+  215->180; // weight: -0.111
+  215->274; // weight: 0.222
+  215->280; // weight: 0.889
+  234->176; // weight: 0.0494
+  234->180; // weight: -0.0247
+  234->272; // weight: -0.0247
+  234->274; // weight: 0.0123
+  234->277; // weight: 0.198
+  234->280; // weight: -0.0988
+  234->192; // weight: 0.198
+  234->282; // weight: -0.0988
+  234->285; // weight: 0.790
+  235->176; // weight: -0.0247
+  235->180; // weight: 0.0494
+  235->272; // weight: 0.0123
+  235->274; // weight: -0.0247
+  235->277; // weight: -0.0988
+  235->280; // weight: 0.198
+  235->192; // weight: 0.198
+  235->282; // weight: -0.0988
+  235->285; // weight: 0.790
+  236->176; // weight: -0.0247
+  236->180; // weight: 0.0123
+  236->272; // weight: 0.0494
+  236->274; // weight: -0.0247
+  236->277; // weight: 0.198
+  236->280; // weight: -0.0988
+  236->192; // weight: -0.0988
+  236->282; // weight: 0.198
+  236->285; // weight: 0.790
+  237->176; // weight: 0.0123
+  237->180; // weight: -0.0247
+  237->272; // weight: -0.0247
+  237->274; // weight: 0.0494
+  237->277; // weight: -0.0988
+  237->280; // weight: 0.198
+  237->192; // weight: -0.0988
+  237->282; // weight: 0.198
+  237->285; // weight: 0.790
+  944->274; // weight: 0.222
+  944->308; // weight: -0.111
+  944->314; // weight: 0.889
+  945->274; // weight: -0.111
+  945->308; // weight: 0.222
+  945->314; // weight: 0.889
+  210->149; // weight: 0.222
+  210->274; // weight: -0.111
+  210->309; // weight: 0.889
+  211->149; // weight: -0.111
+  211->274; // weight: 0.222
+  211->309; // weight: 0.889
+  932->150; // weight: 0.222
+  932->308; // weight: -0.111
+  932->311; // weight: 0.889
+  933->150; // weight: -0.111
+  933->308; // weight: 0.222
+  933->311; // weight: 0.889
+  948->149; // weight: 0.0494
+  948->274; // weight: -0.0247
+  948->150; // weight: -0.0247
+  948->308; // weight: 0.0123
+  948->157; // weight: 0.198
+  948->314; // weight: -0.0988
+  948->309; // weight: 0.198
+  948->311; // weight: -0.0988
+  948->315; // weight: 0.790
+  949->149; // weight: -0.0247
+  949->274; // weight: 0.0494
+  949->150; // weight: 0.0123
+  949->308; // weight: -0.0247
+  949->157; // weight: -0.0988
+  949->314; // weight: 0.198
+  949->309; // weight: 0.198
+  949->311; // weight: -0.0988
+  949->315; // weight: 0.790
+  950->149; // weight: -0.0247
+  950->274; // weight: 0.0123
+  950->150; // weight: 0.0494
+  950->308; // weight: -0.0247
+  950->157; // weight: 0.198
+  950->314; // weight: -0.0988
+  950->309; // weight: -0.0988
+  950->311; // weight: 0.198
+  950->315; // weight: 0.790
+  951->149; // weight: 0.0123
+  951->274; // weight: -0.0247
+  951->150; // weight: -0.0247
+  951->308; // weight: 0.0494
+  951->157; // weight: -0.0988
+  951->314; // weight: 0.198
+  951->309; // weight: -0.0988
+  951->311; // weight: 0.198
+  951->315; // weight: 0.790
+  212->178; // weight: 0.222
+  212->149; // weight: -0.111
+  212->310; // weight: 0.889
+  213->178; // weight: -0.111
+  213->149; // weight: 0.222
+  213->310; // weight: 0.889
+  242->178; // weight: 0.0494
+  242->149; // weight: -0.0247
+  242->180; // weight: -0.0247
+  242->274; // weight: 0.0123
+  242->186; // weight: 0.198
+  242->309; // weight: -0.0988
+  242->310; // weight: 0.198
+  242->280; // weight: -0.0988
+  242->318; // weight: 0.790
+  243->178; // weight: -0.0247
+  243->149; // weight: 0.0494
+  243->180; // weight: 0.0123
+  243->274; // weight: -0.0247
+  243->186; // weight: -0.0988
+  243->309; // weight: 0.198
+  243->310; // weight: 0.198
+  243->280; // weight: -0.0988
+  243->318; // weight: 0.790
+  244->178; // weight: -0.0247
+  244->149; // weight: 0.0123
+  244->180; // weight: 0.0494
+  244->274; // weight: -0.0247
+  244->186; // weight: 0.198
+  244->309; // weight: -0.0988
+  244->310; // weight: -0.0988
+  244->280; // weight: 0.198
+  244->318; // weight: 0.790
+  245->178; // weight: 0.0123
+  245->149; // weight: -0.0247
+  245->180; // weight: -0.0247
+  245->274; // weight: 0.0494
+  245->186; // weight: -0.0988
+  245->309; // weight: 0.198
+  245->310; // weight: -0.0988
+  245->280; // weight: 0.198
+  245->318; // weight: 0.790
+  1018->275; // weight: 0.222
+  1018->333; // weight: -0.111
+  1018->336; // weight: 0.889
+  1019->275; // weight: -0.111
+  1019->333; // weight: 0.222
+  1019->336; // weight: 0.889
+  1012->308; // weight: 0.222
+  1012->333; // weight: -0.111
+  1012->334; // weight: 0.889
+  1013->308; // weight: -0.111
+  1013->333; // weight: 0.222
+  1013->334; // weight: 0.889
+  1022->274; // weight: 0.0494
+  1022->275; // weight: -0.0247
+  1022->308; // weight: -0.0247
+  1022->333; // weight: 0.0123
+  1022->314; // weight: 0.198
+  1022->336; // weight: -0.0988
+  1022->279; // weight: 0.198
+  1022->334; // weight: -0.0988
+  1022->337; // weight: 0.790
+  1023->274; // weight: -0.0247
+  1023->275; // weight: 0.0494
+  1023->308; // weight: 0.0123
+  1023->333; // weight: -0.0247
+  1023->314; // weight: -0.0988
+  1023->336; // weight: 0.198
+  1023->279; // weight: 0.198
+  1023->334; // weight: -0.0988
+  1023->337; // weight: 0.790
+  1024->274; // weight: -0.0247
+  1024->275; // weight: 0.0123
+  1024->308; // weight: 0.0494
+  1024->333; // weight: -0.0247
+  1024->314; // weight: 0.198
+  1024->336; // weight: -0.0988
+  1024->279; // weight: -0.0988
+  1024->334; // weight: 0.198
+  1024->337; // weight: 0.790
+  1025->274; // weight: 0.0123
+  1025->275; // weight: -0.0247
+  1025->308; // weight: -0.0247
+  1025->333; // weight: 0.0494
+  1025->314; // weight: -0.0988
+  1025->336; // weight: 0.198
+  1025->279; // weight: -0.0988
+  1025->334; // weight: 0.198
+  1025->337; // weight: 0.790
+  45->2; // weight: 0.222
+  45->452; // weight: -0.111
+  45->453; // weight: 0.889
+  46->2; // weight: -0.111
+  46->452; // weight: 0.222
+  46->453; // weight: 0.889
+  51->452; // weight: 0.222
+  51->101; // weight: -0.111
+  51->532; // weight: 0.889
+  52->452; // weight: -0.111
+  52->101; // weight: 0.222
+  52->532; // weight: 0.889
+  85->2; // weight: 0.0494
+  85->3; // weight: -0.0247
+  85->452; // weight: -0.0247
+  85->101; // weight: 0.0123
+  85->453; // weight: 0.198
+  85->105; // weight: -0.0988
+  85->11; // weight: 0.198
+  85->532; // weight: -0.0988
+  85->536; // weight: 0.790
+  86->2; // weight: -0.0247
+  86->3; // weight: 0.0494
+  86->452; // weight: 0.0123
+  86->101; // weight: -0.0247
+  86->453; // weight: -0.0988
+  86->105; // weight: 0.198
+  86->11; // weight: 0.198
+  86->532; // weight: -0.0988
+  86->536; // weight: 0.790
+  87->2; // weight: -0.0247
+  87->3; // weight: 0.0123
+  87->452; // weight: 0.0494
+  87->101; // weight: -0.0247
+  87->453; // weight: 0.198
+  87->105; // weight: -0.0988
+  87->11; // weight: -0.0988
+  87->532; // weight: 0.198
+  87->536; // weight: 0.790
+  88->2; // weight: 0.0123
+  88->3; // weight: -0.0247
+  88->452; // weight: -0.0247
+  88->101; // weight: 0.0494
+  88->453; // weight: -0.0988
+  88->105; // weight: 0.198
+  88->11; // weight: -0.0988
+  88->532; // weight: 0.198
+  88->536; // weight: 0.790
+  202->452; // weight: 0.222
+  202->272; // weight: -0.111
+  202->608; // weight: 0.889
+  203->452; // weight: -0.111
+  203->272; // weight: 0.222
+  203->608; // weight: 0.889
+  204->174; // weight: 0.222
+  204->452; // weight: -0.111
+  204->454; // weight: 0.889
+  205->174; // weight: -0.111
+  205->452; // weight: 0.222
+  205->454; // weight: 0.889
+  238->174; // weight: 0.0494
+  238->452; // weight: -0.0247
+  238->176; // weight: -0.0247
+  238->272; // weight: 0.0123
+  238->182; // weight: 0.198
+  238->608; // weight: -0.0988
+  238->454; // weight: 0.198
+  238->277; // weight: -0.0988
+  238->612; // weight: 0.790
+  239->174; // weight: -0.0247
+  239->452; // weight: 0.0494
+  239->176; // weight: 0.0123
+  239->272; // weight: -0.0247
+  239->182; // weight: -0.0988
+  239->608; // weight: 0.198
+  239->454; // weight: 0.198
+  239->277; // weight: -0.0988
+  239->612; // weight: 0.790
+  240->174; // weight: -0.0247
+  240->452; // weight: 0.0123
+  240->176; // weight: 0.0494
+  240->272; // weight: -0.0247
+  240->182; // weight: 0.198
+  240->608; // weight: -0.0988
+  240->454; // weight: -0.0988
+  240->277; // weight: 0.198
+  240->612; // weight: 0.790
+  241->174; // weight: 0.0123
+  241->452; // weight: -0.0247
+  241->176; // weight: -0.0247
+  241->272; // weight: 0.0494
+  241->182; // weight: -0.0988
+  241->608; // weight: 0.198
+  241->454; // weight: -0.0988
+  241->277; // weight: 0.198
+  241->612; // weight: 0.790
+  772->101; // weight: 0.222
+  772->672; // weight: -0.111
+  772->673; // weight: 0.889
+  773->101; // weight: -0.111
+  773->672; // weight: 0.222
+  773->673; // weight: 0.889
+  774->272; // weight: 0.222
+  774->672; // weight: -0.111
+  774->674; // weight: 0.889
+  775->272; // weight: -0.111
+  775->672; // weight: 0.222
+  775->674; // weight: 0.889
+  790->452; // weight: 0.0494
+  790->101; // weight: -0.0247
+  790->272; // weight: -0.0247
+  790->672; // weight: 0.0123
+  790->608; // weight: 0.198
+  790->673; // weight: -0.0988
+  790->532; // weight: 0.198
+  790->674; // weight: -0.0988
+  790->678; // weight: 0.790
+  791->452; // weight: -0.0247
+  791->101; // weight: 0.0494
+  791->272; // weight: 0.0123
+  791->672; // weight: -0.0247
+  791->608; // weight: -0.0988
+  791->673; // weight: 0.198
+  791->532; // weight: 0.198
+  791->674; // weight: -0.0988
+  791->678; // weight: 0.790
+  792->452; // weight: -0.0247
+  792->101; // weight: 0.0123
+  792->272; // weight: 0.0494
+  792->672; // weight: -0.0247
+  792->608; // weight: 0.198
+  792->673; // weight: -0.0988
+  792->532; // weight: -0.0988
+  792->674; // weight: 0.198
+  792->678; // weight: 0.790
+  793->452; // weight: 0.0123
+  793->101; // weight: -0.0247
+  793->272; // weight: -0.0247
+  793->672; // weight: 0.0494
+  793->608; // weight: -0.0988
+  793->673; // weight: 0.198
+  793->532; // weight: -0.0988
+  793->674; // weight: 0.198
+  793->678; // weight: 0.790
+  807->102; // weight: 0.222
+  807->680; // weight: -0.111
+  807->681; // weight: 0.889
+  808->102; // weight: -0.111
+  808->680; // weight: 0.222
+  808->681; // weight: 0.889
+  811->672; // weight: 0.222
+  811->680; // weight: -0.111
+  811->682; // weight: 0.889
+  812->672; // weight: -0.111
+  812->680; // weight: 0.222
+  812->682; // weight: 0.889
+  835->101; // weight: 0.0494
+  835->102; // weight: -0.0247
+  835->672; // weight: -0.0247
+  835->680; // weight: 0.0123
+  835->673; // weight: 0.198
+  835->681; // weight: -0.0988
+  835->107; // weight: 0.198
+  835->682; // weight: -0.0988
+  835->686; // weight: 0.790
+  836->101; // weight: -0.0247
+  836->102; // weight: 0.0494
+  836->672; // weight: 0.0123
+  836->680; // weight: -0.0247
+  836->673; // weight: -0.0988
+  836->681; // weight: 0.198
+  836->107; // weight: 0.198
+  836->682; // weight: -0.0988
+  836->686; // weight: 0.790
+  837->101; // weight: -0.0247
+  837->102; // weight: 0.0123
+  837->672; // weight: 0.0494
+  837->680; // weight: -0.0247
+  837->673; // weight: 0.198
+  837->681; // weight: -0.0988
+  837->107; // weight: -0.0988
+  837->682; // weight: 0.198
+  837->686; // weight: 0.790
+  838->101; // weight: 0.0123
+  838->102; // weight: -0.0247
+  838->672; // weight: -0.0247
+  838->680; // weight: 0.0494
+  838->673; // weight: -0.0988
+  838->681; // weight: 0.198
+  838->107; // weight: -0.0988
+  838->682; // weight: 0.198
+  838->686; // weight: 0.790
+  854->672; // weight: 0.222
+  854->688; // weight: -0.111
+  854->689; // weight: 0.889
+  855->672; // weight: -0.111
+  855->688; // weight: 0.222
+  855->689; // weight: 0.889
+  856->273; // weight: 0.222
+  856->688; // weight: -0.111
+  856->690; // weight: 0.889
+  857->273; // weight: -0.111
+  857->688; // weight: 0.222
+  857->690; // weight: 0.889
+  880->272; // weight: 0.0494
+  880->672; // weight: -0.0247
+  880->273; // weight: -0.0247
+  880->688; // weight: 0.0123
+  880->276; // weight: 0.198
+  880->689; // weight: -0.0988
+  880->674; // weight: 0.198
+  880->690; // weight: -0.0988
+  880->694; // weight: 0.790
+  881->272; // weight: -0.0247
+  881->672; // weight: 0.0494
+  881->273; // weight: 0.0123
+  881->688; // weight: -0.0247
+  881->276; // weight: -0.0988
+  881->689; // weight: 0.198
+  881->674; // weight: 0.198
+  881->690; // weight: -0.0988
+  881->694; // weight: 0.790
+  882->272; // weight: -0.0247
+  882->672; // weight: 0.0123
+  882->273; // weight: 0.0494
+  882->688; // weight: -0.0247
+  882->276; // weight: 0.198
+  882->689; // weight: -0.0988
+  882->674; // weight: -0.0988
+  882->690; // weight: 0.198
+  882->694; // weight: 0.790
+  883->272; // weight: 0.0123
+  883->672; // weight: -0.0247
+  883->273; // weight: -0.0247
+  883->688; // weight: 0.0494
+  883->276; // weight: -0.0988
+  883->689; // weight: 0.198
+  883->674; // weight: -0.0988
+  883->690; // weight: 0.198
+  883->694; // weight: 0.790
+  897->680; // weight: 0.222
+  897->696; // weight: -0.111
+  897->697; // weight: 0.889
+  898->680; // weight: -0.111
+  898->696; // weight: 0.222
+  898->697; // weight: 0.889
+  899->688; // weight: 0.222
+  899->696; // weight: -0.111
+  899->698; // weight: 0.889
+  900->688; // weight: -0.111
+  900->696; // weight: 0.222
+  900->698; // weight: 0.889
+  915->672; // weight: 0.0494
+  915->680; // weight: -0.0247
+  915->688; // weight: -0.0247
+  915->696; // weight: 0.0123
+  915->689; // weight: 0.198
+  915->697; // weight: -0.0988
+  915->682; // weight: 0.198
+  915->698; // weight: -0.0988
+  915->702; // weight: 0.790
+  916->672; // weight: -0.0247
+  916->680; // weight: 0.0494
+  916->688; // weight: 0.0123
+  916->696; // weight: -0.0247
+  916->689; // weight: -0.0988
+  916->697; // weight: 0.198
+  916->682; // weight: 0.198
+  916->698; // weight: -0.0988
+  916->702; // weight: 0.790
+  917->672; // weight: -0.0247
+  917->680; // weight: 0.0123
+  917->688; // weight: 0.0494
+  917->696; // weight: -0.0247
+  917->689; // weight: 0.198
+  917->697; // weight: -0.0988
+  917->682; // weight: -0.0988
+  917->698; // weight: 0.198
+  917->702; // weight: 0.790
+  918->672; // weight: 0.0123
+  918->680; // weight: -0.0247
+  918->688; // weight: -0.0247
+  918->696; // weight: 0.0494
+  918->689; // weight: -0.0988
+  918->697; // weight: 0.198
+  918->682; // weight: -0.0988
+  918->698; // weight: 0.198
+  918->702; // weight: 0.790
+  65->452; // weight: 0.222
+  65->149; // weight: -0.111
+  65->734; // weight: 0.889
+  66->452; // weight: -0.111
+  66->149; // weight: 0.222
+  66->734; // weight: 0.889
+  69->2; // weight: 0.0494
+  69->452; // weight: -0.0247
+  69->6; // weight: -0.0247
+  69->149; // weight: 0.0123
+  69->18; // weight: 0.198
+  69->734; // weight: -0.0988
+  69->453; // weight: 0.198
+  69->152; // weight: -0.0988
+  69->735; // weight: 0.790
+  70->2; // weight: -0.0247
+  70->452; // weight: 0.0494
+  70->6; // weight: 0.0123
+  70->149; // weight: -0.0247
+  70->18; // weight: -0.0988
+  70->734; // weight: 0.198
+  70->453; // weight: 0.198
+  70->152; // weight: -0.0988
+  70->735; // weight: 0.790
+  71->2; // weight: -0.0247
+  71->452; // weight: 0.0123
+  71->6; // weight: 0.0494
+  71->149; // weight: -0.0247
+  71->18; // weight: 0.198
+  71->734; // weight: -0.0988
+  71->453; // weight: -0.0988
+  71->152; // weight: 0.198
+  71->735; // weight: 0.790
+  72->2; // weight: 0.0123
+  72->452; // weight: -0.0247
+  72->6; // weight: -0.0247
+  72->149; // weight: 0.0494
+  72->18; // weight: -0.0988
+  72->734; // weight: 0.198
+  72->453; // weight: -0.0988
+  72->152; // weight: 0.198
+  72->735; // weight: 0.790
+  230->174; // weight: 0.0494
+  230->178; // weight: -0.0247
+  230->452; // weight: -0.0247
+  230->149; // weight: 0.0123
+  230->454; // weight: 0.198
+  230->310; // weight: -0.0988
+  230->190; // weight: 0.198
+  230->734; // weight: -0.0988
+  230->736; // weight: 0.790
+  231->174; // weight: -0.0247
+  231->178; // weight: 0.0494
+  231->452; // weight: 0.0123
+  231->149; // weight: -0.0247
+  231->454; // weight: -0.0988
+  231->310; // weight: 0.198
+  231->190; // weight: 0.198
+  231->734; // weight: -0.0988
+  231->736; // weight: 0.790
+  232->174; // weight: -0.0247
+  232->178; // weight: 0.0123
+  232->452; // weight: 0.0494
+  232->149; // weight: -0.0247
+  232->454; // weight: 0.198
+  232->310; // weight: -0.0988
+  232->190; // weight: -0.0988
+  232->734; // weight: 0.198
+  232->736; // weight: 0.790
+  233->174; // weight: 0.0123
+  233->178; // weight: -0.0247
+  233->452; // weight: -0.0247
+  233->149; // weight: 0.0494
+  233->454; // weight: -0.0988
+  233->310; // weight: 0.198
+  233->190; // weight: -0.0988
+  233->734; // weight: 0.198
+  233->736; // weight: 0.790
+}
+DEAL::   Number of degrees of freedom: 1073
+DEAL::   Number of constraints       : 172
+DEAL:cg::Starting value 0.149
+DEAL:cg::Convergence step 16 value 1.01e-09
+DEAL::Cycle 3:
+DEAL::   Number of active cells:       190
+digraph constraints {
+  1019->9; // weight: 1.00
+  1021->17; // weight: 1.00
+  1023->21; // weight: 1.00
+  1033->1; // weight: 0.375
+  1033->5; // weight: -0.125
+  1033->17; // weight: 0.750
+  1035->9; // weight: 0.375
+  1035->13; // weight: -0.125
+  1035->21; // weight: 0.750
+  1025->1; // weight: 0.375
+  1025->3; // weight: -0.125
+  1025->9; // weight: 0.750
+  1029->17; // weight: 0.375
+  1029->19; // weight: -0.125
+  1029->21; // weight: 0.750
+  1037->1; // weight: 0.141
+  1037->3; // weight: -0.0469
+  1037->5; // weight: -0.0469
+  1037->7; // weight: 0.0156
+  1037->17; // weight: 0.281
+  1037->19; // weight: -0.0938
+  1037->9; // weight: 0.281
+  1037->13; // weight: -0.0938
+  1037->21; // weight: 0.562
+  1062->19; // weight: 1.00
+  1070->3; // weight: 0.375
+  1070->7; // weight: -0.125
+  1070->19; // weight: 0.750
+  1064->1; // weight: -0.125
+  1064->3; // weight: 0.375
+  1064->9; // weight: 0.750
+  1067->17; // weight: -0.125
+  1067->19; // weight: 0.375
+  1067->21; // weight: 0.750
+  1072->1; // weight: -0.0469
+  1072->3; // weight: 0.141
+  1072->5; // weight: 0.0156
+  1072->7; // weight: -0.0469
+  1072->17; // weight: -0.0938
+  1072->19; // weight: 0.281
+  1072->9; // weight: 0.281
+  1072->13; // weight: -0.0938
+  1072->21; // weight: 0.562
+  1090->13; // weight: 1.00
+  1096->1; // weight: -0.125
+  1096->5; // weight: 0.375
+  1096->17; // weight: 0.750
+  1098->9; // weight: -0.125
+  1098->13; // weight: 0.375
+  1098->21; // weight: 0.750
+  1092->5; // weight: 0.375
+  1092->7; // weight: -0.125
+  1092->13; // weight: 0.750
+  1100->1; // weight: -0.0469
+  1100->3; // weight: 0.0156
+  1100->5; // weight: 0.141
+  1100->7; // weight: -0.0469
+  1100->17; // weight: 0.281
+  1100->19; // weight: -0.0938
+  1100->9; // weight: -0.0938
+  1100->13; // weight: 0.281
+  1100->21; // weight: 0.562
+  1122->3; // weight: -0.125
+  1122->7; // weight: 0.375
+  1122->19; // weight: 0.750
+  1119->5; // weight: -0.125
+  1119->7; // weight: 0.375
+  1119->13; // weight: 0.750
+  1124->1; // weight: 0.0156
+  1124->3; // weight: -0.0469
+  1124->5; // weight: -0.0469
+  1124->7; // weight: 0.141
+  1124->17; // weight: -0.0938
+  1124->19; // weight: 0.281
+  1124->9; // weight: -0.0938
+  1124->13; // weight: 0.281
+  1124->21; // weight: 0.562
+  33->2; // weight: 0.375
+  33->3; // weight: -0.125
+  33->11; // weight: 0.750
+  34->11; // weight: 1.00
+  35->2; // weight: -0.125
+  35->3; // weight: 0.375
+  35->11; // weight: 0.750
+  45->6; // weight: 0.375
+  45->7; // weight: -0.125
+  45->15; // weight: 0.750
+  46->15; // weight: 1.00
+  47->6; // weight: -0.125
+  47->7; // weight: 0.375
+  47->15; // weight: 0.750
+  51->2; // weight: 0.375
+  51->6; // weight: -0.125
+  51->18; // weight: 0.750
+  52->18; // weight: 1.00
+  53->2; // weight: -0.125
+  53->6; // weight: 0.375
+  53->18; // weight: 0.750
+  54->3; // weight: 0.375
+  54->7; // weight: -0.125
+  54->19; // weight: 0.750
+  55->19; // weight: 1.00
+  56->3; // weight: -0.125
+  56->7; // weight: 0.375
+  56->19; // weight: 0.750
+  80->2; // weight: 0.141
+  80->6; // weight: -0.0469
+  80->3; // weight: -0.0469
+  80->7; // weight: 0.0156
+  80->11; // weight: 0.281
+  80->15; // weight: -0.0938
+  80->18; // weight: 0.281
+  80->19; // weight: -0.0938
+  80->23; // weight: 0.562
+  81->18; // weight: 0.375
+  81->19; // weight: -0.125
+  81->23; // weight: 0.750
+  82->2; // weight: -0.0469
+  82->6; // weight: 0.141
+  82->3; // weight: 0.0156
+  82->7; // weight: -0.0469
+  82->11; // weight: -0.0938
+  82->15; // weight: 0.281
+  82->18; // weight: 0.281
+  82->19; // weight: -0.0938
+  82->23; // weight: 0.562
+  83->11; // weight: 0.375
+  83->15; // weight: -0.125
+  83->23; // weight: 0.750
+  84->11; // weight: -0.125
+  84->15; // weight: 0.375
+  84->23; // weight: 0.750
+  85->2; // weight: -0.0469
+  85->6; // weight: 0.0156
+  85->3; // weight: 0.141
+  85->7; // weight: -0.0469
+  85->11; // weight: 0.281
+  85->15; // weight: -0.0938
+  85->18; // weight: -0.0938
+  85->19; // weight: 0.281
+  85->23; // weight: 0.562
+  86->18; // weight: -0.125
+  86->19; // weight: 0.375
+  86->23; // weight: 0.750
+  87->2; // weight: 0.0156
+  87->6; // weight: -0.0469
+  87->3; // weight: -0.0469
+  87->7; // weight: 0.141
+  87->11; // weight: -0.0938
+  87->15; // weight: 0.281
+  87->18; // weight: -0.0938
+  87->19; // weight: 0.281
+  87->23; // weight: 0.562
+  1235->14; // weight: 1.00
+  1236->12; // weight: 1.00
+  1237->25; // weight: 1.00
+  1242->4; // weight: 0.375
+  1242->6; // weight: -0.125
+  1242->12; // weight: 0.750
+  1243->14; // weight: 0.375
+  1243->15; // weight: -0.125
+  1243->25; // weight: 0.750
+  1244->4; // weight: 0.375
+  1244->5; // weight: -0.125
+  1244->14; // weight: 0.750
+  1245->12; // weight: 0.375
+  1245->13; // weight: -0.125
+  1245->25; // weight: 0.750
+  1258->4; // weight: 0.141
+  1258->5; // weight: -0.0469
+  1258->6; // weight: -0.0469
+  1258->7; // weight: 0.0156
+  1258->12; // weight: 0.281
+  1258->13; // weight: -0.0938
+  1258->14; // weight: 0.281
+  1258->15; // weight: -0.0938
+  1258->25; // weight: 0.562
+  1263->4; // weight: -0.125
+  1263->5; // weight: 0.375
+  1263->14; // weight: 0.750
+  1264->12; // weight: -0.125
+  1264->13; // weight: 0.375
+  1264->25; // weight: 0.750
+  1273->4; // weight: -0.0469
+  1273->5; // weight: 0.141
+  1273->6; // weight: 0.0156
+  1273->7; // weight: -0.0469
+  1273->12; // weight: -0.0938
+  1273->13; // weight: 0.281
+  1273->14; // weight: 0.281
+  1273->15; // weight: -0.0938
+  1273->25; // weight: 0.562
+  1276->15; // weight: 1.00
+  1279->4; // weight: -0.125
+  1279->6; // weight: 0.375
+  1279->12; // weight: 0.750
+  1280->14; // weight: -0.125
+  1280->15; // weight: 0.375
+  1280->25; // weight: 0.750
+  1281->6; // weight: 0.375
+  1281->7; // weight: -0.125
+  1281->15; // weight: 0.750
+  1290->4; // weight: -0.0469
+  1290->5; // weight: 0.0156
+  1290->6; // weight: 0.141
+  1290->7; // weight: -0.0469
+  1290->12; // weight: 0.281
+  1290->13; // weight: -0.0938
+  1290->14; // weight: -0.0938
+  1290->15; // weight: 0.281
+  1290->25; // weight: 0.562
+  1294->6; // weight: -0.125
+  1294->7; // weight: 0.375
+  1294->15; // weight: 0.750
+  1300->4; // weight: 0.0156
+  1300->5; // weight: -0.0469
+  1300->6; // weight: -0.0469
+  1300->7; // weight: 0.141
+  1300->12; // weight: -0.0938
+  1300->13; // weight: 0.281
+  1300->14; // weight: -0.0938
+  1300->15; // weight: 0.281
+  1300->25; // weight: 0.562
+  61->476; // weight: -0.500
+  61->1215; // weight: 0.167
+  61->60; // weight: 1.33
+  62->476; // weight: -0.500
+  62->1215; // weight: 0.500
+  62->60; // weight: 1.00
+  31->3; // weight: -0.500
+  31->476; // weight: 0.167
+  31->30; // weight: 1.33
+  32->3; // weight: -0.500
+  32->476; // weight: 0.500
+  32->30; // weight: 1.00
+  43->7; // weight: -0.500
+  43->1215; // weight: 0.167
+  43->42; // weight: 1.33
+  44->7; // weight: -0.500
+  44->1215; // weight: 0.500
+  44->42; // weight: 1.00
+  72->54; // weight: -0.500
+  72->60; // weight: 0.167
+  72->71; // weight: 1.33
+  73->54; // weight: -0.500
+  73->60; // weight: 0.500
+  73->71; // weight: 1.00
+  74->30; // weight: -0.500
+  74->42; // weight: 0.167
+  74->71; // weight: 1.33
+  75->3; // weight: 0.250
+  75->476; // weight: -0.0833
+  75->7; // weight: -0.0833
+  75->1215; // weight: 0.0278
+  75->54; // weight: -0.667
+  75->60; // weight: 0.222
+  75->30; // weight: -0.667
+  75->42; // weight: 0.222
+  75->71; // weight: 1.78
+  76->3; // weight: 0.250
+  76->476; // weight: -0.250
+  76->7; // weight: -0.0833
+  76->1215; // weight: 0.0833
+  76->54; // weight: -0.667
+  76->60; // weight: 0.667
+  76->30; // weight: -0.500
+  76->42; // weight: 0.167
+  76->71; // weight: 1.33
+  77->30; // weight: -0.500
+  77->42; // weight: 0.500
+  77->71; // weight: 1.00
+  78->3; // weight: 0.250
+  78->476; // weight: -0.0833
+  78->7; // weight: -0.250
+  78->1215; // weight: 0.0833
+  78->54; // weight: -0.500
+  78->60; // weight: 0.167
+  78->30; // weight: -0.667
+  78->42; // weight: 0.667
+  78->71; // weight: 1.33
+  79->3; // weight: 0.250
+  79->476; // weight: -0.250
+  79->7; // weight: -0.250
+  79->1215; // weight: 0.250
+  79->54; // weight: -0.500
+  79->60; // weight: 0.500
+  79->30; // weight: -0.500
+  79->42; // weight: 0.500
+  79->71; // weight: 1.00
+  1137->3; // weight: -0.500
+  1137->476; // weight: 0.167
+  1137->30; // weight: 1.33
+  1139->3; // weight: 0.250
+  1139->476; // weight: -0.0833
+  1139->7; // weight: -0.0833
+  1139->1215; // weight: 0.0278
+  1139->54; // weight: -0.667
+  1139->60; // weight: 0.222
+  1139->30; // weight: -0.667
+  1139->42; // weight: 0.222
+  1139->71; // weight: 1.78
+  1147->54; // weight: -0.500
+  1147->60; // weight: 0.167
+  1147->71; // weight: 1.33
+  1141->30; // weight: 1.00
+  1144->30; // weight: -0.500
+  1144->42; // weight: 0.167
+  1144->71; // weight: 1.33
+  1149->71; // weight: 1.00
+  1168->476; // weight: -0.500
+  1168->1215; // weight: 0.167
+  1168->60; // weight: 1.33
+  1176->60; // weight: 1.00
+  1170->3; // weight: -0.500
+  1170->476; // weight: 0.500
+  1170->30; // weight: 1.00
+  1173->3; // weight: 0.250
+  1173->476; // weight: -0.250
+  1173->7; // weight: -0.0833
+  1173->1215; // weight: 0.0833
+  1173->54; // weight: -0.667
+  1173->60; // weight: 0.667
+  1173->30; // weight: -0.500
+  1173->42; // weight: 0.167
+  1173->71; // weight: 1.33
+  1178->54; // weight: -0.500
+  1178->60; // weight: 0.500
+  1178->71; // weight: 1.00
+  1195->7; // weight: -0.500
+  1195->1215; // weight: 0.167
+  1195->42; // weight: 1.33
+  1200->3; // weight: 0.250
+  1200->476; // weight: -0.0833
+  1200->7; // weight: -0.250
+  1200->1215; // weight: 0.0833
+  1200->54; // weight: -0.500
+  1200->60; // weight: 0.167
+  1200->30; // weight: -0.667
+  1200->42; // weight: 0.667
+  1200->71; // weight: 1.33
+  1197->42; // weight: 1.00
+  1202->30; // weight: -0.500
+  1202->42; // weight: 0.500
+  1202->71; // weight: 1.00
+  1220->476; // weight: -0.500
+  1220->1215; // weight: 0.500
+  1220->60; // weight: 1.00
+  1217->7; // weight: -0.500
+  1217->1215; // weight: 0.500
+  1217->42; // weight: 1.00
+  1222->3; // weight: 0.250
+  1222->476; // weight: -0.250
+  1222->7; // weight: -0.250
+  1222->1215; // weight: 0.250
+  1222->54; // weight: -0.500
+  1222->60; // weight: 0.500
+  1222->30; // weight: -0.500
+  1222->42; // weight: 0.500
+  1222->71; // weight: 1.00
+  40->6; // weight: -0.500
+  40->636; // weight: 0.167
+  40->39; // weight: 1.33
+  41->6; // weight: -0.500
+  41->636; // weight: 0.500
+  41->39; // weight: 1.00
+  49->636; // weight: -0.500
+  49->1215; // weight: 0.167
+  49->48; // weight: 1.33
+  50->636; // weight: -0.500
+  50->1215; // weight: 0.500
+  50->48; // weight: 1.00
+  106->39; // weight: -0.500
+  106->42; // weight: 0.167
+  106->105; // weight: 1.33
+  107->39; // weight: -0.500
+  107->42; // weight: 0.500
+  107->105; // weight: 1.00
+  108->45; // weight: -0.500
+  108->48; // weight: 0.167
+  108->105; // weight: 1.33
+  109->6; // weight: 0.250
+  109->7; // weight: -0.0833
+  109->636; // weight: -0.0833
+  109->1215; // weight: 0.0278
+  109->39; // weight: -0.667
+  109->42; // weight: 0.222
+  109->45; // weight: -0.667
+  109->48; // weight: 0.222
+  109->105; // weight: 1.78
+  110->6; // weight: 0.250
+  110->7; // weight: -0.250
+  110->636; // weight: -0.0833
+  110->1215; // weight: 0.0833
+  110->39; // weight: -0.667
+  110->42; // weight: 0.667
+  110->45; // weight: -0.500
+  110->48; // weight: 0.167
+  110->105; // weight: 1.33
+  111->45; // weight: -0.500
+  111->48; // weight: 0.500
+  111->105; // weight: 1.00
+  112->6; // weight: 0.250
+  112->7; // weight: -0.0833
+  112->636; // weight: -0.250
+  112->1215; // weight: 0.0833
+  112->39; // weight: -0.500
+  112->42; // weight: 0.167
+  112->45; // weight: -0.667
+  112->48; // weight: 0.667
+  112->105; // weight: 1.33
+  113->6; // weight: 0.250
+  113->7; // weight: -0.250
+  113->636; // weight: -0.250
+  113->1215; // weight: 0.250
+  113->39; // weight: -0.500
+  113->42; // weight: 0.500
+  113->45; // weight: -0.500
+  113->48; // weight: 0.500
+  113->105; // weight: 1.00
+  1431->6; // weight: -0.500
+  1431->636; // weight: 0.167
+  1431->39; // weight: 1.33
+  1432->6; // weight: 0.250
+  1432->7; // weight: -0.0833
+  1432->636; // weight: -0.0833
+  1432->1215; // weight: 0.0278
+  1432->39; // weight: -0.667
+  1432->42; // weight: 0.222
+  1432->45; // weight: -0.667
+  1432->48; // weight: 0.222
+  1432->105; // weight: 1.78
+  1435->39; // weight: 1.00
+  1436->39; // weight: -0.500
+  1436->42; // weight: 0.167
+  1436->105; // weight: 1.33
+  1437->45; // weight: -0.500
+  1437->48; // weight: 0.167
+  1437->105; // weight: 1.33
+  1446->105; // weight: 1.00
+  1450->6; // weight: 0.250
+  1450->7; // weight: -0.250
+  1450->636; // weight: -0.0833
+  1450->1215; // weight: 0.0833
+  1450->39; // weight: -0.667
+  1450->42; // weight: 0.667
+  1450->45; // weight: -0.500
+  1450->48; // weight: 0.167
+  1450->105; // weight: 1.33
+  1456->39; // weight: -0.500
+  1456->42; // weight: 0.500
+  1456->105; // weight: 1.00
+  1459->636; // weight: -0.500
+  1459->1215; // weight: 0.167
+  1459->48; // weight: 1.33
+  1462->6; // weight: -0.500
+  1462->636; // weight: 0.500
+  1462->39; // weight: 1.00
+  1463->6; // weight: 0.250
+  1463->7; // weight: -0.0833
+  1463->636; // weight: -0.250
+  1463->1215; // weight: 0.0833
+  1463->39; // weight: -0.500
+  1463->42; // weight: 0.167
+  1463->45; // weight: -0.667
+  1463->48; // weight: 0.667
+  1463->105; // weight: 1.33
+  1464->48; // weight: 1.00
+  1473->45; // weight: -0.500
+  1473->48; // weight: 0.500
+  1473->105; // weight: 1.00
+  1477->636; // weight: -0.500
+  1477->1215; // weight: 0.500
+  1477->48; // weight: 1.00
+  1483->6; // weight: 0.250
+  1483->7; // weight: -0.250
+  1483->636; // weight: -0.250
+  1483->1215; // weight: 0.250
+  1483->39; // weight: -0.500
+  1483->42; // weight: 0.500
+  1483->45; // weight: -0.500
+  1483->48; // weight: 0.500
+  1483->105; // weight: 1.00
+  192->142; // weight: 0.375
+  192->146; // weight: -0.125
+  192->158; // weight: 0.750
+  193->158; // weight: 1.00
+  194->142; // weight: -0.125
+  194->146; // weight: 0.375
+  194->158; // weight: 0.750
+  195->144; // weight: 0.375
+  195->148; // weight: -0.125
+  195->160; // weight: 0.750
+  196->160; // weight: 1.00
+  197->144; // weight: -0.125
+  197->148; // weight: 0.375
+  197->160; // weight: 0.750
+  168->142; // weight: 0.375
+  168->144; // weight: -0.125
+  168->150; // weight: 0.750
+  169->150; // weight: 1.00
+  170->142; // weight: -0.125
+  170->144; // weight: 0.375
+  170->150; // weight: 0.750
+  180->146; // weight: 0.375
+  180->148; // weight: -0.125
+  180->154; // weight: 0.750
+  181->154; // weight: 1.00
+  182->146; // weight: -0.125
+  182->148; // weight: 0.375
+  182->154; // weight: 0.750
+  201->142; // weight: 0.141
+  201->144; // weight: -0.0469
+  201->146; // weight: -0.0469
+  201->148; // weight: 0.0156
+  201->158; // weight: 0.281
+  201->160; // weight: -0.0938
+  201->150; // weight: 0.281
+  201->154; // weight: -0.0938
+  201->162; // weight: 0.562
+  202->150; // weight: 0.375
+  202->154; // weight: -0.125
+  202->162; // weight: 0.750
+  203->142; // weight: -0.0469
+  203->144; // weight: 0.141
+  203->146; // weight: 0.0156
+  203->148; // weight: -0.0469
+  203->158; // weight: -0.0938
+  203->160; // weight: 0.281
+  203->150; // weight: 0.281
+  203->154; // weight: -0.0938
+  203->162; // weight: 0.562
+  204->158; // weight: 0.375
+  204->160; // weight: -0.125
+  204->162; // weight: 0.750
+  205->158; // weight: -0.125
+  205->160; // weight: 0.375
+  205->162; // weight: 0.750
+  206->142; // weight: -0.0469
+  206->144; // weight: 0.0156
+  206->146; // weight: 0.141
+  206->148; // weight: -0.0469
+  206->158; // weight: 0.281
+  206->160; // weight: -0.0938
+  206->150; // weight: -0.0938
+  206->154; // weight: 0.281
+  206->162; // weight: 0.562
+  207->150; // weight: -0.125
+  207->154; // weight: 0.375
+  207->162; // weight: 0.750
+  208->142; // weight: 0.0156
+  208->144; // weight: -0.0469
+  208->146; // weight: -0.0469
+  208->148; // weight: 0.141
+  208->158; // weight: -0.0938
+  208->160; // weight: 0.281
+  208->150; // weight: -0.0938
+  208->154; // weight: 0.281
+  208->162; // weight: 0.562
+  1592->159; // weight: 1.00
+  1589->152; // weight: 1.00
+  1593->164; // weight: 1.00
+  1598->143; // weight: 0.375
+  1598->144; // weight: -0.125
+  1598->152; // weight: 0.750
+  1602->159; // weight: 0.375
+  1602->160; // weight: -0.125
+  1602->164; // weight: 0.750
+  1604->143; // weight: 0.375
+  1604->147; // weight: -0.125
+  1604->159; // weight: 0.750
+  1605->152; // weight: 0.375
+  1605->156; // weight: -0.125
+  1605->164; // weight: 0.750
+  1610->143; // weight: 0.141
+  1610->147; // weight: -0.0469
+  1610->144; // weight: -0.0469
+  1610->148; // weight: 0.0156
+  1610->152; // weight: 0.281
+  1610->156; // weight: -0.0938
+  1610->159; // weight: 0.281
+  1610->160; // weight: -0.0938
+  1610->164; // weight: 0.562
+  1660->156; // weight: 1.00
+  1665->147; // weight: 0.375
+  1665->148; // weight: -0.125
+  1665->156; // weight: 0.750
+  1667->143; // weight: -0.125
+  1667->147; // weight: 0.375
+  1667->159; // weight: 0.750
+  1668->152; // weight: -0.125
+  1668->156; // weight: 0.375
+  1668->164; // weight: 0.750
+  1673->143; // weight: -0.0469
+  1673->147; // weight: 0.141
+  1673->144; // weight: 0.0156
+  1673->148; // weight: -0.0469
+  1673->152; // weight: -0.0938
+  1673->156; // weight: 0.281
+  1673->159; // weight: 0.281
+  1673->160; // weight: -0.0938
+  1673->164; // weight: 0.562
+  1616->160; // weight: 1.00
+  1619->143; // weight: -0.125
+  1619->144; // weight: 0.375
+  1619->152; // weight: 0.750
+  1622->159; // weight: -0.125
+  1622->160; // weight: 0.375
+  1622->164; // weight: 0.750
+  1624->144; // weight: 0.375
+  1624->148; // weight: -0.125
+  1624->160; // weight: 0.750
+  1627->143; // weight: -0.0469
+  1627->147; // weight: 0.0156
+  1627->144; // weight: 0.141
+  1627->148; // weight: -0.0469
+  1627->152; // weight: 0.281
+  1627->156; // weight: -0.0938
+  1627->159; // weight: -0.0938
+  1627->160; // weight: 0.281
+  1627->164; // weight: 0.562
+  1679->147; // weight: -0.125
+  1679->148; // weight: 0.375
+  1679->156; // weight: 0.750
+  1681->144; // weight: -0.125
+  1681->148; // weight: 0.375
+  1681->160; // weight: 0.750
+  1684->143; // weight: 0.0156
+  1684->147; // weight: -0.0469
+  1684->144; // weight: -0.0469
+  1684->148; // weight: 0.141
+  1684->152; // weight: -0.0938
+  1684->156; // weight: 0.281
+  1684->159; // weight: -0.0938
+  1684->160; // weight: 0.281
+  1684->164; // weight: 0.562
+  1806->155; // weight: 1.00
+  1807->153; // weight: 1.00
+  1808->166; // weight: 1.00
+  1813->145; // weight: 0.375
+  1813->147; // weight: -0.125
+  1813->153; // weight: 0.750
+  1814->155; // weight: 0.375
+  1814->156; // weight: -0.125
+  1814->166; // weight: 0.750
+  1815->145; // weight: 0.375
+  1815->146; // weight: -0.125
+  1815->155; // weight: 0.750
+  1816->153; // weight: 0.375
+  1816->154; // weight: -0.125
+  1816->166; // weight: 0.750
+  1829->145; // weight: 0.141
+  1829->146; // weight: -0.0469
+  1829->147; // weight: -0.0469
+  1829->148; // weight: 0.0156
+  1829->153; // weight: 0.281
+  1829->154; // weight: -0.0938
+  1829->155; // weight: 0.281
+  1829->156; // weight: -0.0938
+  1829->166; // weight: 0.562
+  1832->154; // weight: 1.00
+  1835->146; // weight: 0.375
+  1835->148; // weight: -0.125
+  1835->154; // weight: 0.750
+  1836->145; // weight: -0.125
+  1836->146; // weight: 0.375
+  1836->155; // weight: 0.750
+  1837->153; // weight: -0.125
+  1837->154; // weight: 0.375
+  1837->166; // weight: 0.750
+  1846->145; // weight: -0.0469
+  1846->146; // weight: 0.141
+  1846->147; // weight: 0.0156
+  1846->148; // weight: -0.0469
+  1846->153; // weight: -0.0938
+  1846->154; // weight: 0.281
+  1846->155; // weight: 0.281
+  1846->156; // weight: -0.0938
+  1846->166; // weight: 0.562
+  1851->145; // weight: -0.125
+  1851->147; // weight: 0.375
+  1851->153; // weight: 0.750
+  1852->155; // weight: -0.125
+  1852->156; // weight: 0.375
+  1852->166; // weight: 0.750
+  1861->145; // weight: -0.0469
+  1861->146; // weight: 0.0156
+  1861->147; // weight: 0.141
+  1861->148; // weight: -0.0469
+  1861->153; // weight: 0.281
+  1861->154; // weight: -0.0938
+  1861->155; // weight: -0.0938
+  1861->156; // weight: 0.281
+  1861->166; // weight: 0.562
+  1865->146; // weight: -0.125
+  1865->148; // weight: 0.375
+  1865->154; // weight: 0.750
+  1871->145; // weight: 0.0156
+  1871->146; // weight: -0.0469
+  1871->147; // weight: -0.0469
+  1871->148; // weight: 0.141
+  1871->153; // weight: -0.0938
+  1871->154; // weight: 0.281
+  1871->155; // weight: -0.0938
+  1871->156; // weight: 0.281
+  1871->166; // weight: 0.562
+  178->144; // weight: -0.500
+  178->558; // weight: 0.167
+  178->177; // weight: 1.33
+  179->144; // weight: -0.500
+  179->558; // weight: 0.500
+  179->177; // weight: 1.00
+  190->148; // weight: -0.500
+  190->1778; // weight: 0.167
+  190->189; // weight: 1.33
+  191->148; // weight: -0.500
+  191->1778; // weight: 0.500
+  191->189; // weight: 1.00
+  199->558; // weight: -0.500
+  199->1778; // weight: 0.167
+  199->198; // weight: 1.33
+  200->558; // weight: -0.500
+  200->1778; // weight: 0.500
+  200->198; // weight: 1.00
+  227->177; // weight: -0.500
+  227->189; // weight: 0.167
+  227->226; // weight: 1.33
+  228->177; // weight: -0.500
+  228->189; // weight: 0.500
+  228->226; // weight: 1.00
+  229->195; // weight: -0.500
+  229->198; // weight: 0.167
+  229->226; // weight: 1.33
+  230->144; // weight: 0.250
+  230->148; // weight: -0.0833
+  230->558; // weight: -0.0833
+  230->1778; // weight: 0.0278
+  230->177; // weight: -0.667
+  230->189; // weight: 0.222
+  230->195; // weight: -0.667
+  230->198; // weight: 0.222
+  230->226; // weight: 1.78
+  231->144; // weight: 0.250
+  231->148; // weight: -0.250
+  231->558; // weight: -0.0833
+  231->1778; // weight: 0.0833
+  231->177; // weight: -0.667
+  231->189; // weight: 0.667
+  231->195; // weight: -0.500
+  231->198; // weight: 0.167
+  231->226; // weight: 1.33
+  232->195; // weight: -0.500
+  232->198; // weight: 0.500
+  232->226; // weight: 1.00
+  233->144; // weight: 0.250
+  233->148; // weight: -0.0833
+  233->558; // weight: -0.250
+  233->1778; // weight: 0.0833
+  233->177; // weight: -0.500
+  233->189; // weight: 0.167
+  233->195; // weight: -0.667
+  233->198; // weight: 0.667
+  233->226; // weight: 1.33
+  234->144; // weight: 0.250
+  234->148; // weight: -0.250
+  234->558; // weight: -0.250
+  234->1778; // weight: 0.250
+  234->177; // weight: -0.500
+  234->189; // weight: 0.500
+  234->195; // weight: -0.500
+  234->198; // weight: 0.500
+  234->226; // weight: 1.00
+  1708->144; // weight: -0.500
+  1708->558; // weight: 0.167
+  1708->177; // weight: 1.33
+  1710->144; // weight: 0.250
+  1710->148; // weight: -0.0833
+  1710->558; // weight: -0.0833
+  1710->1778; // weight: 0.0278
+  1710->177; // weight: -0.667
+  1710->189; // weight: 0.222
+  1710->195; // weight: -0.667
+  1710->198; // weight: 0.222
+  1710->226; // weight: 1.78
+  1713->177; // weight: 1.00
+  1716->177; // weight: -0.500
+  1716->189; // weight: 0.167
+  1716->226; // weight: 1.33
+  1718->195; // weight: -0.500
+  1718->198; // weight: 0.167
+  1718->226; // weight: 1.33
+  1721->226; // weight: 1.00
+  1766->148; // weight: -0.500
+  1766->1778; // weight: 0.167
+  1766->189; // weight: 1.33
+  1769->189; // weight: 1.00
+  1771->144; // weight: 0.250
+  1771->148; // weight: -0.250
+  1771->558; // weight: -0.0833
+  1771->1778; // weight: 0.0833
+  1771->177; // weight: -0.667
+  1771->189; // weight: 0.667
+  1771->195; // weight: -0.500
+  1771->198; // weight: 0.167
+  1771->226; // weight: 1.33
+  1774->177; // weight: -0.500
+  1774->189; // weight: 0.500
+  1774->226; // weight: 1.00
+  1727->558; // weight: -0.500
+  1727->1778; // weight: 0.167
+  1727->198; // weight: 1.33
+  1730->144; // weight: -0.500
+  1730->558; // weight: 0.500
+  1730->177; // weight: 1.00
+  1733->144; // weight: 0.250
+  1733->148; // weight: -0.0833
+  1733->558; // weight: -0.250
+  1733->1778; // weight: 0.0833
+  1733->177; // weight: -0.500
+  1733->189; // weight: 0.167
+  1733->195; // weight: -0.667
+  1733->198; // weight: 0.667
+  1733->226; // weight: 1.33
+  1735->198; // weight: 1.00
+  1738->195; // weight: -0.500
+  1738->198; // weight: 0.500
+  1738->226; // weight: 1.00
+  1781->148; // weight: -0.500
+  1781->1778; // weight: 0.500
+  1781->189; // weight: 1.00
+  1783->558; // weight: -0.500
+  1783->1778; // weight: 0.500
+  1783->198; // weight: 1.00
+  1786->144; // weight: 0.250
+  1786->148; // weight: -0.250
+  1786->558; // weight: -0.250
+  1786->1778; // weight: 0.250
+  1786->177; // weight: -0.500
+  1786->189; // weight: 0.500
+  1786->195; // weight: -0.500
+  1786->198; // weight: 0.500
+  1786->226; // weight: 1.00
+  184->636; // weight: -0.500
+  184->1778; // weight: 0.167
+  184->183; // weight: 1.33
+  185->636; // weight: -0.500
+  185->1778; // weight: 0.500
+  185->183; // weight: 1.00
+  187->146; // weight: -0.500
+  187->636; // weight: 0.167
+  187->186; // weight: 1.33
+  188->146; // weight: -0.500
+  188->636; // weight: 0.500
+  188->186; // weight: 1.00
+  244->180; // weight: -0.500
+  244->183; // weight: 0.167
+  244->243; // weight: 1.33
+  245->180; // weight: -0.500
+  245->183; // weight: 0.500
+  245->243; // weight: 1.00
+  246->186; // weight: -0.500
+  246->189; // weight: 0.167
+  246->243; // weight: 1.33
+  247->146; // weight: 0.250
+  247->636; // weight: -0.0833
+  247->148; // weight: -0.0833
+  247->1778; // weight: 0.0278
+  247->180; // weight: -0.667
+  247->183; // weight: 0.222
+  247->186; // weight: -0.667
+  247->189; // weight: 0.222
+  247->243; // weight: 1.78
+  248->146; // weight: 0.250
+  248->636; // weight: -0.250
+  248->148; // weight: -0.0833
+  248->1778; // weight: 0.0833
+  248->180; // weight: -0.667
+  248->183; // weight: 0.667
+  248->186; // weight: -0.500
+  248->189; // weight: 0.167
+  248->243; // weight: 1.33
+  249->186; // weight: -0.500
+  249->189; // weight: 0.500
+  249->243; // weight: 1.00
+  250->146; // weight: 0.250
+  250->636; // weight: -0.0833
+  250->148; // weight: -0.250
+  250->1778; // weight: 0.0833
+  250->180; // weight: -0.500
+  250->183; // weight: 0.167
+  250->186; // weight: -0.667
+  250->189; // weight: 0.667
+  250->243; // weight: 1.33
+  251->146; // weight: 0.250
+  251->636; // weight: -0.250
+  251->148; // weight: -0.250
+  251->1778; // weight: 0.250
+  251->180; // weight: -0.500
+  251->183; // weight: 0.500
+  251->186; // weight: -0.500
+  251->189; // weight: 0.500
+  251->243; // weight: 1.00
+  1922->146; // weight: -0.500
+  1922->636; // weight: 0.167
+  1922->186; // weight: 1.33
+  1923->146; // weight: 0.250
+  1923->636; // weight: -0.0833
+  1923->148; // weight: -0.0833
+  1923->1778; // weight: 0.0278
+  1923->180; // weight: -0.667
+  1923->183; // weight: 0.222
+  1923->186; // weight: -0.667
+  1923->189; // weight: 0.222
+  1923->243; // weight: 1.78
+  1926->180; // weight: -0.500
+  1926->183; // weight: 0.167
+  1926->243; // weight: 1.33
+  1927->186; // weight: 1.00
+  1928->186; // weight: -0.500
+  1928->189; // weight: 0.167
+  1928->243; // weight: 1.33
+  1937->243; // weight: 1.00
+  1940->636; // weight: -0.500
+  1940->1778; // weight: 0.167
+  1940->183; // weight: 1.33
+  1942->183; // weight: 1.00
+  1943->146; // weight: -0.500
+  1943->636; // weight: 0.500
+  1943->186; // weight: 1.00
+  1944->146; // weight: 0.250
+  1944->636; // weight: -0.250
+  1944->148; // weight: -0.0833
+  1944->1778; // weight: 0.0833
+  1944->180; // weight: -0.667
+  1944->183; // weight: 0.667
+  1944->186; // weight: -0.500
+  1944->189; // weight: 0.167
+  1944->243; // weight: 1.33
+  1952->180; // weight: -0.500
+  1952->183; // weight: 0.500
+  1952->243; // weight: 1.00
+  1956->146; // weight: 0.250
+  1956->636; // weight: -0.0833
+  1956->148; // weight: -0.250
+  1956->1778; // weight: 0.0833
+  1956->180; // weight: -0.500
+  1956->183; // weight: 0.167
+  1956->186; // weight: -0.667
+  1956->189; // weight: 0.667
+  1956->243; // weight: 1.33
+  1962->186; // weight: -0.500
+  1962->189; // weight: 0.500
+  1962->243; // weight: 1.00
+  1966->636; // weight: -0.500
+  1966->1778; // weight: 0.500
+  1966->183; // weight: 1.00
+  1972->146; // weight: 0.250
+  1972->636; // weight: -0.250
+  1972->148; // weight: -0.250
+  1972->1778; // weight: 0.250
+  1972->180; // weight: -0.500
+  1972->183; // weight: 0.500
+  1972->186; // weight: -0.500
+  1972->189; // weight: 0.500
+  1972->243; // weight: 1.00
+  2160->440; // weight: 1.00
+  2157->449; // weight: 1.00
+  2161->454; // weight: 1.00
+  2166->434; // weight: 0.375
+  2166->446; // weight: -0.125
+  2166->449; // weight: 0.750
+  2170->440; // weight: 0.375
+  2170->452; // weight: -0.125
+  2170->454; // weight: 0.750
+  2172->434; // weight: 0.375
+  2172->435; // weight: -0.125
+  2172->440; // weight: 0.750
+  2173->449; // weight: 0.375
+  2173->451; // weight: -0.125
+  2173->454; // weight: 0.750
+  2178->434; // weight: 0.141
+  2178->435; // weight: -0.0469
+  2178->446; // weight: -0.0469
+  2178->447; // weight: 0.0156
+  2178->449; // weight: 0.281
+  2178->451; // weight: -0.0938
+  2178->440; // weight: 0.281
+  2178->452; // weight: -0.0938
+  2178->454; // weight: 0.562
+  2229->451; // weight: 1.00
+  2234->435; // weight: 0.375
+  2234->447; // weight: -0.125
+  2234->451; // weight: 0.750
+  2236->434; // weight: -0.125
+  2236->435; // weight: 0.375
+  2236->440; // weight: 0.750
+  2237->449; // weight: -0.125
+  2237->451; // weight: 0.375
+  2237->454; // weight: 0.750
+  2242->434; // weight: -0.0469
+  2242->435; // weight: 0.141
+  2242->446; // weight: 0.0156
+  2242->447; // weight: -0.0469
+  2242->449; // weight: -0.0938
+  2242->451; // weight: 0.281
+  2242->440; // weight: 0.281
+  2242->452; // weight: -0.0938
+  2242->454; // weight: 0.562
+  2184->452; // weight: 1.00
+  2187->434; // weight: -0.125
+  2187->446; // weight: 0.375
+  2187->449; // weight: 0.750
+  2190->440; // weight: -0.125
+  2190->452; // weight: 0.375
+  2190->454; // weight: 0.750
+  2192->446; // weight: 0.375
+  2192->447; // weight: -0.125
+  2192->452; // weight: 0.750
+  2195->434; // weight: -0.0469
+  2195->435; // weight: 0.0156
+  2195->446; // weight: 0.141
+  2195->447; // weight: -0.0469
+  2195->449; // weight: 0.281
+  2195->451; // weight: -0.0938
+  2195->440; // weight: -0.0938
+  2195->452; // weight: 0.281
+  2195->454; // weight: 0.562
+  2248->435; // weight: -0.125
+  2248->447; // weight: 0.375
+  2248->451; // weight: 0.750
+  2250->446; // weight: -0.125
+  2250->447; // weight: 0.375
+  2250->452; // weight: 0.750
+  2253->434; // weight: 0.0156
+  2253->435; // weight: -0.0469
+  2253->446; // weight: -0.0469
+  2253->447; // weight: 0.141
+  2253->449; // weight: -0.0938
+  2253->451; // weight: 0.281
+  2253->440; // weight: -0.0938
+  2253->452; // weight: 0.281
+  2253->454; // weight: 0.562
+  1018->467; // weight: 1.00
+  1020->474; // weight: 1.00
+  1026->467; // weight: 0.375
+  1026->468; // weight: -0.125
+  1026->474; // weight: 0.750
+  1027->1; // weight: 0.375
+  1027->464; // weight: -0.125
+  1027->467; // weight: 0.750
+  1028->9; // weight: 0.375
+  1028->466; // weight: -0.125
+  1028->474; // weight: 0.750
+  1041->1; // weight: 0.141
+  1041->464; // weight: -0.0469
+  1041->3; // weight: -0.0469
+  1041->465; // weight: 0.0156
+  1041->9; // weight: 0.281
+  1041->466; // weight: -0.0938
+  1041->467; // weight: 0.281
+  1041->468; // weight: -0.0938
+  1041->474; // weight: 0.562
+  1044->466; // weight: 1.00
+  1047->464; // weight: 0.375
+  1047->465; // weight: -0.125
+  1047->466; // weight: 0.750
+  1048->1; // weight: -0.125
+  1048->464; // weight: 0.375
+  1048->467; // weight: 0.750
+  1049->9; // weight: -0.125
+  1049->466; // weight: 0.375
+  1049->474; // weight: 0.750
+  1058->1; // weight: -0.0469
+  1058->464; // weight: 0.141
+  1058->3; // weight: 0.0156
+  1058->465; // weight: -0.0469
+  1058->9; // weight: -0.0938
+  1058->466; // weight: 0.281
+  1058->467; // weight: 0.281
+  1058->468; // weight: -0.0938
+  1058->474; // weight: 0.562
+  1061->468; // weight: 1.00
+  1065->467; // weight: -0.125
+  1065->468; // weight: 0.375
+  1065->474; // weight: 0.750
+  1066->3; // weight: 0.375
+  1066->465; // weight: -0.125
+  1066->468; // weight: 0.750
+  1075->1; // weight: -0.0469
+  1075->464; // weight: 0.0156
+  1075->3; // weight: 0.141
+  1075->465; // weight: -0.0469
+  1075->9; // weight: 0.281
+  1075->466; // weight: -0.0938
+  1075->467; // weight: -0.0938
+  1075->468; // weight: 0.281
+  1075->474; // weight: 0.562
+  1079->464; // weight: -0.125
+  1079->465; // weight: 0.375
+  1079->466; // weight: 0.750
+  1080->3; // weight: -0.125
+  1080->465; // weight: 0.375
+  1080->468; // weight: 0.750
+  1086->1; // weight: 0.0156
+  1086->464; // weight: -0.0469
+  1086->3; // weight: -0.0469
+  1086->465; // weight: 0.141
+  1086->9; // weight: -0.0938
+  1086->466; // weight: 0.281
+  1086->467; // weight: -0.0938
+  1086->468; // weight: 0.281
+  1086->474; // weight: 0.562
+  27->2; // weight: 0.375
+  27->390; // weight: -0.125
+  27->391; // weight: 0.750
+  28->391; // weight: 1.00
+  29->2; // weight: -0.125
+  29->390; // weight: 0.375
+  29->391; // weight: 0.750
+  30->3; // weight: 0.375
+  30->476; // weight: -0.125
+  30->477; // weight: 0.750
+  36->390; // weight: 0.375
+  36->476; // weight: -0.125
+  36->478; // weight: 0.750
+  37->478; // weight: 1.00
+  38->390; // weight: -0.125
+  38->476; // weight: 0.375
+  38->478; // weight: 0.750
+  97->2; // weight: 0.141
+  97->3; // weight: -0.0469
+  97->390; // weight: -0.0469
+  97->476; // weight: 0.0156
+  97->391; // weight: 0.281
+  97->477; // weight: -0.0938
+  97->11; // weight: 0.281
+  97->478; // weight: -0.0938
+  97->482; // weight: 0.562
+  98->11; // weight: 0.375
+  98->478; // weight: -0.125
+  98->482; // weight: 0.750
+  99->2; // weight: -0.0469
+  99->3; // weight: 0.141
+  99->390; // weight: 0.0156
+  99->476; // weight: -0.0469
+  99->391; // weight: -0.0938
+  99->477; // weight: 0.281
+  99->11; // weight: 0.281
+  99->478; // weight: -0.0938
+  99->482; // weight: 0.562
+  100->391; // weight: 0.375
+  100->477; // weight: -0.125
+  100->482; // weight: 0.750
+  101->391; // weight: -0.125
+  101->477; // weight: 0.375
+  101->482; // weight: 0.750
+  102->2; // weight: -0.0469
+  102->3; // weight: 0.0156
+  102->390; // weight: 0.141
+  102->476; // weight: -0.0469
+  102->391; // weight: 0.281
+  102->477; // weight: -0.0938
+  102->11; // weight: -0.0938
+  102->478; // weight: 0.281
+  102->482; // weight: 0.562
+  103->11; // weight: -0.125
+  103->478; // weight: 0.375
+  103->482; // weight: 0.750
+  104->2; // weight: 0.0156
+  104->3; // weight: -0.0469
+  104->390; // weight: -0.0469
+  104->476; // weight: 0.141
+  104->391; // weight: -0.0938
+  104->477; // weight: 0.281
+  104->11; // weight: -0.0938
+  104->478; // weight: 0.281
+  104->482; // weight: 0.562
+  2472->479; // weight: 1.00
+  2473->489; // weight: 1.00
+  2478->479; // weight: 0.375
+  2478->487; // weight: -0.125
+  2478->489; // weight: 0.750
+  2480->435; // weight: 0.375
+  2480->476; // weight: -0.125
+  2480->479; // weight: 0.750
+  2481->451; // weight: 0.375
+  2481->486; // weight: -0.125
+  2481->489; // weight: 0.750
+  2486->435; // weight: 0.141
+  2486->476; // weight: -0.0469
+  2486->447; // weight: -0.0469
+  2486->484; // weight: 0.0156
+  2486->451; // weight: 0.281
+  2486->486; // weight: -0.0938
+  2486->479; // weight: 0.281
+  2486->487; // weight: -0.0938
+  2486->489; // weight: 0.562
+  1167->486; // weight: 1.00
+  1172->476; // weight: 0.375
+  1172->484; // weight: -0.125
+  1172->486; // weight: 0.750
+  2527->435; // weight: -0.125
+  2527->476; // weight: 0.375
+  2527->479; // weight: 0.750
+  2528->451; // weight: -0.125
+  2528->486; // weight: 0.375
+  2528->489; // weight: 0.750
+  2533->435; // weight: -0.0469
+  2533->476; // weight: 0.141
+  2533->447; // weight: 0.0156
+  2533->484; // weight: -0.0469
+  2533->451; // weight: -0.0938
+  2533->486; // weight: 0.281
+  2533->479; // weight: 0.281
+  2533->487; // weight: -0.0938
+  2533->489; // weight: 0.562
+  2490->487; // weight: 1.00
+  2493->479; // weight: -0.125
+  2493->487; // weight: 0.375
+  2493->489; // weight: 0.750
+  2495->447; // weight: 0.375
+  2495->484; // weight: -0.125
+  2495->487; // weight: 0.750
+  2498->435; // weight: -0.0469
+  2498->476; // weight: 0.0156
+  2498->447; // weight: 0.141
+  2498->484; // weight: -0.0469
+  2498->451; // weight: 0.281
+  2498->486; // weight: -0.0938
+  2498->479; // weight: -0.0938
+  2498->487; // weight: 0.281
+  2498->489; // weight: 0.562
+  1186->476; // weight: -0.125
+  1186->484; // weight: 0.375
+  1186->486; // weight: 0.750
+  2540->447; // weight: -0.125
+  2540->484; // weight: 0.375
+  2540->487; // weight: 0.750
+  2543->435; // weight: 0.0156
+  2543->476; // weight: -0.0469
+  2543->447; // weight: -0.0469
+  2543->484; // weight: 0.141
+  2543->451; // weight: -0.0938
+  2543->486; // weight: 0.281
+  2543->479; // weight: -0.0938
+  2543->487; // weight: 0.281
+  2543->489; // weight: 0.562
+  1138->490; // weight: 1.00
+  1142->468; // weight: 0.375
+  1142->486; // weight: -0.125
+  1142->490; // weight: 0.750
+  1143->477; // weight: 0.375
+  1143->485; // weight: -0.125
+  1143->490; // weight: 0.750
+  1152->3; // weight: 0.141
+  1152->465; // weight: -0.0469
+  1152->476; // weight: -0.0469
+  1152->484; // weight: 0.0156
+  1152->477; // weight: 0.281
+  1152->485; // weight: -0.0938
+  1152->468; // weight: 0.281
+  1152->486; // weight: -0.0938
+  1152->490; // weight: 0.562
+  1155->485; // weight: 1.00
+  1157->465; // weight: 0.375
+  1157->484; // weight: -0.125
+  1157->485; // weight: 0.750
+  1158->477; // weight: -0.125
+  1158->485; // weight: 0.375
+  1158->490; // weight: 0.750
+  1164->3; // weight: -0.0469
+  1164->465; // weight: 0.141
+  1164->476; // weight: 0.0156
+  1164->484; // weight: -0.0469
+  1164->477; // weight: -0.0938
+  1164->485; // weight: 0.281
+  1164->468; // weight: 0.281
+  1164->486; // weight: -0.0938
+  1164->490; // weight: 0.562
+  1171->468; // weight: -0.125
+  1171->486; // weight: 0.375
+  1171->490; // weight: 0.750
+  1181->3; // weight: -0.0469
+  1181->465; // weight: 0.0156
+  1181->476; // weight: 0.141
+  1181->484; // weight: -0.0469
+  1181->477; // weight: 0.281
+  1181->485; // weight: -0.0938
+  1181->468; // weight: -0.0938
+  1181->486; // weight: 0.281
+  1181->490; // weight: 0.562
+  1185->465; // weight: -0.125
+  1185->484; // weight: 0.375
+  1185->485; // weight: 0.750
+  1192->3; // weight: 0.0156
+  1192->465; // weight: -0.0469
+  1192->476; // weight: -0.0469
+  1192->484; // weight: 0.141
+  1192->477; // weight: -0.0938
+  1192->485; // weight: 0.281
+  1192->468; // weight: -0.0938
+  1192->486; // weight: 0.281
+  1192->490; // weight: 0.562
+  2277->542; // weight: 1.00
+  2279->516; // weight: 1.00
+  2281->547; // weight: 1.00
+  2291->510; // weight: 0.375
+  2291->511; // weight: -0.125
+  2291->516; // weight: 0.750
+  2293->542; // weight: 0.375
+  2293->544; // weight: -0.125
+  2293->547; // weight: 0.750
+  2283->510; // weight: 0.375
+  2283->540; // weight: -0.125
+  2283->542; // weight: 0.750
+  2287->516; // weight: 0.375
+  2287->546; // weight: -0.125
+  2287->547; // weight: 0.750
+  2295->510; // weight: 0.141
+  2295->540; // weight: -0.0469
+  2295->511; // weight: -0.0469
+  2295->541; // weight: 0.0156
+  2295->516; // weight: 0.281
+  2295->546; // weight: -0.0938
+  2295->542; // weight: 0.281
+  2295->544; // weight: -0.0938
+  2295->547; // weight: 0.562
+  2318->546; // weight: 1.00
+  2326->540; // weight: 0.375
+  2326->541; // weight: -0.125
+  2326->546; // weight: 0.750
+  2320->510; // weight: -0.125
+  2320->540; // weight: 0.375
+  2320->542; // weight: 0.750
+  2323->516; // weight: -0.125
+  2323->546; // weight: 0.375
+  2323->547; // weight: 0.750
+  2328->510; // weight: -0.0469
+  2328->540; // weight: 0.141
+  2328->511; // weight: 0.0156
+  2328->541; // weight: -0.0469
+  2328->516; // weight: -0.0938
+  2328->546; // weight: 0.281
+  2328->542; // weight: 0.281
+  2328->544; // weight: -0.0938
+  2328->547; // weight: 0.562
+  2347->544; // weight: 1.00
+  2353->510; // weight: -0.125
+  2353->511; // weight: 0.375
+  2353->516; // weight: 0.750
+  2355->542; // weight: -0.125
+  2355->544; // weight: 0.375
+  2355->547; // weight: 0.750
+  2349->511; // weight: 0.375
+  2349->541; // weight: -0.125
+  2349->544; // weight: 0.750
+  2357->510; // weight: -0.0469
+  2357->540; // weight: 0.0156
+  2357->511; // weight: 0.141
+  2357->541; // weight: -0.0469
+  2357->516; // weight: 0.281
+  2357->546; // weight: -0.0938
+  2357->542; // weight: -0.0938
+  2357->544; // weight: 0.281
+  2357->547; // weight: 0.562
+  2377->540; // weight: -0.125
+  2377->541; // weight: 0.375
+  2377->546; // weight: 0.750
+  2374->511; // weight: -0.125
+  2374->541; // weight: 0.375
+  2374->544; // weight: 0.750
+  2379->510; // weight: 0.0156
+  2379->540; // weight: -0.0469
+  2379->511; // weight: -0.0469
+  2379->541; // weight: 0.141
+  2379->516; // weight: -0.0938
+  2379->546; // weight: 0.281
+  2379->542; // weight: -0.0938
+  2379->544; // weight: 0.281
+  2379->547; // weight: 0.562
+  171->390; // weight: 0.375
+  171->558; // weight: -0.125
+  171->559; // weight: 0.750
+  172->559; // weight: 1.00
+  173->390; // weight: -0.125
+  173->558; // weight: 0.375
+  173->559; // weight: 0.750
+  174->142; // weight: 0.375
+  174->390; // weight: -0.125
+  174->392; // weight: 0.750
+  175->392; // weight: 1.00
+  176->142; // weight: -0.125
+  176->390; // weight: 0.375
+  176->392; // weight: 0.750
+  177->144; // weight: 0.375
+  177->558; // weight: -0.125
+  177->560; // weight: 0.750
+  235->142; // weight: 0.141
+  235->390; // weight: -0.0469
+  235->144; // weight: -0.0469
+  235->558; // weight: 0.0156
+  235->150; // weight: 0.281
+  235->559; // weight: -0.0938
+  235->392; // weight: 0.281
+  235->560; // weight: -0.0938
+  235->564; // weight: 0.562
+  236->392; // weight: 0.375
+  236->560; // weight: -0.125
+  236->564; // weight: 0.750
+  237->142; // weight: -0.0469
+  237->390; // weight: 0.141
+  237->144; // weight: 0.0156
+  237->558; // weight: -0.0469
+  237->150; // weight: -0.0938
+  237->559; // weight: 0.281
+  237->392; // weight: 0.281
+  237->560; // weight: -0.0938
+  237->564; // weight: 0.562
+  238->150; // weight: 0.375
+  238->559; // weight: -0.125
+  238->564; // weight: 0.750
+  239->150; // weight: -0.125
+  239->559; // weight: 0.375
+  239->564; // weight: 0.750
+  240->142; // weight: -0.0469
+  240->390; // weight: 0.0156
+  240->144; // weight: 0.141
+  240->558; // weight: -0.0469
+  240->150; // weight: 0.281
+  240->559; // weight: -0.0938
+  240->392; // weight: -0.0938
+  240->560; // weight: 0.281
+  240->564; // weight: 0.562
+  241->392; // weight: -0.125
+  241->560; // weight: 0.375
+  241->564; // weight: 0.750
+  242->142; // weight: 0.0156
+  242->390; // weight: -0.0469
+  242->144; // weight: -0.0469
+  242->558; // weight: 0.141
+  242->150; // weight: -0.0938
+  242->559; // weight: 0.281
+  242->392; // weight: -0.0938
+  242->560; // weight: 0.281
+  242->564; // weight: 0.562
+  1590->568; // weight: 1.00
+  1591->576; // weight: 1.00
+  1596->143; // weight: 0.375
+  1596->566; // weight: -0.125
+  1596->568; // weight: 0.750
+  1597->152; // weight: 0.375
+  1597->570; // weight: -0.125
+  1597->576; // weight: 0.750
+  1599->568; // weight: 0.375
+  1599->569; // weight: -0.125
+  1599->576; // weight: 0.750
+  1612->143; // weight: 0.141
+  1612->144; // weight: -0.0469
+  1612->566; // weight: -0.0469
+  1612->567; // weight: 0.0156
+  1612->568; // weight: 0.281
+  1612->569; // weight: -0.0938
+  1612->152; // weight: 0.281
+  1612->570; // weight: -0.0938
+  1612->576; // weight: 0.562
+  1615->569; // weight: 1.00
+  1618->144; // weight: 0.375
+  1618->567; // weight: -0.125
+  1618->569; // weight: 0.750
+  1620->568; // weight: -0.125
+  1620->569; // weight: 0.375
+  1620->576; // weight: 0.750
+  1629->143; // weight: -0.0469
+  1629->144; // weight: 0.141
+  1629->566; // weight: 0.0156
+  1629->567; // weight: -0.0469
+  1629->568; // weight: -0.0938
+  1629->569; // weight: 0.281
+  1629->152; // weight: 0.281
+  1629->570; // weight: -0.0938
+  1629->576; // weight: 0.562
+  1632->570; // weight: 1.00
+  1635->143; // weight: -0.125
+  1635->566; // weight: 0.375
+  1635->568; // weight: 0.750
+  1636->152; // weight: -0.125
+  1636->570; // weight: 0.375
+  1636->576; // weight: 0.750
+  1637->566; // weight: 0.375
+  1637->567; // weight: -0.125
+  1637->570; // weight: 0.750
+  1646->143; // weight: -0.0469
+  1646->144; // weight: 0.0156
+  1646->566; // weight: 0.141
+  1646->567; // weight: -0.0469
+  1646->568; // weight: 0.281
+  1646->569; // weight: -0.0938
+  1646->152; // weight: -0.0938
+  1646->570; // weight: 0.281
+  1646->576; // weight: 0.562
+  1650->144; // weight: -0.125
+  1650->567; // weight: 0.375
+  1650->569; // weight: 0.750
+  1651->566; // weight: -0.125
+  1651->567; // weight: 0.375
+  1651->570; // weight: 0.750
+  1657->143; // weight: 0.0156
+  1657->144; // weight: -0.0469
+  1657->566; // weight: -0.0469
+  1657->567; // weight: 0.141
+  1657->568; // weight: -0.0938
+  1657->569; // weight: 0.281
+  1657->152; // weight: -0.0938
+  1657->570; // weight: 0.281
+  1657->576; // weight: 0.562
+  2566->561; // weight: 1.00
+  2568->582; // weight: 1.00
+  2574->511; // weight: 0.375
+  2574->558; // weight: -0.125
+  2574->561; // weight: 0.750
+  2576->544; // weight: 0.375
+  2576->579; // weight: -0.125
+  2576->582; // weight: 0.750
+  2570->561; // weight: 0.375
+  2570->581; // weight: -0.125
+  2570->582; // weight: 0.750
+  2578->511; // weight: 0.141
+  2578->541; // weight: -0.0469
+  2578->558; // weight: -0.0469
+  2578->578; // weight: 0.0156
+  2578->561; // weight: 0.281
+  2578->581; // weight: -0.0938
+  2578->544; // weight: 0.281
+  2578->579; // weight: -0.0938
+  2578->582; // weight: 0.562
+  2594->581; // weight: 1.00
+  2599->541; // weight: 0.375
+  2599->578; // weight: -0.125
+  2599->581; // weight: 0.750
+  2596->561; // weight: -0.125
+  2596->581; // weight: 0.375
+  2596->582; // weight: 0.750
+  2601->511; // weight: -0.0469
+  2601->541; // weight: 0.141
+  2601->558; // weight: 0.0156
+  2601->578; // weight: -0.0469
+  2601->561; // weight: -0.0938
+  2601->581; // weight: 0.281
+  2601->544; // weight: 0.281
+  2601->579; // weight: -0.0938
+  2601->582; // weight: 0.562
+  1726->579; // weight: 1.00
+  2619->511; // weight: -0.125
+  2619->558; // weight: 0.375
+  2619->561; // weight: 0.750
+  2621->544; // weight: -0.125
+  2621->579; // weight: 0.375
+  2621->582; // weight: 0.750
+  1729->558; // weight: 0.375
+  1729->578; // weight: -0.125
+  1729->579; // weight: 0.750
+  2623->511; // weight: -0.0469
+  2623->541; // weight: 0.0156
+  2623->558; // weight: 0.141
+  2623->578; // weight: -0.0469
+  2623->561; // weight: 0.281
+  2623->581; // weight: -0.0938
+  2623->544; // weight: -0.0938
+  2623->579; // weight: 0.281
+  2623->582; // weight: 0.562
+  2642->541; // weight: -0.125
+  2642->578; // weight: 0.375
+  2642->581; // weight: 0.750
+  1756->558; // weight: -0.125
+  1756->578; // weight: 0.375
+  1756->579; // weight: 0.750
+  2644->511; // weight: 0.0156
+  2644->541; // weight: -0.0469
+  2644->558; // weight: -0.0469
+  2644->578; // weight: 0.141
+  2644->561; // weight: -0.0938
+  2644->581; // weight: 0.281
+  2644->544; // weight: -0.0938
+  2644->579; // weight: 0.281
+  2644->582; // weight: 0.562
+  1709->584; // weight: 1.00
+  1712->560; // weight: 0.375
+  1712->580; // weight: -0.125
+  1712->584; // weight: 0.750
+  1714->569; // weight: 0.375
+  1714->579; // weight: -0.125
+  1714->584; // weight: 0.750
+  1723->144; // weight: 0.141
+  1723->558; // weight: -0.0469
+  1723->567; // weight: -0.0469
+  1723->578; // weight: 0.0156
+  1723->569; // weight: 0.281
+  1723->579; // weight: -0.0938
+  1723->560; // weight: 0.281
+  1723->580; // weight: -0.0938
+  1723->584; // weight: 0.562
+  1731->569; // weight: -0.125
+  1731->579; // weight: 0.375
+  1731->584; // weight: 0.750
+  1740->144; // weight: -0.0469
+  1740->558; // weight: 0.141
+  1740->567; // weight: 0.0156
+  1740->578; // weight: -0.0469
+  1740->569; // weight: -0.0938
+  1740->579; // weight: 0.281
+  1740->560; // weight: 0.281
+  1740->580; // weight: -0.0938
+  1740->584; // weight: 0.562
+  1743->580; // weight: 1.00
+  1745->560; // weight: -0.125
+  1745->580; // weight: 0.375
+  1745->584; // weight: 0.750
+  1746->567; // weight: 0.375
+  1746->578; // weight: -0.125
+  1746->580; // weight: 0.750
+  1752->144; // weight: -0.0469
+  1752->558; // weight: 0.0156
+  1752->567; // weight: 0.141
+  1752->578; // weight: -0.0469
+  1752->569; // weight: 0.281
+  1752->579; // weight: -0.0938
+  1752->560; // weight: -0.0938
+  1752->580; // weight: 0.281
+  1752->584; // weight: 0.562
+  1757->567; // weight: -0.125
+  1757->578; // weight: 0.375
+  1757->580; // weight: 0.750
+  1763->144; // weight: 0.0156
+  1763->558; // weight: -0.0469
+  1763->567; // weight: -0.0469
+  1763->578; // weight: 0.141
+  1763->569; // weight: -0.0938
+  1763->579; // weight: 0.281
+  1763->560; // weight: -0.0938
+  1763->580; // weight: 0.281
+  1763->584; // weight: 0.562
+  2158->588; // weight: 1.00
+  2162->593; // weight: 1.00
+  2174->588; // weight: 0.375
+  2174->590; // weight: -0.125
+  2174->593; // weight: 0.750
+  2164->434; // weight: 0.375
+  2164->586; // weight: -0.125
+  2164->588; // weight: 0.750
+  2168->440; // weight: 0.375
+  2168->592; // weight: -0.125
+  2168->593; // weight: 0.750
+  2176->434; // weight: 0.141
+  2176->586; // weight: -0.0469
+  2176->435; // weight: -0.0469
+  2176->587; // weight: 0.0156
+  2176->440; // weight: 0.281
+  2176->592; // weight: -0.0938
+  2176->588; // weight: 0.281
+  2176->590; // weight: -0.0938
+  2176->593; // weight: 0.562
+  2201->592; // weight: 1.00
+  2209->586; // weight: 0.375
+  2209->587; // weight: -0.125
+  2209->592; // weight: 0.750
+  2203->434; // weight: -0.125
+  2203->586; // weight: 0.375
+  2203->588; // weight: 0.750
+  2206->440; // weight: -0.125
+  2206->592; // weight: 0.375
+  2206->593; // weight: 0.750
+  2211->434; // weight: -0.0469
+  2211->586; // weight: 0.141
+  2211->435; // weight: 0.0156
+  2211->587; // weight: -0.0469
+  2211->440; // weight: -0.0938
+  2211->592; // weight: 0.281
+  2211->588; // weight: 0.281
+  2211->590; // weight: -0.0938
+  2211->593; // weight: 0.562
+  2230->590; // weight: 1.00
+  2238->588; // weight: -0.125
+  2238->590; // weight: 0.375
+  2238->593; // weight: 0.750
+  2232->435; // weight: 0.375
+  2232->587; // weight: -0.125
+  2232->590; // weight: 0.750
+  2240->434; // weight: -0.0469
+  2240->586; // weight: 0.0156
+  2240->435; // weight: 0.141
+  2240->587; // weight: -0.0469
+  2240->440; // weight: 0.281
+  2240->592; // weight: -0.0938
+  2240->588; // weight: -0.0938
+  2240->590; // weight: 0.281
+  2240->593; // weight: 0.562
+  2261->586; // weight: -0.125
+  2261->587; // weight: 0.375
+  2261->592; // weight: 0.750
+  2258->435; // weight: -0.125
+  2258->587; // weight: 0.375
+  2258->590; // weight: 0.750
+  2263->434; // weight: 0.0156
+  2263->586; // weight: -0.0469
+  2263->435; // weight: -0.0469
+  2263->587; // weight: 0.141
+  2263->440; // weight: -0.0938
+  2263->592; // weight: 0.281
+  2263->588; // weight: -0.0938
+  2263->590; // weight: 0.281
+  2263->593; // weight: 0.562
+  2276->589; // weight: 1.00
+  2280->594; // weight: 1.00
+  2285->510; // weight: 0.375
+  2285->586; // weight: -0.125
+  2285->589; // weight: 0.750
+  2289->516; // weight: 0.375
+  2289->592; // weight: -0.125
+  2289->594; // weight: 0.750
+  2292->589; // weight: 0.375
+  2292->591; // weight: -0.125
+  2292->594; // weight: 0.750
+  2297->510; // weight: 0.141
+  2297->511; // weight: -0.0469
+  2297->586; // weight: -0.0469
+  2297->587; // weight: 0.0156
+  2297->589; // weight: 0.281
+  2297->591; // weight: -0.0938
+  2297->516; // weight: 0.281
+  2297->592; // weight: -0.0938
+  2297->594; // weight: 0.562
+  2346->591; // weight: 1.00
+  2351->511; // weight: 0.375
+  2351->587; // weight: -0.125
+  2351->591; // weight: 0.750
+  2354->589; // weight: -0.125
+  2354->591; // weight: 0.375
+  2354->594; // weight: 0.750
+  2359->510; // weight: -0.0469
+  2359->511; // weight: 0.141
+  2359->586; // weight: 0.0156
+  2359->587; // weight: -0.0469
+  2359->589; // weight: -0.0938
+  2359->591; // weight: 0.281
+  2359->516; // weight: 0.281
+  2359->592; // weight: -0.0938
+  2359->594; // weight: 0.562
+  2305->510; // weight: -0.125
+  2305->586; // weight: 0.375
+  2305->589; // weight: 0.750
+  2308->516; // weight: -0.125
+  2308->592; // weight: 0.375
+  2308->594; // weight: 0.750
+  2312->510; // weight: -0.0469
+  2312->511; // weight: 0.0156
+  2312->586; // weight: 0.141
+  2312->587; // weight: -0.0469
+  2312->589; // weight: 0.281
+  2312->591; // weight: -0.0938
+  2312->516; // weight: -0.0938
+  2312->592; // weight: 0.281
+  2312->594; // weight: 0.562
+  2365->511; // weight: -0.125
+  2365->587; // weight: 0.375
+  2365->591; // weight: 0.750
+  2369->510; // weight: 0.0156
+  2369->511; // weight: -0.0469
+  2369->586; // weight: -0.0469
+  2369->587; // weight: 0.141
+  2369->589; // weight: -0.0938
+  2369->591; // weight: 0.281
+  2369->516; // weight: -0.0938
+  2369->592; // weight: 0.281
+  2369->594; // weight: 0.562
+  2474->602; // weight: 1.00
+  2482->590; // weight: 0.375
+  2482->599; // weight: -0.125
+  2482->602; // weight: 0.750
+  2476->479; // weight: 0.375
+  2476->601; // weight: -0.125
+  2476->602; // weight: 0.750
+  2484->435; // weight: 0.141
+  2484->587; // weight: -0.0469
+  2484->476; // weight: -0.0469
+  2484->598; // weight: 0.0156
+  2484->479; // weight: 0.281
+  2484->601; // weight: -0.0938
+  2484->590; // weight: 0.281
+  2484->599; // weight: -0.0938
+  2484->602; // weight: 0.562
+  2502->601; // weight: 1.00
+  2507->587; // weight: 0.375
+  2507->598; // weight: -0.125
+  2507->601; // weight: 0.750
+  2504->479; // weight: -0.125
+  2504->601; // weight: 0.375
+  2504->602; // weight: 0.750
+  2509->435; // weight: -0.0469
+  2509->587; // weight: 0.141
+  2509->476; // weight: 0.0156
+  2509->598; // weight: -0.0469
+  2509->479; // weight: -0.0938
+  2509->601; // weight: 0.281
+  2509->590; // weight: 0.281
+  2509->599; // weight: -0.0938
+  2509->602; // weight: 0.562
+  2522->599; // weight: 1.00
+  2529->590; // weight: -0.125
+  2529->599; // weight: 0.375
+  2529->602; // weight: 0.750
+  2524->476; // weight: 0.375
+  2524->598; // weight: -0.125
+  2524->599; // weight: 0.750
+  2531->435; // weight: -0.0469
+  2531->587; // weight: 0.0156
+  2531->476; // weight: 0.141
+  2531->598; // weight: -0.0469
+  2531->479; // weight: 0.281
+  2531->601; // weight: -0.0938
+  2531->590; // weight: -0.0938
+  2531->599; // weight: 0.281
+  2531->602; // weight: 0.562
+  2551->587; // weight: -0.125
+  2551->598; // weight: 0.375
+  2551->601; // weight: 0.750
+  2548->476; // weight: -0.125
+  2548->598; // weight: 0.375
+  2548->599; // weight: 0.750
+  2553->435; // weight: 0.0156
+  2553->587; // weight: -0.0469
+  2553->476; // weight: -0.0469
+  2553->598; // weight: 0.141
+  2553->479; // weight: -0.0938
+  2553->601; // weight: 0.281
+  2553->590; // weight: -0.0938
+  2553->599; // weight: 0.281
+  2553->602; // weight: 0.562
+  2567->603; // weight: 1.00
+  2572->561; // weight: 0.375
+  2572->601; // weight: -0.125
+  2572->603; // weight: 0.750
+  2575->591; // weight: 0.375
+  2575->600; // weight: -0.125
+  2575->603; // weight: 0.750
+  2580->511; // weight: 0.141
+  2580->558; // weight: -0.0469
+  2580->587; // weight: -0.0469
+  2580->598; // weight: 0.0156
+  2580->591; // weight: 0.281
+  2580->600; // weight: -0.0938
+  2580->561; // weight: 0.281
+  2580->601; // weight: -0.0938
+  2580->603; // weight: 0.562
+  2614->600; // weight: 1.00
+  2617->558; // weight: 0.375
+  2617->598; // weight: -0.125
+  2617->600; // weight: 0.750
+  2620->591; // weight: -0.125
+  2620->600; // weight: 0.375
+  2620->603; // weight: 0.750
+  2625->511; // weight: -0.0469
+  2625->558; // weight: 0.141
+  2625->587; // weight: 0.0156
+  2625->598; // weight: -0.0469
+  2625->591; // weight: -0.0938
+  2625->600; // weight: 0.281
+  2625->561; // weight: 0.281
+  2625->601; // weight: -0.0938
+  2625->603; // weight: 0.562
+  2586->561; // weight: -0.125
+  2586->601; // weight: 0.375
+  2586->603; // weight: 0.750
+  2590->511; // weight: -0.0469
+  2590->558; // weight: 0.0156
+  2590->587; // weight: 0.141
+  2590->598; // weight: -0.0469
+  2590->591; // weight: 0.281
+  2590->600; // weight: -0.0938
+  2590->561; // weight: -0.0938
+  2590->601; // weight: 0.281
+  2590->603; // weight: 0.562
+  2631->558; // weight: -0.125
+  2631->598; // weight: 0.375
+  2631->600; // weight: 0.750
+  2635->511; // weight: 0.0156
+  2635->558; // weight: -0.0469
+  2635->587; // weight: -0.0469
+  2635->598; // weight: 0.141
+  2635->591; // weight: -0.0938
+  2635->600; // weight: 0.281
+  2635->561; // weight: -0.0938
+  2635->601; // weight: 0.281
+  2635->603; // weight: 0.562
+  695->390; // weight: 0.222
+  695->558; // weight: -0.111
+  695->559; // weight: 0.889
+  696->390; // weight: -0.111
+  696->558; // weight: 0.222
+  696->559; // weight: 0.889
+  697->476; // weight: 0.222
+  697->598; // weight: -0.111
+  697->599; // weight: 0.889
+  698->476; // weight: -0.111
+  698->598; // weight: 0.222
+  698->599; // weight: 0.889
+  699->390; // weight: 0.222
+  699->476; // weight: -0.111
+  699->478; // weight: 0.889
+  700->390; // weight: -0.111
+  700->476; // weight: 0.222
+  700->478; // weight: 0.889
+  701->558; // weight: 0.222
+  701->598; // weight: -0.111
+  701->600; // weight: 0.889
+  702->558; // weight: -0.111
+  702->598; // weight: 0.222
+  702->600; // weight: 0.889
+  735->390; // weight: 0.0494
+  735->476; // weight: -0.0247
+  735->558; // weight: -0.0247
+  735->598; // weight: 0.0123
+  735->559; // weight: 0.198
+  735->599; // weight: -0.0988
+  735->478; // weight: 0.198
+  735->600; // weight: -0.0988
+  735->604; // weight: 0.790
+  736->390; // weight: -0.0247
+  736->476; // weight: 0.0494
+  736->558; // weight: 0.0123
+  736->598; // weight: -0.0247
+  736->559; // weight: -0.0988
+  736->599; // weight: 0.198
+  736->478; // weight: 0.198
+  736->600; // weight: -0.0988
+  736->604; // weight: 0.790
+  737->390; // weight: -0.0247
+  737->476; // weight: 0.0123
+  737->558; // weight: 0.0494
+  737->598; // weight: -0.0247
+  737->559; // weight: 0.198
+  737->599; // weight: -0.0988
+  737->478; // weight: -0.0988
+  737->600; // weight: 0.198
+  737->604; // weight: 0.790
+  738->390; // weight: 0.0123
+  738->476; // weight: -0.0247
+  738->558; // weight: -0.0247
+  738->598; // weight: 0.0494
+  738->559; // weight: -0.0988
+  738->599; // weight: 0.198
+  738->478; // weight: -0.0988
+  738->600; // weight: 0.198
+  738->604; // weight: 0.790
+  57->390; // weight: 0.375
+  57->636; // weight: -0.125
+  57->639; // weight: 0.750
+  58->639; // weight: 1.00
+  59->390; // weight: -0.125
+  59->636; // weight: 0.375
+  59->639; // weight: 0.750
+  39->6; // weight: 0.375
+  39->636; // weight: -0.125
+  39->637; // weight: 0.750
+  63->2; // weight: 0.141
+  63->390; // weight: -0.0469
+  63->6; // weight: -0.0469
+  63->636; // weight: 0.0156
+  63->18; // weight: 0.281
+  63->639; // weight: -0.0938
+  63->391; // weight: 0.281
+  63->637; // weight: -0.0938
+  63->640; // weight: 0.562
+  64->391; // weight: 0.375
+  64->637; // weight: -0.125
+  64->640; // weight: 0.750
+  65->2; // weight: -0.0469
+  65->390; // weight: 0.141
+  65->6; // weight: 0.0156
+  65->636; // weight: -0.0469
+  65->18; // weight: -0.0938
+  65->639; // weight: 0.281
+  65->391; // weight: 0.281
+  65->637; // weight: -0.0938
+  65->640; // weight: 0.562
+  66->18; // weight: 0.375
+  66->639; // weight: -0.125
+  66->640; // weight: 0.750
+  67->18; // weight: -0.125
+  67->639; // weight: 0.375
+  67->640; // weight: 0.750
+  68->2; // weight: -0.0469
+  68->390; // weight: 0.0156
+  68->6; // weight: 0.141
+  68->636; // weight: -0.0469
+  68->18; // weight: 0.281
+  68->639; // weight: -0.0938
+  68->391; // weight: -0.0938
+  68->637; // weight: 0.281
+  68->640; // weight: 0.562
+  69->391; // weight: -0.125
+  69->637; // weight: 0.375
+  69->640; // weight: 0.750
+  70->2; // weight: 0.0156
+  70->390; // weight: -0.0469
+  70->6; // weight: -0.0469
+  70->636; // weight: 0.141
+  70->18; // weight: -0.0938
+  70->639; // weight: 0.281
+  70->391; // weight: -0.0938
+  70->637; // weight: 0.281
+  70->640; // weight: 0.562
+  186->146; // weight: 0.375
+  186->636; // weight: -0.125
+  186->638; // weight: 0.750
+  218->142; // weight: 0.141
+  218->146; // weight: -0.0469
+  218->390; // weight: -0.0469
+  218->636; // weight: 0.0156
+  218->392; // weight: 0.281
+  218->638; // weight: -0.0938
+  218->158; // weight: 0.281
+  218->639; // weight: -0.0938
+  218->641; // weight: 0.562
+  219->158; // weight: 0.375
+  219->639; // weight: -0.125
+  219->641; // weight: 0.750
+  220->142; // weight: -0.0469
+  220->146; // weight: 0.141
+  220->390; // weight: 0.0156
+  220->636; // weight: -0.0469
+  220->392; // weight: -0.0938
+  220->638; // weight: 0.281
+  220->158; // weight: 0.281
+  220->639; // weight: -0.0938
+  220->641; // weight: 0.562
+  221->392; // weight: 0.375
+  221->638; // weight: -0.125
+  221->641; // weight: 0.750
+  222->392; // weight: -0.125
+  222->638; // weight: 0.375
+  222->641; // weight: 0.750
+  223->142; // weight: -0.0469
+  223->146; // weight: 0.0156
+  223->390; // weight: 0.141
+  223->636; // weight: -0.0469
+  223->392; // weight: 0.281
+  223->638; // weight: -0.0938
+  223->158; // weight: -0.0938
+  223->639; // weight: 0.281
+  223->641; // weight: 0.562
+  224->158; // weight: -0.125
+  224->639; // weight: 0.375
+  224->641; // weight: 0.750
+  225->142; // weight: 0.0156
+  225->146; // weight: -0.0469
+  225->390; // weight: -0.0469
+  225->636; // weight: 0.141
+  225->392; // weight: -0.0938
+  225->638; // weight: 0.281
+  225->158; // weight: -0.0938
+  225->639; // weight: 0.281
+  225->641; // weight: 0.562
+  1238->667; // weight: 1.00
+  1240->669; // weight: 1.00
+  1250->4; // weight: 0.375
+  1250->662; // weight: -0.125
+  1250->667; // weight: 0.750
+  1252->12; // weight: 0.375
+  1252->664; // weight: -0.125
+  1252->669; // weight: 0.750
+  1246->667; // weight: 0.375
+  1246->668; // weight: -0.125
+  1246->669; // weight: 0.750
+  1254->4; // weight: 0.141
+  1254->6; // weight: -0.0469
+  1254->662; // weight: -0.0469
+  1254->663; // weight: 0.0156
+  1254->667; // weight: 0.281
+  1254->668; // weight: -0.0938
+  1254->12; // weight: 0.281
+  1254->664; // weight: -0.0938
+  1254->669; // weight: 0.562
+  1277->668; // weight: 1.00
+  1285->6; // weight: 0.375
+  1285->663; // weight: -0.125
+  1285->668; // weight: 0.750
+  1282->667; // weight: -0.125
+  1282->668; // weight: 0.375
+  1282->669; // weight: 0.750
+  1287->4; // weight: -0.0469
+  1287->6; // weight: 0.141
+  1287->662; // weight: 0.0156
+  1287->663; // weight: -0.0469
+  1287->667; // weight: -0.0938
+  1287->668; // weight: 0.281
+  1287->12; // weight: 0.281
+  1287->664; // weight: -0.0938
+  1287->669; // weight: 0.562
+  1304->664; // weight: 1.00
+  1310->4; // weight: -0.125
+  1310->662; // weight: 0.375
+  1310->667; // weight: 0.750
+  1312->12; // weight: -0.125
+  1312->664; // weight: 0.375
+  1312->669; // weight: 0.750
+  1306->662; // weight: 0.375
+  1306->663; // weight: -0.125
+  1306->664; // weight: 0.750
+  1314->4; // weight: -0.0469
+  1314->6; // weight: 0.0156
+  1314->662; // weight: 0.141
+  1314->663; // weight: -0.0469
+  1314->667; // weight: 0.281
+  1314->668; // weight: -0.0938
+  1314->12; // weight: -0.0938
+  1314->664; // weight: 0.281
+  1314->669; // weight: 0.562
+  1336->6; // weight: -0.125
+  1336->663; // weight: 0.375
+  1336->668; // weight: 0.750
+  1333->662; // weight: -0.125
+  1333->663; // weight: 0.375
+  1333->664; // weight: 0.750
+  1338->4; // weight: 0.0156
+  1338->6; // weight: -0.0469
+  1338->662; // weight: -0.0469
+  1338->663; // weight: 0.141
+  1338->667; // weight: -0.0938
+  1338->668; // weight: 0.281
+  1338->12; // weight: -0.0938
+  1338->664; // weight: 0.281
+  1338->669; // weight: 0.562
+  1809->679; // weight: 1.00
+  1810->683; // weight: 1.00
+  1819->679; // weight: 0.375
+  1819->680; // weight: -0.125
+  1819->683; // weight: 0.750
+  1821->145; // weight: 0.375
+  1821->674; // weight: -0.125
+  1821->679; // weight: 0.750
+  1822->155; // weight: 0.375
+  1822->678; // weight: -0.125
+  1822->683; // weight: 0.750
+  1827->145; // weight: 0.141
+  1827->674; // weight: -0.0469
+  1827->146; // weight: -0.0469
+  1827->675; // weight: 0.0156
+  1827->155; // weight: 0.281
+  1827->678; // weight: -0.0938
+  1827->679; // weight: 0.281
+  1827->680; // weight: -0.0938
+  1827->683; // weight: 0.562
+  1874->678; // weight: 1.00
+  1879->674; // weight: 0.375
+  1879->675; // weight: -0.125
+  1879->678; // weight: 0.750
+  1881->145; // weight: -0.125
+  1881->674; // weight: 0.375
+  1881->679; // weight: 0.750
+  1882->155; // weight: -0.125
+  1882->678; // weight: 0.375
+  1882->683; // weight: 0.750
+  1887->145; // weight: -0.0469
+  1887->674; // weight: 0.141
+  1887->146; // weight: 0.0156
+  1887->675; // weight: -0.0469
+  1887->155; // weight: -0.0938
+  1887->678; // weight: 0.281
+  1887->679; // weight: 0.281
+  1887->680; // weight: -0.0938
+  1887->683; // weight: 0.562
+  1833->680; // weight: 1.00
+  1839->679; // weight: -0.125
+  1839->680; // weight: 0.375
+  1839->683; // weight: 0.750
+  1841->146; // weight: 0.375
+  1841->675; // weight: -0.125
+  1841->680; // weight: 0.750
+  1844->145; // weight: -0.0469
+  1844->674; // weight: 0.0156
+  1844->146; // weight: 0.141
+  1844->675; // weight: -0.0469
+  1844->155; // weight: 0.281
+  1844->678; // weight: -0.0938
+  1844->679; // weight: -0.0938
+  1844->680; // weight: 0.281
+  1844->683; // weight: 0.562
+  1893->674; // weight: -0.125
+  1893->675; // weight: 0.375
+  1893->678; // weight: 0.750
+  1895->146; // weight: -0.125
+  1895->675; // weight: 0.375
+  1895->680; // weight: 0.750
+  1898->145; // weight: 0.0156
+  1898->674; // weight: -0.0469
+  1898->146; // weight: -0.0469
+  1898->675; // weight: 0.141
+  1898->155; // weight: -0.0938
+  1898->678; // weight: 0.281
+  1898->679; // weight: -0.0938
+  1898->680; // weight: 0.281
+  1898->683; // weight: 0.562
+  1433->690; // weight: 1.00
+  1441->637; // weight: 0.375
+  1441->687; // weight: -0.125
+  1441->690; // weight: 0.750
+  1438->668; // weight: 0.375
+  1438->689; // weight: -0.125
+  1438->690; // weight: 0.750
+  1443->6; // weight: 0.141
+  1443->636; // weight: -0.0469
+  1443->663; // weight: -0.0469
+  1443->686; // weight: 0.0156
+  1443->668; // weight: 0.281
+  1443->689; // weight: -0.0938
+  1443->637; // weight: 0.281
+  1443->687; // weight: -0.0938
+  1443->690; // weight: 0.562
+  1460->689; // weight: 1.00
+  1468->636; // weight: 0.375
+  1468->686; // weight: -0.125
+  1468->689; // weight: 0.750
+  1465->668; // weight: -0.125
+  1465->689; // weight: 0.375
+  1465->690; // weight: 0.750
+  1470->6; // weight: -0.0469
+  1470->636; // weight: 0.141
+  1470->663; // weight: 0.0156
+  1470->686; // weight: -0.0469
+  1470->668; // weight: -0.0938
+  1470->689; // weight: 0.281
+  1470->637; // weight: 0.281
+  1470->687; // weight: -0.0938
+  1470->690; // weight: 0.562
+  1486->687; // weight: 1.00
+  1491->637; // weight: -0.125
+  1491->687; // weight: 0.375
+  1491->690; // weight: 0.750
+  1488->663; // weight: 0.375
+  1488->686; // weight: -0.125
+  1488->687; // weight: 0.750
+  1493->6; // weight: -0.0469
+  1493->636; // weight: 0.0156
+  1493->663; // weight: 0.141
+  1493->686; // weight: -0.0469
+  1493->668; // weight: 0.281
+  1493->689; // weight: -0.0938
+  1493->637; // weight: -0.0938
+  1493->687; // weight: 0.281
+  1493->690; // weight: 0.562
+  1510->636; // weight: -0.125
+  1510->686; // weight: 0.375
+  1510->689; // weight: 0.750
+  1507->663; // weight: -0.125
+  1507->686; // weight: 0.375
+  1507->687; // weight: 0.750
+  1512->6; // weight: 0.0156
+  1512->636; // weight: -0.0469
+  1512->663; // weight: -0.0469
+  1512->686; // weight: 0.141
+  1512->668; // weight: -0.0938
+  1512->689; // weight: 0.281
+  1512->637; // weight: -0.0938
+  1512->687; // weight: 0.281
+  1512->690; // weight: 0.562
+  1924->691; // weight: 1.00
+  1930->680; // weight: 0.375
+  1930->689; // weight: -0.125
+  1930->691; // weight: 0.750
+  1932->638; // weight: 0.375
+  1932->688; // weight: -0.125
+  1932->691; // weight: 0.750
+  1935->146; // weight: 0.141
+  1935->675; // weight: -0.0469
+  1935->636; // weight: -0.0469
+  1935->686; // weight: 0.0156
+  1935->638; // weight: 0.281
+  1935->688; // weight: -0.0938
+  1935->680; // weight: 0.281
+  1935->689; // weight: -0.0938
+  1935->691; // weight: 0.562
+  1975->688; // weight: 1.00
+  1978->675; // weight: 0.375
+  1978->686; // weight: -0.125
+  1978->688; // weight: 0.750
+  1980->638; // weight: -0.125
+  1980->688; // weight: 0.375
+  1980->691; // weight: 0.750
+  1983->146; // weight: -0.0469
+  1983->675; // weight: 0.141
+  1983->636; // weight: 0.0156
+  1983->686; // weight: -0.0469
+  1983->638; // weight: -0.0938
+  1983->688; // weight: 0.281
+  1983->680; // weight: 0.281
+  1983->689; // weight: -0.0938
+  1983->691; // weight: 0.562
+  1946->680; // weight: -0.125
+  1946->689; // weight: 0.375
+  1946->691; // weight: 0.750
+  1950->146; // weight: -0.0469
+  1950->675; // weight: 0.0156
+  1950->636; // weight: 0.141
+  1950->686; // weight: -0.0469
+  1950->638; // weight: 0.281
+  1950->688; // weight: -0.0938
+  1950->680; // weight: -0.0938
+  1950->689; // weight: 0.281
+  1950->691; // weight: 0.562
+  1989->675; // weight: -0.125
+  1989->686; // weight: 0.375
+  1989->688; // weight: 0.750
+  1993->146; // weight: 0.0156
+  1993->675; // weight: -0.0469
+  1993->636; // weight: -0.0469
+  1993->686; // weight: 0.141
+  1993->638; // weight: -0.0938
+  1993->688; // weight: 0.281
+  1993->680; // weight: -0.0938
+  1993->689; // weight: 0.281
+  1993->691; // weight: 0.562
+  198->558; // weight: 0.117
+  198->1778; // weight: 0.0391
+  198->715; // weight: 1.05
+  198->716; // weight: -0.211
+  183->636; // weight: 0.117
+  183->1778; // weight: 0.0391
+  183->703; // weight: 1.05
+  183->704; // weight: -0.211
+  209->390; // weight: 0.0137
+  209->558; // weight: 0.00458
+  209->636; // weight: 0.00458
+  209->1778; // weight: 0.00153
+  209->711; // weight: 0.124
+  209->712; // weight: -0.0247
+  209->715; // weight: 0.0412
+  209->716; // weight: 0.00824
+  209->695; // weight: 0.124
+  209->696; // weight: -0.0247
+  209->703; // weight: 0.0412
+  209->704; // weight: 0.00824
+  209->719; // weight: 1.11
+  209->720; // weight: -0.222
+  209->721; // weight: -0.222
+  209->722; // weight: 0.0445
+  210->390; // weight: 0.00732
+  210->558; // weight: 0.00732
+  210->636; // weight: 0.00244
+  210->1778; // weight: 0.00244
+  210->711; // weight: -0.0659
+  210->712; // weight: 0.0132
+  210->715; // weight: -0.0659
+  210->716; // weight: 0.0132
+  210->695; // weight: 0.0659
+  210->696; // weight: 0.0659
+  210->703; // weight: 0.0220
+  210->704; // weight: 0.0220
+  210->719; // weight: 0.593
+  210->720; // weight: 0.593
+  210->721; // weight: -0.119
+  210->722; // weight: -0.119
+  211->390; // weight: 0.00458
+  211->558; // weight: 0.0137
+  211->636; // weight: 0.00153
+  211->1778; // weight: 0.00458
+  211->711; // weight: 0.0412
+  211->712; // weight: 0.00824
+  211->715; // weight: 0.124
+  211->716; // weight: -0.0247
+  211->695; // weight: -0.0247
+  211->696; // weight: 0.124
+  211->703; // weight: 0.00824
+  211->704; // weight: 0.0412
+  211->719; // weight: -0.222
+  211->720; // weight: 1.11
+  211->721; // weight: 0.0445
+  211->722; // weight: -0.222
+  212->390; // weight: 0.00732
+  212->558; // weight: 0.00244
+  212->636; // weight: 0.00732
+  212->1778; // weight: 0.00244
+  212->711; // weight: 0.0659
+  212->712; // weight: 0.0659
+  212->715; // weight: 0.0220
+  212->716; // weight: 0.0220
+  212->695; // weight: -0.0659
+  212->696; // weight: 0.0132
+  212->703; // weight: -0.0659
+  212->704; // weight: 0.0132
+  212->719; // weight: 0.593
+  212->720; // weight: -0.119
+  212->721; // weight: 0.593
+  212->722; // weight: -0.119
+  213->390; // weight: 0.00391
+  213->558; // weight: 0.00391
+  213->636; // weight: 0.00391
+  213->1778; // weight: 0.00391
+  213->711; // weight: -0.0352
+  213->712; // weight: -0.0352
+  213->715; // weight: -0.0352
+  213->716; // weight: -0.0352
+  213->695; // weight: -0.0352
+  213->696; // weight: -0.0352
+  213->703; // weight: -0.0352
+  213->704; // weight: -0.0352
+  213->719; // weight: 0.316
+  213->720; // weight: 0.316
+  213->721; // weight: 0.316
+  213->722; // weight: 0.316
+  214->390; // weight: 0.00244
+  214->558; // weight: 0.00732
+  214->636; // weight: 0.00244
+  214->1778; // weight: 0.00732
+  214->711; // weight: 0.0220
+  214->712; // weight: 0.0220
+  214->715; // weight: 0.0659
+  214->716; // weight: 0.0659
+  214->695; // weight: 0.0132
+  214->696; // weight: -0.0659
+  214->703; // weight: 0.0132
+  214->704; // weight: -0.0659
+  214->719; // weight: -0.119
+  214->720; // weight: 0.593
+  214->721; // weight: -0.119
+  214->722; // weight: 0.593
+  215->390; // weight: 0.00458
+  215->558; // weight: 0.00153
+  215->636; // weight: 0.0137
+  215->1778; // weight: 0.00458
+  215->711; // weight: -0.0247
+  215->712; // weight: 0.124
+  215->715; // weight: 0.00824
+  215->716; // weight: 0.0412
+  215->695; // weight: 0.0412
+  215->696; // weight: 0.00824
+  215->703; // weight: 0.124
+  215->704; // weight: -0.0247
+  215->719; // weight: -0.222
+  215->720; // weight: 0.0445
+  215->721; // weight: 1.11
+  215->722; // weight: -0.222
+  216->390; // weight: 0.00244
+  216->558; // weight: 0.00244
+  216->636; // weight: 0.00732
+  216->1778; // weight: 0.00732
+  216->711; // weight: 0.0132
+  216->712; // weight: -0.0659
+  216->715; // weight: 0.0132
+  216->716; // weight: -0.0659
+  216->695; // weight: 0.0220
+  216->696; // weight: 0.0220
+  216->703; // weight: 0.0659
+  216->704; // weight: 0.0659
+  216->719; // weight: -0.119
+  216->720; // weight: -0.119
+  216->721; // weight: 0.593
+  216->722; // weight: 0.593
+  217->390; // weight: 0.00153
+  217->558; // weight: 0.00458
+  217->636; // weight: 0.00458
+  217->1778; // weight: 0.0137
+  217->711; // weight: 0.00824
+  217->712; // weight: 0.0412
+  217->715; // weight: -0.0247
+  217->716; // weight: 0.124
+  217->695; // weight: 0.00824
+  217->696; // weight: 0.0412
+  217->703; // weight: -0.0247
+  217->704; // weight: 0.124
+  217->719; // weight: 0.0445
+  217->720; // weight: -0.222
+  217->721; // weight: -0.222
+  217->722; // weight: 1.11
+  48->636; // weight: 0.117
+  48->1215; // weight: 0.0391
+  48->707; // weight: 1.05
+  48->708; // weight: -0.211
+  60->476; // weight: 0.117
+  60->1215; // weight: 0.0391
+  60->713; // weight: 1.05
+  60->714; // weight: -0.211
+  88->390; // weight: 0.0137
+  88->636; // weight: 0.00458
+  88->476; // weight: 0.00458
+  88->1215; // weight: 0.00153
+  88->699; // weight: 0.124
+  88->700; // weight: -0.0247
+  88->707; // weight: 0.0412
+  88->708; // weight: 0.00824
+  88->711; // weight: 0.124
+  88->712; // weight: -0.0247
+  88->713; // weight: 0.0412
+  88->714; // weight: 0.00824
+  88->727; // weight: 1.11
+  88->728; // weight: -0.222
+  88->729; // weight: -0.222
+  88->730; // weight: 0.0445
+  89->390; // weight: 0.00732
+  89->636; // weight: 0.00732
+  89->476; // weight: 0.00244
+  89->1215; // weight: 0.00244
+  89->699; // weight: -0.0659
+  89->700; // weight: 0.0132
+  89->707; // weight: -0.0659
+  89->708; // weight: 0.0132
+  89->711; // weight: 0.0659
+  89->712; // weight: 0.0659
+  89->713; // weight: 0.0220
+  89->714; // weight: 0.0220
+  89->727; // weight: 0.593
+  89->728; // weight: 0.593
+  89->729; // weight: -0.119
+  89->730; // weight: -0.119
+  90->390; // weight: 0.00458
+  90->636; // weight: 0.0137
+  90->476; // weight: 0.00153
+  90->1215; // weight: 0.00458
+  90->699; // weight: 0.0412
+  90->700; // weight: 0.00824
+  90->707; // weight: 0.124
+  90->708; // weight: -0.0247
+  90->711; // weight: -0.0247
+  90->712; // weight: 0.124
+  90->713; // weight: 0.00824
+  90->714; // weight: 0.0412
+  90->727; // weight: -0.222
+  90->728; // weight: 1.11
+  90->729; // weight: 0.0445
+  90->730; // weight: -0.222
+  91->390; // weight: 0.00732
+  91->636; // weight: 0.00244
+  91->476; // weight: 0.00732
+  91->1215; // weight: 0.00244
+  91->699; // weight: 0.0659
+  91->700; // weight: 0.0659
+  91->707; // weight: 0.0220
+  91->708; // weight: 0.0220
+  91->711; // weight: -0.0659
+  91->712; // weight: 0.0132
+  91->713; // weight: -0.0659
+  91->714; // weight: 0.0132
+  91->727; // weight: 0.593
+  91->728; // weight: -0.119
+  91->729; // weight: 0.593
+  91->730; // weight: -0.119
+  92->390; // weight: 0.00391
+  92->636; // weight: 0.00391
+  92->476; // weight: 0.00391
+  92->1215; // weight: 0.00391
+  92->699; // weight: -0.0352
+  92->700; // weight: -0.0352
+  92->707; // weight: -0.0352
+  92->708; // weight: -0.0352
+  92->711; // weight: -0.0352
+  92->712; // weight: -0.0352
+  92->713; // weight: -0.0352
+  92->714; // weight: -0.0352
+  92->727; // weight: 0.316
+  92->728; // weight: 0.316
+  92->729; // weight: 0.316
+  92->730; // weight: 0.316
+  93->390; // weight: 0.00244
+  93->636; // weight: 0.00732
+  93->476; // weight: 0.00244
+  93->1215; // weight: 0.00732
+  93->699; // weight: 0.0220
+  93->700; // weight: 0.0220
+  93->707; // weight: 0.0659
+  93->708; // weight: 0.0659
+  93->711; // weight: 0.0132
+  93->712; // weight: -0.0659
+  93->713; // weight: 0.0132
+  93->714; // weight: -0.0659
+  93->727; // weight: -0.119
+  93->728; // weight: 0.593
+  93->729; // weight: -0.119
+  93->730; // weight: 0.593
+  94->390; // weight: 0.00458
+  94->636; // weight: 0.00153
+  94->476; // weight: 0.0137
+  94->1215; // weight: 0.00458
+  94->699; // weight: -0.0247
+  94->700; // weight: 0.124
+  94->707; // weight: 0.00824
+  94->708; // weight: 0.0412
+  94->711; // weight: 0.0412
+  94->712; // weight: 0.00824
+  94->713; // weight: 0.124
+  94->714; // weight: -0.0247
+  94->727; // weight: -0.222
+  94->728; // weight: 0.0445
+  94->729; // weight: 1.11
+  94->730; // weight: -0.222
+  95->390; // weight: 0.00244
+  95->636; // weight: 0.00244
+  95->476; // weight: 0.00732
+  95->1215; // weight: 0.00732
+  95->699; // weight: 0.0132
+  95->700; // weight: -0.0659
+  95->707; // weight: 0.0132
+  95->708; // weight: -0.0659
+  95->711; // weight: 0.0220
+  95->712; // weight: 0.0220
+  95->713; // weight: 0.0659
+  95->714; // weight: 0.0659
+  95->727; // weight: -0.119
+  95->728; // weight: -0.119
+  95->729; // weight: 0.593
+  95->730; // weight: 0.593
+  96->390; // weight: 0.00153
+  96->636; // weight: 0.00458
+  96->476; // weight: 0.00458
+  96->1215; // weight: 0.0137
+  96->699; // weight: 0.00824
+  96->700; // weight: 0.0412
+  96->707; // weight: -0.0247
+  96->708; // weight: 0.124
+  96->711; // weight: 0.00824
+  96->712; // weight: 0.0412
+  96->713; // weight: -0.0247
+  96->714; // weight: 0.124
+  96->727; // weight: 0.0445
+  96->728; // weight: -0.222
+  96->729; // weight: -0.222
+  96->730; // weight: 1.11
+  755->476; // weight: -0.333
+  755->484; // weight: 0.333
+  755->754; // weight: 1.00
+  761->1215; // weight: -0.333
+  761->1227; // weight: 0.333
+  761->760; // weight: 1.00
+  714->476; // weight: -0.333
+  714->1215; // weight: 0.333
+  714->713; // weight: 1.00
+  765->484; // weight: -0.333
+  765->1227; // weight: 0.333
+  765->764; // weight: 1.00
+  773->754; // weight: -0.333
+  773->760; // weight: 0.333
+  773->772; // weight: 1.00
+  774->713; // weight: -0.333
+  774->764; // weight: 0.333
+  774->772; // weight: 1.00
+  775->476; // weight: 0.111
+  775->1215; // weight: -0.111
+  775->484; // weight: -0.111
+  775->1227; // weight: 0.111
+  775->754; // weight: -0.333
+  775->760; // weight: 0.333
+  775->713; // weight: -0.333
+  775->764; // weight: 0.333
+  775->772; // weight: 1.00
+  1169->476; // weight: 0.0625
+  1169->1215; // weight: -0.0312
+  1169->484; // weight: -0.0312
+  1169->1227; // weight: 0.0156
+  1169->754; // weight: -0.281
+  1169->760; // weight: 0.141
+  1169->713; // weight: -0.281
+  1169->764; // weight: 0.141
+  1169->772; // weight: 1.27
+  1175->476; // weight: -0.0469
+  1175->1215; // weight: 0.0234
+  1175->484; // weight: 0.00781
+  1175->1227; // weight: 0.00391
+  1175->754; // weight: -0.211
+  1175->760; // weight: 0.105
+  1175->713; // weight: 0.211
+  1175->764; // weight: -0.0352
+  1175->772; // weight: 0.949
+  1177->476; // weight: -0.0469
+  1177->1215; // weight: 0.00781
+  1177->484; // weight: 0.0234
+  1177->1227; // weight: 0.00391
+  1177->754; // weight: 0.211
+  1177->760; // weight: -0.0352
+  1177->713; // weight: -0.211
+  1177->764; // weight: 0.105
+  1177->772; // weight: 0.949
+  1180->476; // weight: 0.0352
+  1180->1215; // weight: 0.00586
+  1180->484; // weight: 0.00586
+  1180->1227; // weight: 0.000977
+  1180->754; // weight: 0.158
+  1180->760; // weight: -0.0264
+  1180->713; // weight: 0.158
+  1180->764; // weight: -0.0264
+  1180->772; // weight: 0.712
+  1216->1215; // weight: -0.250
+  1216->1227; // weight: 0.125
+  1216->760; // weight: 1.12
+  1219->1215; // weight: 0.188
+  1219->1227; // weight: -0.0312
+  1219->760; // weight: 0.844
+  1221->476; // weight: 0.0781
+  1221->1215; // weight: -0.117
+  1221->484; // weight: -0.0391
+  1221->1227; // weight: 0.0586
+  1221->754; // weight: -0.352
+  1221->760; // weight: 0.527
+  1221->713; // weight: -0.211
+  1221->764; // weight: 0.105
+  1221->772; // weight: 0.949
+  1224->476; // weight: -0.0586
+  1224->1215; // weight: 0.0879
+  1224->484; // weight: 0.00977
+  1224->1227; // weight: -0.0146
+  1224->754; // weight: -0.264
+  1224->760; // weight: 0.396
+  1224->713; // weight: 0.158
+  1224->764; // weight: -0.0264
+  1224->772; // weight: 0.712
+  1184->484; // weight: -0.250
+  1184->1227; // weight: 0.125
+  1184->764; // weight: 1.12
+  1188->476; // weight: 0.0781
+  1188->1215; // weight: -0.0391
+  1188->484; // weight: -0.117
+  1188->1227; // weight: 0.0586
+  1188->754; // weight: -0.211
+  1188->760; // weight: 0.105
+  1188->713; // weight: -0.352
+  1188->764; // weight: 0.527
+  1188->772; // weight: 0.949
+  1189->484; // weight: 0.188
+  1189->1227; // weight: -0.0312
+  1189->764; // weight: 0.844
+  1191->476; // weight: -0.0586
+  1191->1215; // weight: 0.00977
+  1191->484; // weight: 0.0879
+  1191->1227; // weight: -0.0146
+  1191->754; // weight: 0.158
+  1191->760; // weight: -0.0264
+  1191->713; // weight: -0.264
+  1191->764; // weight: 0.396
+  1191->772; // weight: 0.712
+  1229->1215; // weight: -0.312
+  1229->1227; // weight: 0.469
+  1229->760; // weight: 0.844
+  1230->484; // weight: -0.312
+  1230->1227; // weight: 0.469
+  1230->764; // weight: 0.844
+  1232->476; // weight: 0.0977
+  1232->1215; // weight: -0.146
+  1232->484; // weight: -0.146
+  1232->1227; // weight: 0.220
+  1232->754; // weight: -0.264
+  1232->760; // weight: 0.396
+  1232->713; // weight: -0.264
+  1232->764; // weight: 0.396
+  1232->772; // weight: 0.712
+  753->484; // weight: -0.333
+  753->2558; // weight: 0.333
+  753->752; // weight: 1.00
+  757->598; // weight: -0.333
+  757->2558; // weight: 0.333
+  757->756; // weight: 1.00
+  781->697; // weight: -0.333
+  781->752; // weight: 0.333
+  781->780; // weight: 1.00
+  782->754; // weight: -0.333
+  782->756; // weight: 0.333
+  782->780; // weight: 1.00
+  783->476; // weight: 0.111
+  783->484; // weight: -0.111
+  783->598; // weight: -0.111
+  783->2558; // weight: 0.111
+  783->697; // weight: -0.333
+  783->752; // weight: 0.333
+  783->754; // weight: -0.333
+  783->756; // weight: 0.333
+  783->780; // weight: 1.00
+  2523->476; // weight: 0.0625
+  2523->484; // weight: -0.0312
+  2523->598; // weight: -0.0312
+  2523->2558; // weight: 0.0156
+  2523->697; // weight: -0.281
+  2523->752; // weight: 0.141
+  2523->754; // weight: -0.281
+  2523->756; // weight: 0.141
+  2523->780; // weight: 1.27
+  2525->476; // weight: -0.0469
+  2525->484; // weight: 0.0234
+  2525->598; // weight: 0.00781
+  2525->2558; // weight: 0.00391
+  2525->697; // weight: -0.211
+  2525->752; // weight: 0.105
+  2525->754; // weight: 0.211
+  2525->756; // weight: -0.0352
+  2525->780; // weight: 0.949
+  2526->476; // weight: -0.0469
+  2526->484; // weight: 0.00781
+  2526->598; // weight: 0.0234
+  2526->2558; // weight: 0.00391
+  2526->697; // weight: 0.211
+  2526->752; // weight: -0.0352
+  2526->754; // weight: -0.211
+  2526->756; // weight: 0.105
+  2526->780; // weight: 0.949
+  2535->476; // weight: 0.0352
+  2535->484; // weight: 0.00586
+  2535->598; // weight: 0.00586
+  2535->2558; // weight: 0.000977
+  2535->697; // weight: 0.158
+  2535->752; // weight: -0.0264
+  2535->754; // weight: 0.158
+  2535->756; // weight: -0.0264
+  2535->780; // weight: 0.712
+  2537->484; // weight: -0.250
+  2537->2558; // weight: 0.125
+  2537->752; // weight: 1.12
+  2538->484; // weight: 0.188
+  2538->2558; // weight: -0.0312
+  2538->752; // weight: 0.844
+  2539->476; // weight: 0.0781
+  2539->484; // weight: -0.117
+  2539->598; // weight: -0.0391
+  2539->2558; // weight: 0.0586
+  2539->697; // weight: -0.352
+  2539->752; // weight: 0.527
+  2539->754; // weight: -0.211
+  2539->756; // weight: 0.105
+  2539->780; // weight: 0.949
+  2545->476; // weight: -0.0586
+  2545->484; // weight: 0.0879
+  2545->598; // weight: 0.00977
+  2545->2558; // weight: -0.0146
+  2545->697; // weight: -0.264
+  2545->752; // weight: 0.396
+  2545->754; // weight: 0.158
+  2545->756; // weight: -0.0264
+  2545->780; // weight: 0.712
+  2547->598; // weight: -0.250
+  2547->2558; // weight: 0.125
+  2547->756; // weight: 1.12
+  2549->476; // weight: 0.0781
+  2549->484; // weight: -0.0391
+  2549->598; // weight: -0.117
+  2549->2558; // weight: 0.0586
+  2549->697; // weight: -0.211
+  2549->752; // weight: 0.105
+  2549->754; // weight: -0.352
+  2549->756; // weight: 0.527
+  2549->780; // weight: 0.949
+  2550->598; // weight: 0.188
+  2550->2558; // weight: -0.0312
+  2550->756; // weight: 0.844
+  2556->476; // weight: -0.0586
+  2556->484; // weight: 0.00977
+  2556->598; // weight: 0.0879
+  2556->2558; // weight: -0.0146
+  2556->697; // weight: 0.158
+  2556->752; // weight: -0.0264
+  2556->754; // weight: -0.264
+  2556->756; // weight: 0.396
+  2556->780; // weight: 0.712
+  2559->484; // weight: -0.312
+  2559->2558; // weight: 0.469
+  2559->752; // weight: 0.844
+  2560->598; // weight: -0.312
+  2560->2558; // weight: 0.469
+  2560->756; // weight: 0.844
+  2564->476; // weight: 0.0977
+  2564->484; // weight: -0.146
+  2564->598; // weight: -0.146
+  2564->2558; // weight: 0.220
+  2564->697; // weight: -0.264
+  2564->752; // weight: 0.396
+  2564->754; // weight: -0.264
+  2564->756; // weight: 0.396
+  2564->780; // weight: 0.712
+  716->558; // weight: -0.333
+  716->1778; // weight: 0.333
+  716->715; // weight: 1.00
+  810->578; // weight: -0.333
+  810->1798; // weight: 0.333
+  810->809; // weight: 1.00
+  798->558; // weight: -0.333
+  798->578; // weight: 0.333
+  798->797; // weight: 1.00
+  804->1778; // weight: -0.333
+  804->1798; // weight: 0.333
+  804->803; // weight: 1.00
+  814->715; // weight: -0.333
+  814->809; // weight: 0.333
+  814->813; // weight: 1.00
+  815->797; // weight: -0.333
+  815->803; // weight: 0.333
+  815->813; // weight: 1.00
+  816->558; // weight: 0.111
+  816->578; // weight: -0.111
+  816->1778; // weight: -0.111
+  816->1798; // weight: 0.111
+  816->715; // weight: -0.333
+  816->809; // weight: 0.333
+  816->797; // weight: -0.333
+  816->803; // weight: 0.333
+  816->813; // weight: 1.00
+  1728->558; // weight: 0.0625
+  1728->578; // weight: -0.0312
+  1728->1778; // weight: -0.0312
+  1728->1798; // weight: 0.0156
+  1728->715; // weight: -0.281
+  1728->809; // weight: 0.141
+  1728->797; // weight: -0.281
+  1728->803; // weight: 0.141
+  1728->813; // weight: 1.27
+  1736->558; // weight: -0.0469
+  1736->578; // weight: 0.0234
+  1736->1778; // weight: 0.00781
+  1736->1798; // weight: 0.00391
+  1736->715; // weight: -0.211
+  1736->809; // weight: 0.105
+  1736->797; // weight: 0.211
+  1736->803; // weight: -0.0352
+  1736->813; // weight: 0.949
+  1732->558; // weight: -0.0469
+  1732->578; // weight: 0.00781
+  1732->1778; // weight: 0.0234
+  1732->1798; // weight: 0.00391
+  1732->715; // weight: 0.211
+  1732->809; // weight: -0.0352
+  1732->797; // weight: -0.211
+  1732->803; // weight: 0.105
+  1732->813; // weight: 0.949
+  1737->558; // weight: 0.0352
+  1737->578; // weight: 0.00586
+  1737->1778; // weight: 0.00586
+  1737->1798; // weight: 0.000977
+  1737->715; // weight: 0.158
+  1737->809; // weight: -0.0264
+  1737->797; // weight: 0.158
+  1737->803; // weight: -0.0264
+  1737->813; // weight: 0.712
+  1755->578; // weight: -0.250
+  1755->1798; // weight: 0.125
+  1755->809; // weight: 1.12
+  1760->578; // weight: 0.188
+  1760->1798; // weight: -0.0312
+  1760->809; // weight: 0.844
+  1758->558; // weight: 0.0781
+  1758->578; // weight: -0.117
+  1758->1778; // weight: -0.0391
+  1758->1798; // weight: 0.0586
+  1758->715; // weight: -0.352
+  1758->809; // weight: 0.527
+  1758->797; // weight: -0.211
+  1758->803; // weight: 0.105
+  1758->813; // weight: 0.949
+  1761->558; // weight: -0.0586
+  1761->578; // weight: 0.0879
+  1761->1778; // weight: 0.00977
+  1761->1798; // weight: -0.0146
+  1761->715; // weight: -0.264
+  1761->809; // weight: 0.396
+  1761->797; // weight: 0.158
+  1761->803; // weight: -0.0264
+  1761->813; // weight: 0.712
+  1779->1778; // weight: -0.250
+  1779->1798; // weight: 0.125
+  1779->803; // weight: 1.12
+  1784->558; // weight: 0.0781
+  1784->578; // weight: -0.0391
+  1784->1778; // weight: -0.117
+  1784->1798; // weight: 0.0586
+  1784->715; // weight: -0.211
+  1784->809; // weight: 0.105
+  1784->797; // weight: -0.352
+  1784->803; // weight: 0.527
+  1784->813; // weight: 0.949
+  1780->1778; // weight: 0.188
+  1780->1798; // weight: -0.0312
+  1780->803; // weight: 0.844
+  1785->558; // weight: -0.0586
+  1785->578; // weight: 0.00977
+  1785->1778; // weight: 0.0879
+  1785->1798; // weight: -0.0146
+  1785->715; // weight: 0.158
+  1785->809; // weight: -0.0264
+  1785->797; // weight: -0.264
+  1785->803; // weight: 0.396
+  1785->813; // weight: 0.712
+  1801->578; // weight: -0.312
+  1801->1798; // weight: 0.469
+  1801->809; // weight: 0.844
+  1799->1778; // weight: -0.312
+  1799->1798; // weight: 0.469
+  1799->803; // weight: 0.844
+  1802->558; // weight: 0.0977
+  1802->578; // weight: -0.146
+  1802->1778; // weight: -0.146
+  1802->1798; // weight: 0.220
+  1802->715; // weight: -0.264
+  1802->809; // weight: 0.396
+  1802->797; // weight: -0.264
+  1802->803; // weight: 0.396
+  1802->813; // weight: 0.712
+  800->598; // weight: -0.333
+  800->2649; // weight: 0.333
+  800->799; // weight: 1.00
+  802->578; // weight: -0.333
+  802->2649; // weight: 0.333
+  802->801; // weight: 1.00
+  826->797; // weight: -0.333
+  826->799; // weight: 0.333
+  826->825; // weight: 1.00
+  827->701; // weight: -0.333
+  827->801; // weight: 0.333
+  827->825; // weight: 1.00
+  828->558; // weight: 0.111
+  828->598; // weight: -0.111
+  828->578; // weight: -0.111
+  828->2649; // weight: 0.111
+  828->797; // weight: -0.333
+  828->799; // weight: 0.333
+  828->701; // weight: -0.333
+  828->801; // weight: 0.333
+  828->825; // weight: 1.00
+  2615->558; // weight: 0.0625
+  2615->598; // weight: -0.0312
+  2615->578; // weight: -0.0312
+  2615->2649; // weight: 0.0156
+  2615->797; // weight: -0.281
+  2615->799; // weight: 0.141
+  2615->701; // weight: -0.281
+  2615->801; // weight: 0.141
+  2615->825; // weight: 1.27
+  2616->558; // weight: -0.0469
+  2616->598; // weight: 0.0234
+  2616->578; // weight: 0.00781
+  2616->2649; // weight: 0.00391
+  2616->797; // weight: -0.211
+  2616->799; // weight: 0.105
+  2616->701; // weight: 0.211
+  2616->801; // weight: -0.0352
+  2616->825; // weight: 0.949
+  2618->558; // weight: -0.0469
+  2618->598; // weight: 0.00781
+  2618->578; // weight: 0.0234
+  2618->2649; // weight: 0.00391
+  2618->797; // weight: 0.211
+  2618->799; // weight: -0.0352
+  2618->701; // weight: -0.211
+  2618->801; // weight: 0.105
+  2618->825; // weight: 0.949
+  2627->558; // weight: 0.0352
+  2627->598; // weight: 0.00586
+  2627->578; // weight: 0.00586
+  2627->2649; // weight: 0.000977
+  2627->797; // weight: 0.158
+  2627->799; // weight: -0.0264
+  2627->701; // weight: 0.158
+  2627->801; // weight: -0.0264
+  2627->825; // weight: 0.712
+  2629->598; // weight: -0.250
+  2629->2649; // weight: 0.125
+  2629->799; // weight: 1.12
+  2630->598; // weight: 0.188
+  2630->2649; // weight: -0.0312
+  2630->799; // weight: 0.844
+  2632->558; // weight: 0.0781
+  2632->598; // weight: -0.117
+  2632->578; // weight: -0.0391
+  2632->2649; // weight: 0.0586
+  2632->797; // weight: -0.352
+  2632->799; // weight: 0.527
+  2632->701; // weight: -0.211
+  2632->801; // weight: 0.105
+  2632->825; // weight: 0.949
+  2637->558; // weight: -0.0586
+  2637->598; // weight: 0.0879
+  2637->578; // weight: 0.00977
+  2637->2649; // weight: -0.0146
+  2637->797; // weight: -0.264
+  2637->799; // weight: 0.396
+  2637->701; // weight: 0.158
+  2637->801; // weight: -0.0264
+  2637->825; // weight: 0.712
+  2639->578; // weight: -0.250
+  2639->2649; // weight: 0.125
+  2639->801; // weight: 1.12
+  2640->558; // weight: 0.0781
+  2640->598; // weight: -0.0391
+  2640->578; // weight: -0.117
+  2640->2649; // weight: 0.0586
+  2640->797; // weight: -0.211
+  2640->799; // weight: 0.105
+  2640->701; // weight: -0.352
+  2640->801; // weight: 0.527
+  2640->825; // weight: 0.949
+  2641->578; // weight: 0.188
+  2641->2649; // weight: -0.0312
+  2641->801; // weight: 0.844
+  2647->558; // weight: -0.0586
+  2647->598; // weight: 0.00977
+  2647->578; // weight: 0.0879
+  2647->2649; // weight: -0.0146
+  2647->797; // weight: 0.158
+  2647->799; // weight: -0.0264
+  2647->701; // weight: -0.264
+  2647->801; // weight: 0.396
+  2647->825; // weight: 0.712
+  2650->598; // weight: -0.312
+  2650->2649; // weight: 0.469
+  2650->799; // weight: 0.844
+  2651->578; // weight: -0.312
+  2651->2649; // weight: 0.469
+  2651->801; // weight: 0.844
+  2655->558; // weight: 0.0977
+  2655->598; // weight: -0.146
+  2655->578; // weight: -0.146
+  2655->2649; // weight: 0.220
+  2655->797; // weight: -0.264
+  2655->799; // weight: 0.396
+  2655->701; // weight: -0.264
+  2655->801; // weight: 0.396
+  2655->825; // weight: 0.712
+  843->2558; // weight: -0.333
+  843->2713; // weight: 0.333
+  843->842; // weight: 1.00
+  845->2649; // weight: -0.333
+  845->2713; // weight: 0.333
+  845->844; // weight: 1.00
+  861->799; // weight: -0.333
+  861->842; // weight: 0.333
+  861->860; // weight: 1.00
+  862->756; // weight: -0.333
+  862->844; // weight: 0.333
+  862->860; // weight: 1.00
+  863->598; // weight: 0.111
+  863->2558; // weight: -0.111
+  863->2649; // weight: -0.111
+  863->2713; // weight: 0.111
+  863->799; // weight: -0.333
+  863->842; // weight: 0.333
+  863->756; // weight: -0.333
+  863->844; // weight: 0.333
+  863->860; // weight: 1.00
+  2689->598; // weight: 0.0625
+  2689->2558; // weight: -0.0312
+  2689->2649; // weight: -0.0312
+  2689->2713; // weight: 0.0156
+  2689->799; // weight: -0.281
+  2689->842; // weight: 0.141
+  2689->756; // weight: -0.281
+  2689->844; // weight: 0.141
+  2689->860; // weight: 1.27
+  2690->598; // weight: -0.0469
+  2690->2558; // weight: 0.0234
+  2690->2649; // weight: 0.00781
+  2690->2713; // weight: 0.00391
+  2690->799; // weight: -0.211
+  2690->842; // weight: 0.105
+  2690->756; // weight: 0.211
+  2690->844; // weight: -0.0352
+  2690->860; // weight: 0.949
+  2691->598; // weight: -0.0469
+  2691->2558; // weight: 0.00781
+  2691->2649; // weight: 0.0234
+  2691->2713; // weight: 0.00391
+  2691->799; // weight: 0.211
+  2691->842; // weight: -0.0352
+  2691->756; // weight: -0.211
+  2691->844; // weight: 0.105
+  2691->860; // weight: 0.949
+  2695->598; // weight: 0.0352
+  2695->2558; // weight: 0.00586
+  2695->2649; // weight: 0.00586
+  2695->2713; // weight: 0.000977
+  2695->799; // weight: 0.158
+  2695->842; // weight: -0.0264
+  2695->756; // weight: 0.158
+  2695->844; // weight: -0.0264
+  2695->860; // weight: 0.712
+  2697->2558; // weight: -0.250
+  2697->2713; // weight: 0.125
+  2697->842; // weight: 1.12
+  2698->2558; // weight: 0.188
+  2698->2713; // weight: -0.0312
+  2698->842; // weight: 0.844
+  2699->598; // weight: 0.0781
+  2699->2558; // weight: -0.117
+  2699->2649; // weight: -0.0391
+  2699->2713; // weight: 0.0586
+  2699->799; // weight: -0.352
+  2699->842; // weight: 0.527
+  2699->756; // weight: -0.211
+  2699->844; // weight: 0.105
+  2699->860; // weight: 0.949
+  2703->598; // weight: -0.0586
+  2703->2558; // weight: 0.0879
+  2703->2649; // weight: 0.00977
+  2703->2713; // weight: -0.0146
+  2703->799; // weight: -0.264
+  2703->842; // weight: 0.396
+  2703->756; // weight: 0.158
+  2703->844; // weight: -0.0264
+  2703->860; // weight: 0.712
+  2705->2649; // weight: -0.250
+  2705->2713; // weight: 0.125
+  2705->844; // weight: 1.12
+  2706->598; // weight: 0.0781
+  2706->2558; // weight: -0.0391
+  2706->2649; // weight: -0.117
+  2706->2713; // weight: 0.0586
+  2706->799; // weight: -0.211
+  2706->842; // weight: 0.105
+  2706->756; // weight: -0.352
+  2706->844; // weight: 0.527
+  2706->860; // weight: 0.949
+  2707->2649; // weight: 0.188
+  2707->2713; // weight: -0.0312
+  2707->844; // weight: 0.844
+  2711->598; // weight: -0.0586
+  2711->2558; // weight: 0.00977
+  2711->2649; // weight: 0.0879
+  2711->2713; // weight: -0.0146
+  2711->799; // weight: 0.158
+  2711->842; // weight: -0.0264
+  2711->756; // weight: -0.264
+  2711->844; // weight: 0.396
+  2711->860; // weight: 0.712
+  2714->2558; // weight: -0.312
+  2714->2713; // weight: 0.469
+  2714->842; // weight: 0.844
+  2715->2649; // weight: -0.312
+  2715->2713; // weight: 0.469
+  2715->844; // weight: 0.844
+  2719->598; // weight: 0.0977
+  2719->2558; // weight: -0.146
+  2719->2649; // weight: -0.146
+  2719->2713; // weight: 0.220
+  2719->799; // weight: -0.264
+  2719->842; // weight: 0.396
+  2719->756; // weight: -0.264
+  2719->844; // weight: 0.396
+  2719->860; // weight: 0.712
+  886->636; // weight: -0.333
+  886->686; // weight: 0.333
+  886->885; // weight: 1.00
+  890->1778; // weight: -0.333
+  890->2005; // weight: 0.333
+  890->889; // weight: 1.00
+  704->636; // weight: -0.333
+  704->1778; // weight: 0.333
+  704->703; // weight: 1.00
+  878->686; // weight: -0.333
+  878->2005; // weight: 0.333
+  878->877; // weight: 1.00
+  894->885; // weight: -0.333
+  894->889; // weight: 0.333
+  894->893; // weight: 1.00
+  895->703; // weight: -0.333
+  895->877; // weight: 0.333
+  895->893; // weight: 1.00
+  896->636; // weight: 0.111
+  896->1778; // weight: -0.111
+  896->686; // weight: -0.111
+  896->2005; // weight: 0.111
+  896->885; // weight: -0.333
+  896->889; // weight: 0.333
+  896->703; // weight: -0.333
+  896->877; // weight: 0.333
+  896->893; // weight: 1.00
+  1941->636; // weight: 0.0625
+  1941->1778; // weight: -0.0312
+  1941->686; // weight: -0.0312
+  1941->2005; // weight: 0.0156
+  1941->885; // weight: -0.281
+  1941->889; // weight: 0.141
+  1941->703; // weight: -0.281
+  1941->877; // weight: 0.141
+  1941->893; // weight: 1.27
+  1948->636; // weight: -0.0469
+  1948->1778; // weight: 0.0234
+  1948->686; // weight: 0.00781
+  1948->2005; // weight: 0.00391
+  1948->885; // weight: -0.211
+  1948->889; // weight: 0.105
+  1948->703; // weight: 0.211
+  1948->877; // weight: -0.0352
+  1948->893; // weight: 0.949
+  1945->636; // weight: -0.0469
+  1945->1778; // weight: 0.00781
+  1945->686; // weight: 0.0234
+  1945->2005; // weight: 0.00391
+  1945->885; // weight: 0.211
+  1945->889; // weight: -0.0352
+  1945->703; // weight: -0.211
+  1945->877; // weight: 0.105
+  1945->893; // weight: 0.949
+  1949->636; // weight: 0.0352
+  1949->1778; // weight: 0.00586
+  1949->686; // weight: 0.00586
+  1949->2005; // weight: 0.000977
+  1949->885; // weight: 0.158
+  1949->889; // weight: -0.0264
+  1949->703; // weight: 0.158
+  1949->877; // weight: -0.0264
+  1949->893; // weight: 0.712
+  1965->1778; // weight: -0.250
+  1965->2005; // weight: 0.125
+  1965->889; // weight: 1.12
+  1969->1778; // weight: 0.188
+  1969->2005; // weight: -0.0312
+  1969->889; // weight: 0.844
+  1967->636; // weight: 0.0781
+  1967->1778; // weight: -0.117
+  1967->686; // weight: -0.0391
+  1967->2005; // weight: 0.0586
+  1967->885; // weight: -0.352
+  1967->889; // weight: 0.527
+  1967->703; // weight: -0.211
+  1967->877; // weight: 0.105
+  1967->893; // weight: 0.949
+  1970->636; // weight: -0.0586
+  1970->1778; // weight: 0.0879
+  1970->686; // weight: 0.00977
+  1970->2005; // weight: -0.0146
+  1970->885; // weight: -0.264
+  1970->889; // weight: 0.396
+  1970->703; // weight: 0.158
+  1970->877; // weight: -0.0264
+  1970->893; // weight: 0.712
+  1987->686; // weight: -0.250
+  1987->2005; // weight: 0.125
+  1987->877; // weight: 1.12
+  1991->636; // weight: 0.0781
+  1991->1778; // weight: -0.0391
+  1991->686; // weight: -0.117
+  1991->2005; // weight: 0.0586
+  1991->885; // weight: -0.211
+  1991->889; // weight: 0.105
+  1991->703; // weight: -0.352
+  1991->877; // weight: 0.527
+  1991->893; // weight: 0.949
+  1988->686; // weight: 0.188
+  1988->2005; // weight: -0.0312
+  1988->877; // weight: 0.844
+  1992->636; // weight: -0.0586
+  1992->1778; // weight: 0.00977
+  1992->686; // weight: 0.0879
+  1992->2005; // weight: -0.0146
+  1992->885; // weight: 0.158
+  1992->889; // weight: -0.0264
+  1992->703; // weight: -0.264
+  1992->877; // weight: 0.396
+  1992->893; // weight: 0.712
+  2008->1778; // weight: -0.312
+  2008->2005; // weight: 0.469
+  2008->889; // weight: 0.844
+  2006->686; // weight: -0.312
+  2006->2005; // weight: 0.469
+  2006->877; // weight: 0.844
+  2009->636; // weight: 0.0977
+  2009->1778; // weight: -0.146
+  2009->686; // weight: -0.146
+  2009->2005; // weight: 0.220
+  2009->885; // weight: -0.264
+  2009->889; // weight: 0.396
+  2009->703; // weight: -0.264
+  2009->877; // weight: 0.396
+  2009->893; // weight: 0.712
+  708->636; // weight: -0.333
+  708->1215; // weight: 0.333
+  708->707; // weight: 1.00
+  882->686; // weight: -0.333
+  882->1517; // weight: 0.333
+  882->881; // weight: 1.00
+  888->1215; // weight: -0.333
+  888->1517; // weight: 0.333
+  888->887; // weight: 1.00
+  902->707; // weight: -0.333
+  902->881; // weight: 0.333
+  902->901; // weight: 1.00
+  903->885; // weight: -0.333
+  903->887; // weight: 0.333
+  903->901; // weight: 1.00
+  904->636; // weight: 0.111
+  904->686; // weight: -0.111
+  904->1215; // weight: -0.111
+  904->1517; // weight: 0.111
+  904->707; // weight: -0.333
+  904->881; // weight: 0.333
+  904->885; // weight: -0.333
+  904->887; // weight: 0.333
+  904->901; // weight: 1.00
+  1461->636; // weight: 0.0625
+  1461->686; // weight: -0.0312
+  1461->1215; // weight: -0.0312
+  1461->1517; // weight: 0.0156
+  1461->707; // weight: -0.281
+  1461->881; // weight: 0.141
+  1461->885; // weight: -0.281
+  1461->887; // weight: 0.141
+  1461->901; // weight: 1.27
+  1467->636; // weight: -0.0469
+  1467->686; // weight: 0.0234
+  1467->1215; // weight: 0.00781
+  1467->1517; // weight: 0.00391
+  1467->707; // weight: -0.211
+  1467->881; // weight: 0.105
+  1467->885; // weight: 0.211
+  1467->887; // weight: -0.0352
+  1467->901; // weight: 0.949
+  1469->636; // weight: -0.0469
+  1469->686; // weight: 0.00781
+  1469->1215; // weight: 0.0234
+  1469->1517; // weight: 0.00391
+  1469->707; // weight: 0.211
+  1469->881; // weight: -0.0352
+  1469->885; // weight: -0.211
+  1469->887; // weight: 0.105
+  1469->901; // weight: 0.949
+  1472->636; // weight: 0.0352
+  1472->686; // weight: 0.00586
+  1472->1215; // weight: 0.00586
+  1472->1517; // weight: 0.000977
+  1472->707; // weight: 0.158
+  1472->881; // weight: -0.0264
+  1472->885; // weight: 0.158
+  1472->887; // weight: -0.0264
+  1472->901; // weight: 0.712
+  1506->686; // weight: -0.250
+  1506->1517; // weight: 0.125
+  1506->881; // weight: 1.12
+  1509->686; // weight: 0.188
+  1509->1517; // weight: -0.0312
+  1509->881; // weight: 0.844
+  1511->636; // weight: 0.0781
+  1511->686; // weight: -0.117
+  1511->1215; // weight: -0.0391
+  1511->1517; // weight: 0.0586
+  1511->707; // weight: -0.352
+  1511->881; // weight: 0.527
+  1511->885; // weight: -0.211
+  1511->887; // weight: 0.105
+  1511->901; // weight: 0.949
+  1514->636; // weight: -0.0586
+  1514->686; // weight: 0.0879
+  1514->1215; // weight: 0.00977
+  1514->1517; // weight: -0.0146
+  1514->707; // weight: -0.264
+  1514->881; // weight: 0.396
+  1514->885; // weight: 0.158
+  1514->887; // weight: -0.0264
+  1514->901; // weight: 0.712
+  1476->1215; // weight: -0.250
+  1476->1517; // weight: 0.125
+  1476->887; // weight: 1.12
+  1479->636; // weight: 0.0781
+  1479->686; // weight: -0.0391
+  1479->1215; // weight: -0.117
+  1479->1517; // weight: 0.0586
+  1479->707; // weight: -0.211
+  1479->881; // weight: 0.105
+  1479->885; // weight: -0.352
+  1479->887; // weight: 0.527
+  1479->901; // weight: 0.949
+  1480->1215; // weight: 0.188
+  1480->1517; // weight: -0.0312
+  1480->887; // weight: 0.844
+  1482->636; // weight: -0.0586
+  1482->686; // weight: 0.00977
+  1482->1215; // weight: 0.0879
+  1482->1517; // weight: -0.0146
+  1482->707; // weight: 0.158
+  1482->881; // weight: -0.0264
+  1482->885; // weight: -0.264
+  1482->887; // weight: 0.396
+  1482->901; // weight: 0.712
+  1519->686; // weight: -0.312
+  1519->1517; // weight: 0.469
+  1519->881; // weight: 0.844
+  1520->1215; // weight: -0.312
+  1520->1517; // weight: 0.469
+  1520->887; // weight: 0.844
+  1522->636; // weight: 0.0977
+  1522->686; // weight: -0.146
+  1522->1215; // weight: -0.146
+  1522->1517; // weight: 0.220
+  1522->707; // weight: -0.264
+  1522->881; // weight: 0.396
+  1522->885; // weight: -0.264
+  1522->887; // weight: 0.396
+  1522->901; // weight: 0.712
+  925->1517; // weight: -0.333
+  925->1581; // weight: 0.333
+  925->924; // weight: 1.00
+  929->1227; // weight: -0.333
+  929->1581; // weight: 0.333
+  929->928; // weight: 1.00
+  937->760; // weight: -0.333
+  937->924; // weight: 0.333
+  937->936; // weight: 1.00
+  938->887; // weight: -0.333
+  938->928; // weight: 0.333
+  938->936; // weight: 1.00
+  939->1215; // weight: 0.111
+  939->1517; // weight: -0.111
+  939->1227; // weight: -0.111
+  939->1581; // weight: 0.111
+  939->760; // weight: -0.333
+  939->924; // weight: 0.333
+  939->887; // weight: -0.333
+  939->928; // weight: 0.333
+  939->936; // weight: 1.00
+  1541->1215; // weight: 0.0625
+  1541->1517; // weight: -0.0312
+  1541->1227; // weight: -0.0312
+  1541->1581; // weight: 0.0156
+  1541->760; // weight: -0.281
+  1541->924; // weight: 0.141
+  1541->887; // weight: -0.281
+  1541->928; // weight: 0.141
+  1541->936; // weight: 1.27
+  1543->1215; // weight: -0.0469
+  1543->1517; // weight: 0.0234
+  1543->1227; // weight: 0.00781
+  1543->1581; // weight: 0.00391
+  1543->760; // weight: -0.211
+  1543->924; // weight: 0.105
+  1543->887; // weight: 0.211
+  1543->928; // weight: -0.0352
+  1543->936; // weight: 0.949
+  1544->1215; // weight: -0.0469
+  1544->1517; // weight: 0.00781
+  1544->1227; // weight: 0.0234
+  1544->1581; // weight: 0.00391
+  1544->760; // weight: 0.211
+  1544->924; // weight: -0.0352
+  1544->887; // weight: -0.211
+  1544->928; // weight: 0.105
+  1544->936; // weight: 0.949
+  1546->1215; // weight: 0.0352
+  1546->1517; // weight: 0.00586
+  1546->1227; // weight: 0.00586
+  1546->1581; // weight: 0.000977
+  1546->760; // weight: 0.158
+  1546->924; // weight: -0.0264
+  1546->887; // weight: 0.158
+  1546->928; // weight: -0.0264
+  1546->936; // weight: 0.712
+  1573->1517; // weight: -0.250
+  1573->1581; // weight: 0.125
+  1573->924; // weight: 1.12
+  1575->1517; // weight: 0.188
+  1575->1581; // weight: -0.0312
+  1575->924; // weight: 0.844
+  1576->1215; // weight: 0.0781
+  1576->1517; // weight: -0.117
+  1576->1227; // weight: -0.0391
+  1576->1581; // weight: 0.0586
+  1576->760; // weight: -0.352
+  1576->924; // weight: 0.527
+  1576->887; // weight: -0.211
+  1576->928; // weight: 0.105
+  1576->936; // weight: 0.949
+  1578->1215; // weight: -0.0586
+  1578->1517; // weight: 0.0879
+  1578->1227; // weight: 0.00977
+  1578->1581; // weight: -0.0146
+  1578->760; // weight: -0.264
+  1578->924; // weight: 0.396
+  1578->887; // weight: 0.158
+  1578->928; // weight: -0.0264
+  1578->936; // weight: 0.712
+  1549->1227; // weight: -0.250
+  1549->1581; // weight: 0.125
+  1549->928; // weight: 1.12
+  1551->1215; // weight: 0.0781
+  1551->1517; // weight: -0.0391
+  1551->1227; // weight: -0.117
+  1551->1581; // weight: 0.0586
+  1551->760; // weight: -0.211
+  1551->924; // weight: 0.105
+  1551->887; // weight: -0.352
+  1551->928; // weight: 0.527
+  1551->936; // weight: 0.949
+  1552->1227; // weight: 0.188
+  1552->1581; // weight: -0.0312
+  1552->928; // weight: 0.844
+  1554->1215; // weight: -0.0586
+  1554->1517; // weight: 0.00977
+  1554->1227; // weight: 0.0879
+  1554->1581; // weight: -0.0146
+  1554->760; // weight: 0.158
+  1554->924; // weight: -0.0264
+  1554->887; // weight: -0.264
+  1554->928; // weight: 0.396
+  1554->936; // weight: 0.712
+  1583->1517; // weight: -0.312
+  1583->1581; // weight: 0.469
+  1583->924; // weight: 0.844
+  1584->1227; // weight: -0.312
+  1584->1581; // weight: 0.469
+  1584->928; // weight: 0.844
+  1586->1215; // weight: 0.0977
+  1586->1517; // weight: -0.146
+  1586->1227; // weight: -0.146
+  1586->1581; // weight: 0.220
+  1586->760; // weight: -0.264
+  1586->924; // weight: 0.396
+  1586->887; // weight: -0.264
+  1586->928; // weight: 0.396
+  1586->936; // weight: 0.712
+  964->1798; // weight: -0.333
+  964->2149; // weight: 0.333
+  964->963; // weight: 1.00
+  958->2005; // weight: -0.333
+  958->2149; // weight: 0.333
+  958->957; // weight: 1.00
+  968->889; // weight: -0.333
+  968->963; // weight: 0.333
+  968->967; // weight: 1.00
+  969->803; // weight: -0.333
+  969->957; // weight: 0.333
+  969->967; // weight: 1.00
+  970->1778; // weight: 0.111
+  970->1798; // weight: -0.111
+  970->2005; // weight: -0.111
+  970->2149; // weight: 0.111
+  970->889; // weight: -0.333
+  970->963; // weight: 0.333
+  970->803; // weight: -0.333
+  970->957; // weight: 0.333
+  970->967; // weight: 1.00
+  2101->1778; // weight: 0.0625
+  2101->1798; // weight: -0.0312
+  2101->2005; // weight: -0.0312
+  2101->2149; // weight: 0.0156
+  2101->889; // weight: -0.281
+  2101->963; // weight: 0.141
+  2101->803; // weight: -0.281
+  2101->957; // weight: 0.141
+  2101->967; // weight: 1.27
+  2104->1778; // weight: -0.0469
+  2104->1798; // weight: 0.0234
+  2104->2005; // weight: 0.00781
+  2104->2149; // weight: 0.00391
+  2104->889; // weight: -0.211
+  2104->963; // weight: 0.105
+  2104->803; // weight: 0.211
+  2104->957; // weight: -0.0352
+  2104->967; // weight: 0.949
+  2102->1778; // weight: -0.0469
+  2102->1798; // weight: 0.00781
+  2102->2005; // weight: 0.0234
+  2102->2149; // weight: 0.00391
+  2102->889; // weight: 0.211
+  2102->963; // weight: -0.0352
+  2102->803; // weight: -0.211
+  2102->957; // weight: 0.105
+  2102->967; // weight: 0.949
+  2105->1778; // weight: 0.0352
+  2105->1798; // weight: 0.00586
+  2105->2005; // weight: 0.00586
+  2105->2149; // weight: 0.000977
+  2105->889; // weight: 0.158
+  2105->963; // weight: -0.0264
+  2105->803; // weight: 0.158
+  2105->957; // weight: -0.0264
+  2105->967; // weight: 0.712
+  2117->1798; // weight: -0.250
+  2117->2149; // weight: 0.125
+  2117->963; // weight: 1.12
+  2120->1798; // weight: 0.188
+  2120->2149; // weight: -0.0312
+  2120->963; // weight: 0.844
+  2118->1778; // weight: 0.0781
+  2118->1798; // weight: -0.117
+  2118->2005; // weight: -0.0391
+  2118->2149; // weight: 0.0586
+  2118->889; // weight: -0.352
+  2118->963; // weight: 0.527
+  2118->803; // weight: -0.211
+  2118->957; // weight: 0.105
+  2118->967; // weight: 0.949
+  2121->1778; // weight: -0.0586
+  2121->1798; // weight: 0.0879
+  2121->2005; // weight: 0.00977
+  2121->2149; // weight: -0.0146
+  2121->889; // weight: -0.264
+  2121->963; // weight: 0.396
+  2121->803; // weight: 0.158
+  2121->957; // weight: -0.0264
+  2121->967; // weight: 0.712
+  2133->2005; // weight: -0.250
+  2133->2149; // weight: 0.125
+  2133->957; // weight: 1.12
+  2136->1778; // weight: 0.0781
+  2136->1798; // weight: -0.0391
+  2136->2005; // weight: -0.117
+  2136->2149; // weight: 0.0586
+  2136->889; // weight: -0.211
+  2136->963; // weight: 0.105
+  2136->803; // weight: -0.352
+  2136->957; // weight: 0.527
+  2136->967; // weight: 0.949
+  2134->2005; // weight: 0.188
+  2134->2149; // weight: -0.0312
+  2134->957; // weight: 0.844
+  2137->1778; // weight: -0.0586
+  2137->1798; // weight: 0.00977
+  2137->2005; // weight: 0.0879
+  2137->2149; // weight: -0.0146
+  2137->889; // weight: 0.158
+  2137->963; // weight: -0.0264
+  2137->803; // weight: -0.264
+  2137->957; // weight: 0.396
+  2137->967; // weight: 0.712
+  2152->1798; // weight: -0.312
+  2152->2149; // weight: 0.469
+  2152->963; // weight: 0.844
+  2150->2005; // weight: -0.312
+  2150->2149; // weight: 0.469
+  2150->957; // weight: 0.844
+  2153->1778; // weight: 0.0977
+  2153->1798; // weight: -0.146
+  2153->2005; // weight: -0.146
+  2153->2149; // weight: 0.220
+  2153->889; // weight: -0.264
+  2153->963; // weight: 0.396
+  2153->803; // weight: -0.264
+  2153->957; // weight: 0.396
+  2153->967; // weight: 0.712
+}
+DEAL::   Number of degrees of freedom: 2721
+DEAL::   Number of constraints       : 769
+DEAL:cg::Starting value 0.118
+DEAL:cg::Convergence step 23 value 7.99e-10
diff --git a/tests/hp/crash_18_compressed_set_sparsity.cc b/tests/hp/crash_18_compressed_set_sparsity.cc
new file mode 100644 (file)
index 0000000..689168f
--- /dev/null
@@ -0,0 +1,738 @@
+//----------------------------  crash_18.cc  ---------------------------
+//    $Id: crash_18.cc 12732 2006-03-28 23:15:45Z wolf $
+//    Version: $Name$ 
+//
+//    Copyright (C) 2006, 2007 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  crash_18.cc  ---------------------------
+
+
+// a modified version of step-27 that crashes because of circular
+// constraints. like crash_17, but only check the second cycle. there,
+// we have dofs that are constrained against itself, and we don't
+// currently detect this...
+
+// like crash_18, but use a Compressed*Set*SparsityPattern instead to test
+// that class some more
+
+char logname[] = "crash_18_compressed_set_sparsity/output";
+
+
+#include "../tests.h"
+
+
+#include <base/quadrature_lib.h>
+#include <base/function.h>
+#include <base/logstream.h>
+#include <base/utilities.h>
+#include <base/timer.h>
+#include <lac/vector.h>
+#include <lac/full_matrix.h>
+#include <lac/sparse_matrix.h>
+#include <lac/compressed_set_sparsity_pattern.h>
+#include <lac/solver_cg.h>
+#include <lac/precondition.h>
+#include <grid/tria.h>
+#include <hp/dof_handler.h>
+#include <grid/grid_generator.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <grid/tria_boundary_lib.h>
+#include <dofs/dof_accessor.h>
+#include <dofs/dof_tools.h>
+#include <hp/fe_values.h>
+#include <numerics/vectors.h>
+#include <numerics/matrices.h>
+#include <numerics/data_out.h>
+
+#include <fstream>
+#include <iostream>
+
+#include <fe/fe_q.h>
+#include <grid/grid_out.h>
+#include <dofs/dof_constraints.h>
+#include <grid/grid_refinement.h>
+#include <numerics/error_estimator.h>
+
+#include <complex>
+
+                                // Finally, this is as in previous
+                                // programs:
+using namespace dealii;
+
+template <int dim>
+class LaplaceProblem 
+{
+  public:
+    LaplaceProblem ();
+    ~LaplaceProblem ();
+
+    void run ();
+    
+  private:
+    void setup_system ();
+    void assemble_system ();
+    void solve ();
+    void create_coarse_grid ();
+    void refine_grid ();
+    void estimate_smoothness (Vector<float> &smoothness_indicators) const;
+    void output_results (const unsigned int cycle) const;
+
+    Triangulation<dim>   triangulation;
+
+    hp::DoFHandler<dim>      dof_handler;
+    hp::FECollection<dim>    fe_collection;
+    hp::QCollection<dim>     quadrature_collection;
+    hp::QCollection<dim-1>   face_quadrature_collection;
+
+    ConstraintMatrix     hanging_node_constraints;
+
+    SparsityPattern      sparsity_pattern;
+    SparseMatrix<double> system_matrix;
+
+    Vector<double>       solution;
+    Vector<double>       system_rhs;
+
+    Timer distr, condense, hang;
+};
+
+
+
+template <int dim>
+class RightHandSide : public Function<dim>
+{
+  public:
+    RightHandSide () : Function<dim> () {};
+    
+    virtual double value (const Point<dim>   &p,
+                         const unsigned int  component) const;
+};
+
+
+template <int dim>
+double
+RightHandSide<dim>::value (const Point<dim>   &p,
+                          const unsigned int  /*component*/) const
+{
+  double product = 1;
+  for (unsigned int d=0; d<dim; ++d)
+    product *= (p[d]+1);
+  return product;
+}
+
+
+
+
+template <int dim>
+LaplaceProblem<dim>::LaplaceProblem () :
+               dof_handler (triangulation)
+{
+  for (unsigned int degree=2; degree<5; ++degree)
+    {
+      fe_collection.push_back (FE_Q<dim>(degree));
+      quadrature_collection.push_back (QGauss<dim>(degree+2));
+      face_quadrature_collection.push_back (QGauss<dim-1>(degree+2));
+    }
+}
+
+
+template <int dim>
+LaplaceProblem<dim>::~LaplaceProblem () 
+{
+  dof_handler.clear ();
+}
+
+template <int dim>
+void LaplaceProblem<dim>::setup_system ()
+{
+  distr.reset();
+  distr.start();
+  dof_handler.distribute_dofs (fe_collection);
+  distr.stop();
+
+  solution.reinit (dof_handler.n_dofs());
+  system_rhs.reinit (dof_handler.n_dofs());
+
+  hanging_node_constraints.clear ();
+  hang.reset();
+  hang.start();
+  DoFTools::make_hanging_node_constraints (dof_handler,
+                                          hanging_node_constraints);
+
+                                  // check for self-referential constraints
+  
+  hanging_node_constraints.close ();
+  hang.stop();
+
+  if (dim < 3)
+    {
+      sparsity_pattern.reinit (dof_handler.n_dofs(),
+                              dof_handler.n_dofs(),
+                              dof_handler.max_couplings_between_dofs());
+      DoFTools::make_sparsity_pattern (dof_handler, sparsity_pattern);
+
+      condense.reset();
+      condense.start();
+      hanging_node_constraints.condense (sparsity_pattern);
+      condense.stop();
+      sparsity_pattern.compress();      
+    }
+  else
+    {
+      CompressedSetSparsityPattern csp (dof_handler.n_dofs(),
+                                    dof_handler.n_dofs());
+      DoFTools::make_sparsity_pattern (dof_handler, csp);
+
+      condense.reset();
+      condense.start();
+      hanging_node_constraints.condense (csp);
+      condense.stop();
+      
+      sparsity_pattern.copy_from (csp);
+    }  
+
+  system_matrix.reinit (sparsity_pattern);
+}
+
+template <int dim>
+void LaplaceProblem<dim>::assemble_system () 
+{
+  hp::FEValues<dim> hp_fe_values (fe_collection,
+                                 quadrature_collection, 
+                                 update_values    |  update_gradients |
+                                 update_q_points  |  update_JxW_values);
+
+  const RightHandSide<dim> rhs_function;
+  
+  typename hp::DoFHandler<dim>::active_cell_iterator
+    cell = dof_handler.begin_active(),
+    endc = dof_handler.end();
+  for (; cell!=endc; ++cell)
+    {
+      const unsigned int   dofs_per_cell = cell->get_fe().dofs_per_cell;
+      FullMatrix<double>   cell_matrix (dofs_per_cell, dofs_per_cell);
+      Vector<double>       cell_rhs (dofs_per_cell);
+
+      std::vector<unsigned int> local_dof_indices (dofs_per_cell);
+
+      cell_matrix = 0;
+      cell_rhs = 0;
+
+      hp_fe_values.reinit (cell);
+      
+      const FEValues<dim> &fe_values = hp_fe_values.get_present_fe_values ();
+
+      std::vector<double>  rhs_values (fe_values.n_quadrature_points);
+      rhs_function.value_list (fe_values.get_quadrature_points(),
+                              rhs_values);
+      
+      for (unsigned int q_point=0; q_point<fe_values.n_quadrature_points; ++q_point)
+       for (unsigned int i=0; i<dofs_per_cell; ++i)
+         {
+           for (unsigned int j=0; j<dofs_per_cell; ++j)
+             cell_matrix(i,j) += (fe_values.shape_grad(i,q_point) *
+                                  fe_values.shape_grad(j,q_point) *
+                                  fe_values.JxW(q_point));
+
+           cell_rhs(i) += (fe_values.shape_value(i,q_point) *
+                           rhs_values[q_point] *
+                           fe_values.JxW(q_point));
+         }
+
+      cell->get_dof_indices (local_dof_indices);
+      for (unsigned int i=0; i<dofs_per_cell; ++i)
+       {
+         for (unsigned int j=0; j<dofs_per_cell; ++j)
+           system_matrix.add (local_dof_indices[i],
+                              local_dof_indices[j],
+                              cell_matrix(i,j));
+         
+         system_rhs(local_dof_indices[i]) += cell_rhs(i);
+       }
+    }
+
+  condense.start();
+  hanging_node_constraints.condense (system_matrix);
+  hanging_node_constraints.condense (system_rhs);
+  condense.stop();
+  std::map<unsigned int,double> boundary_values;
+  VectorTools::interpolate_boundary_values (dof_handler,
+                                           0,
+                                           ZeroFunction<dim>(),
+                                           boundary_values);
+  MatrixTools::apply_boundary_values (boundary_values,
+                                     system_matrix,
+                                     solution,
+                                     system_rhs);
+}
+
+template <int dim>
+void LaplaceProblem<dim>::solve () 
+{
+  SolverControl           solver_control (system_rhs.size(),
+                                         1e-8*system_rhs.l2_norm());
+  SolverCG<>              cg (solver_control);
+
+  PreconditionSSOR<> preconditioner;
+  preconditioner.initialize(system_matrix, 1.2);
+
+  cg.solve (system_matrix, solution, system_rhs,
+           preconditioner);
+
+  hanging_node_constraints.distribute (solution);
+}
+
+
+unsigned int
+int_pow (const unsigned int x,
+        const unsigned int n)
+{
+  unsigned int p=1;
+  for (unsigned int i=0; i<n; ++i)
+    p *= x;
+  return p;
+}
+
+
+template <int dim>
+void
+LaplaceProblem<dim>::
+estimate_smoothness (Vector<float> &smoothness_indicators) const
+{
+  const unsigned int N = 4;
+
+                                  // form all the Fourier vectors
+                                  // that we want to
+                                  // consider. exclude k=0 to avoid
+                                  // problems with |k|^{-mu} and also
+                                  // logarithms of |k|
+  std::vector<Tensor<1,dim> > k_vectors;
+  std::vector<unsigned int>   k_vectors_magnitude;
+  switch (dim)
+    {
+      case 2:
+      {
+       for (unsigned int i=0; i<N; ++i)
+         for (unsigned int j=0; j<N; ++j)
+           if (!((i==0) && (j==0))
+               &&
+               (i*i + j*j < N*N))
+             {
+               k_vectors.push_back (Point<dim>(deal_II_numbers::PI * i,
+                                               deal_II_numbers::PI * j));
+               k_vectors_magnitude.push_back (i*i+j*j);
+             }
+       
+       break;
+      }
+
+      case 3:
+      {
+       for (unsigned int i=0; i<N; ++i)
+         for (unsigned int j=0; j<N; ++j)
+           for (unsigned int k=0; k<N; ++k)
+             if (!((i==0) && (j==0) && (k==0))
+                 &&
+                 (i*i + j*j + k*k < N*N))
+               {
+                 k_vectors.push_back (Point<dim>(deal_II_numbers::PI * i,
+                                                 deal_II_numbers::PI * j,
+                                                 deal_II_numbers::PI * k));
+                 k_vectors_magnitude.push_back (i*i+j*j+k*k);
+             }
+       
+       break;
+      }
+      
+      default:
+           Assert (false, ExcNotImplemented());
+    }
+
+  const unsigned n_fourier_modes = k_vectors.size();
+  std::vector<double> ln_k (n_fourier_modes);
+  for (unsigned int i=0; i<n_fourier_modes; ++i)
+    ln_k[i] = std::log (k_vectors[i].norm());
+  
+
+                                  // assemble the matrices that do
+                                  // the Fourier transforms for each
+                                  // of the finite elements we deal
+                                  // with. note that these matrices
+                                  // are complex-valued, so we can't
+                                  // use FullMatrix
+  QGauss<1>      base_quadrature (2);
+  QIterated<dim> quadrature (base_quadrature, N);
+  
+  std::vector<Table<2,std::complex<double> > >
+    fourier_transform_matrices (fe_collection.size());
+  for (unsigned int fe=0; fe<fe_collection.size(); ++fe)
+    {
+      fourier_transform_matrices[fe].reinit (n_fourier_modes,
+                                            fe_collection[fe].dofs_per_cell);
+
+      for (unsigned int k=0; k<n_fourier_modes; ++k)
+       for (unsigned int i=0; i<fe_collection[fe].dofs_per_cell; ++i)
+         {
+           std::complex<double> sum = 0;
+           for (unsigned int q=0; q<quadrature.n_quadrature_points; ++q)
+             {
+               const Point<dim> x_q = quadrature.point(q);
+               sum += std::exp(std::complex<double>(0,1) *
+                               (k_vectors[k] * x_q)) *
+                      fe_collection[fe].shape_value(i,x_q) *
+                      quadrature.weight(q);
+             }
+           fourier_transform_matrices[fe](k,i)
+             = sum / std::pow(2*deal_II_numbers::PI, 1.*dim/2);
+         }
+    }
+
+                                  // the next thing is to loop over
+                                  // all cells and do our work there,
+                                  // i.e. to locally do the Fourier
+                                  // transform and estimate the decay
+                                  // coefficient
+  std::vector<std::complex<double> > fourier_coefficients (n_fourier_modes);
+  Vector<double>                     local_dof_values;
+  
+  typename hp::DoFHandler<dim>::active_cell_iterator
+    cell = dof_handler.begin_active(),
+    endc = dof_handler.end();
+  for (unsigned int index=0; cell!=endc; ++cell, ++index)
+    {
+      local_dof_values.reinit (cell->get_fe().dofs_per_cell);
+      cell->get_dof_values (solution, local_dof_values);
+
+                                      // first compute the Fourier
+                                      // transform of the local
+                                      // solution
+      std::fill (fourier_coefficients.begin(), fourier_coefficients.end(), 0);
+      for (unsigned int f=0; f<n_fourier_modes; ++f)
+       for (unsigned int i=0; i<cell->get_fe().dofs_per_cell; ++i)
+         fourier_coefficients[f] += 
+           fourier_transform_matrices[cell->active_fe_index()](f,i)
+           *
+           local_dof_values(i);
+
+                                      // enter the Fourier
+                                      // coefficients into a map with
+                                      // the k-magnitudes, to make
+                                      // sure that we get only the
+                                      // largest magnitude for each
+                                      // value of |k|
+      std::map<unsigned int, double> k_to_max_U_map;
+      for (unsigned int f=0; f<n_fourier_modes; ++f)
+       if ((k_to_max_U_map.find (k_vectors_magnitude[f]) ==
+            k_to_max_U_map.end())
+           ||
+           (k_to_max_U_map[k_vectors_magnitude[f]] <
+            std::abs (fourier_coefficients[f])))
+         k_to_max_U_map[k_vectors_magnitude[f]]
+           = std::abs (fourier_coefficients[f]);
+      
+                                      // now we have to calculate the
+                                      // various contributions to the
+                                      // formula for mu. we'll only
+                                      // take those fourier
+                                      // coefficients with the
+                                      // largest value for a given
+                                      // |k|
+      double  sum_1           = 0,
+             sum_ln_k        = 0,
+             sum_ln_k_square = 0,
+             sum_ln_U        = 0,
+             sum_ln_U_ln_k   = 0;
+      for (unsigned int f=0; f<n_fourier_modes; ++f)
+       if (k_to_max_U_map[k_vectors_magnitude[f]] ==
+           std::abs (fourier_coefficients[f]))
+         {
+           sum_1 += 1;
+           sum_ln_k += ln_k[f];
+           sum_ln_k_square += ln_k[f]*ln_k[f];
+           sum_ln_U += std::log (std::abs (fourier_coefficients[f]));
+           sum_ln_U_ln_k += std::log (std::abs (fourier_coefficients[f])) * ln_k[f];
+         }
+
+      const double mu
+       = (1./(sum_1*sum_ln_k_square - sum_ln_k*sum_ln_k)
+          *
+          (sum_ln_k*sum_ln_U - sum_1*sum_ln_U_ln_k));
+      
+      smoothness_indicators(index) = mu - 1.*dim/2;
+    }
+}
+
+
+
+  
+template <int dim>
+void LaplaceProblem<dim>::refine_grid ()
+{
+  Vector<float> estimated_error_per_cell (triangulation.n_active_cells());
+  KellyErrorEstimator<dim>::estimate (dof_handler,
+                                     face_quadrature_collection,
+                                     typename FunctionMap<dim>::type(),
+                                     solution,
+                                     estimated_error_per_cell);
+
+  Vector<float> smoothness_indicators (triangulation.n_active_cells());
+  estimate_smoothness (smoothness_indicators);
+  
+  GridRefinement::refine_and_coarsen_fixed_number (triangulation,
+                                                  estimated_error_per_cell,
+                                                  0.3, 0.03);
+
+  float max_smoothness = 0,
+        min_smoothness = smoothness_indicators.linfty_norm();
+  {
+    typename hp::DoFHandler<dim>::active_cell_iterator
+      cell = dof_handler.begin_active(),
+      endc = dof_handler.end();
+    for (unsigned int index=0; cell!=endc; ++cell, ++index)
+      if (cell->refine_flag_set())
+       {
+         max_smoothness = std::max (max_smoothness,
+                                    smoothness_indicators(index));
+         min_smoothness = std::min (min_smoothness,
+                                    smoothness_indicators(index));
+       }
+  }
+  const float cutoff_smoothness = (max_smoothness + min_smoothness) / 2;
+  {
+    typename hp::DoFHandler<dim>::active_cell_iterator
+      cell = dof_handler.begin_active(),
+      endc = dof_handler.end();
+    for (unsigned int index=0; cell!=endc; ++cell, ++index)
+      if (cell->refine_flag_set()
+         &&
+         (smoothness_indicators(index) > cutoff_smoothness)
+         &&
+         !(cell->active_fe_index() == fe_collection.size() - 1))
+       {
+         cell->clear_refine_flag();
+         cell->set_active_fe_index (std::min (cell->active_fe_index() + 1,
+                                              fe_collection.size() - 1));
+       }
+  } 
+  
+  triangulation.execute_coarsening_and_refinement ();
+}
+
+
+
+template <int dim>
+void LaplaceProblem<dim>::output_results (const unsigned int cycle) const
+{
+  Assert (cycle < 10, ExcNotImplemented());
+  
+  {
+    const std::string filename = "grid-" +
+                                Utilities::int_to_string (cycle, 2) +
+                                ".eps";
+    std::ofstream output (filename.c_str());
+    
+    GridOut grid_out;
+    grid_out.write_eps (triangulation, output);
+  }
+  
+  {
+    Vector<float> smoothness_indicators (triangulation.n_active_cells());
+    estimate_smoothness (smoothness_indicators);
+
+    Vector<double> smoothness_field (dof_handler.n_dofs());
+    DoFTools::distribute_cell_to_dof_vector (dof_handler,
+                                            smoothness_indicators,
+                                            smoothness_field);
+
+    Vector<float> fe_indices (triangulation.n_active_cells());
+    {
+      typename hp::DoFHandler<dim>::active_cell_iterator
+       cell = dof_handler.begin_active(),
+       endc = dof_handler.end();
+      for (unsigned int index=0; cell!=endc; ++cell, ++index)
+       {
+         
+         fe_indices(index) = cell->active_fe_index();
+//       smoothness_indicators(index) *= std::sqrt(cell->diameter());
+       }
+    }
+    
+    const std::string filename = "solution-" +
+                                Utilities::int_to_string (cycle, 2) +
+                                ".vtk";
+    DataOut<dim,hp::DoFHandler<dim> > data_out;
+
+    data_out.attach_dof_handler (dof_handler);
+    data_out.add_data_vector (solution, "solution");
+    data_out.add_data_vector (smoothness_indicators, "smoothness1");
+    data_out.add_data_vector (smoothness_field, "smoothness2");
+    data_out.add_data_vector (fe_indices, "fe_index");
+    data_out.build_patches ();
+  
+    std::ofstream output (filename.c_str());
+    data_out.write_vtk (output);
+  }
+}
+
+
+template <>
+void LaplaceProblem<2>::create_coarse_grid ()
+{
+  const unsigned int dim = 2;
+  
+  static const Point<2> vertices_1[]
+    = {  Point<2> (-1.,   -1.),
+         Point<2> (-1./2, -1.),
+         Point<2> (0.,    -1.),
+         Point<2> (+1./2, -1.),
+         Point<2> (+1,    -1.),
+            
+         Point<2> (-1.,   -1./2.),
+         Point<2> (-1./2, -1./2.),
+         Point<2> (0.,    -1./2.),
+         Point<2> (+1./2, -1./2.),
+         Point<2> (+1,    -1./2.),
+            
+         Point<2> (-1.,   0.),
+         Point<2> (-1./2, 0.),
+         Point<2> (+1./2, 0.),
+         Point<2> (+1,    0.),
+            
+         Point<2> (-1.,   1./2.),
+         Point<2> (-1./2, 1./2.),
+         Point<2> (0.,    1./2.),
+         Point<2> (+1./2, 1./2.),
+         Point<2> (+1,    1./2.),
+            
+         Point<2> (-1.,   1.),
+         Point<2> (-1./2, 1.),
+         Point<2> (0.,    1.),                   
+         Point<2> (+1./2, 1.),
+         Point<2> (+1,    1.)    };
+  const unsigned int
+    n_vertices = sizeof(vertices_1) / sizeof(vertices_1[0]);
+  const std::vector<Point<dim> > vertices (&vertices_1[0],
+                                           &vertices_1[n_vertices]);
+  static const int cell_vertices[][GeometryInfo<dim>::vertices_per_cell]
+    = {{0, 1, 5, 6},
+       {1, 2, 6, 7},
+       {2, 3, 7, 8},
+       {3, 4, 8, 9},
+       {5, 6, 10, 11},
+       {8, 9, 12, 13},
+       {10, 11, 14, 15},
+       {12, 13, 17, 18},
+       {14, 15, 19, 20},
+       {15, 16, 20, 21},
+       {16, 17, 21, 22},
+       {17, 18, 22, 23}};
+  const unsigned int
+    n_cells = sizeof(cell_vertices) / sizeof(cell_vertices[0]);
+
+  std::vector<CellData<dim> > cells (n_cells, CellData<dim>());
+  for (unsigned int i=0; i<n_cells; ++i) 
+    {
+      for (unsigned int j=0;
+           j<GeometryInfo<dim>::vertices_per_cell;
+           ++j)
+        cells[i].vertices[j] = cell_vertices[i][j];
+      cells[i].material_id = 0;
+    }
+
+  triangulation.create_triangulation (vertices,
+                                    cells,
+                                    SubCellData());
+  triangulation.refine_global (3);
+}
+
+
+
+template <>
+void LaplaceProblem<3>::create_coarse_grid ()
+{
+  GridGenerator::hyper_cube (triangulation);
+  triangulation.refine_global (1);
+}
+
+
+
+template <int dim>
+void LaplaceProblem<dim>::run () 
+{
+  for (unsigned int cycle=0; cycle<2; ++cycle)
+    {
+      deallog << "Cycle " << cycle << ':' << std::endl;
+
+      if (cycle == 0)
+       create_coarse_grid ();
+      else
+       refine_grid ();
+      
+
+      deallog << "   Number of active cells:       "
+               << triangulation.n_active_cells()
+               << std::endl;
+
+      Timer all;
+      all.start();
+      setup_system ();
+
+      deallog << "   Number of degrees of freedom: "
+               << dof_handler.n_dofs()
+               << std::endl;
+      deallog << "   Number of constraints       : "
+               << hanging_node_constraints.n_constraints()
+               << std::endl;
+      
+      assemble_system ();
+      solve ();
+      all.stop();
+
+    }
+}
+
+int main () 
+{
+  std::ofstream logfile(logname);
+  logfile.precision (3);
+  
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+  try
+    {
+      LaplaceProblem<3> laplace_problem_2d;
+      laplace_problem_2d.run ();
+    }
+  catch (std::exception &exc)
+    {
+      std::cerr << std::endl << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      std::cerr << "Exception on processing: " << std::endl
+               << exc.what() << std::endl
+               << "Aborting!" << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+
+      return 1;
+    }
+  catch (...) 
+    {
+      std::cerr << std::endl << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      std::cerr << "Unknown exception!" << std::endl
+               << "Aborting!" << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      return 1;
+    }
+
+  return 0;
+}
diff --git a/tests/hp/crash_18_compressed_set_sparsity/cmp/generic b/tests/hp/crash_18_compressed_set_sparsity/cmp/generic
new file mode 100644 (file)
index 0000000..9ed4a96
--- /dev/null
@@ -0,0 +1,13 @@
+
+DEAL::Cycle 0:
+DEAL::   Number of active cells:       8
+DEAL::   Number of degrees of freedom: 125
+DEAL::   Number of constraints       : 0
+DEAL:cg::Starting value 0.438
+DEAL:cg::Convergence step 6 value 2.57e-09
+DEAL::Cycle 1:
+DEAL::   Number of active cells:       22
+DEAL::   Number of degrees of freedom: 385
+DEAL::   Number of constraints       : 128
+DEAL:cg::Starting value 0.337
+DEAL:cg::Convergence step 11 value 6.99e-10
diff --git a/tests/hp/step-11_compressed_set_sparsity.cc b/tests/hp/step-11_compressed_set_sparsity.cc
new file mode 100644 (file)
index 0000000..6b831bb
--- /dev/null
@@ -0,0 +1,254 @@
+//----------------------------  step-11.cc  ---------------------------
+//    $Id$
+//    Version: $Name$ 
+//
+//    Copyright (C) 2005, 2006, 2007 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------  step-11.cc  ---------------------------
+
+
+// a hp-ified version of step-11
+
+// like step-11, but use a Compressed*Set*SparsityPattern instead to test
+// that class some more
+
+
+#include "../tests.h"
+
+#include <base/logstream.h>
+#include <fstream>
+std::ofstream logfile("step-11_compressed_set_sparsity/output");
+
+#include <base/quadrature_lib.h>
+#include <base/function.h>
+#include <base/logstream.h>
+#include <base/table_handler.h>
+#include <lac/vector.h>
+#include <lac/sparse_matrix.h>
+#include <lac/solver_cg.h>
+#include <lac/precondition.h>
+#include <grid/tria.h>
+#include <grid/grid_generator.h>
+#include <grid/tria_boundary_lib.h>
+#include <grid/tria_accessor.h>
+#include <grid/tria_iterator.h>
+#include <dofs/dof_handler.h>
+#include <dofs/dof_constraints.h>
+#include <dofs/dof_accessor.h>
+#include <dofs/dof_tools.h>
+#include <fe/fe_q.h>
+#include <hp/fe_values.h>
+#include <fe/mapping_q.h>
+#include <numerics/vectors.h>
+#include <numerics/matrices.h>
+
+#include <lac/compressed_set_sparsity_pattern.h>
+
+#include <algorithm>
+#include <iostream>
+#include <iomanip>
+#include <cmath>
+
+
+template <int dim>
+class LaplaceProblem 
+{
+  public:
+    LaplaceProblem (const unsigned int mapping_degree);
+    void run ();
+    
+  private:
+    void setup_system ();
+    void assemble_and_solve ();
+    void solve ();
+
+    Triangulation<dim>   triangulation;
+    hp::FECollection<dim>            fe;
+    hp::DoFHandler<dim>      dof_handler;
+    hp::MappingCollection<dim>        mapping;
+
+    SparsityPattern      sparsity_pattern;
+    SparseMatrix<double> system_matrix;
+    ConstraintMatrix     mean_value_constraints;
+
+    Vector<double>       solution;
+    Vector<double>       system_rhs;
+
+    TableHandler         output_table;
+};
+
+
+
+template <int dim>
+LaplaceProblem<dim>::LaplaceProblem (const unsigned int mapping_degree) :
+                fe (FE_Q<dim>(1)),
+               dof_handler (triangulation),
+               mapping (MappingQ<dim>(mapping_degree))
+{
+  deallog << "Using mapping with degree " << mapping_degree << ":"
+           << std::endl
+           << "============================"
+           << std::endl;
+}
+
+
+
+template <int dim>
+void LaplaceProblem<dim>::setup_system ()
+{
+  dof_handler.distribute_dofs (fe);
+  solution.reinit (dof_handler.n_dofs());
+  system_rhs.reinit (dof_handler.n_dofs());
+
+  std::vector<bool> boundary_dofs (dof_handler.n_dofs(), false);
+  DoFTools::extract_boundary_dofs (dof_handler, std::vector<bool>(1,true),
+                                  boundary_dofs);
+
+  const unsigned int first_boundary_dof
+    = std::distance (boundary_dofs.begin(),
+                    std::find (boundary_dofs.begin(),
+                               boundary_dofs.end(),
+                               true));
+
+  mean_value_constraints.clear ();
+  mean_value_constraints.add_line (first_boundary_dof);
+  for (unsigned int i=first_boundary_dof+1; i<dof_handler.n_dofs(); ++i)
+    if (boundary_dofs[i] == true)
+      mean_value_constraints.add_entry (first_boundary_dof,
+                                       i, -1);
+  mean_value_constraints.close ();
+
+  CompressedSetSparsityPattern csp (dof_handler.n_dofs(),
+                                dof_handler.n_dofs());
+  DoFTools::make_sparsity_pattern (dof_handler, csp);
+  mean_value_constraints.condense (csp);
+
+  sparsity_pattern.copy_from (csp);
+  system_matrix.reinit (sparsity_pattern);
+}
+
+
+
+template <int dim>
+void LaplaceProblem<dim>::assemble_and_solve () 
+{
+
+  const unsigned int gauss_degree
+    = std::max (static_cast<unsigned int>(std::ceil(1.*(static_cast<const MappingQ<dim>&>(mapping[0]).get_degree()+1)/2)),
+               2U);
+  MatrixTools::create_laplace_matrix (mapping, dof_handler,
+                                     hp::QCollection<dim>(QGauss<dim>(gauss_degree)),
+                                     system_matrix);
+  VectorTools::create_right_hand_side (mapping, dof_handler,
+                                      hp::QCollection<dim>(QGauss<dim>(gauss_degree)),
+                                      ConstantFunction<dim>(-2),
+                                      system_rhs);
+  Vector<double> tmp (system_rhs.size());
+  VectorTools::create_boundary_right_hand_side (mapping, dof_handler,
+                                               hp::QCollection<dim-1>(QGauss<dim-1>(gauss_degree)),
+                                               ConstantFunction<dim>(1),
+                                               tmp);
+  system_rhs += tmp;
+
+  mean_value_constraints.condense (system_matrix);
+  mean_value_constraints.condense (system_rhs);  
+
+  solve ();
+  mean_value_constraints.distribute (solution);
+
+  Vector<float> norm_per_cell (triangulation.n_active_cells());
+  VectorTools::integrate_difference (mapping, dof_handler,
+                                    solution,
+                                    ZeroFunction<dim>(),
+                                    norm_per_cell,
+                                    hp::QCollection<dim>(QGauss<dim>(gauss_degree+1)),
+                                    VectorTools::H1_seminorm);
+  const double norm = norm_per_cell.l2_norm();
+
+  output_table.add_value ("cells", triangulation.n_active_cells());
+  output_table.add_value ("|u|_1", norm);
+  output_table.add_value ("error", std::fabs(norm-std::sqrt(3.14159265358/2)));
+}
+
+
+
+template <int dim>
+void LaplaceProblem<dim>::solve () 
+{
+  SolverControl           solver_control (1000, 1e-12);
+  SolverCG<>              cg (solver_control);
+
+  PreconditionSSOR<> preconditioner;
+  preconditioner.initialize(system_matrix, 1.2);
+
+  cg.solve (system_matrix, solution, system_rhs,
+           preconditioner);
+}
+
+
+
+template <int dim>
+void LaplaceProblem<dim>::run () 
+{
+  GridGenerator::hyper_ball (triangulation);
+  static const HyperBallBoundary<dim> boundary;
+  triangulation.set_boundary (0, boundary);
+  
+  for (unsigned int cycle=0; cycle<6; ++cycle, triangulation.refine_global(1))
+    {
+      setup_system ();
+      assemble_and_solve ();
+    };
+
+  output_table.set_precision("|u|_1", 6);
+  output_table.set_precision("error", 6);
+  output_table.write_text (deallog.get_file_stream());
+  deallog << std::endl;
+}
+
+    
+
+int main () 
+{
+  try
+    {
+      logfile.precision(2);
+  
+      deallog.attach(logfile);
+      deallog.depth_console(0);
+      deallog.threshold_double(1.e-10);  
+
+      for (unsigned int mapping_degree=1; mapping_degree<=3; ++mapping_degree)
+       LaplaceProblem<2>(mapping_degree).run ();
+    }
+  catch (std::exception &exc)
+    {
+      std::cerr << std::endl << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      std::cerr << "Exception on processing: " << std::endl
+               << exc.what() << std::endl
+               << "Aborting!" << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      return 1;
+    }
+  catch (...) 
+    {
+      std::cerr << std::endl << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      std::cerr << "Unknown exception!" << std::endl
+               << "Aborting!" << std::endl
+               << "----------------------------------------------------"
+               << std::endl;
+      return 1;
+    };
+
+  return 0;
+}
diff --git a/tests/hp/step-11_compressed_set_sparsity/cmp/generic b/tests/hp/step-11_compressed_set_sparsity/cmp/generic
new file mode 100644 (file)
index 0000000..4a28f6c
--- /dev/null
@@ -0,0 +1,67 @@
+
+DEAL::Using mapping with degree 1:
+DEAL::============================
+DEAL:cg::Starting value 1.1
+DEAL:cg::Convergence step 7 value 0
+DEAL:cg::Starting value 0.98
+DEAL:cg::Convergence step 18 value 0
+DEAL:cg::Starting value 0.65
+DEAL:cg::Convergence step 29 value 0
+DEAL:cg::Starting value 0.37
+DEAL:cg::Convergence step 53 value 0
+DEAL:cg::Starting value 0.19
+DEAL:cg::Convergence step 108 value 0
+DEAL:cg::Starting value 0.10
+DEAL:cg::Convergence step 238 value 0
+cells  |u|_1    error   
+5     0.680402 0.572912 
+20    1.085518 0.167796 
+80    1.208981 0.044334 
+320   1.242041 0.011273 
+1280  1.250482 0.002832 
+5120  1.252605 0.000709 
+DEAL::
+DEAL::Using mapping with degree 2:
+DEAL::============================
+DEAL:cg::Starting value 1.338917
+DEAL:cg::Convergence step 7 value 0
+DEAL:cg::Starting value 1.028493
+DEAL:cg::Convergence step 17 value 0
+DEAL:cg::Starting value 0.654097
+DEAL:cg::Convergence step 29 value 0
+DEAL:cg::Starting value 0.368099
+DEAL:cg::Convergence step 53 value 0
+DEAL:cg::Starting value 0.194917
+DEAL:cg::Convergence step 108 value 0
+DEAL:cg::Starting value 0.100213
+DEAL:cg::Convergence step 238 value 0
+cells  |u|_1    error   
+5     1.050963 0.202351 
+20    1.199642 0.053672 
+80    1.239913 0.013401 
+320   1.249987 0.003327 
+1280  1.252486 0.000828 
+5120  1.253108 0.000206 
+DEAL::
+DEAL::Using mapping with degree 3:
+DEAL::============================
+DEAL:cg::Starting value 1.358459
+DEAL:cg::Convergence step 7 value 0
+DEAL:cg::Starting value 1.030204
+DEAL:cg::Convergence step 17 value 0
+DEAL:cg::Starting value 0.654234
+DEAL:cg::Convergence step 29 value 0
+DEAL:cg::Starting value 0.368109
+DEAL:cg::Convergence step 53 value 0
+DEAL:cg::Starting value 0.194918
+DEAL:cg::Convergence step 108 value 0
+DEAL:cg::Starting value 0.100213
+DEAL:cg::Convergence step 238 value 0
+cells  |u|_1    error   
+5     1.086161 0.167153 
+20    1.204349 0.048965 
+80    1.240502 0.012812 
+320   1.250059 0.003255 
+1280  1.252495 0.000819 
+5120  1.253109 0.000205 
+DEAL::

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.