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