p0 = Point(x_left, y_bottom, 0) p1 = Point(x_right, y_top, 1) mesh = RectangleMesh(p0, p1, nx, ny) V = FunctionSpace(mesh, 'P', 1) V_g = VectorFunctionSpace(mesh, 'P', 1) alpha = 1 # m^2/s, https://en.wikipedia.org/wiki/Thermal_diffusivity k = 100 # kg * m / s^3 / K, https://en.wikipedia.org/wiki/Thermal_conductivity # Define boundary condition u_D = Constant('310') u_D_function = interpolate(u_D, V) # We will only exchange flux in y direction on coupling interface. No initialization necessary. V_flux_y = V_g.sub(1) coupling_boundary = TopBoundary() bottom_boundary = BottomBoundary() # Define initial value u_n = interpolate(u_D, V) u_n.rename("T", "") # Adapter definition and initialization precice = Adapter(adapter_config_filename="precice-adapter-config.json") precice_dt = precice.initialize(coupling_boundary, read_function_space=V, write_object=V_flux_y)
alpha = 3 # parameter alpha beta = 1.3 # parameter beta if args.dirichlet and not args.neumann: problem = ProblemType.DIRICHLET domain_part = DomainPart.LEFT elif args.neumann and not args.dirichlet: problem = ProblemType.NEUMANN domain_part = DomainPart.RIGHT mesh, coupling_boundary, remaining_boundary = get_geometry(domain_part) # Define function space using mesh V = FunctionSpace(mesh, 'P', 2) V_g = VectorFunctionSpace(mesh, 'P', 1) W = V_g.sub(0).collapse() # Define boundary conditions u_D = Expression('1 + x[0]*x[0] + alpha*x[1]*x[1] + beta*t', degree=2, alpha=alpha, beta=beta, t=0) u_D_function = interpolate(u_D, V) if problem is ProblemType.DIRICHLET: # Define flux in x direction f_N = Expression("2 * x[0]", degree=1, alpha=alpha, t=0) f_N_function = interpolate(f_N, W) # Define initial value u_n = interpolate(u_D, V) u_n.rename("Temperature", "") precice, precice_dt, initial_data = None, 0.0, None