/// <summary>
        /// Dado un arreglo que contiene rasters de Datos y dos enteros, arma un raster grande pegando los contenidos en el arreglo de acuerdo
        /// a los argumentos de cantidad de raster por eje.
        /// </summary>
        /// <param name="arrayOfRaster">Arreglo de Rasters a pegar</param>
        /// <param name="divX">Cantidad de rasters del eje X</param>
        /// <param name="divY">Cantidad de rasters del eje Y</param>
        /// <returns></returns>
        public RasterDatos armarRaster(RasterDatos[] arrayOfRaster, int anchoEjeX, int altoEjeY, int divX, int divY)
        {
            RasterDatos newRaster = new RasterDatos(anchoEjeX, altoEjeY);

            int indiceRaster = 0;

            //For para recorrer los rasters
            for (int cy=0; cy < divY; cy++)
            {
                for(int cx=0; cx < divX; cx++)
                {

                    for (int i = 0; i < arrayOfRaster[indiceRaster].anchoEjeX_; i++)
                    {
                        for (int j = 0; j < arrayOfRaster[indiceRaster].altoEjeY_; j++)
                        {

                            newRaster.matrizDEM_[(cy * arrayOfRaster[indiceRaster].altoEjeY_) + j, (cx * arrayOfRaster[indiceRaster].anchoEjeX_) + i] = arrayOfRaster[indiceRaster].matrizDEM_[j, i];

                        }
                    }

                    indiceRaster++;
                }
            }
            return newRaster;
        }
        public DataSet(ConfParameters configurationSet)
        {
            anchoEjeX = configurationSet.anchoEjeX;
            altoEjeY = configurationSet.altoEjeY;
            dimensionCelda = configurationSet.dimensionCelda;

            DEM = new RasterDatos(configurationSet.pathDEM, anchoEjeX, altoEjeY);
            profundidadSuelos = new RasterDatos(configurationSet.pathProfSuelos, anchoEjeX, altoEjeY);

            alturaSueloPermeable = new RasterDatos(anchoEjeX, altoEjeY);
            matrizCantVariaciones = new RasterDatos(anchoEjeX, altoEjeY);

            for (int y = 0; y < altoEjeY; y++)
            {
                for (int x = 0; x < anchoEjeX; x++)
                {
                    alturaSueloPermeable.matrizDEM_[y, x] = DEM.matrizDEM_[y, x] - profundidadSuelos.matrizDEM_[y, x];
                }
            }

            kConductividadHSuelo = new RasterDatos(configurationSet.pathKConductividadHSuelo, anchoEjeX, altoEjeY);
            capacidadAlmacenSuelo = new RasterDatos(configurationSet.pathCapacidadAlmacenSuelo, anchoEjeX, altoEjeY);
            aguaSuperficie = new RasterDatos(configurationSet.pathAguaSuperficial, anchoEjeX, altoEjeY);

            auxiliarAguaCapaPermeable = new RasterDatos(configurationSet.pathAguaCapaPermeable, anchoEjeX, altoEjeY);

            aguaCapaPermeable = new RasterDatos(anchoEjeX, altoEjeY);

            //Llamado antes Normalizacion Inicial, el agua que se lee del archivo es sin tener en cuenta la porosidad
            //del suelo.
            for (int x = 0; x < anchoEjeX; x++)
            {
                for (int y = 0; y < altoEjeY; y++)
                {
                    if (capacidadAlmacenSuelo.matrizDEM_[y, x] > 0)
                    {
                        aguaCapaPermeable.matrizDEM_[y, x] = auxiliarAguaCapaPermeable.matrizDEM_[y, x] / capacidadAlmacenSuelo.matrizDEM_[y, x]
                                                            * (DEM.matrizDEM_[y, x] - alturaSueloPermeable.matrizDEM_[y, x]);
                    }
                    else
                    {
                        aguaCapaPermeable.matrizDEM_[y, x] = 0.0f;
                    }
                }
            }

            coefEvaporacion = (float)configurationSet.coefEvaporacion;
            coefManning = configurationSet.coefManning;
            periodoGrabSalidas = configurationSet.periodoGrabacionResult;
            maxCantidadVariaciones = configurationSet.maxCantidadVariaciones;
        }
        public DataSet(ConfParameters configurationSet)
        {
            anchoEjeX      = configurationSet.anchoEjeX;
            altoEjeY       = configurationSet.altoEjeY;
            dimensionCelda = configurationSet.dimensionCelda;

            DEM = new RasterDatos(configurationSet.pathDEM, anchoEjeX, altoEjeY);
            profundidadSuelos = new RasterDatos(configurationSet.pathProfSuelos, anchoEjeX, altoEjeY);

            alturaSueloPermeable  = new RasterDatos(anchoEjeX, altoEjeY);
            matrizCantVariaciones = new RasterDatos(anchoEjeX, altoEjeY);

            for (int y = 0; y < altoEjeY; y++)
            {
                for (int x = 0; x < anchoEjeX; x++)
                {
                    alturaSueloPermeable.matrizDEM_[y, x] = DEM.matrizDEM_[y, x] - profundidadSuelos.matrizDEM_[y, x];
                }
            }

            kConductividadHSuelo  = new RasterDatos(configurationSet.pathKConductividadHSuelo, anchoEjeX, altoEjeY);
            capacidadAlmacenSuelo = new RasterDatos(configurationSet.pathCapacidadAlmacenSuelo, anchoEjeX, altoEjeY);
            aguaSuperficie        = new RasterDatos(configurationSet.pathAguaSuperficial, anchoEjeX, altoEjeY);

            auxiliarAguaCapaPermeable = new RasterDatos(configurationSet.pathAguaCapaPermeable, anchoEjeX, altoEjeY);

            aguaCapaPermeable = new RasterDatos(anchoEjeX, altoEjeY);

            //Llamado antes Normalizacion Inicial, el agua que se lee del archivo es sin tener en cuenta la porosidad
            //del suelo.
            for (int x = 0; x < anchoEjeX; x++)
            {
                for (int y = 0; y < altoEjeY; y++)
                {
                    if (capacidadAlmacenSuelo.matrizDEM_[y, x] > 0)
                    {
                        aguaCapaPermeable.matrizDEM_[y, x] = auxiliarAguaCapaPermeable.matrizDEM_[y, x] / capacidadAlmacenSuelo.matrizDEM_[y, x]
                                                             * (DEM.matrizDEM_[y, x] - alturaSueloPermeable.matrizDEM_[y, x]);
                    }
                    else
                    {
                        aguaCapaPermeable.matrizDEM_[y, x] = 0.0f;
                    }
                }
            }

            coefEvaporacion        = (float)configurationSet.coefEvaporacion;
            coefManning            = configurationSet.coefManning;
            periodoGrabSalidas     = configurationSet.periodoGrabacionResult;
            maxCantidadVariaciones = configurationSet.maxCantidadVariaciones;
        }
        /// <summary>
        /// Dados datos de dimensiones (por ahora pares) y en cuantas divisiones se debe hacer, crea rasters y los devuelve en una arreglo
        /// </summary>
        /// <param name="anchoEjeX">Ancho del Raster original</param>
        /// <param name="altoEjeY">Alto del Raster original</param>
        /// <param name="divX">Cantidad de pedazos a dividir en X</param>
        /// <param name="divY">Cantidad de pedazos a dividir en Y</param>
        /// <returns></returns>
        public RasterDatos[] desarmarRaster(int anchoEjeX, int altoEjeY, int divX, int divY)
        {
            RasterDatos[] rasterCreated = new RasterDatos[divX * divY];

            int anchoRastercito = anchoEjeX / divX;
            int altoRastercito = altoEjeY / divY;

            for(int i=0; i <rasterCreated.Length; i++)
            {
                rasterCreated[i] = new RasterDatos(anchoRastercito, altoRastercito);
            }

            return rasterCreated;
        }
Esempio n. 5
0
        /// <summary>
        /// Dados datos de dimensiones (por ahora pares) y en cuantas divisiones se debe hacer, crea rasters y los devuelve en una arreglo
        /// </summary>
        /// <param name="anchoEjeX">Ancho del Raster original</param>
        /// <param name="altoEjeY">Alto del Raster original</param>
        /// <param name="divX">Cantidad de pedazos a dividir en X</param>
        /// <param name="divY">Cantidad de pedazos a dividir en Y</param>
        /// <returns></returns>
        public RasterDatos[] desarmarRaster(int anchoEjeX, int altoEjeY, int divX, int divY)
        {
            RasterDatos[] rasterCreated = new RasterDatos[divX * divY];

            int anchoRastercito = anchoEjeX / divX;
            int altoRastercito  = altoEjeY / divY;

            for (int i = 0; i < rasterCreated.Length; i++)
            {
                rasterCreated[i] = new RasterDatos(anchoRastercito, altoRastercito);
            }

            return(rasterCreated);
        }
        public void ejecutarEscurrimientoSuperficial(ref DataSet dataSetSimulador, float dts)
        {
            float tempValue;

            //Se hace una copia de los datos que seran leidos para procesar. Ya que no acepta valores por referencia.
            DataSet copyDataSetSimulador = dataSetSimulador;



            //Se generan datos
            RasterDatos tempFlujoEnX = new RasterDatos(dataSetSimulador.anchoEjeX, dataSetSimulador.altoEjeY);
            RasterDatos tempFlujoEnY = new RasterDatos(dataSetSimulador.anchoEjeX, dataSetSimulador.altoEjeY);

            int anchoEjeX = dataSetSimulador.anchoEjeX;
            int altoEjeY  = dataSetSimulador.altoEjeY;

            Parallel.Invoke(
                () =>
            {
                tempFlujoEnX = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, 0, anchoEjeX, 0, altoEjeY);
            },      // close first Action

                () =>
            {
                tempFlujoEnY = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, 0, anchoEjeX, 0, altoEjeY);
            }      //close second Action

                ); //close parallel.invoke


            dataSetSimulador.flujoEnXSuperficie = tempFlujoEnX;
            dataSetSimulador.flujoEnYSuperficie = tempFlujoEnY;

            /*
             * dataSetSimulador.flujoEnXSuperficie = escurrimientoSuperficialEnX(dataSetSimulador, dts);
             * dataSetSimulador.flujoEnYSuperficie = escurrimientoSuperficialEnY(dataSetSimulador, dts);*/

            dataSetSimulador.flujoResultanteSuperficie = new RasterDatos(dataSetSimulador.anchoEjeX, dataSetSimulador.altoEjeY);

            for (int x = 1; x < dataSetSimulador.anchoEjeX - 1; x++)
            {
                for (int y = 1; y < dataSetSimulador.altoEjeY - 1; y++)
                {
                    tempValue = (float)((dataSetSimulador.flujoEnXSuperficie.matrizDEM_[y, x - 1] - dataSetSimulador.flujoEnXSuperficie.matrizDEM_[y, x]
                                         + dataSetSimulador.flujoEnYSuperficie.matrizDEM_[y - 1, x] - dataSetSimulador.flujoEnYSuperficie.matrizDEM_[y, x]) / Math.Pow(dataSetSimulador.dimensionCelda, 2.0));

                    dataSetSimulador.flujoResultanteSuperficie.matrizDEM_[y, x] = tempValue;
                }
            }
        }
        public void ejecutarEscurrimientoSuperficial(ref DataSet dataSetSimulador, float dts)
        {
            float tempValue;

            //Se hace una copia de los datos que seran leidos para procesar. Ya que no acepta valores por referencia.
            DataSet copyDataSetSimulador = dataSetSimulador;

            //Se generan datos
            RasterDatos tempFlujoEnX = new RasterDatos(dataSetSimulador.anchoEjeX, dataSetSimulador.altoEjeY);
            RasterDatos tempFlujoEnY = new RasterDatos(dataSetSimulador.anchoEjeX, dataSetSimulador.altoEjeY);

            int anchoEjeX = dataSetSimulador.anchoEjeX;
            int altoEjeY = dataSetSimulador.altoEjeY;

            Parallel.Invoke(
                () =>
                {
                    tempFlujoEnX = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, 0, anchoEjeX, 0, altoEjeY);
                },  // close first Action

                () =>
                {
                    tempFlujoEnY = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, 0, anchoEjeX, 0, altoEjeY);
                } //close second Action

            ); //close parallel.invoke

            dataSetSimulador.flujoEnXSuperficie = tempFlujoEnX;
            dataSetSimulador.flujoEnYSuperficie = tempFlujoEnY;

            /*
            dataSetSimulador.flujoEnXSuperficie = escurrimientoSuperficialEnX(dataSetSimulador, dts);
            dataSetSimulador.flujoEnYSuperficie = escurrimientoSuperficialEnY(dataSetSimulador, dts);*/

            dataSetSimulador.flujoResultanteSuperficie = new RasterDatos(dataSetSimulador.anchoEjeX, dataSetSimulador.altoEjeY);

            for (int x = 1; x < dataSetSimulador.anchoEjeX - 1; x++)
            {
                for (int y = 1; y < dataSetSimulador.altoEjeY - 1; y++)
                {

                    tempValue = (float)((dataSetSimulador.flujoEnXSuperficie.matrizDEM_[y, x - 1] - dataSetSimulador.flujoEnXSuperficie.matrizDEM_[y, x]
                                        + dataSetSimulador.flujoEnYSuperficie.matrizDEM_[y - 1, x] - dataSetSimulador.flujoEnYSuperficie.matrizDEM_[y, x]) / Math.Pow(dataSetSimulador.dimensionCelda, 2.0));

                    dataSetSimulador.flujoResultanteSuperficie.matrizDEM_[y, x] = tempValue;
                }
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Dado un arreglo que contiene rasters de Datos y dos enteros, arma un raster grande pegando los contenidos en el arreglo de acuerdo
        /// a los argumentos de cantidad de raster por eje.
        /// </summary>
        /// <param name="arrayOfRaster">Arreglo de Rasters a pegar</param>
        /// <param name="divX">Cantidad de rasters del eje X</param>
        /// <param name="divY">Cantidad de rasters del eje Y</param>
        /// <returns></returns>
        public RasterDatos armarRaster(RasterDatos[] arrayOfRaster, int anchoEjeX, int altoEjeY, int divX, int divY)
        {
            RasterDatos newRaster = new RasterDatos(anchoEjeX, altoEjeY);

            int indiceRaster = 0;

            //For para recorrer los rasters
            for (int cy = 0; cy < divY; cy++)
            {
                for (int cx = 0; cx < divX; cx++)
                {
                    for (int i = 0; i < arrayOfRaster[indiceRaster].anchoEjeX_; i++)
                    {
                        for (int j = 0; j < arrayOfRaster[indiceRaster].altoEjeY_; j++)
                        {
                            newRaster.matrizDEM_[(cy * arrayOfRaster[indiceRaster].altoEjeY_) + j, (cx * arrayOfRaster[indiceRaster].anchoEjeX_) + i] = arrayOfRaster[indiceRaster].matrizDEM_[j, i];
                        }
                    }

                    indiceRaster++;
                }
            }
            return(newRaster);
        }
        public void ejecutarEscurrimientoSuperficial(ref DataSet dataSetSimulador, float dts)
        {
            float tempValue;

            //Se hace una copia de los datos que seran leidos para procesar. Ya que no acepta valores por referencia.
            DataSet copyDataSetSimulador = dataSetSimulador;
            int anchoEjeX = dataSetSimulador.anchoEjeX;
            int altoEjeY = dataSetSimulador.altoEjeY;

            //Se deben generar los raster tanto para X como para Y
            /*RasterDatos[] rastersFlujoX = new RasterDatos[divXFlujoEnX * divYFlujoEnX];
            RasterDatos[] rastersFlujoY = new RasterDatos[divXFlujoEnY * divYFlujoEnY];*/

            RasterDatos[] rastersFlujoX = desarmarRaster(anchoEjeX, altoEjeY, 2, 2);
            RasterDatos[] rastersFlujoY = desarmarRaster(anchoEjeX, altoEjeY, 2, 2);

            //Se generan datos
            RasterDatos tempFlujoEnX = new RasterDatos(anchoEjeX, altoEjeY);
            RasterDatos tempFlujoEnY = new RasterDatos(anchoEjeX, altoEjeY);

            Parallel.Invoke(
                () =>
                {
                    rastersFlujoX[0] = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, 0, anchoEjeX/2, 0, altoEjeY/2);
                },
                () =>
                {
                    rastersFlujoX[1] = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, anchoEjeX/2, anchoEjeX, 0, altoEjeY/2);
                },
                () =>
                {
                    rastersFlujoX[2] = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, 0, anchoEjeX/2, altoEjeY/2, altoEjeY);
                },
                () =>
                {
                    rastersFlujoX[3] = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, anchoEjeX/2, anchoEjeX, altoEjeY/2, altoEjeY);
                },

                () =>
                {
                    rastersFlujoY[0] = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, 0, anchoEjeX/2, 0, altoEjeY/2);
                },
                () =>
                {
                    rastersFlujoY[1] = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, anchoEjeX/2, anchoEjeX, 0, altoEjeY/2);
                },
                () =>
                {
                    rastersFlujoY[2] = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, 0, anchoEjeX/2, altoEjeY/2, altoEjeY);
                },
                () =>
                {
                    rastersFlujoY[3] = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, anchoEjeX/2, anchoEjeX, altoEjeY/2, altoEjeY);
                }

            ); //close parallel.invoke

            /*
            Parallel.Invoke(
                () =>
                    {
                        tempFlujoEnX = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, 0, anchoEjeX, 0, altoEjeY);
                    },  // close first Action

                () =>
                    {
                        tempFlujoEnY = escurrimientoSuperficialEnY(copyDataSetSimulador, dts,0, anchoEjeX, 0, altoEjeY);
                    } //close second Action

            ); //close parallel.invoke
            */

            dataSetSimulador.flujoEnXSuperficie = armarRaster(rastersFlujoX, anchoEjeX, altoEjeY, 2, 2);
            dataSetSimulador.flujoEnYSuperficie = armarRaster(rastersFlujoY, anchoEjeX, altoEjeY, 2, 2);

            //dataSetSimulador.flujoEnXSuperficie = tempFlujoEnX;
            //dataSetSimulador.flujoEnYSuperficie = tempFlujoEnY;

            /*
            dataSetSimulador.flujoEnXSuperficie = escurrimientoSuperficialEnX(dataSetSimulador, dts);

            dataSetSimulador.flujoEnYSuperficie = escurrimientoSuperficialEnY(dataSetSimulador, dts);*/

            dataSetSimulador.flujoResultanteSuperficie = new RasterDatos(dataSetSimulador.anchoEjeX, dataSetSimulador.altoEjeY);

            for (int x = 1; x < dataSetSimulador.anchoEjeX - 1; x++)
            {
                for (int y = 1; y < dataSetSimulador.altoEjeY - 1; y++)
                {

                    tempValue = (float)((dataSetSimulador.flujoEnXSuperficie.matrizDEM_[y, x - 1] - dataSetSimulador.flujoEnXSuperficie.matrizDEM_[y, x]
                                        + dataSetSimulador.flujoEnYSuperficie.matrizDEM_[y - 1, x] - dataSetSimulador.flujoEnYSuperficie.matrizDEM_[y, x]) / Math.Pow(dataSetSimulador.dimensionCelda, 2.0));

                    dataSetSimulador.flujoResultanteSuperficie.matrizDEM_[y, x] = tempValue;
                }
            }
        }
Esempio n. 10
0
        public void ejecutarEscurrimientoSuperficial(ref DataSet dataSetSimulador, float dts)
        {
            float tempValue;

            //Se hace una copia de los datos que seran leidos para procesar. Ya que no acepta valores por referencia.
            DataSet copyDataSetSimulador = dataSetSimulador;
            int     anchoEjeX            = dataSetSimulador.anchoEjeX;
            int     altoEjeY             = dataSetSimulador.altoEjeY;

            //Se deben generar los raster tanto para X como para Y

            /*RasterDatos[] rastersFlujoX = new RasterDatos[divXFlujoEnX * divYFlujoEnX];
            *  RasterDatos[] rastersFlujoY = new RasterDatos[divXFlujoEnY * divYFlujoEnY];*/

            RasterDatos[] rastersFlujoX = desarmarRaster(anchoEjeX, altoEjeY, 2, 2);
            RasterDatos[] rastersFlujoY = desarmarRaster(anchoEjeX, altoEjeY, 2, 2);

            //Se generan datos
            RasterDatos tempFlujoEnX = new RasterDatos(anchoEjeX, altoEjeY);
            RasterDatos tempFlujoEnY = new RasterDatos(anchoEjeX, altoEjeY);

            Parallel.Invoke(
                () =>
            {
                rastersFlujoX[0] = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, 0, anchoEjeX / 2, 0, altoEjeY / 2);
            },
                () =>
            {
                rastersFlujoX[1] = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, anchoEjeX / 2, anchoEjeX, 0, altoEjeY / 2);
            },
                () =>
            {
                rastersFlujoX[2] = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, 0, anchoEjeX / 2, altoEjeY / 2, altoEjeY);
            },
                () =>
            {
                rastersFlujoX[3] = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, anchoEjeX / 2, anchoEjeX, altoEjeY / 2, altoEjeY);
            },

                () =>
            {
                rastersFlujoY[0] = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, 0, anchoEjeX / 2, 0, altoEjeY / 2);
            },
                () =>
            {
                rastersFlujoY[1] = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, anchoEjeX / 2, anchoEjeX, 0, altoEjeY / 2);
            },
                () =>
            {
                rastersFlujoY[2] = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, 0, anchoEjeX / 2, altoEjeY / 2, altoEjeY);
            },
                () =>
            {
                rastersFlujoY[3] = escurrimientoSuperficialEnY(copyDataSetSimulador, dts, anchoEjeX / 2, anchoEjeX, altoEjeY / 2, altoEjeY);
            }

                ); //close parallel.invoke



            /*
             * Parallel.Invoke(
             *  () =>
             *      {
             *          tempFlujoEnX = escurrimientoSuperficialEnX(copyDataSetSimulador, dts, 0, anchoEjeX, 0, altoEjeY);
             *      },  // close first Action
             *
             *  () =>
             *      {
             *          tempFlujoEnY = escurrimientoSuperficialEnY(copyDataSetSimulador, dts,0, anchoEjeX, 0, altoEjeY);
             *      } //close second Action
             *
             * ); //close parallel.invoke
             */

            dataSetSimulador.flujoEnXSuperficie = armarRaster(rastersFlujoX, anchoEjeX, altoEjeY, 2, 2);
            dataSetSimulador.flujoEnYSuperficie = armarRaster(rastersFlujoY, anchoEjeX, altoEjeY, 2, 2);

            //dataSetSimulador.flujoEnXSuperficie = tempFlujoEnX;
            //dataSetSimulador.flujoEnYSuperficie = tempFlujoEnY;

            /*
             * dataSetSimulador.flujoEnXSuperficie = escurrimientoSuperficialEnX(dataSetSimulador, dts);
             *
             * dataSetSimulador.flujoEnYSuperficie = escurrimientoSuperficialEnY(dataSetSimulador, dts);*/

            dataSetSimulador.flujoResultanteSuperficie = new RasterDatos(dataSetSimulador.anchoEjeX, dataSetSimulador.altoEjeY);

            for (int x = 1; x < dataSetSimulador.anchoEjeX - 1; x++)
            {
                for (int y = 1; y < dataSetSimulador.altoEjeY - 1; y++)
                {
                    tempValue = (float)((dataSetSimulador.flujoEnXSuperficie.matrizDEM_[y, x - 1] - dataSetSimulador.flujoEnXSuperficie.matrizDEM_[y, x]
                                         + dataSetSimulador.flujoEnYSuperficie.matrizDEM_[y - 1, x] - dataSetSimulador.flujoEnYSuperficie.matrizDEM_[y, x]) / Math.Pow(dataSetSimulador.dimensionCelda, 2.0));

                    dataSetSimulador.flujoResultanteSuperficie.matrizDEM_[y, x] = tempValue;
                }
            }
        }