diff --git a/data/3deg/blue_water_available_pseudoCRU_rcp8p5_2004_2013_grid_allhdyro_mm_3deg.txt b/data/3deg/blue_water_available_pseudoCRU_rcp8p5_2004_2013_grid_allhdyro_mm_3deg.txt new file mode 100644 index 0000000000000000000000000000000000000000..10335dde9c3d5a8f0a71af98245e408d86d9910b --- /dev/null +++ b/data/3deg/blue_water_available_pseudoCRU_rcp8p5_2004_2013_grid_allhdyro_mm_3deg.txt @@ -0,0 +1,2189 @@ +Lon Lat Max_irr_water +-180.00 63.00 100.850 +-180.00 66.00 100.850 +-180.00 69.00 100.850 +-177.00 63.00 100.850 +-177.00 66.00 100.850 +-174.00 63.00 100.850 +-174.00 66.00 100.850 +-171.00 51.00 263.190 +-171.00 63.00 182.020 +-171.00 66.00 100.850 +-168.00 51.00 263.190 +-168.00 60.00 263.190 +-168.00 63.00 263.190 +-168.00 66.00 263.190 +-165.00 54.00 263.190 +-165.00 60.00 263.190 +-165.00 63.00 263.190 +-165.00 66.00 263.190 +-165.00 69.00 263.190 +-162.00 54.00 263.190 +-162.00 57.00 263.190 +-162.00 60.00 263.190 +-162.00 63.00 263.190 +-162.00 66.00 263.190 +-162.00 69.00 263.190 +-159.00 18.00 96.040 +-159.00 54.00 263.190 +-159.00 57.00 263.190 +-159.00 60.00 263.190 +-159.00 63.00 263.190 +-159.00 66.00 263.190 +-159.00 69.00 263.190 +-156.00 18.00 96.040 +-156.00 57.00 263.190 +-156.00 60.00 263.190 +-156.00 63.00 263.190 +-156.00 66.00 263.190 +-156.00 69.00 263.190 +-153.00 57.00 263.190 +-153.00 60.00 263.190 +-153.00 63.00 263.190 +-153.00 66.00 263.190 +-153.00 69.00 263.190 +-150.00 57.00 263.190 +-150.00 60.00 263.190 +-150.00 63.00 263.190 +-150.00 66.00 263.190 +-150.00 69.00 263.190 +-147.00 60.00 263.190 +-147.00 63.00 263.190 +-147.00 66.00 263.190 +-147.00 69.00 263.190 +-144.00 60.00 263.190 +-144.00 63.00 263.190 +-144.00 66.00 263.190 +-144.00 69.00 263.190 +-141.00 57.00 263.190 +-141.00 60.00 263.190 +-141.00 63.00 217.802 +-141.00 66.00 263.190 +-141.00 69.00 263.190 +-138.00 57.00 263.190 +-138.00 60.00 263.190 +-138.00 63.00 172.415 +-138.00 66.00 202.673 +-138.00 69.00 81.640 +-135.00 51.00 263.190 +-135.00 54.00 263.190 +-135.00 57.00 263.190 +-135.00 60.00 263.190 +-135.00 63.00 172.415 +-135.00 66.00 81.640 +-135.00 69.00 81.640 +-132.00 51.00 263.190 +-132.00 54.00 263.190 +-132.00 57.00 217.802 +-132.00 60.00 167.372 +-132.00 63.00 137.114 +-132.00 66.00 94.259 +-132.00 69.00 81.640 +-129.00 48.00 263.190 +-129.00 51.00 263.190 +-129.00 54.00 237.975 +-129.00 57.00 127.028 +-129.00 60.00 81.640 +-129.00 63.00 81.640 +-129.00 66.00 121.301 +-129.00 69.00 146.540 +-126.00 36.00 96.040 +-126.00 39.00 96.040 +-126.00 42.00 148.374 +-126.00 45.00 225.339 +-126.00 48.00 263.190 +-126.00 51.00 263.190 +-126.00 54.00 157.286 +-126.00 57.00 81.640 +-126.00 60.00 81.640 +-126.00 63.00 88.851 +-126.00 66.00 144.737 +-126.00 69.00 146.540 +-126.00 72.00 146.540 +-123.00 33.00 96.040 +-123.00 36.00 96.040 +-123.00 39.00 86.323 +-123.00 42.00 117.227 +-123.00 45.00 160.150 +-123.00 48.00 230.499 +-123.00 51.00 263.190 +-123.00 54.00 106.855 +-123.00 57.00 81.640 +-123.00 60.00 81.640 +-123.00 63.00 81.640 +-123.00 66.00 146.540 +-123.00 69.00 146.540 +-123.00 72.00 146.540 +-123.00 75.00 146.540 +-120.00 30.00 96.040 +-120.00 33.00 93.449 +-120.00 36.00 56.693 +-120.00 39.00 30.930 +-120.00 42.00 129.747 +-120.00 45.00 130.710 +-120.00 48.00 112.016 +-120.00 51.00 125.189 +-120.00 54.00 81.640 +-120.00 57.00 81.640 +-120.00 60.00 81.640 +-120.00 63.00 132.118 +-120.00 66.00 146.540 +-120.00 69.00 146.540 +-120.00 72.00 146.540 +-120.00 75.00 146.540 +-117.00 27.00 23.160 +-117.00 30.00 30.908 +-117.00 33.00 54.551 +-117.00 36.00 19.833 +-117.00 39.00 40.372 +-117.00 42.00 130.710 +-117.00 45.00 130.710 +-117.00 48.00 86.951 +-117.00 51.00 68.412 +-117.00 54.00 81.640 +-117.00 57.00 81.640 +-117.00 60.00 102.501 +-117.00 63.00 146.540 +-117.00 66.00 146.540 +-117.00 69.00 146.540 +-117.00 72.00 146.540 +-117.00 75.00 146.540 +-114.00 24.00 23.160 +-114.00 27.00 23.160 +-114.00 30.00 20.387 +-114.00 33.00 17.430 +-114.00 36.00 19.592 +-114.00 39.00 25.359 +-114.00 42.00 102.986 +-114.00 45.00 66.425 +-114.00 48.00 61.869 +-114.00 51.00 66.020 +-114.00 54.00 81.206 +-114.00 57.00 81.640 +-114.00 60.00 109.173 +-114.00 63.00 146.540 +-114.00 66.00 146.540 +-114.00 69.00 146.540 +-114.00 72.00 146.540 +-114.00 75.00 146.540 +-114.00 78.00 146.540 +-111.00 21.00 23.160 +-111.00 24.00 23.160 +-111.00 27.00 23.160 +-111.00 30.00 20.295 +-111.00 33.00 17.632 +-111.00 36.00 17.430 +-111.00 39.00 17.430 +-111.00 42.00 45.244 +-111.00 45.00 38.140 +-111.00 48.00 56.727 +-111.00 51.00 66.888 +-111.00 54.00 81.640 +-111.00 57.00 81.640 +-111.00 60.00 99.668 +-111.00 63.00 146.540 +-111.00 66.00 146.540 +-111.00 69.00 146.540 +-111.00 72.00 146.540 +-111.00 75.00 146.540 +-111.00 78.00 146.540 +-108.00 18.00 62.490 +-108.00 21.00 32.993 +-108.00 24.00 33.375 +-108.00 27.00 17.200 +-108.00 30.00 19.525 +-108.00 33.00 19.478 +-108.00 36.00 20.542 +-108.00 39.00 29.511 +-108.00 42.00 37.565 +-108.00 45.00 38.140 +-108.00 48.00 56.727 +-108.00 51.00 67.756 +-108.00 54.00 81.640 +-108.00 57.00 85.246 +-108.00 60.00 144.737 +-108.00 63.00 146.540 +-108.00 66.00 146.540 +-108.00 69.00 146.540 +-108.00 72.00 146.540 +-108.00 75.00 146.540 +-108.00 78.00 146.540 +-105.00 18.00 62.490 +-105.00 21.00 58.120 +-105.00 24.00 54.942 +-105.00 27.00 27.126 +-105.00 30.00 28.598 +-105.00 33.00 40.033 +-105.00 36.00 27.747 +-105.00 39.00 37.843 +-105.00 42.00 38.140 +-105.00 45.00 38.140 +-105.00 48.00 54.044 +-105.00 51.00 66.020 +-105.00 54.00 81.707 +-105.00 57.00 91.473 +-105.00 60.00 146.540 +-105.00 63.00 146.540 +-105.00 66.00 146.540 +-105.00 69.00 146.540 +-105.00 72.00 146.540 +-105.00 75.00 146.540 +-105.00 78.00 146.540 +-102.00 15.00 194.483 +-102.00 18.00 62.490 +-102.00 21.00 62.490 +-102.00 24.00 31.651 +-102.00 27.00 16.456 +-102.00 30.00 65.992 +-102.00 33.00 47.404 +-102.00 36.00 29.232 +-102.00 39.00 38.140 +-102.00 42.00 38.140 +-102.00 45.00 35.458 +-102.00 48.00 48.680 +-102.00 51.00 66.020 +-102.00 54.00 99.570 +-102.00 57.00 137.526 +-102.00 60.00 146.540 +-102.00 63.00 146.540 +-102.00 66.00 146.540 +-102.00 69.00 146.540 +-102.00 72.00 146.540 +-102.00 75.00 146.540 +-102.00 78.00 146.540 + -99.00 15.00 228.802 + -99.00 18.00 186.234 + -99.00 21.00 87.239 + -99.00 24.00 40.949 + -99.00 27.00 52.904 + -99.00 30.00 75.340 + -99.00 33.00 35.432 + -99.00 36.00 29.232 + -99.00 39.00 38.140 + -99.00 42.00 36.128 + -99.00 45.00 20.035 + -99.00 48.00 48.185 + -99.00 51.00 69.117 + -99.00 54.00 81.677 + -99.00 57.00 146.540 + -99.00 60.00 146.540 + -99.00 63.00 146.540 + -99.00 66.00 146.540 + -99.00 69.00 146.540 + -99.00 72.00 146.540 + -99.00 75.00 146.540 + -99.00 78.00 146.540 + -96.00 15.00 260.480 + -96.00 18.00 260.480 + -96.00 27.00 131.967 + -96.00 30.00 80.185 + -96.00 33.00 39.849 + -96.00 36.00 74.244 + -96.00 39.00 111.145 + -96.00 42.00 199.768 + -96.00 45.00 233.556 + -96.00 48.00 57.549 + -96.00 51.00 106.280 + -96.00 54.00 112.990 + -96.00 57.00 143.558 + -96.00 60.00 146.540 + -96.00 63.00 146.540 + -96.00 66.00 146.540 + -96.00 69.00 146.540 + -96.00 72.00 146.540 + -96.00 75.00 146.540 + -96.00 78.00 146.540 + -96.00 81.00 146.540 + -93.00 -3.00 270.180 + -93.00 12.00 411.267 + -93.00 15.00 271.184 + -93.00 18.00 260.480 + -93.00 27.00 330.160 + -93.00 30.00 205.707 + -93.00 33.00 237.665 + -93.00 36.00 232.820 + -93.00 39.00 305.825 + -93.00 42.00 330.160 + -93.00 45.00 222.478 + -93.00 48.00 130.344 + -93.00 51.00 146.540 + -93.00 54.00 146.540 + -93.00 57.00 146.540 + -93.00 60.00 146.540 + -93.00 63.00 146.540 + -93.00 66.00 146.540 + -93.00 69.00 146.540 + -93.00 72.00 146.540 + -93.00 75.00 146.540 + -93.00 78.00 146.540 + -93.00 81.00 146.540 + -90.00 12.00 472.350 + -90.00 15.00 361.528 + -90.00 18.00 260.880 + -90.00 21.00 260.480 + -90.00 27.00 330.160 + -90.00 30.00 188.860 + -90.00 33.00 209.990 + -90.00 36.00 177.173 + -90.00 39.00 271.735 + -90.00 42.00 250.873 + -90.00 45.00 257.454 + -90.00 48.00 151.870 + -90.00 51.00 146.540 + -90.00 54.00 146.540 + -90.00 63.00 146.540 + -90.00 66.00 146.540 + -90.00 69.00 146.540 + -90.00 72.00 146.540 + -90.00 75.00 146.540 + -90.00 78.00 146.540 + -87.00 9.00 472.350 + -87.00 12.00 472.350 + -87.00 15.00 472.350 + -87.00 21.00 201.180 + -87.00 27.00 188.860 + -87.00 30.00 188.860 + -87.00 33.00 149.669 + -87.00 36.00 100.680 + -87.00 39.00 120.814 + -87.00 42.00 121.130 + -87.00 45.00 142.467 + -87.00 48.00 149.048 + -87.00 51.00 146.688 + -87.00 54.00 146.540 + -87.00 63.00 146.540 + -87.00 66.00 146.540 + -87.00 69.00 146.540 + -87.00 72.00 146.540 + -87.00 75.00 146.540 + -87.00 78.00 146.540 + -87.00 81.00 146.540 + -84.00 -6.00 23.580 + -84.00 6.00 472.350 + -84.00 9.00 472.350 + -84.00 12.00 472.350 + -84.00 15.00 472.350 + -84.00 21.00 141.880 + -84.00 24.00 188.860 + -84.00 27.00 188.860 + -84.00 30.00 188.860 + -84.00 33.00 179.062 + -84.00 36.00 103.129 + -84.00 39.00 108.116 + -84.00 42.00 135.219 + -84.00 45.00 148.955 + -84.00 48.00 146.540 + -84.00 51.00 146.540 + -84.00 54.00 146.540 + -84.00 60.00 146.540 + -84.00 63.00 146.540 + -84.00 66.00 146.540 + -84.00 69.00 146.540 + -84.00 72.00 146.540 + -84.00 75.00 146.540 + -84.00 78.00 146.540 + -84.00 81.00 146.540 + -81.00 -12.00 23.580 + -81.00 -9.00 43.064 + -81.00 -6.00 89.838 + -81.00 -3.00 192.732 + -81.00 0.00 392.712 + -81.00 6.00 472.350 + -81.00 9.00 472.350 + -81.00 21.00 141.880 + -81.00 24.00 182.988 + -81.00 27.00 188.860 + -81.00 30.00 188.860 + -81.00 33.00 188.860 + -81.00 36.00 179.306 + -81.00 39.00 141.520 + -81.00 42.00 142.991 + -81.00 45.00 151.870 + -81.00 48.00 146.836 + -81.00 51.00 146.540 + -81.00 54.00 146.540 + -81.00 57.00 146.540 + -81.00 60.00 146.540 + -81.00 63.00 146.540 + -81.00 69.00 146.540 + -81.00 72.00 146.540 + -81.00 75.00 146.540 + -78.00 -51.00 280.160 + -78.00 -48.00 280.160 + -78.00 -18.00 23.580 + -78.00 -15.00 40.772 + -78.00 -12.00 89.482 + -78.00 -9.00 121.000 + -78.00 -6.00 121.000 + -78.00 -3.00 57.868 + -78.00 0.00 370.614 + -78.00 3.00 668.410 + -78.00 6.00 643.902 + -78.00 9.00 668.410 + -78.00 18.00 163.349 + -78.00 21.00 141.880 + -78.00 33.00 188.860 + -78.00 36.00 210.855 + -78.00 39.00 214.680 + -78.00 42.00 138.018 + -78.00 45.00 148.613 + -78.00 48.00 146.540 + -78.00 51.00 146.540 + -78.00 54.00 146.540 + -78.00 57.00 146.540 + -78.00 60.00 146.540 + -78.00 63.00 146.540 + -78.00 66.00 146.540 + -78.00 69.00 146.540 + -78.00 72.00 146.540 + -75.00 -57.00 280.160 + -75.00 -54.00 271.090 + -75.00 -51.00 191.724 + -75.00 -48.00 272.299 + -75.00 -45.00 280.160 + -75.00 -42.00 280.160 + -75.00 -39.00 280.160 + -75.00 -36.00 280.160 + -75.00 -18.00 23.580 + -75.00 -15.00 107.469 + -75.00 -12.00 148.994 + -75.00 -9.00 372.945 + -75.00 -6.00 176.988 + -75.00 -3.00 141.528 + -75.00 0.00 175.689 + -75.00 3.00 358.271 + -75.00 6.00 539.079 + -75.00 9.00 594.480 + -75.00 18.00 150.405 + -75.00 39.00 214.680 + -75.00 42.00 204.286 + -75.00 45.00 146.688 + -75.00 48.00 146.540 + -75.00 51.00 146.540 + -75.00 54.00 146.540 + -75.00 57.00 146.540 + -75.00 60.00 146.540 + -75.00 63.00 146.540 + -75.00 66.00 146.540 + -75.00 69.00 146.540 + -75.00 78.00 139.456 + -72.00 -57.00 280.160 + -72.00 -54.00 189.990 + -72.00 -51.00 44.330 + -72.00 -48.00 63.982 + -72.00 -45.00 63.982 + -72.00 -42.00 58.111 + -72.00 -39.00 123.619 + -72.00 -36.00 175.151 + -72.00 -33.00 153.698 + -72.00 -30.00 227.656 + -72.00 -27.00 280.160 + -72.00 -24.00 280.160 + -72.00 -21.00 263.055 + -72.00 -18.00 70.807 + -72.00 -15.00 119.087 + -72.00 -12.00 357.035 + -72.00 -9.00 624.890 + -72.00 -6.00 486.973 + -72.00 -3.00 244.638 + -72.00 0.00 245.863 + -72.00 3.00 221.810 + -72.00 6.00 397.632 + -72.00 9.00 464.400 + -72.00 12.00 668.410 + -72.00 18.00 151.180 + -72.00 39.00 214.680 + -72.00 42.00 214.680 + -72.00 45.00 171.146 + -72.00 48.00 146.540 + -72.00 51.00 146.540 + -72.00 54.00 146.540 + -72.00 57.00 146.540 + -72.00 60.00 146.540 + -72.00 63.00 146.540 + -72.00 66.00 146.540 + -72.00 69.00 146.540 + -72.00 75.00 114.660 + -72.00 78.00 118.202 + -69.00 -57.00 87.208 + -69.00 -54.00 145.400 + -69.00 -51.00 44.330 + -69.00 -48.00 44.330 + -69.00 -45.00 44.330 + -69.00 -42.00 41.267 + -69.00 -39.00 35.608 + -69.00 -36.00 37.482 + -69.00 -33.00 43.570 + -69.00 -30.00 48.253 + -69.00 -27.00 160.648 + -69.00 -24.00 203.187 + -69.00 -21.00 86.327 + -69.00 -18.00 52.130 + -69.00 -15.00 52.130 + -69.00 -12.00 338.510 + -69.00 -9.00 624.890 + -69.00 -6.00 624.890 + -69.00 -3.00 624.890 + -69.00 0.00 491.380 + -69.00 3.00 358.561 + -69.00 6.00 449.728 + -69.00 9.00 456.240 + -69.00 18.00 205.714 + -69.00 42.00 214.680 + -69.00 45.00 167.361 + -69.00 48.00 146.540 + -69.00 51.00 146.540 + -69.00 54.00 146.540 + -69.00 57.00 146.540 + -69.00 60.00 146.540 + -69.00 63.00 146.540 + -69.00 66.00 146.540 + -69.00 69.00 146.540 + -69.00 75.00 114.660 + -69.00 78.00 123.769 + -66.00 -57.00 44.330 + -66.00 -48.00 44.330 + -66.00 -45.00 44.330 + -66.00 -42.00 38.422 + -66.00 -39.00 44.038 + -66.00 -36.00 64.857 + -66.00 -33.00 96.998 + -66.00 -30.00 90.570 + -66.00 -27.00 225.565 + -66.00 -24.00 228.694 + -66.00 -21.00 80.925 + -66.00 -18.00 52.130 + -66.00 -15.00 99.860 + -66.00 -12.00 545.340 + -66.00 -9.00 624.890 + -66.00 -6.00 624.890 + -66.00 -3.00 624.890 + -66.00 0.00 554.619 + -66.00 3.00 479.664 + -66.00 6.00 456.240 + -66.00 9.00 456.240 + -66.00 18.00 242.070 + -66.00 42.00 146.540 + -66.00 45.00 146.540 + -66.00 48.00 146.540 + -66.00 51.00 146.540 + -66.00 54.00 146.540 + -66.00 57.00 146.540 + -66.00 60.00 146.540 + -66.00 63.00 146.540 + -66.00 66.00 146.540 + -66.00 78.00 114.660 + -66.00 81.00 143.352 + -63.00 -54.00 44.330 + -63.00 -42.00 37.247 + -63.00 -39.00 52.000 + -63.00 -36.00 135.568 + -63.00 -33.00 212.708 + -63.00 -30.00 276.992 + -63.00 -27.00 283.420 + -63.00 -24.00 173.967 + -63.00 -21.00 96.430 + -63.00 -18.00 68.040 + -63.00 -15.00 354.420 + -63.00 -12.00 624.890 + -63.00 -9.00 624.890 + -63.00 -6.00 624.890 + -63.00 -3.00 624.890 + -63.00 0.00 624.890 + -63.00 3.00 522.992 + -63.00 6.00 401.654 + -63.00 9.00 456.240 + -63.00 42.00 146.540 + -63.00 45.00 146.540 + -63.00 48.00 146.540 + -63.00 51.00 146.540 + -63.00 54.00 146.540 + -63.00 57.00 146.540 + -63.00 63.00 146.540 + -63.00 66.00 146.540 + -63.00 81.00 128.323 + -60.00 -54.00 44.330 + -60.00 -39.00 52.000 + -60.00 -36.00 213.107 + -60.00 -33.00 265.111 + -60.00 -30.00 270.791 + -60.00 -27.00 216.064 + -60.00 -24.00 126.251 + -60.00 -21.00 117.823 + -60.00 -18.00 146.076 + -60.00 -15.00 549.391 + -60.00 -12.00 624.890 + -60.00 -9.00 624.890 + -60.00 -6.00 624.890 + -60.00 -3.00 624.890 + -60.00 0.00 515.566 + -60.00 3.00 392.576 + -60.00 6.00 378.910 + -60.00 45.00 146.540 + -60.00 48.00 146.540 + -60.00 51.00 146.540 + -60.00 54.00 146.540 + -60.00 81.00 114.660 + -57.00 -39.00 52.000 + -57.00 -36.00 223.500 + -57.00 -33.00 223.373 + -57.00 -30.00 237.291 + -57.00 -27.00 144.495 + -57.00 -24.00 96.752 + -57.00 -21.00 81.300 + -57.00 -18.00 99.783 + -57.00 -15.00 534.292 + -57.00 -12.00 624.890 + -57.00 -9.00 624.890 + -57.00 -6.00 624.890 + -57.00 -3.00 624.890 + -57.00 0.00 563.395 + -57.00 3.00 378.910 + -57.00 45.00 146.540 + -57.00 48.00 146.540 + -57.00 51.00 146.540 + -57.00 69.00 114.660 + -57.00 72.00 114.660 + -57.00 81.00 114.660 + -54.00 -36.00 223.348 + -54.00 -33.00 223.148 + -54.00 -30.00 223.120 + -54.00 -27.00 112.226 + -54.00 -24.00 81.300 + -54.00 -21.00 81.300 + -54.00 -18.00 241.482 + -54.00 -15.00 481.868 + -54.00 -12.00 562.318 + -54.00 -9.00 607.012 + -54.00 -6.00 615.951 + -54.00 -3.00 624.890 + -54.00 0.00 604.392 + -54.00 3.00 418.267 + -54.00 45.00 146.540 + -54.00 48.00 146.540 + -54.00 63.00 114.660 + -54.00 66.00 114.660 + -54.00 69.00 114.660 + -54.00 81.00 114.660 + -51.00 -33.00 131.460 + -51.00 -30.00 158.194 + -51.00 -27.00 111.438 + -51.00 -24.00 81.300 + -51.00 -21.00 81.300 + -51.00 -18.00 161.391 + -51.00 -15.00 303.090 + -51.00 -12.00 303.090 + -51.00 -9.00 320.968 + -51.00 -6.00 356.723 + -51.00 -3.00 526.467 + -51.00 0.00 624.890 + -51.00 60.00 114.660 + -51.00 63.00 114.660 + -51.00 66.00 114.660 + -51.00 69.00 114.660 + -51.00 81.00 114.660 + -48.00 -27.00 131.460 + -48.00 -24.00 97.065 + -48.00 -21.00 102.200 + -48.00 -18.00 129.848 + -48.00 -15.00 226.810 + -48.00 -12.00 226.924 + -48.00 -9.00 221.069 + -48.00 -6.00 192.541 + -48.00 -3.00 200.386 + -48.00 60.00 114.660 + -48.00 81.00 114.660 + -45.00 -24.00 123.434 + -45.00 -21.00 130.067 + -45.00 -18.00 131.460 + -45.00 -15.00 131.460 + -45.00 -12.00 142.273 + -45.00 -9.00 174.710 + -45.00 -6.00 174.710 + -45.00 -3.00 174.710 + -45.00 60.00 114.660 + -45.00 81.00 114.660 + -42.00 -24.00 131.460 + -42.00 -21.00 131.460 + -42.00 -18.00 131.460 + -42.00 -15.00 131.460 + -42.00 -12.00 131.460 + -42.00 -9.00 159.092 + -42.00 -6.00 174.710 + -39.00 -57.00 44.330 + -39.00 -15.00 131.460 + -39.00 -12.00 135.934 + -39.00 -9.00 163.898 + -39.00 -6.00 174.710 + -36.00 -12.00 174.710 + -36.00 -9.00 174.710 + -36.00 -6.00 174.710 + -27.00 69.00 114.660 + -27.00 72.00 114.660 + -27.00 78.00 114.660 + -24.00 63.00 365.230 + -24.00 66.00 365.230 + -24.00 69.00 129.399 + -24.00 72.00 114.660 + -24.00 75.00 114.660 + -24.00 78.00 114.660 + -24.00 81.00 114.660 + -21.00 63.00 365.230 + -21.00 72.00 114.660 + -21.00 75.00 114.660 + -18.00 9.00 426.910 + -18.00 12.00 147.231 + -18.00 15.00 35.377 + -18.00 18.00 3.510 + -18.00 21.00 2.934 + -18.00 24.00 2.780 + -18.00 27.00 2.780 + -18.00 63.00 365.230 + -18.00 66.00 365.230 + -15.00 6.00 885.080 + -15.00 9.00 433.885 + -15.00 12.00 121.526 + -15.00 15.00 32.686 + -15.00 18.00 3.860 + -15.00 21.00 2.674 + -15.00 24.00 2.780 + -15.00 27.00 14.388 + -15.00 63.00 365.230 + -12.00 3.00 782.760 + -12.00 6.00 716.845 + -12.00 9.00 225.468 + -12.00 12.00 54.795 + -12.00 15.00 30.485 + -12.00 18.00 7.335 + -12.00 21.00 2.030 + -12.00 24.00 2.280 + -12.00 27.00 25.351 + -12.00 30.00 31.800 + -12.00 36.00 115.530 + -12.00 39.00 115.530 + -12.00 51.00 317.290 + -12.00 54.00 317.290 + -9.00 3.00 557.320 + -9.00 6.00 319.475 + -9.00 9.00 83.200 + -9.00 12.00 54.017 + -9.00 15.00 16.338 + -9.00 18.00 3.798 + -9.00 21.00 1.927 + -9.00 24.00 1.923 + -9.00 27.00 9.834 + -9.00 30.00 31.800 + -9.00 33.00 31.800 + -9.00 36.00 115.530 + -9.00 39.00 115.530 + -9.00 42.00 115.530 + -9.00 51.00 317.290 + -9.00 54.00 317.290 + -9.00 57.00 255.180 + -6.00 3.00 222.913 + -6.00 6.00 172.970 + -6.00 9.00 79.448 + -6.00 12.00 50.127 + -6.00 15.00 70.670 + -6.00 18.00 33.142 + -6.00 21.00 1.100 + -6.00 24.00 1.318 + -6.00 27.00 1.330 + -6.00 30.00 9.041 + -6.00 33.00 31.800 + -6.00 36.00 115.530 + -6.00 39.00 115.530 + -6.00 42.00 115.530 + -6.00 45.00 187.220 + -6.00 48.00 224.289 + -6.00 51.00 255.180 + -6.00 54.00 259.616 + -6.00 57.00 255.180 + -3.00 3.00 189.970 + -3.00 6.00 188.773 + -3.00 9.00 132.338 + -3.00 12.00 20.669 + -3.00 15.00 78.000 + -3.00 18.00 18.189 + -3.00 21.00 1.189 + -3.00 24.00 1.330 + -3.00 27.00 1.330 + -3.00 30.00 2.424 + -3.00 33.00 28.951 + -3.00 36.00 115.530 + -3.00 39.00 96.667 + -3.00 42.00 130.740 + -3.00 45.00 187.220 + -3.00 48.00 207.608 + -3.00 51.00 255.180 + -3.00 54.00 255.180 + -3.00 57.00 255.180 + 0.00 3.00 189.970 + 0.00 6.00 167.941 + 0.00 9.00 104.830 + 0.00 12.00 27.770 + 0.00 15.00 74.495 + 0.00 18.00 26.765 + 0.00 21.00 1.317 + 0.00 24.00 1.330 + 0.00 27.00 1.330 + 0.00 30.00 1.330 + 0.00 33.00 22.178 + 0.00 36.00 27.210 + 0.00 39.00 79.790 + 0.00 42.00 166.331 + 0.00 45.00 187.220 + 0.00 48.00 163.479 + 0.00 51.00 255.180 + 3.00 3.00 613.930 + 3.00 6.00 498.926 + 3.00 9.00 132.838 + 3.00 12.00 79.107 + 3.00 15.00 46.906 + 3.00 18.00 14.255 + 3.00 21.00 1.330 + 3.00 24.00 1.330 + 3.00 27.00 1.330 + 3.00 30.00 1.330 + 3.00 33.00 22.897 + 3.00 36.00 27.210 + 3.00 39.00 79.790 + 3.00 42.00 227.390 + 3.00 45.00 215.542 + 3.00 48.00 135.757 + 3.00 51.00 357.988 + 3.00 57.00 382.460 + 3.00 60.00 382.460 + 6.00 3.00 599.841 + 6.00 6.00 388.964 + 6.00 9.00 127.983 + 6.00 12.00 71.092 + 6.00 15.00 23.680 + 6.00 18.00 2.046 + 6.00 21.00 1.367 + 6.00 24.00 1.330 + 6.00 27.00 1.330 + 6.00 30.00 2.010 + 6.00 33.00 26.740 + 6.00 36.00 26.975 + 6.00 39.00 154.030 + 6.00 42.00 201.155 + 6.00 45.00 172.752 + 6.00 48.00 217.336 + 6.00 51.00 254.383 + 6.00 54.00 157.293 + 6.00 57.00 382.460 + 6.00 60.00 382.460 + 6.00 63.00 382.460 + 9.00 -18.00 39.690 + 9.00 -6.00 626.495 + 9.00 -3.00 967.152 + 9.00 0.00 827.864 + 9.00 3.00 360.330 + 9.00 6.00 167.109 + 9.00 9.00 93.310 + 9.00 12.00 58.998 + 9.00 15.00 7.473 + 9.00 18.00 2.898 + 9.00 21.00 1.697 + 9.00 24.00 0.640 + 9.00 27.00 0.580 + 9.00 30.00 14.190 + 9.00 33.00 25.800 + 9.00 36.00 25.800 + 9.00 39.00 154.030 + 9.00 42.00 154.030 + 9.00 45.00 130.781 + 9.00 48.00 151.381 + 9.00 51.00 185.349 + 9.00 54.00 161.324 + 9.00 57.00 310.491 + 9.00 60.00 382.460 + 9.00 63.00 382.460 + 12.00 -27.00 3.910 + 12.00 -24.00 3.910 + 12.00 -21.00 7.330 + 12.00 -18.00 60.240 + 12.00 -15.00 75.470 + 12.00 -12.00 75.470 + 12.00 -9.00 79.988 + 12.00 -6.00 292.572 + 12.00 -3.00 777.174 + 12.00 0.00 694.534 + 12.00 3.00 334.277 + 12.00 6.00 201.182 + 12.00 9.00 74.182 + 12.00 12.00 80.766 + 12.00 15.00 15.387 + 12.00 18.00 4.195 + 12.00 21.00 1.458 + 12.00 24.00 0.250 + 12.00 27.00 4.164 + 12.00 30.00 12.306 + 12.00 36.00 154.030 + 12.00 39.00 154.030 + 12.00 42.00 154.030 + 12.00 45.00 115.374 + 12.00 48.00 127.449 + 12.00 51.00 119.038 + 12.00 54.00 145.235 + 12.00 57.00 155.380 + 12.00 60.00 186.919 + 12.00 63.00 272.164 + 12.00 66.00 382.460 + 12.00 75.00 382.460 + 15.00 -33.00 40.620 + 15.00 -30.00 18.037 + 15.00 -27.00 9.904 + 15.00 -24.00 7.092 + 15.00 -21.00 17.316 + 15.00 -18.00 66.735 + 15.00 -15.00 75.470 + 15.00 -12.00 78.733 + 15.00 -9.00 144.602 + 15.00 -6.00 371.787 + 15.00 -3.00 478.880 + 15.00 0.00 540.186 + 15.00 3.00 120.005 + 15.00 6.00 113.273 + 15.00 9.00 149.278 + 15.00 12.00 131.738 + 15.00 15.00 41.189 + 15.00 18.00 11.391 + 15.00 21.00 9.238 + 15.00 24.00 0.250 + 15.00 27.00 1.318 + 15.00 30.00 11.637 + 15.00 36.00 154.030 + 15.00 39.00 154.030 + 15.00 42.00 166.450 + 15.00 45.00 139.121 + 15.00 48.00 127.695 + 15.00 51.00 106.890 + 15.00 54.00 129.270 + 15.00 57.00 155.380 + 15.00 60.00 155.380 + 15.00 63.00 155.380 + 15.00 66.00 287.843 + 15.00 69.00 382.460 + 15.00 75.00 382.460 + 15.00 78.00 382.460 + 18.00 -36.00 40.620 + 18.00 -33.00 40.620 + 18.00 -30.00 20.329 + 18.00 -27.00 10.841 + 18.00 -24.00 7.853 + 18.00 -21.00 20.191 + 18.00 -18.00 50.279 + 18.00 -15.00 31.377 + 18.00 -12.00 90.193 + 18.00 -9.00 222.120 + 18.00 -6.00 338.320 + 18.00 -3.00 338.320 + 18.00 0.00 346.093 + 18.00 3.00 224.970 + 18.00 6.00 66.154 + 18.00 9.00 153.023 + 18.00 12.00 34.018 + 18.00 15.00 25.875 + 18.00 18.00 13.660 + 18.00 21.00 3.603 + 18.00 24.00 0.250 + 18.00 27.00 2.741 + 18.00 30.00 13.060 + 18.00 39.00 165.674 + 18.00 42.00 166.450 + 18.00 45.00 156.047 + 18.00 48.00 130.418 + 18.00 51.00 106.890 + 18.00 54.00 136.839 + 18.00 57.00 155.380 + 18.00 60.00 155.380 + 18.00 63.00 155.380 + 18.00 66.00 186.919 + 18.00 69.00 382.460 + 21.00 -36.00 40.620 + 21.00 -33.00 31.002 + 21.00 -30.00 13.761 + 21.00 -27.00 12.047 + 21.00 -24.00 15.430 + 21.00 -21.00 17.138 + 21.00 -18.00 38.199 + 21.00 -15.00 41.015 + 21.00 -12.00 173.541 + 21.00 -9.00 297.308 + 21.00 -6.00 338.320 + 21.00 -3.00 338.320 + 21.00 0.00 338.320 + 21.00 3.00 212.375 + 21.00 6.00 76.465 + 21.00 9.00 90.527 + 21.00 12.00 38.041 + 21.00 15.00 13.484 + 21.00 18.00 10.308 + 21.00 21.00 0.250 + 21.00 24.00 0.250 + 21.00 27.00 3.453 + 21.00 30.00 13.060 + 21.00 33.00 166.450 + 21.00 36.00 166.450 + 21.00 39.00 165.484 + 21.00 42.00 158.544 + 21.00 45.00 151.470 + 21.00 48.00 111.523 + 21.00 51.00 103.411 + 21.00 54.00 140.146 + 21.00 57.00 127.020 + 21.00 60.00 121.580 + 21.00 63.00 137.486 + 21.00 66.00 159.546 + 21.00 69.00 369.416 + 24.00 -36.00 40.620 + 24.00 -33.00 32.204 + 24.00 -30.00 18.980 + 24.00 -27.00 14.516 + 24.00 -24.00 15.968 + 24.00 -21.00 23.896 + 24.00 -18.00 58.089 + 24.00 -15.00 60.300 + 24.00 -12.00 307.429 + 24.00 -9.00 338.320 + 24.00 -6.00 338.320 + 24.00 -3.00 338.320 + 24.00 0.00 338.320 + 24.00 3.00 261.354 + 24.00 6.00 84.178 + 24.00 9.00 82.570 + 24.00 12.00 20.501 + 24.00 15.00 12.492 + 24.00 18.00 9.352 + 24.00 21.00 2.441 + 24.00 24.00 0.175 + 24.00 27.00 1.604 + 24.00 30.00 5.632 + 24.00 33.00 136.510 + 24.00 36.00 136.510 + 24.00 39.00 134.881 + 24.00 42.00 151.470 + 24.00 45.00 151.470 + 24.00 48.00 92.748 + 24.00 51.00 82.521 + 24.00 54.00 127.020 + 24.00 57.00 127.020 + 24.00 60.00 121.580 + 24.00 63.00 122.604 + 24.00 66.00 128.827 + 24.00 69.00 328.110 + 27.00 -36.00 40.620 + 27.00 -33.00 36.307 + 27.00 -30.00 20.844 + 27.00 -27.00 17.300 + 27.00 -24.00 16.640 + 27.00 -21.00 50.823 + 27.00 -18.00 65.865 + 27.00 -15.00 62.954 + 27.00 -12.00 96.120 + 27.00 -9.00 115.388 + 27.00 -6.00 205.841 + 27.00 -3.00 215.576 + 27.00 0.00 331.454 + 27.00 3.00 217.656 + 27.00 6.00 78.566 + 27.00 9.00 38.521 + 27.00 12.00 32.514 + 27.00 15.00 64.550 + 27.00 18.00 16.497 + 27.00 21.00 5.539 + 27.00 24.00 31.863 + 27.00 27.00 49.830 + 27.00 30.00 0.990 + 27.00 36.00 106.570 + 27.00 39.00 105.473 + 27.00 42.00 151.470 + 27.00 45.00 130.478 + 27.00 48.00 94.426 + 27.00 51.00 46.265 + 27.00 54.00 149.816 + 27.00 57.00 225.769 + 27.00 60.00 131.696 + 27.00 63.00 122.160 + 27.00 66.00 126.797 + 27.00 69.00 285.500 + 30.00 -33.00 40.620 + 30.00 -30.00 41.861 + 30.00 -27.00 48.888 + 30.00 -24.00 64.218 + 30.00 -21.00 46.259 + 30.00 -18.00 156.834 + 30.00 -15.00 94.813 + 30.00 -12.00 61.621 + 30.00 -9.00 91.868 + 30.00 -6.00 63.580 + 30.00 -3.00 37.860 + 30.00 0.00 99.033 + 30.00 3.00 98.669 + 30.00 6.00 80.568 + 30.00 9.00 68.554 + 30.00 12.00 60.546 + 30.00 15.00 82.570 + 30.00 18.00 82.570 + 30.00 21.00 81.153 + 30.00 24.00 116.404 + 30.00 27.00 152.016 + 30.00 30.00 111.103 + 30.00 33.00 57.790 + 30.00 36.00 97.855 + 30.00 39.00 104.080 + 30.00 45.00 91.070 + 30.00 48.00 91.070 + 30.00 51.00 48.258 + 30.00 54.00 76.202 + 30.00 57.00 128.492 + 30.00 60.00 163.358 + 30.00 63.00 140.131 + 30.00 66.00 142.450 + 30.00 69.00 197.837 + 33.00 -27.00 82.850 + 33.00 -24.00 121.805 + 33.00 -21.00 300.999 + 33.00 -18.00 246.861 + 33.00 -15.00 137.023 + 33.00 -12.00 97.486 + 33.00 -9.00 73.370 + 33.00 -6.00 67.810 + 33.00 -3.00 61.604 + 33.00 0.00 40.977 + 33.00 3.00 67.151 + 33.00 6.00 49.801 + 33.00 9.00 56.215 + 33.00 12.00 81.106 + 33.00 15.00 82.570 + 33.00 18.00 82.570 + 33.00 21.00 133.209 + 33.00 24.00 160.830 + 33.00 27.00 25.431 + 33.00 30.00 25.274 + 33.00 33.00 75.446 + 33.00 36.00 71.710 + 33.00 39.00 66.471 + 33.00 42.00 91.070 + 33.00 45.00 91.070 + 33.00 48.00 88.790 + 33.00 51.00 49.909 + 33.00 54.00 68.532 + 33.00 57.00 115.428 + 33.00 60.00 140.425 + 33.00 63.00 142.450 + 33.00 66.00 142.450 + 33.00 69.00 142.450 + 36.00 -21.00 258.183 + 36.00 -18.00 156.970 + 36.00 -15.00 156.970 + 36.00 -12.00 106.884 + 36.00 -9.00 67.810 + 36.00 -6.00 65.397 + 36.00 -3.00 54.134 + 36.00 0.00 53.330 + 36.00 3.00 66.130 + 36.00 6.00 67.789 + 36.00 9.00 32.231 + 36.00 12.00 32.772 + 36.00 15.00 43.844 + 36.00 18.00 82.570 + 36.00 21.00 71.490 + 36.00 24.00 4.660 + 36.00 27.00 4.752 + 36.00 30.00 10.636 + 36.00 33.00 51.080 + 36.00 36.00 64.212 + 36.00 39.00 95.941 + 36.00 42.00 88.260 + 36.00 45.00 89.717 + 36.00 48.00 58.453 + 36.00 51.00 83.886 + 36.00 54.00 109.803 + 36.00 57.00 113.685 + 36.00 60.00 142.450 + 36.00 63.00 142.450 + 36.00 66.00 142.450 + 39.00 -18.00 156.970 + 39.00 -15.00 156.970 + 39.00 -12.00 123.646 + 39.00 -9.00 67.810 + 39.00 -6.00 55.743 + 39.00 -3.00 50.985 + 39.00 0.00 48.640 + 39.00 3.00 66.415 + 39.00 6.00 72.530 + 39.00 9.00 66.604 + 39.00 12.00 28.246 + 39.00 15.00 19.200 + 39.00 18.00 4.660 + 39.00 21.00 4.660 + 39.00 24.00 4.660 + 39.00 27.00 4.660 + 39.00 30.00 10.904 + 39.00 33.00 70.501 + 39.00 36.00 41.573 + 39.00 39.00 97.753 + 39.00 42.00 102.410 + 39.00 45.00 88.260 + 39.00 48.00 77.048 + 39.00 51.00 93.963 + 39.00 54.00 110.436 + 39.00 57.00 120.658 + 39.00 60.00 142.450 + 39.00 63.00 142.450 + 39.00 66.00 142.450 + 42.00 -27.00 292.610 + 42.00 -24.00 292.610 + 42.00 -21.00 292.610 + 42.00 -18.00 292.610 + 42.00 -3.00 39.260 + 42.00 0.00 39.260 + 42.00 3.00 54.047 + 42.00 6.00 72.530 + 42.00 9.00 46.657 + 42.00 12.00 10.818 + 42.00 15.00 7.559 + 42.00 18.00 4.660 + 42.00 21.00 4.660 + 42.00 24.00 4.660 + 42.00 27.00 7.557 + 42.00 30.00 28.008 + 42.00 33.00 88.880 + 42.00 36.00 55.367 + 42.00 39.00 96.141 + 42.00 42.00 102.410 + 42.00 45.00 90.161 + 42.00 48.00 91.428 + 42.00 51.00 92.695 + 42.00 54.00 111.070 + 42.00 57.00 117.172 + 42.00 60.00 142.450 + 42.00 63.00 142.450 + 42.00 66.00 142.450 + 45.00 -27.00 292.610 + 45.00 -24.00 292.610 + 45.00 -21.00 292.610 + 45.00 -18.00 292.610 + 45.00 -15.00 292.610 + 45.00 0.00 39.260 + 45.00 3.00 41.276 + 45.00 6.00 54.971 + 45.00 9.00 39.260 + 45.00 12.00 8.940 + 45.00 15.00 6.800 + 45.00 18.00 4.660 + 45.00 21.00 4.660 + 45.00 24.00 4.660 + 45.00 27.00 15.707 + 45.00 30.00 83.263 + 45.00 33.00 54.263 + 45.00 36.00 23.274 + 45.00 39.00 133.284 + 45.00 42.00 92.033 + 45.00 45.00 104.553 + 45.00 48.00 85.909 + 45.00 51.00 110.436 + 45.00 54.00 111.070 + 45.00 57.00 114.557 + 45.00 60.00 142.450 + 45.00 63.00 142.450 + 45.00 66.00 142.450 + 48.00 -24.00 292.610 + 48.00 -21.00 292.610 + 48.00 -18.00 292.610 + 48.00 -15.00 292.610 + 48.00 3.00 39.260 + 48.00 6.00 39.260 + 48.00 9.00 39.260 + 48.00 12.00 8.940 + 48.00 15.00 8.940 + 48.00 18.00 5.017 + 48.00 21.00 4.660 + 48.00 24.00 4.725 + 48.00 27.00 11.504 + 48.00 30.00 36.359 + 48.00 33.00 21.400 + 48.00 36.00 32.136 + 48.00 39.00 141.531 + 48.00 42.00 19.320 + 48.00 45.00 40.430 + 48.00 48.00 32.198 + 48.00 51.00 103.891 + 48.00 54.00 111.070 + 48.00 57.00 113.685 + 48.00 60.00 142.450 + 48.00 63.00 142.450 + 48.00 66.00 142.450 + 48.00 69.00 142.450 + 51.00 15.00 7.047 + 51.00 18.00 4.399 + 51.00 21.00 6.029 + 51.00 24.00 9.930 + 51.00 27.00 21.400 + 51.00 30.00 21.400 + 51.00 33.00 21.400 + 51.00 36.00 21.400 + 51.00 39.00 11.290 + 51.00 42.00 19.043 + 51.00 45.00 19.770 + 51.00 48.00 19.320 + 51.00 51.00 75.318 + 51.00 54.00 111.070 + 51.00 57.00 111.070 + 51.00 60.00 131.118 + 51.00 63.00 142.450 + 51.00 66.00 142.450 + 51.00 69.00 100.850 + 51.00 72.00 100.850 + 54.00 -24.00 292.610 + 54.00 15.00 2.450 + 54.00 18.00 2.584 + 54.00 21.00 4.912 + 54.00 24.00 10.163 + 54.00 27.00 21.400 + 54.00 30.00 21.400 + 54.00 33.00 21.400 + 54.00 36.00 19.428 + 54.00 39.00 18.898 + 54.00 42.00 23.077 + 54.00 45.00 19.320 + 54.00 48.00 19.871 + 54.00 51.00 63.330 + 54.00 54.00 111.070 + 54.00 57.00 111.070 + 54.00 60.00 131.990 + 54.00 63.00 142.450 + 54.00 66.00 142.450 + 54.00 69.00 100.850 + 54.00 72.00 100.850 + 54.00 75.00 100.850 + 57.00 -21.00 292.610 + 57.00 18.00 2.450 + 57.00 21.00 2.450 + 57.00 24.00 21.400 + 57.00 27.00 21.400 + 57.00 30.00 21.400 + 57.00 33.00 21.400 + 57.00 36.00 19.006 + 57.00 39.00 47.297 + 57.00 42.00 35.886 + 57.00 45.00 20.475 + 57.00 48.00 19.871 + 57.00 51.00 47.096 + 57.00 54.00 106.096 + 57.00 57.00 109.680 + 57.00 60.00 123.076 + 57.00 63.00 135.600 + 57.00 66.00 142.450 + 57.00 69.00 142.450 + 57.00 72.00 100.850 + 60.00 24.00 17.087 + 60.00 27.00 18.120 + 60.00 30.00 16.404 + 60.00 33.00 15.981 + 60.00 36.00 20.792 + 60.00 39.00 38.293 + 60.00 42.00 30.727 + 60.00 45.00 26.274 + 60.00 48.00 19.595 + 60.00 51.00 47.980 + 60.00 54.00 107.327 + 60.00 57.00 107.220 + 60.00 60.00 107.220 + 60.00 63.00 113.092 + 60.00 66.00 142.450 + 60.00 69.00 142.450 + 63.00 24.00 9.000 + 63.00 27.00 9.763 + 63.00 30.00 13.580 + 63.00 33.00 13.824 + 63.00 36.00 32.748 + 63.00 39.00 29.277 + 63.00 42.00 30.531 + 63.00 45.00 32.864 + 63.00 48.00 19.320 + 63.00 51.00 22.962 + 63.00 54.00 98.424 + 63.00 57.00 107.220 + 63.00 60.00 107.220 + 63.00 63.00 107.220 + 63.00 66.00 133.642 + 63.00 69.00 142.450 + 66.00 -51.00 292.610 + 66.00 21.00 42.900 + 66.00 24.00 126.729 + 66.00 27.00 118.008 + 66.00 30.00 26.333 + 66.00 33.00 17.965 + 66.00 36.00 28.267 + 66.00 39.00 27.934 + 66.00 42.00 38.500 + 66.00 45.00 29.256 + 66.00 48.00 24.351 + 66.00 51.00 27.917 + 66.00 54.00 83.032 + 66.00 57.00 107.220 + 66.00 60.00 107.372 + 66.00 63.00 108.132 + 66.00 66.00 120.031 + 66.00 69.00 112.690 + 66.00 72.00 112.690 + 66.00 75.00 100.850 + 69.00 -51.00 292.610 + 69.00 18.00 59.830 + 69.00 21.00 49.672 + 69.00 24.00 87.512 + 69.00 27.00 105.257 + 69.00 30.00 55.241 + 69.00 33.00 39.119 + 69.00 36.00 27.840 + 69.00 39.00 18.787 + 69.00 42.00 26.777 + 69.00 45.00 22.900 + 69.00 48.00 22.900 + 69.00 51.00 28.060 + 69.00 54.00 80.833 + 69.00 57.00 107.220 + 69.00 60.00 108.132 + 69.00 63.00 111.019 + 69.00 66.00 116.141 + 69.00 69.00 112.690 + 69.00 72.00 112.690 + 72.00 12.00 607.250 + 72.00 15.00 355.113 + 72.00 18.00 316.437 + 72.00 21.00 202.458 + 72.00 24.00 66.885 + 72.00 27.00 49.197 + 72.00 30.00 61.081 + 72.00 33.00 61.708 + 72.00 36.00 35.810 + 72.00 39.00 8.660 + 72.00 42.00 20.726 + 72.00 45.00 23.515 + 72.00 48.00 23.187 + 72.00 51.00 30.021 + 72.00 54.00 107.220 + 72.00 57.00 107.220 + 72.00 60.00 107.828 + 72.00 63.00 112.690 + 72.00 66.00 112.462 + 72.00 69.00 112.690 + 72.00 72.00 112.690 + 75.00 6.00 607.250 + 75.00 9.00 436.299 + 75.00 12.00 175.603 + 75.00 15.00 133.726 + 75.00 18.00 221.651 + 75.00 21.00 161.426 + 75.00 24.00 53.940 + 75.00 27.00 132.516 + 75.00 30.00 68.446 + 75.00 33.00 40.807 + 75.00 36.00 4.940 + 75.00 39.00 6.182 + 75.00 42.00 24.146 + 75.00 45.00 23.651 + 75.00 48.00 24.763 + 75.00 51.00 31.024 + 75.00 54.00 105.021 + 75.00 57.00 107.220 + 75.00 60.00 109.803 + 75.00 63.00 112.690 + 75.00 66.00 112.690 + 75.00 69.00 112.690 + 75.00 72.00 112.690 + 78.00 6.00 321.700 + 78.00 9.00 383.863 + 78.00 12.00 140.541 + 78.00 15.00 152.348 + 78.00 18.00 230.150 + 78.00 21.00 204.389 + 78.00 24.00 135.582 + 78.00 27.00 204.734 + 78.00 30.00 103.312 + 78.00 33.00 29.772 + 78.00 36.00 4.940 + 78.00 39.00 5.062 + 78.00 42.00 22.049 + 78.00 45.00 25.153 + 78.00 48.00 27.057 + 78.00 51.00 85.231 + 78.00 54.00 107.220 + 78.00 57.00 107.220 + 78.00 60.00 111.778 + 78.00 63.00 112.690 + 78.00 66.00 112.690 + 78.00 69.00 112.690 + 78.00 72.00 109.307 + 81.00 6.00 321.700 + 81.00 15.00 216.836 + 81.00 18.00 260.146 + 81.00 21.00 268.682 + 81.00 24.00 250.127 + 81.00 27.00 109.302 + 81.00 30.00 47.741 + 81.00 33.00 20.283 + 81.00 36.00 4.940 + 81.00 39.00 4.940 + 81.00 42.00 4.940 + 81.00 45.00 20.671 + 81.00 48.00 30.259 + 81.00 51.00 107.220 + 81.00 54.00 107.220 + 81.00 57.00 107.372 + 81.00 60.00 112.690 + 81.00 63.00 112.690 + 81.00 66.00 112.690 + 81.00 69.00 111.645 + 81.00 72.00 100.850 + 84.00 18.00 261.013 + 84.00 21.00 290.768 + 84.00 24.00 687.294 + 84.00 27.00 82.100 + 84.00 30.00 53.568 + 84.00 33.00 26.517 + 84.00 36.00 4.940 + 84.00 39.00 4.940 + 84.00 42.00 4.940 + 84.00 45.00 8.743 + 84.00 48.00 58.446 + 84.00 51.00 107.220 + 84.00 54.00 107.220 + 84.00 57.00 107.676 + 84.00 60.00 112.538 + 84.00 63.00 112.690 + 84.00 66.00 112.690 + 84.00 69.00 108.086 + 84.00 72.00 100.850 + 87.00 21.00 973.079 + 87.00 24.00 956.648 + 87.00 27.00 117.337 + 87.00 30.00 53.568 + 87.00 33.00 14.804 + 87.00 36.00 4.940 + 87.00 39.00 4.940 + 87.00 42.00 4.940 + 87.00 45.00 4.767 + 87.00 48.00 59.150 + 87.00 51.00 109.499 + 87.00 54.00 107.220 + 87.00 57.00 108.132 + 87.00 60.00 112.690 + 87.00 63.00 112.690 + 87.00 66.00 111.703 + 87.00 69.00 100.850 + 87.00 72.00 100.850 + 87.00 75.00 100.850 + 90.00 12.00 626.550 + 90.00 18.00 626.550 + 90.00 21.00 1094.069 + 90.00 24.00 730.515 + 90.00 27.00 130.600 + 90.00 30.00 59.276 + 90.00 33.00 64.450 + 90.00 36.00 4.940 + 90.00 39.00 4.940 + 90.00 42.00 4.940 + 90.00 45.00 5.144 + 90.00 48.00 27.276 + 90.00 51.00 112.386 + 90.00 54.00 107.828 + 90.00 57.00 110.867 + 90.00 60.00 112.690 + 90.00 63.00 112.690 + 90.00 66.00 111.046 + 90.00 69.00 100.850 + 90.00 72.00 100.850 + 90.00 75.00 100.850 + 93.00 3.00 603.770 + 93.00 15.00 626.550 + 93.00 18.00 626.550 + 93.00 21.00 618.573 + 93.00 24.00 538.801 + 93.00 27.00 338.223 + 93.00 30.00 62.897 + 93.00 33.00 75.073 + 93.00 36.00 4.940 + 93.00 39.00 4.940 + 93.00 42.00 5.006 + 93.00 45.00 5.280 + 93.00 48.00 32.757 + 93.00 51.00 111.778 + 93.00 54.00 111.778 + 93.00 57.00 112.690 + 93.00 60.00 112.690 + 93.00 63.00 112.690 + 93.00 66.00 111.703 + 93.00 69.00 100.850 + 93.00 72.00 100.850 + 93.00 75.00 100.850 + 96.00 -3.00 603.770 + 96.00 0.00 603.770 + 96.00 3.00 603.770 + 96.00 6.00 481.180 + 96.00 9.00 553.865 + 96.00 12.00 594.246 + 96.00 15.00 537.765 + 96.00 18.00 521.227 + 96.00 21.00 626.550 + 96.00 24.00 466.667 + 96.00 27.00 274.303 + 96.00 30.00 70.251 + 96.00 33.00 46.320 + 96.00 36.00 6.830 + 96.00 39.00 5.398 + 96.00 42.00 5.362 + 96.00 45.00 5.343 + 96.00 48.00 30.836 + 96.00 51.00 103.623 + 96.00 54.00 112.690 + 96.00 57.00 112.690 + 96.00 60.00 112.690 + 96.00 63.00 112.690 + 96.00 66.00 108.086 + 96.00 69.00 100.850 + 96.00 72.00 100.850 + 96.00 75.00 100.850 + 99.00 -6.00 603.770 + 99.00 -3.00 603.770 + 99.00 0.00 602.388 + 99.00 3.00 566.057 + 99.00 6.00 490.888 + 99.00 9.00 522.714 + 99.00 12.00 304.332 + 99.00 15.00 209.580 + 99.00 18.00 272.729 + 99.00 21.00 161.857 + 99.00 24.00 73.231 + 99.00 27.00 97.796 + 99.00 30.00 100.550 + 99.00 33.00 27.987 + 99.00 36.00 16.007 + 99.00 39.00 5.690 + 99.00 42.00 5.348 + 99.00 45.00 6.030 + 99.00 48.00 7.530 + 99.00 51.00 86.361 + 99.00 54.00 112.690 + 99.00 57.00 112.690 + 99.00 60.00 112.690 + 99.00 63.00 112.690 + 99.00 66.00 102.166 + 99.00 69.00 100.850 + 99.00 72.00 100.850 + 99.00 75.00 100.850 + 99.00 78.00 100.850 + 102.00 -6.00 603.770 + 102.00 -3.00 603.770 + 102.00 0.00 572.771 + 102.00 3.00 563.700 + 102.00 9.00 370.868 + 102.00 12.00 308.947 + 102.00 15.00 209.580 + 102.00 18.00 365.586 + 102.00 21.00 271.784 + 102.00 24.00 160.609 + 102.00 27.00 100.550 + 102.00 30.00 93.953 + 102.00 33.00 45.578 + 102.00 36.00 13.976 + 102.00 39.00 6.551 + 102.00 42.00 5.280 + 102.00 45.00 6.343 + 102.00 48.00 10.493 + 102.00 51.00 100.850 + 102.00 54.00 107.099 + 102.00 57.00 112.690 + 102.00 60.00 112.690 + 102.00 63.00 110.059 + 102.00 66.00 100.850 + 102.00 69.00 100.850 + 102.00 72.00 100.850 + 102.00 75.00 100.850 + 102.00 78.00 100.850 + 105.00 -9.00 415.670 + 105.00 -6.00 603.770 + 105.00 -3.00 603.770 + 105.00 9.00 463.804 + 105.00 12.00 379.984 + 105.00 15.00 390.731 + 105.00 18.00 474.162 + 105.00 21.00 345.045 + 105.00 24.00 194.678 + 105.00 27.00 100.550 + 105.00 30.00 114.720 + 105.00 33.00 101.515 + 105.00 36.00 22.934 + 105.00 39.00 17.017 + 105.00 42.00 5.314 + 105.00 45.00 5.968 + 105.00 48.00 10.917 + 105.00 51.00 71.570 + 105.00 54.00 100.850 + 105.00 57.00 110.717 + 105.00 60.00 112.690 + 105.00 63.00 106.441 + 105.00 66.00 100.850 + 105.00 69.00 100.850 + 105.00 72.00 100.850 + 105.00 75.00 100.850 + 108.00 -9.00 415.670 + 108.00 -3.00 676.050 + 108.00 0.00 696.186 + 108.00 3.00 676.050 + 108.00 9.00 481.720 + 108.00 12.00 481.720 + 108.00 15.00 481.720 + 108.00 18.00 229.950 + 108.00 21.00 236.882 + 108.00 24.00 164.231 + 108.00 27.00 93.830 + 108.00 30.00 206.825 + 108.00 33.00 150.551 + 108.00 36.00 43.776 + 108.00 39.00 19.981 + 108.00 42.00 5.360 + 108.00 45.00 5.280 + 108.00 48.00 23.430 + 108.00 51.00 48.797 + 108.00 54.00 100.850 + 108.00 57.00 102.166 + 108.00 60.00 103.481 + 108.00 63.00 101.179 + 108.00 66.00 100.850 + 108.00 69.00 100.850 + 108.00 72.00 100.850 + 108.00 75.00 100.850 + 111.00 -27.00 16.410 + 111.00 -24.00 16.410 + 111.00 -9.00 415.670 + 111.00 -6.00 676.050 + 111.00 -3.00 676.050 + 111.00 0.00 717.041 + 111.00 3.00 751.560 + 111.00 21.00 327.385 + 111.00 24.00 158.739 + 111.00 27.00 127.794 + 111.00 30.00 275.464 + 111.00 33.00 106.462 + 111.00 36.00 40.556 + 111.00 39.00 26.996 + 111.00 42.00 5.644 + 111.00 45.00 5.280 + 111.00 48.00 57.031 + 111.00 51.00 71.945 + 111.00 54.00 100.850 + 111.00 57.00 100.850 + 111.00 60.00 100.850 + 111.00 63.00 100.850 + 111.00 66.00 100.850 + 111.00 69.00 100.850 + 111.00 72.00 100.850 + 111.00 75.00 100.850 + 114.00 -36.00 16.410 + 114.00 -33.00 16.410 + 114.00 -30.00 16.410 + 114.00 -27.00 16.410 + 114.00 -24.00 16.410 + 114.00 -21.00 16.410 + 114.00 -9.00 415.670 + 114.00 -6.00 676.050 + 114.00 -3.00 676.050 + 114.00 0.00 686.837 + 114.00 3.00 759.282 + 114.00 6.00 751.560 + 114.00 21.00 344.330 + 114.00 24.00 349.657 + 114.00 27.00 355.610 + 114.00 30.00 206.993 + 114.00 33.00 66.348 + 114.00 36.00 38.977 + 114.00 39.00 31.332 + 114.00 42.00 8.707 + 114.00 45.00 5.371 + 114.00 48.00 54.461 + 114.00 51.00 117.662 + 114.00 54.00 101.430 + 114.00 57.00 100.850 + 114.00 60.00 100.850 + 114.00 63.00 100.850 + 114.00 66.00 100.850 + 114.00 69.00 100.850 + 114.00 72.00 100.850 + 117.00 -36.00 16.410 + 117.00 -33.00 16.410 + 117.00 -30.00 16.410 + 117.00 -27.00 17.299 + 117.00 -24.00 16.410 + 117.00 -21.00 19.967 + 117.00 -12.00 415.670 + 117.00 -9.00 415.670 + 117.00 -6.00 597.310 + 117.00 -3.00 611.626 + 117.00 0.00 676.050 + 117.00 3.00 737.402 + 117.00 6.00 686.740 + 117.00 9.00 492.280 + 117.00 21.00 344.330 + 117.00 24.00 346.065 + 117.00 27.00 353.103 + 117.00 30.00 300.856 + 117.00 33.00 71.828 + 117.00 36.00 50.658 + 117.00 39.00 34.062 + 117.00 42.00 34.669 + 117.00 45.00 27.404 + 117.00 48.00 81.393 + 117.00 51.00 121.140 + 117.00 54.00 102.589 + 117.00 57.00 100.850 + 117.00 60.00 100.850 + 117.00 63.00 100.850 + 117.00 66.00 100.850 + 117.00 69.00 100.850 + 117.00 72.00 100.850 + 120.00 -36.00 16.410 + 120.00 -33.00 16.410 + 120.00 -30.00 19.967 + 120.00 -27.00 43.085 + 120.00 -24.00 36.861 + 120.00 -21.00 45.859 + 120.00 -18.00 48.420 + 120.00 -12.00 415.670 + 120.00 -9.00 415.670 + 120.00 -6.00 597.310 + 120.00 -3.00 597.310 + 120.00 0.00 597.310 + 120.00 6.00 492.280 + 120.00 9.00 492.280 + 120.00 12.00 492.280 + 120.00 15.00 492.280 + 120.00 18.00 492.280 + 120.00 21.00 475.250 + 120.00 24.00 475.250 + 120.00 27.00 355.610 + 120.00 30.00 246.103 + 120.00 33.00 74.020 + 120.00 36.00 49.180 + 120.00 39.00 36.480 + 120.00 42.00 38.627 + 120.00 45.00 40.618 + 120.00 48.00 48.022 + 120.00 51.00 76.133 + 120.00 54.00 104.328 + 120.00 57.00 100.850 + 120.00 60.00 100.850 + 120.00 63.00 100.850 + 120.00 66.00 100.850 + 120.00 69.00 100.850 + 120.00 72.00 100.850 + 123.00 -36.00 16.410 + 123.00 -33.00 30.532 + 123.00 -30.00 46.642 + 123.00 -27.00 48.420 + 123.00 -24.00 48.420 + 123.00 -21.00 48.420 + 123.00 -18.00 48.420 + 123.00 -15.00 48.420 + 123.00 -12.00 415.670 + 123.00 -9.00 415.670 + 123.00 -3.00 597.310 + 123.00 0.00 597.310 + 123.00 3.00 492.280 + 123.00 6.00 492.280 + 123.00 9.00 492.280 + 123.00 12.00 492.280 + 123.00 36.00 179.300 + 123.00 39.00 78.109 + 123.00 42.00 39.560 + 123.00 45.00 39.560 + 123.00 48.00 39.560 + 123.00 51.00 71.207 + 123.00 54.00 111.865 + 123.00 57.00 100.850 + 123.00 60.00 100.850 + 123.00 63.00 100.850 + 123.00 66.00 100.850 + 123.00 69.00 100.850 + 123.00 72.00 100.850 + 126.00 -33.00 48.420 + 126.00 -30.00 48.420 + 126.00 -27.00 48.420 + 126.00 -24.00 48.420 + 126.00 -21.00 48.420 + 126.00 -18.00 48.420 + 126.00 -15.00 48.420 + 126.00 -9.00 415.670 + 126.00 -6.00 597.310 + 126.00 -3.00 597.310 + 126.00 0.00 597.310 + 126.00 6.00 492.280 + 126.00 33.00 265.810 + 126.00 36.00 243.485 + 126.00 39.00 156.010 + 126.00 42.00 45.378 + 126.00 45.00 40.618 + 126.00 48.00 71.373 + 126.00 51.00 114.707 + 126.00 54.00 114.763 + 126.00 57.00 100.850 + 126.00 60.00 100.850 + 126.00 63.00 100.850 + 126.00 66.00 100.850 + 126.00 69.00 100.850 + 126.00 72.00 100.850 + 129.00 -33.00 48.420 + 129.00 -30.00 48.420 + 129.00 -27.00 48.420 + 129.00 -24.00 48.420 + 129.00 -21.00 48.420 + 129.00 -18.00 48.420 + 129.00 -15.00 48.420 + 129.00 -12.00 48.420 + 129.00 -9.00 597.310 + 129.00 -6.00 597.310 + 129.00 -3.00 597.310 + 129.00 30.00 455.040 + 129.00 33.00 420.635 + 129.00 36.00 265.810 + 129.00 39.00 179.300 + 129.00 42.00 93.412 + 129.00 45.00 62.107 + 129.00 48.00 109.447 + 129.00 51.00 121.720 + 129.00 54.00 114.763 + 129.00 57.00 100.850 + 129.00 60.00 100.850 + 129.00 63.00 100.850 + 129.00 66.00 100.850 + 129.00 69.00 100.850 + 132.00 -36.00 48.420 + 132.00 -33.00 48.420 + 132.00 -30.00 48.420 + 132.00 -27.00 48.420 + 132.00 -24.00 48.420 + 132.00 -21.00 48.420 + 132.00 -18.00 48.420 + 132.00 -15.00 48.420 + 132.00 -12.00 48.420 + 132.00 -9.00 597.310 + 132.00 -6.00 597.310 + 132.00 -3.00 597.310 + 132.00 30.00 455.040 + 132.00 33.00 455.040 + 132.00 42.00 121.720 + 132.00 45.00 84.900 + 132.00 48.00 119.967 + 132.00 51.00 121.720 + 132.00 54.00 113.024 + 132.00 57.00 100.850 + 132.00 60.00 100.850 + 132.00 63.00 100.850 + 132.00 66.00 100.850 + 132.00 69.00 100.850 + 135.00 -36.00 48.420 + 135.00 -33.00 48.420 + 135.00 -30.00 48.420 + 135.00 -27.00 48.420 + 135.00 -24.00 48.420 + 135.00 -21.00 48.420 + 135.00 -18.00 48.420 + 135.00 -15.00 48.420 + 135.00 -6.00 597.310 + 135.00 -3.00 597.310 + 135.00 33.00 455.040 + 135.00 36.00 455.040 + 135.00 42.00 121.720 + 135.00 45.00 121.720 + 135.00 48.00 121.720 + 135.00 51.00 121.720 + 135.00 54.00 106.067 + 135.00 57.00 100.850 + 135.00 60.00 100.850 + 135.00 63.00 100.850 + 135.00 66.00 100.850 + 135.00 69.00 100.850 + 135.00 75.00 100.850 + 138.00 -39.00 99.530 + 138.00 -36.00 31.264 + 138.00 -33.00 46.173 + 138.00 -30.00 48.420 + 138.00 -27.00 48.420 + 138.00 -24.00 48.420 + 138.00 -21.00 48.420 + 138.00 -18.00 48.420 + 138.00 -9.00 597.310 + 138.00 -6.00 597.310 + 138.00 -3.00 597.310 + 138.00 33.00 455.040 + 138.00 36.00 455.040 + 138.00 39.00 425.378 + 138.00 42.00 306.730 + 138.00 45.00 121.720 + 138.00 48.00 121.720 + 138.00 51.00 121.720 + 138.00 54.00 114.763 + 138.00 57.00 100.850 + 138.00 60.00 100.850 + 138.00 63.00 100.850 + 138.00 66.00 100.850 + 138.00 69.00 100.850 + 138.00 72.00 100.850 + 138.00 75.00 100.850 + 141.00 -39.00 66.094 + 141.00 -36.00 28.200 + 141.00 -33.00 33.817 + 141.00 -30.00 47.297 + 141.00 -27.00 48.420 + 141.00 -24.00 48.420 + 141.00 -21.00 48.420 + 141.00 -18.00 48.420 + 141.00 -15.00 48.420 + 141.00 -12.00 363.579 + 141.00 -9.00 783.790 + 141.00 -6.00 783.790 + 141.00 -3.00 783.790 + 141.00 36.00 455.040 + 141.00 39.00 455.040 + 141.00 42.00 306.730 + 141.00 45.00 146.601 + 141.00 48.00 100.850 + 141.00 51.00 104.145 + 141.00 54.00 100.850 + 141.00 57.00 100.850 + 141.00 60.00 100.850 + 141.00 63.00 100.850 + 141.00 66.00 100.850 + 141.00 69.00 100.850 + 141.00 72.00 100.850 + 141.00 75.00 100.850 + 144.00 -45.00 248.790 + 144.00 -42.00 248.790 + 144.00 -39.00 61.636 + 144.00 -36.00 28.200 + 144.00 -33.00 28.200 + 144.00 -30.00 29.323 + 144.00 -27.00 40.896 + 144.00 -24.00 56.220 + 144.00 -21.00 60.652 + 144.00 -18.00 49.256 + 144.00 -15.00 48.420 + 144.00 -9.00 783.790 + 144.00 -6.00 783.790 + 144.00 42.00 306.730 + 144.00 48.00 100.850 + 144.00 57.00 100.850 + 144.00 60.00 100.850 + 144.00 63.00 100.850 + 144.00 66.00 100.850 + 144.00 69.00 100.850 + 144.00 72.00 100.850 + 144.00 75.00 100.850 + 147.00 -45.00 248.790 + 147.00 -42.00 248.790 + 147.00 -39.00 85.264 + 147.00 -36.00 42.070 + 147.00 -33.00 32.396 + 147.00 -30.00 28.200 + 147.00 -27.00 52.331 + 147.00 -24.00 65.970 + 147.00 -21.00 65.970 + 147.00 -12.00 783.790 + 147.00 -9.00 783.790 + 147.00 -6.00 783.790 + 147.00 45.00 306.730 + 147.00 57.00 100.850 + 147.00 60.00 100.850 + 147.00 63.00 100.850 + 147.00 66.00 100.850 + 147.00 69.00 100.850 + 147.00 72.00 100.850 + 147.00 75.00 100.850 + 150.00 -36.00 99.530 + 150.00 -33.00 77.915 + 150.00 -30.00 50.463 + 150.00 -27.00 63.681 + 150.00 -24.00 65.970 + 150.00 -12.00 783.790 + 150.00 -9.00 783.790 + 150.00 -6.00 783.790 + 150.00 57.00 100.850 + 150.00 60.00 100.850 + 150.00 63.00 100.850 + 150.00 66.00 100.850 + 150.00 69.00 100.850 + 153.00 -33.00 99.530 + 153.00 -30.00 86.106 + 153.00 -27.00 65.970 + 153.00 -9.00 783.790 + 153.00 -6.00 783.790 + 153.00 48.00 100.850 + 153.00 54.00 100.850 + 153.00 57.00 100.850 + 153.00 60.00 100.850 + 153.00 63.00 100.850 + 153.00 66.00 100.850 + 153.00 69.00 100.850 + 156.00 -9.00 482.750 + 156.00 51.00 100.850 + 156.00 54.00 100.850 + 156.00 57.00 100.850 + 156.00 60.00 100.850 + 156.00 63.00 100.850 + 156.00 66.00 100.850 + 156.00 69.00 100.850 + 159.00 -12.00 482.750 + 159.00 -9.00 482.750 + 159.00 51.00 100.850 + 159.00 54.00 100.850 + 159.00 57.00 100.850 + 159.00 60.00 100.850 + 159.00 63.00 100.850 + 159.00 66.00 100.850 + 159.00 69.00 100.850 + 162.00 -21.00 482.750 + 162.00 54.00 100.850 + 162.00 57.00 100.850 + 162.00 60.00 100.850 + 162.00 63.00 100.850 + 162.00 66.00 100.850 + 162.00 69.00 100.850 + 165.00 -48.00 382.330 + 165.00 -45.00 382.330 + 165.00 -24.00 482.750 + 165.00 -18.00 482.750 + 165.00 60.00 100.850 + 165.00 63.00 100.850 + 165.00 66.00 100.850 + 165.00 69.00 100.850 + 168.00 -48.00 382.330 + 168.00 -45.00 382.330 + 168.00 60.00 100.850 + 168.00 63.00 100.850 + 168.00 66.00 100.850 + 168.00 69.00 100.850 + 171.00 -45.00 382.330 + 171.00 -42.00 382.330 + 171.00 -36.00 382.330 + 171.00 60.00 100.850 + 171.00 63.00 100.850 + 171.00 66.00 100.850 + 171.00 69.00 100.850 + 174.00 -42.00 382.330 + 174.00 -39.00 382.330 + 174.00 -36.00 382.330 + 174.00 60.00 100.850 + 174.00 63.00 100.850 + 174.00 66.00 100.850 + 174.00 69.00 100.850 + 177.00 -39.00 382.330 + 177.00 -21.00 482.750 + 177.00 -18.00 482.750 + 177.00 60.00 100.850 + 177.00 63.00 100.850 + 177.00 66.00 100.850 + 177.00 69.00 100.850 diff --git a/src/ac/ed/lurg/ModelConfig.java b/src/ac/ed/lurg/ModelConfig.java index 344e9e74c46ba49fcff2fdbeb36b6b7a1a809db4..2e1a43b06db655d73fb66930e258fb1f7311cfa1 100644 --- a/src/ac/ed/lurg/ModelConfig.java +++ b/src/ac/ed/lurg/ModelConfig.java @@ -111,8 +111,10 @@ public class ModelConfig { public static final String SPATIAL_DATA_DIR = getProperty("SPATIAL_DATA_DIR", DATA_DIR + File.separator + SPATIAL_DIR_NAME); public static final String INITAL_LAND_COVER_FILE = SPATIAL_DATA_DIR + File.separator + "netfract_hurtt_2000.txt"; public static final String COUNTRY_BOUNDARY_FILE = SPATIAL_DATA_DIR + File.separator + "country_boundaries.asc"; - public static final String IRRIGATION_COST_FILE = SPATIAL_DATA_DIR + File.separator + "irrigation_cost.asc";; - + public static final String IRRIGATION_COST_FILE = SPATIAL_DATA_DIR + File.separator + "irrigation_cost.asc"; + public static final String IRRIGATION_CONSTRAINT_FILE = SPATIAL_DATA_DIR + File.separator + "blue_water_available_pseudoCRU_rcp8p5_2004_2013_grid_allhdyro_mm_3deg.txt"; + public static final String IRRIG_MAX_WATER_FILE = YIELD_DIR + File.separator + "max_irrig_water.out"; + // Output public static final String TOTAL_LAND_COVER_FILE = OUTPUT_DIR + File.separator + "total_lc.txt"; public static final boolean OUTPUT_FOR_LPJG = getBooleanProperty("OUTPUT_FOR_LPJG", true); diff --git a/src/ac/ed/lurg/ModelMain.java b/src/ac/ed/lurg/ModelMain.java index 6af6aa816df39a7311fb094f8975deaf032f5b2c..6991c744ae186a8b03d216e1df443d604c9973c3 100644 --- a/src/ac/ed/lurg/ModelMain.java +++ b/src/ac/ed/lurg/ModelMain.java @@ -22,7 +22,9 @@ import ac.ed.lurg.landuse.AreasItem; import ac.ed.lurg.landuse.CropUsageData; import ac.ed.lurg.landuse.CropUsageReader; import ac.ed.lurg.landuse.IntensitiesItem; -import ac.ed.lurg.landuse.IrrigationCostItem; +import ac.ed.lurg.landuse.IrrigationConstraintReader; +import ac.ed.lurg.landuse.IrrigationItem; +import ac.ed.lurg.landuse.IrrigationMaxAmountReader; import ac.ed.lurg.landuse.IrrigiationCostReader; import ac.ed.lurg.landuse.LandCoverItem; import ac.ed.lurg.landuse.LandCoverReader; @@ -208,7 +210,7 @@ public class ModelMain { private void writeMarketFile(Timestep timestep, RasterSet<IntensitiesItem> intensityRaster, RasterSet<AreasItem> cropAreaRaster) { try { - StringBuffer sbHeadings = new StringBuffer("Year, Cropland (Mha), Pasture (Mha), Natural (Mha), Fert crop (Gt), Fert pasture (Gt)"); + StringBuffer sbHeadings = new StringBuffer("Year, Cropland (Mha), Pasture (Mha), Natural (Mha), Fert crop (Mt), Fert pasture (Mt), Fert crop (M litre), Fert pasture (M litre)"); for (CropType crop : CropType.getImportedTypes()) sbHeadings.append(",Px_" + crop.getGamsName()); @@ -224,6 +226,9 @@ public class ModelMain { sbData.append(String.format(", %.1f", IntensitiesItem.getFertiliserTotal(intensityRaster.values(), CropType.getCropsLessPasture())/1000)); sbData.append(String.format(", %.1f", IntensitiesItem.getFertiliserTotal(intensityRaster.values(), CropType.PASTURE)/1000)); + sbData.append(String.format(", %.1f", IntensitiesItem.getIrrigationTotal(intensityRaster.values(), CropType.getCropsLessPasture()))); + sbData.append(String.format(", %.1f", IntensitiesItem.getIrrigationTotal(intensityRaster.values(), CropType.PASTURE))); + for (CropType crop : CropType.getImportedTypes() ) sbData.append(String.format(", %.3f", prevWorldPrices.get(crop))); @@ -294,7 +299,7 @@ public class ModelMain { Collection<CountryAgent> countryAgents = new HashSet<CountryAgent>(); RasterSet<LandCoverItem> initLC = getInitialLandCover(); - RasterSet<IrrigationCostItem> allIrrigationCosts = getIrrigationCosts(); + RasterSet<IrrigationItem> allIrrigationCosts = getIrrigationCosts(); Map<CompositeCountry, Map<CropType, CropUsageData>> cropUsageDataMap = new CropUsageReader(compositeCountryManager).getCommodityData(); for (CompositeCountry cc : countryGrouping) { @@ -308,7 +313,7 @@ public class ModelMain { List<RasterKey> keys = countryBoundaryRaster.getKeysFor(cc); RasterSet<LandCoverItem> initCountryLC = initLC.popSubsetForKeys(new RasterSet<LandCoverItem>(initLC.getHeaderDetails()), keys); - RasterSet<IrrigationCostItem> irrigationCosts = allIrrigationCosts.popSubsetForKeys(new RasterSet<IrrigationCostItem>(allIrrigationCosts.getHeaderDetails()), keys); + RasterSet<IrrigationItem> irrigationCosts = allIrrigationCosts.popSubsetForKeys(new RasterSet<IrrigationItem>(allIrrigationCosts.getHeaderDetails()), keys); Map<CropType, CropUsageData> countryCommodityData = cropUsageDataMap.get(cc); if (countryCommodityData == null) { @@ -338,17 +343,20 @@ public class ModelMain { return yieldReader.getRasterData(timestep); } - private RasterSet<IrrigationCostItem> getIrrigationCosts() { - RasterSet<IrrigationCostItem> irigCosts = new RasterSet<IrrigationCostItem>(desiredProjection) { + private RasterSet<IrrigationItem> getIrrigationCosts() { + RasterSet<IrrigationItem> irigCosts = new RasterSet<IrrigationItem>(desiredProjection) { private static final long serialVersionUID = 8393130687550888654L; - protected IrrigationCostItem createRasterData() { - return new IrrigationCostItem(); + protected IrrigationItem createRasterData() { + return new IrrigationItem(); } }; - IrrigiationCostReader irigCostReader = new IrrigiationCostReader(irigCosts); - irigCostReader.getRasterDataFromFile(ModelConfig.IRRIGATION_COST_FILE); + new IrrigiationCostReader(irigCosts).getRasterDataFromFile(ModelConfig.IRRIGATION_COST_FILE); + new IrrigationConstraintReader(irigCosts).getRasterDataFromFile(ModelConfig.IRRIGATION_CONSTRAINT_FILE); + new IrrigationMaxAmountReader(irigCosts).getRasterDataFromFile(ModelConfig.IRRIG_MAX_WATER_FILE); + + return irigCosts; } } \ No newline at end of file diff --git a/src/ac/ed/lurg/country/CountryAgent.java b/src/ac/ed/lurg/country/CountryAgent.java index 550a05c433694657140fa6c79ba2432ab44fffa0..e81e6aab2aeaa89516f53bf304a2933567859871 100644 --- a/src/ac/ed/lurg/country/CountryAgent.java +++ b/src/ac/ed/lurg/country/CountryAgent.java @@ -11,7 +11,7 @@ import ac.ed.lurg.country.gams.GamsRasterOutput; import ac.ed.lurg.demand.DemandManager; import ac.ed.lurg.landuse.AreasItem; import ac.ed.lurg.landuse.CropUsageData; -import ac.ed.lurg.landuse.IrrigationCostItem; +import ac.ed.lurg.landuse.IrrigationItem; import ac.ed.lurg.landuse.LandCoverItem; import ac.ed.lurg.types.CommodityType; import ac.ed.lurg.types.CropType; @@ -29,10 +29,10 @@ public class CountryAgent { private Timestep currentTimestep; private YieldRaster countryYieldSurfaces; - private RasterSet<IrrigationCostItem> irrigationCostRaster; + private RasterSet<IrrigationItem> irrigationCostRaster; public CountryAgent(DemandManager demandManager, CompositeCountry country, RasterSet<LandCoverItem> initialLC, - RasterSet<IrrigationCostItem> irrigationCostRaster, Map<CropType, CropUsageData> cropUsageData) { + RasterSet<IrrigationItem> irrigationCostRaster, Map<CropType, CropUsageData> cropUsageData) { this.demandManager = demandManager; this.country = country; diff --git a/src/ac/ed/lurg/country/gams/GamsLocationInput.java b/src/ac/ed/lurg/country/gams/GamsLocationInput.java index f780d39a714d235aa24b7445998c8c13bad46b20..5ec01267f01396bb6948ee17c2624e7c5fee9c09 100644 --- a/src/ac/ed/lurg/country/gams/GamsLocationInput.java +++ b/src/ac/ed/lurg/country/gams/GamsLocationInput.java @@ -4,7 +4,7 @@ import java.util.Map; import ac.ed.lurg.Timestep; import ac.ed.lurg.landuse.AreasItem; -import ac.ed.lurg.landuse.IrrigationCostItem; +import ac.ed.lurg.landuse.IrrigationItem; import ac.ed.lurg.types.CropType; import ac.ed.lurg.yield.YieldResponsesItem; @@ -13,11 +13,11 @@ public class GamsLocationInput { private Timestep timestep; private Map<Integer, ? extends YieldResponsesItem> yields; private Map<Integer, ? extends AreasItem> previousAreas; - private Map<Integer, ? extends IrrigationCostItem> irrigationCosts; + private Map<Integer, ? extends IrrigationItem> irrigationCosts; private GamsCountryInput countryInput; public GamsLocationInput(Timestep timestep, Map<Integer, ? extends YieldResponsesItem> yields, Map<Integer, ? extends AreasItem> previousAreas, - Map<Integer, ? extends IrrigationCostItem> irrigationCosts, GamsCountryInput countryInput) { + Map<Integer, ? extends IrrigationItem> irrigationCosts, GamsCountryInput countryInput) { super(); this.timestep = timestep; this.yields = yields; @@ -39,7 +39,7 @@ public class GamsLocationInput { return previousAreas; } - public Map<Integer, ? extends IrrigationCostItem> getIrrigationCosts() { + public Map<Integer, ? extends IrrigationItem> getIrrigationCosts() { return irrigationCosts; } diff --git a/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java b/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java index 9e83aea186b0d8dcaa20f97311f87110f4f18930..2bb0e6b8f39e34677dd3a4e43e1ea256028d166e 100644 --- a/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java +++ b/src/ac/ed/lurg/country/gams/GamsLocationOptimiser.java @@ -11,7 +11,7 @@ import ac.ed.lurg.landuse.AreasItem; import ac.ed.lurg.landuse.CropUsageData; import ac.ed.lurg.landuse.IntensitiesItem; import ac.ed.lurg.landuse.Intensity; -import ac.ed.lurg.landuse.IrrigationCostItem; +import ac.ed.lurg.landuse.IrrigationItem; import ac.ed.lurg.types.CommodityType; import ac.ed.lurg.types.CropType; import ac.ed.lurg.types.LandCoverType; @@ -118,9 +118,9 @@ public class GamsLocationOptimiser { if (DEBUG) LogWriter.println("\nIrrigation cost"); GAMSParameter irrigCostP = inDB.addParameter("irrigCost", 1); - for (Entry<Integer, ? extends IrrigationCostItem> entry : inputData.getIrrigationCosts().entrySet()) { + for (Entry<Integer, ? extends IrrigationItem> entry : inputData.getIrrigationCosts().entrySet()) { Integer locationId = entry.getKey(); - IrrigationCostItem irrigCostItem = entry.getValue(); + IrrigationItem irrigCostItem = entry.getValue(); double irrigCost = irrigCostItem.getIrrigCost(); if (DEBUG) LogWriter.println(String.format(" %d %15s,\t %.1f", locationId, "irrigCost", irrigCost)); irrigCostP.addRecord(Integer.toString(locationId)).setValue(irrigCost); diff --git a/src/ac/ed/lurg/country/gams/GamsLocationTest.java b/src/ac/ed/lurg/country/gams/GamsLocationTest.java index 74e8e5f7a2c35437f92d957fd89bf84cdee7a00c..b47779cdd47e1b7408491fde0a04733970993f60 100644 --- a/src/ac/ed/lurg/country/gams/GamsLocationTest.java +++ b/src/ac/ed/lurg/country/gams/GamsLocationTest.java @@ -6,7 +6,7 @@ import java.util.Map; import ac.ed.lurg.Timestep; import ac.ed.lurg.country.CompositeCountry; import ac.ed.lurg.landuse.AreasItem; -import ac.ed.lurg.landuse.IrrigationCostItem; +import ac.ed.lurg.landuse.IrrigationItem; import ac.ed.lurg.types.CommodityType; import ac.ed.lurg.types.CropType; import ac.ed.lurg.types.LandCoverType; @@ -70,11 +70,11 @@ public class GamsLocationTest { return yresp; } - private Map<Integer, IrrigationCostItem> getIrrigationCosts() { - Map<Integer, IrrigationCostItem> returnMap = new HashMap<Integer, IrrigationCostItem>(); + private Map<Integer, IrrigationItem> getIrrigationCosts() { + Map<Integer, IrrigationItem> returnMap = new HashMap<Integer, IrrigationItem>(); for (int i= 1; i<=NUM_LOCATIONS_PER_COUNTRY; i++) { - IrrigationCostItem dummyIrrigCost = new IrrigationCostItem(); + IrrigationItem dummyIrrigCost = new IrrigationItem(); dummyIrrigCost.setIrrigCost(Math.random()); returnMap.put(i, dummyIrrigCost); } diff --git a/src/ac/ed/lurg/country/gams/GamsRasterInput.java b/src/ac/ed/lurg/country/gams/GamsRasterInput.java index 1ce9f44963d932291d98b6562b38458656748591..af3d8d073dd2b919cef22f5774a0a8695aa6f18b 100644 --- a/src/ac/ed/lurg/country/gams/GamsRasterInput.java +++ b/src/ac/ed/lurg/country/gams/GamsRasterInput.java @@ -2,7 +2,7 @@ package ac.ed.lurg.country.gams; import ac.ed.lurg.Timestep; import ac.ed.lurg.landuse.AreasItem; -import ac.ed.lurg.landuse.IrrigationCostItem; +import ac.ed.lurg.landuse.IrrigationItem; import ac.ed.lurg.yield.YieldRaster; import ac.sac.raster.RasterSet; @@ -11,11 +11,11 @@ public class GamsRasterInput { private Timestep timestep; private YieldRaster yields; private RasterSet<AreasItem> previousAreas; - private RasterSet<IrrigationCostItem> irrigationCost; + private RasterSet<IrrigationItem> irrigationCost; private GamsCountryInput countryInput; public GamsRasterInput(Timestep timestep, YieldRaster yields, RasterSet<AreasItem> previousAreas, - RasterSet<IrrigationCostItem> irrigationCost, GamsCountryInput countryInput) { + RasterSet<IrrigationItem> irrigationCost, GamsCountryInput countryInput) { super(); this.timestep = timestep; this.yields = yields; @@ -32,7 +32,7 @@ public class GamsRasterInput { return previousAreas; } - public RasterSet<IrrigationCostItem> getIrrigationCost() { + public RasterSet<IrrigationItem> getIrrigationCost() { return irrigationCost; } diff --git a/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java b/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java index 963dcd1460319cb71901932410ab14121088b7fe..19d76b6f9e44510821c00d070f65253d05e9352c 100644 --- a/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java +++ b/src/ac/ed/lurg/country/gams/GamsRasterOptimiser.java @@ -12,7 +12,7 @@ import java.util.Set; import ac.ed.lurg.ModelConfig; import ac.ed.lurg.landuse.AreasItem; import ac.ed.lurg.landuse.IntensitiesItem; -import ac.ed.lurg.landuse.IrrigationCostItem; +import ac.ed.lurg.landuse.IrrigationItem; import ac.ed.lurg.types.CropType; import ac.ed.lurg.types.LandCoverType; import ac.ed.lurg.types.YieldType; @@ -285,7 +285,7 @@ public class GamsRasterOptimiser { }.writeOutput(true); */ - RasterSet<IrrigationCostItem> irrigCostRaster = rasterInputData.getIrrigationCost(); + RasterSet<IrrigationItem> irrigCostRaster = rasterInputData.getIrrigationCost(); { // YieldResponsesItem yresp = yieldRaster.get(new RasterKey(40,38));//getFromCoordinates(-118.0, -33.0); @@ -322,8 +322,8 @@ public class GamsRasterOptimiser { LazyTreeMap<Integer, AreasItem> aggregatedAreas = new LazyTreeMap<Integer, AreasItem>() { protected AreasItem createValue() { return new AreasItem(); } }; - LazyTreeMap<Integer, IrrigationCostItem> aggregatedIrrigCosts = new LazyTreeMap<Integer, IrrigationCostItem>() { - protected IrrigationCostItem createValue() { return new IrrigationCostItem(); } + LazyTreeMap<Integer, IrrigationItem> aggregatedIrrigCosts = new LazyTreeMap<Integer, IrrigationItem>() { + protected IrrigationItem createValue() { return new IrrigationItem(); } }; mapping = new LazyTreeMap<Integer, Set<RasterKey>>() { protected Set<RasterKey> createValue() { return new HashSet<RasterKey>(); } @@ -351,7 +351,7 @@ public class GamsRasterOptimiser { continue; } - IrrigationCostItem irrigCost = irrigCostRaster.get(key); + IrrigationItem irrigCost = irrigCostRaster.get(key); int cerealCat = findCategory(wheatlDivisions, yresp.getYieldNone(CropType.WHEAT) + yresp.getYieldMax(CropType.WHEAT)); int pastureCat = findCategory(pastureDivisions, yresp.getYieldNone(CropType.PASTURE) + yresp.getYieldMax(CropType.PASTURE)); @@ -359,7 +359,7 @@ public class GamsRasterOptimiser { AveragingYieldResponsesItem avgYResp = aggregatedYields.lazyGet(id); AreasItem aggAreas = aggregatedAreas.lazyGet(id); - IrrigationCostItem avgIrigCost = aggregatedIrrigCosts.lazyGet(id); + IrrigationItem avgIrigCost = aggregatedIrrigCosts.lazyGet(id); mapping.lazyGet(id).add(key); // Irrigation cost diff --git a/src/ac/ed/lurg/country/gams/GamsRasterTest.java b/src/ac/ed/lurg/country/gams/GamsRasterTest.java index e4968ef61d07a7705b91dacf7a8b983795f1d730..ec5c5e048934d7b3caf0339b59c597f06056a310 100644 --- a/src/ac/ed/lurg/country/gams/GamsRasterTest.java +++ b/src/ac/ed/lurg/country/gams/GamsRasterTest.java @@ -3,7 +3,7 @@ package ac.ed.lurg.country.gams; import ac.ed.lurg.Timestep; import ac.ed.lurg.country.CompositeCountry; import ac.ed.lurg.landuse.AreasItem; -import ac.ed.lurg.landuse.IrrigationCostItem; +import ac.ed.lurg.landuse.IrrigationItem; import ac.ed.lurg.utils.LogWriter; import ac.ed.lurg.yield.YieldRaster; import ac.ed.lurg.yield.YieldResponsesItem; @@ -47,13 +47,13 @@ public class GamsRasterTest extends GamsLocationTest { return testYieldRaster; } - public RasterSet<IrrigationCostItem> getIrrigationCost() { - RasterSet<IrrigationCostItem> testIrrigationCostRaster= new RasterSet<IrrigationCostItem>(null); + public RasterSet<IrrigationItem> getIrrigationCost() { + RasterSet<IrrigationItem> testIrrigationCostRaster= new RasterSet<IrrigationItem>(null); for (int i = 0; i<X_RANGE; i++) { for (int j = 0; j<Y_RANGE; j++) { RasterKey key = new RasterKey(i,j); - IrrigationCostItem item = new IrrigationCostItem(); + IrrigationItem item = new IrrigationItem(); item.setIrrigCost(1.0/(1+i)); testIrrigationCostRaster.put(key, item); } diff --git a/src/ac/ed/lurg/landuse/IntensitiesItem.java b/src/ac/ed/lurg/landuse/IntensitiesItem.java index 2ae1b17474f87360f3c3f20c689d919f636e8216..37ec5897af921908ffa350523889cb7d62cd597b 100644 --- a/src/ac/ed/lurg/landuse/IntensitiesItem.java +++ b/src/ac/ed/lurg/landuse/IntensitiesItem.java @@ -24,12 +24,13 @@ public class IntensitiesItem implements RasterItem { intensityMap.put(crop, intensityData); } - + /** Fertiliser rate in kg/ha */ public double getFertiliserRate(CropType crop) { Intensity i = getIntensity(crop); return (i == null) ? 0 : i.getFertiliserAmount(); } - + + /** Fertiliser amount in kt (1000 tonnes), for this location */ public double getFertiliserAmount(CropType c) { double rate = getFertiliserRate(c); double area = areaItem.getCropArea(c); @@ -65,4 +66,47 @@ public class IntensitiesItem implements RasterItem { public static double getFertiliserTotal(Collection<? extends IntensitiesItem> items, Collection<CropType> crops) { return getFertiliserTotal(items, crops.toArray(new CropType[crops.size()])); } + + /** Irrigation rate in litre/ha */ + public double getIrrigationRate(CropType crop) { + Intensity i = getIntensity(crop); + + return (i == null) ? 0 : i.getIrrigationRate(999); + } + + /** Irrigation amount in M litres, for this location */ + public double getIrrigationAmount(CropType c) { + double rate = getIrrigationRate(c); + double area = areaItem.getCropArea(c); + return rate * area; + } + + public double getIrrigationAverageRate(CropType... crops) { + double irrigTotal = 0; + double areaTotal = 0; + + for (CropType c : crops) { + irrigTotal += getIrrigationAmount(c); + areaTotal = areaItem.getCropArea(c); + } + + return areaTotal > 0 ? irrigTotal / areaTotal : 0; + } + + public static double getIrrigationTotal(Collection<? extends IntensitiesItem> items, CropType... crops) { + double total = 0; + for (IntensitiesItem a : items) { + if (a == null) + continue; + + for (CropType c : crops) + total += a.getIrrigationAmount(c); + } + + return total; + } + + public static double getIrrigationTotal(Collection<? extends IntensitiesItem> items, Collection<CropType> crops) { + return getIrrigationTotal(items, crops.toArray(new CropType[crops.size()])); + } } diff --git a/src/ac/ed/lurg/landuse/Intensity.java b/src/ac/ed/lurg/landuse/Intensity.java index 71a9a22a23a14df17985b1b24e81c784b0a78f49..bd5f83ccadc11fe6885ac475af76d62357ecd5fd 100644 --- a/src/ac/ed/lurg/landuse/Intensity.java +++ b/src/ac/ed/lurg/landuse/Intensity.java @@ -41,4 +41,8 @@ public class Intensity { public double getUnitEnergy() { return unitEnergy; } + + public double getIrrigationRate(double maxIrrigAmount) { + return maxIrrigAmount * irrigationIntensity; + } } diff --git a/src/ac/ed/lurg/landuse/IrrigationConstraintReader.java b/src/ac/ed/lurg/landuse/IrrigationConstraintReader.java new file mode 100644 index 0000000000000000000000000000000000000000..bed7e35e875272440beea46be290090a74b8416f --- /dev/null +++ b/src/ac/ed/lurg/landuse/IrrigationConstraintReader.java @@ -0,0 +1,24 @@ +package ac.ed.lurg.landuse; + +import java.util.Map; + +import ac.ed.lurg.ModelConfig; +import ac.sac.raster.AbstractTabularRasterReader; +import ac.sac.raster.RasterKey; +import ac.sac.raster.RasterSet; + +public class IrrigationConstraintReader extends AbstractTabularRasterReader<IrrigationItem> { + + private static final int MIN_COLS = 3; + + public IrrigationConstraintReader(RasterSet<IrrigationItem> irigCosts) { + super(" +", MIN_COLS, irigCosts); + } + + @Override + protected void setData(RasterKey key, IrrigationItem item, Map<String, Double> rowValues) { + + item.setIrrigConstraint(getValueForCol(rowValues, "Max_irr_water") * ModelConfig.IRRIG_COST_SCALE_FACTOR); + + } +} diff --git a/src/ac/ed/lurg/landuse/IrrigationCostItem.java b/src/ac/ed/lurg/landuse/IrrigationCostItem.java deleted file mode 100644 index 468247c906807a5133e13ad5166083cca5875140..0000000000000000000000000000000000000000 --- a/src/ac/ed/lurg/landuse/IrrigationCostItem.java +++ /dev/null @@ -1,19 +0,0 @@ -package ac.ed.lurg.landuse; - -import ac.sac.raster.RasterItem; - -public class IrrigationCostItem implements RasterItem { - // we have gone from CGIAR Aridity Index to an aridity cost by doing the following: 1 - log10(aridityIndex+1)/5 - // when is the limited to be >= 0 (only Greenland had negative values) - // this gives a value from 1 to 0, with 1 being the most costly and 0 the least. - - private double irrigationCost; - - public double getIrrigCost() { - return irrigationCost; - } - - public void setIrrigCost(double aridityIndex) { - this.irrigationCost = aridityIndex; - } -} diff --git a/src/ac/ed/lurg/landuse/IrrigationItem.java b/src/ac/ed/lurg/landuse/IrrigationItem.java new file mode 100644 index 0000000000000000000000000000000000000000..72a76779e93989afa05f6c2f38924a4921faa06c --- /dev/null +++ b/src/ac/ed/lurg/landuse/IrrigationItem.java @@ -0,0 +1,42 @@ +package ac.ed.lurg.landuse; + +import java.util.HashMap; +import java.util.Map; + +import ac.ed.lurg.types.CropType; +import ac.sac.raster.RasterItem; + +public class IrrigationItem implements RasterItem { + // we have gone from CGIAR Aridity Index to an aridity cost by doing the following: 1 - log10(aridityIndex+1)/5 + // when is the limited to be >= 0 (only Greenland had negative values) + // this gives a value from 1 to 0, with 1 being the most costly and 0 the least. + + private double irrigationCost; // cost per ? of irrigation + private double irrigConstraint; // mm of water available + private Map<CropType, Double> maxIrrigAmounts = new HashMap<CropType, Double>(); // amount of water (litres/ha) used at maximum irrigation, i.e. to achieve no water stress + + public double getIrrigCost() { + return irrigationCost; + } + + public void setIrrigCost(double aridityIndex) { + this.irrigationCost = aridityIndex; + } + + public double getMaxIrrigAmount(CropType c) { + Double d = maxIrrigAmounts.get(c); + return c==null ? Double.NaN : d.doubleValue(); + } + + public void setMaxIrrigAmount(CropType c, double maxIrrig) { + maxIrrigAmounts.put(c, maxIrrig); + } + + public double getIrrigConstraint() { + return irrigConstraint; + } + + public void setIrrigConstraint(double irrigConstraint) { + this.irrigConstraint = irrigConstraint; + } +} diff --git a/src/ac/ed/lurg/landuse/IrrigationMaxAmountReader.java b/src/ac/ed/lurg/landuse/IrrigationMaxAmountReader.java new file mode 100644 index 0000000000000000000000000000000000000000..6f0d6ed30666266cd05a96c0a4309286c194de98 --- /dev/null +++ b/src/ac/ed/lurg/landuse/IrrigationMaxAmountReader.java @@ -0,0 +1,28 @@ +package ac.ed.lurg.landuse; + +import java.util.Map; + +import ac.ed.lurg.types.CropType; +import ac.sac.raster.AbstractTabularRasterReader; +import ac.sac.raster.RasterKey; +import ac.sac.raster.RasterSet; + +public class IrrigationMaxAmountReader extends AbstractTabularRasterReader<IrrigationItem> { + + private static final int MIN_COLS = 6; + + public IrrigationMaxAmountReader(RasterSet<IrrigationItem> irigCosts) { + super(" +", MIN_COLS, irigCosts); + } + + @Override + protected void setData(RasterKey key, IrrigationItem item, Map<String, Double> rowValues) { + + item.setMaxIrrigAmount(CropType.WHEAT, getValueForCol(rowValues, "TeWW")); + item.setMaxIrrigAmount(CropType.MAIZE, getValueForCol(rowValues, "TeCo")); + item.setMaxIrrigAmount(CropType.RICE, getValueForCol(rowValues, "TrRi")); + item.setMaxIrrigAmount(CropType.OILCROPS, getValueForCol(rowValues, "TeWW")); + item.setMaxIrrigAmount(CropType.PULSES, getValueForCol(rowValues, "TeSW")); + item.setMaxIrrigAmount(CropType.STARCHY_ROOTS, getValueForCol(rowValues, "TeSW")); + } +} diff --git a/src/ac/ed/lurg/landuse/IrrigiationCostReader.java b/src/ac/ed/lurg/landuse/IrrigiationCostReader.java index d3a0d5888e24291dd55dcd6a16703d653e8ed763..598acaf9dbdef8e485eed4d287a03e31b8b84f1a 100644 --- a/src/ac/ed/lurg/landuse/IrrigiationCostReader.java +++ b/src/ac/ed/lurg/landuse/IrrigiationCostReader.java @@ -4,14 +4,14 @@ import ac.ed.lurg.ModelConfig; import ac.sac.raster.AbstractRasterReader; import ac.sac.raster.RasterSet; -public class IrrigiationCostReader extends AbstractRasterReader<IrrigationCostItem> { +public class IrrigiationCostReader extends AbstractRasterReader<IrrigationItem> { - public IrrigiationCostReader (RasterSet<IrrigationCostItem> dataset) { + public IrrigiationCostReader (RasterSet<IrrigationItem> dataset) { super(dataset); } @Override - public void setData(IrrigationCostItem item, String token) { + public void setData(IrrigationItem item, String token) { if (!"nan".equals(token)) { double irrigCost = Double.parseDouble(token); item.setIrrigCost(irrigCost * ModelConfig.IRRIG_COST_SCALE_FACTOR); diff --git a/src/ac/ed/lurg/output/LpjgOutputer.java b/src/ac/ed/lurg/output/LpjgOutputer.java index fbb15be83e2f9b82e65006088bd4d7f16710469b..27e6290d3c0f227e9509d1ed35d974259cc00913 100644 --- a/src/ac/ed/lurg/output/LpjgOutputer.java +++ b/src/ac/ed/lurg/output/LpjgOutputer.java @@ -71,18 +71,16 @@ public class LpjgOutputer { double lat = cropAreaRaster.getXCoordin(key); double lon = cropAreaRaster.getYCoordin(key); - - /* double crop = item.getLandCoverArea(LandCoverType.CROPLAND); - double pasture = item.getLandCoverArea(LandCoverType.PASTURE); - double forest = item.getLandCoverArea(LandCoverType.FOREST); - double otherNatural = item.getLandCoverArea(LandCoverType.OTHER_NATURAL); - double barren = item.getLandCoverArea(LandCoverType.BARREN); - irrigWriter.write(String.format("%.2f %.2f %d %.14f %.14f %.14f %.14f", lat, lon, year, crop/area, pasture/area, (forest+otherNatural)/area, barren/area)); - irrigWriter.newLine(); - - */ boolean isSpringWheat = isSpringWheat(key); + double winterWheatIrrig = item.getIrrigationAverageRate(CropType.OILCROPS, isSpringWheat ? null : CropType.WHEAT); + double springWheatIrrig = item.getIrrigationAverageRate(CropType.PULSES, CropType.STARCHY_ROOTS, isSpringWheat ? CropType.WHEAT : null); + double cornIrrig = item.getIrrigationAverageRate(CropType.MAIZE); + double riceIrrig = item.getIrrigationAverageRate(CropType.RICE); + double pastureIrrig = item.getIrrigationAverageRate(CropType.PASTURE); + irrigWriter.write(String.format("%.2f %.2f %d %.14f %.14f %.14f %.14f", lat, lon, year, winterWheatIrrig, springWheatIrrig, cornIrrig, riceIrrig, pastureIrrig)); + irrigWriter.newLine(); + double winterWheatFert = item.getFertiliserAverageRate(CropType.OILCROPS, isSpringWheat ? null : CropType.WHEAT); double springWheatFert = item.getFertiliserAverageRate(CropType.PULSES, CropType.STARCHY_ROOTS, isSpringWheat ? CropType.WHEAT : null); double cornFert = item.getFertiliserAverageRate(CropType.MAIZE); diff --git a/src/ac/sac/raster/AbstractTabularRasterReader.java b/src/ac/sac/raster/AbstractTabularRasterReader.java index 03988c244788a6d24476e62cb207e58e5c189f25..dd3fdb47660c9365916afa97724752bce9d717f7 100644 --- a/src/ac/sac/raster/AbstractTabularRasterReader.java +++ b/src/ac/sac/raster/AbstractTabularRasterReader.java @@ -23,6 +23,11 @@ public abstract class AbstractTabularRasterReader<D extends RasterItem> { this.minColNum = minColNum; } + public AbstractTabularRasterReader (String delimiterRegex, int minColNum, RasterSet<D> dataset) { + this(delimiterRegex, minColNum); + this.dataset = dataset; + } + private String[] parseLine(String line) { return line.trim().split(delimiterRegex); } @@ -30,6 +35,7 @@ public abstract class AbstractTabularRasterReader<D extends RasterItem> { private String[] handleHeader(String[] headertokens) { if (headertokens.length < minColNum) { LogWriter.printlnError("Too few columns"); + throw new RuntimeException("Too few columns in tablular raster file"); } // List<String> colNames = new ArrayList<String>(Arrays.asList(headertokens));