Пример #1
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
Пример #2
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
Пример #3
0
        dN = self.__Gamma * self.dx / self.dy
        dS = self.__Gamma * self.dx / self.dy  
        dP = dE + dW + dN + dS - self.__Sp + self.__rho * self.dx * self.dy / self.dt
        
        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

    rod = Line(1.0)
    dt = 0.1
    malla = rod.constructMesh(N)
    ivx, _, _ = malla.bounds(bi = 1, ei = N-1)
    su = np.ones(ivx)
    laplace = tDiffusion1D(malla, su, Gamma = 3.4, dt = dt)    
    u = np.ones(malla.vx+2)
    printInfo(Descr = 'Testing tDiffusion1D', 
              dx = laplace.dx, 
              vx = malla.vx,
              ivx = malla.ivx,
              dt = laplace.dt)    
    print(laplace.calc(3))
    print(laplace.source(u))

    cuadro = Rectangle(1,1)
# Datos del problema
#
longitud = 1.0 # metros
Tambiente = 20  # °C 
TA = 100  # °C 
n2 = 25 # /m^2
fluxB = 0 # Flujo igual a cero
N = 16 # Número de nodos
k = 1
q = 0
dt = 0.01 # Paso de tiempo
Tmax = 20 # Número de pasos en el tiempo
#
# 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
#
Пример #5
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
Пример #6
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
Пример #7
0
import vis.flowix as flx
#
# 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 = 100
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.coordinatesMeshFVM()
#
# Se construye el arreglo donde se guardará la solución