vector_d get_simplex(double lambda, const vector_d& c) { using stan::math::inv_logit; int K = c.size() + 1; vector_d theta(K); theta(0) = 1.0 - inv_logit(lambda - c(0)); for (int k = 1; k < (K - 1); ++k) theta(k) = inv_logit(lambda - c(k - 1)) - inv_logit(lambda - c(k)); theta(K-1) = inv_logit(lambda - c(K-2)); // - 0.0 return theta; }
//--------------------------------------------------------------------- // Calculate Runoff Coefficient //--------------------------------------------------------------------- double model_tools::CalcRunoffCoeff(vector_d &streamflow, vector_d &precipitation) { // calculate runoff coefficient as stated in: // Kokkonen, T. S. et al. (2003). double sum_flow = 0; double sum_pcp = 0; for (unsigned int i = 0; i < streamflow.size(); i++) { sum_flow += streamflow[i]; sum_pcp += precipitation[i]; } return (sum_flow / sum_pcp * 100); }
double model_tools::CalcEfficiency(vector_d &obs, vector_d &sim) { int i; int nvals = obs.size(); double sum_obsminsim_2 = 0.0; double sum_obsminmean_2 = 0.0; double mean_obs = 0.0; //double sum_obs = 0.0; // sum of observed discharge // calculate mean of observed time series for (i = 0; i < nvals; i++) mean_obs += obs[i] / nvals; for (i = 0; i < nvals; i++) { sum_obsminsim_2 += pow(obs[i] - sim[i], 2.0); sum_obsminmean_2 += pow(obs[i] - mean_obs, 2.0); } return (1 - sum_obsminsim_2 / sum_obsminmean_2); }
//--------------------------------------------------------------------- vector_d model_tools::mmday_to_m3s(vector_d &mmday, vector_d &m3s, double area) { for (unsigned int i = 0; i < m3s.size(); i++) m3s[i] = mmday[i] * area / 86.4; return(m3s); }
//--------------------------------------------------------------------- vector_d model_tools::m3s_to_mmday(vector_d &m3s, vector_d &mmday, double area) { for (unsigned int i = 0; i < m3s.size(); i++) mmday[i] = m3s[i] * 86.4 / area; return(mmday); }