Beispiel #1
0
        /// <summary>
        /// aktuell type 4
        /// </summary>
        /// <param name="myPlant"></param>
        /// <param name="u">Qin in m³/d</param>
        /// <param name="par">
        /// par[0] is the density of the substrate in kg/m^3
        /// </param>
        /// <returns></returns>
        override protected physValue[] doMeasurement(biogas.plant myPlant,
                                                     double u, params double[] par)
        {
            //
            physValue[] values = new physValue[1];

            // 1. komponente ist rho als double, unten in density def. dann anstatt
            // 1000 einsetzen
            if (par.Length != 1) // 2, da rho auch übergeben werden muss
            {
                throw new exception(String.Format(
                                        "Length of par is != 1: {0}!", par.Length));
            }

            transportation myTransportations = myPlant.myTransportation;

            // get pump from transportation class using id
            biogas.substrate_transport mySubsTransport = myTransportations.getSubstrateTransportByID(id_suffix);

            // is the energy_per_ton [kWh/t]
            double energy_per_ton = mySubsTransport.energy_per_ton;

            // calc energy consumption in kWh/d
            // hier muss man schon rho der zu fördernden menge kennen
            values[0] = new physValue("Pel_trans", u * par[0] / 1000 * energy_per_ton, "kWh/d",
                                      "transport energy");

            return(values);
        }
        /// <summary>
        /// aktuell type 4
        /// </summary>
        /// <param name="myPlant"></param>
        /// <param name="u">Qin in m³/d</param>
        /// <param name="par">
        /// par[0] is the to be pumped amount in m³/d
        /// par[1] is the density of the sludge in kg/m^3 (gilt nur für substrate_transport)
        /// für pump Aufruf, par ist nur 1dim.
        /// </param>
        /// <returns></returns>
        override protected physValue[] doMeasurement(biogas.plant myPlant,
                                                     double u, params double[] par)
        {
            //
            physValue[] values = new physValue[1];

            // sobald in MATLAB die neuen pumps genutzt werden, ist par 2dim
            // 2. komponente ist rho als double, unten in density def. dann anstatt
            // 1000 einsetzen
            if ((par.Length <= 0) || (par.Length > 2)) // 2, da rho auch übergeben werden muss
            {
                throw new exception(String.Format(
                                        "Length of par must be 1 or 2: {0}!", par.Length));
            }

            transportation myTransportations = myPlant.myTransportation;

            // get gravitational constant
            physValue g = myPlant.g;

            if (par.Length == 2)
            {
                // get pump from transportation class using id
                biogas.substrate_transport mySubstrateTransport =
                    myTransportations.getSubstrateTransportByID(id_suffix);

                // muss hier nicht gemacht werden, wird schon in pump gemacht
                // basierend auf id_suffix, bzw. dem Startort entscheidet man
                // wie groß die Dichte ist
                // wenn Start: substratemix ist, dann Dichte über Mittelwerte der zu pumpenden
                // Substrate wählen, dazu getSubstrateMixFlowForFermenter nutzen
                // wenn Start ein Digester oder storagetank ist, dann ist Dichte immer 1000 kg/m^3
                // gemessene Dichte des density_sensors interessiert nicht, weil das die Dichte des
                // Inputs von einem digester ist.

                physValue density = new physValue("rho", par[1], "kg/m^3", "density");

                // calc energy consumption in kWh/d
                // hier muss man schon rho der zu fördernden menge kennen
                values[0] = mySubstrateTransport.calcEnergyConsumption(u, par[0], g, density);
            }
            else if (par.Length == 1) // called from pump, we pump sludge
            {
                // get pump from transportation class using id
                biogas.pump myPump = myTransportations.getPumpByID(id_suffix);

                physValue density = new physValue("rho", 1000, "kg/m^3", "density");

                // calc energy consumption in kWh/d
                // hier muss man schon rho der zu fördernden menge kennen
                values[0] = myPump.calcEnergyConsumption(u, par[0], g, density);
            }
            else
            {
                throw new exception("par must be one- or two-dimensional!");
            }

            return(values);
        }