Skip to content

Satellite based Soil Moisture Assimilation in Hydrologic Model

Navid Jadidoleslam edited this page Mar 21, 2020 · 3 revisions

Soil moisture is a major control in the rainfall-runoff partitioning. Hydrologic models could misrepresent this variable due to uncertainty in their model structure, formulations that could lead to errors in runoff predictions. Emerging satellite-based soil moisture products such as SMOS and SMAP provide information in space and time. Satellite-based soil moisture data assimilation, as a viable approach, could be used for accounting the uncertainties in the model and observations. In this example, we test streamflow prediction performance using HydroVisE before and after satellite-based soil moisture assimilation using various assimilation schemes.

Example demo and config file for implemented HydroVisE web-app for visualization and evaluation of streamflow predictions by SMAP and SMOS satellite-based soil moisture data assimilation into a distributed hydrologic model.

As shown in animation below, user can examine the hydrologic model performance metrices for streamflow predictions and observations from USGS gauges.

Satellite-based soil moisture assimilation hydrologic model predictions

The config file for this demo is given below:

{
  "page":{
    "title": "HydroVisE - Hydrologic Assessment of Satellite-based Soil Moisture"
  },
  "data_part": {
    "min_val": 2010,
    "max_val": 2018,
    "step": 1,
    "initial": 2015
  },
  "traces": {
    "t1": {
      "prod": "Q",
      "x_name": "dt",
      "y_name": "Q",
      "modEnabled": 1,
      "dynamic": 0,
      "ensemble": 0,
      "template": {
        "var": [
          "comID",
          "yr"
        ],
        "path_format": "http://s-iihr50.iihr.uiowa.edu/smap/demo/platformdata/{1}/Q/{0}.csv"
      },
      "style": {
        "type": "scattergl",
        "mode": "lines",
        "name": "USGS",
        "line": {
          "width": 2,
          "color": "black"
        }
      }
    },
    "t2": {
      "prod": "Q_ol",
      "x_name": "dt",
      "y_name": "Q",
      "modEnabled": 1,
      "dynamic":  0,
      "ensemble": 0,
      "template": {
        "var": [
          "yr",
          "comID"
        ],
        "path_format": "http://s-iihr50.iihr.uiowa.edu/smap/demo/platformdata/{0}/Q_ol/{1}.csv"
      },
      "style": {
        "type": "scattergl",
        "mode": "lines",
        "name": "Open Loop",
        "line": {
          "color": "blue"
        }
      }
    },
    "t3": {
      "prod": "Q_assim",
      "x_name": "dt",
      "y_name": "Q",
      "dynamic":  0,
      "ensemble": 0,
      "modEnabled": 1,
      "template": {
        "var": [
          "yr",
          "comID"
        ],
        "path_format": "http://s-iihr50.iihr.uiowa.edu/smap/demo/platformdata/{0}/Q_assim_norm_v2/{1}.csv"
      },
      "style": {
        "type": "scattergl",
        "mode": "lines",
        "name": "SMAP V2",
        "line": {
          "color": "#b2182b"
        }
      }
    },
    "t4": {
      "prod": "Q_assim_smos",
      "x_name": "dt",
      "y_name": "Q",
      "dynamic":  0,
      "ensemble": 0,
      "modEnabled": 1,
      "template": {
        "var": [
          "yr",
          "comID"
        ],
        "path_format": "http://s-iihr50.iihr.uiowa.edu/smap/demo/platformdata/{0}/Q_assim_smos/{1}.csv"
      },
      "style": {
        "type": "scattergl",
        "mode": "lines",
        "name": "SMOS",		
        "line": {
          "color": "#1b7837"
        }
      }
    },
    "t5": {
      "prod": "EnKF_N30",
      "x_name": "dt",
      "y_name": "Q",
      "dynamic":  0,
      "ensemble": 0,
      "modEnabled": 1,
      "template": {
        "var": [
          "yr",
          "comID"
        ],
        "path_format": "http://s-iihr50.iihr.uiowa.edu/smap/demo/platformdata/{0}/EnKF_IA30ConstVar/{1}.csv"
      },
      "style": {
        "type": "scattergl",
        "mode": "lines",
        "name": "SMAP V2 EnKF",
        "line": {
          "color": "#d6604d"
        }
      }
    },
    "t6": {
      "prod": "EnKF_N30_varvar",
      "x_name": "dt",
      "y_name": "Q",
      "dynamic":  0,
      "ensemble": 0,
      "modEnabled": 1,
      "template": {
        "var": [
          "yr",
          "comID"
        ],
        "path_format": "http://s-iihr50.iihr.uiowa.edu/smap/demo/platformdata/{0}/EnKF_IA30VarVar/{1}.csv"
      },
      "style": {
        "type": "scattergl",
        "mode": "lines",
        "name": "SMAP V2 EnKFV",
        "line": {
          "color": "#f4a582"
        }
      }
    },
    "t7": {
      "prod": "EnKF_IA30ConstVar_SMOS",
      "x_name": "dt",
      "y_name": "Q",
      "dynamic":  0,
      "ensemble": 0,
      "modEnabled": 1,
      "template": {
        "var": [
          "yr",
          "comID"
        ],
        "path_format": "http://s-iihr50.iihr.uiowa.edu/smap/demo/platformdata/{0}/EnKF_IA30ConstVar_SMOS/{1}.csv"
      },
      "style": {
        "type": "scattergl",
        "mode": "lines",
        "name": "SMOS EnKF",
        "line": {
          "color": "#5aae61"
        }
      }
    },
    "t8": {
      "prod": "EnKF_IA30VarVar_SMOS",
      "x_name": "dt",
      "y_name": "Q",
      "dynamic":  0,
      "ensemble": 0,
      "modEnabled": 1,
      "template": {
        "var": [
          "yr",
          "comID"
        ],
        "path_format": "http://s-iihr50.iihr.uiowa.edu/smap/demo/platformdata/{0}/EnKF_IA30VarVar_SMOS/{1}.csv"
      },
      "style": {
        "type": "scattergl",
        "mode": "lines",
        "name": "SMOS EnKFV",
        "line": {
          "color": "#a6dba0"
        }
      }
    }
  },
  "modTrace": {
    "modJS": "./applications/plugin/modQ2S.js",
    "modMethod": "Q2Stage",
    "modEvnt": "evntQ2Stage",
	"customEval": "translate_id=false",
    "default": "flw",
    "mod": {
      "default": {
        "button": "Discharge",
        "pltPath": "yaxis.title",
        "val": "Q (m3/s)"
      },
      "derived": {
        "button": "Stage",
        "pltPath": "yaxis.title",
        "val": "Stage (ft)"
      }
    }
  },  
  "horizontalGrid": {
    "filename": "./data/sig_stage_flow_usgs.csv",
    "comID": "link_id",
    "unit_convert": 0.0283168,
    "style": {
      "type": "line",
      "xref": "paper",
      "x0": 0,
      "x1": 1,
      "yref": "y",
      "y0": 0,
      "y1": 0,
      "line": {
        "color": "gray",
        "width": 0.75
      }
    },
    "lines": {
      "flw_action": {
        "color": "#ffff00"
      },
      "flw_flood": {
        "color": "#f89500"
      },
      "flw_moderate": {
        "color": "#ff0000"
      },
      "flw_major": {
        "color": "#d836ff"
      }
    }
  },
  "mapMarkers": {
    "fnPath": "lid_usgs.geojson",
    "comIDName": "lid",
    "geomType":"point",
    "markerAttrs": {
      "template": {
        "var": [],
        "path_format": "configs/smap/df_final_new.csv"
      },
      "comID": "lid"
    },
    "onEachFeature":{
      "click": "clickFeature"
    },
    "plotTitle": {
      "template": {
        "var": ["usgs_name","area"],
        "format": "{0}<br>Area: {1} km<sup>2</sup>"
      }
    },
    "tooltip": {
      "template": {
        "var": [
          "usgs_name",
          "area",
		  "metricName",
		  "metric"
        ],
        "format": "<b>USGS Name:</b><br> {0}<br><b>Area: </b>{1} km<sup>2</sup><br><b>{2}:</b>{3}"
      },
      "format": "",
      "propertires": [
        "usgs_id",
        "area",
        "metric"
      ]
    },
    "additionalShapes":{
      "template": {
        "var": ["comID"],
        "format": "./services/get_boundary.php?id={0}"
      }
    }
  },
  "controls": {
    "markerAttrs": {
      "kge": {
        "var_id": "kge",
        "var_name": "KGE",
        "onEvent": "selectMetric",
        "selected": 1,
        "colorPalette": ["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],
        "nBins": 11,
        "method": "equidistant",
        "range": [-0.1, 1]
      },
      "correlationcoefficient": {
        "var_id": "correlationcoefficient",
        "var_name": "Correlation",
        "onEvent": "selectMetric",
        "selected": 0,
        "colorPalette": ["#003a00", "#20600a", "#438815", "#6cb23e", "#99dc6c", "#fbb9e8", "#f67bcd", "#dd439b", "#af1d6b", "#7a0040"],
        "nBins": 10,
        "method": "equidistant",
        "range" :[-1, 1],
		"decimals": 2
      },
      "nRMSE": {
        "var_id": "nRMSE",
        "var_name": "nRMSE",
        "onEvent": "selectMetric",
        "selected": 0,
        "colorPalette": ["#FFFFCC","#FDFF46","#FFAD2F","#CD3232", "#800000"],
        "nBins": 10,
        "method": "equidistant",
        "range" :[0, 0.025],
        "decimals": 3
      },
      "nMAE": {
        "var_id": "nMAE",
        "var_name": "nMAE",
        "onEvent": "selectMetric",
        "selected": 0,
        "colorPalette": ["white","orange","red","darkred"],
        "nBins": 10,
        "method": "quantiles",
        "range" :[0, 0.025],
        "decimals": 3
      },
      "timing": {
        "var_id": "timing",
        "var_name": "Timing",
        "onEvent": "selectMetric",
        "selected": 0,
        "colorPalette": ["#0000d8", "#502ef4", "#8652ff", "#b476ff", "#dd9aff", "#ffffff", "#ffffff", "#fc9e80", "#fe6843", "#f50d08", "#c20000", "#8f0000"],
        "nBins": 12,
        "method": "equidistant",
        "range" :[-12, 12]
      },
      "ppd": {
        "var_id": "ppd",
        "var_name": "%Peak Dif",
        "onEvent": "selectMetric",
        "selected": 0,
        "colorPalette": ["#1d006e", "#4a2790", "#724eae", "#9877c7", "#bca2dc", "#ffffff", "#ffffff", "#ffa38b", "#f37457", "#d9492f", "#b51f10", "#870000"],
        "nBins": 12,
        "method": "equidistant",
        "range" :[-1.2, 1.2]
      },
      "pt_change_vol": {
        "var_id": "pt_change_vol",
        "var_name": "%Vol Dif",
        "onEvent": "selectMetric",
        "selected": 0,
        "colorPalette": ["#0000FF","#4040FF","8080FF","#bfbfFF","#ffffFF","#ffffFF","#f4a582", "#d6604d","#b2182b","#67001f"],
        "nBins": 12,
        "method": "equidistant",
        "range" :[-120, 120]
      }
    },
    "prod": {
      "Q_ol": {
        "var_id": "Q_ol",
        "var_name": "Open loop",
        "onEvent": "select_sim_type",
        "selected": 1
      },
      "Q_assim_norm_v2": {
        "var_id": "Q_assim_norm_v2",
        "var_name": "SMAP V2",
        "onEvent": "select_sim_type",
        "selected": 0
      },
      "Q_assim_smos": {
        "var_id": "Q_assim_smos",
        "var_name": "SMOS",
        "onEvent": "select_sim_type",
        "selected": 0
      },
		"EnKF_N30": {
        "var_id": "EnKF_N30",
        "var_name": "SMAP EnKF",
        "onEvent": "select_sim_type",
        "selected": 0
      },
	"EnKF_N30_var": {
        "var_id": "EnKF_N30_var",
        "var_name": "SMAP EnKFV",
        "onEvent": "select_sim_type",
        "selected": 0
      },
	"EnKF_N30_SMOS_varvar": {
		"var_id": "EnKF_N30_SMOS_varvar",
		"var_name": "SMOS EnKFV",
		"onEvent": "select_sim_type",
		"selected": 0
	  },
	"EnKF_N30_SMOS_CONST": {
		"var_id": "EnKF_N30_SMOS_CONST",
		"var_name": "SMOS EnKF",
		"onEvent": "select_sim_type",
		"selected": 0
	  }
    },
    "baseMapType": {
      "v1": {
        "var_id": "light_all",
        "var_name": "Light",
        "onEvent": "basemap_changer",
        "selected": 1
      },
      "v2": {
        "var_id": "Dark",
        "var_name": "Dark",
        "onEvent": "basemap_changer",
        "selected": 0
      },
      "v3": {
        "var_id": "Esri Imagery",
        "var_name": "Esri Imagery",
        "onEvent": "basemap_changer",
        "selected": 0
      },
      "v4": {
        "var_id": "Toner",
        "var_name": "Toner",
        "onEvent": "basemap_changer",
        "selected": 0
      }
    }
  },
  "plotlyLayout": {
    "margin": {
      "l": 80,
      "r": 80,
      "b": 70,
      "t": 50,
      "pad": 1
    },
    "titlefont": {
      "size": 16,
      "color": "black"
    },
    "legend": {
      "x": 0,
      "y": 1,
      "traceorder": "normal",
      "font": {
        "size": 14,
        "color": "#000"
      },
      "bgcolor": "rgba(255,255,255,0.90)",
      "bordercolor": "#000000",
      "borderwidth": 1,
      "orientation": "h"
    },
    "xaxis": {
      "titlefont": {
        "size": 18,
        "color": "#1c1c1c"
      },
      "tickfont": {
        "size": 18,
        "color": "black"
      },
      "type": "date"
    },
    "yaxis": {
      "title": "Q (m3/s)",
      "titlefont": {
        "size": 18,
        "color": "#1c1c1c"
      },
      "tickfont": {
        "size": 18,
        "color": "black"
      },
      "autorange": true,
      "rangemode": "tozero",
      "hoverformat": ".1f"
    },
    "plot_bgcolor": "#fff",
    "paper_bgcolor": "#eee",
    "hovermode": "closest",
    "updatemenus": [
      {
        "buttons": [],
        "direction": "left",
        "pad": {
          "r": 10,
          "t": 10
        },
        "showactive": true,
        "type": "buttons",
        "x": 0,
        "xanchor": "left",
        "y": 1.15,
        "yanchor": "top"
      }
    ],
    "initMD": "-04-01 00:00:00",
    "finalMD": "-11-01 00:00:00",
	"displayModeBar": true
  },
  "mapLayers": {
    "ifc_rvr.geojson": {
      "fnPath": "data/staticLayers/kmls/ifc_rvr.geojson",
      "fn": "ifc_rvr.geojson",
      "var_name": "IFC Bridge Sensor",
      "onEvent": "toggLyrStd",
      "selected": false
    },
    "eqd_nexrad.kmz": {
      "fnPath": "data/staticLayers/kmls/eqd_nexrad.kmz",
      "fn": "eqd_nexrad.kmz",
      "var_name": "Thiessen Polygon",
      "onEvent": "toggLyrStd",
      "selected": false
    },
    "nexrad_150_wgs84.kmz": {
      "fnPath": "data/staticLayers/kmls/nexrad_150_wgs84.kmz",
      "fn": "nexrad_150_wgs84.kmz",
      "var_name": "NEXRAD 150 km",
      "onEvent": "toggLyrStd",
      "selected": false
    },
    "nexrad230km.kmz": {
      "fnPath": "data/staticLayers/kmls/nexrad230km.kmz",
      "fn": "nexrad230km.kmz",
      "var_name": "NEXRAD 230 km",
      "onEvent": "toggLyrStd",
      "selected": false
    },
    "wt_area_kml.kmz": {
      "fnPath": "data/staticLayers/kmls/wt_area_kml.kmz",
      "fn": "wt_area_kml.kmz",
      "var_name": "Wind Farms",
      "onEvent": "toggLyrStd",
      "selected": false
    },
    "wt_point.geojson": {
      "fnPath": "data/staticLayers/kmls/wt_point.kml",
      "fn": "wt_point.kml",
      "var_name": "Wind Turbines",
      "onEvent": "toggLyrStd",
      "selected": false
    },
    "IACounties.geojson": {
      "fnPath": "data/staticLayers/kmls/IACounties.geojson",
      "fn": "IACounties.geojson",
      "var_name": "IA Counties",
      "onEvent": "toggLyrStd",
      "selected": false
    }
  },
  "map": {
    "center": [
      41.9472,
      -93.5403
    ],
    "defaultZoom": 8,
    "maxZoom": 15,
    "basemapList": {
      "default": {
        "id": "light_all",
        "url": "http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",
        "attribution": "&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors, &copy; <a href=\"https://carto.com/attributions\">CARTO</a>",
        "subdomains": "abcd"
      }
    },
	"geoSearch": true
  },
  "customBaseMap": {
    "url": "http://s-iihr50.iihr.uiowa.edu/hydro-analytics.net/ifc_net3_simp.geojson.gz",
    "colors": {
      "3": "#00e4ff",
      "4": "#00c5ff",
      "5": "#00acff",
      "6": "#018eff",
      "7": "#007dff",
      "8": "#007bff",
      "9": "#0055ff",
      "10": "#000000",
      "11": "#321321"
    },
    "name" : "River Network",
    "propoertyName": "h_order"
  }
}