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
# 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
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 #
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
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
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