예제 #1
0
    def __init__(self, parent = None, dominio=None):#Hay que pasarle la ventana que lo invoca

        QMainWindow.__init__(self, parent)
        ti=0.0
##        tf=3.0
        tf=0.3
        ##      
        ##justito para que quede 0.1 el dt        
##        nit=int(tf/0.1)
##        nit=100
        nit=100

        ##el mismo ancho y alto para que quede cada 1 unidad
####        nix=dominio.ancho
        nix=40
##        niy=dominio.alto
        niy=40

        ##discretizacion temporal
        dt=(tf-ti)/nit
        nit=nit+1
        tiempos=np.zeros((nit),float)
        tiempos[0]=ti        

        ##se suma 1 para que sea haga bien la division es un intervalo mas 0..100 (101)        
        nix=nix+1
        niy=niy+1
        
        #discretizacion temporal
        for i in range(1,nit):
            tiempos[i]=tiempos[i-1]+dt        
        
        ##discretizacion espacial
        xx = np.linspace(0,dominio.ancho,nix) ;
        yy = np.linspace(dominio.alto,0,niy) ;
        ##Se generan las matrices para usar en todas las graficas
        X, Y = np.meshgrid(xx, yy)

##        print 'Matrices X, Y'
##        print X
##        print Y
##        print '\n'

        self.ti=ti
        self.tf=tf
        self.dt=dt
        self.nix=nix
        self.niy=niy
        self.cardt=0

           


        ##Llamado a procesar la barrera.. para generar los pozos virtuales porque se duplican por precensia de la barrera
        dominio.procesarBarrera()

        ##LLAMADO AL METODO DE SOLUCION
        ##llamamo al metodo de solucion asociado al dominio para que me de la matriz
        ### se envian ademas todas las discretizaciones
        matrix=dominio.metodo.calcular(tiempos,xx,yy)

        matx = dominio.metodo.gradienteX()

        maty = dominio.metodo.gradienteY()

        ##se obtiene un pozo de observacion el primero por defecto
        pozoObservacion=dominio.obtenerPozoObservacion()            
        ##Obtener una observacion de ensayo ...que pasa cuando hay mas de una asociada?????        
        observaciones=pozoObservacion.observaciones[0].devolverO()
        self.observaciones = observaciones
      
        pozoBombeo=dominio.obtenerPozoBombeo()
        ##Obtener el ensayo de bombeo, los caudales y tiempos(al menos hay uno) ...que pasa cuando hay mas de un ensayo asociado?????        
        bombeos=pozoBombeo.ensayos[0].devolverB()           
        self.bombeos=bombeos
        
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)


#### Codigo nuevo introducido para prueba

        #fig2 = Figure(figsize = (1.5, 2.5))

        fig2 = Figure(figsize = (1.8 * 4, 2.4 * 4))
        axu2 = fig2.add_subplot(2, 2, 1)
        axd2 = fig2.add_subplot(2, 2, 2)
        axt2 = fig2.add_subplot(2, 2, 3, projection = '3d')
        axc2 = fig2.add_subplot(2, 2, 4)
        fig2.subplots_adjust(hspace=.2, wspace=.3, bottom=.07, left=.08, right=.92, top=.94)
        
        #axt = Axes3D(fig2)        
##        superficies=np.zeros((len(tiempos)),Poly3DCollection)
        superficies=[]
        for i in range(0,nit):            
            Z = matrix[i]
            axt2.cla()
##        print 'Matriz generada '
##            print 't: '+str(i)
##            print 'Z: \n' + str(Z)
            surf = axt2.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,linewidth=0, antialiased=False)
            
            superficies.append(surf)
##            canvas = FigureCanvas(fig2)
##            canvas.draw()        


#### fIN Codigo nuevo introducido para prueba

        ran=0
        self.fm = fm(matrix, matx, maty, dominio, observaciones, bombeos,X,Y, xx, yy, tiempos, superficies)
##        ran = random.randint(1, 10)

        
        self.fm.plotU(ran)
        ##1ero plotT dps plotD        
        self.fm.plotT(ran, 0)
##        self.fm.plotD(ran, 0)
##        self.fm.plotC(ran, 0)
        self.main_frame = QWidget()
        self.setWindowTitle(u'Gráficas')
        self.setMaximumSize(self.fm.fig.get_figwidth() * self.fm.fig.get_dpi(), self.fm.fig.get_figheight() * self.fm.fig.get_dpi() + 43)
        self.setMinimumSize(self.fm.fig.get_figwidth() * self.fm.fig.get_dpi(), self.fm.fig.get_figheight() * self.fm.fig.get_dpi() + 43)
##        print 'Figure: width: ' + str(self.fm.fig.get_figwidth() * self.fm.fig.get_dpi()) + ', height: ' +str(self.fm.fig.get_figheight() * self.fm.fig.get_dpi()) + ', dpi: ' + str(self.fm.fig.get_dpi())
        self.center()
        self.canvas = FigureCanvas(self.fm.fig)
        self.canvas.setParent(self.main_frame)
        #self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame)
        self.canvas.draw()
        self.vel = [1, 2, 3, 4, 5, 6]
        self.velActual = 0
        self.inter = 1

        separador = QFrame()
        separador.setFrameShadow(QFrame.Sunken)
        separador.setFrameShape(QFrame.HLine)
        separador.setLineWidth(576)

        reproducirb = QPushButton()
        reproducirb.setMinimumSize(32, 32)
        reproducirb.setMaximumSize(32, 32)
        reproducirb.setIcon(QIcon('content/images/reproducir.png'))
        self.reproducirb = reproducirb
        QtCore.QObject.connect(self.reproducirb, QtCore.SIGNAL(_fromUtf8('released()')), self.reproducir)

        reversab = QPushButton()
        reversab.setMinimumSize(32, 32)
        reversab.setMaximumSize(32, 32)
        reversab.setIcon(QIcon('content/images/reproducir.png'))
        self.reversab = reversab
        QtCore.QObject.connect(self.reversab, QtCore.SIGNAL(_fromUtf8('released()')), self.reversa)

        velocidadb = QPushButton()
        velocidadb.setMinimumSize(32, 32)
        velocidadb.setMaximumSize(32, 32)
        velocidadb.setText(QString(str(self.velActual + 1) + 'x'))
        self.velocidadb = velocidadb
        QtCore.QObject.connect(self.velocidadb, QtCore.SIGNAL(_fromUtf8('released()')), self.velocidad)

        guardarb = QPushButton()
        guardarb.setMinimumSize(32, 32)
        guardarb.setMaximumSize(32, 32)
        guardarb.setIcon(QIcon('content/images/guardar.png'))
        self.guardarb = guardarb
        QtCore.QObject.connect(self.guardarb, QtCore.SIGNAL(_fromUtf8('released()')), self.guardar)

        estadob = QSlider(Qt.Horizontal)
        estadob.setMinimumSize(324, 32)
        estadob.setToolTip(u'Próximamente: mostrará el avance de la animación.')

        ##cambie el tmp
        ####se grafica lo que hay en el primer tiempo
        #tmp = self.fm.matrix[0]
        #Habia un tmp -1
        #estadob.setMaximum(tmp[-1])
        #estadob.setMaximum(20)
        ##El maximo tiempo va a ser lo que hay en el ultimo tiempo de bombeo
        ##estadob.setMaximum(self.bombeos[-1].tiempo*10)
        #Cambio por la discretizacion espacial
        estadob.setMaximum(int(tf/dt))
        estadob.setMinimum(0)
        
        self.estadob = estadob
        QtCore.QObject.connect(self.estadob, QtCore.SIGNAL(_fromUtf8('sliderReleased()')), self.actualizarSlider)
        QtCore.QObject.connect(self.estadob, QtCore.SIGNAL(_fromUtf8('sliderMoved()')), self.actualizarSlider)
        QtCore.QObject.connect(self.estadob, QtCore.SIGNAL(_fromUtf8('valueChanged(int)')), self.actualizarSlider)

        #timlab = QLabel(QString('0/' + str(self.bombeos[-1].tiempo)))
        #el tiempo final elejido por el usuario
        timlab = QLabel(QString('0/' + str(tf)))
        #timlab=QLabel(QString('pepe'))
        self.timlab = timlab

        vbox = QVBoxLayout()
        vbox.addWidget(self.canvas)
        vbox.addWidget(separador)
        hbox = QHBoxLayout()
        hbox.addWidget(reproducirb)
        hbox.addWidget(reversab)
        hbox.addWidget(velocidadb)
        hbox.addWidget(guardarb)
        hbox.addWidget(estadob)
        hbox.addWidget(timlab)
        vbox.addLayout(hbox)
        self.main_frame.setLayout(vbox)
        self.setCentralWidget(self.main_frame)

        self.timer = QTimer(self)
        ##Cada un segundo, dps aca cambiar la velocidad de reproduccion
        self.timer.setInterval(1000 * self.vel[self.velActual])
        QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.reproducirBucle)
예제 #2
0
    def __init__(
        self,
        parent=None,
        dominio=None,
        tipodis=None,
        X=None,
        Y=None,
        xx=None,
        yy=None,
        nix=None,
        niy=None,
        tiempos=None,
        tiemposobs=None,
        ti=None,
        tf=None,
        dt=None,
        dia=None,
    ):

        QMainWindow.__init__(self, parent)
        self.dia = dia

        self.ti = ti
        self.tf = tf
        self.dt = dt
        # self.nix=nix
        # self.niy=niy
        # self.tfo=tfo
        self.cardt = 0
        self.tiempos = tiempos
        ##        print 'ti ',ti

        ##LLAMADO AL METODO DE SOLUCION
        ##llamamo al metodo de solucion asociado al dominio para que me de la matriz
        ### se envian ademas todas las discretizaciones
        print u"Empieaza..."
        matrix = dominio.metodo.calcular(tiempos, ti, tf, dt, nix, niy, xx, yy, X, Y)

        matx = dominio.metodo.gradienteX()

        maty = dominio.metodo.gradienteY()

        ming = dominio.metodo.minimoMatriz()

        maxg = dominio.metodo.maximoMatriz()
        print u"Termina"

        # pozoBombeo=dominio.obtenerPozoBombeo()
        ##Obtener el ensayo de bombeo, los caudales y tiempos(al menos hay uno) ...que pasa cuando hay mas de un ensayo asociado?????
        # bombeos=pozoBombeo.ensayos[0].devolverB()
        # self.bombeos=bombeos

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        #### Codigo nuevo introducido para prueba

        # fig2 = Figure(figsize = (1.5, 2.5))

        # fig2 = Figure(figsize = (1.8 * 4, 2.4 * 4))
        # axu2 = fig2.add_subplot(2, 2, 1)
        # axd2 = fig2.add_subplot(2, 2, 2)
        # axt2 = fig2.add_subplot(2, 2, 3, projection = '3d')
        # axc2 = fig2.add_subplot(2, 2, 4)
        # fig2.subplots_adjust(hspace=.2, wspace=.3, bottom=.07, left=.08, right=.92, top=.94)

        # axt = Axes3D(fig2)
        ##        superficies=np.zeros((len(tiempos)),Poly3DCollection)
        superficies = []
        # for i in range(0,nit):
        #    Z = matrix[i]
        #    axt2.cla()
        ##        print 'Matriz generada '
        ##            print 't: '+str(i)
        ##            print 'Z: \n' + str(Z)
        #    surf = axt2.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,linewidth=0, antialiased=False)

        #    superficies.append(surf)
        ##            canvas = FigureCanvas(fig2)
        ##            canvas.draw()

        #### fIN Codigo nuevo introducido para prueba

        self.fm = fm(matrix, matx, maty, dominio, tipodis, X, Y, tiempos, tiemposobs, superficies, ming, maxg)

        self.sel = 0
        self.grafSel(0)
        self.main_frame = QWidget()
        self.setWindowTitle(u"Gráficas")
        self.setMinimumSize(276, 568)
        self.center()
        self.canvas = FigureCanvas(self.fm.fig)
        self.canvas.setParent(self.main_frame)
        self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.canvas.draw()
        self.vel = [1, 2, 3]
        self.velActual = 0
        self.inter = 1

        separador = QFrame()
        separador.setFrameShadow(QFrame.Sunken)
        separador.setFrameShape(QFrame.HLine)
        separador.setLineWidth(576)

        selectc = QComboBox()
        selectc.addItem(QIcon(u"content/images/plot.png"), QString(u"Lineal"), 0)
        selectc.addItem(QIcon(u"content/images/contour.png"), QString(u"Propagación"), 1)
        selectc.addItem(QIcon(u"content/images/contour.png"), QString(u"3D"), 2)
        selectc.addItem(QIcon(u"content/images/quiver.png"), QString(u"Velocidad"), 3)
        self.selectc = selectc
        QtCore.QObject.connect(self.selectc, QtCore.SIGNAL(_fromUtf8("currentIndexChanged (int)")), self.grafSele)

        reproducirb = QPushButton()
        reproducirb.setMinimumSize(32, 32)
        reproducirb.setMaximumSize(32, 32)
        reproducirb.setIcon(QIcon("content/images/reproducir.png"))
        self.reproducirb = reproducirb
        QtCore.QObject.connect(self.reproducirb, QtCore.SIGNAL(_fromUtf8("released()")), self.reproducir)

        reversab = QPushButton()
        reversab.setMinimumSize(32, 32)
        reversab.setMaximumSize(32, 32)
        reversab.setIcon(QIcon("content/images/normal.png"))
        self.reversab = reversab
        QtCore.QObject.connect(self.reversab, QtCore.SIGNAL(_fromUtf8("released()")), self.reversa)

        velocidadb = QPushButton()
        velocidadb.setMinimumSize(32, 32)
        velocidadb.setMaximumSize(32, 32)
        velocidadb.setText(QString(str(self.velActual + 1) + "x"))
        self.velocidadb = velocidadb
        QtCore.QObject.connect(self.velocidadb, QtCore.SIGNAL(_fromUtf8("released()")), self.velocidad)

        guardarb = QPushButton()
        guardarb.setMinimumSize(32, 32)
        guardarb.setMaximumSize(32, 32)
        guardarb.setIcon(QIcon("content/images/guardar.png"))
        self.guardarb = guardarb
        QtCore.QObject.connect(self.guardarb, QtCore.SIGNAL(_fromUtf8("released()")), self.guardar)

        estadob = QSlider(Qt.Horizontal)
        estadob.setMinimumSize(324, 32)
        estadob.setToolTip(u"Próximamente: mostrará el avance de la animación.")

        # Cambio por la discretizacion espacial

        ##        print "tf ",tf,"dt ",dt, "maximo ",tf/dt

        if dominio.metodo.gettipo() != "analitico":
            estadob.setMaximum(int(tf / dt) - 1)
        else:
            estadob.setMaximum(int(tf / dt))
        estadob.setMinimum(ti)

        self.estadob = estadob
        QtCore.QObject.connect(self.estadob, QtCore.SIGNAL(_fromUtf8("sliderReleased()")), self.actualizarSlider)
        QtCore.QObject.connect(self.estadob, QtCore.SIGNAL(_fromUtf8("sliderMoved()")), self.actualizarSlider)
        QtCore.QObject.connect(self.estadob, QtCore.SIGNAL(_fromUtf8("valueChanged(int)")), self.actualizarSlider)

        # el tiempo final elejido por el usuario
        timlab = QLabel(QString(str(ti) + "/" + str(self.tiempos[-1])))
        self.timlab = timlab

        vbox = QVBoxLayout()
        vbox.addWidget(self.canvas)
        vbox.addWidget(separador)
        hbox = QHBoxLayout()
        hbox.addWidget(selectc)
        hbox.addWidget(reproducirb)
        hbox.addWidget(reversab)
        hbox.addWidget(velocidadb)
        hbox.addWidget(guardarb)
        hbox.addWidget(estadob)
        hbox.addWidget(timlab)
        vbox.addLayout(hbox)
        self.main_frame.setLayout(vbox)
        self.setCentralWidget(self.main_frame)

        self.timer = QTimer(self)
        ##Cada un segundo, dps aca cambiar la velocidad de reproduccion
        self.timer.setInterval(1000 * self.vel[self.velActual])
        QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.reproducirBucle)

        # if self.dia!=None:
        self.dia.close()
        self.dia = None
예제 #3
0
    def __init__(self,
                 parent=None,
                 dominio=None,
                 tipodis=None,
                 X=None,
                 Y=None,
                 xx=None,
                 yy=None,
                 nix=None,
                 niy=None,
                 tiempos=None,
                 tiemposobs=None,
                 ti=None,
                 tf=None,
                 dt=None,
                 dia=None):

        QMainWindow.__init__(self, parent)
        self.dia = dia

        self.ti = ti
        self.tf = tf
        self.dt = dt
        #self.nix=nix
        #self.niy=niy
        #self.tfo=tfo
        self.cardt = 0
        self.tiempos = tiempos
        ##        print 'ti ',ti

        ##LLAMADO AL METODO DE SOLUCION
        ##llamamo al metodo de solucion asociado al dominio para que me de la matriz
        ### se envian ademas todas las discretizaciones
        print u'Empieaza...'
        matrix = dominio.metodo.calcular(tiempos, ti, tf, dt, nix, niy, xx, yy,
                                         X, Y)

        matx = dominio.metodo.gradienteX()

        maty = dominio.metodo.gradienteY()

        ming = dominio.metodo.minimoMatriz()

        maxg = dominio.metodo.maximoMatriz()
        print u'Termina'

        #pozoBombeo=dominio.obtenerPozoBombeo()
        ##Obtener el ensayo de bombeo, los caudales y tiempos(al menos hay uno) ...que pasa cuando hay mas de un ensayo asociado?????
        #bombeos=pozoBombeo.ensayos[0].devolverB()
        #self.bombeos=bombeos

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        #### Codigo nuevo introducido para prueba

        #fig2 = Figure(figsize = (1.5, 2.5))

        #fig2 = Figure(figsize = (1.8 * 4, 2.4 * 4))
        #axu2 = fig2.add_subplot(2, 2, 1)
        #axd2 = fig2.add_subplot(2, 2, 2)
        #axt2 = fig2.add_subplot(2, 2, 3, projection = '3d')
        #axc2 = fig2.add_subplot(2, 2, 4)
        #fig2.subplots_adjust(hspace=.2, wspace=.3, bottom=.07, left=.08, right=.92, top=.94)

        #axt = Axes3D(fig2)
        ##        superficies=np.zeros((len(tiempos)),Poly3DCollection)
        superficies = []
        #for i in range(0,nit):
        #    Z = matrix[i]
        #    axt2.cla()
        ##        print 'Matriz generada '
        ##            print 't: '+str(i)
        ##            print 'Z: \n' + str(Z)
        #    surf = axt2.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet,linewidth=0, antialiased=False)

        #    superficies.append(surf)
        ##            canvas = FigureCanvas(fig2)
        ##            canvas.draw()

        #### fIN Codigo nuevo introducido para prueba

        self.fm = fm(matrix, matx, maty, dominio, tipodis, X, Y, tiempos,
                     tiemposobs, superficies, ming, maxg)

        self.sel = 0
        self.grafSel(0)
        self.main_frame = QWidget()
        self.setWindowTitle(u'Gráficas')
        self.setMinimumSize(276, 568)
        self.center()
        self.canvas = FigureCanvas(self.fm.fig)
        self.canvas.setParent(self.main_frame)
        self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.canvas.draw()
        self.vel = [1, 2, 3]
        self.velActual = 0
        self.inter = 1

        separador = QFrame()
        separador.setFrameShadow(QFrame.Sunken)
        separador.setFrameShape(QFrame.HLine)
        separador.setLineWidth(576)

        selectc = QComboBox()
        selectc.addItem(QIcon(u'content/images/plot.png'), QString(u'Lineal'),
                        0)
        selectc.addItem(QIcon(u'content/images/contour.png'),
                        QString(u'Propagación'), 1)
        selectc.addItem(QIcon(u'content/images/contour.png'), QString(u'3D'),
                        2)
        selectc.addItem(QIcon(u'content/images/quiver.png'),
                        QString(u'Velocidad'), 3)
        self.selectc = selectc
        QtCore.QObject.connect(
            self.selectc,
            QtCore.SIGNAL(_fromUtf8('currentIndexChanged (int)')),
            self.grafSele)

        reproducirb = QPushButton()
        reproducirb.setMinimumSize(32, 32)
        reproducirb.setMaximumSize(32, 32)
        reproducirb.setIcon(QIcon('content/images/reproducir.png'))
        self.reproducirb = reproducirb
        QtCore.QObject.connect(self.reproducirb,
                               QtCore.SIGNAL(_fromUtf8('released()')),
                               self.reproducir)

        reversab = QPushButton()
        reversab.setMinimumSize(32, 32)
        reversab.setMaximumSize(32, 32)
        reversab.setIcon(QIcon('content/images/normal.png'))
        self.reversab = reversab
        QtCore.QObject.connect(self.reversab,
                               QtCore.SIGNAL(_fromUtf8('released()')),
                               self.reversa)

        velocidadb = QPushButton()
        velocidadb.setMinimumSize(32, 32)
        velocidadb.setMaximumSize(32, 32)
        velocidadb.setText(QString(str(self.velActual + 1) + 'x'))
        self.velocidadb = velocidadb
        QtCore.QObject.connect(self.velocidadb,
                               QtCore.SIGNAL(_fromUtf8('released()')),
                               self.velocidad)

        guardarb = QPushButton()
        guardarb.setMinimumSize(32, 32)
        guardarb.setMaximumSize(32, 32)
        guardarb.setIcon(QIcon('content/images/guardar.png'))
        self.guardarb = guardarb
        QtCore.QObject.connect(self.guardarb,
                               QtCore.SIGNAL(_fromUtf8('released()')),
                               self.guardar)

        estadob = QSlider(Qt.Horizontal)
        estadob.setMinimumSize(324, 32)
        estadob.setToolTip(
            u'Próximamente: mostrará el avance de la animación.')

        #Cambio por la discretizacion espacial

        ##        print "tf ",tf,"dt ",dt, "maximo ",tf/dt

        if dominio.metodo.gettipo() != "analitico":
            estadob.setMaximum(int(tf / dt) - 1)
        else:
            estadob.setMaximum(int(tf / dt))
        estadob.setMinimum(ti)

        self.estadob = estadob
        QtCore.QObject.connect(self.estadob,
                               QtCore.SIGNAL(_fromUtf8('sliderReleased()')),
                               self.actualizarSlider)
        QtCore.QObject.connect(self.estadob,
                               QtCore.SIGNAL(_fromUtf8('sliderMoved()')),
                               self.actualizarSlider)
        QtCore.QObject.connect(self.estadob,
                               QtCore.SIGNAL(_fromUtf8('valueChanged(int)')),
                               self.actualizarSlider)

        #el tiempo final elejido por el usuario
        timlab = QLabel(QString(str(ti) + '/' + str(self.tiempos[-1])))
        self.timlab = timlab

        vbox = QVBoxLayout()
        vbox.addWidget(self.canvas)
        vbox.addWidget(separador)
        hbox = QHBoxLayout()
        hbox.addWidget(selectc)
        hbox.addWidget(reproducirb)
        hbox.addWidget(reversab)
        hbox.addWidget(velocidadb)
        hbox.addWidget(guardarb)
        hbox.addWidget(estadob)
        hbox.addWidget(timlab)
        vbox.addLayout(hbox)
        self.main_frame.setLayout(vbox)
        self.setCentralWidget(self.main_frame)

        self.timer = QTimer(self)
        ##Cada un segundo, dps aca cambiar la velocidad de reproduccion
        self.timer.setInterval(1000 * self.vel[self.velActual])
        QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"),
                               self.reproducirBucle)

        #if self.dia!=None:
        self.dia.close()
        self.dia = None
예제 #4
0
    def __init__(self,
                 parent=None,
                 dominio=None):  #Hay que pasarle la ventana que lo invoca

        QMainWindow.__init__(self, parent)
        ti = 0.0
        ##        tf=3.0
        tf = 0.3
        ##
        ##justito para que quede 0.1 el dt
        ##        nit=int(tf/0.1)
        ##        nit=100
        nit = 100

        ##el mismo ancho y alto para que quede cada 1 unidad
        ####        nix=dominio.ancho
        nix = 40
        ##        niy=dominio.alto
        niy = 40

        ##discretizacion temporal
        dt = (tf - ti) / nit
        nit = nit + 1
        tiempos = np.zeros((nit), float)
        tiempos[0] = ti

        ##se suma 1 para que sea haga bien la division es un intervalo mas 0..100 (101)
        nix = nix + 1
        niy = niy + 1

        #discretizacion temporal
        for i in range(1, nit):
            tiempos[i] = tiempos[i - 1] + dt

        ##discretizacion espacial
        xx = np.linspace(0, dominio.ancho, nix)
        yy = np.linspace(dominio.alto, 0, niy)
        ##Se generan las matrices para usar en todas las graficas
        X, Y = np.meshgrid(xx, yy)

        ##        print 'Matrices X, Y'
        ##        print X
        ##        print Y
        ##        print '\n'

        self.ti = ti
        self.tf = tf
        self.dt = dt
        self.nix = nix
        self.niy = niy
        self.cardt = 0

        ##Llamado a procesar la barrera.. para generar los pozos virtuales porque se duplican por precensia de la barrera
        dominio.procesarBarrera()

        ##LLAMADO AL METODO DE SOLUCION
        ##llamamo al metodo de solucion asociado al dominio para que me de la matriz
        ### se envian ademas todas las discretizaciones
        matrix = dominio.metodo.calcular(tiempos, xx, yy)

        matx = dominio.metodo.gradienteX()

        maty = dominio.metodo.gradienteY()

        ##se obtiene un pozo de observacion el primero por defecto
        pozoObservacion = dominio.obtenerPozoObservacion()
        ##Obtener una observacion de ensayo ...que pasa cuando hay mas de una asociada?????
        observaciones = pozoObservacion.observaciones[0].devolverO()
        self.observaciones = observaciones

        pozoBombeo = dominio.obtenerPozoBombeo()
        ##Obtener el ensayo de bombeo, los caudales y tiempos(al menos hay uno) ...que pasa cuando hay mas de un ensayo asociado?????
        bombeos = pozoBombeo.ensayos[0].devolverB()
        self.bombeos = bombeos

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        #### Codigo nuevo introducido para prueba

        #fig2 = Figure(figsize = (1.5, 2.5))

        fig2 = Figure(figsize=(1.8 * 4, 2.4 * 4))
        axu2 = fig2.add_subplot(2, 2, 1)
        axd2 = fig2.add_subplot(2, 2, 2)
        axt2 = fig2.add_subplot(2, 2, 3, projection='3d')
        axc2 = fig2.add_subplot(2, 2, 4)
        fig2.subplots_adjust(hspace=.2,
                             wspace=.3,
                             bottom=.07,
                             left=.08,
                             right=.92,
                             top=.94)

        #axt = Axes3D(fig2)
        ##        superficies=np.zeros((len(tiempos)),Poly3DCollection)
        superficies = []
        for i in range(0, nit):
            Z = matrix[i]
            axt2.cla()
            ##        print 'Matriz generada '
            ##            print 't: '+str(i)
            ##            print 'Z: \n' + str(Z)
            surf = axt2.plot_surface(X,
                                     Y,
                                     Z,
                                     rstride=1,
                                     cstride=1,
                                     cmap=cm.jet,
                                     linewidth=0,
                                     antialiased=False)

            superficies.append(surf)
##            canvas = FigureCanvas(fig2)
##            canvas.draw()

#### fIN Codigo nuevo introducido para prueba

        ran = 0
        self.fm = fm(matrix, matx, maty, dominio, observaciones, bombeos, X, Y,
                     xx, yy, tiempos, superficies)
        ##        ran = random.randint(1, 10)

        self.fm.plotU(ran)
        ##1ero plotT dps plotD
        self.fm.plotT(ran, 0)
        ##        self.fm.plotD(ran, 0)
        ##        self.fm.plotC(ran, 0)
        self.main_frame = QWidget()
        self.setWindowTitle(u'Gráficas')
        self.setMaximumSize(
            self.fm.fig.get_figwidth() * self.fm.fig.get_dpi(),
            self.fm.fig.get_figheight() * self.fm.fig.get_dpi() + 43)
        self.setMinimumSize(
            self.fm.fig.get_figwidth() * self.fm.fig.get_dpi(),
            self.fm.fig.get_figheight() * self.fm.fig.get_dpi() + 43)
        ##        print 'Figure: width: ' + str(self.fm.fig.get_figwidth() * self.fm.fig.get_dpi()) + ', height: ' +str(self.fm.fig.get_figheight() * self.fm.fig.get_dpi()) + ', dpi: ' + str(self.fm.fig.get_dpi())
        self.center()
        self.canvas = FigureCanvas(self.fm.fig)
        self.canvas.setParent(self.main_frame)
        #self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame)
        self.canvas.draw()
        self.vel = [1, 2, 3, 4, 5, 6]
        self.velActual = 0
        self.inter = 1

        separador = QFrame()
        separador.setFrameShadow(QFrame.Sunken)
        separador.setFrameShape(QFrame.HLine)
        separador.setLineWidth(576)

        reproducirb = QPushButton()
        reproducirb.setMinimumSize(32, 32)
        reproducirb.setMaximumSize(32, 32)
        reproducirb.setIcon(QIcon('content/images/reproducir.png'))
        self.reproducirb = reproducirb
        QtCore.QObject.connect(self.reproducirb,
                               QtCore.SIGNAL(_fromUtf8('released()')),
                               self.reproducir)

        reversab = QPushButton()
        reversab.setMinimumSize(32, 32)
        reversab.setMaximumSize(32, 32)
        reversab.setIcon(QIcon('content/images/reproducir.png'))
        self.reversab = reversab
        QtCore.QObject.connect(self.reversab,
                               QtCore.SIGNAL(_fromUtf8('released()')),
                               self.reversa)

        velocidadb = QPushButton()
        velocidadb.setMinimumSize(32, 32)
        velocidadb.setMaximumSize(32, 32)
        velocidadb.setText(QString(str(self.velActual + 1) + 'x'))
        self.velocidadb = velocidadb
        QtCore.QObject.connect(self.velocidadb,
                               QtCore.SIGNAL(_fromUtf8('released()')),
                               self.velocidad)

        guardarb = QPushButton()
        guardarb.setMinimumSize(32, 32)
        guardarb.setMaximumSize(32, 32)
        guardarb.setIcon(QIcon('content/images/guardar.png'))
        self.guardarb = guardarb
        QtCore.QObject.connect(self.guardarb,
                               QtCore.SIGNAL(_fromUtf8('released()')),
                               self.guardar)

        estadob = QSlider(Qt.Horizontal)
        estadob.setMinimumSize(324, 32)
        estadob.setToolTip(
            u'Próximamente: mostrará el avance de la animación.')

        ##cambie el tmp
        ####se grafica lo que hay en el primer tiempo
        #tmp = self.fm.matrix[0]
        #Habia un tmp -1
        #estadob.setMaximum(tmp[-1])
        #estadob.setMaximum(20)
        ##El maximo tiempo va a ser lo que hay en el ultimo tiempo de bombeo
        ##estadob.setMaximum(self.bombeos[-1].tiempo*10)
        #Cambio por la discretizacion espacial
        estadob.setMaximum(int(tf / dt))
        estadob.setMinimum(0)

        self.estadob = estadob
        QtCore.QObject.connect(self.estadob,
                               QtCore.SIGNAL(_fromUtf8('sliderReleased()')),
                               self.actualizarSlider)
        QtCore.QObject.connect(self.estadob,
                               QtCore.SIGNAL(_fromUtf8('sliderMoved()')),
                               self.actualizarSlider)
        QtCore.QObject.connect(self.estadob,
                               QtCore.SIGNAL(_fromUtf8('valueChanged(int)')),
                               self.actualizarSlider)

        #timlab = QLabel(QString('0/' + str(self.bombeos[-1].tiempo)))
        #el tiempo final elejido por el usuario
        timlab = QLabel(QString('0/' + str(tf)))
        #timlab=QLabel(QString('pepe'))
        self.timlab = timlab

        vbox = QVBoxLayout()
        vbox.addWidget(self.canvas)
        vbox.addWidget(separador)
        hbox = QHBoxLayout()
        hbox.addWidget(reproducirb)
        hbox.addWidget(reversab)
        hbox.addWidget(velocidadb)
        hbox.addWidget(guardarb)
        hbox.addWidget(estadob)
        hbox.addWidget(timlab)
        vbox.addLayout(hbox)
        self.main_frame.setLayout(vbox)
        self.setCentralWidget(self.main_frame)

        self.timer = QTimer(self)
        ##Cada un segundo, dps aca cambiar la velocidad de reproduccion
        self.timer.setInterval(1000 * self.vel[self.velActual])
        QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"),
                               self.reproducirBucle)