Skip to content

Commit

Permalink
Merge pull request #29 from nemocrys:enhancement/run_elmer_grid
Browse files Browse the repository at this point in the history
update run_elmer_grid, add test
  • Loading branch information
arvedes authored Jan 6, 2023
2 parents 2e99339 + ac5e358 commit d827271
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 16 deletions.
2 changes: 2 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
v1.1.2
- update run_elmer_grid function
- update dat_to_dataframe function

v1.1.1
Expand Down
31 changes: 16 additions & 15 deletions pyelmer/execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
import platform


def run_elmer_grid(sim_dir, meshfile, elmergrid=None, **kwargs):
def run_elmer_grid(mesh_dir, meshfile, elmergrid=None, **kwargs):
"""Run ElmerGrid on gmsh meshfile and move everything into main
directory.
Args:
sim_dir (str): Simulation directory
mesh_dir (str): Directory of mesh file
meshfile (str): Filename of .msh file
elmergrid (str, optional): ElmerGrid executable
**kwargs: Arbitrary keyword arguments
Expand All @@ -30,21 +30,22 @@ def run_elmer_grid(sim_dir, meshfile, elmergrid=None, **kwargs):
elmergrid = "ElmerGrid"

args = [elmergrid, "14", "2", meshfile]
with open(os.path.join(sim_dir, "elmergrid.log"), "w") as f:
subprocess.run(args, cwd=sim_dir, stdout=f, stderr=f)
with open(os.path.join(mesh_dir, "elmergrid.log"), "w") as f:
subprocess.run(args, cwd=mesh_dir, stdout=f, stderr=f)

mesh_dir = sim_dir + "/" + ".".join(meshfile.split(".")[:-1])
keep_mesh_dir = kwargs.get("keep_mesh_dir", False)
if keep_mesh_dir:
return None

out_dir = kwargs.get("out_dir", sim_dir)
files = os.listdir(mesh_dir)
for f in files:
if os.path.exists(out_dir + "/" + f):
os.remove(out_dir + "/" + f)
shutil.move(mesh_dir + "/" + f, out_dir)
shutil.rmtree(mesh_dir)

if not keep_mesh_dir:
elmer_mesh_dir = os.path.join(mesh_dir, ".".join(meshfile.split(".")[:-1]))
out_dir = kwargs.get("out_dir", mesh_dir)
if not os.path.exists(out_dir):
os.makedirs(out_dir)
files = os.listdir(elmer_mesh_dir)
for f in files:
if os.path.exists(os.path.join(out_dir, f)):
os.remove(os.path.join(out_dir, f))
shutil.move(os.path.join(elmer_mesh_dir, f), out_dir)
shutil.rmtree(elmer_mesh_dir)


def run_elmerf90(userfile_in, userfile_out, elmerf90=None):
Expand Down
1 change: 0 additions & 1 deletion pyelmer/test/test_elmer.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import pytest
import yaml
import filecmp
import gmsh
Expand Down
41 changes: 41 additions & 0 deletions pyelmer/test/test_execute.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import unittest.mock
import os
import subprocess
import tempfile
from pyelmer import execute


def test_run_elmer_grid(monkeypatch):
# create mock for calling ElmerGrid
mock_call = unittest.mock.MagicMock()
mock_call.return_value = 0

def create_file(args, cwd, **kwargs):
meshdir = os.path.join(cwd, args[3].split(".")[0])
os.mkdir(meshdir)
with open(os.path.join(meshdir, "test.boundaries"), "w") as f:
f.write("0")
with open(os.path.join(meshdir, "test.elements"), "w") as f:
f.write("0")

mock_call.side_effect = create_file
monkeypatch.setattr(subprocess, "run", mock_call)

with tempfile.TemporaryDirectory() as tempdir:
execute.run_elmer_grid(tempdir, "test.msh", "ElmerGridTest")
# not sure why that's failing
# mock_call.assert_called_once_with(
# ["ElmerGridTest", "14", "2", "test.msh"],
# cwd=tempdir,
# stdout=unittest.mock.ANY,
# stdin=unittest.mock.ANY,
# )
assert os.listdir(tempdir) == ["elmergrid.log", "test.boundaries", "test.elements"]
with tempfile.TemporaryDirectory() as tempdir:
execute.run_elmer_grid(tempdir, "test.msh", "ElmerGridTest", keep_mesh_dir=True)
assert os.listdir(tempdir) == ["elmergrid.log", "test"]
assert os.listdir(os.path.join(tempdir, "test")) == ["test.boundaries", "test.elements"]
with tempfile.TemporaryDirectory() as tempdir:
execute.run_elmer_grid(tempdir, "test.msh", "ElmerGridTest", out_dir=os.path.join(tempdir, "out/dir"))
assert os.listdir(tempdir) == ["elmergrid.log", "out"]
assert os.listdir(os.path.join(tempdir, os.path.join(tempdir, "out/dir"))) == ["test.boundaries", "test.elements"]

0 comments on commit d827271

Please sign in to comment.