Running ‘allier.R’
  Comparing ‘allier.Rout’ to ‘allier.Rout.save’ ... OK
  Running ‘blockkr.R’
  Comparing ‘blockkr.Rout’ to ‘blockkr.Rout.save’ ... OK
  Running ‘covtable.R’
  Comparing ‘covtable.Rout’ to ‘covtable.Rout.save’ ... OK
  Running ‘cv.R’
  Comparing ‘cv.Rout’ to ‘cv.Rout.save’ ... OK
  Running ‘cv3d.R’
  Comparing ‘cv3d.Rout’ to ‘cv3d.Rout.save’ ... OK
  Running ‘fit.R’
  Comparing ‘fit.Rout’ to ‘fit.Rout.save’ ... OK
  Running ‘krige0.R’
  Comparing ‘krige0.Rout’ to ‘krige0.Rout.save’ ... OK
  Running ‘line.R’
  Comparing ‘line.Rout’ to ‘line.Rout.save’ ...57a58,59
> Warning message:
> In wkt(x) : CRS object has no comment
129a132,133
> Warning message:
> In wkt(x) : CRS object has no comment
190a195,196
> Warning message:
> In wkt(x) : CRS object has no comment
  Running ‘merge.R’
  Comparing ‘merge.Rout’ to ‘merge.Rout.save’ ... OK
  Running ‘na.action.R’
  Comparing ‘na.action.Rout’ to ‘na.action.Rout.save’ ... OK
  Running ‘rings.R’
  Comparing ‘rings.Rout’ to ‘rings.Rout.save’ ... OK
  Running ‘sim.R’
  Comparing ‘sim.Rout’ to ‘sim.Rout.save’ ... OK
  Running ‘stars.R’ [30m/18m]
  Running ‘unproj.R’
  Comparing ‘unproj.Rout’ to ‘unproj.Rout.save’ ...58c58
< Please note that rgdal will be retired during 2023,
---
> Please note that rgdal will be retired by the end of 2023,
61,62c61,62
< See https://r-spatial.org/r/2022/04/12/evolution.html and https://github.com/r-spatial/evolution
< rgdal: version: 1.6-5, (SVN revision 1199)
---
> 
> rgdal: version: 1.5-31, (SVN revision 1171)
64,66c64,65
< Loaded GDAL runtime: GDAL 3.6.3, released 2023/03/07
< Path to GDAL shared files: /usr/local/clang/share/gdal
<  GDAL does not use iconv for recoding strings.
---
> Loaded GDAL runtime: GDAL 3.4.3, released 2022/04/22
> Path to GDAL shared files: /usr/share/gdal
68,69c67,68
< Loaded PROJ runtime: Rel. 8.2.1, January 1st, 2022, [PJ_VERSION: 821]
< Path to PROJ shared files: /data/gannet/ripley/.local/share/proj:/usr/local/share/proj:/usr/local/share/proj
---
> Loaded PROJ runtime: Rel. 8.2.0, November 1st, 2021, [PJ_VERSION: 820]
> Path to PROJ shared files: /home/edzer/.local/share/proj:/usr/share/proj
71c70
< Linking to sp version:1.6-0
---
> Linking to sp version:1.4-7
74c73
< Spam version 2.9-1 (2022-08-07) is loaded.
---
> Spam version 2.8-0 (2022-01-05) is loaded.
101,102c100,104
< Warning message:
< PROJ support is provided by the sf and terra packages among others 
---
> Warning messages:
> 1: In showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj = prefer_proj) :
>   Discarded datum Amersfoort in Proj4 definition
> 2: In showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj = prefer_proj) :
>   Discarded datum Unknown based on WGS84 ellipsoid in Proj4 definition
  Running ‘variogram.R’
  Comparing ‘variogram.Rout’ to ‘variogram.Rout.save’ ... OK
  Running ‘vdist.R’
  Comparing ‘vdist.Rout’ to ‘vdist.Rout.save’ ... OK
  Running ‘windst.R’ [30m/15m]
Running the tests in ‘tests/stars.R’ failed.
Complete output:
  > Sys.setenv(TZ = "UTC")
  > 
  > # 0. using sp:
  > 
  > suppressPackageStartupMessages(library(sp))
  > demo(meuse, ask = FALSE)
  
  
  	demo(meuse)
  	---- ~~~~~
  
  > require(sp)
  
  > crs = CRS("+init=epsg:28992")
  
  > data("meuse")
  
  > coordinates(meuse) <- ~x+y
  
  > proj4string(meuse) <- crs
  
  > data("meuse.grid")
  
  > coordinates(meuse.grid) <- ~x+y
  
  > gridded(meuse.grid) <- TRUE
  
  > proj4string(meuse.grid) <- crs
  
  > data("meuse.riv")
  
  > meuse.riv <- SpatialPolygons(list(Polygons(list(Polygon(meuse.riv)),"meuse.riv")))
  
  > proj4string(meuse.riv) <- crs
  
  > data("meuse.area")
  
  > meuse.area = SpatialPolygons(list(Polygons(list(Polygon(meuse.area)), "area")))
  
  > proj4string(meuse.area) <- crs
  > suppressPackageStartupMessages(library(gstat))
  > v = variogram(log(zinc)~1, meuse)
  > (v.fit = fit.variogram(v, vgm(1, "Sph", 900, 1)))
    model      psill    range
  1   Nug 0.05066243   0.0000
  2   Sph 0.59060780 897.0209
  > k_sp = krige(log(zinc)~1, meuse[-(1:5),], meuse[1:5,], v.fit)
  [using ordinary kriging]
  OMP: Warning #96: Cannot form a team with 8 threads, using 2 instead.
  OMP: Hint Consider unsetting KMP_DEVICE_THREAD_LIMIT (KMP_ALL_THREADS), KMP_TEAMS_THREAD_LIMIT, and OMP_THREAD_LIMIT (if any are set).
  > k_sp_grd = krige(log(zinc)~1, meuse, meuse.grid, v.fit)
  [using ordinary kriging]
  > 
  > # 1. using sf:
  > suppressPackageStartupMessages(library(sf))
  > demo(meuse_sf, ask = FALSE, echo = FALSE)
  > # reloads meuse as data.frame, so
  > demo(meuse, ask = FALSE)
  
  
  	demo(meuse)
  	---- ~~~~~
  
  > require(sp)
  
  > crs = CRS("+init=epsg:28992")
  
  > data("meuse")
  
  > coordinates(meuse) <- ~x+y
  
  > proj4string(meuse) <- crs
  
  > data("meuse.grid")
  
  > coordinates(meuse.grid) <- ~x+y
  
  > gridded(meuse.grid) <- TRUE
  
  > proj4string(meuse.grid) <- crs
  
  > data("meuse.riv")
  
  > meuse.riv <- SpatialPolygons(list(Polygons(list(Polygon(meuse.riv)),"meuse.riv")))
  
  > proj4string(meuse.riv) <- crs
  
  > data("meuse.area")
  
  > meuse.area = SpatialPolygons(list(Polygons(list(Polygon(meuse.area)), "area")))
  
  > proj4string(meuse.area) <- crs
  > 
  > v = variogram(log(zinc)~1, meuse_sf)
  > (v.fit = fit.variogram(v, vgm(1, "Sph", 900, 1)))
    model      psill    range
  1   Nug 0.05066243   0.0000
  2   Sph 0.59060780 897.0209
  > k_sf = krige(log(zinc)~1, meuse_sf[-(1:5),], meuse_sf[1:5,], v.fit)
  [using ordinary kriging]
  > 
  > all.equal(k_sp, as(k_sf, "Spatial"), check.attributes = FALSE)
  [1] TRUE
  > all.equal(k_sp, as(k_sf, "Spatial"), check.attributes = TRUE)
  [1] "Attributes: < Component \"bbox\": Attributes: < Component \"dimnames\": Component 1: 2 string mismatches > >"  
  [2] "Attributes: < Component \"coords\": Attributes: < Component \"dimnames\": Component 2: 2 string mismatches > >"
  [3] "Attributes: < Component \"coords.nrs\": Numeric: lengths (2, 0) differ >"                                      
  [4] "Attributes: < Component \"proj4string\": Attributes: < Component \"comment\": 1 string mismatch > >"           
  > 
  > # 2. using stars for grid:
  > 
  > suppressPackageStartupMessages(library(stars))
  > st = st_as_stars(meuse.grid)
  > st_crs(st)
  Coordinate Reference System:
    User input: Amersfoort / RD New 
    wkt:
  PROJCRS["Amersfoort / RD New",
      BASEGEOGCRS["Amersfoort",
          DATUM["Amersfoort",
              ELLIPSOID["Bessel 1841",6377397.155,299.1528128,
                  LENGTHUNIT["metre",1]]],
          PRIMEM["Greenwich",0,
              ANGLEUNIT["degree",0.0174532925199433]],
          ID["EPSG",4289]],
      CONVERSION["RD New",
          METHOD["Oblique Stereographic",
              ID["EPSG",9809]],
          PARAMETER["Latitude of natural origin",52.1561605555556,
              ANGLEUNIT["degree",0.0174532925199433],
              ID["EPSG",8801]],
          PARAMETER["Longitude of natural origin",5.38763888888889,
              ANGLEUNIT["degree",0.0174532925199433],
              ID["EPSG",8802]],
          PARAMETER["Scale factor at natural origin",0.9999079,
              SCALEUNIT["unity",1],
              ID["EPSG",8805]],
          PARAMETER["False easting",155000,
              LENGTHUNIT["metre",1],
              ID["EPSG",8806]],
          PARAMETER["False northing",463000,
              LENGTHUNIT["metre",1],
              ID["EPSG",8807]],
          ID["EPSG",19914]],
      CS[Cartesian,2],
          AXIS["(E)",east,
              ORDER[1],
              LENGTHUNIT["metre",1,
                  ID["EPSG",9001]]],
          AXIS["(N)",north,
              ORDER[2],
              LENGTHUNIT["metre",1,
                  ID["EPSG",9001]]],
      USAGE[
          SCOPE["unknown"],
          AREA["Netherlands - onshore, including Waddenzee, Dutch Wadden Islands and 12-mile offshore coastal zone."],
          BBOX[50.75,3.2,53.7,7.22]]]
  > 
  > # compare inputs:
  > sp = as(st, "Spatial")
  > fullgrid(meuse.grid) = TRUE
  > all.equal(sp, meuse.grid["dist"], check.attributes = FALSE)
  [1] "Names: Lengths (5, 1) differ (string compare on first 1)"
  [2] "Names: 1 string mismatch"                                
  > all.equal(sp, meuse.grid["dist"], check.attributes = TRUE, use.names = FALSE)
  [1] "Names: Lengths (5, 1) differ (string compare on first 1)"                                      
  [2] "Names: 1 string mismatch"                                                                      
  [3] "Attributes: < Component 3: Names: 1 string mismatch >"                                         
  [4] "Attributes: < Component 3: Length mismatch: comparison on first 1 components >"                
  [5] "Attributes: < Component 3: Component 1: Mean relative difference: 1.08298 >"                   
  [6] "Attributes: < Component 4: Attributes: < Component 2: names for current but not for target > >"
  [7] "Attributes: < Component 4: Attributes: < Component 3: names for current but not for target > >"
  > 
  > # kriging:
  > st_crs(st) = st_crs(meuse_sf) = NA # GDAL roundtrip messes them up!
  > k_st = if (Sys.getenv("USER") == "travis") {
  + 	try(krige(log(zinc)~1, meuse_sf, st, v.fit))
  + } else {
  + 	krige(log(zinc)~1, meuse_sf, st, v.fit)
  + }
  [using ordinary kriging]
  > k_st
  stars object with 2 dimensions and 2 attributes
  attribute(s):
                  Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
  var1.pred  4.7765547 5.2376293 5.5728839 5.7072287 6.1717619 7.4399911 5009
  var1.var   0.0854949 0.1372864 0.1621838 0.1853319 0.2116152 0.5002756 5009
  dimension(s):
    from  to offset delta x/y
  x    1  78 178440    40 [x]
  y    1 104 333760   -40 [y]
  > 
  > # handle factors, when going to stars?
  > k_sp_grd$cls = cut(k_sp_grd$var1.pred, c(0, 5, 6, 7, 8, 9))
  > st_as_stars(k_sp_grd)
  stars object with 2 dimensions and 3 attributes
  attribute(s):
     var1.pred       var1.var         cls      
   Min.   :4.777   Min.   :0.085   (0,5]: 316  
   1st Qu.:5.238   1st Qu.:0.137   (5,6]:1778  
   Median :5.573   Median :0.162   (6,7]: 962  
   Mean   :5.707   Mean   :0.185   (7,8]:  47  
   3rd Qu.:6.172   3rd Qu.:0.212   (8,9]:   0  
   Max.   :7.440   Max.   :0.500   NA's :5009  
   NA's   :5009    NA's   :5009                
  dimension(s):
    from  to offset delta              refsys x/y
  x    1  78 178440    40 Amersfoort / RD New [x]
  y    1 104 333760   -40 Amersfoort / RD New [y]
  > if (require(raster, quietly = TRUE)) {
  +  print(st_as_stars(raster::stack(k_sp_grd))) # check
  +  print(all.equal(st_redimension(st_as_stars(k_sp_grd)), st_as_stars(raster::stack(k_sp_grd)), check.attributes=FALSE))
  + }
  stars object with 3 dimensions and 1 attribute
  attribute(s):
                  Min.   1st Qu. Median     Mean  3rd Qu.     Max.  NA's
  var1.pred  0.0854949 0.2116778      2 2.710347 5.237542 7.439991 15027
  dimension(s):
       from  to offset delta              refsys                          values
  x       1  78 178440    40 Amersfoort / RD New                            NULL
  y       1 104 333760   -40 Amersfoort / RD New                            NULL
  band    1   3     NA    NA                  NA var1.pred, var1.var , cls      
       x/y
  x    [x]
  y    [y]
  band    
  [1] TRUE
  > 
  > suppressPackageStartupMessages(library(spacetime))
  > 
  > Sys.setenv(TZ="")
  > tm = as.POSIXct("2019-02-25 15:37:24 CET")
  > n = 4
  > s = stars:::st_stars(list(foo = array(1:(n^3), rep(n,3))),
  + stars:::create_dimensions(list(
  +   x = stars:::create_dimension(from = 1, to = n, offset = 10, delta = 0.5),
  +   y = stars:::create_dimension(from = 1, to = n, offset = 0, delta = -0.7),
  +   time = stars:::create_dimension(values = tm + 1:n)),
  +   raster = stars:::get_raster(dimensions = c("x", "y")))
  +   )
  > s
  stars object with 3 dimensions and 1 attribute
  attribute(s):
       Min. 1st Qu. Median Mean 3rd Qu. Max.
  foo     1   16.75   32.5 32.5   48.25   64
  dimension(s):
       from to                  offset  delta  refsys x/y
  x       1  4                      10    0.5      NA [x]
  y       1  4                       0   -0.7      NA [y]
  time    1  4 2019-02-25 15:37:25 UTC 1 secs POSIXct    
  > 
  > as.data.frame(s)
         x     y                time foo
  1  10.25 -0.35 2019-02-25 15:37:25   1
  2  10.75 -0.35 2019-02-25 15:37:25   2
  3  11.25 -0.35 2019-02-25 15:37:25   3
  4  11.75 -0.35 2019-02-25 15:37:25   4
  5  10.25 -1.05 2019-02-25 15:37:25   5
  6  10.75 -1.05 2019-02-25 15:37:25   6
  7  11.25 -1.05 2019-02-25 15:37:25   7
  8  11.75 -1.05 2019-02-25 15:37:25   8
  9  10.25 -1.75 2019-02-25 15:37:25   9
  10 10.75 -1.75 2019-02-25 15:37:25  10
  11 11.25 -1.75 2019-02-25 15:37:25  11
  12 11.75 -1.75 2019-02-25 15:37:25  12
  13 10.25 -2.45 2019-02-25 15:37:25  13
  14 10.75 -2.45 2019-02-25 15:37:25  14
  15 11.25 -2.45 2019-02-25 15:37:25  15
  16 11.75 -2.45 2019-02-25 15:37:25  16
  17 10.25 -0.35 2019-02-25 15:37:26  17
  18 10.75 -0.35 2019-02-25 15:37:26  18
  19 11.25 -0.35 2019-02-25 15:37:26  19
  20 11.75 -0.35 2019-02-25 15:37:26  20
  21 10.25 -1.05 2019-02-25 15:37:26  21
  22 10.75 -1.05 2019-02-25 15:37:26  22
  23 11.25 -1.05 2019-02-25 15:37:26  23
  24 11.75 -1.05 2019-02-25 15:37:26  24
  25 10.25 -1.75 2019-02-25 15:37:26  25
  26 10.75 -1.75 2019-02-25 15:37:26  26
  27 11.25 -1.75 2019-02-25 15:37:26  27
  28 11.75 -1.75 2019-02-25 15:37:26  28
  29 10.25 -2.45 2019-02-25 15:37:26  29
  30 10.75 -2.45 2019-02-25 15:37:26  30
  31 11.25 -2.45 2019-02-25 15:37:26  31
  32 11.75 -2.45 2019-02-25 15:37:26  32
  33 10.25 -0.35 2019-02-25 15:37:27  33
  34 10.75 -0.35 2019-02-25 15:37:27  34
  35 11.25 -0.35 2019-02-25 15:37:27  35
  36 11.75 -0.35 2019-02-25 15:37:27  36
  37 10.25 -1.05 2019-02-25 15:37:27  37
  38 10.75 -1.05 2019-02-25 15:37:27  38
  39 11.25 -1.05 2019-02-25 15:37:27  39
  40 11.75 -1.05 2019-02-25 15:37:27  40
  41 10.25 -1.75 2019-02-25 15:37:27  41
  42 10.75 -1.75 2019-02-25 15:37:27  42
  43 11.25 -1.75 2019-02-25 15:37:27  43
  44 11.75 -1.75 2019-02-25 15:37:27  44
  45 10.25 -2.45 2019-02-25 15:37:27  45
  46 10.75 -2.45 2019-02-25 15:37:27  46
  47 11.25 -2.45 2019-02-25 15:37:27  47
  48 11.75 -2.45 2019-02-25 15:37:27  48
  49 10.25 -0.35 2019-02-25 15:37:28  49
  50 10.75 -0.35 2019-02-25 15:37:28  50
  51 11.25 -0.35 2019-02-25 15:37:28  51
  52 11.75 -0.35 2019-02-25 15:37:28  52
  53 10.25 -1.05 2019-02-25 15:37:28  53
  54 10.75 -1.05 2019-02-25 15:37:28  54
  55 11.25 -1.05 2019-02-25 15:37:28  55
  56 11.75 -1.05 2019-02-25 15:37:28  56
  57 10.25 -1.75 2019-02-25 15:37:28  57
  58 10.75 -1.75 2019-02-25 15:37:28  58
  59 11.25 -1.75 2019-02-25 15:37:28  59
  60 11.75 -1.75 2019-02-25 15:37:28  60
  61 10.25 -2.45 2019-02-25 15:37:28  61
  62 10.75 -2.45 2019-02-25 15:37:28  62
  63 11.25 -2.45 2019-02-25 15:37:28  63
  64 11.75 -2.45 2019-02-25 15:37:28  64
  > plot(s, col = sf.colors(), axes = TRUE)
  > (s.stfdf = as(s, "STFDF"))
  An object of class "STFDF"
  Slot "data":
     foo
  1    1
  2    2
  3    3
  4    4
  5    5
  6    6
  7    7
  8    8
  9    9
  10  10
  11  11
  12  12
  13  13
  14  14
  15  15
  16  16
  17  17
  18  18
  19  19
  20  20
  21  21
  22  22
  23  23
  24  24
  25  25
  26  26
  27  27
  28  28
  29  29
  30  30
  31  31
  32  32
  33  33
  34  34
  35  35
  36  36
  37  37
  38  38
  39  39
  40  40
  41  41
  42  42
  43  43
  44  44
  45  45
  46  46
  47  47
  48  48
  49  49
  50  50
  51  51
  52  52
  53  53
  54  54
  55  55
  56  56
  57  57
  58  58
  59  59
  60  60
  61  61
  62  62
  63  63
  64  64
  
  Slot "sp":
  Object of class SpatialPixels
  Grid topology:
    cellcentre.offset cellsize cells.dim
  x             10.25      0.5         4
  y             -2.45      0.7         4
  SpatialPoints:
            x     y
   [1,] 10.25 -0.35
   [2,] 10.75 -0.35
   [3,] 11.25 -0.35
   [4,] 11.75 -0.35
   [5,] 10.25 -1.05
   [6,] 10.75 -1.05
   [7,] 11.25 -1.05
   [8,] 11.75 -1.05
   [9,] 10.25 -1.75
  [10,] 10.75 -1.75
  [11,] 11.25 -1.75
  [12,] 11.75 -1.75
  [13,] 10.25 -2.45
  [14,] 10.75 -2.45
  [15,] 11.25 -2.45
  [16,] 11.75 -2.45
  Coordinate Reference System (CRS) arguments: NA 
  
  Slot "time":
                      timeIndex
  2019-02-25 15:37:25         1
  2019-02-25 15:37:26         2
  2019-02-25 15:37:27         3
  2019-02-25 15:37:28         4
  
  Slot "endTime":
  [1] "2019-02-25 15:37:26 UTC" "2019-02-25 15:37:27 UTC"
  [3] "2019-02-25 15:37:28 UTC" "2019-02-25 15:37:29 UTC"
  
  > stplot(s.stfdf, scales = list(draw = TRUE))
  > 
  > (s2 = st_as_stars(s.stfdf))
  stars object with 3 dimensions and 1 attribute
  attribute(s):
       Min. 1st Qu. Median Mean 3rd Qu. Max.
  foo     1   16.75   32.5 32.5   48.25   64
  dimension(s):
       from to                  offset  delta  refsys x/y
  x       1  4                      10    0.5      NA [x]
  y       1  4            -1.11022e-16   -0.7      NA [y]
  time    1  4 2019-02-25 15:37:25 UTC 1 secs POSIXct    
  > plot(s2, col = sf.colors(), axes = TRUE)
  > all.equal(s, s2, check.attributes = FALSE)
  [1] TRUE
  > 
  > # multiple simulations:
  > data(meuse, package = "sp")
  > data(meuse.grid, package = "sp")
  > coordinates(meuse.grid) <- ~x+y
  > gridded(meuse.grid) <- TRUE
  > meuse.grid = st_as_stars(meuse.grid)
  > meuse_sf = st_as_sf(meuse, coords = c("x", "y"))
  > g = gstat(NULL, "zinc", zinc~1, meuse_sf, model = vgm(1, "Exp", 300), nmax = 10)
  > g = gstat(g, "lead", lead~1, meuse_sf, model = vgm(1, "Exp", 300), nmax = 10, fill.cross = TRUE)
  > set.seed(123)
  > (p = predict(g, meuse.grid, nsim = 5))
  drawing 5 multivariate GLS realisations of beta...
Running the tests in ‘tests/windst.R’ failed.
Complete output:
  > suppressPackageStartupMessages(library(sp))
  > suppressPackageStartupMessages(library(spacetime))
  > suppressPackageStartupMessages(library(gstat))
  > suppressPackageStartupMessages(library(stars))
  > 
  > data(wind)
  > wind.loc$y = as.numeric(char2dms(as.character(wind.loc[["Latitude"]])))
  > wind.loc$x = as.numeric(char2dms(as.character(wind.loc[["Longitude"]])))
  > coordinates(wind.loc) = ~x+y
  > proj4string(wind.loc) = "+proj=longlat +datum=WGS84 +ellps=WGS84"
  > 
  > wind$time = ISOdate(wind$year+1900, wind$month, wind$day)
  > wind$jday = as.numeric(format(wind$time, '%j'))
  > stations = 4:15
  > windsqrt = sqrt(0.5148 * wind[stations]) # knots -> m/s
  > Jday = 1:366
  > daymeans = colMeans(
  + 	sapply(split(windsqrt - colMeans(windsqrt), wind$jday), colMeans))
  > meanwind = lowess(daymeans ~ Jday, f = 0.1)$y[wind$jday]
  > velocities = apply(windsqrt, 2, function(x) { x - meanwind })
  > # match order of columns in wind to Code in wind.loc;
  > # convert to utm zone 29, to be able to do interpolation in
  > # proper Euclidian (projected) space:
  > pts = coordinates(wind.loc[match(names(wind[4:15]), wind.loc$Code),])
  > pts = SpatialPoints(pts)
  > if (require(rgdal, quietly = TRUE) && require(maps, quietly = TRUE)) {
  + proj4string(pts) = "+proj=longlat +datum=WGS84 +ellps=WGS84"
  + utm29 = CRS("+proj=utm +zone=29 +datum=WGS84 +ellps=WGS84")
  + pts = spTransform(pts, utm29)
  + # note the t() in:
  + w = STFDF(pts, wind$time, data.frame(values = as.vector(t(velocities))))
  + 
  + library(mapdata)
  + library(maptools)
  + m = map2SpatialLines(
  +     map("worldHires", xlim = c(-11,-5.4), ylim = c(51,55.5), plot=F))
  + proj4string(m) = "+proj=longlat +datum=WGS84 +ellps=WGS84"
  + m = spTransform(m, utm29)
  + 
  + # setup grid
  + grd = SpatialPixels(SpatialPoints(makegrid(m, n = 300)),
  + 	proj4string = m@proj4string)
  + # grd$t = rep(1, nrow(grd))
  + #coordinates(grd) = ~x1+x2
  + #gridded(grd)=TRUE
  + 
  + # select april 1961:
  + w = w[, "1961-04"]
  + 
  + covfn = function(x, y = x) { 
  + 	du = spDists(coordinates(x), coordinates(y))
  + 	t1 = as.numeric(index(x)) # time in seconds
  + 	t2 = as.numeric(index(y)) # time in seconds
  + 	dt = abs(outer(t1, t2, "-"))
  + 	# separable, product covariance model:
  + 	0.6 * exp(-du/750000) * exp(-dt / (1.5 * 3600 * 24))
  + }
  + 
  + n = 10
  + tgrd = seq(min(index(w)), max(index(w)), length=n)
  + pred = krige0(sqrt(values)~1, w, STF(grd, tgrd), covfn)
  + layout = list(list("sp.points", pts, first=F, cex=.5),
  + 	list("sp.lines", m, col='grey'))
  + wind.pr0 = STFDF(grd, tgrd, data.frame(var1.pred = pred))
  + 
  + v = vgmST("separable",
  +           space = vgm(1, "Exp", 750000), 
  +           time = vgm(1, "Exp", 1.5 * 3600 * 24),
  +           sill = 0.6)
  + wind.ST = krigeST(sqrt(values)~1, w, STF(grd, tgrd), v)
  + 
  + all.equal(wind.pr0, wind.ST)
  + 
  + # stars:
  + df = data.frame(a = rep(NA, 324*10))
  + s = STF(grd, tgrd)
  + newd = addAttrToGeom(s, df)
  + wind.sta = krigeST(sqrt(values)~1, st_as_stars(w), st_as_stars(newd), v)
  + # 1
  + plot(stars::st_as_stars(wind.ST), breaks = "equal", col = sf.colors())
  + # 2
  + stplot(wind.ST)
  + # 3
  + plot(wind.sta, breaks = "equal", col = sf.colors())
  + st_as_stars(wind.ST)[[1]][1:3,1:3,1]
  + (wind.sta)[[1]][1:3,1:3,1]
  + st_bbox(wind.sta)
  + bbox(wind.ST)
  + all.equal(wind.sta, stars::st_as_stars(wind.ST), check.attributes = FALSE)
  + 
  + # 4: roundtrip wind.sta->STFDF->stars
  + rt = stars::st_as_stars(as(wind.sta, "STFDF"))
  + plot(rt, breaks = "equal", col = sf.colors())
  + # 5:
  + stplot(as(wind.sta, "STFDF"))
  + st_bbox(rt)
  + 
  + # 6:
  + stplot(as(st_as_stars(wind.ST), "STFDF"))
  + }
  Please note that rgdal will be retired during 2023,
  plan transition to sf/stars/terra functions using GDAL and PROJ
  at your earliest convenience.
  See https://r-spatial.org/r/2022/04/12/evolution.html and https://github.com/r-spatial/evolution
  rgdal: version: 1.6-5, (SVN revision 1199)
  Geospatial Data Abstraction Library extensions to R successfully loaded
  Loaded GDAL runtime: GDAL 3.6.3, released 2023/03/07
  Path to GDAL shared files: /usr/local/clang/share/gdal
   GDAL does not use iconv for recoding strings.
  GDAL binary built with GEOS: TRUE 
  Loaded PROJ runtime: Rel. 8.2.1, January 1st, 2022, [PJ_VERSION: 821]
  Path to PROJ shared files: /data/gannet/ripley/.local/share/proj:/usr/local/share/proj:/usr/local/share/proj
  PROJ CDN enabled: FALSE
  Linking to sp version:1.6-0
  To mute warnings of possible GDAL/OSR exportToProj4() degradation,
  use options("rgdal_show_exportToProj4_warnings"="none") before loading sp or rgdal.
  Checking rgeos availability: TRUE
  Please note that 'maptools' will be retired during 2023,
  plan transition at your earliest convenience;
  some functionality will be moved to 'sp'.
  OMP: Warning #96: Cannot form a team with 12 threads, using 2 instead.
  OMP: Hint Consider unsetting KMP_DEVICE_THREAD_LIMIT (KMP_ALL_THREADS), KMP_TEAMS_THREAD_LIMIT, and OMP_THREAD_LIMIT (if any are set).