# (5) Control spline gridding via eigenvalues

Our next animation performs gridding via Green’s splines in greenspline that allows to the selection of an approximate fit by ignoring the smaller eigenvalues. However, it is not easy to know how many eigenvalues to include. This animation illustrates gridding of bathymetry data (squares) from ship data. We show the earth_relief_01m for comparison in the left panel and the gridded result in the middle panel as a function of the number of eigenvalues included. The right panel shows the incremental values added as new eigenvalues are included. Note the data distribution is such that we have a good coverage in the north with larger gaps in the south - the solution quality reflects this disparity. The ship data also have a few bad tracks which stand out in the solution. We also report the RMS misfit between the model and the data as the solution builds incrementally.

    #!/usr/bin/env bash
    #
    # Gridding via Green's splines allows to the selection of an approximate fit
    # by ignoring the smaller eigenvalues.  This way you can trade off misfit
    # against model complexity.  However, it is not easy to know how many
    # eigenvalues to include.  This animation illustrates gridding of bathymetry data
    # (squares) from ship data. We show the earth_relief_01m for comparison in
    # the left panel and the gridded result in the center panel as a function of the
    # number of eigenvalues included.  The right panel shows the incremental values
    # added as new eigenvalues are included.  Note the data distribution is such that
    # we have a good coverage in the north with larger gaps in the south - the solution
    # quality reflects this disparity.  We also report the RMS misfit between the model
    # and the data as the solution builds incrementally. Note that the ship data have
    # a few bad tracks which leads to artifacts in the gridded solution.
    #
    # The finished movie is available in our YouTube channel as well:
    # https://youtu.be/7NQa4TORA3E
    # The script took ~70 minutes to render on a 24-core MacPro 2013, with most of the
    # time being used to solve for the cumulative and incremental grid components.

    # 1. Create files needed in the loop
    cat << 'EOF' > pre.sh
    gmt begin
    	# Convert depth positive down to bathymetry positive up and decimate to a 1m lattice
    	gmt convert -Em10 @geologists.txt -i0,1,2+s-1 -s | gmt blockmedian -R158:00W/156:58W/18:00N/19:40N -I1m > geo.txt
    	# Create all cumulative and incremental grids, with misfit summary
    	gmt greenspline geo.txt -Sc -C+c+i -Ggeo.grd -Z2 -Emisfit.txt
    	# Create CPTs and prepare background map with static image and data
    	gmt makecpt -Cturbo -T-5000/-1000 -H > z.cpt
    	gmt makecpt -Cpolar -T-100/100 -H > dz.cpt
    	gmt grdimage -JM8c -X0 -Y0 -R158:00W/156:58W/18:00N/19:40N @earth_relief_01m.grd -Cz.cpt -B0 -Ei -I+d
    	gmt grdcontour @earth_relief_01m.grd -C200 -S8
    	gmt plot geo.txt -Ss2p -Gblack
    	gmt colorbar -Cz.cpt -DjTL+w4c+h+o11p/8p -Bxaf -By+l"km" -F+gwhite+p0.5p -W0.001
    gmt end
    EOF
    # 2. Set up the main frame script
    cat << 'EOF' > main.sh
    gmt begin
    	# Plot current solution with contors in the center panel
    	gmt grdimage -JM8c -X8c -Y0 geo_cum_${MOVIE_ITEM}.grd -Cz.cpt -B0 -Ei -I+d
    	gmt grdcontour geo_cum_${MOVIE_ITEM}.grd -C200 -S8
    	gmt plot geo.txt -Ss2p -Cz.cpt
    	# Plot the increments in the right panel and add color bar at top
    	gmt grdimage -X8c geo_inc_${MOVIE_ITEM}.grd -Cdz.cpt -B0 -Ei
    	gmt colorbar -Cdz.cpt -DjTR+w4c+h+o19p/8p+e -Bxaf -By+l"m" -F+gwhite+p0.5p
    gmt end
    EOF
    # 3. Run the movie and add two updating labels
    gmt movie main.sh -Sbpre.sh -CHD -Nanim05 -Tmisfit.txt -Fmp4 -H8 -Lf+jBR+f12p,Helvetica,white=~2p+t"Eigenvalue %4.4d" -Lc3+jTL+o8.15c/0.15c+gwhite+f12p+p0.25p+t"rms = %6.2lf m" -V -W -Zs