Пример #1
0
 def is_trapezoid(self):
     if not self:
         return False
     ab = Line(self.a, self.b)
     bc = Line(self.b, self.c)
     cd = Line(self.c, self.d)
     da = Line(self.d, self.a)
     return ab.parallel(cd) and not bc.collinear(da)
Пример #2
0
        aW = dW + dE
        aN = dN + cN
        aS = dS + cS
        aP = dP + cP

        return np.array([-aS, -aW, aP, -aE, -aN])


if __name__ == '__main__':

    from utils.displayInfo import printInfo
    from geo.line import Line

    N = 6

    rod = Line(1.0)
    malla = rod.constructMesh(N)
    ivx, _, _ = malla.bounds(bi=1, ei=N - 1)
    su = np.ones(ivx)
    vel = np.ones(ivx)
    laplace = sAdvDiff1D(malla, su)
    laplace.setVelocity(vel)
    printInfo(Descr='Testing Diffusion1D', dx=laplace.dx, vx=malla.vx)
    print(laplace.calc(3))
    print(laplace.source(su))

#    from geo.Rectangle import Rectangle
#    cuadro = Rectangle(1,1)
#    malla2 = cuadro.constructMesh(N,N)
#    ivx, ivy, _ = malla2.bounds(bi = 1, ei = N-1,bj = 1, ej = N-1)
#    su = np.ones((ivy, ivx))
Пример #3
0
#
# Datos del problema
#
longitud = 1.0  # metros
Tambiente = 20  # °C
TA = 100  # °C
n2 = 25  # /m^2
fluxB = 0  # Flujo igual a cero
N = 6  # Número de nodos
k = 1
q = 0
#
# Definición del dominio y condiciones de frontera
#
rod = Line(longitud)
rod.boundaryConditions(dirichlet={'LEFT': TA}, neumman={'RIGHT': fluxB})
#
# Creamos la malla y obtenemos datos importantes
#
malla = rod.constructMesh(N)
ivx, _, _ = malla.bounds(bi=1, ei=N - 1)
nx = malla.nx  # Número de nodos
nvx = malla.vx  # Número de volúmenes
delta = malla.dx  # Tamaño de los volúmenes
#
# Se construye el arreglo donde se guardará la solución
#
T = np.zeros(nvx + 2)  # El arreglo contiene ceros
T[0] = TA  # Condición de frontera izquierda
#
Пример #4
0
#
# Datos del problema
#
longitud = 0.02  # meters
TA = 100  # °C
TB = 200  # °C
k = 0.5  # W/m.K
q = 1e+06  # 1e+06 W/m^3 = 1000 kW/m^3 Fuente uniforme
N = 6  # Número de nodos
dt = 0.00001  # Paso de tiempo
Tmax = 40  # Número de pasos en el tiempo
#
# Definición del dominio y condiciones de frontera
#
rod = Line(longitud)
rod.boundaryConditions(dirichlet={'LEFT': TA, 'RIGHT': TB})
#
# Creamos la malla y obtenemos datos importantes
#
malla = rod.constructMesh(N)
ivx, _, _ = malla.bounds(bi=1, ei=N - 1)
nx = malla.nx  # Número de nodos
nvx = malla.vx  # Número de volúmenes
delta = malla.dx  # Tamaño de los volúmenes
#
# Se construye el arreglo donde se guardará la solución
#
T = np.ones(nvx + 2)  # El arreglo contiene unos
T *= TA  # Inicializamos T = TA
T[0] = TA  # Condición de frontera izquierda
Пример #5
0
            
#    @property
#    def Su(self):
#        return self.__Su
#
#    @Su.setter    
#    def Su(self, Su):
#        self.__Su = Su

#----------------------- TEST OF THE MODULE ----------------------------------   
if __name__ == '__main__':

    from utils.displayInfo import printInfo
    from geo.line import Line
    import numpy as np
    rod = Line(0.5)
    malla = rod.constructMesh(5)
    ivx,_,_ = malla.bounds(bi = 1, ei = 4)   

    su = np.ones(ivx)
    u = np.ones(malla.vx)
    
    ns = NumericalScheme(malla, su, dt = 4.4)
#    ns = NumericalScheme(dx = 1.0, dy = 2.3, dz = 3.4, dt 0.9)
    
    printInfo(Descripcion = 'Prueba de NumericalScheme()',
              dx = ns.dx,
              dy = ns.dy,
              dz = ns.dz,
              dt = ns.dt)
Пример #6
0
        dN = self.__Gamma * self.dx / self.dy
        dS = self.__Gamma * self.dx / self.dy                
        dP = dE + dW + dN + dS #- self.__Sp

        return np.array([-dS, -dW, dP, -dE, -dN])
    
#----------------------- TEST OF THE MODULE ----------------------------------
if __name__ == '__main__':

    from utils.displayInfo import printInfo        
    from geo.line import Line
    from geo.rectangle import Rectangle

    N = 6 # Nodos
    
    barra = Line(1.0)
    malla = barra.constructMesh(N)
    ivx, _, _ = malla.bounds(bi = 1, ei = N-1)
    su = np.ones(ivx)
    laplace = sDiffusion1D(malla, su)
    laplace.Gamma = 2.0
    printInfo(Descr = 'Testing Diffusion1D', 
              dx = laplace.dx, 
              vx = malla.vx)    
    print(laplace.calc(3))
    print(laplace.source(su))
    
    cuadro = Rectangle(1,1)
    malla2 = cuadro.constructMesh(N,N)
    ivx, ivy, _ = malla2.bounds(bi = 1, ei = N-1, bj = 1, ej = N-1)
    su = np.ones((ivy, ivx))
Пример #7
0
    ax.set_title(title_graf)
#
# Datos del problema
#
longitud = 4000.0 # meters
N  = 101 # 101 Número de nodos
TA = 15 # °C 
TB = 750 # °C 
dt = 3600*24*365 # Paso de tiempo:  1 año [s]
Nspeedup = 1000
dt *= Nspeedup
Tmax = int(250000 / Nspeedup) # Number of time steps.
#
# Definición del dominio y condiciones de frontera
#
reservoir = Line(longitud)
reservoir.boundaryConditions(dirichlet = {'RIGHT':TB, 'LEFT':TA})
#
# Creamos la malla y obtenemos datos importantes
#
malla     = reservoir.constructMesh(N)
ivx, _, _ = malla.bounds(bi = 1, ei = N-1)
nx        = malla.nx    # Número de nodos
nvx       = malla.vx    # Número de volúmenes
dx        = malla.dx    # Tamaño de los volúmenes
#
# Depth coordinates
#
z, _, _ = malla.constructMeshFVM()
#
# Se construye el arreglo donde se guardará la solución
Пример #8
0
# Datos del problema
#
L = 2.5  # m
rho = 1.0  # kg/m^3
u = 1.0  # m/s
Gamma = 0.001  # kg / m.s
phi0 = 1  #
phiL = 0  #
N = 200  # Número de nodos
dt = 0.002  # Paso de tiempo
Tmax = 1.0
Nmax = int(Tmax / dt)
#
# Definición del dominio y condiciones de frontera
#
linea = Line(L)
linea.boundaryConditions(dirichlet={'LEFT': phi0, 'RIGHT': phiL})
#
# Creamos la malla y obtenemos datos importantes
#
malla = linea.constructMesh(N)
ivx, _, _ = malla.bounds(bi=1, ei=N - 1)
nx = malla.nx  # Número de nodos
nvx = malla.vx  # Número de volúmenes
delta = malla.dx  # Tamaño de los volúmenes
#
# Se construye el arreglo donde se guardará la solución
#
phi = np.zeros(nvx + 2)  # El arreglo contiene ceros
phi[0] = phi0  # Condición de frontera izquierda
phi[-1] = phiL  # Condición de frontera derecha
Пример #9
0
        def __init__(self, mesh, Su):
            super().__init__(mesh, Su)
            self.__name = 'Test'

        def source(self, phi):
            return self.Su * self.dx

        def calc(self, i):
            return 1, -2, 1

    from geo.line import Line
    #
    # Create a domain
    #
    N = 6
    rod = Line(0.5)
    #
    # We obtain a mesh from the domain
    #
    malla = rod.constructMesh(N)
    vx = malla.vx + 2
    ivx, _, _ = malla.bounds(bi=1, ei=N - 1)
    #    print(malla.hx)
    #
    # Create a scalar field for store the solution
    #
    T = np.zeros(vx)
    T[0] = 0
    T[-1] = 1
    #
    # Define the boundary conditions
Пример #10
0
from utils.displayInfo import printInfo
import vis.flowix as flx
#
# Datos del problema
#
longitud = 0.5  # metros
TA = 100  # °C
TB = 500  # °C
k = 1000  # W/m.K
N = 6  # Número de nodos
dt = 0.00001  # Paso de tiempo
Tmax = 20  # Número de pasos en el tiempo
#
# Definición del dominio y condiciones de frontera
#
barra = Line(longitud)
barra.boundaryConditions(dirichlet={'RIGHT': TB, 'LEFT': TA})
#
# Creamos la malla y obtenemos datos importantes
#
malla = barra.constructMesh(N)  # Se construye el objeto para la malla
ivx, _, _ = malla.bounds(bi=1, ei=N - 1)  # Grados de libertad
nx = malla.nx  # Número de nodos
nvx = malla.vx  # Número de volúmenes
delta = malla.dx  # Tamaño de los volúmenes
#
# Se construye el arreglo donde se guardará la solución
#
T = np.zeros(nvx + 2)  # Condición inicial T = 0
T[0] = TA  # Condición de frontera izquierda
T[-1] = TB  # Condición de frontera derecha
Пример #11
0
        Gamma_e = 0.5 * (self.__Gamma[i] + self.__Gamma[i+1])
        dE = Gamma_e / dx
        dW = Gamma_w / dx
 #       dE = Gamma_e
 #       dW = Gamma_w
        dP = dE + dW + dx / dt
        return np.array((-dW, dP, -dE))
        
if __name__ == '__main__':
        
    from geo.line import Line
#
# Create a domain with its mesh
#    
    N = 101
    rod = Line(4000)
    malla = rod.constructMesh(N)
    ivx, _, _ = malla.bounds(bi = 1, ei = N-1)    
#    malla.coordinatesMeshFVM()
#
# Scalar field for the solution
#
    T = np.zeros(malla.vx+2)
    T[0] = 15
    T[-1] = 750
#
# Definitions of boundary conditions
#
    rod.boundaryConditions({'RIGHT':'D', 'LEFT':'D'})
#
# Create an scheme