nixVersions.stable: 2.15 -> 2.17
[NixPkgs.git] / nixos / tests / fenics.nix
blob1d182cfc449982e59f0678cce02775a71f3004aa
1 import ./make-test-python.nix ({ pkgs, ... }:
3 let
4   fenicsScript = pkgs.writeScript "poisson.py" ''
5     #!/usr/bin/env python
6     from dolfin import *
8     mesh = UnitSquareMesh(4, 4)
9     V = FunctionSpace(mesh, "Lagrange", 1)
11     def boundary(x):
12         return x[0] < DOLFIN_EPS or x[0] > 1.0 - DOLFIN_EPS
14     u0 = Constant(0.0)
15     bc = DirichletBC(V, u0, boundary)
17     u = TrialFunction(V)
18     v = TestFunction(V)
19     f = Expression("10*exp(-(pow(x[0] - 0.5, 2) + pow(x[1] - 0.5, 2)) / 0.02)", degree=2)
20     g = Expression("sin(5*x[0])", degree=2)
21     a = inner(grad(u), grad(v))*dx
22     L = f*v*dx + g*v*ds
24     u = Function(V)
25     solve(a == L, u, bc)
26     print(u)
27   '';
30   name = "fenics";
31   meta = {
32     maintainers = with pkgs.lib.maintainers; [ knedlsepp ];
33   };
35   nodes = {
36     fenicsnode = { pkgs, ... }: {
37       environment.systemPackages = with pkgs; [
38         gcc
39         (python3.withPackages (ps: with ps; [ fenics ]))
40       ];
41     };
42   };
43   testScript =
44     { nodes, ... }:
45     ''
46       start_all()
47       fenicsnode.succeed("${fenicsScript}")
48     '';