/// <summary> /// measures mean value of given parameter in mySubstrates depending on Q /// /// type 3 /// </summary> /// <param name="x">not used</param> /// <param name="mySubstrates"></param> /// <param name="Q"> /// substrate feed in m^3/d /// doesn't matter if this is substrate mix for plant or /// substrate mix to digester, depends on what we want to have</param> /// <param name="par">not used</param> /// <returns>mean value of given parameter</returns> override protected physValue[] doMeasurement(double[] x, biogas.substrates mySubstrates, double[] Q, params double[] par) { physValue[] values = new physValue[1]; // id_suffix is here the parameter to be measured, see above mySubstrates.get_weighted_sum_of(Q, id_suffix, out values[0]); values[0].Symbol = id_suffix; return(values); }
/// <summary> /// measures the density of the substrate feed of a given digester /// /// type 7 /// /// TODO: mySensors wird hier eigentlich nicht benötigt /// wenn mySensors gelöscht wird, dann ist das keine type 7 funktion mehr, OK /// /// </summary> /// <param name="x">ADM state vector</param> /// <param name="myPlant"></param> /// <param name="mySubstrates"></param> /// <param name="mySensors"></param> /// <param name="Q"> /// substrate feed and recirculation sludge going into the digester /// first values are Q for substrates, then pumped sludge going into digester /// dimension: always number of substrates + number of digesters /// </param> /// <param name="par">not used</param> /// <returns></returns> override protected physValue[] doMeasurement(double[] x, biogas.plant myPlant, biogas.substrates mySubstrates, biogas.sensors mySensors, double[] Q, params double[] par) { physValue[] values = new physValue[1]; // number of substrates int n_substrate = mySubstrates.getNumSubstrates(); double Qsum = math.sum(Q); // das ist feed in fermenter if (Q.Length < n_substrate) { throw new exception(String.Format( "Q.Length < n_substrate: {0} < {1}!", Q.Length, n_substrate)); } double[] Qsubstrates = new double[n_substrate]; // volumeflow for substrates for (int isubstrate = 0; isubstrate < n_substrate; isubstrate++) { Qsubstrates[isubstrate] = Q[isubstrate]; } // physValue rhoSubstrate; // wenn fermenter nicht mit substraten gefüttert wird if (math.sum(Qsubstrates) == 0) { rhoSubstrate = new physValue(0, "kg/d"); } else { mySubstrates.get_weighted_sum_of(Qsubstrates, "rho", out rhoSubstrate); rhoSubstrate = rhoSubstrate.convertUnit("kg/d"); } // physValue rhoSludge = new physValue("rho", 1000, "kg/m^3"); for (int isubstrate = n_substrate; isubstrate < Q.Length; isubstrate++) { rhoSubstrate += rhoSludge * new physValue(Q[isubstrate], "m^3/d"); } // if (Qsum != 0) { values[0] = rhoSubstrate / new physValue(Qsum, "m^3/d"); } else { values[0] = new physValue(0, "kg/m^3"); } // values[0].Symbol = "rho"; // return(values); }