def test_read_write_p2_function(tempdir): mesh = cpp.generation.UnitDiscMesh.create(MPI.comm_world, 3, cpp.mesh.GhostMode.none) cmap = fem.create_coordinate_map(mesh.ufl_domain()) mesh.geometry.coord_mapping = cmap Q = FunctionSpace(mesh, "Lagrange", 2) F = Function(Q) if has_petsc_complex(): F.interpolate(Expression("x[0] + j*x[0]", degree=1)) else: F.interpolate(Expression("x[0]", degree=1)) filename = os.path.join(tempdir, "tri6_function.xdmf") with XDMFFile(mesh.mpi_comm(), filename, encoding=XDMFFile.Encoding.HDF5) as xdmf: xdmf.write(F) Q = VectorFunctionSpace(mesh, "Lagrange", 1) F = Function(Q) if has_petsc_complex(): F.interpolate(Expression(("x[0] + j*x[0]", "x[1] + j*x[1]"), degree=1)) else: F.interpolate(Expression(("x[0]", "x[1]"), degree=1)) filename = os.path.join(tempdir, "tri6_vector_function.xdmf") with XDMFFile(mesh.mpi_comm(), filename, encoding=XDMFFile.Encoding.HDF5) as xdmf: xdmf.write(F)
def test_save_3d_vector_series(tempdir, encoding): if invalid_config(encoding): pytest.skip("XDMF unsupported in current configuration") filename = os.path.join(tempdir, "u_3D.xdmf") mesh = UnitCubeMesh(MPI.comm_world, 2, 2, 2) u = Function(VectorFunctionSpace(mesh, "Lagrange", 2)) with XDMFFile(mesh.mpi_comm(), filename, encoding=encoding) as file: u.vector()[:] = 1.0 + (1j if has_petsc_complex() else 0) file.write(u, 0.1) u.vector()[:] = 2.0 + (2j if has_petsc_complex() else 0) file.write(u, 0.2) u.vector()[:] = 3.0 + (3j if has_petsc_complex() else 0) file.write(u, 0.3)
def test_save_and_checkpoint_scalar(tempdir, encoding, fe_degree, fe_family, mesh_tdim, mesh_n): if invalid_config(encoding): pytest.skip("XDMF unsupported in current configuration") if invalid_fe(fe_family, fe_degree): pytest.skip("Trivial finite element") filename = os.path.join(tempdir, "u1_checkpoint.xdmf") mesh = mesh_factory(mesh_tdim, mesh_n) FE = FiniteElement(fe_family, mesh.ufl_cell(), fe_degree) V = FunctionSpace(mesh, FE) u_in = Function(V) u_out = Function(V) if has_petsc_complex(): u_out.interpolate(Expression("x[0] + j*x[0]", degree=1)) else: u_out.interpolate(Expression("x[0]", degree=1)) with XDMFFile(mesh.mpi_comm(), filename, encoding=encoding) as file: file.write_checkpoint(u_out, "u_out", 0) with XDMFFile(mesh.mpi_comm(), filename) as file: u_in = file.read_checkpoint(V, "u_out", 0) u_in.vector().axpy(-1.0, u_out.vector()) assert u_in.vector().norm(cpp.la.Norm.l2) < 1.0e-12
def test_save_3d_tensor(tempdir, encoding): if invalid_config(encoding): pytest.skip("XDMF unsupported in current configuration") filename = os.path.join(tempdir, "u3t.xdmf") mesh = UnitCubeMesh(MPI.comm_world, 4, 4, 4) u = Function(TensorFunctionSpace(mesh, "Lagrange", 2)) u.vector()[:] = 1.0 + (1j if has_petsc_complex() else 0) with XDMFFile(mesh.mpi_comm(), filename, encoding=encoding) as file: file.write(u)
def test_save_3d_vector(tempdir, encoding): if invalid_config(encoding): pytest.skip("XDMF unsupported in current configuration") filename = os.path.join(tempdir, "u_3Dv.xdmf") mesh = UnitCubeMesh(MPI.comm_world, 2, 2, 2) u = Function(VectorFunctionSpace(mesh, "Lagrange", 1)) A = 1.0 + (1j if has_petsc_complex() else 0) c = Constant((1.0 + A, 2.0 + 2 * A, 3.0 + 3 * A)) u.interpolate(c) with XDMFFile(mesh.mpi_comm(), filename, encoding=encoding) as file: file.write(u)
def test_save_2d_scalar(tempdir, encoding): if invalid_config(encoding): pytest.skip("XDMF unsupported in current configuration") filename = os.path.join(tempdir, "u2.xdmf") mesh = UnitSquareMesh(MPI.comm_world, 16, 16) # FIXME: This randomly hangs in parallel V = FunctionSpace(mesh, "Lagrange", 2) u = Function(V) u.vector()[:] = 1.0 + (1j if has_petsc_complex() else 0) with XDMFFile(mesh.mpi_comm(), filename, encoding=encoding) as file: file.write(u)
# Copyright (C) 2018 Igor A. Baratta # # This file is part of DOLFIN (https://www.fenicsproject.org) # # SPDX-License-Identifier: LGPL-3.0-or-later """Unit tests for assembly in complex mode""" import ufl import dolfin import numpy as np import pytest from ufl import dx, grad, inner pytestmark = pytest.mark.skipif(not dolfin.has_petsc_complex(), reason="Only works in complex mode.") def test_complex_assembly(): """Test assembly of complex matrices and vectors""" mesh = dolfin.generation.UnitSquareMesh(dolfin.MPI.comm_world, 10, 10) P2 = ufl.FiniteElement("Lagrange", mesh.ufl_cell(), 2) V = dolfin.function.functionspace.FunctionSpace(mesh, P2) u = dolfin.function.argument.TrialFunction(V) v = dolfin.function.argument.TestFunction(V) g = dolfin.function.constant.Constant(-2 + 3.0j) j = dolfin.function.constant.Constant(1.0j) a_real = inner(u, v) * dx