wisp
 
(Arne Babenhauserheide)
2016-06-08: plot world on basemap.

plot world on basemap.

diff --git a/examples/d20world.w b/examples/d20world.w
--- a/examples/d20world.w
+++ b/examples/d20world.w
@@ -205,6 +205,7 @@ define : dienumber->cellidx number
 
 define : latlonsixthslabidx latfromtop lonfrac
        . "calculate the index in a sixth longitude slab of the icosaeder"
+       ; TODO: use shortest surface distance from center of triangle as faster metric.
        let*
           : triangleheight : / (sqrt 3) 2
             length-top-to-bottom-at-lon0 : + 1 (* 2 triangleheight)
@@ -278,18 +279,18 @@ define : main args
        display : d20-as-text world
        newline
        
-       format #t "Diffuse ~A\n" 0.01
-       d20-diffuse world neighbors 0.01
-       display : d20-as-text world
-       newline
-       format #t "Advect ~A\n" 0.1
-       d20-advect world advection-directions 0.1
-       display : d20-as-text world
-       newline
-       format #t "Diffuse ~A\n" 0.1
-       d20-diffuse world neighbors 0.1
-       display : d20-as-text world
-       newline
+       ; format #t "Diffuse ~A\n" 0.01
+       ; d20-diffuse world neighbors 0.01
+       ; display : d20-as-text world
+       ; newline
+       ; format #t "Advect ~A\n" 0.1
+       ; d20-advect world advection-directions 0.1
+       ; display : d20-as-text world
+       ; newline
+       ; format #t "Diffuse ~A\n" 0.1
+       ; d20-diffuse world neighbors 0.1
+       ; display : d20-as-text world
+       ; newline
        format #t "Diffuse: ~A*(~A)\n" 100 0.1
        let loop : : steps 100
            cond
@@ -300,40 +301,40 @@ define : main args
                loop : 1- steps
        display : d20-as-text world
        newline
-       let 
-         : number 20
-           val 1
-         format #t "disturb: ~A to ~A\n" number val
-         vector-set! world (1- number) val
-         display : d20-as-text world
-         newline
-       format #t "Diffuse ~A\n" 0.1
-       d20-diffuse world neighbors 0.1
-       display : d20-as-text world
-       newline
-       
-       format #t "Advect: ~A*(~A)\n" 1000 0.001
-       let loop : : steps 1000
-           cond
-             : = 0 steps
-               . world
-             else
-               d20-advect world advection-directions 0.001
-               display : d20-as-text world
-               d20-cursor-up-text world
-               loop : 1- steps
-       display : d20-as-text world
-       newline
-       format #t "Diffuse: ~A*(~A)\n" 1000 0.004
-       let loop : : steps 1000
-           cond
-             : = 0 steps
-               . world
-             else
-               d20-diffuse world neighbors 0.004
-               display : d20-as-text world
-               d20-cursor-up-text world
-               loop : 1- steps
+       ; let 
+       ;   : number 20
+       ;     val 1
+       ;   format #t "disturb: ~A to ~A\n" number val
+       ;   vector-set! world (1- number) val
+       ;   display : d20-as-text world
+       ;   newline
+       ; format #t "Diffuse ~A\n" 0.1
+       ; d20-diffuse world neighbors 0.1
+       ; display : d20-as-text world
+       ; newline
+       ; 
+       ; format #t "Advect: ~A*(~A)\n" 1000 0.001
+       ; let loop : : steps 1000
+       ;     cond
+       ;       : = 0 steps
+       ;         . world
+       ;       else
+       ;         d20-advect world advection-directions 0.001
+       ;         display : d20-as-text world
+       ;         d20-cursor-up-text world
+       ;         loop : 1- steps
+       ; display : d20-as-text world
+       ; newline
+       ; format #t "Diffuse: ~A*(~A)\n" 1000 0.004
+       ; let loop : : steps 1000
+       ;     cond
+       ;       : = 0 steps
+       ;         . world
+       ;       else
+       ;         d20-diffuse world neighbors 0.004
+       ;         display : d20-as-text world
+       ;         d20-cursor-up-text world
+       ;         loop : 1- steps
        display : d20-as-text world
        newline
        format #t "Diffuse+Advect: ~A*(~A+~A)\n" 1000 0.002 0.001
@@ -350,30 +351,57 @@ define : main args
        display : d20-as-text world
        newline
        
-       display
-         let loop 
-           : lon 360
-             lat 90
-             map '()
-             zone '()
-           cond
-             : and (= lat -90) (= lon 0)
-               cons : cons (vector-ref world (latlon2cellidx lat lon)) zone 
-                 . map
-             : = lon 0
-               loop
-                 . 360
-                 - lat 1
-                 cons : cons (vector-ref world (latlon2cellidx lat lon)) zone 
-                   . map
-                 . '()
-             else
-               loop
-                 - lon 1
-                 . lat
-                 . map
-                 cons : vector-ref world : latlon2cellidx lat lon
-                   . zone
+       let
+         :
+           v
+              let loop 
+                : lon 360
+                  lat 90
+                  map '()
+                  zone '()
+                cond
+                  : and (= lat -90) (= lon 0)
+                    cons : cons (vector-ref world (latlon2cellidx lat lon)) zone 
+                      . map
+                  : = lon 0
+                    loop
+                      . 360
+                      - lat 1
+                      cons : cons (vector-ref world (latlon2cellidx lat lon)) zone 
+                        . map
+                      . '()
+                  else
+                    loop
+                      - lon 1
+                      . lat
+                      . map
+                      cons : vector-ref world : latlon2cellidx lat lon
+                        . zone
+           port : open-output-pipe "python"
+         display "a = \"" port
+         write v port 
+         display "\"" port
+         newline port
+         display "a = eval(a.replace('(', '[').replace(')', ']').replace(' ',', '))" port
+         newline port
+         display "import numpy as np
+import pylab as pl
+import mpl_toolkits.basemap as bm
+arr = np.array(a)
+
+m = bm.Basemap(projection='cea', resolution='l', lat_ts=37.5)
+m.drawcoastlines(color='k',linewidth=0.3)
+m.drawmeridians(np.arange(-120.0, 180.0, 60), labels=[0,0,0,1], linewidth=0.15) # , yoffset=6) # labels = [left,right,top,bottom]
+m.drawparallels(np.arange(-60.0, 90.0, 30), labels=[1,0,0,0], linewidth=0.15)
+ny, nx = arr.shape
+lons, lats = pl.meshgrid(range(-nx/2, nx/2 + nx%2),
+                         range(-ny/2, ny/2 + ny%2))
+x, y = m(lons, lats)
+
+m.pcolormesh(x, y, arr)
+# pl.imshow(a)
+pl.show()
+" port
        newline