diff --git a/examples/next/swm/config.py b/examples/next/swm/config.py new file mode 100644 index 0000000000..30679c5271 --- /dev/null +++ b/examples/next/swm/config.py @@ -0,0 +1,42 @@ +# GT4Py - GridTools Framework +# +# Copyright (c) 2014-2024, ETH Zurich +# All rights reserved. +# +# Please, refer to the LICENSE file in the root directory. +# SPDX-License-Identifier: BSD-3-Clause + +import argparse + +parser = argparse.ArgumentParser(description="Shallow Water Model") +parser.add_argument("--M", type=int, default=16, help="Number of points in the x direction") +parser.add_argument("--N", type=int, default=16, help="Number of points in the y direction") +parser.add_argument("--L_OUT", type=bool, default=True, help="a boolean for L_OUT") +parser.add_argument("--ITMAX", type=int, default=4000, help="Number of iterations") +parser.add_argument("--VAL_DEEP", type=bool, default=True, help="Do deep validation") +parser.add_argument("--backend", type=str, default="gtfn_cpu", help="Backend to use") + + +args = parser.parse_args() + +# Initialize model parameters +backend = args.backend +M = args.M +N = args.N +M_LEN = M + 1 +N_LEN = N + 1 +L_OUT = args.L_OUT +VAL = True +VAL_DEEP = False # args.VAL_DEEP +VIS = False +VIS_DT = 100 + +ITMAX = args.ITMAX +dt = 90.0 +dt = dt +dx = 100000.0 +dy = 100000.0 +fsdx = 4.0 / (dx) +fsdy = 4.0 / (dy) +a = 1000000.0 +alpha = 0.001 diff --git a/examples/next/swm/initial_conditions.py b/examples/next/swm/initial_conditions.py new file mode 100644 index 0000000000..2981bb1e7c --- /dev/null +++ b/examples/next/swm/initial_conditions.py @@ -0,0 +1,94 @@ +# GT4Py - GridTools Framework +# +# Copyright (c) 2014-2024, ETH Zurich +# All rights reserved. +# +# Please, refer to the LICENSE file in the root directory. +# SPDX-License-Identifier: BSD-3-Clause + +import numpy as np +import array_api_compat + + +def initialize_interior(xp, M, N, dx, dy, a): + pi = 4.0 * xp.arctan(1.0) + tpi = 2.0 * pi + d_i = tpi / M + d_j = tpi / N + el = N * dx + pcf = (pi * pi * a * a) / (el * el) + + psi = ( + a + * xp.sin((xp.arange(0, M + 1).reshape(-1, 1) + 0.5) * d_i) + * xp.sin((xp.arange(0, N + 1) + 0.5) * d_j) + ) + p = ( + pcf + * (xp.cos(2.0 * xp.arange(0, M).reshape(-1, 1) * d_i) + xp.cos(2.0 * xp.arange(0, N) * d_j)) + + 50000.0 + ) + + u = -(psi[1:, 1:] - psi[1:, :-1]) / dy + v = (psi[1:, 1:] - psi[:-1, 1:]) / dx + + return u, v, p + + +def apply_periodic_halo(arr, top=0, bottom=0, left=0, right=0): + """Apply periodic (wrap-around) halo padding to an array. + + Parameters + ---------- + arr : array + Input array to pad + top : int + Number of rows to add at the top (from bottom of array) + bottom : int + Number of rows to add at the bottom (from top of array) + left : int + Number of columns to add at the left (from right of array) + right : int + Number of columns to add at the right (from left of array) + """ + xp = array_api_compat.array_namespace(arr) + + # Build vertical padding from the original array before any modification + parts_v = [] + if top > 0: + parts_v.append(arr[-top:, :]) + parts_v.append(arr) + if bottom > 0: + parts_v.append(arr[:bottom, :]) + arr = xp.concatenate(parts_v, axis=0) + + # Build horizontal padding from the vertically-padded array + parts_h = [] + if left > 0: + parts_h.append(arr[:, -left:]) + parts_h.append(arr) + if right > 0: + parts_h.append(arr[:, :right]) + arr = xp.concatenate(parts_h, axis=1) + + return arr + + +def initialize(xp, M, N, dx, dy, a): + u, v, p = initialize_interior(xp, M, N, dx, dy, a) + + # Apply staggered 1-halo padding + u = apply_periodic_halo(u, top=1, right=1) + v = apply_periodic_halo(v, bottom=1, left=1) + p = apply_periodic_halo(p, bottom=1, right=1) + + return u, v, p + + +def initialize_2halo(xp, M, N, dx, dy, a): + u, v, p = initialize_interior(xp, M, N, dx, dy, a) + return ( + apply_periodic_halo(u, 1, 1, 1, 1), + apply_periodic_halo(v, 1, 1, 1, 1), + apply_periodic_halo(p, 1, 1, 1, 1), + ) diff --git a/examples/next/swm/ref/16x16/cu.step0.t100.bin b/examples/next/swm/ref/16x16/cu.step0.t100.bin new file mode 100644 index 0000000000..7e3583df32 Binary files /dev/null and b/examples/next/swm/ref/16x16/cu.step0.t100.bin differ diff --git a/examples/next/swm/ref/16x16/cu.step1.t100.bin b/examples/next/swm/ref/16x16/cu.step1.t100.bin new file mode 100644 index 0000000000..f505f87528 Binary files /dev/null and b/examples/next/swm/ref/16x16/cu.step1.t100.bin differ diff --git a/examples/next/swm/ref/16x16/cv.step0.t100.bin b/examples/next/swm/ref/16x16/cv.step0.t100.bin new file mode 100644 index 0000000000..6dc503b5bf Binary files /dev/null and b/examples/next/swm/ref/16x16/cv.step0.t100.bin differ diff --git a/examples/next/swm/ref/16x16/cv.step1.t100.bin b/examples/next/swm/ref/16x16/cv.step1.t100.bin new file mode 100644 index 0000000000..a31fa42779 Binary files /dev/null and b/examples/next/swm/ref/16x16/cv.step1.t100.bin differ diff --git a/examples/next/swm/ref/16x16/h.step0.t100.bin b/examples/next/swm/ref/16x16/h.step0.t100.bin new file mode 100644 index 0000000000..31892ff9a7 Binary files /dev/null and b/examples/next/swm/ref/16x16/h.step0.t100.bin differ diff --git a/examples/next/swm/ref/16x16/h.step1.t100.bin b/examples/next/swm/ref/16x16/h.step1.t100.bin new file mode 100644 index 0000000000..69893441e4 --- /dev/null +++ b/examples/next/swm/ref/16x16/h.step1.t100.bin @@ -0,0 +1,5 @@ +>k@d;fOk@-k@_j@Ndv5j@Ԫj@ګIj@̀k@>k@Ok@;h -k@j@P0j@nPj@7j@ nk@>k@Ok@?C(k@ j@`2uuj@ψRj@wyj@PUj@-k@d;fOk@?C(k@8vVj@]tj@ځm2Rj@yj@[Gj@t,k@Ok@;h -k@8vVj@f:j@&=i@uӿi@ >3j@ [j@ V"k@-k@ j@f:j@~i@bi@ j@u{j@!k@;h -k@j@]tj@~i@UKQi@XOi@gwi@%(qj@Tj@_j@`2uuj@&=i@UKQi@\ԋOi@뚢bi@'_pj@)j@j@P0j@ځm2Rj@bi@\ԋOi@|3j@gwi@ i@W +8Ri@lE%j@Eg~j@nPj@7j@[Gj@u{j@'_pj@Du6j@lE%j@2`Hj@۾>j@ګIj@PUj@ [j@%(qj@6j@%j@2`Hj@ipj@7j@ nk@t,k@!k@)j@|(Ydj@Eg~j@ipj@wj@̀k@-k@ V"k@Tj@P?=Ŧj@ϴX~j@۾>j@wj@ nk@>k@Ok@;h -k@j@P0j@nPj@7j@ nk@>k@d;fOk@-k@_j@Ndv5j@Ԫj@ګIj@̀k@>k@d;fOk@?C(k@8vVj@]tj@ځm2Rj@yj@[Gj@t,k@Ok@?C(k@ j@`2uuj@ψRj@wyj@PUj@-k@d;fOk@-k@ j@f:j@~i@bi@ j@u{j@!k@;h -k@8vVj@f:j@&=i@uӿi@ >3j@ [j@ V"k@-k@_j@`2uuj@&=i@UKQi@\ԋOi@뚢bi@'_pj@)j@j@]tj@~i@UKQi@XOi@gwi@%(qj@Tj@_j@Ndv5j@ψRj@uӿi@XOi@|3j@gwi@ i@W +8Ri@lE%j@Eg~j@nPj@yj@ j@뚢bi@i@W +8Ri@%j@ϴX~j@Ԫj@ګIj@PUj@ [j@%(qj@6j@%j@2`Hj@ipj@7j@[Gj@u{j@'_pj@Du6j@lE%j@2`Hj@۾>j@ګIj@̀k@-k@ V"k@Tj@P?=Ŧj@ϴX~j@۾>j@wj@ nk@t,k@!k@)j@|(Ydj@Eg~j@ipj@wj@̀k@>k@d;fOk@-k@_j@Ndv5j@Ԫj@ګIj@̀k@>k@Ok@;h -k@j@P0j@nPj@7j@ nk@>k@ \ No newline at end of file diff --git a/examples/next/swm/ref/16x16/p.step0.init.bin b/examples/next/swm/ref/16x16/p.step0.init.bin new file mode 100644 index 0000000000..16722ec311 Binary files /dev/null and b/examples/next/swm/ref/16x16/p.step0.init.bin differ diff --git a/examples/next/swm/ref/16x16/p.step0.t200.bin b/examples/next/swm/ref/16x16/p.step0.t200.bin new file mode 100644 index 0000000000..379ce74aae Binary files /dev/null and b/examples/next/swm/ref/16x16/p.step0.t200.bin differ diff --git a/examples/next/swm/ref/16x16/p.step1.init.bin b/examples/next/swm/ref/16x16/p.step1.init.bin new file mode 100644 index 0000000000..379ce74aae Binary files /dev/null and b/examples/next/swm/ref/16x16/p.step1.init.bin differ diff --git a/examples/next/swm/ref/16x16/p.step1.t200.bin b/examples/next/swm/ref/16x16/p.step1.t200.bin new file mode 100644 index 0000000000..61cd813164 Binary files /dev/null and b/examples/next/swm/ref/16x16/p.step1.t200.bin differ diff --git a/examples/next/swm/ref/16x16/p.step2.init.bin b/examples/next/swm/ref/16x16/p.step2.init.bin new file mode 100644 index 0000000000..61cd813164 Binary files /dev/null and b/examples/next/swm/ref/16x16/p.step2.init.bin differ diff --git a/examples/next/swm/ref/16x16/p.step3.init.bin b/examples/next/swm/ref/16x16/p.step3.init.bin new file mode 100644 index 0000000000..5ae4d1f928 Binary files /dev/null and b/examples/next/swm/ref/16x16/p.step3.init.bin differ diff --git a/examples/next/swm/ref/16x16/p.step4000.final.bin b/examples/next/swm/ref/16x16/p.step4000.final.bin new file mode 100644 index 0000000000..1725ce350b Binary files /dev/null and b/examples/next/swm/ref/16x16/p.step4000.final.bin differ diff --git a/examples/next/swm/ref/16x16/p.txt b/examples/next/swm/ref/16x16/p.txt new file mode 100644 index 0000000000..97cd5d9e5f --- /dev/null +++ b/examples/next/swm/ref/16x16/p.txt @@ -0,0 +1,17 @@ +50002.357522 49998.745480 49996.597280 49997.162130 50000.113755 50003.735493 50005.908586 50005.346159 50002.357522 49998.683487 49996.482263 49997.053452 50000.060488 50003.728604 50005.903592 50005.326210 50002.357522 +49998.683487 49994.985692 49992.757761 49993.303951 49996.312901 50000.035891 50002.298954 50001.770233 49998.745480 49994.985692 49992.691570 49993.208708 49996.227994 49999.966075 50002.223861 50001.685769 49998.683487 +49996.482263 49992.691570 49990.376844 49990.901057 49993.968155 49997.794565 50000.148813 49999.654852 49996.597280 49992.757761 49990.376844 49990.843012 49993.874351 49997.681336 50000.021666 49999.522066 49996.482263 +49997.053452 49993.208708 49990.843012 49991.351964 49994.445059 49998.316657 50000.707182 50000.226663 49997.162130 49993.303951 49990.901057 49991.351964 49994.386968 49998.221298 50000.598401 50000.116058 49997.053452 +50000.060488 49996.227994 49993.874351 49994.386968 49997.465959 50001.303163 50003.653533 50003.154790 50000.113755 49996.312901 49993.968155 49994.445059 49997.465959 50001.265142 50003.612239 50003.118424 50000.060488 +50003.728604 49999.966075 49997.681336 49998.221298 50001.265142 50005.016867 50007.276317 50006.736770 50003.735493 50000.035891 49997.794565 49998.316657 50001.303163 50005.016867 50007.282470 50006.756660 50003.728604 +50005.903592 50002.223861 50000.021666 50000.598401 50003.612239 50007.282470 50009.454954 50008.875580 50005.908586 50002.298954 50000.148813 50000.707182 50003.653533 50007.276317 50009.454954 50008.895560 50005.903592 +50005.326210 50001.685769 49999.522066 50000.116058 50003.118424 50006.756660 50008.895560 50008.300747 50005.346159 50001.770233 49999.654852 50000.226663 50003.154790 50006.736770 50008.875580 50008.300747 50005.326210 +50002.357522 49998.683487 49996.482263 49997.053452 50000.060488 50003.728604 50005.903592 50005.326210 50002.357522 49998.745480 49996.597280 49997.162130 50000.113755 50003.735493 50005.908586 50005.346159 50002.357522 +49998.745480 49994.985692 49992.691570 49993.208708 49996.227994 49999.966075 50002.223861 50001.685769 49998.683487 49994.985692 49992.757761 49993.303951 49996.312901 50000.035891 50002.298954 50001.770233 49998.745480 +49996.597280 49992.757761 49990.376844 49990.843012 49993.874351 49997.681336 50000.021666 49999.522066 49996.482263 49992.691570 49990.376844 49990.901057 49993.968155 49997.794565 50000.148813 49999.654852 49996.597280 +49997.162130 49993.303951 49990.901057 49991.351964 49994.386968 49998.221298 50000.598401 50000.116058 49997.053452 49993.208708 49990.843012 49991.351964 49994.445059 49998.316657 50000.707182 50000.226663 49997.162130 +50000.113755 49996.312901 49993.968155 49994.445059 49997.465959 50001.265142 50003.612239 50003.118424 50000.060488 49996.227994 49993.874351 49994.386968 49997.465959 50001.303163 50003.653533 50003.154790 50000.113755 +50003.735493 50000.035891 49997.794565 49998.316657 50001.303163 50005.016867 50007.282470 50006.756660 50003.728604 49999.966075 49997.681336 49998.221298 50001.265142 50005.016867 50007.276317 50006.736770 50003.735493 +50005.908586 50002.298954 50000.148813 50000.707182 50003.653533 50007.276317 50009.454954 50008.895560 50005.903592 50002.223861 50000.021666 50000.598401 50003.612239 50007.282470 50009.454954 50008.875580 50005.908586 +50005.346159 50001.770233 49999.654852 50000.226663 50003.154790 50006.736770 50008.875580 50008.300747 50005.326210 50001.685769 49999.522066 50000.116058 50003.118424 50006.756660 50008.895560 50008.300747 50005.346159 +50002.357522 49998.745480 49996.597280 49997.162130 50000.113755 50003.735493 50005.908586 50005.346159 50002.357522 49998.683487 49996.482263 49997.053452 50000.060488 50003.728604 50005.903592 50005.326210 50002.357522 diff --git a/examples/next/swm/ref/16x16/u.step0.init.bin b/examples/next/swm/ref/16x16/u.step0.init.bin new file mode 100644 index 0000000000..fdfafa0786 Binary files /dev/null and b/examples/next/swm/ref/16x16/u.step0.init.bin differ diff --git a/examples/next/swm/ref/16x16/u.step0.t200.bin b/examples/next/swm/ref/16x16/u.step0.t200.bin new file mode 100644 index 0000000000..0b6d565229 Binary files /dev/null and b/examples/next/swm/ref/16x16/u.step0.t200.bin differ diff --git a/examples/next/swm/ref/16x16/u.step1.init.bin b/examples/next/swm/ref/16x16/u.step1.init.bin new file mode 100644 index 0000000000..0b6d565229 Binary files /dev/null and b/examples/next/swm/ref/16x16/u.step1.init.bin differ diff --git a/examples/next/swm/ref/16x16/u.step1.t200.bin b/examples/next/swm/ref/16x16/u.step1.t200.bin new file mode 100644 index 0000000000..0e62d214fb Binary files /dev/null and b/examples/next/swm/ref/16x16/u.step1.t200.bin differ diff --git a/examples/next/swm/ref/16x16/u.step2.init.bin b/examples/next/swm/ref/16x16/u.step2.init.bin new file mode 100644 index 0000000000..0e62d214fb Binary files /dev/null and b/examples/next/swm/ref/16x16/u.step2.init.bin differ diff --git a/examples/next/swm/ref/16x16/u.step3.init.bin b/examples/next/swm/ref/16x16/u.step3.init.bin new file mode 100644 index 0000000000..bdb1bd8535 Binary files /dev/null and b/examples/next/swm/ref/16x16/u.step3.init.bin differ diff --git a/examples/next/swm/ref/16x16/u.step4000.final.bin b/examples/next/swm/ref/16x16/u.step4000.final.bin new file mode 100644 index 0000000000..ad61fbb898 Binary files /dev/null and b/examples/next/swm/ref/16x16/u.step4000.final.bin differ diff --git a/examples/next/swm/ref/16x16/u.txt b/examples/next/swm/ref/16x16/u.txt new file mode 100644 index 0000000000..1bd526f07d --- /dev/null +++ b/examples/next/swm/ref/16x16/u.txt @@ -0,0 +1,17 @@ +-0.706507 -0.541446 -0.294453 -0.003252 0.287891 0.534629 0.699408 0.757266 0.699337 0.534570 0.287862 -0.003292 -0.294522 -0.541531 -0.706574 -0.764486 -0.706507 +-2.004870 -1.534692 -0.831232 -0.001786 0.827495 1.530426 2.000004 2.164850 1.999853 1.530293 0.827420 -0.001896 -0.831413 -1.534914 -2.005043 -2.170036 -2.004870 +-2.997075 -2.293469 -1.240699 0.000757 1.242050 2.294292 2.997286 3.244078 2.997087 2.294107 1.241928 0.000597 -1.240929 -2.293744 -2.997294 -3.244222 -2.997075 +-3.533000 -2.703205 -1.461520 0.002897 1.467267 2.708716 3.538196 3.829413 3.537980 2.708497 1.467105 0.002723 -1.461726 -2.703459 -3.533221 -3.824447 -3.533000 +-3.532007 -2.702408 -1.460943 0.003386 1.467849 2.709521 3.539247 3.830574 3.539026 2.709267 1.467644 0.003212 -1.461105 -2.702628 -3.532224 -3.823380 -3.532007 +-2.994767 -2.291607 -1.239338 0.001937 1.243485 2.296290 2.999899 3.246962 2.999681 2.296015 1.243256 0.001777 -1.239460 -2.291793 -2.994966 -3.241735 -2.994767 +-2.002763 -1.532961 -0.829936 -0.000610 0.828990 1.532545 2.002809 2.167936 2.002635 1.532323 0.828808 -0.000719 -0.830011 -1.533093 -2.002914 -2.167766 -2.002763 +-0.705978 -0.540926 -0.294002 -0.002766 0.288597 0.535700 0.700909 0.758922 0.700841 0.535614 0.288528 -0.002806 -0.294031 -0.540984 -0.706048 -0.763928 -0.705978 +0.699337 0.534570 0.287862 -0.003292 -0.294522 -0.541531 -0.706574 -0.764486 -0.706507 -0.541446 -0.294453 -0.003252 0.287891 0.534629 0.699408 0.757266 0.699337 +1.999853 1.530293 0.827420 -0.001896 -0.831413 -1.534914 -2.005043 -2.170036 -2.004870 -1.534692 -0.831232 -0.001786 0.827495 1.530426 2.000004 2.164850 1.999853 +2.997087 2.294107 1.241928 0.000597 -1.240929 -2.293744 -2.997294 -3.244222 -2.997075 -2.293469 -1.240699 0.000757 1.242050 2.294292 2.997286 3.244078 2.997087 +3.537980 2.708497 1.467105 0.002723 -1.461726 -2.703459 -3.533221 -3.824447 -3.533000 -2.703205 -1.461520 0.002897 1.467267 2.708716 3.538196 3.829413 3.537980 +3.539026 2.709267 1.467644 0.003212 -1.461105 -2.702628 -3.532224 -3.823380 -3.532007 -2.702408 -1.460943 0.003386 1.467849 2.709521 3.539247 3.830574 3.539026 +2.999681 2.296015 1.243256 0.001777 -1.239460 -2.291793 -2.994966 -3.241735 -2.994767 -2.291607 -1.239338 0.001937 1.243485 2.296290 2.999899 3.246962 2.999681 +2.002635 1.532323 0.828808 -0.000719 -0.830011 -1.533093 -2.002914 -2.167766 -2.002763 -1.532961 -0.829936 -0.000610 0.828990 1.532545 2.002809 2.167936 2.002635 +0.700841 0.535614 0.288528 -0.002806 -0.294031 -0.540984 -0.706048 -0.763928 -0.705978 -0.540926 -0.294002 -0.002766 0.288597 0.535700 0.700909 0.758922 0.700841 +-0.706507 -0.541446 -0.294453 -0.003252 0.287891 0.534629 0.699408 0.757266 0.699337 0.534570 0.287862 -0.003292 -0.294522 -0.541531 -0.706574 -0.764486 -0.706507 diff --git a/examples/next/swm/ref/16x16/v.step0.init.bin b/examples/next/swm/ref/16x16/v.step0.init.bin new file mode 100644 index 0000000000..e204cd154c Binary files /dev/null and b/examples/next/swm/ref/16x16/v.step0.init.bin differ diff --git a/examples/next/swm/ref/16x16/v.step0.t200.bin b/examples/next/swm/ref/16x16/v.step0.t200.bin new file mode 100644 index 0000000000..314d9a8c4d Binary files /dev/null and b/examples/next/swm/ref/16x16/v.step0.t200.bin differ diff --git a/examples/next/swm/ref/16x16/v.step1.init.bin b/examples/next/swm/ref/16x16/v.step1.init.bin new file mode 100644 index 0000000000..314d9a8c4d Binary files /dev/null and b/examples/next/swm/ref/16x16/v.step1.init.bin differ diff --git a/examples/next/swm/ref/16x16/v.step1.t200.bin b/examples/next/swm/ref/16x16/v.step1.t200.bin new file mode 100644 index 0000000000..a5b6bef076 Binary files /dev/null and b/examples/next/swm/ref/16x16/v.step1.t200.bin differ diff --git a/examples/next/swm/ref/16x16/v.step2.init.bin b/examples/next/swm/ref/16x16/v.step2.init.bin new file mode 100644 index 0000000000..a5b6bef076 Binary files /dev/null and b/examples/next/swm/ref/16x16/v.step2.init.bin differ diff --git a/examples/next/swm/ref/16x16/v.step3.init.bin b/examples/next/swm/ref/16x16/v.step3.init.bin new file mode 100644 index 0000000000..9e3a8ea0e5 Binary files /dev/null and b/examples/next/swm/ref/16x16/v.step3.init.bin differ diff --git a/examples/next/swm/ref/16x16/v.step4000.final.bin b/examples/next/swm/ref/16x16/v.step4000.final.bin new file mode 100644 index 0000000000..6713f413b7 Binary files /dev/null and b/examples/next/swm/ref/16x16/v.step4000.final.bin differ diff --git a/examples/next/swm/ref/16x16/v.txt b/examples/next/swm/ref/16x16/v.txt new file mode 100644 index 0000000000..ff8de5476f --- /dev/null +++ b/examples/next/swm/ref/16x16/v.txt @@ -0,0 +1,17 @@ +0.699337 1.999853 2.997087 3.537980 3.539026 2.999681 2.002635 0.700841 -0.706507 -2.004870 -2.997075 -3.533000 -3.532007 -2.994767 -2.002763 -0.705978 0.699337 +0.534570 1.530293 2.294107 2.708497 2.709267 2.296015 1.532323 0.535614 -0.541446 -1.534692 -2.293469 -2.703205 -2.702408 -2.291607 -1.532961 -0.540926 0.534570 +0.287862 0.827420 1.241928 1.467105 1.467644 1.243256 0.828808 0.288528 -0.294453 -0.831232 -1.240699 -1.461520 -1.460943 -1.239338 -0.829936 -0.294002 0.287862 +-0.003292 -0.001896 0.000597 0.002723 0.003212 0.001777 -0.000719 -0.002806 -0.003252 -0.001786 0.000757 0.002897 0.003386 0.001937 -0.000610 -0.002766 -0.003292 +-0.294522 -0.831413 -1.240929 -1.461726 -1.461105 -1.239460 -0.830011 -0.294031 0.287891 0.827495 1.242050 1.467267 1.467849 1.243485 0.828990 0.288597 -0.294522 +-0.541531 -1.534914 -2.293744 -2.703459 -2.702628 -2.291793 -1.533093 -0.540984 0.534629 1.530426 2.294292 2.708716 2.709521 2.296290 1.532545 0.535700 -0.541531 +-0.706574 -2.005043 -2.997294 -3.533221 -3.532224 -2.994966 -2.002914 -0.706048 0.699408 2.000004 2.997286 3.538196 3.539247 2.999899 2.002809 0.700909 -0.706574 +-0.764486 -2.170036 -3.244222 -3.824447 -3.823380 -3.241735 -2.167766 -0.763928 0.757266 2.164850 3.244078 3.829413 3.830574 3.246962 2.167936 0.758922 -0.764486 +-0.706507 -2.004870 -2.997075 -3.533000 -3.532007 -2.994767 -2.002763 -0.705978 0.699337 1.999853 2.997087 3.537980 3.539026 2.999681 2.002635 0.700841 -0.706507 +-0.541446 -1.534692 -2.293469 -2.703205 -2.702408 -2.291607 -1.532961 -0.540926 0.534570 1.530293 2.294107 2.708497 2.709267 2.296015 1.532323 0.535614 -0.541446 +-0.294453 -0.831232 -1.240699 -1.461520 -1.460943 -1.239338 -0.829936 -0.294002 0.287862 0.827420 1.241928 1.467105 1.467644 1.243256 0.828808 0.288528 -0.294453 +-0.003252 -0.001786 0.000757 0.002897 0.003386 0.001937 -0.000610 -0.002766 -0.003292 -0.001896 0.000597 0.002723 0.003212 0.001777 -0.000719 -0.002806 -0.003252 +0.287891 0.827495 1.242050 1.467267 1.467849 1.243485 0.828990 0.288597 -0.294522 -0.831413 -1.240929 -1.461726 -1.461105 -1.239460 -0.830011 -0.294031 0.287891 +0.534629 1.530426 2.294292 2.708716 2.709521 2.296290 1.532545 0.535700 -0.541531 -1.534914 -2.293744 -2.703459 -2.702628 -2.291793 -1.533093 -0.540984 0.534629 +0.699408 2.000004 2.997286 3.538196 3.539247 2.999899 2.002809 0.700909 -0.706574 -2.005043 -2.997294 -3.533221 -3.532224 -2.994966 -2.002914 -0.706048 0.699408 +0.757266 2.164850 3.244078 3.829413 3.830574 3.246962 2.167936 0.758922 -0.764486 -2.170036 -3.244222 -3.824447 -3.823380 -3.241735 -2.167766 -0.763928 0.757266 +0.699337 1.999853 2.997087 3.537980 3.539026 2.999681 2.002635 0.700841 -0.706507 -2.004870 -2.997075 -3.533000 -3.532007 -2.994767 -2.002763 -0.705978 0.699337 diff --git a/examples/next/swm/ref/16x16/z.step0.t100.bin b/examples/next/swm/ref/16x16/z.step0.t100.bin new file mode 100644 index 0000000000..fd14fdf357 --- /dev/null +++ b/examples/next/swm/ref/16x16/z.step0.t100.bin @@ -0,0 +1 @@ +szu1#ҽ0s&۽4Vཨ\ེG'۽֫U8e$ҽ059{z=|u1#=0s&=-V=\=G'=իU8e$=059{=szu1#ҽ/ݰq齲=MTkB<v2i%T=0!f$$ҽu1#=/ݰq==MT=pB<=v=2i%T===1!f$$=u1#ҽ0s&۽=MTt=6Ÿ[>8= i%T= ɷ&=0s&۽*VyBͶ >Ӛu!>Wۘ>}6w =\=*Vཞ\v1Ÿ[Кu!*qO!=Uyu\=v=7Ÿ[>̚u!>*qO!>=U>=yu=\ཻG'۽.i%T8Yۘ=U[8Ra9U󽝾h]'۽G'=i%T=9=Rۘ>=U>[8R=a9U=h]'=G'۽ΫU8e$ҽ = i%Tx6w 𿯪a9UfҬFv$ҽU8e$===i%T={6w =𿯪=a9U=fҬ=Nv$=ΫU8e$ҽ059{7!f$$ҽ ɷ&۽\vuཡh]'۽Lv$ҽWy{059{=,!f$$= ɷ&=\=xu=h]'=Kv$=Wy{=059{z=u1#=!0s&=OV=\=G'=U8e$=059{=zu1#ҽ(0s&۽HV\G'۽U8e$ҽ.059{z=vu1#=/ݰq==MT=SB<=v=i%T===+!f$$=u1#ҽ/ݰq齧=MTVB<vi%T=)!f$$ҽvu1#=0s&=¸=MT==;Ÿ[>9=i%T= ɷ&=0s&۽=MT=Ͷ >̚u!>Qۘ>s6w =\=GVPBӚu!>*qO!>=U>={u=\v:Ÿ[Ϛu!+qO!=Uyuཞ\=G'=.i%T=8=Yۘ>=U>[8R=a9U=h]'=G'۽i%T9Rۘ=U[8Ra9U󽸾h]'۽G'=ʫU8e$=== i%T=s6w =뿯=a9U=fҬ=Dv$=U8e$ҽ= i%Tu6w 뿯a9UfҬKv$ҽʫU8e$= 059{=>!f$$= ɷ&=\=u=h]'=Yv$=Wy{=.059{,!f$$ҽ ɷ&۽\ཅuིh]'۽Wv$ҽ Xy{ 059{=szu1#ҽ0s&۽4Vཨ\ེG'۽֫U8e$ҽ059{z=|u1#=0s&=-V=\=G'=իU8e$=059{=sz \ No newline at end of file diff --git a/examples/next/swm/ref/16x16/z.step1.t100.bin b/examples/next/swm/ref/16x16/z.step1.t100.bin new file mode 100644 index 0000000000..4f005d9886 Binary files /dev/null and b/examples/next/swm/ref/16x16/z.step1.t100.bin differ diff --git a/examples/next/swm/ref/64x64/cu.step0.t100.bin b/examples/next/swm/ref/64x64/cu.step0.t100.bin new file mode 100644 index 0000000000..b5902e597a Binary files /dev/null and b/examples/next/swm/ref/64x64/cu.step0.t100.bin differ diff --git a/examples/next/swm/ref/64x64/cu.step1.t100.bin b/examples/next/swm/ref/64x64/cu.step1.t100.bin new file mode 100644 index 0000000000..03bfd91a9d Binary files /dev/null and b/examples/next/swm/ref/64x64/cu.step1.t100.bin differ diff --git a/examples/next/swm/ref/64x64/cv.step0.t100.bin b/examples/next/swm/ref/64x64/cv.step0.t100.bin new file mode 100644 index 0000000000..4eada1a521 Binary files /dev/null and b/examples/next/swm/ref/64x64/cv.step0.t100.bin differ diff --git a/examples/next/swm/ref/64x64/cv.step1.t100.bin b/examples/next/swm/ref/64x64/cv.step1.t100.bin new file mode 100644 index 0000000000..28e95c17af Binary files /dev/null and b/examples/next/swm/ref/64x64/cv.step1.t100.bin differ diff --git a/examples/next/swm/ref/64x64/h.step0.t100.bin b/examples/next/swm/ref/64x64/h.step0.t100.bin new file mode 100644 index 0000000000..f1c8cafcbe Binary files /dev/null and b/examples/next/swm/ref/64x64/h.step0.t100.bin differ diff --git a/examples/next/swm/ref/64x64/h.step1.t100.bin b/examples/next/swm/ref/64x64/h.step1.t100.bin new file mode 100644 index 0000000000..761d5dbb15 Binary files /dev/null and b/examples/next/swm/ref/64x64/h.step1.t100.bin differ diff --git a/examples/next/swm/ref/64x64/p.step0.init.bin b/examples/next/swm/ref/64x64/p.step0.init.bin new file mode 100644 index 0000000000..ebb942c29c Binary files /dev/null and b/examples/next/swm/ref/64x64/p.step0.init.bin differ diff --git a/examples/next/swm/ref/64x64/p.step0.t200.bin b/examples/next/swm/ref/64x64/p.step0.t200.bin new file mode 100644 index 0000000000..3642ee138b Binary files /dev/null and b/examples/next/swm/ref/64x64/p.step0.t200.bin differ diff --git a/examples/next/swm/ref/64x64/p.step1.init.bin b/examples/next/swm/ref/64x64/p.step1.init.bin new file mode 100644 index 0000000000..3642ee138b Binary files /dev/null and b/examples/next/swm/ref/64x64/p.step1.init.bin differ diff --git a/examples/next/swm/ref/64x64/p.step1.t200.bin b/examples/next/swm/ref/64x64/p.step1.t200.bin new file mode 100644 index 0000000000..e09163a7a3 Binary files /dev/null and b/examples/next/swm/ref/64x64/p.step1.t200.bin differ diff --git a/examples/next/swm/ref/64x64/p.step2.init.bin b/examples/next/swm/ref/64x64/p.step2.init.bin new file mode 100644 index 0000000000..e09163a7a3 Binary files /dev/null and b/examples/next/swm/ref/64x64/p.step2.init.bin differ diff --git a/examples/next/swm/ref/64x64/p.step3.init.bin b/examples/next/swm/ref/64x64/p.step3.init.bin new file mode 100644 index 0000000000..d504fe241d Binary files /dev/null and b/examples/next/swm/ref/64x64/p.step3.init.bin differ diff --git a/examples/next/swm/ref/64x64/p.step4000.final.bin b/examples/next/swm/ref/64x64/p.step4000.final.bin new file mode 100644 index 0000000000..a22f1f5542 Binary files /dev/null and b/examples/next/swm/ref/64x64/p.step4000.final.bin differ diff --git a/examples/next/swm/ref/64x64/p.txt b/examples/next/swm/ref/64x64/p.txt new file mode 100644 index 0000000000..7677bb05e9 --- /dev/null +++ b/examples/next/swm/ref/64x64/p.txt @@ -0,0 +1,65 @@ +50000.477461 50000.470440 50000.454509 50000.430279 50000.398684 50000.360942 50000.318508 50000.273019 50000.226229 50000.179945 50000.135951 50000.095944 50000.061466 50000.033845 50000.014144 50000.003119 50000.001194 50000.008437 50000.024567 50000.048959 50000.080670 50000.118478 50000.160926 50000.206379 50000.253091 50000.299266 50000.343132 50000.383007 50000.417362 50000.444884 50000.464518 50000.475517 50000.477461 50000.470278 50000.454246 50000.429980 50000.398412 50000.360750 50000.318436 50000.273090 50000.226448 50000.180295 50000.136397 50000.096437 50000.061945 50000.034244 50000.014397 50000.003167 50000.000988 50000.007946 50000.023780 50000.047885 50000.079340 50000.116940 50000.159244 50000.204628 50000.251350 50000.297614 50000.341638 50000.381729 50000.416340 50000.444138 50000.464048 50000.475301 50000.477461 +50000.470278 50000.463254 50000.447318 50000.423082 50000.391481 50000.353732 50000.311291 50000.265796 50000.219001 50000.172712 50000.128714 50000.088705 50000.054226 50000.026606 50000.006908 49999.995889 49999.993971 50000.001224 50000.017366 50000.041771 50000.073498 50000.111322 50000.153788 50000.199259 50000.245989 50000.292181 50000.336064 50000.375954 50000.410322 50000.437853 50000.457495 50000.468497 50000.470440 50000.463254 50000.447214 50000.422939 50000.391357 50000.353678 50000.311347 50000.265982 50000.219320 50000.173147 50000.129231 50000.089253 50000.054746 50000.027031 50000.007173 49999.995936 49999.993752 50000.000708 50000.016542 50000.040650 50000.072109 50000.109715 50000.152026 50000.197418 50000.244147 50000.290417 50000.334448 50000.374543 50000.409158 50000.436958 50000.456869 50000.468121 50000.470278 +50000.454246 50000.447214 50000.431269 50000.407021 50000.375406 50000.337643 50000.295186 50000.249675 50000.202865 50000.156562 50000.112551 50000.072531 50000.038044 50000.010418 49999.990718 49999.979699 49999.977785 49999.985045 50000.001198 50000.025618 50000.057362 50000.095207 50000.137694 50000.183189 50000.229943 50000.276159 50000.320064 50000.359975 50000.394361 50000.421907 50000.441558 50000.452565 50000.454509 50000.447318 50000.431269 50000.406978 50000.375378 50000.337678 50000.295322 50000.249931 50000.203243 50000.157045 50000.113105 50000.073107 50000.038581 50000.010853 49999.990987 49999.979744 49999.977560 49999.984522 50000.000364 50000.024484 50000.055957 50000.093580 50000.135908 50000.181318 50000.228064 50000.274350 50000.318394 50000.358501 50000.393125 50000.420930 50000.440842 50000.452093 50000.454246 +50000.429980 50000.422939 50000.406978 50000.382713 50000.351078 50000.313292 50000.270812 50000.225276 50000.178442 50000.132116 50000.088084 50000.048045 50000.013542 49999.985903 49999.966194 49999.955171 49999.953257 49999.960523 49999.976686 50000.001120 50000.032883 50000.070750 50000.113263 50000.158786 50000.205569 50000.251814 50000.295748 50000.335684 50000.370093 50000.397656 50000.417321 50000.428335 50000.430279 50000.423082 50000.407021 50000.382713 50000.351090 50000.313363 50000.270977 50000.225555 50000.178836 50000.132607 50000.088640 50000.048618 50000.014073 49999.986332 49999.966458 49999.955215 49999.953036 49999.960008 49999.975867 50000.000007 50000.031505 50000.069154 50000.111510 50000.156947 50000.203720 50000.250030 50000.294095 50000.334219 50000.368856 50000.396669 50000.416585 50000.427834 50000.429980 +50000.398412 50000.391357 50000.375378 50000.351090 50000.319428 50000.281613 50000.239102 50000.193536 50000.146670 50000.100313 50000.056252 50000.016187 49999.981660 49999.954003 49999.934280 49999.923248 49999.921331 49999.928599 49999.944770 49999.969219 50000.001002 50000.038893 50000.081434 50000.126988 50000.173804 50000.220083 50000.264049 50000.304016 50000.338451 50000.366036 50000.385716 50000.396739 50000.398684 50000.391481 50000.375406 50000.351078 50000.319428 50000.281670 50000.239250 50000.193792 50000.147037 50000.100775 50000.056776 50000.016728 49999.982164 49999.954410 49999.934530 49999.923289 49999.921121 49999.928110 49999.943993 49999.968162 49999.999692 50000.037377 50000.079769 50000.125242 50000.172049 50000.218391 50000.262483 50000.302630 50000.337283 50000.365106 50000.385027 50000.396274 50000.398412 +50000.360750 50000.353678 50000.337678 50000.313363 50000.281670 50000.243821 50000.201274 50000.155670 50000.108766 50000.062372 50000.018277 49999.978179 49999.943624 49999.915943 49999.896201 49999.885157 49999.883233 49999.890501 49999.906680 49999.931142 49999.962944 50000.000861 50000.043432 50000.089020 50000.135872 50000.182188 50000.226190 50000.266190 50000.300655 50000.328264 50000.347962 50000.358994 50000.360942 50000.353732 50000.337643 50000.313292 50000.281613 50000.243821 50000.201363 50000.155866 50000.109071 50000.062772 50000.018740 49999.978665 49999.944080 49999.916314 49999.896431 49999.885195 49999.883041 49999.890053 49999.905965 49999.930169 49999.961740 49999.999467 50000.041903 50000.087420 50000.134268 50000.180646 50000.224771 50000.264943 50000.299616 50000.327451 50000.347376 50000.358621 50000.360750 +50000.318436 50000.311347 50000.295322 50000.270977 50000.239250 50000.201363 50000.158776 50000.113130 50000.066185 50000.019750 49999.975615 49999.935481 49999.900894 49999.873185 49999.853421 49999.842361 49999.840428 49999.847694 49999.863878 49999.888353 49999.920175 49999.958117 50000.000719 50000.046343 50000.093232 50000.139588 50000.183628 50000.223664 50000.258161 50000.285797 50000.305514 50000.316558 50000.318508 50000.311291 50000.295186 50000.270812 50000.239102 50000.201274 50000.158776 50000.113237 50000.066400 50000.020062 49999.975996 49999.935892 49999.901287 49999.873509 49999.853624 49999.842397 49999.840260 49999.847298 49999.863244 49999.887490 49999.919105 49999.956881 49999.999366 50000.044930 50000.091824 50000.138243 50000.182403 50000.222604 50000.257298 50000.285146 50000.305076 50000.316318 50000.318436 +50000.273090 50000.265982 50000.249931 50000.225555 50000.193792 50000.155866 50000.113237 50000.067547 50000.020558 49999.974081 49999.929905 49999.889732 49999.855111 49999.827372 49999.807583 49999.796505 49999.794561 49999.801824 49999.818011 49999.842498 49999.874338 49999.912306 49999.954940 50000.000599 50000.047527 50000.093923 50000.138003 50000.178077 50000.212608 50000.240272 50000.260009 50000.271065 50000.273019 50000.265796 50000.249675 50000.225276 50000.193536 50000.155670 50000.113130 50000.067547 50000.020668 49999.974289 49999.930188 49999.890055 49999.855430 49999.827641 49999.807755 49999.796538 49999.794421 49999.801488 49999.817472 49999.841760 49999.873425 49999.911251 49999.953789 49999.999404 50000.046345 50000.092807 50000.137004 50000.177235 50000.211950 50000.239812 50000.259746 50000.270984 50000.273090 +50000.226448 50000.219320 50000.203243 50000.178836 50000.147037 50000.109071 50000.066400 50000.020668 49999.973636 49999.927115 49999.882899 49999.842688 49999.808031 49999.780262 49999.760449 49999.749352 49999.747396 49999.754654 49999.770844 49999.795340 49999.827199 49999.865191 49999.907855 49999.953549 50000.000517 50000.046953 50000.091074 50000.131186 50000.165751 50000.193444 50000.213203 50000.224272 50000.226229 50000.219001 50000.202865 50000.178442 50000.146670 50000.108766 50000.066185 50000.020558 49999.973636 49999.927216 49999.883079 49999.842918 49999.808273 49999.780473 49999.760588 49999.749381 49999.747285 49999.754382 49999.770404 49999.794738 49999.826452 49999.864331 49999.906921 49999.952587 49999.999576 50000.046081 50000.090314 50000.130573 50000.165309 50000.193183 50000.213121 50000.224354 50000.226448 +50000.180295 50000.173147 50000.157045 50000.132607 50000.100775 50000.062772 50000.020062 49999.974289 49999.927216 49999.880656 49999.836401 49999.796154 49999.761464 49999.733666 49999.713829 49999.702713 49999.700744 49999.707997 49999.724189 49999.748694 49999.780569 49999.818585 49999.861278 49999.907006 49999.954011 50000.000487 50000.044647 50000.084798 50000.119397 50000.147119 50000.166900 50000.177983 50000.179945 50000.172712 50000.156562 50000.132116 50000.100313 50000.062372 50000.019750 49999.974081 49999.927115 49999.880656 49999.836484 49999.796294 49999.761629 49999.733820 49999.713934 49999.702738 49999.700663 49999.707790 49999.723850 49999.748228 49999.779990 49999.817919 49999.860560 49999.906275 49999.953309 49999.999855 50000.044122 50000.084408 50000.119162 50000.147046 50000.166987 50000.178214 50000.180295 +50000.136397 50000.129231 50000.113105 50000.088640 50000.056776 50000.018740 49999.975996 49999.930188 49999.883079 49999.836484 49999.792195 49999.751916 49999.717197 49999.689373 49999.669514 49999.658381 49999.656401 49999.663648 49999.679841 49999.704354 49999.736243 49999.774280 49999.817000 49999.862760 49999.909800 49999.956313 50000.000512 50000.040700 50000.075333 50000.103083 50000.122886 50000.133984 50000.135951 50000.128714 50000.112551 50000.088084 50000.056252 50000.018277 49999.975615 49999.929905 49999.882899 49999.836401 49999.792195 49999.751978 49999.717294 49999.689474 49999.669589 49999.658402 49999.656346 49999.663501 49999.679596 49999.704015 49999.735822 49999.773798 49999.816486 49999.862246 49999.909321 49999.955902 50000.000199 50000.040508 50000.075277 50000.103169 50000.123109 50000.134330 50000.136397 +50000.096437 50000.089253 50000.073107 50000.048618 50000.016728 49999.978665 49999.935892 49999.890055 49999.842918 49999.796294 49999.751978 49999.711673 49999.676930 49999.649085 49999.629207 49999.618059 49999.616069 49999.623311 49999.639504 49999.664024 49999.695926 49999.733981 49999.776725 49999.822513 49999.869586 49999.916134 49999.960368 50000.000590 50000.035255 50000.063033 50000.082858 50000.093970 50000.095944 50000.088705 50000.072531 50000.048045 50000.016187 49999.978179 49999.935481 49999.889732 49999.842688 49999.796154 49999.751916 49999.711673 49999.676970 49999.649141 49999.629255 49999.618076 49999.616037 49999.623217 49999.639344 49999.663799 49999.695646 49999.733662 49999.776390 49999.822189 49999.869298 49999.915909 49999.960230 50000.000556 50000.035336 50000.063232 50000.083170 50000.094383 50000.096437 +50000.061945 50000.054746 50000.038581 50000.014073 49999.982164 49999.944080 49999.901287 49999.855430 49999.808273 49999.761629 49999.717294 49999.676970 49999.642210 49999.614349 49999.594457 49999.583298 49999.581299 49999.588537 49999.604730 49999.629255 49999.661166 49999.699236 49999.742000 49999.787814 49999.834915 49999.881494 49999.925760 49999.966014 50000.000709 50000.028513 50000.048359 50000.059485 50000.061466 50000.054226 50000.038044 50000.013542 49999.981660 49999.943624 49999.900894 49999.855111 49999.808031 49999.761464 49999.717197 49999.676930 49999.642210 49999.614371 49999.594483 49999.583311 49999.581285 49999.588486 49999.604639 49999.629124 49999.661003 49999.699053 49999.741814 49999.787642 49999.834778 49999.881411 49999.925748 49999.966085 50000.000871 50000.028767 50000.048700 50000.059904 50000.061945 +50000.034244 50000.027031 50000.010853 49999.986332 49999.954410 49999.916314 49999.873509 49999.827641 49999.780473 49999.733820 49999.689474 49999.649141 49999.614371 49999.586500 49999.566599 49999.555432 49999.553428 49999.560661 49999.576854 49999.601381 49999.633300 49999.671382 49999.714162 49999.759995 49999.807120 49999.853725 49999.898019 49999.938300 49999.973022 50000.000849 50000.020715 50000.031856 50000.033845 50000.026606 50000.010418 49999.985903 49999.954003 49999.915943 49999.873185 49999.827372 49999.780262 49999.733666 49999.689373 49999.649085 49999.614349 49999.586500 49999.566609 49999.555441 49999.553426 49999.560642 49999.576815 49999.601323 49999.633227 49999.671301 49999.714085 49999.759934 49999.807088 49999.853733 49999.898079 49999.938420 49999.973204 50000.001096 50000.021022 50000.032215 50000.034244 +50000.014397 50000.007173 49999.990987 49999.966458 49999.934530 49999.896431 49999.853624 49999.807755 49999.760588 49999.713934 49999.669589 49999.629255 49999.594483 49999.566609 49999.546704 49999.535533 49999.533525 49999.540756 49999.556947 49999.581475 49999.613397 49999.651486 49999.694277 49999.740125 49999.787267 49999.833893 49999.878209 49999.918514 49999.953258 49999.981107 50000.000991 50000.012146 50000.014144 50000.006908 49999.990718 49999.966194 49999.934280 49999.896201 49999.853421 49999.807583 49999.760449 49999.713829 49999.669514 49999.629207 49999.594457 49999.566599 49999.546704 49999.535538 49999.533529 49999.540756 49999.556942 49999.581465 49999.613385 49999.651475 49999.694271 49999.740131 49999.787291 49999.833941 49999.878286 49999.918623 49999.953400 49999.981283 50000.001197 50000.012379 50000.014397 +50000.003167 49999.995936 49999.979744 49999.955215 49999.923289 49999.885195 49999.842397 49999.796538 49999.749381 49999.702738 49999.658402 49999.618076 49999.583311 49999.555441 49999.535538 49999.524367 49999.522356 49999.529584 49999.545772 49999.570299 49999.602221 49999.640312 49999.683108 49999.728964 49999.776118 49999.822758 49999.867091 49999.907414 49999.942176 49999.970043 49999.989943 50000.001112 50000.003119 49999.995889 49999.979699 49999.955171 49999.923248 49999.885157 49999.842361 49999.796505 49999.749352 49999.702713 49999.658381 49999.618059 49999.583298 49999.555432 49999.535533 49999.524367 49999.522361 49999.529593 49999.545785 49999.570316 49999.602242 49999.640337 49999.683137 49999.728996 49999.776154 49999.822796 49999.867132 49999.907457 49999.942222 49999.970090 49999.989991 50000.001159 50000.003167 +50000.000988 49999.993752 49999.977560 49999.953036 49999.921121 49999.883041 49999.840260 49999.794421 49999.747285 49999.700663 49999.656346 49999.616037 49999.581285 49999.553426 49999.533529 49999.522361 49999.520350 49999.527575 49999.543758 49999.568280 49999.600197 49999.638285 49999.681079 49999.726937 49999.774095 49999.820743 49999.865086 49999.905422 49999.940199 49999.968080 49999.987994 49999.999175 50000.001194 49999.993971 49999.977785 49999.953257 49999.921331 49999.883233 49999.840428 49999.794561 49999.747396 49999.700744 49999.656401 49999.616069 49999.581299 49999.553428 49999.533525 49999.522356 49999.520350 49999.527582 49999.543775 49999.568306 49999.600230 49999.638320 49999.681113 49999.726962 49999.774106 49999.820733 49999.865051 49999.905356 49999.940101 49999.967950 49999.987835 49999.998990 50000.000988 +50000.007946 50000.000708 49999.984522 49999.960008 49999.928110 49999.890053 49999.847298 49999.801488 49999.754382 49999.707790 49999.663501 49999.623217 49999.588486 49999.560642 49999.540756 49999.529593 49999.527582 49999.534804 49999.550980 49999.575493 49999.607401 49999.645479 49999.688265 49999.734117 49999.781273 49999.827921 49999.872268 49999.912610 49999.947396 49999.975289 49999.995215 50000.006408 50000.008437 50000.001224 49999.985045 49999.960523 49999.928599 49999.890501 49999.847694 49999.801824 49999.754654 49999.707997 49999.663648 49999.623311 49999.588537 49999.560661 49999.540756 49999.529584 49999.527575 49999.534804 49999.550991 49999.575514 49999.607428 49999.645506 49999.688282 49999.734111 49999.781233 49999.827835 49999.872126 49999.912405 49999.947125 49999.974951 49999.994816 50000.005957 50000.007946 +50000.023780 50000.016542 50000.000364 49999.975867 49999.943993 49999.905965 49999.863244 49999.817472 49999.770404 49999.723850 49999.679596 49999.639344 49999.604639 49999.576815 49999.556942 49999.545785 49999.543775 49999.550991 49999.567158 49999.591658 49999.623550 49999.661613 49999.704385 49999.750224 49999.797369 49999.844011 49999.888355 49999.928697 49999.963487 49999.991387 50000.011322 50000.022526 50000.024567 50000.017366 50000.001198 49999.976686 49999.944770 49999.906680 49999.863878 49999.818011 49999.770844 49999.724189 49999.679841 49999.639504 49999.604730 49999.576854 49999.556947 49999.545772 49999.543758 49999.550980 49999.567158 49999.591668 49999.623565 49999.661622 49999.704373 49999.750175 49999.797266 49999.843835 49999.888093 49999.928340 49999.963029 49999.990829 50000.010672 50000.021798 50000.023780 +50000.047885 50000.040650 50000.024484 50000.000007 49999.968162 49999.930169 49999.887490 49999.841760 49999.794738 49999.748228 49999.704015 49999.663799 49999.629124 49999.601323 49999.581465 49999.570316 49999.568306 49999.575514 49999.591668 49999.616150 49999.648022 49999.686063 49999.728813 49999.774631 49999.821760 49999.868387 49999.912721 49999.953058 49999.987847 50000.015750 50000.035692 50000.046906 50000.048959 50000.041771 50000.025618 50000.001120 49999.969219 49999.931142 49999.888353 49999.842498 49999.795340 49999.748694 49999.704354 49999.664024 49999.629255 49999.601381 49999.581475 49999.570299 49999.568280 49999.575493 49999.591658 49999.616150 49999.648025 49999.686055 49999.728775 49999.774541 49999.821594 49999.868125 49999.912344 49999.952553 49999.987208 50000.014979 50000.034799 50000.045910 50000.047885 +50000.079340 50000.072109 50000.055957 50000.031505 49999.999692 49999.961740 49999.919105 49999.873425 49999.826452 49999.779990 49999.735822 49999.695646 49999.661003 49999.633227 49999.613385 49999.602242 49999.600230 49999.607428 49999.623565 49999.648025 49999.679871 49999.717883 49999.760605 49999.806396 49999.853500 49999.900106 49999.944424 49999.984751 50000.019534 50000.047436 50000.067383 50000.078605 50000.080670 50000.073498 50000.057362 50000.032883 50000.001002 49999.962944 49999.920175 49999.874338 49999.827199 49999.780569 49999.736243 49999.695926 49999.661166 49999.633300 49999.613397 49999.602221 49999.600197 49999.607401 49999.623550 49999.648022 49999.679871 49999.717869 49999.760553 49999.806280 49999.853291 49999.899777 49999.943953 49999.984121 50000.018739 50000.046478 50000.066275 50000.077370 50000.079340 +50000.116940 50000.109715 50000.093580 50000.069154 50000.037377 49999.999467 49999.956881 49999.911251 49999.864331 49999.817919 49999.773798 49999.733662 49999.699053 49999.671301 49999.651475 49999.640337 49999.638320 49999.645506 49999.661622 49999.686055 49999.717869 49999.755848 49999.798535 49999.844293 49999.891365 49999.937944 49999.982241 50000.022551 50000.057324 50000.085222 50000.105171 50000.116401 50000.118478 50000.111322 50000.095207 50000.070750 50000.038893 50000.000861 49999.958117 49999.912306 49999.865191 49999.818585 49999.774280 49999.733981 49999.699236 49999.671382 49999.651486 49999.640312 49999.638285 49999.645479 49999.661613 49999.686063 49999.717883 49999.755848 49999.798493 49999.844177 49999.891142 49999.937581 49999.981711 50000.021836 50000.056415 50000.084122 50000.103895 50000.114975 50000.116940 +50000.159244 50000.152026 50000.135908 50000.111510 50000.079769 50000.041903 49999.999366 49999.953789 49999.906921 49999.860560 49999.816486 49999.776390 49999.741814 49999.714085 49999.694271 49999.683137 49999.681113 49999.688282 49999.704373 49999.728775 49999.760553 49999.798493 49999.841140 49999.886859 49999.933895 49999.980442 50000.024711 50000.065001 50000.099760 50000.127651 50000.147599 50000.158836 50000.160926 50000.153788 50000.137694 50000.113263 50000.081434 50000.043432 50000.000719 49999.954940 49999.907855 49999.861278 49999.817000 49999.776725 49999.742000 49999.714162 49999.694277 49999.683108 49999.681079 49999.688265 49999.704385 49999.728813 49999.760605 49999.798535 49999.841140 49999.886780 49999.933698 49999.980090 50000.024173 50000.064254 50000.098794 50000.126469 50000.146217 50000.157283 50000.159244 +50000.204628 50000.197418 50000.181318 50000.156947 50000.125242 50000.087420 50000.044930 49999.999404 49999.952587 49999.906275 49999.862246 49999.822189 49999.787642 49999.759934 49999.740131 49999.728996 49999.726962 49999.734111 49999.750175 49999.774541 49999.806280 49999.844177 49999.886780 49999.932455 49999.979451 50000.025962 50000.070200 50000.110465 50000.145208 50000.173089 50000.193036 50000.204277 50000.206379 50000.199259 50000.183189 50000.158786 50000.126988 50000.089020 50000.046343 50000.000599 49999.953549 49999.907006 49999.862760 49999.822513 49999.787814 49999.759995 49999.740125 49999.728964 49999.726937 49999.734117 49999.750224 49999.774631 49999.806396 49999.844293 49999.886859 49999.932455 49999.979328 50000.025673 50000.069710 50000.109748 50000.144250 50000.171894 50000.191619 50000.202671 50000.204628 +50000.251350 50000.244147 50000.228064 50000.203720 50000.172049 50000.134268 50000.091824 50000.046345 49999.999576 49999.953309 49999.909321 49999.869298 49999.834778 49999.807088 49999.787291 49999.776154 49999.774106 49999.781233 49999.797266 49999.821594 49999.853291 49999.891142 49999.933698 49999.979328 50000.026280 50000.072752 50000.116957 50000.157196 50000.191919 50000.219789 50000.239731 50000.250977 50000.253091 50000.245989 50000.229943 50000.205569 50000.173804 50000.135872 50000.093232 50000.047527 50000.000517 49999.954011 49999.909800 49999.869586 49999.834915 49999.807120 49999.787267 49999.776118 49999.774095 49999.781273 49999.797369 49999.821760 49999.853500 49999.891365 49999.933895 49999.979451 50000.026280 50000.072581 50000.116575 50000.156573 50000.191039 50000.218653 50000.238356 50000.249396 50000.251350 +50000.297614 50000.290417 50000.274350 50000.250030 50000.218391 50000.180646 50000.138243 50000.092807 50000.046081 49999.999855 49999.955902 49999.915909 49999.881411 49999.853733 49999.833941 49999.822796 49999.820733 49999.827835 49999.843835 49999.868125 49999.899777 49999.937581 49999.980090 50000.025673 50000.072581 50000.119013 50000.163184 50000.203394 50000.238097 50000.265954 50000.285893 50000.297142 50000.299266 50000.292181 50000.276159 50000.251814 50000.220083 50000.182188 50000.139588 50000.093923 50000.046953 50000.000487 49999.956313 49999.916134 49999.881494 49999.853725 49999.833893 49999.822758 49999.820743 49999.827921 49999.844011 49999.868387 49999.900106 49999.937944 49999.980442 50000.025962 50000.072752 50000.119013 50000.162968 50000.202929 50000.237362 50000.264949 50000.284633 50000.295661 50000.297614 +50000.341638 50000.334448 50000.318394 50000.294095 50000.262483 50000.224771 50000.182403 50000.137004 50000.090314 50000.044122 50000.000199 49999.960230 49999.925748 49999.898079 49999.878286 49999.867132 49999.865051 49999.872126 49999.888093 49999.912344 49999.943953 49999.981711 50000.024173 50000.069710 50000.116575 50000.162968 50000.207105 50000.247288 50000.281969 50000.309814 50000.329747 50000.340998 50000.343132 50000.336064 50000.320064 50000.295748 50000.264049 50000.226190 50000.183628 50000.138003 50000.091074 50000.044647 50000.000512 49999.960368 49999.925760 49999.898019 49999.878209 49999.867091 49999.865086 49999.872268 49999.888355 49999.912721 49999.944424 49999.982241 50000.024711 50000.070200 50000.116957 50000.163184 50000.207105 50000.247033 50000.281439 50000.309003 50000.328670 50000.339688 50000.341638 +50000.381729 50000.374543 50000.358501 50000.334219 50000.302630 50000.264943 50000.222604 50000.177235 50000.130573 50000.084408 50000.040508 50000.000556 49999.966085 49999.938420 49999.918623 49999.907457 49999.905356 49999.912405 49999.928340 49999.952553 49999.984121 50000.021836 50000.064254 50000.109748 50000.156573 50000.202929 50000.247033 50000.287190 50000.321853 50000.349684 50000.369612 50000.380864 50000.383007 50000.375954 50000.359975 50000.335684 50000.304016 50000.266190 50000.223664 50000.178077 50000.131186 50000.084798 50000.040700 50000.000590 49999.966014 49999.938300 49999.918514 49999.907414 49999.905422 49999.912610 49999.928697 49999.953058 49999.984751 50000.022551 50000.065001 50000.110465 50000.157196 50000.203394 50000.247288 50000.287190 50000.321572 50000.349117 50000.368770 50000.379780 50000.381729 +50000.416340 50000.409158 50000.393125 50000.368856 50000.337283 50000.299616 50000.257298 50000.211950 50000.165309 50000.119162 50000.075277 50000.035336 50000.000871 49999.973204 49999.953400 49999.942222 49999.940101 49999.947125 49999.963029 49999.987208 50000.018739 50000.056415 50000.098794 50000.144250 50000.191039 50000.237362 50000.281439 50000.321572 50000.356217 50000.384037 50000.403959 50000.415213 50000.417362 50000.410322 50000.394361 50000.370093 50000.338451 50000.300655 50000.258161 50000.212608 50000.165751 50000.119397 50000.075333 50000.035255 50000.000709 49999.973022 49999.953258 49999.942176 49999.940199 49999.947396 49999.963487 49999.987847 50000.019534 50000.057324 50000.099760 50000.145208 50000.191919 50000.238097 50000.281969 50000.321853 50000.356217 50000.383747 50000.403389 50000.414393 50000.416340 +50000.444138 50000.436958 50000.420930 50000.396669 50000.365106 50000.327451 50000.285146 50000.239812 50000.193183 50000.147046 50000.103169 50000.063232 50000.028767 50000.001096 49999.981283 49999.970090 49999.967950 49999.974951 49999.990829 50000.014979 50000.046478 50000.084122 50000.126469 50000.171894 50000.218653 50000.264949 50000.309003 50000.349117 50000.383747 50000.411558 50000.431475 50000.442729 50000.444884 50000.437853 50000.421907 50000.397656 50000.366036 50000.328264 50000.285797 50000.240272 50000.193444 50000.147119 50000.103083 50000.063033 50000.028513 50000.000849 49999.981107 49999.970043 49999.968080 49999.975289 49999.991387 50000.015750 50000.047436 50000.085222 50000.127651 50000.173089 50000.219789 50000.265954 50000.309814 50000.349684 50000.384037 50000.411558 50000.431193 50000.442192 50000.444138 +50000.464048 50000.456869 50000.440842 50000.416585 50000.385027 50000.347376 50000.305076 50000.259746 50000.213121 50000.166987 50000.123109 50000.083170 50000.048700 50000.021022 50000.001197 49999.989991 49999.987835 49999.994816 50000.010672 50000.034799 50000.066275 50000.103895 50000.146217 50000.191619 50000.238356 50000.284633 50000.328670 50000.368770 50000.403389 50000.431193 50000.451106 50000.462360 50000.464518 50000.457495 50000.441558 50000.417321 50000.385716 50000.347962 50000.305514 50000.260009 50000.213203 50000.166900 50000.122886 50000.082858 50000.048359 50000.020715 50000.000991 49999.989943 49999.987994 49999.995215 50000.011322 50000.035692 50000.067383 50000.105171 50000.147599 50000.193036 50000.239731 50000.285893 50000.329747 50000.369612 50000.403959 50000.431475 50000.451106 50000.462103 50000.464048 +50000.475301 50000.468121 50000.452093 50000.427834 50000.396274 50000.358621 50000.316318 50000.270984 50000.224354 50000.178214 50000.134330 50000.094383 50000.059904 50000.032215 50000.012379 50000.001159 49999.998990 50000.005957 50000.021798 50000.045910 50000.077370 50000.114975 50000.157283 50000.202671 50000.249396 50000.295661 50000.339688 50000.379780 50000.414393 50000.442192 50000.462103 50000.473357 50000.475517 50000.468497 50000.452565 50000.428335 50000.396739 50000.358994 50000.316558 50000.271065 50000.224272 50000.177983 50000.133984 50000.093970 50000.059485 50000.031856 50000.012146 50000.001112 49999.999175 50000.006408 50000.022526 50000.046906 50000.078605 50000.116401 50000.158836 50000.204277 50000.250977 50000.297142 50000.340998 50000.380864 50000.415213 50000.442729 50000.462360 50000.473357 50000.475301 +50000.477461 50000.470278 50000.454246 50000.429980 50000.398412 50000.360750 50000.318436 50000.273090 50000.226448 50000.180295 50000.136397 50000.096437 50000.061945 50000.034244 50000.014397 50000.003167 50000.000988 50000.007946 50000.023780 50000.047885 50000.079340 50000.116940 50000.159244 50000.204628 50000.251350 50000.297614 50000.341638 50000.381729 50000.416340 50000.444138 50000.464048 50000.475301 50000.477461 50000.470440 50000.454509 50000.430279 50000.398684 50000.360942 50000.318508 50000.273019 50000.226229 50000.179945 50000.135951 50000.095944 50000.061466 50000.033845 50000.014144 50000.003119 50000.001194 50000.008437 50000.024567 50000.048959 50000.080670 50000.118478 50000.160926 50000.206379 50000.253091 50000.299266 50000.343132 50000.383007 50000.417362 50000.444884 50000.464518 50000.475517 50000.477461 +50000.470440 50000.463254 50000.447214 50000.422939 50000.391357 50000.353678 50000.311347 50000.265982 50000.219320 50000.173147 50000.129231 50000.089253 50000.054746 50000.027031 50000.007173 49999.995936 49999.993752 50000.000708 50000.016542 50000.040650 50000.072109 50000.109715 50000.152026 50000.197418 50000.244147 50000.290417 50000.334448 50000.374543 50000.409158 50000.436958 50000.456869 50000.468121 50000.470278 50000.463254 50000.447318 50000.423082 50000.391481 50000.353732 50000.311291 50000.265796 50000.219001 50000.172712 50000.128714 50000.088705 50000.054226 50000.026606 50000.006908 49999.995889 49999.993971 50000.001224 50000.017366 50000.041771 50000.073498 50000.111322 50000.153788 50000.199259 50000.245989 50000.292181 50000.336064 50000.375954 50000.410322 50000.437853 50000.457495 50000.468497 50000.470440 +50000.454509 50000.447318 50000.431269 50000.406978 50000.375378 50000.337678 50000.295322 50000.249931 50000.203243 50000.157045 50000.113105 50000.073107 50000.038581 50000.010853 49999.990987 49999.979744 49999.977560 49999.984522 50000.000364 50000.024484 50000.055957 50000.093580 50000.135908 50000.181318 50000.228064 50000.274350 50000.318394 50000.358501 50000.393125 50000.420930 50000.440842 50000.452093 50000.454246 50000.447214 50000.431269 50000.407021 50000.375406 50000.337643 50000.295186 50000.249675 50000.202865 50000.156562 50000.112551 50000.072531 50000.038044 50000.010418 49999.990718 49999.979699 49999.977785 49999.985045 50000.001198 50000.025618 50000.057362 50000.095207 50000.137694 50000.183189 50000.229943 50000.276159 50000.320064 50000.359975 50000.394361 50000.421907 50000.441558 50000.452565 50000.454509 +50000.430279 50000.423082 50000.407021 50000.382713 50000.351090 50000.313363 50000.270977 50000.225555 50000.178836 50000.132607 50000.088640 50000.048618 50000.014073 49999.986332 49999.966458 49999.955215 49999.953036 49999.960008 49999.975867 50000.000007 50000.031505 50000.069154 50000.111510 50000.156947 50000.203720 50000.250030 50000.294095 50000.334219 50000.368856 50000.396669 50000.416585 50000.427834 50000.429980 50000.422939 50000.406978 50000.382713 50000.351078 50000.313292 50000.270812 50000.225276 50000.178442 50000.132116 50000.088084 50000.048045 50000.013542 49999.985903 49999.966194 49999.955171 49999.953257 49999.960523 49999.976686 50000.001120 50000.032883 50000.070750 50000.113263 50000.158786 50000.205569 50000.251814 50000.295748 50000.335684 50000.370093 50000.397656 50000.417321 50000.428335 50000.430279 +50000.398684 50000.391481 50000.375406 50000.351078 50000.319428 50000.281670 50000.239250 50000.193792 50000.147037 50000.100775 50000.056776 50000.016728 49999.982164 49999.954410 49999.934530 49999.923289 49999.921121 49999.928110 49999.943993 49999.968162 49999.999692 50000.037377 50000.079769 50000.125242 50000.172049 50000.218391 50000.262483 50000.302630 50000.337283 50000.365106 50000.385027 50000.396274 50000.398412 50000.391357 50000.375378 50000.351090 50000.319428 50000.281613 50000.239102 50000.193536 50000.146670 50000.100313 50000.056252 50000.016187 49999.981660 49999.954003 49999.934280 49999.923248 49999.921331 49999.928599 49999.944770 49999.969219 50000.001002 50000.038893 50000.081434 50000.126988 50000.173804 50000.220083 50000.264049 50000.304016 50000.338451 50000.366036 50000.385716 50000.396739 50000.398684 +50000.360942 50000.353732 50000.337643 50000.313292 50000.281613 50000.243821 50000.201363 50000.155866 50000.109071 50000.062772 50000.018740 49999.978665 49999.944080 49999.916314 49999.896431 49999.885195 49999.883041 49999.890053 49999.905965 49999.930169 49999.961740 49999.999467 50000.041903 50000.087420 50000.134268 50000.180646 50000.224771 50000.264943 50000.299616 50000.327451 50000.347376 50000.358621 50000.360750 50000.353678 50000.337678 50000.313363 50000.281670 50000.243821 50000.201274 50000.155670 50000.108766 50000.062372 50000.018277 49999.978179 49999.943624 49999.915943 49999.896201 49999.885157 49999.883233 49999.890501 49999.906680 49999.931142 49999.962944 50000.000861 50000.043432 50000.089020 50000.135872 50000.182188 50000.226190 50000.266190 50000.300655 50000.328264 50000.347962 50000.358994 50000.360942 +50000.318508 50000.311291 50000.295186 50000.270812 50000.239102 50000.201274 50000.158776 50000.113237 50000.066400 50000.020062 49999.975996 49999.935892 49999.901287 49999.873509 49999.853624 49999.842397 49999.840260 49999.847298 49999.863244 49999.887490 49999.919105 49999.956881 49999.999366 50000.044930 50000.091824 50000.138243 50000.182403 50000.222604 50000.257298 50000.285146 50000.305076 50000.316318 50000.318436 50000.311347 50000.295322 50000.270977 50000.239250 50000.201363 50000.158776 50000.113130 50000.066185 50000.019750 49999.975615 49999.935481 49999.900894 49999.873185 49999.853421 49999.842361 49999.840428 49999.847694 49999.863878 49999.888353 49999.920175 49999.958117 50000.000719 50000.046343 50000.093232 50000.139588 50000.183628 50000.223664 50000.258161 50000.285797 50000.305514 50000.316558 50000.318508 +50000.273019 50000.265796 50000.249675 50000.225276 50000.193536 50000.155670 50000.113130 50000.067547 50000.020668 49999.974289 49999.930188 49999.890055 49999.855430 49999.827641 49999.807755 49999.796538 49999.794421 49999.801488 49999.817472 49999.841760 49999.873425 49999.911251 49999.953789 49999.999404 50000.046345 50000.092807 50000.137004 50000.177235 50000.211950 50000.239812 50000.259746 50000.270984 50000.273090 50000.265982 50000.249931 50000.225555 50000.193792 50000.155866 50000.113237 50000.067547 50000.020558 49999.974081 49999.929905 49999.889732 49999.855111 49999.827372 49999.807583 49999.796505 49999.794561 49999.801824 49999.818011 49999.842498 49999.874338 49999.912306 49999.954940 50000.000599 50000.047527 50000.093923 50000.138003 50000.178077 50000.212608 50000.240272 50000.260009 50000.271065 50000.273019 +50000.226229 50000.219001 50000.202865 50000.178442 50000.146670 50000.108766 50000.066185 50000.020558 49999.973636 49999.927216 49999.883079 49999.842918 49999.808273 49999.780473 49999.760588 49999.749381 49999.747285 49999.754382 49999.770404 49999.794738 49999.826452 49999.864331 49999.906921 49999.952587 49999.999576 50000.046081 50000.090314 50000.130573 50000.165309 50000.193183 50000.213121 50000.224354 50000.226448 50000.219320 50000.203243 50000.178836 50000.147037 50000.109071 50000.066400 50000.020668 49999.973636 49999.927115 49999.882899 49999.842688 49999.808031 49999.780262 49999.760449 49999.749352 49999.747396 49999.754654 49999.770844 49999.795340 49999.827199 49999.865191 49999.907855 49999.953549 50000.000517 50000.046953 50000.091074 50000.131186 50000.165751 50000.193444 50000.213203 50000.224272 50000.226229 +50000.179945 50000.172712 50000.156562 50000.132116 50000.100313 50000.062372 50000.019750 49999.974081 49999.927115 49999.880656 49999.836484 49999.796294 49999.761629 49999.733820 49999.713934 49999.702738 49999.700663 49999.707790 49999.723850 49999.748228 49999.779990 49999.817919 49999.860560 49999.906275 49999.953309 49999.999855 50000.044122 50000.084408 50000.119162 50000.147046 50000.166987 50000.178214 50000.180295 50000.173147 50000.157045 50000.132607 50000.100775 50000.062772 50000.020062 49999.974289 49999.927216 49999.880656 49999.836401 49999.796154 49999.761464 49999.733666 49999.713829 49999.702713 49999.700744 49999.707997 49999.724189 49999.748694 49999.780569 49999.818585 49999.861278 49999.907006 49999.954011 50000.000487 50000.044647 50000.084798 50000.119397 50000.147119 50000.166900 50000.177983 50000.179945 +50000.135951 50000.128714 50000.112551 50000.088084 50000.056252 50000.018277 49999.975615 49999.929905 49999.882899 49999.836401 49999.792195 49999.751978 49999.717294 49999.689474 49999.669589 49999.658402 49999.656346 49999.663501 49999.679596 49999.704015 49999.735822 49999.773798 49999.816486 49999.862246 49999.909321 49999.955902 50000.000199 50000.040508 50000.075277 50000.103169 50000.123109 50000.134330 50000.136397 50000.129231 50000.113105 50000.088640 50000.056776 50000.018740 49999.975996 49999.930188 49999.883079 49999.836484 49999.792195 49999.751916 49999.717197 49999.689373 49999.669514 49999.658381 49999.656401 49999.663648 49999.679841 49999.704354 49999.736243 49999.774280 49999.817000 49999.862760 49999.909800 49999.956313 50000.000512 50000.040700 50000.075333 50000.103083 50000.122886 50000.133984 50000.135951 +50000.095944 50000.088705 50000.072531 50000.048045 50000.016187 49999.978179 49999.935481 49999.889732 49999.842688 49999.796154 49999.751916 49999.711673 49999.676970 49999.649141 49999.629255 49999.618076 49999.616037 49999.623217 49999.639344 49999.663799 49999.695646 49999.733662 49999.776390 49999.822189 49999.869298 49999.915909 49999.960230 50000.000556 50000.035336 50000.063232 50000.083170 50000.094383 50000.096437 50000.089253 50000.073107 50000.048618 50000.016728 49999.978665 49999.935892 49999.890055 49999.842918 49999.796294 49999.751978 49999.711673 49999.676930 49999.649085 49999.629207 49999.618059 49999.616069 49999.623311 49999.639504 49999.664024 49999.695926 49999.733981 49999.776725 49999.822513 49999.869586 49999.916134 49999.960368 50000.000590 50000.035255 50000.063033 50000.082858 50000.093970 50000.095944 +50000.061466 50000.054226 50000.038044 50000.013542 49999.981660 49999.943624 49999.900894 49999.855111 49999.808031 49999.761464 49999.717197 49999.676930 49999.642210 49999.614371 49999.594483 49999.583311 49999.581285 49999.588486 49999.604639 49999.629124 49999.661003 49999.699053 49999.741814 49999.787642 49999.834778 49999.881411 49999.925748 49999.966085 50000.000871 50000.028767 50000.048700 50000.059904 50000.061945 50000.054746 50000.038581 50000.014073 49999.982164 49999.944080 49999.901287 49999.855430 49999.808273 49999.761629 49999.717294 49999.676970 49999.642210 49999.614349 49999.594457 49999.583298 49999.581299 49999.588537 49999.604730 49999.629255 49999.661166 49999.699236 49999.742000 49999.787814 49999.834915 49999.881494 49999.925760 49999.966014 50000.000709 50000.028513 50000.048359 50000.059485 50000.061466 +50000.033845 50000.026606 50000.010418 49999.985903 49999.954003 49999.915943 49999.873185 49999.827372 49999.780262 49999.733666 49999.689373 49999.649085 49999.614349 49999.586500 49999.566609 49999.555441 49999.553426 49999.560642 49999.576815 49999.601323 49999.633227 49999.671301 49999.714085 49999.759934 49999.807088 49999.853733 49999.898079 49999.938420 49999.973204 50000.001096 50000.021022 50000.032215 50000.034244 50000.027031 50000.010853 49999.986332 49999.954410 49999.916314 49999.873509 49999.827641 49999.780473 49999.733820 49999.689474 49999.649141 49999.614371 49999.586500 49999.566599 49999.555432 49999.553428 49999.560661 49999.576854 49999.601381 49999.633300 49999.671382 49999.714162 49999.759995 49999.807120 49999.853725 49999.898019 49999.938300 49999.973022 50000.000849 50000.020715 50000.031856 50000.033845 +50000.014144 50000.006908 49999.990718 49999.966194 49999.934280 49999.896201 49999.853421 49999.807583 49999.760449 49999.713829 49999.669514 49999.629207 49999.594457 49999.566599 49999.546704 49999.535538 49999.533529 49999.540756 49999.556942 49999.581465 49999.613385 49999.651475 49999.694271 49999.740131 49999.787291 49999.833941 49999.878286 49999.918623 49999.953400 49999.981283 50000.001197 50000.012379 50000.014397 50000.007173 49999.990987 49999.966458 49999.934530 49999.896431 49999.853624 49999.807755 49999.760588 49999.713934 49999.669589 49999.629255 49999.594483 49999.566609 49999.546704 49999.535533 49999.533525 49999.540756 49999.556947 49999.581475 49999.613397 49999.651486 49999.694277 49999.740125 49999.787267 49999.833893 49999.878209 49999.918514 49999.953258 49999.981107 50000.000991 50000.012146 50000.014144 +50000.003119 49999.995889 49999.979699 49999.955171 49999.923248 49999.885157 49999.842361 49999.796505 49999.749352 49999.702713 49999.658381 49999.618059 49999.583298 49999.555432 49999.535533 49999.524367 49999.522361 49999.529593 49999.545785 49999.570316 49999.602242 49999.640337 49999.683137 49999.728996 49999.776154 49999.822796 49999.867132 49999.907457 49999.942222 49999.970090 49999.989991 50000.001159 50000.003167 49999.995936 49999.979744 49999.955215 49999.923289 49999.885195 49999.842397 49999.796538 49999.749381 49999.702738 49999.658402 49999.618076 49999.583311 49999.555441 49999.535538 49999.524367 49999.522356 49999.529584 49999.545772 49999.570299 49999.602221 49999.640312 49999.683108 49999.728964 49999.776118 49999.822758 49999.867091 49999.907414 49999.942176 49999.970043 49999.989943 50000.001112 50000.003119 +50000.001194 49999.993971 49999.977785 49999.953257 49999.921331 49999.883233 49999.840428 49999.794561 49999.747396 49999.700744 49999.656401 49999.616069 49999.581299 49999.553428 49999.533525 49999.522356 49999.520350 49999.527582 49999.543775 49999.568306 49999.600230 49999.638320 49999.681113 49999.726962 49999.774106 49999.820733 49999.865051 49999.905356 49999.940101 49999.967950 49999.987835 49999.998990 50000.000988 49999.993752 49999.977560 49999.953036 49999.921121 49999.883041 49999.840260 49999.794421 49999.747285 49999.700663 49999.656346 49999.616037 49999.581285 49999.553426 49999.533529 49999.522361 49999.520350 49999.527575 49999.543758 49999.568280 49999.600197 49999.638285 49999.681079 49999.726937 49999.774095 49999.820743 49999.865086 49999.905422 49999.940199 49999.968080 49999.987994 49999.999175 50000.001194 +50000.008437 50000.001224 49999.985045 49999.960523 49999.928599 49999.890501 49999.847694 49999.801824 49999.754654 49999.707997 49999.663648 49999.623311 49999.588537 49999.560661 49999.540756 49999.529584 49999.527575 49999.534804 49999.550991 49999.575514 49999.607428 49999.645506 49999.688282 49999.734111 49999.781233 49999.827835 49999.872126 49999.912405 49999.947125 49999.974951 49999.994816 50000.005957 50000.007946 50000.000708 49999.984522 49999.960008 49999.928110 49999.890053 49999.847298 49999.801488 49999.754382 49999.707790 49999.663501 49999.623217 49999.588486 49999.560642 49999.540756 49999.529593 49999.527582 49999.534804 49999.550980 49999.575493 49999.607401 49999.645479 49999.688265 49999.734117 49999.781273 49999.827921 49999.872268 49999.912610 49999.947396 49999.975289 49999.995215 50000.006408 50000.008437 +50000.024567 50000.017366 50000.001198 49999.976686 49999.944770 49999.906680 49999.863878 49999.818011 49999.770844 49999.724189 49999.679841 49999.639504 49999.604730 49999.576854 49999.556947 49999.545772 49999.543758 49999.550980 49999.567158 49999.591668 49999.623565 49999.661622 49999.704373 49999.750175 49999.797266 49999.843835 49999.888093 49999.928340 49999.963029 49999.990829 50000.010672 50000.021798 50000.023780 50000.016542 50000.000364 49999.975867 49999.943993 49999.905965 49999.863244 49999.817472 49999.770404 49999.723850 49999.679596 49999.639344 49999.604639 49999.576815 49999.556942 49999.545785 49999.543775 49999.550991 49999.567158 49999.591658 49999.623550 49999.661613 49999.704385 49999.750224 49999.797369 49999.844011 49999.888355 49999.928697 49999.963487 49999.991387 50000.011322 50000.022526 50000.024567 +50000.048959 50000.041771 50000.025618 50000.001120 49999.969219 49999.931142 49999.888353 49999.842498 49999.795340 49999.748694 49999.704354 49999.664024 49999.629255 49999.601381 49999.581475 49999.570299 49999.568280 49999.575493 49999.591658 49999.616150 49999.648025 49999.686055 49999.728775 49999.774541 49999.821594 49999.868125 49999.912344 49999.952553 49999.987208 50000.014979 50000.034799 50000.045910 50000.047885 50000.040650 50000.024484 50000.000007 49999.968162 49999.930169 49999.887490 49999.841760 49999.794738 49999.748228 49999.704015 49999.663799 49999.629124 49999.601323 49999.581465 49999.570316 49999.568306 49999.575514 49999.591668 49999.616150 49999.648022 49999.686063 49999.728813 49999.774631 49999.821760 49999.868387 49999.912721 49999.953058 49999.987847 50000.015750 50000.035692 50000.046906 50000.048959 +50000.080670 50000.073498 50000.057362 50000.032883 50000.001002 49999.962944 49999.920175 49999.874338 49999.827199 49999.780569 49999.736243 49999.695926 49999.661166 49999.633300 49999.613397 49999.602221 49999.600197 49999.607401 49999.623550 49999.648022 49999.679871 49999.717869 49999.760553 49999.806280 49999.853291 49999.899777 49999.943953 49999.984121 50000.018739 50000.046478 50000.066275 50000.077370 50000.079340 50000.072109 50000.055957 50000.031505 49999.999692 49999.961740 49999.919105 49999.873425 49999.826452 49999.779990 49999.735822 49999.695646 49999.661003 49999.633227 49999.613385 49999.602242 49999.600230 49999.607428 49999.623565 49999.648025 49999.679871 49999.717883 49999.760605 49999.806396 49999.853500 49999.900106 49999.944424 49999.984751 50000.019534 50000.047436 50000.067383 50000.078605 50000.080670 +50000.118478 50000.111322 50000.095207 50000.070750 50000.038893 50000.000861 49999.958117 49999.912306 49999.865191 49999.818585 49999.774280 49999.733981 49999.699236 49999.671382 49999.651486 49999.640312 49999.638285 49999.645479 49999.661613 49999.686063 49999.717883 49999.755848 49999.798493 49999.844177 49999.891142 49999.937581 49999.981711 50000.021836 50000.056415 50000.084122 50000.103895 50000.114975 50000.116940 50000.109715 50000.093580 50000.069154 50000.037377 49999.999467 49999.956881 49999.911251 49999.864331 49999.817919 49999.773798 49999.733662 49999.699053 49999.671301 49999.651475 49999.640337 49999.638320 49999.645506 49999.661622 49999.686055 49999.717869 49999.755848 49999.798535 49999.844293 49999.891365 49999.937944 49999.982241 50000.022551 50000.057324 50000.085222 50000.105171 50000.116401 50000.118478 +50000.160926 50000.153788 50000.137694 50000.113263 50000.081434 50000.043432 50000.000719 49999.954940 49999.907855 49999.861278 49999.817000 49999.776725 49999.742000 49999.714162 49999.694277 49999.683108 49999.681079 49999.688265 49999.704385 49999.728813 49999.760605 49999.798535 49999.841140 49999.886780 49999.933698 49999.980090 50000.024173 50000.064254 50000.098794 50000.126469 50000.146217 50000.157283 50000.159244 50000.152026 50000.135908 50000.111510 50000.079769 50000.041903 49999.999366 49999.953789 49999.906921 49999.860560 49999.816486 49999.776390 49999.741814 49999.714085 49999.694271 49999.683137 49999.681113 49999.688282 49999.704373 49999.728775 49999.760553 49999.798493 49999.841140 49999.886859 49999.933895 49999.980442 50000.024711 50000.065001 50000.099760 50000.127651 50000.147599 50000.158836 50000.160926 +50000.206379 50000.199259 50000.183189 50000.158786 50000.126988 50000.089020 50000.046343 50000.000599 49999.953549 49999.907006 49999.862760 49999.822513 49999.787814 49999.759995 49999.740125 49999.728964 49999.726937 49999.734117 49999.750224 49999.774631 49999.806396 49999.844293 49999.886859 49999.932455 49999.979328 50000.025673 50000.069710 50000.109748 50000.144250 50000.171894 50000.191619 50000.202671 50000.204628 50000.197418 50000.181318 50000.156947 50000.125242 50000.087420 50000.044930 49999.999404 49999.952587 49999.906275 49999.862246 49999.822189 49999.787642 49999.759934 49999.740131 49999.728996 49999.726962 49999.734111 49999.750175 49999.774541 49999.806280 49999.844177 49999.886780 49999.932455 49999.979451 50000.025962 50000.070200 50000.110465 50000.145208 50000.173089 50000.193036 50000.204277 50000.206379 +50000.253091 50000.245989 50000.229943 50000.205569 50000.173804 50000.135872 50000.093232 50000.047527 50000.000517 49999.954011 49999.909800 49999.869586 49999.834915 49999.807120 49999.787267 49999.776118 49999.774095 49999.781273 49999.797369 49999.821760 49999.853500 49999.891365 49999.933895 49999.979451 50000.026280 50000.072581 50000.116575 50000.156573 50000.191039 50000.218653 50000.238356 50000.249396 50000.251350 50000.244147 50000.228064 50000.203720 50000.172049 50000.134268 50000.091824 50000.046345 49999.999576 49999.953309 49999.909321 49999.869298 49999.834778 49999.807088 49999.787291 49999.776154 49999.774106 49999.781233 49999.797266 49999.821594 49999.853291 49999.891142 49999.933698 49999.979328 50000.026280 50000.072752 50000.116957 50000.157196 50000.191919 50000.219789 50000.239731 50000.250977 50000.253091 +50000.299266 50000.292181 50000.276159 50000.251814 50000.220083 50000.182188 50000.139588 50000.093923 50000.046953 50000.000487 49999.956313 49999.916134 49999.881494 49999.853725 49999.833893 49999.822758 49999.820743 49999.827921 49999.844011 49999.868387 49999.900106 49999.937944 49999.980442 50000.025962 50000.072752 50000.119013 50000.162968 50000.202929 50000.237362 50000.264949 50000.284633 50000.295661 50000.297614 50000.290417 50000.274350 50000.250030 50000.218391 50000.180646 50000.138243 50000.092807 50000.046081 49999.999855 49999.955902 49999.915909 49999.881411 49999.853733 49999.833941 49999.822796 49999.820733 49999.827835 49999.843835 49999.868125 49999.899777 49999.937581 49999.980090 50000.025673 50000.072581 50000.119013 50000.163184 50000.203394 50000.238097 50000.265954 50000.285893 50000.297142 50000.299266 +50000.343132 50000.336064 50000.320064 50000.295748 50000.264049 50000.226190 50000.183628 50000.138003 50000.091074 50000.044647 50000.000512 49999.960368 49999.925760 49999.898019 49999.878209 49999.867091 49999.865086 49999.872268 49999.888355 49999.912721 49999.944424 49999.982241 50000.024711 50000.070200 50000.116957 50000.163184 50000.207105 50000.247033 50000.281439 50000.309003 50000.328670 50000.339688 50000.341638 50000.334448 50000.318394 50000.294095 50000.262483 50000.224771 50000.182403 50000.137004 50000.090314 50000.044122 50000.000199 49999.960230 49999.925748 49999.898079 49999.878286 49999.867132 49999.865051 49999.872126 49999.888093 49999.912344 49999.943953 49999.981711 50000.024173 50000.069710 50000.116575 50000.162968 50000.207105 50000.247288 50000.281969 50000.309814 50000.329747 50000.340998 50000.343132 +50000.383007 50000.375954 50000.359975 50000.335684 50000.304016 50000.266190 50000.223664 50000.178077 50000.131186 50000.084798 50000.040700 50000.000590 49999.966014 49999.938300 49999.918514 49999.907414 49999.905422 49999.912610 49999.928697 49999.953058 49999.984751 50000.022551 50000.065001 50000.110465 50000.157196 50000.203394 50000.247288 50000.287190 50000.321572 50000.349117 50000.368770 50000.379780 50000.381729 50000.374543 50000.358501 50000.334219 50000.302630 50000.264943 50000.222604 50000.177235 50000.130573 50000.084408 50000.040508 50000.000556 49999.966085 49999.938420 49999.918623 49999.907457 49999.905356 49999.912405 49999.928340 49999.952553 49999.984121 50000.021836 50000.064254 50000.109748 50000.156573 50000.202929 50000.247033 50000.287190 50000.321853 50000.349684 50000.369612 50000.380864 50000.383007 +50000.417362 50000.410322 50000.394361 50000.370093 50000.338451 50000.300655 50000.258161 50000.212608 50000.165751 50000.119397 50000.075333 50000.035255 50000.000709 49999.973022 49999.953258 49999.942176 49999.940199 49999.947396 49999.963487 49999.987847 50000.019534 50000.057324 50000.099760 50000.145208 50000.191919 50000.238097 50000.281969 50000.321853 50000.356217 50000.383747 50000.403389 50000.414393 50000.416340 50000.409158 50000.393125 50000.368856 50000.337283 50000.299616 50000.257298 50000.211950 50000.165309 50000.119162 50000.075277 50000.035336 50000.000871 49999.973204 49999.953400 49999.942222 49999.940101 49999.947125 49999.963029 49999.987208 50000.018739 50000.056415 50000.098794 50000.144250 50000.191039 50000.237362 50000.281439 50000.321572 50000.356217 50000.384037 50000.403959 50000.415213 50000.417362 +50000.444884 50000.437853 50000.421907 50000.397656 50000.366036 50000.328264 50000.285797 50000.240272 50000.193444 50000.147119 50000.103083 50000.063033 50000.028513 50000.000849 49999.981107 49999.970043 49999.968080 49999.975289 49999.991387 50000.015750 50000.047436 50000.085222 50000.127651 50000.173089 50000.219789 50000.265954 50000.309814 50000.349684 50000.384037 50000.411558 50000.431193 50000.442192 50000.444138 50000.436958 50000.420930 50000.396669 50000.365106 50000.327451 50000.285146 50000.239812 50000.193183 50000.147046 50000.103169 50000.063232 50000.028767 50000.001096 49999.981283 49999.970090 49999.967950 49999.974951 49999.990829 50000.014979 50000.046478 50000.084122 50000.126469 50000.171894 50000.218653 50000.264949 50000.309003 50000.349117 50000.383747 50000.411558 50000.431475 50000.442729 50000.444884 +50000.464518 50000.457495 50000.441558 50000.417321 50000.385716 50000.347962 50000.305514 50000.260009 50000.213203 50000.166900 50000.122886 50000.082858 50000.048359 50000.020715 50000.000991 49999.989943 49999.987994 49999.995215 50000.011322 50000.035692 50000.067383 50000.105171 50000.147599 50000.193036 50000.239731 50000.285893 50000.329747 50000.369612 50000.403959 50000.431475 50000.451106 50000.462103 50000.464048 50000.456869 50000.440842 50000.416585 50000.385027 50000.347376 50000.305076 50000.259746 50000.213121 50000.166987 50000.123109 50000.083170 50000.048700 50000.021022 50000.001197 49999.989991 49999.987835 49999.994816 50000.010672 50000.034799 50000.066275 50000.103895 50000.146217 50000.191619 50000.238356 50000.284633 50000.328670 50000.368770 50000.403389 50000.431193 50000.451106 50000.462360 50000.464518 +50000.475517 50000.468497 50000.452565 50000.428335 50000.396739 50000.358994 50000.316558 50000.271065 50000.224272 50000.177983 50000.133984 50000.093970 50000.059485 50000.031856 50000.012146 50000.001112 49999.999175 50000.006408 50000.022526 50000.046906 50000.078605 50000.116401 50000.158836 50000.204277 50000.250977 50000.297142 50000.340998 50000.380864 50000.415213 50000.442729 50000.462360 50000.473357 50000.475301 50000.468121 50000.452093 50000.427834 50000.396274 50000.358621 50000.316318 50000.270984 50000.224354 50000.178214 50000.134330 50000.094383 50000.059904 50000.032215 50000.012379 50000.001159 49999.998990 50000.005957 50000.021798 50000.045910 50000.077370 50000.114975 50000.157283 50000.202671 50000.249396 50000.295661 50000.339688 50000.379780 50000.414393 50000.442192 50000.462103 50000.473357 50000.475517 +50000.477461 50000.470440 50000.454509 50000.430279 50000.398684 50000.360942 50000.318508 50000.273019 50000.226229 50000.179945 50000.135951 50000.095944 50000.061466 50000.033845 50000.014144 50000.003119 50000.001194 50000.008437 50000.024567 50000.048959 50000.080670 50000.118478 50000.160926 50000.206379 50000.253091 50000.299266 50000.343132 50000.383007 50000.417362 50000.444884 50000.464518 50000.475517 50000.477461 50000.470278 50000.454246 50000.429980 50000.398412 50000.360750 50000.318436 50000.273090 50000.226448 50000.180295 50000.136397 50000.096437 50000.061945 50000.034244 50000.014397 50000.003167 50000.000988 50000.007946 50000.023780 50000.047885 50000.079340 50000.116940 50000.159244 50000.204628 50000.251350 50000.297614 50000.341638 50000.381729 50000.416340 50000.444138 50000.464048 50000.475301 50000.477461 diff --git a/examples/next/swm/ref/64x64/u.step0.init.bin b/examples/next/swm/ref/64x64/u.step0.init.bin new file mode 100644 index 0000000000..cfb89e64ee Binary files /dev/null and b/examples/next/swm/ref/64x64/u.step0.init.bin differ diff --git a/examples/next/swm/ref/64x64/u.step0.t200.bin b/examples/next/swm/ref/64x64/u.step0.t200.bin new file mode 100644 index 0000000000..f1d0cf833d Binary files /dev/null and b/examples/next/swm/ref/64x64/u.step0.t200.bin differ diff --git a/examples/next/swm/ref/64x64/u.step1.init.bin b/examples/next/swm/ref/64x64/u.step1.init.bin new file mode 100644 index 0000000000..f1d0cf833d Binary files /dev/null and b/examples/next/swm/ref/64x64/u.step1.init.bin differ diff --git a/examples/next/swm/ref/64x64/u.step1.t200.bin b/examples/next/swm/ref/64x64/u.step1.t200.bin new file mode 100644 index 0000000000..767a0f0a8c Binary files /dev/null and b/examples/next/swm/ref/64x64/u.step1.t200.bin differ diff --git a/examples/next/swm/ref/64x64/u.step2.init.bin b/examples/next/swm/ref/64x64/u.step2.init.bin new file mode 100644 index 0000000000..767a0f0a8c Binary files /dev/null and b/examples/next/swm/ref/64x64/u.step2.init.bin differ diff --git a/examples/next/swm/ref/64x64/u.step3.init.bin b/examples/next/swm/ref/64x64/u.step3.init.bin new file mode 100644 index 0000000000..2df95aa320 Binary files /dev/null and b/examples/next/swm/ref/64x64/u.step3.init.bin differ diff --git a/examples/next/swm/ref/64x64/u.step4000.final.bin b/examples/next/swm/ref/64x64/u.step4000.final.bin new file mode 100644 index 0000000000..b581164454 Binary files /dev/null and b/examples/next/swm/ref/64x64/u.step4000.final.bin differ diff --git a/examples/next/swm/ref/64x64/u.txt b/examples/next/swm/ref/64x64/u.txt new file mode 100644 index 0000000000..789db53660 --- /dev/null +++ b/examples/next/swm/ref/64x64/u.txt @@ -0,0 +1,65 @@ +-0.048067 -0.047374 -0.046226 -0.044634 -0.042613 -0.040184 -0.037369 -0.034195 -0.030694 -0.026898 -0.022845 -0.018573 -0.014124 -0.009540 -0.004866 -0.000146 0.004574 0.009249 0.013832 0.018282 0.022554 0.026607 0.030403 0.033904 0.037078 0.039893 0.042322 0.044343 0.045935 0.047083 0.047776 0.048008 0.047776 0.047083 0.045935 0.044343 0.042322 0.039893 0.037078 0.033904 0.030403 0.026607 0.022554 0.018282 0.013832 0.009249 0.004574 -0.000146 -0.004866 -0.009540 -0.014124 -0.018573 -0.022845 -0.026898 -0.030694 -0.034195 -0.037369 -0.040184 -0.042613 -0.044634 -0.046226 -0.047374 -0.048067 -0.048299 -0.048067 +-0.143444 -0.141370 -0.137937 -0.133176 -0.127134 -0.119869 -0.111451 -0.101962 -0.091491 -0.080141 -0.068021 -0.055246 -0.041941 -0.028234 -0.014256 -0.000142 0.013972 0.027950 0.041657 0.054962 0.067736 0.079857 0.091207 0.101677 0.111167 0.119585 0.126850 0.132892 0.137652 0.141086 0.143159 0.143853 0.143159 0.141086 0.137652 0.132892 0.126850 0.119585 0.111167 0.101678 0.091207 0.079857 0.067736 0.054962 0.041657 0.027950 0.013972 -0.000142 -0.014256 -0.028234 -0.041941 -0.055246 -0.068021 -0.080141 -0.091491 -0.101962 -0.111451 -0.119869 -0.127134 -0.133176 -0.137936 -0.141370 -0.143444 -0.144137 -0.143444 +-0.237434 -0.234001 -0.228315 -0.220431 -0.210426 -0.198396 -0.184457 -0.168742 -0.151403 -0.132608 -0.112537 -0.091383 -0.069351 -0.046652 -0.023505 -0.000133 0.023239 0.046386 0.069085 0.091117 0.112271 0.132342 0.151137 0.168476 0.184190 0.198130 0.210160 0.220165 0.228048 0.233734 0.237168 0.238316 0.237168 0.233734 0.228049 0.220165 0.210160 0.198130 0.184191 0.168476 0.151137 0.132342 0.112271 0.091117 0.069085 0.046386 0.023239 -0.000133 -0.023505 -0.046652 -0.069351 -0.091383 -0.112537 -0.132608 -0.151403 -0.168742 -0.184456 -0.198396 -0.210426 -0.220431 -0.228315 -0.234001 -0.237434 -0.238582 -0.237434 +-0.329134 -0.324374 -0.316490 -0.305560 -0.291688 -0.275009 -0.255681 -0.233893 -0.209853 -0.183794 -0.155966 -0.126636 -0.096089 -0.064617 -0.032524 -0.000119 0.032286 0.064379 0.095851 0.126399 0.155728 0.183556 0.209616 0.233655 0.255444 0.274771 0.291450 0.305322 0.316252 0.324136 0.328896 0.330488 0.328896 0.324136 0.316253 0.305322 0.291451 0.274771 0.255444 0.233656 0.209616 0.183557 0.155728 0.126399 0.095851 0.064379 0.032286 -0.000119 -0.032524 -0.064617 -0.096089 -0.126636 -0.155965 -0.183794 -0.209853 -0.233893 -0.255681 -0.275008 -0.291688 -0.305560 -0.316490 -0.324374 -0.329134 -0.330726 -0.329134 +-0.417662 -0.411620 -0.401615 -0.387743 -0.370138 -0.348969 -0.324441 -0.296788 -0.266279 -0.233206 -0.197889 -0.160666 -0.121898 -0.081956 -0.041226 -0.000100 0.041026 0.081756 0.121698 0.160466 0.197689 0.233006 0.266079 0.296588 0.324240 0.348769 0.369937 0.387542 0.401414 0.411419 0.417461 0.419481 0.417461 0.411419 0.401414 0.387543 0.369938 0.348769 0.324241 0.296589 0.266079 0.233007 0.197689 0.160467 0.121698 0.081756 0.041026 -0.000100 -0.041226 -0.081956 -0.121898 -0.160666 -0.197889 -0.233206 -0.266279 -0.296788 -0.324440 -0.348969 -0.370138 -0.387743 -0.401615 -0.411620 -0.417661 -0.419682 -0.417662 +-0.502164 -0.494899 -0.482869 -0.466189 -0.445020 -0.419566 -0.390072 -0.356823 -0.320138 -0.280370 -0.237903 -0.193146 -0.146530 -0.098503 -0.049528 -0.000077 0.049373 0.098348 0.146375 0.192991 0.237749 0.280215 0.319983 0.356668 0.389917 0.419411 0.444864 0.466033 0.482713 0.494743 0.502008 0.504437 0.502008 0.494743 0.482713 0.466033 0.444865 0.419411 0.389918 0.356668 0.319983 0.280216 0.237749 0.192992 0.146375 0.098348 0.049374 -0.000077 -0.049528 -0.098503 -0.146530 -0.193146 -0.237903 -0.280370 -0.320138 -0.356823 -0.390072 -0.419566 -0.445020 -0.466188 -0.482868 -0.494899 -0.502164 -0.504593 -0.502164 +-0.581827 -0.573410 -0.559470 -0.540143 -0.515614 -0.486120 -0.451946 -0.413419 -0.370911 -0.324832 -0.275625 -0.223764 -0.169749 -0.114099 -0.057351 -0.000052 0.057248 0.113996 0.169645 0.223660 0.275521 0.324728 0.370807 0.413315 0.451841 0.486016 0.515510 0.540038 0.559365 0.573305 0.581723 0.584538 0.581723 0.573305 0.559366 0.540039 0.515510 0.486017 0.451842 0.413315 0.370808 0.324729 0.275522 0.223661 0.169645 0.113996 0.057248 -0.000052 -0.057351 -0.114099 -0.169749 -0.223764 -0.275625 -0.324832 -0.370911 -0.413418 -0.451945 -0.486120 -0.515614 -0.540142 -0.559470 -0.573409 -0.581827 -0.584642 -0.581827 +-0.655887 -0.646397 -0.630682 -0.608894 -0.581241 -0.547992 -0.509465 -0.466032 -0.418111 -0.366164 -0.310690 -0.252225 -0.191331 -0.128595 -0.064621 -0.000024 0.064572 0.128547 0.191283 0.252177 0.310642 0.366115 0.418062 0.465983 0.509416 0.547943 0.581192 0.608844 0.630632 0.646347 0.655837 0.659010 0.655837 0.646347 0.630633 0.608844 0.581193 0.547943 0.509417 0.465984 0.418063 0.366116 0.310642 0.252177 0.191283 0.128547 0.064572 -0.000024 -0.064621 -0.128595 -0.191331 -0.252225 -0.310690 -0.366163 -0.418111 -0.466032 -0.509465 -0.547991 -0.581241 -0.608893 -0.630682 -0.646397 -0.655887 -0.659060 -0.655887 +-0.723629 -0.713158 -0.695820 -0.671780 -0.641270 -0.604585 -0.562077 -0.514156 -0.461284 -0.403969 -0.342763 -0.278257 -0.211071 -0.141852 -0.071267 0.000004 0.071276 0.141861 0.211079 0.278265 0.342772 0.403977 0.461292 0.514164 0.562085 0.604593 0.641278 0.671787 0.695827 0.713165 0.723636 0.727137 0.723636 0.713166 0.695827 0.671788 0.641279 0.604593 0.562086 0.514165 0.461293 0.403978 0.342772 0.278266 0.211080 0.141861 0.071276 0.000004 -0.071267 -0.141852 -0.211071 -0.278257 -0.342763 -0.403968 -0.461283 -0.514156 -0.562077 -0.604585 -0.641270 -0.671780 -0.695819 -0.713158 -0.723629 -0.727130 -0.723629 +-0.784402 -0.773052 -0.754257 -0.728197 -0.695124 -0.655356 -0.609277 -0.557329 -0.500014 -0.437883 -0.371535 -0.301609 -0.228777 -0.153743 -0.077227 0.000033 0.077292 0.153808 0.228843 0.301674 0.371600 0.437948 0.500079 0.557394 0.609341 0.655420 0.695188 0.728261 0.754320 0.773116 0.784466 0.788261 0.784466 0.773116 0.754321 0.728261 0.695189 0.655421 0.609342 0.557395 0.500080 0.437949 0.371601 0.301675 0.228843 0.153808 0.077293 0.000033 -0.077227 -0.153743 -0.228777 -0.301609 -0.371535 -0.437883 -0.500014 -0.557329 -0.609276 -0.655356 -0.695123 -0.728196 -0.754256 -0.773052 -0.784402 -0.788198 -0.784402 +-0.837622 -0.825502 -0.805431 -0.777602 -0.742284 -0.699817 -0.650609 -0.595136 -0.533930 -0.467582 -0.396730 -0.322057 -0.244282 -0.164154 -0.082444 0.000060 0.082564 0.164274 0.244402 0.322177 0.396850 0.467701 0.534049 0.595255 0.650728 0.699935 0.742402 0.777720 0.805548 0.825620 0.837740 0.841793 0.837740 0.825620 0.805549 0.777721 0.742403 0.699936 0.650729 0.595256 0.534050 0.467702 0.396850 0.322177 0.244402 0.164274 0.082564 0.000060 -0.082444 -0.164154 -0.244282 -0.322057 -0.396730 -0.467582 -0.533930 -0.595135 -0.650609 -0.699816 -0.742283 -0.777601 -0.805430 -0.825502 -0.837622 -0.841676 -0.837622 +-0.882778 -0.870003 -0.848850 -0.819520 -0.782297 -0.737540 -0.685678 -0.627213 -0.562706 -0.492779 -0.418106 -0.339406 -0.257436 -0.172986 -0.086869 0.000085 0.087039 0.173155 0.257605 0.339575 0.418275 0.492948 0.562875 0.627381 0.685847 0.737708 0.782465 0.819688 0.849017 0.870171 0.882945 0.887217 0.882945 0.870171 0.849018 0.819688 0.782466 0.737708 0.685847 0.627382 0.562875 0.492949 0.418276 0.339575 0.257605 0.173155 0.087039 0.000085 -0.086869 -0.172986 -0.257436 -0.339405 -0.418106 -0.492779 -0.562706 -0.627212 -0.685678 -0.737539 -0.782297 -0.819520 -0.848849 -0.870003 -0.882777 -0.887049 -0.882778 +-0.919434 -0.906129 -0.884096 -0.853548 -0.814779 -0.768162 -0.714146 -0.653252 -0.586065 -0.513233 -0.435458 -0.353488 -0.268113 -0.180154 -0.090460 0.000106 0.090673 0.180367 0.268325 0.353700 0.435670 0.513445 0.586277 0.653463 0.714358 0.768373 0.814990 0.853759 0.884307 0.906339 0.919644 0.924094 0.919645 0.906340 0.884307 0.853760 0.814991 0.768374 0.714358 0.653464 0.586278 0.513446 0.435671 0.353701 0.268325 0.180367 0.090673 0.000106 -0.090460 -0.180154 -0.268113 -0.353488 -0.435458 -0.513233 -0.586065 -0.653251 -0.714146 -0.768161 -0.814778 -0.853548 -0.884096 -0.906128 -0.919434 -0.923883 -0.919434 +-0.947238 -0.933531 -0.910831 -0.879359 -0.839417 -0.791390 -0.735740 -0.673003 -0.603783 -0.528748 -0.448619 -0.364169 -0.276211 -0.185591 -0.093183 0.000124 0.093430 0.185838 0.276458 0.364416 0.448866 0.528995 0.604030 0.673249 0.735986 0.791636 0.839663 0.879605 0.911077 0.933776 0.947484 0.952068 0.947484 0.933777 0.911078 0.879606 0.839664 0.791637 0.735987 0.673250 0.604031 0.528995 0.448867 0.364417 0.276458 0.185839 0.093431 0.000124 -0.093183 -0.185591 -0.276210 -0.364169 -0.448619 -0.528747 -0.603783 -0.673002 -0.735739 -0.791389 -0.839416 -0.879359 -0.910831 -0.933530 -0.947238 -0.951822 -0.947238 +-0.965924 -0.951946 -0.928798 -0.896705 -0.855975 -0.806999 -0.750251 -0.686276 -0.615690 -0.539174 -0.457464 -0.371347 -0.281652 -0.189244 -0.095012 0.000136 0.095285 0.189517 0.281925 0.371619 0.457736 0.539446 0.615962 0.686547 0.750522 0.807271 0.856246 0.896976 0.929070 0.952217 0.966195 0.970870 0.966195 0.952217 0.929070 0.896977 0.856247 0.807272 0.750523 0.686548 0.615963 0.539447 0.457736 0.371620 0.281925 0.189517 0.095285 0.000137 -0.095012 -0.189244 -0.281652 -0.371346 -0.457463 -0.539173 -0.615689 -0.686275 -0.750250 -0.806999 -0.855974 -0.896704 -0.928798 -0.951945 -0.965923 -0.970598 -0.965924 +-0.975310 -0.961197 -0.937824 -0.905419 -0.864292 -0.814841 -0.757541 -0.692943 -0.621671 -0.544411 -0.461906 -0.374952 -0.284385 -0.191078 -0.095930 0.000144 0.096217 0.191366 0.284672 0.375239 0.462193 0.544698 0.621958 0.693230 0.757827 0.815127 0.864579 0.905705 0.938111 0.961483 0.975597 0.980317 0.975598 0.961484 0.938111 0.905706 0.864580 0.815128 0.757828 0.693231 0.621959 0.544699 0.462194 0.375239 0.284673 0.191366 0.096218 0.000144 -0.095930 -0.191078 -0.284385 -0.374951 -0.461906 -0.544410 -0.621671 -0.692943 -0.757540 -0.814840 -0.864292 -0.905418 -0.937824 -0.961196 -0.975310 -0.980030 -0.975310 +-0.975309 -0.961195 -0.937823 -0.905417 -0.864291 -0.814839 -0.757539 -0.692942 -0.621670 -0.544409 -0.461904 -0.374950 -0.284383 -0.191076 -0.095928 0.000146 0.096219 0.191368 0.284674 0.375241 0.462195 0.544700 0.621960 0.693232 0.757829 0.815130 0.864581 0.905708 0.938113 0.961486 0.975600 0.980320 0.975600 0.961486 0.938114 0.905708 0.864582 0.815130 0.757830 0.693233 0.621961 0.544701 0.462196 0.375241 0.284675 0.191368 0.096219 0.000146 -0.095928 -0.191076 -0.284383 -0.374950 -0.461904 -0.544409 -0.621669 -0.692941 -0.757538 -0.814838 -0.864290 -0.905416 -0.937822 -0.961194 -0.975308 -0.980028 -0.975309 +-0.965918 -0.951940 -0.928793 -0.896700 -0.855969 -0.806994 -0.750246 -0.686271 -0.615685 -0.539169 -0.457458 -0.371341 -0.281647 -0.189239 -0.095006 0.000142 0.095290 0.189522 0.281931 0.371625 0.457742 0.539452 0.615968 0.686554 0.750529 0.807277 0.856253 0.896983 0.929077 0.952224 0.966202 0.970877 0.966202 0.952224 0.929077 0.896984 0.856253 0.807278 0.750530 0.686555 0.615969 0.539453 0.457742 0.371625 0.281931 0.189523 0.095291 0.000142 -0.095006 -0.189238 -0.281646 -0.371341 -0.457458 -0.539168 -0.615684 -0.686270 -0.750245 -0.806993 -0.855969 -0.896699 -0.928792 -0.951940 -0.965918 -0.970592 -0.965918 +-0.947229 -0.933522 -0.910823 -0.879351 -0.839408 -0.791381 -0.735731 -0.672994 -0.603775 -0.528740 -0.448611 -0.364161 -0.276202 -0.185582 -0.093174 0.000133 0.093440 0.185848 0.276468 0.364426 0.448876 0.529005 0.604040 0.673259 0.735996 0.791646 0.839674 0.879616 0.911089 0.933788 0.947495 0.952079 0.947496 0.933788 0.911089 0.879617 0.839675 0.791647 0.735997 0.673260 0.604041 0.529005 0.448876 0.364426 0.276468 0.185848 0.093440 0.000133 -0.093174 -0.185582 -0.276202 -0.364160 -0.448610 -0.528739 -0.603774 -0.672993 -0.735730 -0.791380 -0.839408 -0.879350 -0.910822 -0.933521 -0.947229 -0.951813 -0.947229 +-0.919422 -0.906117 -0.884084 -0.853536 -0.814767 -0.768151 -0.714135 -0.653240 -0.586054 -0.513222 -0.435447 -0.353476 -0.268101 -0.180143 -0.090448 0.000119 0.090685 0.180380 0.268338 0.353713 0.435683 0.513459 0.586291 0.653477 0.714372 0.768387 0.815005 0.853774 0.884322 0.906355 0.919660 0.924109 0.919660 0.906355 0.884322 0.853774 0.815005 0.768388 0.714372 0.653478 0.586291 0.513459 0.435684 0.353714 0.268338 0.180380 0.090685 0.000119 -0.090448 -0.180142 -0.268101 -0.353476 -0.435446 -0.513221 -0.586053 -0.653240 -0.714134 -0.768150 -0.814767 -0.853536 -0.884084 -0.906116 -0.919421 -0.923871 -0.919422 +-0.882763 -0.869989 -0.848835 -0.819506 -0.782283 -0.737526 -0.685664 -0.627199 -0.562692 -0.492765 -0.418092 -0.339392 -0.257421 -0.172971 -0.086854 0.000100 0.087054 0.173171 0.257621 0.339591 0.418291 0.492965 0.562891 0.627398 0.685864 0.737725 0.782483 0.819706 0.849035 0.870189 0.882964 0.887236 0.882964 0.870190 0.849036 0.819706 0.782483 0.737726 0.685864 0.627399 0.562892 0.492965 0.418292 0.339591 0.257621 0.173171 0.087054 0.000100 -0.086854 -0.172971 -0.257421 -0.339391 -0.418092 -0.492765 -0.562691 -0.627198 -0.685664 -0.737525 -0.782282 -0.819505 -0.848834 -0.869988 -0.882763 -0.887034 -0.882763 +-0.837605 -0.825485 -0.805414 -0.777585 -0.742268 -0.699801 -0.650593 -0.595120 -0.533914 -0.467566 -0.396714 -0.322041 -0.244266 -0.164137 -0.082427 0.000077 0.082582 0.164291 0.244420 0.322195 0.396868 0.467720 0.534068 0.595274 0.650747 0.699955 0.742422 0.777740 0.805569 0.825640 0.837761 0.841814 0.837761 0.825641 0.805569 0.777741 0.742423 0.699955 0.650748 0.595274 0.534068 0.467720 0.396868 0.322195 0.244420 0.164291 0.082582 0.000077 -0.082427 -0.164137 -0.244265 -0.322040 -0.396713 -0.467565 -0.533913 -0.595119 -0.650593 -0.699800 -0.742267 -0.777585 -0.805413 -0.825484 -0.837605 -0.841658 -0.837605 +-0.784383 -0.773033 -0.754238 -0.728179 -0.695106 -0.655338 -0.609259 -0.557312 -0.499997 -0.437866 -0.371518 -0.301591 -0.228759 -0.153724 -0.077208 0.000052 0.077312 0.153827 0.228862 0.301694 0.371620 0.437968 0.500099 0.557414 0.609362 0.655441 0.695209 0.728282 0.754342 0.773138 0.784488 0.788284 0.784488 0.773138 0.754343 0.728283 0.695210 0.655442 0.609362 0.557415 0.500100 0.437969 0.371620 0.301694 0.228862 0.153827 0.077312 0.000052 -0.077208 -0.153724 -0.228759 -0.301590 -0.371517 -0.437865 -0.499996 -0.557311 -0.609258 -0.655338 -0.695105 -0.728178 -0.754238 -0.773033 -0.784383 -0.788179 -0.784383 +-0.723609 -0.713139 -0.695800 -0.671761 -0.641251 -0.604566 -0.562058 -0.514138 -0.461265 -0.403950 -0.342745 -0.278238 -0.211052 -0.141833 -0.071247 0.000024 0.071296 0.141881 0.211100 0.278286 0.342792 0.403998 0.461313 0.514185 0.562106 0.604614 0.641300 0.671809 0.695849 0.713188 0.723659 0.727160 0.723659 0.713188 0.695850 0.671810 0.641300 0.604615 0.562107 0.514186 0.461313 0.403998 0.342792 0.278286 0.211100 0.141881 0.071296 0.000024 -0.071247 -0.141832 -0.211051 -0.278238 -0.342744 -0.403949 -0.461264 -0.514137 -0.562058 -0.604565 -0.641251 -0.671760 -0.695800 -0.713138 -0.723609 -0.727110 -0.723609 +-0.655866 -0.646377 -0.630662 -0.608874 -0.581222 -0.547973 -0.509446 -0.466013 -0.418092 -0.366145 -0.310671 -0.252206 -0.191312 -0.128576 -0.064601 -0.000004 0.064592 0.128567 0.191303 0.252197 0.310662 0.366135 0.418083 0.466004 0.509437 0.547964 0.581213 0.608866 0.630654 0.646369 0.655859 0.659033 0.655859 0.646369 0.630655 0.608866 0.581214 0.547964 0.509437 0.466004 0.418083 0.366136 0.310662 0.252197 0.191303 0.128567 0.064592 -0.000004 -0.064601 -0.128575 -0.191312 -0.252206 -0.310671 -0.366144 -0.418091 -0.466012 -0.509445 -0.547972 -0.581221 -0.608873 -0.630662 -0.646376 -0.655866 -0.659040 -0.655866 +-0.581807 -0.573390 -0.559450 -0.540123 -0.515595 -0.486102 -0.451927 -0.413400 -0.370893 -0.324813 -0.275606 -0.223745 -0.169730 -0.114080 -0.057332 -0.000033 0.057267 0.114015 0.169664 0.223680 0.275540 0.324747 0.370827 0.413334 0.451861 0.486036 0.515530 0.540058 0.559386 0.573325 0.581743 0.584558 0.581744 0.573326 0.559386 0.540059 0.515530 0.486036 0.451862 0.413335 0.370827 0.324748 0.275541 0.223680 0.169664 0.114015 0.057267 -0.000033 -0.057332 -0.114080 -0.169730 -0.223745 -0.275606 -0.324813 -0.370892 -0.413400 -0.451926 -0.486101 -0.515594 -0.540123 -0.559450 -0.573389 -0.581807 -0.584622 -0.581807 +-0.502145 -0.494880 -0.482850 -0.466170 -0.445002 -0.419548 -0.390055 -0.356805 -0.320120 -0.280353 -0.237886 -0.193129 -0.146512 -0.098486 -0.049511 -0.000060 0.049391 0.098366 0.146393 0.193009 0.237766 0.280233 0.320000 0.356685 0.389935 0.419429 0.444882 0.466051 0.482731 0.494761 0.502026 0.504456 0.502026 0.494762 0.482731 0.466052 0.444883 0.419429 0.389935 0.356686 0.320000 0.280233 0.237766 0.193009 0.146393 0.098366 0.049391 -0.000060 -0.049511 -0.098485 -0.146512 -0.193129 -0.237886 -0.280352 -0.320120 -0.356805 -0.390054 -0.419548 -0.445001 -0.466170 -0.482850 -0.494880 -0.502144 -0.504574 -0.502145 +-0.417644 -0.411603 -0.401598 -0.387726 -0.370121 -0.348953 -0.324425 -0.296773 -0.266263 -0.233191 -0.197873 -0.160651 -0.121882 -0.081940 -0.041211 -0.000085 0.041041 0.081771 0.121713 0.160481 0.197704 0.233021 0.266094 0.296603 0.324255 0.348784 0.369952 0.387558 0.401429 0.411434 0.417476 0.419497 0.417476 0.411435 0.401430 0.387558 0.369953 0.348784 0.324256 0.296603 0.266094 0.233021 0.197704 0.160482 0.121713 0.081771 0.041041 -0.000085 -0.041210 -0.081940 -0.121882 -0.160651 -0.197873 -0.233190 -0.266263 -0.296772 -0.324424 -0.348952 -0.370121 -0.387726 -0.401598 -0.411602 -0.417644 -0.419665 -0.417644 +-0.329120 -0.324359 -0.316476 -0.305546 -0.291674 -0.274995 -0.255668 -0.233880 -0.209840 -0.183781 -0.155952 -0.126623 -0.096076 -0.064604 -0.032511 -0.000106 0.032299 0.064392 0.095863 0.126411 0.155740 0.183568 0.209628 0.233667 0.255455 0.274782 0.291462 0.305334 0.316264 0.324148 0.328908 0.330500 0.328908 0.324148 0.316264 0.305334 0.291462 0.274783 0.255456 0.233667 0.209628 0.183568 0.155740 0.126411 0.095863 0.064392 0.032299 -0.000106 -0.032511 -0.064604 -0.096076 -0.126623 -0.155952 -0.183780 -0.209840 -0.233879 -0.255667 -0.274994 -0.291674 -0.305546 -0.316476 -0.324359 -0.329120 -0.330711 -0.329120 +-0.237422 -0.233989 -0.228303 -0.220420 -0.210415 -0.198385 -0.184446 -0.168731 -0.151393 -0.132598 -0.112527 -0.091373 -0.069341 -0.046642 -0.023495 -0.000124 0.023248 0.046395 0.069094 0.091126 0.112279 0.132350 0.151146 0.168484 0.184199 0.198138 0.210168 0.220173 0.228057 0.233742 0.237176 0.238324 0.237176 0.233743 0.228057 0.220173 0.210168 0.198138 0.184199 0.168484 0.151146 0.132350 0.112279 0.091126 0.069094 0.046395 0.023248 -0.000124 -0.023495 -0.046642 -0.069341 -0.091373 -0.112526 -0.132597 -0.151393 -0.168731 -0.184445 -0.198385 -0.210415 -0.220420 -0.228303 -0.233989 -0.237422 -0.238571 -0.237422 +-0.143435 -0.141362 -0.137928 -0.133168 -0.127126 -0.119862 -0.111444 -0.101954 -0.091484 -0.080134 -0.068014 -0.055240 -0.041935 -0.028228 -0.014250 -0.000136 0.013977 0.027955 0.041662 0.054967 0.067741 0.079862 0.091211 0.101682 0.111171 0.119589 0.126854 0.132896 0.137656 0.141090 0.143163 0.143857 0.143163 0.141090 0.137656 0.132896 0.126854 0.119589 0.111172 0.101682 0.091212 0.079862 0.067741 0.054967 0.041662 0.027955 0.013977 -0.000136 -0.014250 -0.028228 -0.041935 -0.055240 -0.068014 -0.080134 -0.091484 -0.101954 -0.111444 -0.119861 -0.127126 -0.133168 -0.137928 -0.141362 -0.143435 -0.144129 -0.143435 +-0.048063 -0.047370 -0.046222 -0.044630 -0.042609 -0.040180 -0.037365 -0.034192 -0.030691 -0.026895 -0.022842 -0.018570 -0.014121 -0.009538 -0.004863 -0.000144 0.004576 0.009250 0.013834 0.018283 0.022555 0.026608 0.030403 0.033904 0.037078 0.039893 0.042322 0.044342 0.045934 0.047082 0.047776 0.048008 0.047776 0.047082 0.045934 0.044342 0.042322 0.039893 0.037078 0.033904 0.030403 0.026608 0.022555 0.018283 0.013834 0.009250 0.004576 -0.000144 -0.004863 -0.009538 -0.014121 -0.018570 -0.022842 -0.026895 -0.030691 -0.034192 -0.037365 -0.040180 -0.042609 -0.044630 -0.046221 -0.047370 -0.048063 -0.048295 -0.048063 +0.047776 0.047083 0.045935 0.044343 0.042322 0.039893 0.037078 0.033904 0.030403 0.026607 0.022554 0.018282 0.013832 0.009249 0.004574 -0.000146 -0.004866 -0.009540 -0.014124 -0.018573 -0.022845 -0.026898 -0.030694 -0.034195 -0.037369 -0.040184 -0.042613 -0.044634 -0.046226 -0.047374 -0.048067 -0.048299 -0.048067 -0.047374 -0.046226 -0.044634 -0.042613 -0.040184 -0.037369 -0.034195 -0.030694 -0.026898 -0.022845 -0.018573 -0.014124 -0.009540 -0.004866 -0.000146 0.004574 0.009249 0.013832 0.018282 0.022554 0.026607 0.030403 0.033904 0.037078 0.039893 0.042322 0.044343 0.045935 0.047083 0.047776 0.048008 0.047776 +0.143159 0.141086 0.137652 0.132892 0.126850 0.119585 0.111167 0.101678 0.091207 0.079857 0.067736 0.054962 0.041657 0.027950 0.013972 -0.000142 -0.014256 -0.028234 -0.041941 -0.055246 -0.068021 -0.080141 -0.091491 -0.101962 -0.111451 -0.119869 -0.127134 -0.133176 -0.137936 -0.141370 -0.143444 -0.144137 -0.143444 -0.141370 -0.137937 -0.133176 -0.127134 -0.119869 -0.111451 -0.101962 -0.091491 -0.080141 -0.068021 -0.055246 -0.041941 -0.028234 -0.014256 -0.000142 0.013972 0.027950 0.041657 0.054962 0.067736 0.079857 0.091207 0.101677 0.111167 0.119585 0.126850 0.132892 0.137652 0.141086 0.143159 0.143853 0.143159 +0.237168 0.233734 0.228049 0.220165 0.210160 0.198130 0.184191 0.168476 0.151137 0.132342 0.112271 0.091117 0.069085 0.046386 0.023239 -0.000133 -0.023505 -0.046652 -0.069351 -0.091383 -0.112537 -0.132608 -0.151403 -0.168742 -0.184456 -0.198396 -0.210426 -0.220431 -0.228315 -0.234001 -0.237434 -0.238582 -0.237434 -0.234001 -0.228315 -0.220431 -0.210426 -0.198396 -0.184457 -0.168742 -0.151403 -0.132608 -0.112537 -0.091383 -0.069351 -0.046652 -0.023505 -0.000133 0.023239 0.046386 0.069085 0.091117 0.112271 0.132342 0.151137 0.168476 0.184190 0.198130 0.210160 0.220165 0.228048 0.233734 0.237168 0.238316 0.237168 +0.328896 0.324136 0.316253 0.305322 0.291451 0.274771 0.255444 0.233656 0.209616 0.183557 0.155728 0.126399 0.095851 0.064379 0.032286 -0.000119 -0.032524 -0.064617 -0.096089 -0.126636 -0.155965 -0.183794 -0.209853 -0.233893 -0.255681 -0.275008 -0.291688 -0.305560 -0.316490 -0.324374 -0.329134 -0.330726 -0.329134 -0.324374 -0.316490 -0.305560 -0.291688 -0.275009 -0.255681 -0.233893 -0.209853 -0.183794 -0.155966 -0.126636 -0.096089 -0.064617 -0.032524 -0.000119 0.032286 0.064379 0.095851 0.126399 0.155728 0.183556 0.209616 0.233655 0.255444 0.274771 0.291450 0.305322 0.316252 0.324136 0.328896 0.330488 0.328896 +0.417461 0.411419 0.401414 0.387543 0.369938 0.348769 0.324241 0.296589 0.266079 0.233007 0.197689 0.160467 0.121698 0.081756 0.041026 -0.000100 -0.041226 -0.081956 -0.121898 -0.160666 -0.197889 -0.233206 -0.266279 -0.296788 -0.324440 -0.348969 -0.370138 -0.387743 -0.401615 -0.411620 -0.417661 -0.419682 -0.417662 -0.411620 -0.401615 -0.387743 -0.370138 -0.348969 -0.324441 -0.296788 -0.266279 -0.233206 -0.197889 -0.160666 -0.121898 -0.081956 -0.041226 -0.000100 0.041026 0.081756 0.121698 0.160466 0.197689 0.233006 0.266079 0.296588 0.324240 0.348769 0.369937 0.387542 0.401414 0.411419 0.417461 0.419481 0.417461 +0.502008 0.494743 0.482713 0.466033 0.444865 0.419411 0.389918 0.356668 0.319983 0.280216 0.237749 0.192992 0.146375 0.098348 0.049374 -0.000077 -0.049528 -0.098503 -0.146530 -0.193146 -0.237903 -0.280370 -0.320138 -0.356823 -0.390072 -0.419566 -0.445020 -0.466188 -0.482868 -0.494899 -0.502164 -0.504593 -0.502164 -0.494899 -0.482869 -0.466189 -0.445020 -0.419566 -0.390072 -0.356823 -0.320138 -0.280370 -0.237903 -0.193146 -0.146530 -0.098503 -0.049528 -0.000077 0.049373 0.098348 0.146375 0.192991 0.237749 0.280215 0.319983 0.356668 0.389917 0.419411 0.444864 0.466033 0.482713 0.494743 0.502008 0.504437 0.502008 +0.581723 0.573305 0.559366 0.540039 0.515510 0.486017 0.451842 0.413315 0.370808 0.324729 0.275522 0.223661 0.169645 0.113996 0.057248 -0.000052 -0.057351 -0.114099 -0.169749 -0.223764 -0.275625 -0.324832 -0.370911 -0.413418 -0.451945 -0.486120 -0.515614 -0.540142 -0.559470 -0.573409 -0.581827 -0.584642 -0.581827 -0.573410 -0.559470 -0.540143 -0.515614 -0.486120 -0.451946 -0.413419 -0.370911 -0.324832 -0.275625 -0.223764 -0.169749 -0.114099 -0.057351 -0.000052 0.057248 0.113996 0.169645 0.223660 0.275521 0.324728 0.370807 0.413315 0.451841 0.486016 0.515510 0.540038 0.559365 0.573305 0.581723 0.584538 0.581723 +0.655837 0.646347 0.630633 0.608844 0.581193 0.547943 0.509417 0.465984 0.418063 0.366116 0.310642 0.252177 0.191283 0.128547 0.064572 -0.000024 -0.064621 -0.128595 -0.191331 -0.252225 -0.310690 -0.366163 -0.418111 -0.466032 -0.509465 -0.547991 -0.581241 -0.608893 -0.630682 -0.646397 -0.655887 -0.659060 -0.655887 -0.646397 -0.630682 -0.608894 -0.581241 -0.547992 -0.509465 -0.466032 -0.418111 -0.366164 -0.310690 -0.252225 -0.191331 -0.128595 -0.064621 -0.000024 0.064572 0.128547 0.191283 0.252177 0.310642 0.366115 0.418062 0.465983 0.509416 0.547943 0.581192 0.608844 0.630632 0.646347 0.655837 0.659010 0.655837 +0.723636 0.713166 0.695827 0.671788 0.641279 0.604593 0.562086 0.514165 0.461293 0.403978 0.342772 0.278266 0.211080 0.141861 0.071276 0.000004 -0.071267 -0.141852 -0.211071 -0.278257 -0.342763 -0.403968 -0.461283 -0.514156 -0.562077 -0.604585 -0.641270 -0.671780 -0.695819 -0.713158 -0.723629 -0.727130 -0.723629 -0.713158 -0.695820 -0.671780 -0.641270 -0.604585 -0.562077 -0.514156 -0.461284 -0.403969 -0.342763 -0.278257 -0.211071 -0.141852 -0.071267 0.000004 0.071276 0.141861 0.211079 0.278265 0.342772 0.403977 0.461292 0.514164 0.562085 0.604593 0.641278 0.671787 0.695827 0.713165 0.723636 0.727137 0.723636 +0.784466 0.773116 0.754321 0.728261 0.695189 0.655421 0.609342 0.557395 0.500080 0.437949 0.371601 0.301675 0.228843 0.153808 0.077293 0.000033 -0.077227 -0.153743 -0.228777 -0.301609 -0.371535 -0.437883 -0.500014 -0.557329 -0.609276 -0.655356 -0.695123 -0.728196 -0.754256 -0.773052 -0.784402 -0.788198 -0.784402 -0.773052 -0.754257 -0.728197 -0.695124 -0.655356 -0.609277 -0.557329 -0.500014 -0.437883 -0.371535 -0.301609 -0.228777 -0.153743 -0.077227 0.000033 0.077292 0.153808 0.228843 0.301674 0.371600 0.437948 0.500079 0.557394 0.609341 0.655420 0.695188 0.728261 0.754320 0.773116 0.784466 0.788261 0.784466 +0.837740 0.825620 0.805549 0.777721 0.742403 0.699936 0.650729 0.595256 0.534050 0.467702 0.396850 0.322177 0.244402 0.164274 0.082564 0.000060 -0.082444 -0.164154 -0.244282 -0.322057 -0.396730 -0.467582 -0.533930 -0.595135 -0.650609 -0.699816 -0.742283 -0.777601 -0.805430 -0.825502 -0.837622 -0.841676 -0.837622 -0.825502 -0.805431 -0.777602 -0.742284 -0.699817 -0.650609 -0.595136 -0.533930 -0.467582 -0.396730 -0.322057 -0.244282 -0.164154 -0.082444 0.000060 0.082564 0.164274 0.244402 0.322177 0.396850 0.467701 0.534049 0.595255 0.650728 0.699935 0.742402 0.777720 0.805548 0.825620 0.837740 0.841793 0.837740 +0.882945 0.870171 0.849018 0.819688 0.782466 0.737708 0.685847 0.627382 0.562875 0.492949 0.418276 0.339575 0.257605 0.173155 0.087039 0.000085 -0.086869 -0.172986 -0.257436 -0.339405 -0.418106 -0.492779 -0.562706 -0.627212 -0.685678 -0.737539 -0.782297 -0.819520 -0.848849 -0.870003 -0.882777 -0.887049 -0.882778 -0.870003 -0.848850 -0.819520 -0.782297 -0.737540 -0.685678 -0.627213 -0.562706 -0.492779 -0.418106 -0.339406 -0.257436 -0.172986 -0.086869 0.000085 0.087039 0.173155 0.257605 0.339575 0.418275 0.492948 0.562875 0.627381 0.685847 0.737708 0.782465 0.819688 0.849017 0.870171 0.882945 0.887217 0.882945 +0.919645 0.906340 0.884307 0.853760 0.814991 0.768374 0.714358 0.653464 0.586278 0.513446 0.435671 0.353701 0.268325 0.180367 0.090673 0.000106 -0.090460 -0.180154 -0.268113 -0.353488 -0.435458 -0.513233 -0.586065 -0.653251 -0.714146 -0.768161 -0.814778 -0.853548 -0.884096 -0.906128 -0.919434 -0.923883 -0.919434 -0.906129 -0.884096 -0.853548 -0.814779 -0.768162 -0.714146 -0.653252 -0.586065 -0.513233 -0.435458 -0.353488 -0.268113 -0.180154 -0.090460 0.000106 0.090673 0.180367 0.268325 0.353700 0.435670 0.513445 0.586277 0.653463 0.714358 0.768373 0.814990 0.853759 0.884307 0.906339 0.919644 0.924094 0.919645 +0.947484 0.933777 0.911078 0.879606 0.839664 0.791637 0.735987 0.673250 0.604031 0.528995 0.448867 0.364417 0.276458 0.185839 0.093431 0.000124 -0.093183 -0.185591 -0.276210 -0.364169 -0.448619 -0.528747 -0.603783 -0.673002 -0.735739 -0.791389 -0.839416 -0.879359 -0.910831 -0.933530 -0.947238 -0.951822 -0.947238 -0.933531 -0.910831 -0.879359 -0.839417 -0.791390 -0.735740 -0.673003 -0.603783 -0.528748 -0.448619 -0.364169 -0.276211 -0.185591 -0.093183 0.000124 0.093430 0.185838 0.276458 0.364416 0.448866 0.528995 0.604030 0.673249 0.735986 0.791636 0.839663 0.879605 0.911077 0.933776 0.947484 0.952068 0.947484 +0.966195 0.952217 0.929070 0.896977 0.856247 0.807272 0.750523 0.686548 0.615963 0.539447 0.457736 0.371620 0.281925 0.189517 0.095285 0.000137 -0.095012 -0.189244 -0.281652 -0.371346 -0.457463 -0.539173 -0.615689 -0.686275 -0.750250 -0.806999 -0.855974 -0.896704 -0.928798 -0.951945 -0.965923 -0.970598 -0.965924 -0.951946 -0.928798 -0.896705 -0.855975 -0.806999 -0.750251 -0.686276 -0.615690 -0.539174 -0.457464 -0.371347 -0.281652 -0.189244 -0.095012 0.000136 0.095285 0.189517 0.281925 0.371619 0.457736 0.539446 0.615962 0.686547 0.750522 0.807271 0.856246 0.896976 0.929070 0.952217 0.966195 0.970870 0.966195 +0.975598 0.961484 0.938111 0.905706 0.864580 0.815128 0.757828 0.693231 0.621959 0.544699 0.462194 0.375239 0.284673 0.191366 0.096218 0.000144 -0.095930 -0.191078 -0.284385 -0.374951 -0.461906 -0.544410 -0.621671 -0.692943 -0.757540 -0.814840 -0.864292 -0.905418 -0.937824 -0.961196 -0.975310 -0.980030 -0.975310 -0.961197 -0.937824 -0.905419 -0.864292 -0.814841 -0.757541 -0.692943 -0.621671 -0.544411 -0.461906 -0.374952 -0.284385 -0.191078 -0.095930 0.000144 0.096217 0.191366 0.284672 0.375239 0.462193 0.544698 0.621958 0.693230 0.757827 0.815127 0.864579 0.905705 0.938111 0.961483 0.975597 0.980317 0.975598 +0.975600 0.961486 0.938114 0.905708 0.864582 0.815130 0.757830 0.693233 0.621961 0.544701 0.462196 0.375241 0.284675 0.191368 0.096219 0.000146 -0.095928 -0.191076 -0.284383 -0.374950 -0.461904 -0.544409 -0.621669 -0.692941 -0.757538 -0.814838 -0.864290 -0.905416 -0.937822 -0.961194 -0.975308 -0.980028 -0.975309 -0.961195 -0.937823 -0.905417 -0.864291 -0.814839 -0.757539 -0.692942 -0.621670 -0.544409 -0.461904 -0.374950 -0.284383 -0.191076 -0.095928 0.000146 0.096219 0.191368 0.284674 0.375241 0.462195 0.544700 0.621960 0.693232 0.757829 0.815130 0.864581 0.905708 0.938113 0.961486 0.975600 0.980320 0.975600 +0.966202 0.952224 0.929077 0.896984 0.856253 0.807278 0.750530 0.686555 0.615969 0.539453 0.457742 0.371625 0.281931 0.189523 0.095291 0.000142 -0.095006 -0.189238 -0.281646 -0.371341 -0.457458 -0.539168 -0.615684 -0.686270 -0.750245 -0.806993 -0.855969 -0.896699 -0.928792 -0.951940 -0.965918 -0.970592 -0.965918 -0.951940 -0.928793 -0.896700 -0.855969 -0.806994 -0.750246 -0.686271 -0.615685 -0.539169 -0.457458 -0.371341 -0.281647 -0.189239 -0.095006 0.000142 0.095290 0.189522 0.281931 0.371625 0.457742 0.539452 0.615968 0.686554 0.750529 0.807277 0.856253 0.896983 0.929077 0.952224 0.966202 0.970877 0.966202 +0.947496 0.933788 0.911089 0.879617 0.839675 0.791647 0.735997 0.673260 0.604041 0.529005 0.448876 0.364426 0.276468 0.185848 0.093440 0.000133 -0.093174 -0.185582 -0.276202 -0.364160 -0.448610 -0.528739 -0.603774 -0.672993 -0.735730 -0.791380 -0.839408 -0.879350 -0.910822 -0.933521 -0.947229 -0.951813 -0.947229 -0.933522 -0.910823 -0.879351 -0.839408 -0.791381 -0.735731 -0.672994 -0.603775 -0.528740 -0.448611 -0.364161 -0.276202 -0.185582 -0.093174 0.000133 0.093440 0.185848 0.276468 0.364426 0.448876 0.529005 0.604040 0.673259 0.735996 0.791646 0.839674 0.879616 0.911089 0.933788 0.947495 0.952079 0.947496 +0.919660 0.906355 0.884322 0.853774 0.815005 0.768388 0.714372 0.653478 0.586291 0.513459 0.435684 0.353714 0.268338 0.180380 0.090685 0.000119 -0.090448 -0.180142 -0.268101 -0.353476 -0.435446 -0.513221 -0.586053 -0.653240 -0.714134 -0.768150 -0.814767 -0.853536 -0.884084 -0.906116 -0.919421 -0.923871 -0.919422 -0.906117 -0.884084 -0.853536 -0.814767 -0.768151 -0.714135 -0.653240 -0.586054 -0.513222 -0.435447 -0.353476 -0.268101 -0.180143 -0.090448 0.000119 0.090685 0.180380 0.268338 0.353713 0.435683 0.513459 0.586291 0.653477 0.714372 0.768387 0.815005 0.853774 0.884322 0.906355 0.919660 0.924109 0.919660 +0.882964 0.870190 0.849036 0.819706 0.782483 0.737726 0.685864 0.627399 0.562892 0.492965 0.418292 0.339591 0.257621 0.173171 0.087054 0.000100 -0.086854 -0.172971 -0.257421 -0.339391 -0.418092 -0.492765 -0.562691 -0.627198 -0.685664 -0.737525 -0.782282 -0.819505 -0.848834 -0.869988 -0.882763 -0.887034 -0.882763 -0.869989 -0.848835 -0.819506 -0.782283 -0.737526 -0.685664 -0.627199 -0.562692 -0.492765 -0.418092 -0.339392 -0.257421 -0.172971 -0.086854 0.000100 0.087054 0.173171 0.257621 0.339591 0.418291 0.492965 0.562891 0.627398 0.685864 0.737725 0.782483 0.819706 0.849035 0.870189 0.882964 0.887236 0.882964 +0.837761 0.825641 0.805569 0.777741 0.742423 0.699955 0.650748 0.595274 0.534068 0.467720 0.396868 0.322195 0.244420 0.164291 0.082582 0.000077 -0.082427 -0.164137 -0.244265 -0.322040 -0.396713 -0.467565 -0.533913 -0.595119 -0.650593 -0.699800 -0.742267 -0.777585 -0.805413 -0.825484 -0.837605 -0.841658 -0.837605 -0.825485 -0.805414 -0.777585 -0.742268 -0.699801 -0.650593 -0.595120 -0.533914 -0.467566 -0.396714 -0.322041 -0.244266 -0.164137 -0.082427 0.000077 0.082582 0.164291 0.244420 0.322195 0.396868 0.467720 0.534068 0.595274 0.650747 0.699955 0.742422 0.777740 0.805569 0.825640 0.837761 0.841814 0.837761 +0.784488 0.773138 0.754343 0.728283 0.695210 0.655442 0.609362 0.557415 0.500100 0.437969 0.371620 0.301694 0.228862 0.153827 0.077312 0.000052 -0.077208 -0.153724 -0.228759 -0.301590 -0.371517 -0.437865 -0.499996 -0.557311 -0.609258 -0.655338 -0.695105 -0.728178 -0.754238 -0.773033 -0.784383 -0.788179 -0.784383 -0.773033 -0.754238 -0.728179 -0.695106 -0.655338 -0.609259 -0.557312 -0.499997 -0.437866 -0.371518 -0.301591 -0.228759 -0.153724 -0.077208 0.000052 0.077312 0.153827 0.228862 0.301694 0.371620 0.437968 0.500099 0.557414 0.609362 0.655441 0.695209 0.728282 0.754342 0.773138 0.784488 0.788284 0.784488 +0.723659 0.713188 0.695850 0.671810 0.641300 0.604615 0.562107 0.514186 0.461313 0.403998 0.342792 0.278286 0.211100 0.141881 0.071296 0.000024 -0.071247 -0.141832 -0.211051 -0.278238 -0.342744 -0.403949 -0.461264 -0.514137 -0.562058 -0.604565 -0.641251 -0.671760 -0.695800 -0.713138 -0.723609 -0.727110 -0.723609 -0.713139 -0.695800 -0.671761 -0.641251 -0.604566 -0.562058 -0.514138 -0.461265 -0.403950 -0.342745 -0.278238 -0.211052 -0.141833 -0.071247 0.000024 0.071296 0.141881 0.211100 0.278286 0.342792 0.403998 0.461313 0.514185 0.562106 0.604614 0.641300 0.671809 0.695849 0.713188 0.723659 0.727160 0.723659 +0.655859 0.646369 0.630655 0.608866 0.581214 0.547964 0.509437 0.466004 0.418083 0.366136 0.310662 0.252197 0.191303 0.128567 0.064592 -0.000004 -0.064601 -0.128575 -0.191312 -0.252206 -0.310671 -0.366144 -0.418091 -0.466012 -0.509445 -0.547972 -0.581221 -0.608873 -0.630662 -0.646376 -0.655866 -0.659040 -0.655866 -0.646377 -0.630662 -0.608874 -0.581222 -0.547973 -0.509446 -0.466013 -0.418092 -0.366145 -0.310671 -0.252206 -0.191312 -0.128576 -0.064601 -0.000004 0.064592 0.128567 0.191303 0.252197 0.310662 0.366135 0.418083 0.466004 0.509437 0.547964 0.581213 0.608866 0.630654 0.646369 0.655859 0.659033 0.655859 +0.581744 0.573326 0.559386 0.540059 0.515530 0.486036 0.451862 0.413335 0.370827 0.324748 0.275541 0.223680 0.169664 0.114015 0.057267 -0.000033 -0.057332 -0.114080 -0.169730 -0.223745 -0.275606 -0.324813 -0.370892 -0.413400 -0.451926 -0.486101 -0.515594 -0.540123 -0.559450 -0.573389 -0.581807 -0.584622 -0.581807 -0.573390 -0.559450 -0.540123 -0.515595 -0.486102 -0.451927 -0.413400 -0.370893 -0.324813 -0.275606 -0.223745 -0.169730 -0.114080 -0.057332 -0.000033 0.057267 0.114015 0.169664 0.223680 0.275540 0.324747 0.370827 0.413334 0.451861 0.486036 0.515530 0.540058 0.559386 0.573325 0.581743 0.584558 0.581744 +0.502026 0.494762 0.482731 0.466052 0.444883 0.419429 0.389935 0.356686 0.320000 0.280233 0.237766 0.193009 0.146393 0.098366 0.049391 -0.000060 -0.049511 -0.098485 -0.146512 -0.193129 -0.237886 -0.280352 -0.320120 -0.356805 -0.390054 -0.419548 -0.445001 -0.466170 -0.482850 -0.494880 -0.502144 -0.504574 -0.502145 -0.494880 -0.482850 -0.466170 -0.445002 -0.419548 -0.390055 -0.356805 -0.320120 -0.280353 -0.237886 -0.193129 -0.146512 -0.098486 -0.049511 -0.000060 0.049391 0.098366 0.146393 0.193009 0.237766 0.280233 0.320000 0.356685 0.389935 0.419429 0.444882 0.466051 0.482731 0.494761 0.502026 0.504456 0.502026 +0.417476 0.411435 0.401430 0.387558 0.369953 0.348784 0.324256 0.296603 0.266094 0.233021 0.197704 0.160482 0.121713 0.081771 0.041041 -0.000085 -0.041210 -0.081940 -0.121882 -0.160651 -0.197873 -0.233190 -0.266263 -0.296772 -0.324424 -0.348952 -0.370121 -0.387726 -0.401598 -0.411602 -0.417644 -0.419665 -0.417644 -0.411603 -0.401598 -0.387726 -0.370121 -0.348953 -0.324425 -0.296773 -0.266263 -0.233191 -0.197873 -0.160651 -0.121882 -0.081940 -0.041211 -0.000085 0.041041 0.081771 0.121713 0.160481 0.197704 0.233021 0.266094 0.296603 0.324255 0.348784 0.369952 0.387558 0.401429 0.411434 0.417476 0.419497 0.417476 +0.328908 0.324148 0.316264 0.305334 0.291462 0.274783 0.255456 0.233667 0.209628 0.183568 0.155740 0.126411 0.095863 0.064392 0.032299 -0.000106 -0.032511 -0.064604 -0.096076 -0.126623 -0.155952 -0.183780 -0.209840 -0.233879 -0.255667 -0.274994 -0.291674 -0.305546 -0.316476 -0.324359 -0.329120 -0.330711 -0.329120 -0.324359 -0.316476 -0.305546 -0.291674 -0.274995 -0.255668 -0.233880 -0.209840 -0.183781 -0.155952 -0.126623 -0.096076 -0.064604 -0.032511 -0.000106 0.032299 0.064392 0.095863 0.126411 0.155740 0.183568 0.209628 0.233667 0.255455 0.274782 0.291462 0.305334 0.316264 0.324148 0.328908 0.330500 0.328908 +0.237176 0.233743 0.228057 0.220173 0.210168 0.198138 0.184199 0.168484 0.151146 0.132350 0.112279 0.091126 0.069094 0.046395 0.023248 -0.000124 -0.023495 -0.046642 -0.069341 -0.091373 -0.112526 -0.132597 -0.151393 -0.168731 -0.184445 -0.198385 -0.210415 -0.220420 -0.228303 -0.233989 -0.237422 -0.238571 -0.237422 -0.233989 -0.228303 -0.220420 -0.210415 -0.198385 -0.184446 -0.168731 -0.151393 -0.132598 -0.112527 -0.091373 -0.069341 -0.046642 -0.023495 -0.000124 0.023248 0.046395 0.069094 0.091126 0.112279 0.132350 0.151146 0.168484 0.184199 0.198138 0.210168 0.220173 0.228057 0.233742 0.237176 0.238324 0.237176 +0.143163 0.141090 0.137656 0.132896 0.126854 0.119589 0.111172 0.101682 0.091212 0.079862 0.067741 0.054967 0.041662 0.027955 0.013977 -0.000136 -0.014250 -0.028228 -0.041935 -0.055240 -0.068014 -0.080134 -0.091484 -0.101954 -0.111444 -0.119861 -0.127126 -0.133168 -0.137928 -0.141362 -0.143435 -0.144129 -0.143435 -0.141362 -0.137928 -0.133168 -0.127126 -0.119862 -0.111444 -0.101954 -0.091484 -0.080134 -0.068014 -0.055240 -0.041935 -0.028228 -0.014250 -0.000136 0.013977 0.027955 0.041662 0.054967 0.067741 0.079862 0.091211 0.101682 0.111171 0.119589 0.126854 0.132896 0.137656 0.141090 0.143163 0.143857 0.143163 +0.047776 0.047082 0.045934 0.044342 0.042322 0.039893 0.037078 0.033904 0.030403 0.026608 0.022555 0.018283 0.013834 0.009250 0.004576 -0.000144 -0.004863 -0.009538 -0.014121 -0.018570 -0.022842 -0.026895 -0.030691 -0.034192 -0.037365 -0.040180 -0.042609 -0.044630 -0.046221 -0.047370 -0.048063 -0.048295 -0.048063 -0.047370 -0.046222 -0.044630 -0.042609 -0.040180 -0.037365 -0.034192 -0.030691 -0.026895 -0.022842 -0.018570 -0.014121 -0.009538 -0.004863 -0.000144 0.004576 0.009250 0.013834 0.018283 0.022555 0.026608 0.030403 0.033904 0.037078 0.039893 0.042322 0.044342 0.045934 0.047082 0.047776 0.048008 0.047776 +-0.048067 -0.047374 -0.046226 -0.044634 -0.042613 -0.040184 -0.037369 -0.034195 -0.030694 -0.026898 -0.022845 -0.018573 -0.014124 -0.009540 -0.004866 -0.000146 0.004574 0.009249 0.013832 0.018282 0.022554 0.026607 0.030403 0.033904 0.037078 0.039893 0.042322 0.044343 0.045935 0.047083 0.047776 0.048008 0.047776 0.047083 0.045935 0.044343 0.042322 0.039893 0.037078 0.033904 0.030403 0.026607 0.022554 0.018282 0.013832 0.009249 0.004574 -0.000146 -0.004866 -0.009540 -0.014124 -0.018573 -0.022845 -0.026898 -0.030694 -0.034195 -0.037369 -0.040184 -0.042613 -0.044634 -0.046226 -0.047374 -0.048067 -0.048299 -0.048067 diff --git a/examples/next/swm/ref/64x64/v.step0.init.bin b/examples/next/swm/ref/64x64/v.step0.init.bin new file mode 100644 index 0000000000..10675bcbfd Binary files /dev/null and b/examples/next/swm/ref/64x64/v.step0.init.bin differ diff --git a/examples/next/swm/ref/64x64/v.step0.t200.bin b/examples/next/swm/ref/64x64/v.step0.t200.bin new file mode 100644 index 0000000000..b97b1179b2 Binary files /dev/null and b/examples/next/swm/ref/64x64/v.step0.t200.bin differ diff --git a/examples/next/swm/ref/64x64/v.step1.init.bin b/examples/next/swm/ref/64x64/v.step1.init.bin new file mode 100644 index 0000000000..b97b1179b2 Binary files /dev/null and b/examples/next/swm/ref/64x64/v.step1.init.bin differ diff --git a/examples/next/swm/ref/64x64/v.step1.t200.bin b/examples/next/swm/ref/64x64/v.step1.t200.bin new file mode 100644 index 0000000000..59de6a9ebd Binary files /dev/null and b/examples/next/swm/ref/64x64/v.step1.t200.bin differ diff --git a/examples/next/swm/ref/64x64/v.step2.init.bin b/examples/next/swm/ref/64x64/v.step2.init.bin new file mode 100644 index 0000000000..59de6a9ebd Binary files /dev/null and b/examples/next/swm/ref/64x64/v.step2.init.bin differ diff --git a/examples/next/swm/ref/64x64/v.step3.init.bin b/examples/next/swm/ref/64x64/v.step3.init.bin new file mode 100644 index 0000000000..8cae524373 Binary files /dev/null and b/examples/next/swm/ref/64x64/v.step3.init.bin differ diff --git a/examples/next/swm/ref/64x64/v.step4000.final.bin b/examples/next/swm/ref/64x64/v.step4000.final.bin new file mode 100644 index 0000000000..dca75a80f4 Binary files /dev/null and b/examples/next/swm/ref/64x64/v.step4000.final.bin differ diff --git a/examples/next/swm/ref/64x64/v.txt b/examples/next/swm/ref/64x64/v.txt new file mode 100644 index 0000000000..58f6b9166b --- /dev/null +++ b/examples/next/swm/ref/64x64/v.txt @@ -0,0 +1,65 @@ +0.047776 0.143159 0.237168 0.328896 0.417461 0.502008 0.581723 0.655837 0.723636 0.784466 0.837740 0.882945 0.919645 0.947484 0.966195 0.975598 0.975600 0.966202 0.947496 0.919660 0.882964 0.837761 0.784488 0.723659 0.655859 0.581744 0.502026 0.417476 0.328908 0.237176 0.143163 0.047776 -0.048067 -0.143444 -0.237434 -0.329134 -0.417662 -0.502164 -0.581827 -0.655887 -0.723629 -0.784402 -0.837622 -0.882778 -0.919434 -0.947238 -0.965924 -0.975310 -0.975309 -0.965918 -0.947229 -0.919422 -0.882763 -0.837605 -0.784383 -0.723609 -0.655866 -0.581807 -0.502145 -0.417644 -0.329120 -0.237422 -0.143435 -0.048063 0.047776 +0.047083 0.141086 0.233734 0.324136 0.411419 0.494743 0.573305 0.646347 0.713166 0.773116 0.825620 0.870171 0.906340 0.933777 0.952217 0.961484 0.961486 0.952224 0.933788 0.906355 0.870190 0.825641 0.773138 0.713188 0.646369 0.573326 0.494762 0.411435 0.324148 0.233743 0.141090 0.047082 -0.047374 -0.141370 -0.234001 -0.324374 -0.411620 -0.494899 -0.573410 -0.646397 -0.713158 -0.773052 -0.825502 -0.870003 -0.906129 -0.933531 -0.951946 -0.961197 -0.961195 -0.951940 -0.933522 -0.906117 -0.869989 -0.825485 -0.773033 -0.713139 -0.646377 -0.573390 -0.494880 -0.411603 -0.324359 -0.233989 -0.141362 -0.047370 0.047083 +0.045935 0.137652 0.228049 0.316253 0.401414 0.482713 0.559366 0.630633 0.695827 0.754321 0.805549 0.849018 0.884307 0.911078 0.929070 0.938111 0.938114 0.929077 0.911089 0.884322 0.849036 0.805569 0.754343 0.695850 0.630655 0.559386 0.482731 0.401430 0.316264 0.228057 0.137656 0.045934 -0.046226 -0.137937 -0.228315 -0.316490 -0.401615 -0.482869 -0.559470 -0.630682 -0.695820 -0.754257 -0.805431 -0.848850 -0.884096 -0.910831 -0.928798 -0.937824 -0.937823 -0.928793 -0.910823 -0.884084 -0.848835 -0.805414 -0.754238 -0.695800 -0.630662 -0.559450 -0.482850 -0.401598 -0.316476 -0.228303 -0.137928 -0.046222 0.045935 +0.044343 0.132892 0.220165 0.305322 0.387543 0.466033 0.540039 0.608844 0.671788 0.728261 0.777721 0.819688 0.853760 0.879606 0.896977 0.905706 0.905708 0.896984 0.879617 0.853774 0.819706 0.777741 0.728283 0.671810 0.608866 0.540059 0.466052 0.387558 0.305334 0.220173 0.132896 0.044342 -0.044634 -0.133176 -0.220431 -0.305560 -0.387743 -0.466189 -0.540143 -0.608894 -0.671780 -0.728197 -0.777602 -0.819520 -0.853548 -0.879359 -0.896705 -0.905419 -0.905417 -0.896700 -0.879351 -0.853536 -0.819506 -0.777585 -0.728179 -0.671761 -0.608874 -0.540123 -0.466170 -0.387726 -0.305546 -0.220420 -0.133168 -0.044630 0.044343 +0.042322 0.126850 0.210160 0.291451 0.369938 0.444865 0.515510 0.581193 0.641279 0.695189 0.742403 0.782466 0.814991 0.839664 0.856247 0.864580 0.864582 0.856253 0.839675 0.815005 0.782483 0.742423 0.695210 0.641300 0.581214 0.515530 0.444883 0.369953 0.291462 0.210168 0.126854 0.042322 -0.042613 -0.127134 -0.210426 -0.291688 -0.370138 -0.445020 -0.515614 -0.581241 -0.641270 -0.695124 -0.742284 -0.782297 -0.814779 -0.839417 -0.855975 -0.864292 -0.864291 -0.855969 -0.839408 -0.814767 -0.782283 -0.742268 -0.695106 -0.641251 -0.581222 -0.515595 -0.445002 -0.370121 -0.291674 -0.210415 -0.127126 -0.042609 0.042322 +0.039893 0.119585 0.198130 0.274771 0.348769 0.419411 0.486017 0.547943 0.604593 0.655421 0.699936 0.737708 0.768374 0.791637 0.807272 0.815128 0.815130 0.807278 0.791647 0.768388 0.737726 0.699955 0.655442 0.604615 0.547964 0.486036 0.419429 0.348784 0.274783 0.198138 0.119589 0.039893 -0.040184 -0.119869 -0.198396 -0.275009 -0.348969 -0.419566 -0.486120 -0.547992 -0.604585 -0.655356 -0.699817 -0.737540 -0.768162 -0.791390 -0.806999 -0.814841 -0.814839 -0.806994 -0.791381 -0.768151 -0.737526 -0.699801 -0.655338 -0.604566 -0.547973 -0.486102 -0.419548 -0.348953 -0.274995 -0.198385 -0.119862 -0.040180 0.039893 +0.037078 0.111167 0.184191 0.255444 0.324241 0.389918 0.451842 0.509417 0.562086 0.609342 0.650729 0.685847 0.714358 0.735987 0.750523 0.757828 0.757830 0.750530 0.735997 0.714372 0.685864 0.650748 0.609362 0.562107 0.509437 0.451862 0.389935 0.324256 0.255456 0.184199 0.111172 0.037078 -0.037369 -0.111451 -0.184457 -0.255681 -0.324441 -0.390072 -0.451946 -0.509465 -0.562077 -0.609277 -0.650609 -0.685678 -0.714146 -0.735740 -0.750251 -0.757541 -0.757539 -0.750246 -0.735731 -0.714135 -0.685664 -0.650593 -0.609259 -0.562058 -0.509446 -0.451927 -0.390055 -0.324425 -0.255668 -0.184446 -0.111444 -0.037365 0.037078 +0.033904 0.101678 0.168476 0.233656 0.296589 0.356668 0.413315 0.465984 0.514165 0.557395 0.595256 0.627382 0.653464 0.673250 0.686548 0.693231 0.693233 0.686555 0.673260 0.653478 0.627399 0.595274 0.557415 0.514186 0.466004 0.413335 0.356686 0.296603 0.233667 0.168484 0.101682 0.033904 -0.034195 -0.101962 -0.168742 -0.233893 -0.296788 -0.356823 -0.413419 -0.466032 -0.514156 -0.557329 -0.595136 -0.627213 -0.653252 -0.673003 -0.686276 -0.692943 -0.692942 -0.686271 -0.672994 -0.653240 -0.627199 -0.595120 -0.557312 -0.514138 -0.466013 -0.413400 -0.356805 -0.296773 -0.233880 -0.168731 -0.101954 -0.034192 0.033904 +0.030403 0.091207 0.151137 0.209616 0.266079 0.319983 0.370808 0.418063 0.461293 0.500080 0.534050 0.562875 0.586278 0.604031 0.615963 0.621959 0.621961 0.615969 0.604041 0.586291 0.562892 0.534068 0.500100 0.461313 0.418083 0.370827 0.320000 0.266094 0.209628 0.151146 0.091212 0.030403 -0.030694 -0.091491 -0.151403 -0.209853 -0.266279 -0.320138 -0.370911 -0.418111 -0.461284 -0.500014 -0.533930 -0.562706 -0.586065 -0.603783 -0.615690 -0.621671 -0.621670 -0.615685 -0.603775 -0.586054 -0.562692 -0.533914 -0.499997 -0.461265 -0.418092 -0.370893 -0.320120 -0.266263 -0.209840 -0.151393 -0.091484 -0.030691 0.030403 +0.026607 0.079857 0.132342 0.183557 0.233007 0.280216 0.324729 0.366116 0.403978 0.437949 0.467702 0.492949 0.513446 0.528995 0.539447 0.544699 0.544701 0.539453 0.529005 0.513459 0.492965 0.467720 0.437969 0.403998 0.366136 0.324748 0.280233 0.233021 0.183568 0.132350 0.079862 0.026608 -0.026898 -0.080141 -0.132608 -0.183794 -0.233206 -0.280370 -0.324832 -0.366164 -0.403969 -0.437883 -0.467582 -0.492779 -0.513233 -0.528748 -0.539174 -0.544411 -0.544409 -0.539169 -0.528740 -0.513222 -0.492765 -0.467566 -0.437866 -0.403950 -0.366145 -0.324813 -0.280353 -0.233191 -0.183781 -0.132598 -0.080134 -0.026895 0.026607 +0.022554 0.067736 0.112271 0.155728 0.197689 0.237749 0.275522 0.310642 0.342772 0.371601 0.396850 0.418276 0.435671 0.448867 0.457736 0.462194 0.462196 0.457742 0.448876 0.435684 0.418292 0.396868 0.371620 0.342792 0.310662 0.275541 0.237766 0.197704 0.155740 0.112279 0.067741 0.022555 -0.022845 -0.068021 -0.112537 -0.155966 -0.197889 -0.237903 -0.275625 -0.310690 -0.342763 -0.371535 -0.396730 -0.418106 -0.435458 -0.448619 -0.457464 -0.461906 -0.461904 -0.457458 -0.448611 -0.435447 -0.418092 -0.396714 -0.371518 -0.342745 -0.310671 -0.275606 -0.237886 -0.197873 -0.155952 -0.112527 -0.068014 -0.022842 0.022554 +0.018282 0.054962 0.091117 0.126399 0.160467 0.192992 0.223661 0.252177 0.278266 0.301675 0.322177 0.339575 0.353701 0.364417 0.371620 0.375239 0.375241 0.371625 0.364426 0.353714 0.339591 0.322195 0.301694 0.278286 0.252197 0.223680 0.193009 0.160482 0.126411 0.091126 0.054967 0.018283 -0.018573 -0.055246 -0.091383 -0.126636 -0.160666 -0.193146 -0.223764 -0.252225 -0.278257 -0.301609 -0.322057 -0.339406 -0.353488 -0.364169 -0.371347 -0.374952 -0.374950 -0.371341 -0.364161 -0.353476 -0.339392 -0.322041 -0.301591 -0.278238 -0.252206 -0.223745 -0.193129 -0.160651 -0.126623 -0.091373 -0.055240 -0.018570 0.018282 +0.013832 0.041657 0.069085 0.095851 0.121698 0.146375 0.169645 0.191283 0.211080 0.228843 0.244402 0.257605 0.268325 0.276458 0.281925 0.284673 0.284675 0.281931 0.276468 0.268338 0.257621 0.244420 0.228862 0.211100 0.191303 0.169664 0.146393 0.121713 0.095863 0.069094 0.041662 0.013834 -0.014124 -0.041941 -0.069351 -0.096089 -0.121898 -0.146530 -0.169749 -0.191331 -0.211071 -0.228777 -0.244282 -0.257436 -0.268113 -0.276211 -0.281652 -0.284385 -0.284383 -0.281647 -0.276202 -0.268101 -0.257421 -0.244266 -0.228759 -0.211052 -0.191312 -0.169730 -0.146512 -0.121882 -0.096076 -0.069341 -0.041935 -0.014121 0.013832 +0.009249 0.027950 0.046386 0.064379 0.081756 0.098348 0.113996 0.128547 0.141861 0.153808 0.164274 0.173155 0.180367 0.185839 0.189517 0.191366 0.191368 0.189523 0.185848 0.180380 0.173171 0.164291 0.153827 0.141881 0.128567 0.114015 0.098366 0.081771 0.064392 0.046395 0.027955 0.009250 -0.009540 -0.028234 -0.046652 -0.064617 -0.081956 -0.098503 -0.114099 -0.128595 -0.141852 -0.153743 -0.164154 -0.172986 -0.180154 -0.185591 -0.189244 -0.191078 -0.191076 -0.189239 -0.185582 -0.180143 -0.172971 -0.164137 -0.153724 -0.141833 -0.128576 -0.114080 -0.098486 -0.081940 -0.064604 -0.046642 -0.028228 -0.009538 0.009249 +0.004574 0.013972 0.023239 0.032286 0.041026 0.049374 0.057248 0.064572 0.071276 0.077293 0.082564 0.087039 0.090673 0.093431 0.095285 0.096218 0.096219 0.095291 0.093440 0.090685 0.087054 0.082582 0.077312 0.071296 0.064592 0.057267 0.049391 0.041041 0.032299 0.023248 0.013977 0.004576 -0.004866 -0.014256 -0.023505 -0.032524 -0.041226 -0.049528 -0.057351 -0.064621 -0.071267 -0.077227 -0.082444 -0.086869 -0.090460 -0.093183 -0.095012 -0.095930 -0.095928 -0.095006 -0.093174 -0.090448 -0.086854 -0.082427 -0.077208 -0.071247 -0.064601 -0.057332 -0.049511 -0.041211 -0.032511 -0.023495 -0.014250 -0.004863 0.004574 +-0.000146 -0.000142 -0.000133 -0.000119 -0.000100 -0.000077 -0.000052 -0.000024 0.000004 0.000033 0.000060 0.000085 0.000106 0.000124 0.000137 0.000144 0.000146 0.000142 0.000133 0.000119 0.000100 0.000077 0.000052 0.000024 -0.000004 -0.000033 -0.000060 -0.000085 -0.000106 -0.000124 -0.000136 -0.000144 -0.000146 -0.000142 -0.000133 -0.000119 -0.000100 -0.000077 -0.000052 -0.000024 0.000004 0.000033 0.000060 0.000085 0.000106 0.000124 0.000136 0.000144 0.000146 0.000142 0.000133 0.000119 0.000100 0.000077 0.000052 0.000024 -0.000004 -0.000033 -0.000060 -0.000085 -0.000106 -0.000124 -0.000136 -0.000144 -0.000146 +-0.004866 -0.014256 -0.023505 -0.032524 -0.041226 -0.049528 -0.057351 -0.064621 -0.071267 -0.077227 -0.082444 -0.086869 -0.090460 -0.093183 -0.095012 -0.095930 -0.095928 -0.095006 -0.093174 -0.090448 -0.086854 -0.082427 -0.077208 -0.071247 -0.064601 -0.057332 -0.049511 -0.041210 -0.032511 -0.023495 -0.014250 -0.004863 0.004574 0.013972 0.023239 0.032286 0.041026 0.049373 0.057248 0.064572 0.071276 0.077292 0.082564 0.087039 0.090673 0.093430 0.095285 0.096217 0.096219 0.095290 0.093440 0.090685 0.087054 0.082582 0.077312 0.071296 0.064592 0.057267 0.049391 0.041041 0.032299 0.023248 0.013977 0.004576 -0.004866 +-0.009540 -0.028234 -0.046652 -0.064617 -0.081956 -0.098503 -0.114099 -0.128595 -0.141852 -0.153743 -0.164154 -0.172986 -0.180154 -0.185591 -0.189244 -0.191078 -0.191076 -0.189238 -0.185582 -0.180142 -0.172971 -0.164137 -0.153724 -0.141832 -0.128575 -0.114080 -0.098485 -0.081940 -0.064604 -0.046642 -0.028228 -0.009538 0.009249 0.027950 0.046386 0.064379 0.081756 0.098348 0.113996 0.128547 0.141861 0.153808 0.164274 0.173155 0.180367 0.185838 0.189517 0.191366 0.191368 0.189522 0.185848 0.180380 0.173171 0.164291 0.153827 0.141881 0.128567 0.114015 0.098366 0.081771 0.064392 0.046395 0.027955 0.009250 -0.009540 +-0.014124 -0.041941 -0.069351 -0.096089 -0.121898 -0.146530 -0.169749 -0.191331 -0.211071 -0.228777 -0.244282 -0.257436 -0.268113 -0.276210 -0.281652 -0.284385 -0.284383 -0.281646 -0.276202 -0.268101 -0.257421 -0.244265 -0.228759 -0.211051 -0.191312 -0.169730 -0.146512 -0.121882 -0.096076 -0.069341 -0.041935 -0.014121 0.013832 0.041657 0.069085 0.095851 0.121698 0.146375 0.169645 0.191283 0.211079 0.228843 0.244402 0.257605 0.268325 0.276458 0.281925 0.284672 0.284674 0.281931 0.276468 0.268338 0.257621 0.244420 0.228862 0.211100 0.191303 0.169664 0.146393 0.121713 0.095863 0.069094 0.041662 0.013834 -0.014124 +-0.018573 -0.055246 -0.091383 -0.126636 -0.160666 -0.193146 -0.223764 -0.252225 -0.278257 -0.301609 -0.322057 -0.339405 -0.353488 -0.364169 -0.371346 -0.374951 -0.374950 -0.371341 -0.364160 -0.353476 -0.339391 -0.322040 -0.301590 -0.278238 -0.252206 -0.223745 -0.193129 -0.160651 -0.126623 -0.091373 -0.055240 -0.018570 0.018282 0.054962 0.091117 0.126399 0.160466 0.192991 0.223660 0.252177 0.278265 0.301674 0.322177 0.339575 0.353700 0.364416 0.371619 0.375239 0.375241 0.371625 0.364426 0.353713 0.339591 0.322195 0.301694 0.278286 0.252197 0.223680 0.193009 0.160481 0.126411 0.091126 0.054967 0.018283 -0.018573 +-0.022845 -0.068021 -0.112537 -0.155965 -0.197889 -0.237903 -0.275625 -0.310690 -0.342763 -0.371535 -0.396730 -0.418106 -0.435458 -0.448619 -0.457463 -0.461906 -0.461904 -0.457458 -0.448610 -0.435446 -0.418092 -0.396713 -0.371517 -0.342744 -0.310671 -0.275606 -0.237886 -0.197873 -0.155952 -0.112526 -0.068014 -0.022842 0.022554 0.067736 0.112271 0.155728 0.197689 0.237749 0.275521 0.310642 0.342772 0.371600 0.396850 0.418275 0.435670 0.448866 0.457736 0.462193 0.462195 0.457742 0.448876 0.435683 0.418291 0.396868 0.371620 0.342792 0.310662 0.275540 0.237766 0.197704 0.155740 0.112279 0.067741 0.022555 -0.022845 +-0.026898 -0.080141 -0.132608 -0.183794 -0.233206 -0.280370 -0.324832 -0.366163 -0.403968 -0.437883 -0.467582 -0.492779 -0.513233 -0.528747 -0.539173 -0.544410 -0.544409 -0.539168 -0.528739 -0.513221 -0.492765 -0.467565 -0.437865 -0.403949 -0.366144 -0.324813 -0.280352 -0.233190 -0.183780 -0.132597 -0.080134 -0.026895 0.026607 0.079857 0.132342 0.183556 0.233006 0.280215 0.324728 0.366115 0.403977 0.437948 0.467701 0.492948 0.513445 0.528995 0.539446 0.544698 0.544700 0.539452 0.529005 0.513459 0.492965 0.467720 0.437968 0.403998 0.366135 0.324747 0.280233 0.233021 0.183568 0.132350 0.079862 0.026608 -0.026898 +-0.030694 -0.091491 -0.151403 -0.209853 -0.266279 -0.320138 -0.370911 -0.418111 -0.461283 -0.500014 -0.533930 -0.562706 -0.586065 -0.603783 -0.615689 -0.621671 -0.621669 -0.615684 -0.603774 -0.586053 -0.562691 -0.533913 -0.499996 -0.461264 -0.418091 -0.370892 -0.320120 -0.266263 -0.209840 -0.151393 -0.091484 -0.030691 0.030403 0.091207 0.151137 0.209616 0.266079 0.319983 0.370807 0.418062 0.461292 0.500079 0.534049 0.562875 0.586277 0.604030 0.615962 0.621958 0.621960 0.615968 0.604040 0.586291 0.562891 0.534068 0.500099 0.461313 0.418083 0.370827 0.320000 0.266094 0.209628 0.151146 0.091211 0.030403 -0.030694 +-0.034195 -0.101962 -0.168742 -0.233893 -0.296788 -0.356823 -0.413418 -0.466032 -0.514156 -0.557329 -0.595135 -0.627212 -0.653251 -0.673002 -0.686275 -0.692943 -0.692941 -0.686270 -0.672993 -0.653240 -0.627198 -0.595119 -0.557311 -0.514137 -0.466012 -0.413400 -0.356805 -0.296772 -0.233879 -0.168731 -0.101954 -0.034192 0.033904 0.101677 0.168476 0.233655 0.296588 0.356668 0.413315 0.465983 0.514164 0.557394 0.595255 0.627381 0.653463 0.673249 0.686547 0.693230 0.693232 0.686554 0.673259 0.653477 0.627398 0.595274 0.557414 0.514185 0.466004 0.413334 0.356685 0.296603 0.233667 0.168484 0.101682 0.033904 -0.034195 +-0.037369 -0.111451 -0.184456 -0.255681 -0.324440 -0.390072 -0.451945 -0.509465 -0.562077 -0.609276 -0.650609 -0.685678 -0.714146 -0.735739 -0.750250 -0.757540 -0.757538 -0.750245 -0.735730 -0.714134 -0.685664 -0.650593 -0.609258 -0.562058 -0.509445 -0.451926 -0.390054 -0.324424 -0.255667 -0.184445 -0.111444 -0.037365 0.037078 0.111167 0.184190 0.255444 0.324240 0.389917 0.451841 0.509416 0.562085 0.609341 0.650728 0.685847 0.714358 0.735986 0.750522 0.757827 0.757829 0.750529 0.735996 0.714372 0.685864 0.650747 0.609362 0.562106 0.509437 0.451861 0.389935 0.324255 0.255455 0.184199 0.111171 0.037078 -0.037369 +-0.040184 -0.119869 -0.198396 -0.275008 -0.348969 -0.419566 -0.486120 -0.547991 -0.604585 -0.655356 -0.699816 -0.737539 -0.768161 -0.791389 -0.806999 -0.814840 -0.814838 -0.806993 -0.791380 -0.768150 -0.737525 -0.699800 -0.655338 -0.604565 -0.547972 -0.486101 -0.419548 -0.348952 -0.274994 -0.198385 -0.119861 -0.040180 0.039893 0.119585 0.198130 0.274771 0.348769 0.419411 0.486016 0.547943 0.604593 0.655420 0.699935 0.737708 0.768373 0.791636 0.807271 0.815127 0.815130 0.807277 0.791646 0.768387 0.737725 0.699955 0.655441 0.604614 0.547964 0.486036 0.419429 0.348784 0.274782 0.198138 0.119589 0.039893 -0.040184 +-0.042613 -0.127134 -0.210426 -0.291688 -0.370138 -0.445020 -0.515614 -0.581241 -0.641270 -0.695123 -0.742283 -0.782297 -0.814778 -0.839416 -0.855974 -0.864292 -0.864290 -0.855969 -0.839408 -0.814767 -0.782282 -0.742267 -0.695105 -0.641251 -0.581221 -0.515594 -0.445001 -0.370121 -0.291674 -0.210415 -0.127126 -0.042609 0.042322 0.126850 0.210160 0.291450 0.369937 0.444864 0.515510 0.581192 0.641278 0.695188 0.742402 0.782465 0.814990 0.839663 0.856246 0.864579 0.864581 0.856253 0.839674 0.815005 0.782483 0.742422 0.695209 0.641300 0.581213 0.515530 0.444882 0.369952 0.291462 0.210168 0.126854 0.042322 -0.042613 +-0.044634 -0.133176 -0.220431 -0.305560 -0.387743 -0.466188 -0.540142 -0.608893 -0.671780 -0.728196 -0.777601 -0.819520 -0.853548 -0.879359 -0.896704 -0.905418 -0.905416 -0.896699 -0.879350 -0.853536 -0.819505 -0.777585 -0.728178 -0.671760 -0.608873 -0.540123 -0.466170 -0.387726 -0.305546 -0.220420 -0.133168 -0.044630 0.044343 0.132892 0.220165 0.305322 0.387542 0.466033 0.540038 0.608844 0.671787 0.728261 0.777720 0.819688 0.853759 0.879605 0.896976 0.905705 0.905708 0.896983 0.879616 0.853774 0.819706 0.777740 0.728282 0.671809 0.608866 0.540058 0.466051 0.387558 0.305334 0.220173 0.132896 0.044342 -0.044634 +-0.046226 -0.137936 -0.228315 -0.316490 -0.401615 -0.482868 -0.559470 -0.630682 -0.695819 -0.754256 -0.805430 -0.848849 -0.884096 -0.910831 -0.928798 -0.937824 -0.937822 -0.928792 -0.910822 -0.884084 -0.848834 -0.805413 -0.754238 -0.695800 -0.630662 -0.559450 -0.482850 -0.401598 -0.316476 -0.228303 -0.137928 -0.046221 0.045935 0.137652 0.228048 0.316252 0.401414 0.482713 0.559365 0.630632 0.695827 0.754320 0.805548 0.849017 0.884307 0.911077 0.929070 0.938111 0.938113 0.929077 0.911089 0.884322 0.849035 0.805569 0.754342 0.695849 0.630654 0.559386 0.482731 0.401429 0.316264 0.228057 0.137656 0.045934 -0.046226 +-0.047374 -0.141370 -0.234001 -0.324374 -0.411620 -0.494899 -0.573409 -0.646397 -0.713158 -0.773052 -0.825502 -0.870003 -0.906128 -0.933530 -0.951945 -0.961196 -0.961194 -0.951940 -0.933521 -0.906116 -0.869988 -0.825484 -0.773033 -0.713138 -0.646376 -0.573389 -0.494880 -0.411602 -0.324359 -0.233989 -0.141362 -0.047370 0.047083 0.141086 0.233734 0.324136 0.411419 0.494743 0.573305 0.646347 0.713165 0.773116 0.825620 0.870171 0.906339 0.933776 0.952217 0.961483 0.961486 0.952224 0.933788 0.906355 0.870189 0.825640 0.773138 0.713188 0.646369 0.573325 0.494761 0.411434 0.324148 0.233742 0.141090 0.047082 -0.047374 +-0.048067 -0.143444 -0.237434 -0.329134 -0.417661 -0.502164 -0.581827 -0.655887 -0.723629 -0.784402 -0.837622 -0.882777 -0.919434 -0.947238 -0.965923 -0.975310 -0.975308 -0.965918 -0.947229 -0.919421 -0.882763 -0.837605 -0.784383 -0.723609 -0.655866 -0.581807 -0.502144 -0.417644 -0.329120 -0.237422 -0.143435 -0.048063 0.047776 0.143159 0.237168 0.328896 0.417461 0.502008 0.581723 0.655837 0.723636 0.784466 0.837740 0.882945 0.919644 0.947484 0.966195 0.975597 0.975600 0.966202 0.947495 0.919660 0.882964 0.837761 0.784488 0.723659 0.655859 0.581743 0.502026 0.417476 0.328908 0.237176 0.143163 0.047776 -0.048067 +-0.048299 -0.144137 -0.238582 -0.330726 -0.419682 -0.504593 -0.584642 -0.659060 -0.727130 -0.788198 -0.841676 -0.887049 -0.923883 -0.951822 -0.970598 -0.980030 -0.980028 -0.970592 -0.951813 -0.923871 -0.887034 -0.841658 -0.788179 -0.727110 -0.659040 -0.584622 -0.504574 -0.419665 -0.330711 -0.238571 -0.144129 -0.048295 0.048008 0.143853 0.238316 0.330488 0.419481 0.504437 0.584538 0.659010 0.727137 0.788261 0.841793 0.887217 0.924094 0.952068 0.970870 0.980317 0.980320 0.970877 0.952079 0.924109 0.887236 0.841814 0.788284 0.727160 0.659033 0.584558 0.504456 0.419497 0.330500 0.238324 0.143857 0.048008 -0.048299 +-0.048067 -0.143444 -0.237434 -0.329134 -0.417662 -0.502164 -0.581827 -0.655887 -0.723629 -0.784402 -0.837622 -0.882778 -0.919434 -0.947238 -0.965924 -0.975310 -0.975309 -0.965918 -0.947229 -0.919422 -0.882763 -0.837605 -0.784383 -0.723609 -0.655866 -0.581807 -0.502145 -0.417644 -0.329120 -0.237422 -0.143435 -0.048063 0.047776 0.143159 0.237168 0.328896 0.417461 0.502008 0.581723 0.655837 0.723636 0.784466 0.837740 0.882945 0.919645 0.947484 0.966195 0.975598 0.975600 0.966202 0.947496 0.919660 0.882964 0.837761 0.784488 0.723659 0.655859 0.581744 0.502026 0.417476 0.328908 0.237176 0.143163 0.047776 -0.048067 +-0.047374 -0.141370 -0.234001 -0.324374 -0.411620 -0.494899 -0.573410 -0.646397 -0.713158 -0.773052 -0.825502 -0.870003 -0.906129 -0.933531 -0.951946 -0.961197 -0.961195 -0.951940 -0.933522 -0.906117 -0.869989 -0.825485 -0.773033 -0.713139 -0.646377 -0.573390 -0.494880 -0.411603 -0.324359 -0.233989 -0.141362 -0.047370 0.047083 0.141086 0.233734 0.324136 0.411419 0.494743 0.573305 0.646347 0.713166 0.773116 0.825620 0.870171 0.906340 0.933777 0.952217 0.961484 0.961486 0.952224 0.933788 0.906355 0.870190 0.825641 0.773138 0.713188 0.646369 0.573326 0.494762 0.411435 0.324148 0.233743 0.141090 0.047082 -0.047374 +-0.046226 -0.137937 -0.228315 -0.316490 -0.401615 -0.482869 -0.559470 -0.630682 -0.695820 -0.754257 -0.805431 -0.848850 -0.884096 -0.910831 -0.928798 -0.937824 -0.937823 -0.928793 -0.910823 -0.884084 -0.848835 -0.805414 -0.754238 -0.695800 -0.630662 -0.559450 -0.482850 -0.401598 -0.316476 -0.228303 -0.137928 -0.046222 0.045935 0.137652 0.228049 0.316253 0.401414 0.482713 0.559366 0.630633 0.695827 0.754321 0.805549 0.849018 0.884307 0.911078 0.929070 0.938111 0.938114 0.929077 0.911089 0.884322 0.849036 0.805569 0.754343 0.695850 0.630655 0.559386 0.482731 0.401430 0.316264 0.228057 0.137656 0.045934 -0.046226 +-0.044634 -0.133176 -0.220431 -0.305560 -0.387743 -0.466189 -0.540143 -0.608894 -0.671780 -0.728197 -0.777602 -0.819520 -0.853548 -0.879359 -0.896705 -0.905419 -0.905417 -0.896700 -0.879351 -0.853536 -0.819506 -0.777585 -0.728179 -0.671761 -0.608874 -0.540123 -0.466170 -0.387726 -0.305546 -0.220420 -0.133168 -0.044630 0.044343 0.132892 0.220165 0.305322 0.387543 0.466033 0.540039 0.608844 0.671788 0.728261 0.777721 0.819688 0.853760 0.879606 0.896977 0.905706 0.905708 0.896984 0.879617 0.853774 0.819706 0.777741 0.728283 0.671810 0.608866 0.540059 0.466052 0.387558 0.305334 0.220173 0.132896 0.044342 -0.044634 +-0.042613 -0.127134 -0.210426 -0.291688 -0.370138 -0.445020 -0.515614 -0.581241 -0.641270 -0.695124 -0.742284 -0.782297 -0.814779 -0.839417 -0.855975 -0.864292 -0.864291 -0.855969 -0.839408 -0.814767 -0.782283 -0.742268 -0.695106 -0.641251 -0.581222 -0.515595 -0.445002 -0.370121 -0.291674 -0.210415 -0.127126 -0.042609 0.042322 0.126850 0.210160 0.291451 0.369938 0.444865 0.515510 0.581193 0.641279 0.695189 0.742403 0.782466 0.814991 0.839664 0.856247 0.864580 0.864582 0.856253 0.839675 0.815005 0.782483 0.742423 0.695210 0.641300 0.581214 0.515530 0.444883 0.369953 0.291462 0.210168 0.126854 0.042322 -0.042613 +-0.040184 -0.119869 -0.198396 -0.275009 -0.348969 -0.419566 -0.486120 -0.547992 -0.604585 -0.655356 -0.699817 -0.737540 -0.768162 -0.791390 -0.806999 -0.814841 -0.814839 -0.806994 -0.791381 -0.768151 -0.737526 -0.699801 -0.655338 -0.604566 -0.547973 -0.486102 -0.419548 -0.348953 -0.274995 -0.198385 -0.119862 -0.040180 0.039893 0.119585 0.198130 0.274771 0.348769 0.419411 0.486017 0.547943 0.604593 0.655421 0.699936 0.737708 0.768374 0.791637 0.807272 0.815128 0.815130 0.807278 0.791647 0.768388 0.737726 0.699955 0.655442 0.604615 0.547964 0.486036 0.419429 0.348784 0.274783 0.198138 0.119589 0.039893 -0.040184 +-0.037369 -0.111451 -0.184457 -0.255681 -0.324441 -0.390072 -0.451946 -0.509465 -0.562077 -0.609277 -0.650609 -0.685678 -0.714146 -0.735740 -0.750251 -0.757541 -0.757539 -0.750246 -0.735731 -0.714135 -0.685664 -0.650593 -0.609259 -0.562058 -0.509446 -0.451927 -0.390055 -0.324425 -0.255668 -0.184446 -0.111444 -0.037365 0.037078 0.111167 0.184191 0.255444 0.324241 0.389918 0.451842 0.509417 0.562086 0.609342 0.650729 0.685847 0.714358 0.735987 0.750523 0.757828 0.757830 0.750530 0.735997 0.714372 0.685864 0.650748 0.609362 0.562107 0.509437 0.451862 0.389935 0.324256 0.255456 0.184199 0.111172 0.037078 -0.037369 +-0.034195 -0.101962 -0.168742 -0.233893 -0.296788 -0.356823 -0.413419 -0.466032 -0.514156 -0.557329 -0.595136 -0.627213 -0.653252 -0.673003 -0.686276 -0.692943 -0.692942 -0.686271 -0.672994 -0.653240 -0.627199 -0.595120 -0.557312 -0.514138 -0.466013 -0.413400 -0.356805 -0.296773 -0.233880 -0.168731 -0.101954 -0.034192 0.033904 0.101678 0.168476 0.233656 0.296589 0.356668 0.413315 0.465984 0.514165 0.557395 0.595256 0.627382 0.653464 0.673250 0.686548 0.693231 0.693233 0.686555 0.673260 0.653478 0.627399 0.595274 0.557415 0.514186 0.466004 0.413335 0.356686 0.296603 0.233667 0.168484 0.101682 0.033904 -0.034195 +-0.030694 -0.091491 -0.151403 -0.209853 -0.266279 -0.320138 -0.370911 -0.418111 -0.461284 -0.500014 -0.533930 -0.562706 -0.586065 -0.603783 -0.615690 -0.621671 -0.621670 -0.615685 -0.603775 -0.586054 -0.562692 -0.533914 -0.499997 -0.461265 -0.418092 -0.370893 -0.320120 -0.266263 -0.209840 -0.151393 -0.091484 -0.030691 0.030403 0.091207 0.151137 0.209616 0.266079 0.319983 0.370808 0.418063 0.461293 0.500080 0.534050 0.562875 0.586278 0.604031 0.615963 0.621959 0.621961 0.615969 0.604041 0.586291 0.562892 0.534068 0.500100 0.461313 0.418083 0.370827 0.320000 0.266094 0.209628 0.151146 0.091212 0.030403 -0.030694 +-0.026898 -0.080141 -0.132608 -0.183794 -0.233206 -0.280370 -0.324832 -0.366164 -0.403969 -0.437883 -0.467582 -0.492779 -0.513233 -0.528748 -0.539174 -0.544411 -0.544409 -0.539169 -0.528740 -0.513222 -0.492765 -0.467566 -0.437866 -0.403950 -0.366145 -0.324813 -0.280353 -0.233191 -0.183781 -0.132598 -0.080134 -0.026895 0.026607 0.079857 0.132342 0.183557 0.233007 0.280216 0.324729 0.366116 0.403978 0.437949 0.467702 0.492949 0.513446 0.528995 0.539447 0.544699 0.544701 0.539453 0.529005 0.513459 0.492965 0.467720 0.437969 0.403998 0.366136 0.324748 0.280233 0.233021 0.183568 0.132350 0.079862 0.026608 -0.026898 +-0.022845 -0.068021 -0.112537 -0.155966 -0.197889 -0.237903 -0.275625 -0.310690 -0.342763 -0.371535 -0.396730 -0.418106 -0.435458 -0.448619 -0.457464 -0.461906 -0.461904 -0.457458 -0.448611 -0.435447 -0.418092 -0.396714 -0.371518 -0.342745 -0.310671 -0.275606 -0.237886 -0.197873 -0.155952 -0.112527 -0.068014 -0.022842 0.022554 0.067736 0.112271 0.155728 0.197689 0.237749 0.275522 0.310642 0.342772 0.371601 0.396850 0.418276 0.435671 0.448867 0.457736 0.462194 0.462196 0.457742 0.448876 0.435684 0.418292 0.396868 0.371620 0.342792 0.310662 0.275541 0.237766 0.197704 0.155740 0.112279 0.067741 0.022555 -0.022845 +-0.018573 -0.055246 -0.091383 -0.126636 -0.160666 -0.193146 -0.223764 -0.252225 -0.278257 -0.301609 -0.322057 -0.339406 -0.353488 -0.364169 -0.371347 -0.374952 -0.374950 -0.371341 -0.364161 -0.353476 -0.339392 -0.322041 -0.301591 -0.278238 -0.252206 -0.223745 -0.193129 -0.160651 -0.126623 -0.091373 -0.055240 -0.018570 0.018282 0.054962 0.091117 0.126399 0.160467 0.192992 0.223661 0.252177 0.278266 0.301675 0.322177 0.339575 0.353701 0.364417 0.371620 0.375239 0.375241 0.371625 0.364426 0.353714 0.339591 0.322195 0.301694 0.278286 0.252197 0.223680 0.193009 0.160482 0.126411 0.091126 0.054967 0.018283 -0.018573 +-0.014124 -0.041941 -0.069351 -0.096089 -0.121898 -0.146530 -0.169749 -0.191331 -0.211071 -0.228777 -0.244282 -0.257436 -0.268113 -0.276211 -0.281652 -0.284385 -0.284383 -0.281647 -0.276202 -0.268101 -0.257421 -0.244266 -0.228759 -0.211052 -0.191312 -0.169730 -0.146512 -0.121882 -0.096076 -0.069341 -0.041935 -0.014121 0.013832 0.041657 0.069085 0.095851 0.121698 0.146375 0.169645 0.191283 0.211080 0.228843 0.244402 0.257605 0.268325 0.276458 0.281925 0.284673 0.284675 0.281931 0.276468 0.268338 0.257621 0.244420 0.228862 0.211100 0.191303 0.169664 0.146393 0.121713 0.095863 0.069094 0.041662 0.013834 -0.014124 +-0.009540 -0.028234 -0.046652 -0.064617 -0.081956 -0.098503 -0.114099 -0.128595 -0.141852 -0.153743 -0.164154 -0.172986 -0.180154 -0.185591 -0.189244 -0.191078 -0.191076 -0.189239 -0.185582 -0.180143 -0.172971 -0.164137 -0.153724 -0.141833 -0.128576 -0.114080 -0.098486 -0.081940 -0.064604 -0.046642 -0.028228 -0.009538 0.009249 0.027950 0.046386 0.064379 0.081756 0.098348 0.113996 0.128547 0.141861 0.153808 0.164274 0.173155 0.180367 0.185839 0.189517 0.191366 0.191368 0.189523 0.185848 0.180380 0.173171 0.164291 0.153827 0.141881 0.128567 0.114015 0.098366 0.081771 0.064392 0.046395 0.027955 0.009250 -0.009540 +-0.004866 -0.014256 -0.023505 -0.032524 -0.041226 -0.049528 -0.057351 -0.064621 -0.071267 -0.077227 -0.082444 -0.086869 -0.090460 -0.093183 -0.095012 -0.095930 -0.095928 -0.095006 -0.093174 -0.090448 -0.086854 -0.082427 -0.077208 -0.071247 -0.064601 -0.057332 -0.049511 -0.041211 -0.032511 -0.023495 -0.014250 -0.004863 0.004574 0.013972 0.023239 0.032286 0.041026 0.049374 0.057248 0.064572 0.071276 0.077293 0.082564 0.087039 0.090673 0.093431 0.095285 0.096218 0.096219 0.095291 0.093440 0.090685 0.087054 0.082582 0.077312 0.071296 0.064592 0.057267 0.049391 0.041041 0.032299 0.023248 0.013977 0.004576 -0.004866 +-0.000146 -0.000142 -0.000133 -0.000119 -0.000100 -0.000077 -0.000052 -0.000024 0.000004 0.000033 0.000060 0.000085 0.000106 0.000124 0.000136 0.000144 0.000146 0.000142 0.000133 0.000119 0.000100 0.000077 0.000052 0.000024 -0.000004 -0.000033 -0.000060 -0.000085 -0.000106 -0.000124 -0.000136 -0.000144 -0.000146 -0.000142 -0.000133 -0.000119 -0.000100 -0.000077 -0.000052 -0.000024 0.000004 0.000033 0.000060 0.000085 0.000106 0.000124 0.000137 0.000144 0.000146 0.000142 0.000133 0.000119 0.000100 0.000077 0.000052 0.000024 -0.000004 -0.000033 -0.000060 -0.000085 -0.000106 -0.000124 -0.000136 -0.000144 -0.000146 +0.004574 0.013972 0.023239 0.032286 0.041026 0.049373 0.057248 0.064572 0.071276 0.077292 0.082564 0.087039 0.090673 0.093430 0.095285 0.096217 0.096219 0.095290 0.093440 0.090685 0.087054 0.082582 0.077312 0.071296 0.064592 0.057267 0.049391 0.041041 0.032299 0.023248 0.013977 0.004576 -0.004866 -0.014256 -0.023505 -0.032524 -0.041226 -0.049528 -0.057351 -0.064621 -0.071267 -0.077227 -0.082444 -0.086869 -0.090460 -0.093183 -0.095012 -0.095930 -0.095928 -0.095006 -0.093174 -0.090448 -0.086854 -0.082427 -0.077208 -0.071247 -0.064601 -0.057332 -0.049511 -0.041210 -0.032511 -0.023495 -0.014250 -0.004863 0.004574 +0.009249 0.027950 0.046386 0.064379 0.081756 0.098348 0.113996 0.128547 0.141861 0.153808 0.164274 0.173155 0.180367 0.185838 0.189517 0.191366 0.191368 0.189522 0.185848 0.180380 0.173171 0.164291 0.153827 0.141881 0.128567 0.114015 0.098366 0.081771 0.064392 0.046395 0.027955 0.009250 -0.009540 -0.028234 -0.046652 -0.064617 -0.081956 -0.098503 -0.114099 -0.128595 -0.141852 -0.153743 -0.164154 -0.172986 -0.180154 -0.185591 -0.189244 -0.191078 -0.191076 -0.189238 -0.185582 -0.180142 -0.172971 -0.164137 -0.153724 -0.141832 -0.128575 -0.114080 -0.098485 -0.081940 -0.064604 -0.046642 -0.028228 -0.009538 0.009249 +0.013832 0.041657 0.069085 0.095851 0.121698 0.146375 0.169645 0.191283 0.211079 0.228843 0.244402 0.257605 0.268325 0.276458 0.281925 0.284672 0.284674 0.281931 0.276468 0.268338 0.257621 0.244420 0.228862 0.211100 0.191303 0.169664 0.146393 0.121713 0.095863 0.069094 0.041662 0.013834 -0.014124 -0.041941 -0.069351 -0.096089 -0.121898 -0.146530 -0.169749 -0.191331 -0.211071 -0.228777 -0.244282 -0.257436 -0.268113 -0.276210 -0.281652 -0.284385 -0.284383 -0.281646 -0.276202 -0.268101 -0.257421 -0.244265 -0.228759 -0.211051 -0.191312 -0.169730 -0.146512 -0.121882 -0.096076 -0.069341 -0.041935 -0.014121 0.013832 +0.018282 0.054962 0.091117 0.126399 0.160466 0.192991 0.223660 0.252177 0.278265 0.301674 0.322177 0.339575 0.353700 0.364416 0.371619 0.375239 0.375241 0.371625 0.364426 0.353713 0.339591 0.322195 0.301694 0.278286 0.252197 0.223680 0.193009 0.160481 0.126411 0.091126 0.054967 0.018283 -0.018573 -0.055246 -0.091383 -0.126636 -0.160666 -0.193146 -0.223764 -0.252225 -0.278257 -0.301609 -0.322057 -0.339405 -0.353488 -0.364169 -0.371346 -0.374951 -0.374950 -0.371341 -0.364160 -0.353476 -0.339391 -0.322040 -0.301590 -0.278238 -0.252206 -0.223745 -0.193129 -0.160651 -0.126623 -0.091373 -0.055240 -0.018570 0.018282 +0.022554 0.067736 0.112271 0.155728 0.197689 0.237749 0.275521 0.310642 0.342772 0.371600 0.396850 0.418275 0.435670 0.448866 0.457736 0.462193 0.462195 0.457742 0.448876 0.435683 0.418291 0.396868 0.371620 0.342792 0.310662 0.275540 0.237766 0.197704 0.155740 0.112279 0.067741 0.022555 -0.022845 -0.068021 -0.112537 -0.155965 -0.197889 -0.237903 -0.275625 -0.310690 -0.342763 -0.371535 -0.396730 -0.418106 -0.435458 -0.448619 -0.457463 -0.461906 -0.461904 -0.457458 -0.448610 -0.435446 -0.418092 -0.396713 -0.371517 -0.342744 -0.310671 -0.275606 -0.237886 -0.197873 -0.155952 -0.112526 -0.068014 -0.022842 0.022554 +0.026607 0.079857 0.132342 0.183556 0.233006 0.280215 0.324728 0.366115 0.403977 0.437948 0.467701 0.492948 0.513445 0.528995 0.539446 0.544698 0.544700 0.539452 0.529005 0.513459 0.492965 0.467720 0.437968 0.403998 0.366135 0.324747 0.280233 0.233021 0.183568 0.132350 0.079862 0.026608 -0.026898 -0.080141 -0.132608 -0.183794 -0.233206 -0.280370 -0.324832 -0.366163 -0.403968 -0.437883 -0.467582 -0.492779 -0.513233 -0.528747 -0.539173 -0.544410 -0.544409 -0.539168 -0.528739 -0.513221 -0.492765 -0.467565 -0.437865 -0.403949 -0.366144 -0.324813 -0.280352 -0.233190 -0.183780 -0.132597 -0.080134 -0.026895 0.026607 +0.030403 0.091207 0.151137 0.209616 0.266079 0.319983 0.370807 0.418062 0.461292 0.500079 0.534049 0.562875 0.586277 0.604030 0.615962 0.621958 0.621960 0.615968 0.604040 0.586291 0.562891 0.534068 0.500099 0.461313 0.418083 0.370827 0.320000 0.266094 0.209628 0.151146 0.091211 0.030403 -0.030694 -0.091491 -0.151403 -0.209853 -0.266279 -0.320138 -0.370911 -0.418111 -0.461283 -0.500014 -0.533930 -0.562706 -0.586065 -0.603783 -0.615689 -0.621671 -0.621669 -0.615684 -0.603774 -0.586053 -0.562691 -0.533913 -0.499996 -0.461264 -0.418091 -0.370892 -0.320120 -0.266263 -0.209840 -0.151393 -0.091484 -0.030691 0.030403 +0.033904 0.101677 0.168476 0.233655 0.296588 0.356668 0.413315 0.465983 0.514164 0.557394 0.595255 0.627381 0.653463 0.673249 0.686547 0.693230 0.693232 0.686554 0.673259 0.653477 0.627398 0.595274 0.557414 0.514185 0.466004 0.413334 0.356685 0.296603 0.233667 0.168484 0.101682 0.033904 -0.034195 -0.101962 -0.168742 -0.233893 -0.296788 -0.356823 -0.413418 -0.466032 -0.514156 -0.557329 -0.595135 -0.627212 -0.653251 -0.673002 -0.686275 -0.692943 -0.692941 -0.686270 -0.672993 -0.653240 -0.627198 -0.595119 -0.557311 -0.514137 -0.466012 -0.413400 -0.356805 -0.296772 -0.233879 -0.168731 -0.101954 -0.034192 0.033904 +0.037078 0.111167 0.184190 0.255444 0.324240 0.389917 0.451841 0.509416 0.562085 0.609341 0.650728 0.685847 0.714358 0.735986 0.750522 0.757827 0.757829 0.750529 0.735996 0.714372 0.685864 0.650747 0.609362 0.562106 0.509437 0.451861 0.389935 0.324255 0.255455 0.184199 0.111171 0.037078 -0.037369 -0.111451 -0.184456 -0.255681 -0.324440 -0.390072 -0.451945 -0.509465 -0.562077 -0.609276 -0.650609 -0.685678 -0.714146 -0.735739 -0.750250 -0.757540 -0.757538 -0.750245 -0.735730 -0.714134 -0.685664 -0.650593 -0.609258 -0.562058 -0.509445 -0.451926 -0.390054 -0.324424 -0.255667 -0.184445 -0.111444 -0.037365 0.037078 +0.039893 0.119585 0.198130 0.274771 0.348769 0.419411 0.486016 0.547943 0.604593 0.655420 0.699935 0.737708 0.768373 0.791636 0.807271 0.815127 0.815130 0.807277 0.791646 0.768387 0.737725 0.699955 0.655441 0.604614 0.547964 0.486036 0.419429 0.348784 0.274782 0.198138 0.119589 0.039893 -0.040184 -0.119869 -0.198396 -0.275008 -0.348969 -0.419566 -0.486120 -0.547991 -0.604585 -0.655356 -0.699816 -0.737539 -0.768161 -0.791389 -0.806999 -0.814840 -0.814838 -0.806993 -0.791380 -0.768150 -0.737525 -0.699800 -0.655338 -0.604565 -0.547972 -0.486101 -0.419548 -0.348952 -0.274994 -0.198385 -0.119861 -0.040180 0.039893 +0.042322 0.126850 0.210160 0.291450 0.369937 0.444864 0.515510 0.581192 0.641278 0.695188 0.742402 0.782465 0.814990 0.839663 0.856246 0.864579 0.864581 0.856253 0.839674 0.815005 0.782483 0.742422 0.695209 0.641300 0.581213 0.515530 0.444882 0.369952 0.291462 0.210168 0.126854 0.042322 -0.042613 -0.127134 -0.210426 -0.291688 -0.370138 -0.445020 -0.515614 -0.581241 -0.641270 -0.695123 -0.742283 -0.782297 -0.814778 -0.839416 -0.855974 -0.864292 -0.864290 -0.855969 -0.839408 -0.814767 -0.782282 -0.742267 -0.695105 -0.641251 -0.581221 -0.515594 -0.445001 -0.370121 -0.291674 -0.210415 -0.127126 -0.042609 0.042322 +0.044343 0.132892 0.220165 0.305322 0.387542 0.466033 0.540038 0.608844 0.671787 0.728261 0.777720 0.819688 0.853759 0.879605 0.896976 0.905705 0.905708 0.896983 0.879616 0.853774 0.819706 0.777740 0.728282 0.671809 0.608866 0.540058 0.466051 0.387558 0.305334 0.220173 0.132896 0.044342 -0.044634 -0.133176 -0.220431 -0.305560 -0.387743 -0.466188 -0.540142 -0.608893 -0.671780 -0.728196 -0.777601 -0.819520 -0.853548 -0.879359 -0.896704 -0.905418 -0.905416 -0.896699 -0.879350 -0.853536 -0.819505 -0.777585 -0.728178 -0.671760 -0.608873 -0.540123 -0.466170 -0.387726 -0.305546 -0.220420 -0.133168 -0.044630 0.044343 +0.045935 0.137652 0.228048 0.316252 0.401414 0.482713 0.559365 0.630632 0.695827 0.754320 0.805548 0.849017 0.884307 0.911077 0.929070 0.938111 0.938113 0.929077 0.911089 0.884322 0.849035 0.805569 0.754342 0.695849 0.630654 0.559386 0.482731 0.401429 0.316264 0.228057 0.137656 0.045934 -0.046226 -0.137936 -0.228315 -0.316490 -0.401615 -0.482868 -0.559470 -0.630682 -0.695819 -0.754256 -0.805430 -0.848849 -0.884096 -0.910831 -0.928798 -0.937824 -0.937822 -0.928792 -0.910822 -0.884084 -0.848834 -0.805413 -0.754238 -0.695800 -0.630662 -0.559450 -0.482850 -0.401598 -0.316476 -0.228303 -0.137928 -0.046221 0.045935 +0.047083 0.141086 0.233734 0.324136 0.411419 0.494743 0.573305 0.646347 0.713165 0.773116 0.825620 0.870171 0.906339 0.933776 0.952217 0.961483 0.961486 0.952224 0.933788 0.906355 0.870189 0.825640 0.773138 0.713188 0.646369 0.573325 0.494761 0.411434 0.324148 0.233742 0.141090 0.047082 -0.047374 -0.141370 -0.234001 -0.324374 -0.411620 -0.494899 -0.573409 -0.646397 -0.713158 -0.773052 -0.825502 -0.870003 -0.906128 -0.933530 -0.951945 -0.961196 -0.961194 -0.951940 -0.933521 -0.906116 -0.869988 -0.825484 -0.773033 -0.713138 -0.646376 -0.573389 -0.494880 -0.411602 -0.324359 -0.233989 -0.141362 -0.047370 0.047083 +0.047776 0.143159 0.237168 0.328896 0.417461 0.502008 0.581723 0.655837 0.723636 0.784466 0.837740 0.882945 0.919644 0.947484 0.966195 0.975597 0.975600 0.966202 0.947495 0.919660 0.882964 0.837761 0.784488 0.723659 0.655859 0.581743 0.502026 0.417476 0.328908 0.237176 0.143163 0.047776 -0.048067 -0.143444 -0.237434 -0.329134 -0.417661 -0.502164 -0.581827 -0.655887 -0.723629 -0.784402 -0.837622 -0.882777 -0.919434 -0.947238 -0.965923 -0.975310 -0.975308 -0.965918 -0.947229 -0.919421 -0.882763 -0.837605 -0.784383 -0.723609 -0.655866 -0.581807 -0.502144 -0.417644 -0.329120 -0.237422 -0.143435 -0.048063 0.047776 +0.048008 0.143853 0.238316 0.330488 0.419481 0.504437 0.584538 0.659010 0.727137 0.788261 0.841793 0.887217 0.924094 0.952068 0.970870 0.980317 0.980320 0.970877 0.952079 0.924109 0.887236 0.841814 0.788284 0.727160 0.659033 0.584558 0.504456 0.419497 0.330500 0.238324 0.143857 0.048008 -0.048299 -0.144137 -0.238582 -0.330726 -0.419682 -0.504593 -0.584642 -0.659060 -0.727130 -0.788198 -0.841676 -0.887049 -0.923883 -0.951822 -0.970598 -0.980030 -0.980028 -0.970592 -0.951813 -0.923871 -0.887034 -0.841658 -0.788179 -0.727110 -0.659040 -0.584622 -0.504574 -0.419665 -0.330711 -0.238571 -0.144129 -0.048295 0.048008 +0.047776 0.143159 0.237168 0.328896 0.417461 0.502008 0.581723 0.655837 0.723636 0.784466 0.837740 0.882945 0.919645 0.947484 0.966195 0.975598 0.975600 0.966202 0.947496 0.919660 0.882964 0.837761 0.784488 0.723659 0.655859 0.581744 0.502026 0.417476 0.328908 0.237176 0.143163 0.047776 -0.048067 -0.143444 -0.237434 -0.329134 -0.417662 -0.502164 -0.581827 -0.655887 -0.723629 -0.784402 -0.837622 -0.882778 -0.919434 -0.947238 -0.965924 -0.975310 -0.975309 -0.965918 -0.947229 -0.919422 -0.882763 -0.837605 -0.784383 -0.723609 -0.655866 -0.581807 -0.502145 -0.417644 -0.329120 -0.237422 -0.143435 -0.048063 0.047776 diff --git a/examples/next/swm/ref/64x64/z.step0.t100.bin b/examples/next/swm/ref/64x64/z.step0.t100.bin new file mode 100644 index 0000000000..25896118ea Binary files /dev/null and b/examples/next/swm/ref/64x64/z.step0.t100.bin differ diff --git a/examples/next/swm/ref/64x64/z.step1.t100.bin b/examples/next/swm/ref/64x64/z.step1.t100.bin new file mode 100644 index 0000000000..d811cfc3e7 Binary files /dev/null and b/examples/next/swm/ref/64x64/z.step1.t100.bin differ diff --git a/examples/next/swm/swm.py b/examples/next/swm/swm.py new file mode 100644 index 0000000000..8a3e5415a0 --- /dev/null +++ b/examples/next/swm/swm.py @@ -0,0 +1,390 @@ +# GT4Py - GridTools Framework +# +# Copyright (c) 2014-2024, ETH Zurich +# All rights reserved. +# +# Please, refer to the LICENSE file in the root directory. +# SPDX-License-Identifier: BSD-3-Clause + +""" +This version uses 2 halo lines (1 on each side) + +e.g. for M=3, N=3, with 'x' = interior, '0' = periodic halo, the grid is: + +for all fields +0 0 0 0 0 +0 x x x 0 +0 x x x 0 +0 x x x 0 +0 0 0 0 0 +""" + +from gt4py import next as gtx +from gt4py.next import common as gtx_common +from time import perf_counter +import initial_conditions +import utils +import config +from gt4py.next.otf import compiled_program +from gt4py.next.program_processors.runners.dace import run_dace_gpu_cached, run_dace_cpu_cached + +# from gt4py.next.program_processors.runners import jax_jit +import numpy as np + +try: + import cupy as cp +except ImportError: + cp = None + +try: + import jax.numpy as jnp + import jax +except ImportError: + jnp = None + jax = None + +dtype = gtx.float64 + +BACKENDS = { + "gtfn_gpu": (gtx.gtfn_gpu, gtx.gtfn_gpu), + "gtfn_cpu": (gtx.gtfn_cpu, gtx.gtfn_cpu), + "dace_gpu": (run_dace_gpu_cached, run_dace_gpu_cached), + "dace_cpu": (run_dace_cpu_cached, run_dace_cpu_cached), + "numpy": (None, np), + "jnp": (None, jnp), + "jax_jit": (jax.jit, jnp), +} +if cp is not None: + BACKENDS["cupy"] = (None, cp) +if jnp is not None: + assert jax is not None + BACKENDS["jax"] = (None, jnp) + BACKENDS["jax_jit"] = (jax.jit, jnp) + + +allocator = None + +if config.backend not in BACKENDS: + raise ValueError( + f"Unsupported backend '{config.backend}'. Supported backends are: {list(BACKENDS.keys())}" + ) +backend, allocator = BACKENDS[config.backend] + +print(f"Using backend '{getattr(backend, 'name', backend)}'.") + +I = gtx.Dimension("I") +J = gtx.Dimension("J") + +IJField = gtx.Field[gtx.Dims[I, J], dtype] + + +@gtx.field_operator +def avg_x(f: IJField): + """Average field in the x direction.""" + return 0.5 * (f(I + 1) + f) + + +@gtx.field_operator +def avg_y(f: IJField): + """Average field in the y direction.""" + return 0.5 * (f(J + 1) + f) + + +@gtx.field_operator +def avg_x_staggered(f: IJField): + """Average field which is staggered in x in the x direction.""" + return 0.5 * (f(I - 1) + f) + + +@gtx.field_operator +def avg_y_staggered(f: IJField): + """Average field which is staggered in y in the y direction.""" + return 0.5 * (f(J - 1) + f) + + +@gtx.field_operator +def delta_x(dx: dtype, f: IJField): + """Calculate the difference in the x direction.""" + return (1.0 / dx) * (f(I + 1) - f) + + +@gtx.field_operator +def delta_y(dx: dtype, f: IJField): + """Calculate the difference in the y direction.""" + return (1.0 / dx) * (f(J + 1) - f) + + +@gtx.field_operator +def delta_x_staggered(dx: dtype, f: IJField): + """Calculate the difference in the x direction for field staggered in x.""" + return (1.0 / dx) * (f - f(I - 1)) + + +@gtx.field_operator +def delta_y_staggered(dx: dtype, f: IJField): + """Calculate the difference in the y direction for field staggered in y.""" + return (1.0 / dx) * (f - f(J - 1)) + + +@gtx.field_operator +def timestep( + u: IJField, + v: IJField, + p: IJField, + dx: dtype, + dy: dtype, + dt: dtype, + uold: IJField, + vold: IJField, + pold: IJField, + alpha: dtype, +) -> tuple[IJField, IJField, IJField, IJField, IJField, IJField]: + cu = avg_x(p) * u + cv = avg_y(p) * v + z = (delta_x(dx, v) - delta_y(dy, u)) / avg_x(avg_y(p)) + h = p + 0.5 * (avg_x_staggered(u * u) + avg_y_staggered(v * v)) + + unew = uold + avg_y_staggered(z) * avg_y_staggered(avg_x(cv)) * dt - delta_x(dx, h) * dt + vnew = vold - avg_x_staggered(z) * avg_x_staggered(avg_y(cu)) * dt - delta_y(dy, h) * dt + pnew = pold - delta_x_staggered(dx, cu) * dt - delta_y_staggered(dy, cv) * dt + + uold_new = u + alpha * (unew - 2.0 * u + uold) + vold_new = v + alpha * (vnew - 2.0 * v + vold) + pold_new = p + alpha * (pnew - 2.0 * p + pold) + + return ( + unew, + vnew, + pnew, + uold_new, + vold_new, + pold_new, + ) + + +@gtx.program(backend=backend) +def timestep_program( + u: IJField, + v: IJField, + p: IJField, + dx: dtype, + dy: dtype, + dt: dtype, + uold: IJField, + vold: IJField, + pold: IJField, + alpha: dtype, + unew: IJField, + vnew: IJField, + pnew: IJField, + M: gtx.int32, + N: gtx.int32, +): + timestep( + u=u, + v=v, + p=p, + dx=dx, + dy=dy, + dt=dt, + uold=uold, + vold=vold, + pold=pold, + alpha=alpha, + out=(unew, vnew, pnew, uold, vold, pold), + domain={I: (0, M), J: (0, N)}, + ) + + +def apply_periodicity(x: IJField): + """Apply periodicity to the field x.""" + return gtx_common._field( + x.array_ns.pad(x.ndarray[1:-1, 1:-1], ((1, 1), (1, 1)), mode="wrap"), + domain=x.domain, + dtype=x.dtype, + ) + + +def apply_periodicity_jax(x: IJField): + """Apply periodicity to the field x.""" + return gtx_common._field( + x.array_ns.pad(x.ndarray, ((1, 1), (1, 1)), mode="wrap"), + domain=gtx.domain({I: (-1, x.shape[0] + 1), J: (-1, x.shape[1] + 1)}), + dtype=x.dtype, + ) + + +def main(): + dt0 = 0.0 + dt25 = 0.0 + dt3 = 0.0 + + M = config.M + N = config.N + + domain = gtx.domain({I: (-1, M + 1), J: (-1, N + 1)}) + + pnew = gtx.empty(domain, dtype=dtype, allocator=allocator) + unew = gtx.empty(domain, dtype=dtype, allocator=allocator) + vnew = gtx.empty(domain, dtype=dtype, allocator=allocator) + + # Initialize fields + _u, _v, _p = initial_conditions.initialize_2halo(np, M, N, config.dx, config.dy, config.a) + u = gtx.as_field(domain, _u, dtype=dtype, allocator=allocator) + v = gtx.as_field(domain, _v, dtype=dtype, allocator=allocator) + p = gtx.as_field(domain, _p, dtype=dtype, allocator=allocator) + + # Initial old fields + uold = gtx.as_field(domain, _u, dtype=dtype, allocator=allocator) + vold = gtx.as_field(domain, _v, dtype=dtype, allocator=allocator) + pold = gtx.as_field(domain, _p, dtype=dtype, allocator=allocator) + + # Print initial conditions + if config.L_OUT: + print(" Number of points in the x direction: ", M) + print(" Number of points in the y direction: ", N) + print(" grid spacing in the x direction: ", config.dx) + print(" grid spacing in the y direction: ", config.dy) + print(" time step: ", config.dt) + print(" time filter coefficient: ", config.alpha) + + print(" Initial p:\n", p[:, :].ndarray.diagonal()[1:-1]) + print(" Initial u:\n", u[:, :].ndarray.diagonal()[1:-1]) + print(" Initial v:\n", v[:, :].ndarray.diagonal()[1:-1]) + + USE_PROGRAM = True + + if backend == jax.jit: + prog = timestep.with_backend(backend) + elif backend is not None: + if USE_PROGRAM: + prog = timestep_program.with_backend(backend).compile(offset_provider={}, M=[M], N=[N]) + else: + prog = timestep.with_backend(backend).compile(offset_provider={}) + gtx.wait_for_compilation() + else: + prog = timestep_program if USE_PROGRAM else timestep + + t0_start = perf_counter() + + # Main time loop + for ncycle in range(config.ITMAX): + if (ncycle % 100 == 0) & (config.VIS == False): + print(f"cycle number{ncycle}") + + if config.VAL_DEEP and ncycle <= 3: + print("validating init") + utils.validate_uvp( + u.asnumpy()[:-1, 1:], + v.asnumpy()[1:, :-1], + p.asnumpy()[1:, 1:], + M, + N, + ncycle, + "init", + ) + + t3_start = perf_counter() + if backend == jax.jit: + unew, vnew, pnew, uold, vold, pold = prog( + u=u, + v=v, + p=p, + dx=config.dx, + dy=config.dy, + dt=config.dt if ncycle == 0 else config.dt * 2.0, + uold=uold, + vold=vold, + pold=pold, + alpha=config.alpha if ncycle > 0 else 0.0, + ) + elif USE_PROGRAM: + prog( + u=u, + v=v, + p=p, + dx=config.dx, + dy=config.dy, + dt=config.dt if ncycle == 0 else config.dt * 2.0, + uold=uold, + vold=vold, + pold=pold, + alpha=config.alpha if ncycle > 0 else 0.0, + unew=unew, + vnew=vnew, + pnew=pnew, + M=M, + N=N, + ) + else: + prog( + u=u, + v=v, + p=p, + dx=config.dx, + dy=config.dy, + dt=config.dt if ncycle == 0 else config.dt * 2.0, + uold=uold, + vold=vold, + pold=pold, + alpha=config.alpha if ncycle > 0 else 0.0, + offset_provider={}, + out=(unew, vnew, pnew, uold, vold, pold), + domain={I: (0, M), J: (0, N)}, + ) + + if hasattr(u.array_ns, "cuda"): + u.array_ns.cuda.runtime.deviceSynchronize() + t3_stop = perf_counter() + dt3 = dt3 + (t3_stop - t3_start) + + t25_start = perf_counter() + if backend == jax.jit: + unew = apply_periodicity_jax(unew) + vnew = apply_periodicity_jax(vnew) + pnew = apply_periodicity_jax(pnew) + else: + unew = apply_periodicity(unew) + vnew = apply_periodicity(vnew) + pnew = apply_periodicity(pnew) + t25_stop = perf_counter() + dt25 = dt25 + (t25_stop - t25_start) + + # swap x with xnew fields + u, unew = unew, u + v, vnew = vnew, v + p, pnew = pnew, p + + if (config.VIS) & (ncycle % config.VIS_DT == 0): + utils.live_plot3( + u.asnumpy(), + v.asnumpy(), + p.asnumpy(), + "ncycle: " + str(ncycle), + ) + + t0_stop = perf_counter() + dt0 = dt0 + (t0_stop - t0_start) + # Print initial conditions + if config.L_OUT: + print("cycle number ", config.ITMAX) + print(" diagonal elements of p:\n", p[:, :].ndarray.diagonal()[:-1]) + print(" diagonal elements of u:\n", u[:, :].ndarray.diagonal()[:-1]) + print(" diagonal elements of v:\n", v[:, :].ndarray.diagonal()[:-1]) + print("total: ", dt0) + print("t100+t200+t300: ", dt3) + print("t150+t250: ", dt25) + + if config.VAL: + utils.final_validation( + u.asnumpy()[:-1, 1:], + v.asnumpy()[1:, :-1], + p.asnumpy()[1:, 1:], + ITMAX=config.ITMAX, + M=M, + N=N, + ) + + +if __name__ == "__main__": + main() diff --git a/examples/next/swm/swm_array_api.py b/examples/next/swm/swm_array_api.py new file mode 100644 index 0000000000..2ddca8e54d --- /dev/null +++ b/examples/next/swm/swm_array_api.py @@ -0,0 +1,470 @@ +# GT4Py - GridTools Framework +# +# Copyright (c) 2014-2024, ETH Zurich +# All rights reserved. +# +# Please, refer to the LICENSE file in the root directory. +# SPDX-License-Identifier: BSD-3-Clause + +""" +Shallow Water Model using the Python Array API standard. + +This implementation uses symmetric halo lines (1 on each side) for all fields. +Periodic boundary conditions are applied via halo exchange. + +Compatible with any array library supporting the Array API standard: + numpy, jax.numpy, cupy, array_api_strict, etc. + +Usage: + python swm_array_api.py --array-library numpy + python swm_array_api.py --array-library jax + python swm_array_api.py --array-library torch + python swm_array_api.py --array-library cupy + python swm_array_api.py --strict # validate compliance with array_api_strict wrapping + python swm_array_api.py --array-library jax --compile # run with jax.jit + python swm_array_api.py --array-library torch --compile # run with torch.compile + python swm_array_api.py --array-library torch --compile --device cuda # torch.compile on GPU + python swm_array_api.py --array-library jax --compile --device cpu # jax.jit on CPU +""" + +import argparse +from time import perf_counter +from array_api_compat import array_namespace +import initial_conditions + + +def _get_array_module(name): + """Import and return the array module for the given library name.""" + if name == "numpy": + import numpy + + return numpy + elif name == "jax": + import jax.numpy + + return jax.numpy + elif name == "torch": + import torch + + return torch + elif name == "cupy": + import cupy + + return cupy + elif name == "array_api_strict": + import array_api_strict + + return array_api_strict + else: + raise ValueError(f"Unknown array library: {name}") + + +def _to_numpy(arr): + """Convert array to numpy, handling GPU/CUDA tensors.""" + import numpy as np + + try: + import torch + + if isinstance(arr, torch.Tensor): + return arr.detach().cpu().numpy() + except ImportError: + pass + return np.asarray(arr) + + +def _interior_to_halo(xp, interior): + """Build (M+2, N+2) array from (M, N) interior with periodic halos. + + Wraps the interior periodically: last col -> left halo, first col -> right halo, + last row -> top halo, first row -> bottom halo. + """ + middle_rows = xp.concat([interior[:, -1:], interior, interior[:, :1]], axis=1) + return xp.concat([middle_rows[-1:, :], middle_rows, middle_rows[:1, :]], axis=0) + + +# --------------------------------------------------------------------------- +# Stencil building blocks following Sadourny (1975), J. Atm. Sci. 32:680–688. +# +# The model uses an Arakawa C-grid with four types of grid point: +# p-point at (i, j ) — pressure/height h +# u-point at (i+½, j ) — zonal velocity u (staggered ½-cell in x) +# v-point at (i, j+½) — meridional velocity v (staggered ½-cell in y) +# ζ-point at (i+½, j+½) — vorticity ζ (staggered ½-cell in both) +# +# avg_x / delta_x shift the x-position by ½: p ↔ u, v ↔ ζ +# avg_y / delta_y shift the y-position by ½: p ↔ v, u ↔ ζ +# +# Each function reduces shape by 1 in its operating dimension: +# avg_x(f) / delta_x(dx, f) : (Mx, My) → (Mx-1, My) +# avg_y(f) / delta_y(dy, f) : (Mx, My) → (Mx, My-1) +# +# For an (M+2, N+2) halo array the interior of any point type is at [1:M+1, 1:N+1]. +# After an x-stencil op the (M+1, …) result's interior slice depends on input type: +# p- or v-point input → u- or ζ-point output, interior at [1:M+1, ...] +# u- or ζ-point input → p- or v-point output, interior at [0:M, ...] +# After a y-stencil op: +# p- or u-point input → v- or ζ-point output, interior at [..., 1:N+1] +# v- or ζ-point input → p- or u-point output, interior at [..., 0:N ] +# --------------------------------------------------------------------------- + + +def avg_x(f): + """avg_x(f)[i,j] = 0.5*(f[i+1,j] + f[i,j]) — reduces x by 1""" + return 0.5 * (f[1:, :] + f[:-1, :]) + + +def avg_y(f): + """avg_y(f)[i,j] = 0.5*(f[i,j+1] + f[i,j]) — reduces y by 1""" + return 0.5 * (f[:, 1:] + f[:, :-1]) + + +def delta_x(dx, f): + """delta_x(f)[i,j] = (1/dx)*(f[i+1,j] - f[i,j]) — reduces x by 1""" + return (1.0 / dx) * (f[1:, :] - f[:-1, :]) + + +def delta_y(dy, f): + """delta_y(f)[i,j] = (1/dy)*(f[i,j+1] - f[i,j]) — reduces y by 1""" + return (1.0 / dy) * (f[:, 1:] - f[:, :-1]) + + +def timestep(xp, u, v, p, uold, vold, pold, dx, dy, dt_val, alpha_val, M, N): + """Perform one timestep of the shallow water equations. + + All fields have shape (M+2, N+2) with 1-wide symmetric halos. + Implements the Sadourny (1975) Arakawa C-grid scheme via direct array composition. + Grid-point types follow Sadourny's notation (p-, u-, v-, ζ-points): + + cu = avg_x(p) * u # u-point (i+½, j) + cv = avg_y(p) * v # v-point (i, j+½) + z = (delta_x(v) - delta_y(u)) / avg_x(avg_y(p)) # ζ-point (i+½, j+½) + h = p + 0.5*(avg_x(u²) + avg_y(v²)) # p-point (i, j) + + unew at u-point: avg_y(z) [ζ→u] * avg_y(avg_x(cv)) [v→ζ→u] * dt + − delta_x(h) [p→u] * dt + vnew at v-point: −avg_x(z) [ζ→v] * avg_x(avg_y(cu)) [u→ζ→v] * dt + − delta_y(h) [p→v] * dt + pnew at p-point: −delta_x(cu) [u→p] * dt + − delta_y(cv) [v→p] * dt + + Each stencil function reduces shape by 1 only in its operating dimension, so + compositions chain directly without any intermediate _interior_to_halo calls. + + Slice convention for extracting the (M, N) interior from a composed result + (see stencil-block header for the full rule): + p- or v-point input → x-result at u- or ζ-point: interior rows [1:M+1, ...] + u- or ζ-point input → x-result at p- or v-point: interior rows [0:M, ...] + p- or u-point input → y-result at v- or ζ-point: interior cols [..., 1:N+1] + v- or ζ-point input → y-result at p- or u-point: interior cols [..., 0:N ] + """ + uu = u * u + vv = v * v + # cu at u-points: avg_x(p) [p→u] * u[0:M+1,:] → shape (M+1, N+2) + cu = avg_x(p) * u[:-1, :] + # cv at v-points: avg_y(p) [p→v] * v[:,0:N+1] → shape (M+2, N+1) + cv = avg_y(p) * v[:, :-1] + + # z_wide at ζ-points (i+½, j+½), shape (M+1, N+1): + # delta_x(v) [v→ζ]: shape (M+1, N+2); [:, :N+1] trims to (M+1, N+1) + # delta_y(u) [u→ζ]: shape (M+2, N+1); [:M+1, :] trims to (M+1, N+1) + # avg_x(avg_y(p)) [p→v→ζ]: shape (M+1, N+1) + z_wide = (delta_x(dx, v)[:, : N + 1] - delta_y(dy, u)[: M + 1, :]) / avg_x( + avg_y(p) + ) # (M+1, N+1), ζ-points + + # h_wide at p-points covering x=1..M+1, y=1..N+1 (interior + right/top halo), + # shape (M+1, N+1). The extended range is needed by the subsequent delta_x/delta_y. + # p[1:M+2, 1:N+2] : p-points at x=1..M+1, y=1..N+1 + # avg_x(uu) [u→p]: result[k] at x=k+1; slice [0:M+1, 1:N+2] → x=1..M+1 + # avg_y(vv) [v→p]: result[l] at y=l+1; slice [1:M+2, 0:N+1] → y=1..N+1 + h_wide = p[1 : M + 2, 1 : N + 2] + 0.5 * ( + avg_x(uu)[0 : M + 1, 1 : N + 2] + avg_y(vv)[1 : M + 2, 0 : N + 1] + ) # (M+1, N+1), p-points + + # unew at interior u-points: all three terms evaluated at (i+½, j) for i=1..M, j=1..N. + # avg_y(z_wide) [ζ→u]: z_wide ζ-point → avg_y → u-point; interior at [1:M+1, 0:N] + # avg_y(avg_x(cv)) [v→ζ→u]: cv v-point → avg_x →ζ-point → avg_y → u-point; same slice + # delta_x(h_wide) [p→u]: h_wide p-point at x=k+1 → delta_x → u-point at x=k+3/2; + # interior u at x=3/2..M+1/2 ↔ slice [0:M, 0:N] + unew_interior = ( + uold + + avg_y(z_wide)[1 : M + 1, 0:N] * avg_y(avg_x(cv))[1 : M + 1, 0:N] * dt_val + - delta_x(dx, h_wide)[0:M, 0:N] * dt_val + ) + # vnew at interior v-points: all three terms evaluated at (i, j+½) for i=1..M, j=1..N. + # avg_x(z_wide) [ζ→v]: z_wide ζ-point → avg_x → v-point; interior at [0:M, 1:N+1] + # avg_x(avg_y(cu)) [u→ζ→v]: cu u-point → avg_y → ζ-point → avg_x → v-point; same slice + # delta_y(h_wide) [p→v]: h_wide p-point at y=l+1 → delta_y → v-point at y=l+3/2; + # interior v at y=3/2..N+1/2 ↔ slice [0:M, 0:N] + vnew_interior = ( + vold + - avg_x(z_wide)[0:M, 1 : N + 1] * avg_x(avg_y(cu))[0:M, 1 : N + 1] * dt_val + - delta_y(dy, h_wide)[0:M, 0:N] * dt_val + ) + # pnew at interior p-points: both terms evaluated at (i, j) for i=1..M, j=1..N. + # delta_x(cu) [u→p]: cu u-point → delta_x → p-point; interior at [0:M, 1:N+1] + # delta_y(cv) [v→p]: cv v-point → delta_y → p-point; interior at [1:M+1, 0:N] + pnew_interior = ( + pold - delta_x(dx, cu)[0:M, 1 : N + 1] * dt_val - delta_y(dy, cv)[1 : M + 1, 0:N] * dt_val + ) + + # -- Time filter (update old fields) -- + uold_new = u[1 : M + 1, 1 : N + 1] + alpha_val * ( + unew_interior - 2.0 * u[1 : M + 1, 1 : N + 1] + uold + ) + vold_new = v[1 : M + 1, 1 : N + 1] + alpha_val * ( + vnew_interior - 2.0 * v[1 : M + 1, 1 : N + 1] + vold + ) + pold_new = p[1 : M + 1, 1 : N + 1] + alpha_val * ( + pnew_interior - 2.0 * p[1 : M + 1, 1 : N + 1] + pold + ) + + # Build full arrays with halos for all returned fields. + unew = _interior_to_halo(xp, unew_interior) + vnew = _interior_to_halo(xp, vnew_interior) + pnew = _interior_to_halo(xp, pnew_interior) + + return unew, vnew, pnew, uold_new, vold_new, pold_new + + +def main(): + parser = argparse.ArgumentParser(description="Shallow Water Model (Array API)") + parser.add_argument( + "--array-library", + type=str, + default="numpy", + choices=["numpy", "jax", "torch", "cupy", "array_api_strict"], + help="Array library to use", + ) + parser.add_argument( + "--strict", + action="store_true", + help="Enable array-api-strict compliance checking via array_api_compat", + ) + parser.add_argument("--M", type=int, default=16) + parser.add_argument("--N", type=int, default=16) + parser.add_argument("--ITMAX", type=int, default=4000) + parser.add_argument("--validate", action="store_true", help="Validate against reference data") + parser.add_argument("--validate-deep", action="store_true", help="Deep validation of each step") + parser.add_argument( + "--compile", + action="store_true", + help="Enable JIT compilation (jax.jit for jax, torch.compile for torch)", + ) + parser.add_argument("--no-output", action="store_true", help="Suppress diagnostic output") + parser.add_argument( + "--device", + type=str, + default=None, + choices=["cpu", "cuda"], + help="Device to run on (default: CPU for numpy/torch, GPU for jax if available)", + ) + args = parser.parse_args() + + M = args.M + N = args.N + ITMAX = args.ITMAX + L_OUT = not args.no_output + + # Physical parameters + dt = 90.0 + dx = 100000.0 + dy = 100000.0 + a = 1000000.0 + alpha = 0.001 + + # Get the array module + if args.array_library == "jax": + import jax + + jax.config.update("jax_enable_x64", True) + if args.device is not None: + jax_device_kind = "gpu" if args.device == "cuda" else "cpu" + jax.config.update("jax_default_device", jax.devices(jax_device_kind)[0]) + print(f"JAX device: {jax_device_kind}") + + lib = _get_array_module(args.array_library) + + # Configure torch device + if args.array_library == "torch" and args.device is not None: + import torch + + torch.set_default_device(args.device) + print(f"Torch device: {args.device}") + elif args.device == "cuda" and args.array_library not in ("jax", "torch", "cupy"): + print(f"Warning: --device cuda not supported for {args.array_library}") + + if args.strict: + import array_api_strict + + array_api_strict.set_array_api_strict_flags(api_version="2024.12") + + if args.strict and args.array_library != "array_api_strict": + # Wrap the library arrays in array_api_strict for compliance testing + import array_api_strict + + xp = array_api_strict + print( + f"Running with {args.array_library} arrays wrapped in array_api_strict for compliance checking" + ) + elif args.strict: + import array_api_strict + + xp = array_api_strict + print("Running with array_api_strict directly") + else: + xp = lib + # Get the array-api-compat namespace for the library + test_arr = lib.zeros((1,)) + xp = array_namespace(test_arr) + print(f"Running with {args.array_library} via array_api_compat namespace") + + # Initialize fields + u, v, p = initial_conditions.initialize_2halo(xp, M, N, dx, dy, a) + + if args.strict and args.array_library != "array_api_strict": + # Convert to array_api_strict arrays + import array_api_strict + import numpy as np + + u_np = np.asarray(u) if hasattr(u, "__array__") else u + v_np = np.asarray(v) if hasattr(v, "__array__") else v + p_np = np.asarray(p) if hasattr(p, "__array__") else p + u = array_api_strict.asarray(u_np, dtype=array_api_strict.float64) + v = array_api_strict.asarray(v_np, dtype=array_api_strict.float64) + p = array_api_strict.asarray(p_np, dtype=array_api_strict.float64) + xp = array_api_strict + + uold = xp.asarray(u, copy=True)[1 : M + 1, 1 : N + 1] + vold = xp.asarray(v, copy=True)[1 : M + 1, 1 : N + 1] + pold = xp.asarray(p, copy=True)[1 : M + 1, 1 : N + 1] + + if L_OUT: + print(f" Number of points in the x direction: {M}") + print(f" Number of points in the y direction: {N}") + print(f" grid spacing in the x direction: {dx}") + print(f" grid spacing in the y direction: {dy}") + print(f" time step: {dt}") + print(f" time filter coefficient: {alpha}") + + # For validation, we need numpy + if args.validate or args.validate_deep: + import numpy as np + + if args.validate_deep: + import sys + + sys.path.insert(0, "/home/user/SWM/swm_python") + import utils + + # Set up the timestep function, optionally with JIT compilation + def timestep_fn(u, v, p, uold, vold, pold, dt_val, alpha_val): + return timestep(xp, u, v, p, uold, vold, pold, dx, dy, dt_val, alpha_val, M, N) + + if args.compile: + if args.array_library == "jax": + import jax + + timestep_fn = jax.jit(timestep_fn) + print("JIT compilation enabled via jax.jit") + elif args.array_library == "torch": + import torch + + timestep_fn = torch.compile(timestep_fn) + print("JIT compilation enabled via torch.compile") + else: + print(f"Warning: --compile has no effect for {args.array_library}") + + # Warm-up call to trigger compilation before timing + print("Warm-up call...", end=" ", flush=True) + t_warmup_start = perf_counter() + _warmup_result = timestep_fn(u, v, p, uold, vold, pold, dt, 0.0) + if args.array_library == "jax": + _warmup_result[0].block_until_ready() + elif args.array_library == "torch" and args.device == "cuda": + torch.cuda.synchronize() + t_warmup_stop = perf_counter() + del _warmup_result + print(f"done ({t_warmup_stop - t_warmup_start:.3f}s)") + + dt_total = 0.0 + dt_compute = 0.0 + + t0_start = perf_counter() + + for ncycle in range(ITMAX): + if ncycle % 100 == 0: + print(f"cycle number {ncycle}") + + if args.validate_deep and ncycle <= 3: + import numpy as np + + u_np = _to_numpy(u) + v_np = _to_numpy(v) + p_np = _to_numpy(p) + # Convert 2-halo to reference layout + utils.validate_uvp( + u_np[:-1, 1:], + v_np[1:, :-1], + p_np[1:, 1:], + M, + N, + ncycle, + "init", + ) + + tdt = dt if ncycle == 0 else dt * 2.0 + alpha_val = alpha if ncycle > 0 else 0.0 + + t_start = perf_counter() + unew, vnew, pnew, uold, vold, pold = timestep_fn(u, v, p, uold, vold, pold, tdt, alpha_val) + t_stop = perf_counter() + dt_compute += t_stop - t_start + + u = unew + v = vnew + p = pnew + + # Synchronize device for accurate timing + if args.array_library == "jax": + u.block_until_ready() + elif args.array_library == "torch" and args.device == "cuda": + import torch + + torch.cuda.synchronize() + + t0_stop = perf_counter() + dt_total = t0_stop - t0_start + + if L_OUT: + print(f"cycle number {ITMAX}") + + print(f"total: {dt_total}") + print(f"compute: {dt_compute}") + + if args.validate: + import numpy as np + + u_np = _to_numpy(u) + v_np = _to_numpy(v) + p_np = _to_numpy(p) + + # Convert to reference layout for validation + u_ref_layout = u_np[:-1, 1:] + v_ref_layout = v_np[1:, :-1] + p_ref_layout = p_np[1:, 1:] + + sys_path_added = False + import sys + + if "/home/user/SWM/swm_python" not in sys.path: + sys.path.insert(0, "/home/user/SWM/swm_python") + sys_path_added = True + import utils + + utils.final_validation(u_ref_layout, v_ref_layout, p_ref_layout, ITMAX=ITMAX, M=M, N=N) + + +if __name__ == "__main__": + main() diff --git a/examples/next/swm/utils.py b/examples/next/swm/utils.py new file mode 100644 index 0000000000..1abdba4da3 --- /dev/null +++ b/examples/next/swm/utils.py @@ -0,0 +1,121 @@ +# GT4Py - GridTools Framework +# +# Copyright (c) 2014-2024, ETH Zurich +# All rights reserved. +# +# Please, refer to the LICENSE file in the root directory. +# SPDX-License-Identifier: BSD-3-Clause + +import numpy as np +from IPython.display import clear_output +from matplotlib import pyplot as plt + + +def _to_2d(x): + if x.ndim == 3: + assert x.shape[2] == 1 + return x[:, :, 0] + return x + + +def read_uvp(step, suffix, M, N): + u_file = f"ref/{M}x{N}/u.step{step}.{suffix}.bin" + v_file = f"ref/{M}x{N}/v.step{step}.{suffix}.bin" + p_file = f"ref/{M}x{N}/p.step{step}.{suffix}.bin" + u = np.fromfile(u_file).reshape(M + 1, N + 1) + v = np.fromfile(v_file).reshape(M + 1, N + 1) + p = np.fromfile(p_file).reshape(M + 1, N + 1) + return u, v, p + + +def read_cucvzh(step, suffix, M, N): + cu_file = f"ref/{M}x{N}/cu.step{step}.{suffix}.bin" + cv_file = f"ref/{M}x{N}/cv.step{step}.{suffix}.bin" + z_file = f"ref/{M}x{N}/z.step{step}.{suffix}.bin" + h_file = f"ref/{M}x{N}/h.step{step}.{suffix}.bin" + cu = np.fromfile(cu_file).reshape(M + 1, N + 1) + cv = np.fromfile(cv_file).reshape(M + 1, N + 1) + z = np.fromfile(z_file).reshape(M + 1, N + 1) + h = np.fromfile(h_file).reshape(M + 1, N + 1) + return cu, cv, z, h + + +def validate_uvp(u, v, p, M, N, step, suffix): + u, v, p = _to_2d(u), _to_2d(v), _to_2d(p) + + u_ref, v_ref, p_ref = read_uvp(step, suffix, M, N) + np.testing.assert_allclose(u, u_ref) + np.testing.assert_allclose(v, v_ref) + np.testing.assert_allclose(p, p_ref) + print(f"step {step} {suffix} values are correct.") + + +def validate_cucvzh(cu, cv, z, h, M, N, step, suffix): + cu, cv, z, h = _to_2d(cu), _to_2d(cv), _to_2d(z), _to_2d(h) + + cu_ref, cv_ref, z_ref, h_ref = read_cucvzh(step, suffix, M, N) + np.testing.assert_allclose(cu, cu_ref) + np.testing.assert_allclose(cv, cv_ref) + np.testing.assert_allclose(z, z_ref) + np.testing.assert_allclose(h, h_ref) + print(f"step {step} {suffix} values are correct.") + + +def live_plot_val(fu, fv, fp, title=""): + mxu = fu.max() + mxv = fv.max() + mxp = fp.max() + clear_output(wait=True) + fig, (ax1, ax2, ax3) = plt.subplots(figsize=(13, 3), ncols=3) + + pos1 = ax1.imshow(fp, cmap="Blues", vmin=-mxp, vmax=mxp, interpolation="none") + ax1.set_title("p") + plt.colorbar(pos1, ax=ax1) + pos2 = ax2.imshow(fu, cmap="Reds", vmin=-mxu, vmax=mxu, interpolation="none") + ax2.set_title("u") + plt.colorbar(pos2, ax=ax2) + pos3 = ax3.imshow(fv, cmap="Greens", vmin=-mxv, vmax=mxv, interpolation="none") + ax3.set_title("v") + plt.colorbar(pos3, ax=ax3) + + fig.suptitle(title) + plt.show() + + +def live_plot3(fu, fv, fp, title=""): + clear_output(wait=True) + fig, (ax1, ax2, ax3) = plt.subplots(figsize=(13, 3), ncols=3) + + pos1 = ax1.imshow(fp, cmap="Blues", vmin=49999, vmax=50001, interpolation="none") + ax1.set_title("p") + pos2 = ax2.imshow(fu, cmap="Reds", vmin=-1, vmax=1, interpolation="none") + ax2.set_title("u") + pos3 = ax3.imshow(fv, cmap="Greens", vmin=-1, vmax=1, interpolation="none") + ax3.set_title("v") + + fig.suptitle(title) + # plt.xlabel('x') + # plt.ylabel('y') + plt.show() + + +def final_validation(u, v, p, ITMAX, M, N): + u, v, p = _to_2d(u), _to_2d(v), _to_2d(p) + + uref, vref, pref = read_uvp(ITMAX, "final", M, N) + + uval = uref - u + vval = vref - v + pval = pref - p + + uLinfN = np.linalg.norm(uval, np.inf) + vLinfN = np.linalg.norm(vval, np.inf) + pLinfN = np.linalg.norm(pval, np.inf) + + # live_plot_val(uval, vval, pval, "Val") + print("uLinfN: ", uLinfN) + print("vLinfN: ", vLinfN) + print("pLinfN: ", pLinfN) + print("udiff max: ", uval.max()) + print("vdiff max: ", vval.max()) + print("pdiff max: ", pval.max()) diff --git a/src/gt4py/next/embedded/nd_array_field.py b/src/gt4py/next/embedded/nd_array_field.py index fa99f5fabd..cacf253f83 100644 --- a/src/gt4py/next/embedded/nd_array_field.py +++ b/src/gt4py/next/embedded/nd_array_field.py @@ -1126,6 +1126,14 @@ class JaxArrayConnectivityField(NdArrayConnectivityField): common._field.register(jnp.ndarray, JaxArrayField.from_array) common._connectivity.register(jnp.ndarray, JaxArrayConnectivityField.from_array) + def _flatten(v: JaxArrayField): + return (v.ndarray,), v.domain + + def _unflatten(aux_data, children): + return JaxArrayField(aux_data, children[0]) + + jax.tree_util.register_pytree_node(JaxArrayField, _flatten, _unflatten) + def _broadcast(field: common.Field, new_dimensions: Sequence[common.Dimension]) -> common.Field: if field.domain.dims == new_dimensions: diff --git a/src/gt4py/next/ffront/decorator.py b/src/gt4py/next/ffront/decorator.py index a7b703564a..9550bec2ce 100644 --- a/src/gt4py/next/ffront/decorator.py +++ b/src/gt4py/next/ffront/decorator.py @@ -98,6 +98,10 @@ class _CompilableGTEntryPointMixin(Generic[ffront_stages.DSLDefinitionT]): def __gt_type__(self) -> ts.CallableType: ... def with_backend(self, backend: next_backend.Backend) -> Self: + if backend.__module__.startswith("jax"): + if not isinstance(self.definition_stage, ffront_stages.DSLFieldOperatorDef): + raise ValueError("JAX backend is only supported for field operators.") + return backend(self.definition_stage.definition) return dataclasses.replace(self, backend=backend) def with_compilation_options( @@ -253,10 +257,11 @@ def __gt_type__(self) -> ts_ffront.ProgramType: # TODO(ricoh): linting should become optional, up to the backend. def __post_init__(self) -> None: - no_args_past = toolchain.ConcreteArtifact( - self.past_stage, arguments.CompileTimeArgs.empty() - ) - _ = self._frontend_transforms.past_lint(no_args_past).data + if isinstance(self.backend, next_backend.Backend): + no_args_past = toolchain.ConcreteArtifact( + self.past_stage, arguments.CompileTimeArgs.empty() + ) + _ = self._frontend_transforms.past_lint(no_args_past).data @property def __name__(self) -> str: @@ -588,7 +593,8 @@ def from_function( # TODO(ricoh): linting should become optional, up to the backend. def __post_init__(self) -> None: """This ensures that DSL linting occurs at decoration time.""" - _ = self.foast_stage + if isinstance(self.backend, next_backend.Backend): + _ = self.foast_stage @functools.cached_property def foast_stage(self) -> ffront_stages.FOASTOperatorDef: @@ -639,10 +645,16 @@ def __gt_closure_vars__(self) -> dict[str, Any]: return self.foast_stage.closure_vars def __call__(self, *args: Any, enable_jit: bool | None = None, **kwargs: Any) -> Any: + if not next_embedded.context.within_valid_context() and ( + self.backend is None or self.backend.__module__.startswith("jax") + ): + # TODO(havogt): only jax.jit for now (we are not setting up the embedded context and just call the operator as is) + return self.definition(*args, **kwargs) if not next_embedded.context.within_valid_context() and self.backend is not None: # non embedded execution offset_provider = {**kwargs.pop("offset_provider", {})} if "out" not in kwargs: + print("oh") raise errors.MissingArgumentError(None, "out", True) out = kwargs.pop("out") if "domain" in kwargs: diff --git a/src/gt4py/next/iterator/transforms/fuse_as_fieldop.py b/src/gt4py/next/iterator/transforms/fuse_as_fieldop.py index ffad69c921..00d5d5ce9a 100644 --- a/src/gt4py/next/iterator/transforms/fuse_as_fieldop.py +++ b/src/gt4py/next/iterator/transforms/fuse_as_fieldop.py @@ -184,7 +184,7 @@ def fuse_as_fieldop( ) # to keep the tree small new_stencil = merge_let.MergeLet().visit(new_stencil) new_stencil = inline_lambdas.InlineLambdas.apply( - new_stencil, opcount_preserving=True, force_inline_lift_args=True + new_stencil, opcount_preserving=False, force_inline_lift_args=True ) new_stencil = inline_lifts.InlineLifts().visit(new_stencil) @@ -206,6 +206,7 @@ def _arg_inline_predicate(node: itir.Expr, shifts: set[tuple[itir.OffsetLiteral, is_applied_fieldop := cpm.is_applied_as_fieldop(node) and not cpm.is_call_to(node.fun.args[0], "scan") ) or cpm.is_call_to(node, "if_"): + return True # always inline arg if it is an applied fieldop with only a single arg if is_applied_fieldop and len(node.args) == 1: return True