Coverage for plugins/klayout-pex-plugin-gmsh/src/klayout_pex_plugins/gmsh/exporter.py: 100%

12 statements  

« prev     ^ index     » next       coverage.py v7.17.2, created at 2026-11-06 13:14 +0000

1# 

2# -------------------------------------------------------------------------------- 

3# SPDX-FileCopyrightText: 2026 Martin Jan Köhler and Harald Pretl 

4# Johannes Kepler University, Institute for Integrated Circuits. 

5# 

6# This file is part of klayout-pex-plugin-gmsh 

7# (see https://github.com/iic-jku/klayout-pex-plugin-gmsh). 

8# 

9# This program is free software: you can redistribute it and/or modify 

10# it under the terms of the GNU General Public License as published by 

11# the Free Software Foundation, either version 3 of the License, or 

12# (at your option) any later version. 

13# 

14# This program is distributed in the hope that it will be useful, 

15# but WITHOUT ANY WARRANTY; without even the implied warranty of 

16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

17# GNU General Public License for more details. 

18# 

19# You should have received a copy of the GNU General Public License 

20# along with this program. If not, see <http://www.gnu.org/licenses/>. 

21# SPDX-License-Identifier: GPL-3.0-or-later 

22# -------------------------------------------------------------------------------- 

23# 

24 

25"""The exporter ``gmsh``: the mesh on its own, for any FEM tool or for looking at.""" 

26 

27from __future__ import annotations 

28 

29from typing import TYPE_CHECKING, Any, ClassVar, List, Mapping, Optional 

30 

31from klayout_pex.plugin_api.v1 import PEX25DSceneExporter 

32 

33from .mesh import write_mesh 

34from .options import GmshMeshOptions, parse_options 

35 

36if TYPE_CHECKING: 

37 from klayout_pex_protobuf.kpex.pex25d.pex25d_scene_pb2 import PEX25DScene 

38 

39 

40class GmshSceneExporter(PEX25DSceneExporter): 

41 """Write a gmsh volume mesh of a resolved PEX25D scene.""" 

42 

43 name: ClassVar[str] = 'gmsh' 

44 default_prefix: ClassVar[str] = '' 

45 

46 def export(self, 

47 scene: PEX25DScene, 

48 *, 

49 output_dir_path: str, 

50 prefix: str = '', 

51 options: Optional[Mapping[str, Any]] = None) -> List[str]: 

52 """Return the mesh first, then the JSON naming its physical groups.""" 

53 settings = parse_options(GmshMeshOptions, options, self.name) 

54 result = write_mesh(scene, settings, output_dir_path, prefix or self.default_prefix) 

55 return result.paths