diff --git a/tools/ogsAutowrap/.shed.yml b/tools/ogsAutowrap/.shed.yml
new file mode 100644
index 00000000..b940d687
--- /dev/null
+++ b/tools/ogsAutowrap/.shed.yml
@@ -0,0 +1,16 @@
+name: suite_ogs
+owner: ufz
+description: A suite of tools for OpenGeoSys (ogs)
+long_description: A suite of tools for ogs
+categories:
+- Geo Science
+remote_repository_url: https://github.com/Helmholtz-UFZ/galaxy-tools/tree/main/tools/ogs/
+homepage_url: https://gitlab.opengeosys.org/ogs/ogs
+type: unrestricted
+auto_tool_repositories:
+ name_template: "{{ tool_id }}"
+ description_template: A suite of tools for OpenGeoSys (ogs)
+suite:
+ name: suite_ogs
+ description: A suite of tools for ogs
+ long_description: A suite of tools for og
\ No newline at end of file
diff --git a/tools/ogsAutowrap/AddElementQuality.xml b/tools/ogsAutowrap/AddElementQuality.xml
new file mode 100644
index 00000000..3b35860a
--- /dev/null
+++ b/tools/ogsAutowrap/AddElementQuality.xml
@@ -0,0 +1,35 @@
+
+
+ Galaxy wrapper for the OGS utility 'AddElementQuality'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **AddElementQuality** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/AddFaultToVoxelGrid.xml b/tools/ogsAutowrap/AddFaultToVoxelGrid.xml
new file mode 100644
index 00000000..657a458c
--- /dev/null
+++ b/tools/ogsAutowrap/AddFaultToVoxelGrid.xml
@@ -0,0 +1,30 @@
+
+
+ Galaxy wrapper for the OGS utility 'AddFaultToVoxelGrid'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **AddFaultToVoxelGrid** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/AddLayer.xml b/tools/ogsAutowrap/AddLayer.xml
new file mode 100644
index 00000000..fe6df82a
--- /dev/null
+++ b/tools/ogsAutowrap/AddLayer.xml
@@ -0,0 +1,35 @@
+
+
+ Galaxy wrapper for the OGS utility 'AddLayer'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **AddLayer** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/AssignRasterDataToMesh.xml b/tools/ogsAutowrap/AssignRasterDataToMesh.xml
new file mode 100644
index 00000000..dd567a39
--- /dev/null
+++ b/tools/ogsAutowrap/AssignRasterDataToMesh.xml
@@ -0,0 +1,38 @@
+
+
+ Galaxy wrapper for the OGS utility 'AssignRasterDataToMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **AssignRasterDataToMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/ComputeNodeAreasFromSurfaceMesh.xml b/tools/ogsAutowrap/ComputeNodeAreasFromSurfaceMesh.xml
new file mode 100644
index 00000000..cfa8cbf1
--- /dev/null
+++ b/tools/ogsAutowrap/ComputeNodeAreasFromSurfaceMesh.xml
@@ -0,0 +1,36 @@
+
+
+ Galaxy wrapper for the OGS utility 'ComputeNodeAreasFromSurfaceMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **ComputeNodeAreasFromSurfaceMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/CreateAnchors.xml b/tools/ogsAutowrap/CreateAnchors.xml
new file mode 100644
index 00000000..0b82c043
--- /dev/null
+++ b/tools/ogsAutowrap/CreateAnchors.xml
@@ -0,0 +1,23 @@
+
+
+ Galaxy wrapper for the OGS utility 'CreateAnchors'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **CreateAnchors** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/CreateBoundaryConditionsAlongPolylines.xml b/tools/ogsAutowrap/CreateBoundaryConditionsAlongPolylines.xml
new file mode 100644
index 00000000..dcd4a7ff
--- /dev/null
+++ b/tools/ogsAutowrap/CreateBoundaryConditionsAlongPolylines.xml
@@ -0,0 +1,42 @@
+
+
+ Galaxy wrapper for the OGS utility 'CreateBoundaryConditionsAlongPolylines'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **CreateBoundaryConditionsAlongPolylines** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/ExtractBoundary.xml b/tools/ogsAutowrap/ExtractBoundary.xml
new file mode 100644
index 00000000..e26479cd
--- /dev/null
+++ b/tools/ogsAutowrap/ExtractBoundary.xml
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/ExtractMaterials.xml b/tools/ogsAutowrap/ExtractMaterials.xml
new file mode 100644
index 00000000..ba0d372a
--- /dev/null
+++ b/tools/ogsAutowrap/ExtractMaterials.xml
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/ExtractSurface.xml b/tools/ogsAutowrap/ExtractSurface.xml
new file mode 100644
index 00000000..b85e55b6
--- /dev/null
+++ b/tools/ogsAutowrap/ExtractSurface.xml
@@ -0,0 +1,35 @@
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/FEFLOW2OGS.xml b/tools/ogsAutowrap/FEFLOW2OGS.xml
new file mode 100644
index 00000000..9903fbed
--- /dev/null
+++ b/tools/ogsAutowrap/FEFLOW2OGS.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'FEFLOW2OGS'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **FEFLOW2OGS** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/Feflow2Mesh.xml b/tools/ogsAutowrap/Feflow2Mesh.xml
new file mode 100644
index 00000000..31cd2397
--- /dev/null
+++ b/tools/ogsAutowrap/Feflow2Mesh.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'Feflow2Mesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **Feflow2Mesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/GMSH2OGS.xml b/tools/ogsAutowrap/GMSH2OGS.xml
new file mode 100644
index 00000000..6b5def4c
--- /dev/null
+++ b/tools/ogsAutowrap/GMSH2OGS.xml
@@ -0,0 +1,35 @@
+
+
+ Galaxy wrapper for the OGS utility 'GMSH2OGS'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **GMSH2OGS** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/GocadSGridReader.xml b/tools/ogsAutowrap/GocadSGridReader.xml
new file mode 100644
index 00000000..257de978
--- /dev/null
+++ b/tools/ogsAutowrap/GocadSGridReader.xml
@@ -0,0 +1,29 @@
+
+
+ Galaxy wrapper for the OGS utility 'GocadSGridReader'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **GocadSGridReader** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/GocadTSurfaceReader.xml b/tools/ogsAutowrap/GocadTSurfaceReader.xml
new file mode 100644
index 00000000..52d9f3c8
--- /dev/null
+++ b/tools/ogsAutowrap/GocadTSurfaceReader.xml
@@ -0,0 +1,33 @@
+
+
+ Galaxy wrapper for the OGS utility 'GocadTSurfaceReader'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **GocadTSurfaceReader** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/IntegrateBoreholesIntoMesh.xml b/tools/ogsAutowrap/IntegrateBoreholesIntoMesh.xml
new file mode 100644
index 00000000..9f057673
--- /dev/null
+++ b/tools/ogsAutowrap/IntegrateBoreholesIntoMesh.xml
@@ -0,0 +1,34 @@
+
+
+ Galaxy wrapper for the OGS utility 'IntegrateBoreholesIntoMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **IntegrateBoreholesIntoMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/Layers2Grid.xml b/tools/ogsAutowrap/Layers2Grid.xml
new file mode 100644
index 00000000..bb642e61
--- /dev/null
+++ b/tools/ogsAutowrap/Layers2Grid.xml
@@ -0,0 +1,39 @@
+
+
+ Galaxy wrapper for the OGS utility 'Layers2Grid'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+ > input_list.txt;
+#end for
+Layers2Grid
+ $dilate
+ --cellsize-z '$cellsize_z'
+ --cellsize-y '$cellsize_y'
+ --cellsize-x '$cellsize_x'
+ --input input_list.txt
+ --output output_1.vtu
+]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **Layers2Grid** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/MapGeometryToMeshSurface.xml b/tools/ogsAutowrap/MapGeometryToMeshSurface.xml
new file mode 100644
index 00000000..2b27fdd8
--- /dev/null
+++ b/tools/ogsAutowrap/MapGeometryToMeshSurface.xml
@@ -0,0 +1,32 @@
+
+
+ Galaxy wrapper for the OGS utility 'MapGeometryToMeshSurface'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **MapGeometryToMeshSurface** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/MergeMeshToBulkMesh.xml b/tools/ogsAutowrap/MergeMeshToBulkMesh.xml
new file mode 100644
index 00000000..5f2d3fcc
--- /dev/null
+++ b/tools/ogsAutowrap/MergeMeshToBulkMesh.xml
@@ -0,0 +1,46 @@
+
+
+ Galaxy wrapper for the OGS utility 'MergeMeshToBulkMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **MergeMeshToBulkMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/Mesh2Raster.xml b/tools/ogsAutowrap/Mesh2Raster.xml
new file mode 100644
index 00000000..6bbbd3aa
--- /dev/null
+++ b/tools/ogsAutowrap/Mesh2Raster.xml
@@ -0,0 +1,29 @@
+
+
+ Galaxy wrapper for the OGS utility 'Mesh2Raster'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **Mesh2Raster** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/MeshMapping.xml b/tools/ogsAutowrap/MeshMapping.xml
new file mode 100644
index 00000000..624869be
--- /dev/null
+++ b/tools/ogsAutowrap/MeshMapping.xml
@@ -0,0 +1,39 @@
+
+
+ Galaxy wrapper for the OGS utility 'MeshMapping'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **MeshMapping** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/MoveGeometry.xml b/tools/ogsAutowrap/MoveGeometry.xml
new file mode 100644
index 00000000..71dfcb39
--- /dev/null
+++ b/tools/ogsAutowrap/MoveGeometry.xml
@@ -0,0 +1,33 @@
+
+
+ Galaxy wrapper for the OGS utility 'MoveGeometry'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **MoveGeometry** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/MoveMesh.xml b/tools/ogsAutowrap/MoveMesh.xml
new file mode 100644
index 00000000..e37b776d
--- /dev/null
+++ b/tools/ogsAutowrap/MoveMesh.xml
@@ -0,0 +1,33 @@
+
+
+ Galaxy wrapper for the OGS utility 'MoveMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **MoveMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/NodeReordering.xml b/tools/ogsAutowrap/NodeReordering.xml
new file mode 100644
index 00000000..dfc036c1
--- /dev/null
+++ b/tools/ogsAutowrap/NodeReordering.xml
@@ -0,0 +1,36 @@
+
+
+ Galaxy wrapper for the OGS utility 'NodeReordering'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **NodeReordering** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/OGS2VTK.xml b/tools/ogsAutowrap/OGS2VTK.xml
new file mode 100644
index 00000000..e8b24e57
--- /dev/null
+++ b/tools/ogsAutowrap/OGS2VTK.xml
@@ -0,0 +1,29 @@
+
+
+ Galaxy wrapper for the OGS utility 'OGS2VTK'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **OGS2VTK** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/PVD2XDMF.xml b/tools/ogsAutowrap/PVD2XDMF.xml
new file mode 100644
index 00000000..f980b6e3
--- /dev/null
+++ b/tools/ogsAutowrap/PVD2XDMF.xml
@@ -0,0 +1,31 @@
+
+
+ Galaxy wrapper for the OGS utility 'PVD2XDMF'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **PVD2XDMF** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/PVTU2VTU.xml b/tools/ogsAutowrap/PVTU2VTU.xml
new file mode 100644
index 00000000..3407fecc
--- /dev/null
+++ b/tools/ogsAutowrap/PVTU2VTU.xml
@@ -0,0 +1,29 @@
+
+
+ Galaxy wrapper for the OGS utility 'PVTU2VTU'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **PVTU2VTU** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/PartitionMesh.xml b/tools/ogsAutowrap/PartitionMesh.xml
new file mode 100644
index 00000000..b2deb3da
--- /dev/null
+++ b/tools/ogsAutowrap/PartitionMesh.xml
@@ -0,0 +1,42 @@
+
+
+ Galaxy wrapper for the OGS utility 'PartitionMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **PartitionMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/Raster2ASC.xml b/tools/ogsAutowrap/Raster2ASC.xml
new file mode 100644
index 00000000..cc399e52
--- /dev/null
+++ b/tools/ogsAutowrap/Raster2ASC.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'Raster2ASC'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **Raster2ASC** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/Raster2Mesh.xml b/tools/ogsAutowrap/Raster2Mesh.xml
new file mode 100644
index 00000000..8370a571
--- /dev/null
+++ b/tools/ogsAutowrap/Raster2Mesh.xml
@@ -0,0 +1,40 @@
+
+
+ Galaxy wrapper for the OGS utility 'Raster2Mesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **Raster2Mesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/RemoveGhostData.xml b/tools/ogsAutowrap/RemoveGhostData.xml
new file mode 100644
index 00000000..361623a8
--- /dev/null
+++ b/tools/ogsAutowrap/RemoveGhostData.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'RemoveGhostData'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **RemoveGhostData** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/RemoveUnusedPoints.xml b/tools/ogsAutowrap/RemoveUnusedPoints.xml
new file mode 100644
index 00000000..19d31b67
--- /dev/null
+++ b/tools/ogsAutowrap/RemoveUnusedPoints.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'RemoveUnusedPoints'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **RemoveUnusedPoints** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/ReorderMesh.xml b/tools/ogsAutowrap/ReorderMesh.xml
new file mode 100644
index 00000000..116eaa77
--- /dev/null
+++ b/tools/ogsAutowrap/ReorderMesh.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'ReorderMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **ReorderMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/ResetPropertiesInPolygonalRegion.xml b/tools/ogsAutowrap/ResetPropertiesInPolygonalRegion.xml
new file mode 100644
index 00000000..1c0df857
--- /dev/null
+++ b/tools/ogsAutowrap/ResetPropertiesInPolygonalRegion.xml
@@ -0,0 +1,41 @@
+
+
+ Galaxy wrapper for the OGS utility 'ResetPropertiesInPolygonalRegion'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **ResetPropertiesInPolygonalRegion** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/SWMMConverter.xml b/tools/ogsAutowrap/SWMMConverter.xml
new file mode 100644
index 00000000..ec2f9464
--- /dev/null
+++ b/tools/ogsAutowrap/SWMMConverter.xml
@@ -0,0 +1,39 @@
+
+
+ Galaxy wrapper for the OGS utility 'SWMMConverter'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **SWMMConverter** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/TIN2VTK.xml b/tools/ogsAutowrap/TIN2VTK.xml
new file mode 100644
index 00000000..f40f9083
--- /dev/null
+++ b/tools/ogsAutowrap/TIN2VTK.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'TIN2VTK'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **TIN2VTK** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/TecPlotTools.xml b/tools/ogsAutowrap/TecPlotTools.xml
new file mode 100644
index 00000000..715dbef9
--- /dev/null
+++ b/tools/ogsAutowrap/TecPlotTools.xml
@@ -0,0 +1,31 @@
+
+
+ Galaxy wrapper for the OGS utility 'TecPlotTools'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **TecPlotTools** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/VTK2OGS.xml b/tools/ogsAutowrap/VTK2OGS.xml
new file mode 100644
index 00000000..41adc752
--- /dev/null
+++ b/tools/ogsAutowrap/VTK2OGS.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'VTK2OGS'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **VTK2OGS** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/VTK2TIN.xml b/tools/ogsAutowrap/VTK2TIN.xml
new file mode 100644
index 00000000..f8e60e27
--- /dev/null
+++ b/tools/ogsAutowrap/VTK2TIN.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'VTK2TIN'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **VTK2TIN** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/Vtu2Grid.xml b/tools/ogsAutowrap/Vtu2Grid.xml
new file mode 100644
index 00000000..b792ec46
--- /dev/null
+++ b/tools/ogsAutowrap/Vtu2Grid.xml
@@ -0,0 +1,33 @@
+
+
+ Galaxy wrapper for the OGS utility 'Vtu2Grid'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **Vtu2Grid** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/addDataToRaster.xml b/tools/ogsAutowrap/addDataToRaster.xml
new file mode 100644
index 00000000..2a64f6d8
--- /dev/null
+++ b/tools/ogsAutowrap/addDataToRaster.xml
@@ -0,0 +1,45 @@
+
+
+ Galaxy wrapper for the OGS utility 'addDataToRaster'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **addDataToRaster** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/appendLinesAlongPolyline.xml b/tools/ogsAutowrap/appendLinesAlongPolyline.xml
new file mode 100644
index 00000000..697f5e18
--- /dev/null
+++ b/tools/ogsAutowrap/appendLinesAlongPolyline.xml
@@ -0,0 +1,33 @@
+
+
+ Galaxy wrapper for the OGS utility 'appendLinesAlongPolyline'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **appendLinesAlongPolyline** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/checkMesh.xml b/tools/ogsAutowrap/checkMesh.xml
new file mode 100644
index 00000000..4d0ff1f9
--- /dev/null
+++ b/tools/ogsAutowrap/checkMesh.xml
@@ -0,0 +1,30 @@
+
+
+ Galaxy wrapper for the OGS utility 'checkMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+ '$stdout_log'
+]]>
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **checkMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/computeSurfaceNodeIDsInPolygonalRegion.xml b/tools/ogsAutowrap/computeSurfaceNodeIDsInPolygonalRegion.xml
new file mode 100644
index 00000000..91848f9f
--- /dev/null
+++ b/tools/ogsAutowrap/computeSurfaceNodeIDsInPolygonalRegion.xml
@@ -0,0 +1,32 @@
+
+
+ Galaxy wrapper for the OGS utility 'computeSurfaceNodeIDsInPolygonalRegion'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+ '$stdout_log'
+]]>
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **computeSurfaceNodeIDsInPolygonalRegion** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/constructMeshesFromGeometry.xml b/tools/ogsAutowrap/constructMeshesFromGeometry.xml
new file mode 100644
index 00000000..92514a95
--- /dev/null
+++ b/tools/ogsAutowrap/constructMeshesFromGeometry.xml
@@ -0,0 +1,35 @@
+
+
+ Galaxy wrapper for the OGS utility 'constructMeshesFromGeometry'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **constructMeshesFromGeometry** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/convertGEO.xml b/tools/ogsAutowrap/convertGEO.xml
new file mode 100644
index 00000000..6c59e543
--- /dev/null
+++ b/tools/ogsAutowrap/convertGEO.xml
@@ -0,0 +1,30 @@
+
+
+ Galaxy wrapper for the OGS utility 'convertGEO'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **convertGEO** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/convertToLinearMesh.xml b/tools/ogsAutowrap/convertToLinearMesh.xml
new file mode 100644
index 00000000..83755c1c
--- /dev/null
+++ b/tools/ogsAutowrap/convertToLinearMesh.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'convertToLinearMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **convertToLinearMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/convertVtkDataArrayToVtkDataArray.xml b/tools/ogsAutowrap/convertVtkDataArrayToVtkDataArray.xml
new file mode 100644
index 00000000..a0eb3cf6
--- /dev/null
+++ b/tools/ogsAutowrap/convertVtkDataArrayToVtkDataArray.xml
@@ -0,0 +1,36 @@
+
+
+ Galaxy wrapper for the OGS utility 'convertVtkDataArrayToVtkDataArray'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **convertVtkDataArrayToVtkDataArray** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/createIntermediateRasters.xml b/tools/ogsAutowrap/createIntermediateRasters.xml
new file mode 100644
index 00000000..1f842e56
--- /dev/null
+++ b/tools/ogsAutowrap/createIntermediateRasters.xml
@@ -0,0 +1,32 @@
+
+
+ Galaxy wrapper for the OGS utility 'createIntermediateRasters'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **createIntermediateRasters** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/createLayeredMeshFromRasters.xml b/tools/ogsAutowrap/createLayeredMeshFromRasters.xml
new file mode 100644
index 00000000..2b0b1507
--- /dev/null
+++ b/tools/ogsAutowrap/createLayeredMeshFromRasters.xml
@@ -0,0 +1,38 @@
+
+
+ Galaxy wrapper for the OGS utility 'createLayeredMeshFromRasters'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+ > raster_list_list.txt;
+#end for
+ln -sf '$input_mesh_file' '$input_mesh_file.element_identifier';
+createLayeredMeshFromRasters
+ $ascii_output
+ --raster-list raster_list_list.txt
+ $keep_surface_material_ids
+ --input-mesh-file '$input_mesh_file.element_identifier'
+ --output-mesh-file output_1.vtu
+]]>
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **createLayeredMeshFromRasters** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/createMeshElemPropertiesFromASCRaster.xml b/tools/ogsAutowrap/createMeshElemPropertiesFromASCRaster.xml
new file mode 100644
index 00000000..ae5afdf1
--- /dev/null
+++ b/tools/ogsAutowrap/createMeshElemPropertiesFromASCRaster.xml
@@ -0,0 +1,36 @@
+
+
+ Galaxy wrapper for the OGS utility 'createMeshElemPropertiesFromASCRaster'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **createMeshElemPropertiesFromASCRaster** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/createNeumannBc.xml b/tools/ogsAutowrap/createNeumannBc.xml
new file mode 100644
index 00000000..efa04b71
--- /dev/null
+++ b/tools/ogsAutowrap/createNeumannBc.xml
@@ -0,0 +1,31 @@
+
+
+ Galaxy wrapper for the OGS utility 'createNeumannBc'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **createNeumannBc** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/createQuadraticMesh.xml b/tools/ogsAutowrap/createQuadraticMesh.xml
new file mode 100644
index 00000000..faf80fb2
--- /dev/null
+++ b/tools/ogsAutowrap/createQuadraticMesh.xml
@@ -0,0 +1,29 @@
+
+
+ Galaxy wrapper for the OGS utility 'createQuadraticMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **createQuadraticMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/createRaster.xml b/tools/ogsAutowrap/createRaster.xml
new file mode 100644
index 00000000..6d00194c
--- /dev/null
+++ b/tools/ogsAutowrap/createRaster.xml
@@ -0,0 +1,34 @@
+
+
+ Galaxy wrapper for the OGS utility 'createRaster'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **createRaster** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/createTetgenSmeshFromRasters.xml b/tools/ogsAutowrap/createTetgenSmeshFromRasters.xml
new file mode 100644
index 00000000..9c8cad58
--- /dev/null
+++ b/tools/ogsAutowrap/createTetgenSmeshFromRasters.xml
@@ -0,0 +1,36 @@
+
+
+ Galaxy wrapper for the OGS utility 'createTetgenSmeshFromRasters'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+ > raster_list_list.txt;
+#end for
+ln -sf '$input_mesh_file' '$input_mesh_file.element_identifier';
+createTetgenSmeshFromRasters
+ $ascii_output
+ --raster-list raster_list_list.txt
+ --input-mesh-file '$input_mesh_file.element_identifier'
+ --output-mesh-file output_1.smesh
+]]>
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **createTetgenSmeshFromRasters** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/editMaterialID.xml b/tools/ogsAutowrap/editMaterialID.xml
new file mode 100644
index 00000000..724edac0
--- /dev/null
+++ b/tools/ogsAutowrap/editMaterialID.xml
@@ -0,0 +1,48 @@
+
+
+ Galaxy wrapper for the OGS utility 'editMaterialID'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **editMaterialID** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/gen.py b/tools/ogsAutowrap/gen.py
new file mode 100644
index 00000000..1542715b
--- /dev/null
+++ b/tools/ogsAutowrap/gen.py
@@ -0,0 +1,1268 @@
+import argparse
+import logging
+import re
+import sys
+import json
+import shlex
+import urllib.request
+import xml.etree.ElementTree as ET
+from pathlib import Path
+from typing import Any, Dict, List, Optional, Tuple
+
+import json
+from galaxyxml.tool import Tool
+from galaxyxml.tool.parameters import (
+ BooleanParam,
+ DataParam,
+ DiscoverDatasets,
+ Expand,
+ FloatParam,
+ Inputs,
+ IntegerParam,
+ OutputCollection,
+ OutputData,
+ Outputs,
+ SelectParam,
+ Tests,
+ TextParam,
+)
+
+# --- CONFIGURATION (ONLINE) ---
+GITLAB_BASE_URL = "https://gitlab.opengeosys.org/ogs/ogs/-"
+RAW_URL_ROOT = f"{GITLAB_BASE_URL}/raw/master"
+API_URL_ROOT = "https://gitlab.opengeosys.org/api/v4/projects/ogs%2Fogs/repository/tree"
+UTILS_PATH = "Applications/Utils"
+OUTPUT_DIR = Path(".")
+REPO_B_RAW = "https://gitlab.opengeosys.org/kristofkessler/ogs/-/raw/ebd40a71bacd951b90b64e2e42fb8d11528bde39"
+REPO_B_API = (
+ "https://gitlab.opengeosys.org/api/v4/projects/kristofkessler%2Fogs/repository/tree"
+)
+REPO_B_DATA_PATH = "Tests/Data"
+
+# Tools with broken executable commands
+EXCLUDED_TOOLS = [
+ "netcdfconverter",
+ "binarytopvtu",
+ "ogsfileconverter",
+ "raster2pointcloud",
+ "verticalslicefromlayers",
+ "convertshptogli",
+ "mesh2shape",
+]
+
+TCLAP_PATTERN_STD = re.compile(
+ r"TCLAP::(?P(?:Value|Switch|Multi)Arg)\s*"
+ r"(?:<(?P.*?)>)?\s*(?P\w+)\s*"
+ r"[\({]\s*(?P.*?)\s*[\)}];",
+ re.DOTALL,
+)
+
+TCLAP_PATTERN_UNLABELED = re.compile(
+ r"TCLAP::(?PUnlabeled(?:Value|Multi)Arg)\s*"
+ r"(?:<(?P.*?)>)?\s*(?P\w+)\s*"
+ r"[\({]\s*(?P.*?)\s*[\)}];",
+ re.DOTALL,
+)
+FILE_EXTENSION_PATTERN = re.compile(r"\((.*?)\)")
+MIN_MAX_PATTERN = re.compile(r"\((min|max)\s*=\s*([^)]+)\)")
+
+
+def list_cpp_files(root_dir: str) -> List[str]:
+ """Return a sorted list of all *.cpp file paths under ``root_dir`` (recursive)."""
+ return sorted(str(p) for p in Path(root_dir).rglob("*.cpp"))
+
+
+def get_repo_b_file_index() -> Dict[str, str]:
+ index = {}
+ try:
+ url = f"{REPO_B_API}?path={REPO_B_DATA_PATH}&ref=ebd40a71bacd951b90b64e2e42fb8d11528bde39&per_page=100"
+ with urllib.request.urlopen(url) as resp:
+ items = json.loads(resp.read().decode())
+ folders = [i["path"] for i in items if i["type"] == "tree"]
+ except:
+ return {}
+
+ eprint(f"Scanning {len(folders)} subfolders in Repo B...")
+ for folder in folders:
+ page = 1
+ while True:
+ url = f"{REPO_B_API}?path={folder}&recursive=true&per_page=100&page={page}&ref=ebd40a71bacd951b90b64e2e42fb8d11528bde39"
+ try:
+ with urllib.request.urlopen(url) as resp:
+ data = json.loads(resp.read().decode())
+ if not data:
+ break
+ for item in data:
+ if item["type"] == "blob":
+ index[item["path"].split("/")[-1]] = item["path"]
+ page += 1
+ except:
+ break
+ eprint(f"-> Index built: {len(index)} files found in Repo B.")
+ return index
+
+
+def get_ogs_ftype(extensions: List[str]) -> str:
+ """Mapping for Galaxy file types (including custom OGS types)"""
+ if not extensions:
+ return "vtkxml"
+
+ ext = extensions[0].lower().lstrip(".")
+
+ if ext == "sg":
+ return "gocad.sg"
+ if ext == "fem":
+ return "feflow.fem"
+ if ext == "asc":
+ return "raster.asc"
+
+ if ext in ["vtu", "vtk", "pvtu", "pvd"]:
+ return "vtkxml"
+
+ if ext in ["prj", "xml", "gml", "ts", "gli"]:
+ return "xml"
+
+ if ext == "nc":
+ return "netcdf"
+
+ if ext in ["plt", "tin", "mesh", "bin", "smesh"]:
+ return "txt"
+
+ return ext
+
+
+def eprint(*args, **kwargs):
+ print(*args, file=sys.stderr, **kwargs)
+
+
+def sanitize_name(name: str) -> str:
+ return re.sub(r"[^a-zA-Z0-9_]+", "_", name)
+
+
+def url_exists(url: str) -> bool:
+ try:
+ req = urllib.request.Request(url, method="HEAD")
+ with urllib.request.urlopen(req, timeout=5) as response:
+ return response.status == 200
+ except:
+ return False
+
+
+def resolve_values_constraint(constraint_ptr: str, search_space: str) -> List[str]:
+ var_name = constraint_ptr.lstrip("&")
+ vc_pattern = re.compile(
+ r"TCLAP::ValuesConstraint<.*?>\s+"
+ + re.escape(var_name)
+ + r"\s*[\({]\s*(\w+)\s*[\)}]",
+ re.DOTALL,
+ )
+ vc_match = vc_pattern.search(search_space)
+ if not vc_match:
+ return []
+
+ vector_var_name = vc_match.group(1)
+ options = []
+
+ vec_init_pattern = re.compile(
+ r"std::vector<.*?>\s+"
+ + re.escape(vector_var_name)
+ + r"\s*(?:=)?\s*[({]?\s*\{(.*?)\}\s*[)}]?;",
+ re.DOTALL,
+ )
+ vec_match = vec_init_pattern.search(search_space)
+ if vec_match:
+ content = vec_match.group(1)
+ string_options = re.findall(r'"(.*?)"', content)
+ if string_options:
+ options.extend(string_options)
+ else:
+ numeric_options = [
+ item.strip() for item in content.split(",") if item.strip()
+ ]
+ options.extend(numeric_options)
+
+ push_pattern = re.compile(
+ re.escape(vector_var_name)
+ + r"\.(?:emplace_back|push_back)\s*\(\s*([^)]+)\s*\)\s*;",
+ re.MULTILINE,
+ )
+ push_matches = push_pattern.findall(search_space)
+ if push_matches:
+ for val in push_matches:
+ clean_val = val.strip().strip('"')
+ options.append(clean_val)
+
+ seen = set()
+ return [x for x in options if not (x in seen or seen.add(x))]
+
+
+def discover_tools(ogs_root: Path) -> List[Dict[str, Any]]:
+ source_files = list_cpp_files(ogs_root / "Applications" / "Utils")
+ tools_dict: Dict[str, Dict[str, Any]] = {}
+ logging.info(f"Searching {len(source_files)} remote .cpp files")
+
+ for file_path in source_files:
+ path_obj = Path(file_path)
+
+ raw_url = f"{RAW_URL_ROOT}/{file_path}"
+ with open(file_path) as fh:
+ content = fh.read()
+
+ all_matches = list(TCLAP_PATTERN_STD.finditer(content)) + list(
+ TCLAP_PATTERN_UNLABELED.finditer(content)
+ )
+
+ if not all_matches:
+ logging.debug(f"Skiping (no tclap): {file_path}")
+ continue
+
+ if path_obj.name == "main.cpp":
+ tool_name = path_obj.parent.name
+ else:
+ tool_name = path_obj.stem
+
+ if tool_name.lower() in ["main", "utils"]:
+ continue
+
+ if tool_name not in tools_dict:
+ tools_dict[tool_name] = {"name": tool_name, "parameters": []}
+
+ for match in all_matches:
+ param_data = match.groupdict()
+ param_data["is_unlabeled"] = "Unlabeled" in param_data.get("arg_type", "")
+ param_data["full_source_code"] = content
+ param_data["match_start_pos"] = match.start()
+ tools_dict[tool_name]["parameters"].append(param_data)
+
+ all_tools_data = list(tools_dict.values())
+ logging.info(f"-> Found {len(all_tools_data)}")
+ return sorted(all_tools_data, key=lambda x: x["name"])
+
+
+def process_parameters(
+ tclap_params: List[Dict[str, Any]]
+) -> Tuple[List[object], Dict[str, str]]:
+ galaxy_inputs = []
+ output_command_map = {}
+ output_idx = 1
+
+ if tclap_params and "writeMeshToFile" in tclap_params[0].get(
+ "full_source_code", ""
+ ):
+ has_tclap_output = any(
+ "output" in p.get("all_args", "").lower()
+ or "BASE_FILENAME_OUTPUT" in p.get("all_args", "")
+ for p in tclap_params
+ )
+ if not has_tclap_output:
+ output_command_map["VIRTUAL_no_flag"] = {
+ "filename": "new_",
+ "format": "vtkxml",
+ "type": "BASE_FILENAME",
+ }
+
+ for param_info in tclap_params:
+ if param_info.get("tclap_var_name") == "log_level_arg":
+ continue
+ all_args_str = param_info.get("all_args", "")
+ if not all_args_str:
+ continue
+
+ args = re.split(r",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", all_args_str)
+ args = [arg.strip() for arg in args]
+ is_unlabeled = param_info.get("is_unlabeled", False)
+
+ short_flag, long_flag, help_text_raw = "", "", ""
+ if not is_unlabeled:
+ if len(args) > 0:
+ short_flag = args[0].strip('"')
+ if len(args) > 1:
+ long_flag = args[1].strip('"')
+ if len(args) > 2:
+ help_text_raw = args[2]
+ else:
+ if len(args) > 0:
+ long_flag = args[0].strip('"')
+ if len(args) > 1:
+ help_text_raw = args[1]
+ if not long_flag:
+ long_flag = param_info.get("tclap_var_name", f"arg_{output_idx}")
+
+ if not long_flag:
+ continue
+ help_parts = re.findall(r'"(.*?)"', help_text_raw, re.DOTALL)
+ help_text = " ".join(part.strip() for part in help_parts).strip()
+ var_name = sanitize_name(long_flag)
+ argument = f"--{long_flag}" if long_flag else f"-{short_flag}"
+
+ # OUTPUT LOGIC
+ is_output_help = (
+ help_text.lower().startswith("output")
+ or "directory name and output base" in help_text.lower()
+ )
+
+ if is_output_help or "BASE_FILENAME_OUTPUT" in all_args_str:
+ format_match = FILE_EXTENSION_PATTERN.search(help_text)
+ primary_ext = "vtu"
+ if format_match:
+ primary_ext = format_match.group(1).split("|")[0].strip().lstrip(".")
+
+ file_format = get_ogs_ftype([primary_ext])
+ disk_ext = "vtu" if file_format == "vtkxml" else primary_ext
+
+ is_base_filename_output = (
+ "BASE_FILENAME_OUTPUT" in all_args_str
+ or "base name" in help_text.lower()
+ )
+
+ output_command_map[long_flag] = {
+ "filename": f"output_{output_idx}.{disk_ext}",
+ "format": file_format,
+ "short_flag": short_flag,
+ "type": "BASE_FILENAME" if is_base_filename_output else "FIXED_FILE",
+ }
+ output_idx += 1
+ continue
+
+ # INPUT & PARAMETER LOGIC
+ param = None
+ constraint_ptr = ""
+ if len(args) >= 5:
+ for potential_ptr in args[4:]:
+ ptr_stripped = potential_ptr.strip()
+ if (
+ ptr_stripped
+ and not ptr_stripped.startswith('"')
+ and not ptr_stripped[0].isdigit()
+ ):
+ constraint_ptr = ptr_stripped
+ break
+
+ if constraint_ptr:
+ options_list = resolve_values_constraint(
+ constraint_ptr, param_info.get("full_source_code", "")
+ )
+ if options_list:
+ opts_dict = {opt: opt for opt in options_list}
+ is_multi = "MultiArg" in param_info.get("arg_type", "")
+ param = SelectParam(
+ argument=argument,
+ label=var_name.replace("_", " "),
+ help=help_text,
+ options=opts_dict,
+ optional=True,
+ multiple=is_multi,
+ )
+ param.options_dict = opts_dict
+ elif (
+ help_text.startswith("Input")
+ or "filenames" in var_name
+ or "INPUT_FILE_LIST" in all_args_str
+ ):
+ format_match = FILE_EXTENSION_PATTERN.search(help_text)
+ all_exts = (
+ [e.strip().lstrip(".") for e in format_match.group(1).split("|")]
+ if format_match
+ else []
+ )
+ is_pvd = "pvd" in help_text.lower() or "pvd" in all_exts
+ primary_ext = "pvd" if is_pvd else (all_exts[0] if all_exts else "vtu")
+ galaxy_type = get_ogs_ftype([primary_ext])
+ is_file_list = "INPUT_FILE_LIST" in all_args_str
+ is_collection = (
+ "MultiArg" in param_info.get("arg_type", "")
+ or "filenames" in var_name
+ or is_file_list
+ )
+ is_optional = len(args) > 3 and args[3].lower() == "false"
+
+ param = DataParam(
+ argument=argument,
+ label=var_name.replace("_", " "),
+ help=help_text,
+ format=galaxy_type,
+ optional=is_optional,
+ )
+ param.is_data_collection = is_collection
+ param.is_collection = is_collection
+ param.ogs_ext = primary_ext
+ param.is_pvd = is_pvd
+ param.is_file_list = is_file_list
+
+ if is_pvd:
+ pvd_data = DataParam(
+ name=f"{var_name}_pvd_data",
+ label=f"{var_name} PVD Data Elements",
+ help="VTU Member Collection",
+ format="vtkxml",
+ optional=True,
+ )
+ pvd_data.is_pvd_element = True
+ pvd_data.is_data_collection = True
+ pvd_data.is_collection = True
+ galaxy_inputs.append(pvd_data)
+
+ elif "Switch" in param_info.get("arg_type", ""):
+ param = BooleanParam(
+ argument=argument,
+ label=var_name.replace("_", " "),
+ help=help_text,
+ truevalue=f"--{long_flag}",
+ falsevalue="",
+ checked=False,
+ )
+
+ else:
+ cpp_type = param_info.get("cpp_type", "").lower()
+ if "int" in cpp_type or "size_t" in cpp_type:
+ p_class = IntegerParam
+ elif "float" in cpp_type or "double" in cpp_type:
+ p_class = FloatParam
+ else:
+ p_class = TextParam
+ param = p_class(
+ argument=argument,
+ label=var_name.replace("_", " "),
+ help=help_text,
+ optional=True,
+ )
+
+ if param:
+ param.original_long_flag = long_flag
+ param.original_short_flag = short_flag
+ param.is_unlabeled = is_unlabeled
+ galaxy_inputs.append(param)
+
+ return galaxy_inputs, output_command_map
+
+
+def generate_tools(ogs_root: Path):
+ OUTPUT_DIR.mkdir(exist_ok=True)
+ all_tools_data = discover_tools(ogs_root)
+ if not all_tools_data:
+ eprint("No tools with TCLAP definitions found. Aborting.")
+ return
+
+ generated_count = 0
+ for tool_data in all_tools_data:
+ tool_name = tool_data["name"]
+ if tool_name.lower() in EXCLUDED_TOOLS:
+ logging.info(f"--> Skipping excluded tool: {tool_name}")
+ continue
+ logging.info(f"Generating wrapper for: {tool_name}...")
+ galaxy_inputs, output_command_map = process_parameters(
+ tool_data["parameters"]
+ )
+
+ # 1. EXECUTABLE NAMING
+ current_exe = tool_name
+ if tool_name.upper() == "PVTU2VTU":
+ current_exe = "pvtu2vtu"
+ elif tool_name[0].isupper() and tool_name[1:].islower():
+ current_exe = tool_name[0].lower() + tool_name[1:]
+
+ m_fixes = {
+ "PVTU2VTU": "pvtu2vtu",
+ "FEFLOW2OGS": "feflow2ogs",
+ "MergeMeshToBulkMesh": "mergeMeshToBulkMesh",
+ "PartitionMesh": "partmesh",
+ }
+
+ executable_name = m_fixes.get(tool_name, current_exe)
+
+ command_parts = []
+ flag_parts = []
+ unlabeled_parts = []
+
+ # 2. SYMLINKS & ARGUMENT MAPPING
+ for param in galaxy_inputs:
+ is_repeat = getattr(param, "is_repeat", False)
+ is_unlabeled = getattr(param, "is_unlabeled", False)
+
+ flag = getattr(param, "original_long_flag", None)
+ if flag:
+ name = sanitize_name(flag)
+ else:
+ name = ""
+
+ is_pvd_element = getattr(param, "is_pvd_element", False)
+
+ if isinstance(param, DataParam):
+ is_file_list = getattr(param, "is_file_list", False)
+ is_coll = getattr(param, "is_data_collection", False)
+
+ if getattr(param, "is_pvd_element", False):
+ command_parts.append(
+ f" #for $item in ${param.name}\n ln -sf '$item' '$item.element_identifier';\n #end for"
+ )
+ continue
+ if is_file_list:
+ list_file = f"{name}_list.txt"
+ command_parts.append(f"touch {list_file};")
+ command_parts.append(
+ f"#for $item in ${name}\n ln -sf '$item' '$item.element_identifier';\n echo '$item.element_identifier' >> {list_file};\n#end for"
+ )
+ flag_parts.append(f" --{flag} {list_file}")
+ continue
+ if is_coll:
+ command_parts.append(
+ f"#for $item in ${name}\nln -sf '$item' '$item.element_identifier';\n#end for"
+ )
+ loop_str = f"#for $item in ${name}\n'$item.element_identifier'\n#end for"
+ if is_unlabeled:
+ unlabeled_parts.append(f" --\n{loop_str}")
+ else:
+ flag_parts.append(f" --{flag}\n{loop_str}")
+ else:
+ command_parts.append(
+ f"ln -sf '${name}' '${name}.element_identifier';"
+ )
+ arg_val = f"'${name}.element_identifier'"
+ if is_unlabeled:
+ unlabeled_parts.append(f" {arg_val}")
+ else:
+ flag_parts.append(f" --{flag} {arg_val}")
+ elif isinstance(param, BooleanParam):
+ flag_parts.append(f" ${name}")
+ elif isinstance(
+ param, (TextParam, IntegerParam, FloatParam, SelectParam)
+ ):
+ if is_unlabeled:
+ unlabeled_parts.append(f" '${name}'")
+ else:
+ flag_parts.append(f" --{flag} '${name}'")
+
+ # 3. OUTPUT FLAGS
+ for flag, info in output_command_map.items():
+ if flag == "VIRTUAL_no_flag":
+ continue
+ if info.get("type") == "BASE_FILENAME":
+ if "directory" in flag.lower():
+ flag_parts.append(f" --{flag} 'new_output'")
+ else:
+ flag_parts.append(f" --{flag} 'new_'")
+ else:
+ flag_parts.append(f" --{flag} {info['filename']}")
+
+ final_exec_line = [executable_name]
+ final_exec_line.extend(flag_parts)
+ final_exec_line.extend(unlabeled_parts)
+ command_parts.extend(final_exec_line)
+ if not output_command_map:
+ command_parts[-1] += " > '$stdout_log'"
+ command_str = "\n".join(command_parts)
+
+ # 4. Tool object
+ tool = Tool(
+ name=f"OGS: {tool_name}",
+ id=f"ogs_{tool_name.lower()}",
+ version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@",
+ description=f"Galaxy wrapper for the OGS utility '{tool_name}'.",
+ executable=executable_name,
+ macros=["macros.xml", "test_macros.xml"],
+ profile="22.01",
+ version_command=f"{executable_name} --version",
+ command_override=[command_str],
+ )
+
+ inputs_tag = tool.inputs = Inputs()
+ for param in galaxy_inputs:
+ inputs_tag.append(param)
+
+ if output_command_map:
+ outputs_tag = tool.outputs = Outputs()
+ uses_base_filename = any(
+ info.get("type") == "BASE_FILENAME"
+ for info in output_command_map.values()
+ )
+
+ if uses_base_filename:
+ pattern = (
+ r"(?P.*)\.vtu"
+ if "VIRTUAL_no_flag" in output_command_map
+ else r"(?Pnew_.*)"
+ )
+ first_out_info = next(
+ info
+ for info in output_command_map.values()
+ if info.get("type") == "BASE_FILENAME"
+ )
+ target_fmt = first_out_info.get("format", "vtkxml")
+ collection = OutputCollection(
+ name="tool_outputs",
+ type="list",
+ label=f"Outputs from {tool_name}",
+ )
+ collection.append(
+ DiscoverDatasets(
+ pattern=pattern, format=target_fmt, visible=True
+ )
+ )
+ outputs_tag.append(collection)
+ else:
+ single_file_outputs = [
+ v
+ for v in output_command_map.values()
+ if v.get("type") == "FIXED_FILE"
+ ]
+ if len(single_file_outputs) == 1 and len(output_command_map) == 1:
+ flag, info = list(output_command_map.items())[0]
+ outputs_tag.append(
+ OutputData(
+ name=sanitize_name(f"output_{tool_name}"),
+ format=info["format"],
+ from_work_dir=info["filename"],
+ label=f"Output from {tool_name}",
+ )
+ )
+ else:
+ collection = OutputCollection(
+ name="tool_outputs",
+ type="list",
+ label=f"Outputs from {tool_name}",
+ )
+ collection.append(
+ DiscoverDatasets(
+ pattern=r"output_.*\.(vtu|msh|asc|gml|xml)",
+ format="data",
+ visible=True,
+ )
+ )
+ outputs_tag.append(collection)
+ else:
+ outputs_tag = tool.outputs = Outputs()
+ outputs_tag.append(
+ OutputData(
+ name="stdout_log",
+ format="txt",
+ label=f"Output Log from {tool_name}",
+ )
+ )
+
+ tests_section = Tests()
+ tests_section.append(Expand(macro=f"{tool_name.lower()}_test"))
+ tool.tests = tests_section
+ tool.help = (
+ f"This tool runs the **{tool_name}** utility from the OpenGeoSys suite."
+ )
+
+ # --- 5. XML
+ raw_xml_string = tool.export()
+ tool_xml_root = ET.fromstring(raw_xml_string)
+ inputs_node = tool_xml_root.find("inputs")
+
+ if inputs_node is not None:
+ for param in galaxy_inputs:
+ if getattr(param, "is_data_collection", False):
+ p_node = inputs_node.find(f"param[@argument='--{flag}']")
+ if p_node is not None:
+ p_node.set("type", "data_collection")
+ p_node.set("collection_type", "list")
+ if "multiple" in p_node.attrib:
+ del p_node.attrib["multiple"]
+
+ output_file_path = OUTPUT_DIR / f"{tool_name}.xml"
+ xml_str = ET.tostring(tool_xml_root, encoding="unicode")
+
+ def version_cdata_rewrite(match):
+ return f""
+
+ xml_str = re.sub(
+ r"(.*?)",
+ version_cdata_rewrite,
+ xml_str,
+ )
+
+ def command_cdata_rewrite(match):
+ content = (
+ match.group(1)
+ .strip()
+ .replace("<", "<")
+ .replace(">", ">")
+ .replace("&", "&")
+ )
+ return f""
+
+ xml_str = re.sub(
+ r"(.*?)",
+ command_cdata_rewrite,
+ xml_str,
+ flags=re.DOTALL,
+ )
+
+ with open(output_file_path, "w", encoding="utf-8") as f:
+ f.write('\n' + xml_str)
+ generated_count += 1
+
+ eprint(f"\nFinished. {generated_count} tool wrappers created.")
+
+
+def parse_diff_data(
+ diff_str: str, base_url: str, workdir: str, input_files: List[str]
+) -> List[Dict[str, str]]:
+ diff_files = []
+ seen_generated = set()
+ valid_exts = (
+ ".vtu",
+ ".gml",
+ ".bin",
+ ".asc",
+ ".pvtu",
+ ".msh",
+ ".smesh",
+ ".xdmf",
+ ".prj",
+ ".xml",
+ ".png",
+ ".geo",
+ )
+
+ clean_lines = [line.split("#")[0].strip() for line in diff_str.strip().split("\n")]
+ tokens = (" ".join(clean_lines)).split()
+
+ i = 0
+ while i < len(tokens):
+ t1 = tokens[i]
+ if any(t1.lower().endswith(ext) for ext in valid_exts):
+ if i + 1 < len(tokens) and any(
+ tokens[i + 1].lower().endswith(ext) for ext in valid_exts
+ ):
+ t2 = tokens[i + 1]
+
+ if t2 not in input_files and t2 not in seen_generated:
+ ref_url = (
+ f"{base_url}/{workdir}/{t1}".replace("", workdir)
+ if workdir
+ else f"{base_url}/{t1}"
+ )
+ diff_files.append(
+ {
+ "reference": ref_url,
+ "generated": t2,
+ "ftype": t2.split(".")[-1],
+ }
+ )
+ seen_generated.add(t2)
+ i += 2
+ continue
+ i += 1
+ return diff_files
+
+
+def get_dummy_value(param, tool_name, all_params=None):
+ URL_AREHS_TEST = "https://gitlab.opengeosys.org/kristofkessler/ogs/-/raw/ebd40a71bacd951b90b64e2e42fb8d11528bde39/Tests/Data/Utils/VoxelGridFromLayers/AREHS_test.vtu"
+ URL_AREHS_FAULT = "https://gitlab.opengeosys.org/kristofkessler/ogs/-/raw/ebd40a71bacd951b90b64e2e42fb8d11528bde39/Tests/Data/Utils/VoxelGridFromLayers/AREHS_fault.vtu"
+ URL_PVD_MAIN = "https://gitlab.opengeosys.org/ogs/ogs/-/raw/master/Tests/Data/HydroMechanics/IdealGas/flow_pressure_boundary/flow_pressure_boundary.pvd"
+ URL_VTK_TEST = "https://gitlab.opengeosys.org/ogs/ogs/-/raw/master/Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer17.vtu"
+
+ special_tool_files = {
+ "ComputeNodeAreasFromSurfaceMesh": "computeNodeAreasFromSurfaceMesh_test_data",
+ }
+ if isinstance(param, DataParam):
+ ext = getattr(param, "ogs_ext", "vtu").lower()
+ if tool_name in special_tool_files:
+ return f"{special_tool_files[tool_name]}.{ext}"
+ if getattr(param, "is_pvd", False):
+ return URL_PVD_MAIN
+ if (param.name == "fault" or "fault" in param.label.lower()) and ext in [
+ "vtu",
+ "vtk",
+ "msh",
+ ]:
+ return URL_AREHS_FAULT
+ if ext in ["vtu", "msh"]:
+ return URL_AREHS_TEST
+ if ext in ["vtk"]:
+ return URL_VTK_TEST
+ return f"test.{ext}"
+
+ if isinstance(param, SelectParam):
+ opts = getattr(param, "options_dict", {})
+ return list(opts.keys())[0] if opts else "value"
+ if isinstance(param, (IntegerParam, FloatParam)):
+ return "1" if isinstance(param, IntegerParam) else "1.0"
+ if isinstance(param, BooleanParam):
+ return "true"
+ return "dummy_text"
+
+
+def generate_tests():
+ eprint("--- Generating Final Unified Test Macros ---")
+ tests_cmake_url = f"{RAW_URL_ROOT}/{UTILS_PATH}/Tests.cmake"
+ RAW_GITLAB_TEST_DATA_URL = (
+ "https://gitlab.opengeosys.org/ogs/ogs/-/raw/master/Tests/Data"
+ )
+ RAW_GITLAB_PROJECT_ROOT_URL = "https://gitlab.opengeosys.org/ogs/ogs/-/raw/master"
+ repo_b_index = get_repo_b_file_index()
+
+ all_tools_data = discover_tools()
+ tools_map_lower = {
+ tool["name"].lower(): tool
+ for tool in all_tools_data
+ if tool["name"].lower() not in EXCLUDED_TOOLS
+ }
+ tool_tests_accumulator = {tool_name: [] for tool_name in tools_map_lower.keys()}
+
+ cmake_content = fetch_url_content(tests_cmake_url)
+ if not cmake_content:
+ eprint("ERROR: Could not fetch Tests.cmake from GitLab.")
+ return
+ addtest_pattern = re.compile(r"AddTest\s*\((.*?)\s*\)(?!\s*PROPERTIES)", re.DOTALL)
+
+ STOP_KEYWORDS = [
+ "TESTER",
+ "RUNTIME",
+ "PROPERTIES",
+ "DEPENDS",
+ "REQUIREMENTS",
+ "DIFF_DATA",
+ "WRAPPER",
+ "WRAPPER_ARGS",
+ ]
+
+ for match in addtest_pattern.finditer(cmake_content):
+ test_block = match.group(1)
+
+ exec_match = re.search(r"EXECUTABLE\s+([^\s\)]+)", test_block)
+ matched_tool = None
+ if exec_match and exec_match.group(1).lower() in tools_map_lower:
+ matched_tool = exec_match.group(1).lower()
+ else:
+ for t in tools_map_lower.keys():
+ if re.search(
+ r"(?:[\s/_-]|^)" + re.escape(t) + r"(?:[\s/_-]|$)",
+ test_block.lower(),
+ ):
+ matched_tool = t
+ break
+
+ if not matched_tool or matched_tool.lower() in EXCLUDED_TOOLS:
+ continue
+
+ tool_data = tools_map_lower[matched_tool]
+ g_inputs_temp, _ = process_parameters(tool_data["parameters"])
+ has_complex_input = any(
+ getattr(p, "is_pvd", False) or getattr(p, "is_file_list", False)
+ for p in g_inputs_temp
+ )
+
+ if has_complex_input:
+ eprint(
+ f" -> Marking {matched_tool} for Dummy-Test (Complex PVD/List Input)."
+ )
+ continue
+
+ if tool_tests_accumulator[matched_tool]:
+ continue
+ galaxy_inputs, output_map = process_parameters(tool_data["parameters"])
+ all_inputs_map = {p.name: p for p in galaxy_inputs}
+
+ flag_map = {}
+ unlabeled_p = next(
+ (p for p in galaxy_inputs if getattr(p, "is_unlabeled", False)), None
+ )
+ for p in galaxy_inputs:
+ if hasattr(p, "original_long_flag") and p.original_long_flag:
+ flag_map[f"--{p.original_long_flag}"] = p
+ if hasattr(p, "original_short_flag") and p.original_short_flag:
+ flag_map[f"-{p.original_short_flag}"] = p
+
+ path_match = re.search(r"PATH\s+([^\s\)]+)", test_block)
+ p_rep = path_match.group(1).strip() if path_match else ""
+ wd_match = re.search(
+ r"WORKING_DIRECTORY\s+\$\{Data_SOURCE_DIR\}/([^\s\)]+)", test_block
+ )
+ wd_sub = wd_match.group(1).replace("", p_rep).strip() if wd_match else ""
+
+ # ARGUMENT PARSING
+ params_in_test = {}
+ input_files_in_this_test = []
+ args_match = re.search(r"EXECUTABLE_ARGS\s+(.*)", test_block, re.DOTALL)
+ if args_match:
+ raw_args = args_match.group(1).split(")")[0].strip().replace("\n", " ")
+ norm_args = raw_args.replace(" -- ", " --SEP-- ")
+ try:
+ args_list = shlex.split(norm_args)
+ except:
+ args_list = norm_args.split()
+
+ i = 0
+ while i < len(args_list):
+ arg = args_list[i]
+ if arg.upper() in STOP_KEYWORDS:
+ break
+
+ if arg in flag_map:
+ p = flag_map[arg]
+ i += 1
+ if isinstance(p, BooleanParam):
+ params_in_test[p.name] = "true"
+ else:
+ collected_vals = []
+ while (
+ i < len(args_list)
+ and not args_list[i].startswith("-")
+ and args_list[i].upper() not in STOP_KEYWORDS
+ ):
+ val = (
+ args_list[i]
+ .replace("", p_rep)
+ .replace("${Data_BINARY_DIR}/", "")
+ .split("/")[-1]
+ )
+ if val:
+ collected_vals.append(val)
+ i += 1
+ if collected_vals:
+ params_in_test[p.name] = ",".join(collected_vals)
+ continue
+
+ elif unlabeled_p and not arg.startswith("-"):
+ current_unlabeled = []
+ if unlabeled_p.name in params_in_test:
+ current_unlabeled = params_in_test[unlabeled_p.name].split(",")
+
+ while (
+ i < len(args_list)
+ and not args_list[i].startswith("-")
+ and args_list[i].upper() not in STOP_KEYWORDS
+ ):
+ val = args_list[i].replace("", p_rep).split("/")[-1]
+ if any(
+ val.lower().endswith(ext)
+ for ext in [
+ ".pvd",
+ ".vtu",
+ ".msh",
+ ".gml",
+ ".asc",
+ ".nc",
+ ".xyz",
+ ]
+ ):
+ current_unlabeled.append(val)
+ i += 1
+ if current_unlabeled:
+ params_in_test[unlabeled_p.name] = ",".join(current_unlabeled)
+ continue
+
+ i += 1
+
+ # XML generation
+ test_case = ET.Element("test")
+ test_is_valid = True
+ test_params_xml = []
+
+ for p_name, p_val in params_in_test.items():
+ p_obj = all_inputs_map.get(p_name)
+ if not p_obj:
+ continue
+
+ val_clean = (
+ str(p_val)
+ .replace("", p_rep)
+ .replace("${Data_BINARY_DIR}/", "")
+ .replace("${Data_SOURCE_DIR}/", "")
+ .lstrip("/")
+ )
+
+ # PVD
+ if getattr(p_obj, "is_pvd", False):
+ pvd_members = [
+ v
+ for v in re.findall(r"([^\s/]+\.vt[ui])", test_block)
+ if not v.endswith(".pvd")
+ ]
+ if pvd_members:
+ p_pvd_name = f"{p_name}_pvd_data"
+ coll_param = ET.Element("param", {"name": p_pvd_name})
+ coll_wrapper = ET.SubElement(
+ coll_param, "collection", {"type": "list"}
+ )
+
+ for v in sorted(set(pvd_members)):
+ url = (
+ f"{RAW_GITLAB_TEST_DATA_URL}/{wd_sub}/{v}"
+ if wd_sub
+ else f"{RAW_GITLAB_PROJECT_ROOT_URL}/{v}"
+ )
+ ET.SubElement(
+ coll_wrapper,
+ "element",
+ {"name": v, "value": v, "location": url, "ftype": "vtkxml"},
+ )
+ test_params_xml.append(coll_param)
+
+ # Collections / INPUT_FILE_LIST
+ if getattr(p_obj, "is_data_collection", False):
+ files_to_process = val_clean.split(",")
+ coll_param = ET.Element("param", {"name": p_name})
+ coll_wrapper = ET.SubElement(coll_param, "collection", {"type": "list"})
+
+ for f_path in files_to_process:
+ f_name = f_path.split("/")[-1]
+ url = (
+ f"{RAW_GITLAB_TEST_DATA_URL}/{wd_sub}/{f_name}"
+ if wd_sub
+ else f"{RAW_GITLAB_PROJECT_ROOT_URL}/{f_name}"
+ )
+
+ if not url_exists(url):
+ search_name = f_name if "." in f_name else f"{f_name}.vtu"
+ if search_name in repo_b_index:
+ url = f"{REPO_B_RAW}/{repo_b_index[search_name]}"
+ f_name = search_name
+ else:
+ test_is_valid = False
+ break
+
+ ET.SubElement(
+ coll_wrapper,
+ "element",
+ {
+ "name": f_name,
+ "value": f_name,
+ "location": url,
+ "ftype": p_obj.format.split(",")[0],
+ },
+ )
+
+ if test_is_valid:
+ test_params_xml.append(coll_param)
+
+ # 3. single parameter
+ else:
+ attrs = {"name": p_name}
+ if isinstance(p_obj, DataParam):
+ f_name = val_clean.split("/")[-1]
+ url = (
+ f"{RAW_GITLAB_TEST_DATA_URL}/{wd_sub}/{f_name}"
+ if wd_sub
+ else f"{RAW_GITLAB_PROJECT_ROOT_URL}/{f_name}"
+ )
+ if not url_exists(url):
+ search_name = f_name if "." in f_name else f"{f_name}.vtu"
+ if search_name in repo_b_index:
+ url = f"{REPO_B_RAW}/{repo_b_index[search_name]}"
+ f_name = search_name
+ else:
+ test_is_valid = False
+ break
+ attrs.update(
+ {
+ "value": f_name,
+ "location": url,
+ "ftype": p_obj.format.split(",")[0],
+ }
+ )
+ else:
+ is_base_filename_param = any(
+ sanitize_name(flag) == p_name
+ and info.get("type") == "BASE_FILENAME"
+ for flag, info in output_map.items()
+ )
+ attrs["value"] = (
+ "new_" if is_base_filename_param else val_clean.split("/")[-1]
+ )
+
+ test_params_xml.append(ET.Element("param", attrs))
+
+ if not test_is_valid:
+ break
+
+ if not test_is_valid:
+ continue
+
+ for elem in test_params_xml:
+ val = elem.get("value")
+ if val and val.startswith("${") and val.endswith("}"):
+ p_name = elem.get("name")
+ p_obj = all_inputs_map.get(p_name)
+ if p_obj:
+ new_val = get_dummy_value(
+ p_obj, matched_tool, all_params=galaxy_inputs
+ )
+ elem.set("value", str(new_val))
+
+ for xml_elem in test_params_xml:
+ test_case.append(xml_elem)
+
+ # --- OUTPUT LOGIK ---
+ dm = re.search(r"DIFF_DATA\s+(.*?)(?=\s*\)|$)", test_block, re.DOTALL)
+ output_added = False
+
+ if dm:
+ diff_files = parse_diff_data(
+ dm.group(1).strip(),
+ RAW_GITLAB_TEST_DATA_URL,
+ wd_sub,
+ input_files_in_this_test,
+ )
+ if diff_files:
+ diff_files.sort(key=lambda x: x["generated"])
+ if len(output_map) > 1 or any(
+ info.get("type") == "BASE_FILENAME" for info in output_map.values()
+ ):
+ coll = ET.SubElement(
+ test_case,
+ "output_collection",
+ {"name": "tool_outputs", "type": "list"},
+ )
+ for df in diff_files:
+ e = ET.SubElement(coll, "element", {"name": df["generated"]})
+ ET.SubElement(
+ ET.SubElement(e, "assert_contents"),
+ "has_size",
+ {"min": "100"},
+ )
+ output_added = True
+ elif len(diff_files) == 1:
+ out_name = sanitize_name(f"output_{matched_tool}")
+ out_elem = ET.SubElement(test_case, "output", {"name": out_name})
+ ET.SubElement(
+ ET.SubElement(out_elem, "assert_contents"),
+ "has_size",
+ {"min": "100"},
+ )
+ output_added = True
+
+ # Fallback
+ if not output_added and output_map:
+ if len(output_map) > 1 or any(
+ info.get("type") == "BASE_FILENAME" for info in output_map.values()
+ ):
+ ET.SubElement(
+ test_case,
+ "output_collection",
+ {"name": "tool_outputs", "type": "list"},
+ )
+ else:
+ out_name = sanitize_name(f"output_{matched_tool}")
+ out_elem = ET.SubElement(test_case, "output", {"name": out_name})
+ ET.SubElement(
+ ET.SubElement(out_elem, "assert_contents"), "has_size", {"min": "1"}
+ )
+
+ tool_tests_accumulator[matched_tool].append(test_case)
+
+ # Build Macros
+ macros_root = ET.Element("macros")
+ for t_name, cases in tool_tests_accumulator.items():
+ macro_xml = ET.SubElement(macros_root, "xml", {"name": f"{t_name}_test"})
+
+ if not cases:
+ fallback_test = ET.SubElement(macro_xml, "test")
+ tool_data = tools_map_lower[t_name]
+ g_inputs, g_outputs = process_parameters(tool_data["parameters"])
+
+ for p in g_inputs:
+ is_data_coll = getattr(p, "is_data_collection", False)
+
+ if is_data_coll:
+ if getattr(p, "is_pvd_element", False):
+ urls = [
+ "https://gitlab.opengeosys.org/ogs/ogs/-/raw/master/Tests/Data/HydroMechanics/IdealGas/flow_pressure_boundary/flow_pressure_boundary_ts_0_t_0.000000.vtu",
+ "https://gitlab.opengeosys.org/ogs/ogs/-/raw/master/Tests/Data/HydroMechanics/IdealGas/flow_pressure_boundary/flow_pressure_boundary_ts_100_t_4000.000000.vtu",
+ ]
+ elif getattr(p, "is_file_list", False) or p.name == "raster_list":
+ urls = [
+ "https://gitlab.opengeosys.org/ogs/ogs/-/raw/master/Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer0.vtu",
+ "https://gitlab.opengeosys.org/ogs/ogs/-/raw/master/Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer15.vtu",
+ ]
+ else:
+ urls = [get_dummy_value(p, t_name, all_params=g_inputs)]
+
+ coll_node = ET.SubElement(fallback_test, "param", {"name": p.name})
+ coll_wrapper = ET.SubElement(
+ coll_node, "collection", {"type": "list"}
+ )
+ for url in urls:
+ filename = url.split("/")[-1]
+ ET.SubElement(
+ coll_wrapper,
+ "element",
+ {
+ "name": filename,
+ "value": filename,
+ "location": url,
+ "ftype": "vtkxml",
+ },
+ )
+ continue
+
+ # Standard parameter
+ is_mandatory = getattr(p, "optional", True) is False
+ if (
+ is_mandatory
+ or isinstance(p, DataParam)
+ or isinstance(p, SelectParam)
+ ):
+ val_str = get_dummy_value(p, t_name, all_params=g_inputs)
+ is_ext = str(val_str).startswith("http")
+ clean_val = val_str.split("/")[-1] if is_ext else val_str
+ attrs = {"name": p.name, "value": clean_val}
+ if isinstance(p, DataParam):
+ attrs["ftype"] = p.format.split(",")[0]
+ if is_ext:
+ attrs["location"] = val_str
+ ET.SubElement(fallback_test, "param", attrs)
+
+ # Outputs
+ if g_outputs:
+ if len(g_outputs) > 1 or any(
+ info.get("type") == "BASE_FILENAME" for info in g_outputs.values()
+ ):
+ ET.SubElement(
+ fallback_test,
+ "output_collection",
+ {"name": "tool_outputs", "type": "list"},
+ )
+ else:
+ out_n = sanitize_name(f"output_{t_name}")
+ out_tag = ET.SubElement(fallback_test, "output", {"name": out_n})
+ ET.SubElement(
+ ET.SubElement(out_tag, "assert_contents"),
+ "has_size",
+ {"min": "1"},
+ )
+
+ else:
+ out_tag = ET.SubElement(fallback_test, "output", {"name": "stdout_log"})
+ ac = ET.SubElement(out_tag, "assert_contents")
+ ET.SubElement(ac, "has_size", {"min": "1"})
+ else:
+ for case in cases:
+ macro_xml.append(case)
+
+ tree = ET.ElementTree(macros_root)
+ ET.indent(tree, space=" ")
+ with open("test_macros.xml", "wb") as f:
+ f.write(b'\n')
+ tree.write(f, encoding="utf-8", xml_declaration=False)
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description="Galaxy XML Wrapper Generator for OGS Utilities"
+ )
+ parser.add_argument(
+ "--generate-tools",
+ action="store_true",
+ help="Generate individual tool XML wrappers (default action).",
+ )
+ parser.add_argument(
+ "--generate-tests",
+ action="store_true",
+ help="Generate a single test_macros.xml file for all tools.",
+ )
+
+ args = parser.parse_args()
+
+ if args.generate_tests:
+ generate_tests()
+ else:
+ generate_tools(Path("/home/berntm/projects/gitlab.opengeosys.org/ogs"))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tools/ogsAutowrap/generateGeometry.xml b/tools/ogsAutowrap/generateGeometry.xml
new file mode 100644
index 00000000..93f43e8c
--- /dev/null
+++ b/tools/ogsAutowrap/generateGeometry.xml
@@ -0,0 +1,46 @@
+
+
+ Galaxy wrapper for the OGS utility 'generateGeometry'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **generateGeometry** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/generateMatPropsFromMatID.xml b/tools/ogsAutowrap/generateMatPropsFromMatID.xml
new file mode 100644
index 00000000..2dad0d6e
--- /dev/null
+++ b/tools/ogsAutowrap/generateMatPropsFromMatID.xml
@@ -0,0 +1,28 @@
+
+
+ Galaxy wrapper for the OGS utility 'generateMatPropsFromMatID'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **generateMatPropsFromMatID** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/generateStructuredMesh.xml b/tools/ogsAutowrap/generateStructuredMesh.xml
new file mode 100644
index 00000000..1df2dc97
--- /dev/null
+++ b/tools/ogsAutowrap/generateStructuredMesh.xml
@@ -0,0 +1,64 @@
+
+
+ Galaxy wrapper for the OGS utility 'generateStructuredMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **generateStructuredMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/geometryToGmshGeo.xml b/tools/ogsAutowrap/geometryToGmshGeo.xml
new file mode 100644
index 00000000..32afb449
--- /dev/null
+++ b/tools/ogsAutowrap/geometryToGmshGeo.xml
@@ -0,0 +1,45 @@
+
+
+ Galaxy wrapper for the OGS utility 'geometryToGmshGeo'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **geometryToGmshGeo** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/identifySubdomains.xml b/tools/ogsAutowrap/identifySubdomains.xml
new file mode 100644
index 00000000..ec84d5f3
--- /dev/null
+++ b/tools/ogsAutowrap/identifySubdomains.xml
@@ -0,0 +1,41 @@
+
+
+ Galaxy wrapper for the OGS utility 'identifySubdomains'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **identifySubdomains** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/ipDataToPointCloud.xml b/tools/ogsAutowrap/ipDataToPointCloud.xml
new file mode 100644
index 00000000..53dc8185
--- /dev/null
+++ b/tools/ogsAutowrap/ipDataToPointCloud.xml
@@ -0,0 +1,27 @@
+
+
+ Galaxy wrapper for the OGS utility 'ipDataToPointCloud'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **ipDataToPointCloud** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/macros.xml b/tools/ogsAutowrap/macros.xml
new file mode 100644
index 00000000..846c7858
--- /dev/null
+++ b/tools/ogsAutowrap/macros.xml
@@ -0,0 +1,26 @@
+
+
+
+ ogs
+
+
+ 6.5.7
+ 0
+
+
+
+ @misc{ogs,
+ author = {The OpenGeoSys Community},
+ title = {OpenGeoSys},
+ doi = {10.5281/zenodo.15496721},
+ url = {http://www.opengeosys.org},
+ note = {https://doi.org/10.5281/zenodo.15496721}
+ }
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/postLIE.xml b/tools/ogsAutowrap/postLIE.xml
new file mode 100644
index 00000000..d0ef8f38
--- /dev/null
+++ b/tools/ogsAutowrap/postLIE.xml
@@ -0,0 +1,33 @@
+
+
+ Galaxy wrapper for the OGS utility 'postLIE'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **postLIE** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/queryMesh.xml b/tools/ogsAutowrap/queryMesh.xml
new file mode 100644
index 00000000..5190ea15
--- /dev/null
+++ b/tools/ogsAutowrap/queryMesh.xml
@@ -0,0 +1,32 @@
+
+
+ Galaxy wrapper for the OGS utility 'queryMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+ '$stdout_log'
+]]>
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **queryMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/removeMeshElements.xml b/tools/ogsAutowrap/removeMeshElements.xml
new file mode 100644
index 00000000..9dfd46de
--- /dev/null
+++ b/tools/ogsAutowrap/removeMeshElements.xml
@@ -0,0 +1,54 @@
+
+
+ Galaxy wrapper for the OGS utility 'removeMeshElements'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **removeMeshElements** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/reviseMesh.xml b/tools/ogsAutowrap/reviseMesh.xml
new file mode 100644
index 00000000..8db29db6
--- /dev/null
+++ b/tools/ogsAutowrap/reviseMesh.xml
@@ -0,0 +1,29 @@
+
+
+ Galaxy wrapper for the OGS utility 'reviseMesh'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **reviseMesh** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/scaleProperty.xml b/tools/ogsAutowrap/scaleProperty.xml
new file mode 100644
index 00000000..e902056d
--- /dev/null
+++ b/tools/ogsAutowrap/scaleProperty.xml
@@ -0,0 +1,35 @@
+
+
+ Galaxy wrapper for the OGS utility 'scaleProperty'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **scaleProperty** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/swapNodeCoordinateAxes.xml b/tools/ogsAutowrap/swapNodeCoordinateAxes.xml
new file mode 100644
index 00000000..0d555a4d
--- /dev/null
+++ b/tools/ogsAutowrap/swapNodeCoordinateAxes.xml
@@ -0,0 +1,29 @@
+
+
+ Galaxy wrapper for the OGS utility 'swapNodeCoordinateAxes'.
+
+ macros.xml
+ test_macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This tool runs the **swapNodeCoordinateAxes** utility from the OpenGeoSys suite.
+
+
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.asc b/tools/ogsAutowrap/test-data/test.asc
new file mode 100644
index 00000000..53855cda
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.asc
@@ -0,0 +1,45 @@
+ncols 20
+nrows 39
+xllcorner 406775
+yllcorner 5.61523e+06
+cellsize 904.674
+NODATA_value -9999
+-9999 -9999 -9999 1.9 3 4.2 9.7 10.3 14.3 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999
+-9999 -9999 -9999 2.8 3.3 6.3 10.5 9.9 15.7 24.5 30.4 41.8 43.4 39 16.1 13.6 11.9 17.2 14.9 14.1
+-9999 -9999 -9999 2.3 2.6 3.1 8.6 10.9 14.6 28.7 55.5 37.8 30.5 39.3 19.8 14.5 17.6 21.6 13.4 12.9
+-9999 -9999 -9999 2.9 3.8 5.3 5.6 7.5 20 22.4 36.4 24.1 15.1 20 19 16.9 29.7 31.7 26.8 23.5
+-9999 -9999 -9999 2.8 3.6 10.8 9.2 9.4 21.1 32.3 38.6 22.2 36.6 37.8 24.6 12.5 26.4 29.2 26.8 31.8
+-9999 -9999 -9999 3.4 4.5 5.9 11.3 16.3 22.6 27.1 32.5 30.6 34.4 27.7 36.4 17.3 17.1 21.8 27.4 36.1
+-9999 -9999 -9999 3.3 4.5 5.2 7.7 14.2 16.2 28 16.6 25.4 26.1 30.5 35.8 40.4 21.4 24.1 30.8 46.6
+-9999 -9999 -9999 3.4 6.1 6.3 8.9 9.7 19 19.5 19.1 15.6 34.4 25.6 28 29.7 24 28.1 33.7 49.2
+-9999 -9999 6.2 8.1 9.4 14.5 12.1 18.8 16 29.4 24.7 22.3 26.9 25.6 31.1 31.1 28.4 31.6 27.8 36.5
+-9999 -9999 4 5 7.3 17.7 17.1 17.3 18.4 25.2 24.1 21.9 33.7 42.3 33.3 32.9 28.3 26.2 26.8 -9999
+-9999 -9999 4.2 4.7 4.9 12.4 13.7 16.4 14.7 24.4 24.4 24.6 34.4 43.9 40.8 33 29.5 18.4 39.9 -9999
+-9999 -9999 3.5 5.4 7.1 14.2 15.2 16.9 16 16.7 16.9 32.9 40.3 42.1 33.7 26.5 22.6 21 29.7 -9999
+-9999 -9999 3.6 8.5 13.8 17 16.3 17.3 13.5 18.3 22.8 40.7 30.7 30.2 28.6 24.9 15.4 17.6 19.6 -9999
+-9999 -9999 3.4 4.9 9.5 10.4 12.3 15.1 17.6 17.1 44.2 35.3 38.7 25.4 20.4 24 19.7 18.5 13.4 -9999
+-9999 -9999 3.5 5.3 7.1 10.2 12 27.4 32.2 24.2 29.5 35 31.6 29.3 26.4 17.9 24.1 11.7 9.2 -9999
+-9999 -9999 3.4 4 6.3 10.7 15.9 18.4 27.1 36.9 27.5 22.8 27.1 23.8 21.5 24.3 10.8 10.6 8.5 -9999
+-9999 -9999 4.3 4.1 6.4 7.5 13.4 19.9 27.1 37.8 24.8 19.6 21.1 30 18.8 14.1 11.1 6.4 8 -9999
+-9999 -9999 3.6 7 6.8 8.9 19 29.2 25.1 27.5 19.3 19.8 23.1 27.5 27.5 11.5 11.1 6.6 3.7 -9999
+-9999 -9999 3.7 6 10.1 16.6 20.8 33.9 21 23.9 16.8 20.4 23.8 22.7 12.8 8.2 7.4 4.3 3.8 -9999
+-9999 -9999 4.7 6.3 9.9 14.3 25.3 25.2 32.4 41 37.7 24.7 26.6 15.7 8.5 5.3 4.2 4.2 3.1 -9999
+-9999 5.5 6.4 7.9 10 18.5 21.2 28.5 26.6 30.5 21.1 32.8 13.8 7.2 7.2 4.6 3.4 2.9 1.7 -9999
+-9999 6.5 7.9 11.7 15.3 19.8 19 36.6 26.1 24.8 22.7 28.4 10.9 8 2.4 2.5 1.8 1.4 -9999 -9999
+-9999 6.6 8 11.5 18.3 26.4 23.5 31.6 35 22.4 20.9 27.5 13.5 6.4 3 1.1 0.7 0.8 -9999 -9999
+-9999 7.8 8.8 12.3 18.1 32.4 36.2 37.1 41 31.6 28 31.9 10.4 8.6 5 2.7 0.6 0.3 -9999 -9999
+-9999 12 11.1 15.3 17.8 29.2 34.8 27 35.7 26.2 29.1 25.7 15.2 8.2 7 2.8 1.4 0.4 -9999 -9999
+-9999 13.5 16.5 14.8 20.3 29.8 31 22 28.8 26.7 30.5 19.9 12.4 4.2 2.5 2.3 1.2 0.6 -9999 -9999
+-9999 13.1 16.1 22.3 24.3 36.8 32 29.8 24.9 27.4 26.9 10.2 8.3 6.3 2.4 1.2 0.9 0.4 -9999 -9999
+-9999 13.7 16.1 22 26.8 38.6 30.8 30.1 36.3 28 33 18.8 10.5 4.1 2.9 1.6 0.8 0.4 -9999 -9999
+-9999 18.2 19.4 24.3 26 31.5 32.3 24.6 36.1 29.6 27.9 22.1 11.5 6 2.9 1.4 0.4 0.2 -9999 -9999
+-9999 16.6 18.5 25.8 31.1 31.5 31.8 29.4 31.4 25.3 23.4 12.6 9.8 5.4 1.3 0.8 0.6 0.2 -9999 -9999
+-9999 18 26.7 33.4 32.5 27.8 25.7 28.7 32 26.3 14.9 9.9 6.5 3.4 2.1 0.5 0.4 0.1 -9999 -9999
+-9999 30.5 35.7 41.8 35.1 23.6 25.5 25.9 23 18.6 25.6 10.5 4.7 2.4 2 1.2 0.4 0.3 -9999 -9999
+27.9 35.8 35.5 31 29.2 28.1 31.9 33.7 26.6 17.2 13.4 6.8 3.2 3.2 1.9 1.4 0.9 0.7 -9999 -9999
+24.3 30.2 35 30.7 31.5 24.9 26.7 22.7 22.5 8 4.5 4.5 2.8 1 0.5 0.8 0.7 -9999 -9999 -9999
+32.1 32.8 38.6 33.4 32.1 27.8 34.8 24.7 16.1 16.4 4.8 4.5 2.3 1 0.7 0.7 0.6 -9999 -9999 -9999
+34.9 34.2 25.7 25.9 24.2 20.5 24.7 18.2 15.7 17.5 14.7 4.9 1.6 1.2 0.7 0.6 1.1 -9999 -9999 -9999
+31.6 27.7 23.7 24 22.1 21.3 24.7 11.1 11.3 9 10.6 6.1 1.7 1.3 0.9 1.8 1.6 -9999 -9999 -9999
+30.2 23.1 29.4 26.7 26.5 22.9 20.4 10.9 6.2 5.8 6.3 5.9 2.7 1.3 1.3 1.4 1.1 -9999 -9999 -9999
+-9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 5.4 6.8 6.1 5.9 2.8 1.4 1.6 1.4 1.7 -9999 -9999 -9999
diff --git a/tools/ogsAutowrap/test-data/test.bin b/tools/ogsAutowrap/test-data/test.bin
new file mode 100644
index 00000000..0b38b2f3
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.bin
@@ -0,0 +1 @@
+head -c 100 /dev/urandom
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.fem b/tools/ogsAutowrap/test-data/test.fem
new file mode 100644
index 00000000..fb700a54
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.fem
@@ -0,0 +1,832 @@
+PROBLEM:
+CLASS (v.7.007.14984)
+ 2 1 0 3 1 0 8 8 0 0
+DIMENS
+ 12 2 8 1 0 0 0 0 0 2 0 0 1 0 0 0 0
+SCALE
+ 3.44328703703704e-03, 4.40740740740741e+00, 1.00000000000000e+00, 1.00000000000000e+00,-1.98821548821549e+00,-9.96969696969697e+00
+NODE
+ 4 5 6 3 10 11 12 9
+ 3 6 1 2 9 12 7 8
+COOR
+ 2.74410774410774e+00, 2.18855218855219e+00, 3.89730639730640e+00, 5.60606060606061e+00, 6.19528619528620e+00, 4.46969696969697e+00,
+ 1.30808080808081e+01, 1.09595959595960e+01, 1.05387205387205e+01, 1.01178451178451e+01, 1.24074074074074e+01, 1.27441077441077e+01,
+ELEV_I
+ 0.00000000000000e+00 1-6
+2
+ -1.00000000000000e+01 1-6
+GK_COOR
+1.98821548821549,9.96969696969697
+EXTENTS
+ 1.98821548821549e+00, 9.96969696969697e+00, 6.39562289562290e+00, 1.32289562289562e+01,
+ 0.00000000000000e+00, 0.00000000000000e+00, 3.56000000000000e+04, 2.84800000000000e+04,
+FLOW_I_BC
+INIT_I_FLOW
+ 0.00000000000000e+00 1-12
+MAT_I_FLOW
+101 1.000000e+00 "K_xx"
+ 1.000000e+00 1 2
+103 1.000000e+00 "K_yy"
+ 1.000000e+00 1 2
+105 1.000000e+00 "K_zz"
+ 1.000000e+00 1 2
+107 0.000000e+00 "In/outflow on top/bottom"
+ 0.000000e+00 1 2
+109 0.000000e+00 "Density ratio"
+ 0.000000e+00 1 2
+110 2.000000e-01 "Drain-/fillable porosity"
+ 2.000000e-01 1 2
+112 1.000000e-04 "Specific storage (compressibility)"
+ 1.000000e-04 1 2
+113 0.000000e+00 "Source/sink (fluid)"
+ 0.000000e+00 1 2
+114 0.000000e+00 "In-transfer rate (fluid)"
+ 0.000000e+00 1 2
+115 0.000000e+00 "Out-transfer rate (fluid)"
+ 0.000000e+00 1 2
+134 0.000000e+00 "Phi"
+ 0.000000e+00 1 2
+135 0.000000e+00 "Psi"
+ 0.000000e+00 1 2
+136 0.000000e+00 "Theta"
+ 0.000000e+00 1 2
+TINI
+0
+STEPS2
+0,0.001,365
+GOBS
+GRAVITY
+ 0 0 -1
+PROJGRAVITY
+-1 0
+ERROR_NORM
+2
+PHYSICS
+1,0,0,1,1,0,1,12, 1.010000e-03,0, 1.000000e-03,0,0,0,1,0
+OPTIONS
+ SkipMeshFill=false
+ SkipMeshDraw=false
+ BackingStore=false
+
+ OpaqueFringeMode=false
+ LegendViewMode=false
+ VelocityApproximationType=0
+ EquationSolverType=12
+ IterSymmType=0
+ IterNonsymmType=4
+ DirectSolverType=1
+ PreconditionSymmType=0
+ MaxNumbOrthogonal=5
+ ReorderingMethod=1
+ RecordCPU=false
+ HideVelocity=false
+ VelocityType=0
+ GeoCS=
+ SubdivisionCurvedEdges=32
+ ShowOverview=true
+ ShowMeshWindow=true
+ TimeUnit=0
+ SpatialIndexing=false
+ MinimalSliceDistance=0.1
+ UseUnsmoothVelocityField=false
+ UnsatFractureMode=1
+ ComputeIterativeSolverResiduals=0
+ SkipOutputSteps=1
+ UseAsComputationalSteps=false
+ UseAsOutputSteps=false
+ SmoothingIterations=10
+ SmoothingMethod=0
+ rho_0=999793
+SYMSOLV
+0
+0, 1.000000e-10
+200,300,500,1000,5000
+NONSYMSOLV
+4
+ 1.000000e-10
+200,300,500,1000,5000
+SOLVERDUMP
+ enabled=0, ascii=0, time=0, once=0
+
+SUPERMESH
+
+
+
+ 1 2.74410774410774 13.0808080808081
+ 2 6.1952861952862 12.4074074074074
+ 4 5.60606060606061 10.1178451178451
+ 8 2.18855218855219 10.959595959596
+
+
+ 3 3.8973063973064 10.5387205387205
+ 5 2.46632996632997 12.020202020202
+ 6 5.9006734006734 11.2626262626263
+ 7 4.46969696969697 12.7441077441077
+
+
+
+
+
+
+
+
+ 1 5 8 3 4 6 2 7
+
+
+
+
+EXPRDISTR
+
+
+
+
+ No_n
+
+
+CLIENT
+
+
+
+
+
+CLIENT
+
+
+
+
+ 0025802d022d4117ff
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Orientation Icon
+ Length Scale
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simulation Time
+ Length Scale
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Orientation Icon
+ Simulation Time
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+CLIENT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CLIENT
+
+
+
+
+
+
+END
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.gml b/tools/ogsAutowrap/test-data/test.gml
new file mode 100644
index 00000000..1697d041
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.gml
@@ -0,0 +1,10 @@
+
+
+
+
+ geometry
+
+
+
+
+
diff --git a/tools/ogsAutowrap/test-data/test.mesh b/tools/ogsAutowrap/test-data/test.mesh
new file mode 100644
index 00000000..b38a7a52
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.mesh
@@ -0,0 +1 @@
+# Mesh Dummy
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.msh b/tools/ogsAutowrap/test-data/test.msh
new file mode 100644
index 00000000..4b9ab89c
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.msh
@@ -0,0 +1,973 @@
+#FEM_MSH
+ $PCS_TYPE
+ NO_PCS
+ $NODES
+ 837
+0 2.00888344674797 .176776824513464 .241116676521799
+1 1.12499989847767 .176776824513464 1.12500008121785
+2 .499999999999993 -.707106723756844 .500000081217862
+3 1.3838835482703 -.707106723756844 -.383883323478192
+4 1.50888344674798 .883883548270308 -.258883404696063
+5 .624999898477672 .883883548270308 .624999999999992
+6 0 0 0
+7 .883883548270308 0 -.883883404696055
+8 2.50888344674797 -.53032989924338 .741116757739662
+9 1.62499989847766 -.53032989924338 1.62500016243572
+10 .999999999999987 -1.41421344751369 1.00000016243572
+11 1.88388354827029 -1.41421344751369 .11611675773967
+12 2.63388334522565 1.06066037278377 .866116676521791
+13 1.74999979695534 1.06066037278377 1.75000008121785
+14 2.13388334522565 1.76776709654062 .366116595303929
+15 1.24999979695534 1.76776709654062 1.24999999999998
+16 3.13388334522564 .353553649026928 1.36611675773965
+17 2.24999979695533 .353553649026928 2.25000016243571
+18 3.25888324370332 1.94454392105408 1.49111667652178
+19 2.37499969543301 1.94454392105408 2.37500008121784
+20 2.75888324370332 2.65165064481092 .99111659530392
+21 1.87499969543302 2.65165064481092 1.87499999999998
+22 3.75888324370331 1.23743719729724 1.99111675773965
+23 2.874999695433 1.23743719729724 2.8750001624357
+24 3.88388314218099 2.82842746932439 2.11611667652177
+25 2.99999959391068 2.82842746932439 3.00000008121783
+26 3.383883142181 3.53553419308123 1.61611659530391
+27 2.49999959391069 3.53553419308123 2.49999999999997
+28 4.38388314218098 2.12132074556754 2.61611675773964
+29 3.49999959391067 2.12132074556754 3.50000016243569
+30 2.89276699501828 .176776824513464 -.642766728174256
+31 2.26776709654061 -.707106723756844 -1.26776672817425
+32 2.39276699501829 .883883548270308 -1.14276680939212
+33 1.76776709654062 0 -1.76776680939211
+34 3.39276699501827 -.53032989924338 -.142766646956393
+35 2.7677670965406 -1.41421344751369 -.767766646956385
+36 3.51776689349595 1.06066037278377 -1.77667281742638E-02
+37 3.01776689349596 1.76776709654062 -.517766809392126
+38 4.01776689349595 .353553649026928 .482233353043598
+39 4.14276679197363 1.94454392105408 .607233271825728
+40 3.64276679197363 2.65165064481092 .107233190607865
+41 4.64276679197362 1.23743719729724 1.10723335304359
+42 4.7677666904513 2.82842746932439 1.23223327182572
+43 4.2677666904513 3.53553419308123 .732233190607857
+44 5.26776669045129 2.12132074556754 1.73223335304358
+45 3.77665054328859 .176776824513464 -1.52665013287031
+46 3.15165064481092 -.707106723756844 -2.1516501328703
+47 3.2766505432886 .883883548270308 -2.02665021408817
+48 2.65165064481092 0 -2.65165021408816
+49 4.27665054328858 -.53032989924338 -1.02665005165245
+50 3.65165064481091 -1.41421344751369 -1.65165005165244
+51 4.40165044176626 1.06066037278377 -.901650132870319
+52 3.90165044176627 1.76776709654062 -1.40165021408818
+53 4.90165044176625 .353553649026928 -.401650051652456
+54 5.02665034024393 1.94454392105408 -.276650132870327
+55 4.52665034024394 2.65165064481092 -.776650214088189
+56 5.52665034024393 1.23743719729724 .223349948347535
+57 5.65165023872161 2.82842746932439 .348349867129664
+58 5.15165023872161 3.53553419308123 -.151650214088198
+59 6.1516502387216 2.12132074556754 .848349948347527
+60 4.6605340915589 .176776824513464 -2.41053353756637
+61 4.03553419308123 -.707106723756844 -3.03553353756636
+62 4.1605340915589 .883883548270308 -2.91053361878423
+63 3.53553419308123 0 -3.53553361878422
+64 5.16053409155889 -.53032989924338 -1.9105334563485
+65 4.53553419308122 -1.41421344751369 -2.53553345634849
+66 5.28553399003657 1.06066037278377 -1.78553353756637
+67 4.78553399003658 1.76776709654062 -2.28553361878424
+68 5.78553399003656 .353553649026928 -1.28553345634851
+69 5.91053388851424 1.94454392105408 -1.16053353756638
+70 5.41053388851425 2.65165064481092 -1.66053361878424
+71 6.41053388851423 1.23743719729724 -.66053345634852
+72 6.53553378699191 2.82842746932439 -.53553353756639
+73 6.03553378699192 3.53553419308123 -1.03553361878425
+74 7.03553378699191 2.12132074556754 -3.55334563485275E-02
+75 4.50888304065866 3.7123110175947 2.74111667652177
+76 3.62499949238835 3.7123110175947 3.62500008121782
+77 4.00888304065867 4.41941774135154 2.2411165953039
+78 3.12499949238836 4.41941774135154 3.12499999999996
+79 5.00888304065865 3.00520429383785 3.24111675773963
+80 4.12499949238835 3.00520429383785 4.12500016243568
+81 5.13388293913633 4.596194565865 3.36611667652176
+82 4.24999939086602 4.596194565865 4.25000008121781
+83 4.63388293913634 5.30330128962185 2.8661165953039
+84 3.74999939086603 5.30330128962185 3.74999999999995
+85 5.63388293913633 3.88908784210816 3.86611675773962
+86 4.74999939086602 3.88908784210816 4.75000016243568
+87 5.75888283761401 5.48007811413531 3.99111667652175
+88 4.8749992893437 5.48007811413531 4.8750000812178
+89 5.25888283761401 6.18718483789216 3.49111659530389
+90 4.3749992893437 6.18718483789216 4.37499999999994
+91 6.258882837614 4.77297139037847 4.49111675773961
+92 5.37499928934369 4.77297139037847 5.37500016243567
+93 6.38388273609168 6.36396166240562 4.61611667652174
+94 5.49999918782137 6.36396166240562 5.5000000812178
+95 5.88388273609168 7.07106838616246 4.11611659530388
+96 4.99999918782138 7.07106838616246 4.99999999999993
+97 6.88388273609167 5.65685493864878 5.1161167577396
+98 5.99999918782136 5.65685493864878 6.00000016243566
+99 5.39276658892897 3.7123110175947 1.85723327182571
+100 4.89276658892898 4.41941774135154 1.35723319060785
+101 5.89276658892896 3.00520429383785 2.35723335304357
+102 6.01776648740664 4.596194565865 2.4822332718257
+103 5.51776648740665 5.30330128962185 1.98223319060784
+104 6.51776648740664 3.88908784210816 2.98223335304357
+105 6.64276638588431 5.48007811413531 3.10723327182569
+106 6.14276638588432 6.18718483789216 2.60723319060783
+107 7.14276638588431 4.77297139037847 3.60723335304356
+108 7.26776628436198 6.36396166240562 3.73223327182569
+109 6.76776628436199 7.07106838616246 3.23223319060782
+110 7.76776628436198 5.65685493864878 4.23223335304355
+111 6.27665013719928 3.7123110175947 .973349867129657
+112 5.77665013719928 4.41941774135154 .473349785911794
+113 6.77665013719927 3.00520429383785 1.47334994834752
+114 6.90165003567695 4.596194565865 1.59834986712965
+115 6.40165003567696 5.30330128962185 1.09834978591179
+116 7.40165003567694 3.88908784210816 2.09834994834751
+117 7.52664993415462 5.48007811413531 2.22334986712964
+118 7.02664993415463 6.18718483789216 1.72334978591178
+119 8.02664993415461 4.77297139037847 2.7233499483475
+120 8.15164983263229 6.36396166240562 2.84834986712963
+121 7.6516498326323 7.07106838616246 2.34834978591177
+122 8.65164983263229 5.65685493864878 3.34834994834749
+123 7.16053368546959 3.7123110175947 8.94664624336016E-02
+124 6.66053368546959 4.41941774135154 -.410533618784261
+125 7.66053368546958 3.00520429383785 .589466543651464
+126 7.78553358394726 4.596194565865 .714466462433593
+127 7.28553358394726 5.30330128962185 .214466381215731
+128 8.28553358394725 3.88908784210816 1.21446654365146
+129 8.41053348242493 5.48007811413531 1.33946646243359
+130 7.91053348242494 6.18718483789216 .839466381215723
+131 8.91053348242492 4.77297139037847 1.83946654365145
+132 9.0355333809026 6.36396166240562 1.96446646243358
+133 8.53553338090261 7.07106838616246 1.46446638121571
+134 9.53553338090259 5.65685493864878 2.46446654365144
+135 5.54441763982921 .176776824513464 -3.29441694226242
+136 4.91941774135153 -.707106723756844 -3.91941694226241
+137 5.04441763982921 .883883548270308 -3.79441702348028
+138 4.41941774135154 0 -4.41941702348027
+139 6.0444176398292 -.53032989924338 -2.79441686104456
+140 5.41941774135153 -1.41421344751369 -3.41941686104455
+141 6.16941753830688 1.06066037278377 -2.66941694226243
+142 5.66941753830688 1.76776709654062 -3.16941702348029
+143 6.66941753830687 .353553649026928 -2.16941686104457
+144 6.79441743678455 1.94454392105408 -2.04441694226244
+145 6.29441743678456 2.65165064481092 -2.5444170234803
+146 7.29441743678454 1.23743719729724 -1.54441686104457
+147 7.41941733526222 2.82842746932439 -1.41941694226245
+148 6.91941733526223 3.53553419308123 -1.91941702348031
+149 7.91941733526222 2.12132074556754 -.919416861044582
+150 6.42830118809951 .176776824513464 -4.17830034695848
+151 5.80330128962184 -.707106723756844 -4.80330034695847
+152 5.92830118809952 .883883548270308 -4.67830042817634
+153 5.30330128962185 0 -5.30330042817633
+154 6.92830118809951 -.53032989924338 -3.67830026574061
+155 6.30330128962184 -1.41421344751369 -4.3033002657406
+156 7.05330108657719 1.06066037278377 -3.55330034695848
+157 6.55330108657719 1.76776709654062 -4.05330042817635
+158 7.55330108657718 .353553649026928 -3.05330026574062
+159 7.67830098505486 1.94454392105408 -2.92830034695849
+160 7.17830098505486 2.65165064481092 -3.42830042817635
+161 8.17830098505485 1.23743719729724 -2.42830026574063
+162 8.30330088353253 2.82842746932439 -2.3033003469585
+163 7.80330088353254 3.53553419308123 -2.80330042817636
+164 8.80330088353252 2.12132074556754 -1.80330026574064
+165 7.31218473636982 .176776824513464 -5.06218375165453
+166 6.68718483789215 -.707106723756844 -5.68718375165452
+167 6.81218473636983 .883883548270308 -5.56218383287239
+168 6.18718483789216 0 -6.18718383287238
+169 7.81218473636982 -.53032989924338 -4.56218367043667
+170 7.18718483789214 -1.41421344751369 -5.18718367043666
+171 7.93718463484749 1.06066037278377 -4.43718375165454
+172 7.4371846348475 1.76776709654062 -4.9371838328724
+173 8.43718463484749 .353553649026928 -3.93718367043668
+174 8.56218453332517 1.94454392105408 -3.81218375165455
+175 8.06218453332517 2.65165064481092 -4.31218383287241
+176 9.06218453332516 1.23743719729724 -3.31218367043668
+177 9.18718443180284 2.82842746932439 -3.18718375165456
+178 8.68718443180284 3.53553419308123 -3.68718383287242
+179 9.68718443180283 2.12132074556754 -2.68718367043669
+180 8.19606828464013 .176776824513464 -5.94606715635059
+181 7.57106838616246 -.707106723756844 -6.57106715635058
+182 7.69606828464014 .883883548270308 -6.44606723756845
+183 7.07106838616246 0 -7.07106723756844
+184 8.69606828464012 -.53032989924338 -5.44606707513272
+185 8.07106838616245 -1.41421344751369 -6.07106707513271
+186 8.8210681831178 1.06066037278377 -5.32106715635059
+187 8.32106818311781 1.76776709654062 -5.82106723756846
+188 9.3210681831178 .353553649026928 -4.82106707513273
+189 9.44606808159547 1.94454392105408 -4.6960671563506
+190 8.94606808159548 2.65165064481092 -5.19606723756846
+191 9.94606808159547 1.23743719729724 -4.19606707513274
+192 10.0710679800731 2.82842746932439 -4.07106715635061
+193 9.57106798007315 3.53553419308123 -4.57106723756847
+194 10.5710679800731 2.12132074556754 -3.57106707513275
+195 8.04441723373989 3.7123110175947 -.794416942262453
+196 7.5444172337399 4.41941774135154 -1.29441702348032
+197 8.54441723373989 3.00520429383785 -.294416861044591
+198 8.66941713221757 4.596194565865 -.169416942262462
+199 8.16941713221757 5.30330128962185 -.669417023480324
+200 9.16941713221756 3.88908784210816 .330583138955401
+201 9.29441703069524 5.48007811413531 .45558305773753
+202 8.79441703069524 6.18718483789216 -4.44170234803321E-02
+203 9.79441703069523 4.77297139037847 .955583138955392
+204 9.91941692917291 6.36396166240562 1.08058305773752
+205 9.41941692917292 7.07106838616246 .580582976519659
+206 10.4194169291729 5.65685493864878 1.58058313895538
+207 8.9283007820102 3.7123110175947 -1.67830034695851
+208 8.42830078201021 4.41941774135154 -2.17830042817637
+209 9.4283007820102 3.00520429383785 -1.17830026574065
+210 9.55330068048787 4.596194565865 -1.05330034695852
+211 9.05330068048788 5.30330128962185 -1.55330042817638
+212 10.0533006804879 3.88908784210816 -.553300265740654
+213 10.1783005789655 5.48007811413531 -.428300346958525
+214 9.67830057896555 6.18718483789216 -.928300428176387
+215 10.6783005789655 4.77297139037847 7.16997342593375E-02
+216 10.8033004774432 6.36396166240562 .196699653041467
+217 10.3033004774432 7.07106838616246 -.303300428176396
+218 11.3033004774432 5.65685493864878 .696699734259329
+219 9.81218433028051 3.7123110175947 -2.56218375165456
+220 9.31218433028052 4.41941774135154 -3.06218383287243
+221 10.3121843302805 3.00520429383785 -2.0621836704367
+222 10.4371842287582 4.596194565865 -1.93718375165457
+223 9.93718422875819 5.30330128962185 -2.43718383287243
+224 10.9371842287582 3.88908784210816 -1.43718367043671
+225 11.0621841272359 5.48007811413531 -1.31218375165458
+226 10.5621841272359 6.18718483789216 -1.81218383287244
+227 11.5621841272358 4.77297139037847 -.812183670436717
+228 11.6871840257135 6.36396166240562 -.687183751654588
+229 11.1871840257135 7.07106838616246 -1.18718383287245
+230 12.1871840257135 5.65685493864878 -.187183670436726
+231 10.6960678785508 3.7123110175947 -3.44606715635062
+232 10.1960678785508 4.41941774135154 -3.94606723756848
+233 11.1960678785508 3.00520429383785 -2.94606707513276
+234 11.3210677770285 4.596194565865 -2.82106715635063
+235 10.8210677770285 5.30330128962185 -3.32106723756849
+236 11.8210677770285 3.88908784210816 -2.32106707513276
+237 11.9460676755062 5.48007811413531 -2.19606715635063
+238 11.4460676755062 6.18718483789216 -2.6960672375685
+239 12.4460676755062 4.77297139037847 -1.69606707513277
+240 12.5710675739838 6.36396166240562 -1.57106715635064
+241 12.0710675739838 7.07106838616246 -2.07106723756851
+242 13.0710675739838 5.65685493864878 -1.07106707513278
+243 0 0 .5
+244 0 0 1.5
+245 0 .625 0
+246 0 .625 1
+247 0 .625 2
+248 0 1.25 .5
+249 0 1.25 1.5
+250 0 1.875 0
+251 0 1.875 1
+252 0 1.875 2
+253 0 2.5 .5
+254 0 2.5 1.5
+255 0 3.125 0
+256 0 3.125 1
+257 0 3.125 2
+258 0 3.75 .5
+259 0 3.75 1.5
+260 0 4.375 0
+261 0 4.375 1
+262 0 4.375 2
+263 0 5 .5
+264 0 5 1.5
+265 0 5.625 0
+266 0 5.625 1
+267 0 5.625 2
+268 0 6.25 .5
+269 0 6.25 1.5
+270 0 6.875 0
+271 0 6.875 1
+272 0 6.875 2
+273 0 7.5 .5
+274 0 7.5 1.5
+275 0 8.125 0
+276 0 8.125 1
+277 0 8.125 2
+278 0 8.75 .5
+279 0 8.75 1.5
+280 0 9.375 0
+281 0 9.375 1
+282 0 9.375 2
+283 0 10 .5
+284 0 10 1.5
+285 .625 0 0
+286 .625 0 1
+287 .625 0 2
+288 .625 1.25 0
+289 .625 1.25 1
+290 .625 1.25 2
+291 .625 2.5 0
+292 .625 2.5 1
+293 .625 2.5 2
+294 .625 3.75 0
+295 .625 3.75 1
+296 .625 3.75 2
+297 .625 5 0
+298 .625 5 1
+299 .625 5 2
+300 .625 6.25 0
+301 .625 6.25 1
+302 .625 6.25 2
+303 .625 7.5 0
+304 .625 7.5 1
+305 .625 7.5 2
+306 .625 8.75 0
+307 .625 8.75 1
+308 .625 8.75 2
+309 .625 10 0
+310 .625 10 1
+311 .625 10 2
+312 1.25 0 .5
+313 1.25 0 1.5
+314 1.25 .625 0
+315 1.25 .625 1
+316 1.25 .625 2
+317 1.25 1.25 .5
+318 1.25 1.25 1.5
+319 1.25 1.875 0
+320 1.25 1.875 1
+321 1.25 1.875 2
+322 1.25 2.5 .5
+323 1.25 2.5 1.5
+324 1.25 3.125 0
+325 1.25 3.125 1
+326 1.25 3.125 2
+327 1.25 3.75 .5
+328 1.25 3.75 1.5
+329 1.25 4.375 0
+330 1.25 4.375 1
+331 1.25 4.375 2
+332 1.25 5 .5
+333 1.25 5 1.5
+334 1.25 5.625 0
+335 1.25 5.625 1
+336 1.25 5.625 2
+337 1.25 6.25 .5
+338 1.25 6.25 1.5
+339 1.25 6.875 0
+340 1.25 6.875 1
+341 1.25 6.875 2
+342 1.25 7.5 .5
+343 1.25 7.5 1.5
+344 1.25 8.125 0
+345 1.25 8.125 1
+346 1.25 8.125 2
+347 1.25 8.75 .5
+348 1.25 8.75 1.5
+349 1.25 9.375 0
+350 1.25 9.375 1
+351 1.25 9.375 2
+352 1.25 10 .5
+353 1.25 10 1.5
+354 1.875 0 0
+355 1.875 0 1
+356 1.875 0 2
+357 1.875 1.25 0
+358 1.875 1.25 1
+359 1.875 1.25 2
+360 1.875 2.5 0
+361 1.875 2.5 1
+362 1.875 2.5 2
+363 1.875 3.75 0
+364 1.875 3.75 1
+365 1.875 3.75 2
+366 1.875 5 0
+367 1.875 5 1
+368 1.875 5 2
+369 1.875 6.25 0
+370 1.875 6.25 1
+371 1.875 6.25 2
+372 1.875 7.5 0
+373 1.875 7.5 1
+374 1.875 7.5 2
+375 1.875 8.75 0
+376 1.875 8.75 1
+377 1.875 8.75 2
+378 1.875 10 0
+379 1.875 10 1
+380 1.875 10 2
+381 2.5 0 .5
+382 2.5 0 1.5
+383 2.5 .625 0
+384 2.5 .625 1
+385 2.5 .625 2
+386 2.5 1.25 .5
+387 2.5 1.25 1.5
+388 2.5 1.875 0
+389 2.5 1.875 1
+390 2.5 1.875 2
+391 2.5 2.5 .5
+392 2.5 2.5 1.5
+393 2.5 3.125 0
+394 2.5 3.125 1
+395 2.5 3.125 2
+396 2.5 3.75 .5
+397 2.5 3.75 1.5
+398 2.5 4.375 0
+399 2.5 4.375 1
+400 2.5 4.375 2
+401 2.5 5 .5
+402 2.5 5 1.5
+403 2.5 5.625 0
+404 2.5 5.625 1
+405 2.5 5.625 2
+406 2.5 6.25 .5
+407 2.5 6.25 1.5
+408 2.5 6.875 0
+409 2.5 6.875 1
+410 2.5 6.875 2
+411 2.5 7.5 .5
+412 2.5 7.5 1.5
+413 2.5 8.125 0
+414 2.5 8.125 1
+415 2.5 8.125 2
+416 2.5 8.75 .5
+417 2.5 8.75 1.5
+418 2.5 9.375 0
+419 2.5 9.375 1
+420 2.5 9.375 2
+421 2.5 10 .5
+422 2.5 10 1.5
+423 3.125 0 0
+424 3.125 0 1
+425 3.125 0 2
+426 3.125 1.25 0
+427 3.125 1.25 1
+428 3.125 1.25 2
+429 3.125 2.5 0
+430 3.125 2.5 1
+431 3.125 2.5 2
+432 3.125 3.75 0
+433 3.125 3.75 1
+434 3.125 3.75 2
+435 3.125 5 0
+436 3.125 5 1
+437 3.125 5 2
+438 3.125 6.25 0
+439 3.125 6.25 1
+440 3.125 6.25 2
+441 3.125 7.5 0
+442 3.125 7.5 1
+443 3.125 7.5 2
+444 3.125 8.75 0
+445 3.125 8.75 1
+446 3.125 8.75 2
+447 3.125 10 0
+448 3.125 10 1
+449 3.125 10 2
+450 3.75 0 .5
+451 3.75 0 1.5
+452 3.75 .625 0
+453 3.75 .625 1
+454 3.75 .625 2
+455 3.75 1.25 .5
+456 3.75 1.25 1.5
+457 3.75 1.875 0
+458 3.75 1.875 1
+459 3.75 1.875 2
+460 3.75 2.5 .5
+461 3.75 2.5 1.5
+462 3.75 3.125 0
+463 3.75 3.125 1
+464 3.75 3.125 2
+465 3.75 3.75 .5
+466 3.75 3.75 1.5
+467 3.75 4.375 0
+468 3.75 4.375 1
+469 3.75 4.375 2
+470 3.75 5 .5
+471 3.75 5 1.5
+472 3.75 5.625 0
+473 3.75 5.625 1
+474 3.75 5.625 2
+475 3.75 6.25 .5
+476 3.75 6.25 1.5
+477 3.75 6.875 0
+478 3.75 6.875 1
+479 3.75 6.875 2
+480 3.75 7.5 .5
+481 3.75 7.5 1.5
+482 3.75 8.125 0
+483 3.75 8.125 1
+484 3.75 8.125 2
+485 3.75 8.75 .5
+486 3.75 8.75 1.5
+487 3.75 9.375 0
+488 3.75 9.375 1
+489 3.75 9.375 2
+490 3.75 10 .5
+491 3.75 10 1.5
+492 4.375 0 0
+493 4.375 0 1
+494 4.375 0 2
+495 4.375 1.25 0
+496 4.375 1.25 1
+497 4.375 1.25 2
+498 4.375 2.5 0
+499 4.375 2.5 1
+500 4.375 2.5 2
+501 4.375 3.75 0
+502 4.375 3.75 1
+503 4.375 3.75 2
+504 4.375 5 0
+505 4.375 5 1
+506 4.375 5 2
+507 4.375 6.25 0
+508 4.375 6.25 1
+509 4.375 6.25 2
+510 4.375 7.5 0
+511 4.375 7.5 1
+512 4.375 7.5 2
+513 4.375 8.75 0
+514 4.375 8.75 1
+515 4.375 8.75 2
+516 4.375 10 0
+517 4.375 10 1
+518 4.375 10 2
+519 5 0 .5
+520 5 0 1.5
+521 5 .625 0
+522 5 .625 1
+523 5 .625 2
+524 5 1.25 .5
+525 5 1.25 1.5
+526 5 1.875 0
+527 5 1.875 1
+528 5 1.875 2
+529 5 2.5 .5
+530 5 2.5 1.5
+531 5 3.125 0
+532 5 3.125 1
+533 5 3.125 2
+534 5 3.75 .5
+535 5 3.75 1.5
+536 5 4.375 0
+537 5 4.375 1
+538 5 4.375 2
+539 5 5 .5
+540 5 5 1.5
+541 5 5.625 0
+542 5 5.625 1
+543 5 5.625 2
+544 5 6.25 .5
+545 5 6.25 1.5
+546 5 6.875 0
+547 5 6.875 1
+548 5 6.875 2
+549 5 7.5 .5
+550 5 7.5 1.5
+551 5 8.125 0
+552 5 8.125 1
+553 5 8.125 2
+554 5 8.75 .5
+555 5 8.75 1.5
+556 5 9.375 0
+557 5 9.375 1
+558 5 9.375 2
+559 5 10 .5
+560 5 10 1.5
+561 5.625 0 0
+562 5.625 0 1
+563 5.625 0 2
+564 5.625 1.25 0
+565 5.625 1.25 1
+566 5.625 1.25 2
+567 5.625 2.5 0
+568 5.625 2.5 1
+569 5.625 2.5 2
+570 5.625 3.75 0
+571 5.625 3.75 1
+572 5.625 3.75 2
+573 5.625 5 0
+574 5.625 5 1
+575 5.625 5 2
+576 5.625 6.25 0
+577 5.625 6.25 1
+578 5.625 6.25 2
+579 5.625 7.5 0
+580 5.625 7.5 1
+581 5.625 7.5 2
+582 5.625 8.75 0
+583 5.625 8.75 1
+584 5.625 8.75 2
+585 5.625 10 0
+586 5.625 10 1
+587 5.625 10 2
+588 6.25 0 .5
+589 6.25 0 1.5
+590 6.25 .625 0
+591 6.25 .625 1
+592 6.25 .625 2
+593 6.25 1.25 .5
+594 6.25 1.25 1.5
+595 6.25 1.875 0
+596 6.25 1.875 1
+597 6.25 1.875 2
+598 6.25 2.5 .5
+599 6.25 2.5 1.5
+600 6.25 3.125 0
+601 6.25 3.125 1
+602 6.25 3.125 2
+603 6.25 3.75 .5
+604 6.25 3.75 1.5
+605 6.25 4.375 0
+606 6.25 4.375 1
+607 6.25 4.375 2
+608 6.25 5 .5
+609 6.25 5 1.5
+610 6.25 5.625 0
+611 6.25 5.625 1
+612 6.25 5.625 2
+613 6.25 6.25 .5
+614 6.25 6.25 1.5
+615 6.25 6.875 0
+616 6.25 6.875 1
+617 6.25 6.875 2
+618 6.25 7.5 .5
+619 6.25 7.5 1.5
+620 6.25 8.125 0
+621 6.25 8.125 1
+622 6.25 8.125 2
+623 6.25 8.75 .5
+624 6.25 8.75 1.5
+625 6.25 9.375 0
+626 6.25 9.375 1
+627 6.25 9.375 2
+628 6.25 10 .5
+629 6.25 10 1.5
+630 6.875 0 0
+631 6.875 0 1
+632 6.875 0 2
+633 6.875 1.25 0
+634 6.875 1.25 1
+635 6.875 1.25 2
+636 6.875 2.5 0
+637 6.875 2.5 1
+638 6.875 2.5 2
+639 6.875 3.75 0
+640 6.875 3.75 1
+641 6.875 3.75 2
+642 6.875 5 0
+643 6.875 5 1
+644 6.875 5 2
+645 6.875 6.25 0
+646 6.875 6.25 1
+647 6.875 6.25 2
+648 6.875 7.5 0
+649 6.875 7.5 1
+650 6.875 7.5 2
+651 6.875 8.75 0
+652 6.875 8.75 1
+653 6.875 8.75 2
+654 6.875 10 0
+655 6.875 10 1
+656 6.875 10 2
+657 7.5 0 .5
+658 7.5 0 1.5
+659 7.5 .625 0
+660 7.5 .625 1
+661 7.5 .625 2
+662 7.5 1.25 .5
+663 7.5 1.25 1.5
+664 7.5 1.875 0
+665 7.5 1.875 1
+666 7.5 1.875 2
+667 7.5 2.5 .5
+668 7.5 2.5 1.5
+669 7.5 3.125 0
+670 7.5 3.125 1
+671 7.5 3.125 2
+672 7.5 3.75 .5
+673 7.5 3.75 1.5
+674 7.5 4.375 0
+675 7.5 4.375 1
+676 7.5 4.375 2
+677 7.5 5 .5
+678 7.5 5 1.5
+679 7.5 5.625 0
+680 7.5 5.625 1
+681 7.5 5.625 2
+682 7.5 6.25 .5
+683 7.5 6.25 1.5
+684 7.5 6.875 0
+685 7.5 6.875 1
+686 7.5 6.875 2
+687 7.5 7.5 .5
+688 7.5 7.5 1.5
+689 7.5 8.125 0
+690 7.5 8.125 1
+691 7.5 8.125 2
+692 7.5 8.75 .5
+693 7.5 8.75 1.5
+694 7.5 9.375 0
+695 7.5 9.375 1
+696 7.5 9.375 2
+697 7.5 10 .5
+698 7.5 10 1.5
+699 8.125 0 0
+700 8.125 0 1
+701 8.125 0 2
+702 8.125 1.25 0
+703 8.125 1.25 1
+704 8.125 1.25 2
+705 8.125 2.5 0
+706 8.125 2.5 1
+707 8.125 2.5 2
+708 8.125 3.75 0
+709 8.125 3.75 1
+710 8.125 3.75 2
+711 8.125 5 0
+712 8.125 5 1
+713 8.125 5 2
+714 8.125 6.25 0
+715 8.125 6.25 1
+716 8.125 6.25 2
+717 8.125 7.5 0
+718 8.125 7.5 1
+719 8.125 7.5 2
+720 8.125 8.75 0
+721 8.125 8.75 1
+722 8.125 8.75 2
+723 8.125 10 0
+724 8.125 10 1
+725 8.125 10 2
+726 8.75 0 .5
+727 8.75 0 1.5
+728 8.75 .625 0
+729 8.75 .625 1
+730 8.75 .625 2
+731 8.75 1.25 .5
+732 8.75 1.25 1.5
+733 8.75 1.875 0
+734 8.75 1.875 1
+735 8.75 1.875 2
+736 8.75 2.5 .5
+737 8.75 2.5 1.5
+738 8.75 3.125 0
+739 8.75 3.125 1
+740 8.75 3.125 2
+741 8.75 3.75 .5
+742 8.75 3.75 1.5
+743 8.75 4.375 0
+744 8.75 4.375 1
+745 8.75 4.375 2
+746 8.75 5 .5
+747 8.75 5 1.5
+748 8.75 5.625 0
+749 8.75 5.625 1
+750 8.75 5.625 2
+751 8.75 6.25 .5
+752 8.75 6.25 1.5
+753 8.75 6.875 0
+754 8.75 6.875 1
+755 8.75 6.875 2
+756 8.75 7.5 .5
+757 8.75 7.5 1.5
+758 8.75 8.125 0
+759 8.75 8.125 1
+760 8.75 8.125 2
+761 8.75 8.75 .5
+762 8.75 8.75 1.5
+763 8.75 9.375 0
+764 8.75 9.375 1
+765 8.75 9.375 2
+766 8.75 10 .5
+767 8.75 10 1.5
+768 9.375 0 0
+769 9.375 0 1
+770 9.375 0 2
+771 9.375 1.25 0
+772 9.375 1.25 1
+773 9.375 1.25 2
+774 9.375 2.5 0
+775 9.375 2.5 1
+776 9.375 2.5 2
+777 9.375 3.75 0
+778 9.375 3.75 1
+779 9.375 3.75 2
+780 9.375 5 0
+781 9.375 5 1
+782 9.375 5 2
+783 9.375 6.25 0
+784 9.375 6.25 1
+785 9.375 6.25 2
+786 9.375 7.5 0
+787 9.375 7.5 1
+788 9.375 7.5 2
+789 9.375 8.75 0
+790 9.375 8.75 1
+791 9.375 8.75 2
+792 9.375 10 0
+793 9.375 10 1
+794 9.375 10 2
+795 10 0 .5
+796 10 0 1.5
+797 10 .625 0
+798 10 .625 1
+799 10 .625 2
+800 10 1.25 .5
+801 10 1.25 1.5
+802 10 1.875 0
+803 10 1.875 1
+804 10 1.875 2
+805 10 2.5 .5
+806 10 2.5 1.5
+807 10 3.125 0
+808 10 3.125 1
+809 10 3.125 2
+810 10 3.75 .5
+811 10 3.75 1.5
+812 10 4.375 0
+813 10 4.375 1
+814 10 4.375 2
+815 10 5 .5
+816 10 5 1.5
+817 10 5.625 0
+818 10 5.625 1
+819 10 5.625 2
+820 10 6.25 .5
+821 10 6.25 1.5
+822 10 6.875 0
+823 10 6.875 1
+824 10 6.875 2
+825 10 7.5 .5
+826 10 7.5 1.5
+827 10 8.125 0
+828 10 8.125 1
+829 10 8.125 2
+830 10 8.75 .5
+831 10 8.75 1.5
+832 10 9.375 0
+833 10 9.375 1
+834 10 9.375 2
+835 10 10 .5
+836 10 10 1.5
+ $ELEMENTS
+ 128
+0 0 hex 4 5 6 7 0 1 2 3
+1 0 hex 0 1 2 3 8 9 10 11
+2 0 hex 14 15 5 4 12 13 1 0
+3 0 hex 12 13 1 0 16 17 9 8
+4 0 hex 20 21 15 14 18 19 13 12
+5 0 hex 18 19 13 12 22 23 17 16
+6 0 hex 26 27 21 20 24 25 19 18
+7 0 hex 24 25 19 18 28 29 23 22
+8 0 hex 32 4 7 33 30 0 3 31
+9 0 hex 30 0 3 31 34 8 11 35
+10 0 hex 37 14 4 32 36 12 0 30
+11 0 hex 36 12 0 30 38 16 8 34
+12 0 hex 40 20 14 37 39 18 12 36
+13 0 hex 39 18 12 36 41 22 16 38
+14 0 hex 43 26 20 40 42 24 18 39
+15 0 hex 42 24 18 39 44 28 22 41
+16 0 hex 47 32 33 48 45 30 31 46
+17 0 hex 45 30 31 46 49 34 35 50
+18 0 hex 52 37 32 47 51 36 30 45
+19 0 hex 51 36 30 45 53 38 34 49
+20 0 hex 55 40 37 52 54 39 36 51
+21 0 hex 54 39 36 51 56 41 38 53
+22 0 hex 58 43 40 55 57 42 39 54
+23 0 hex 57 42 39 54 59 44 41 56
+24 0 hex 62 47 48 63 60 45 46 61
+25 0 hex 60 45 46 61 64 49 50 65
+26 0 hex 67 52 47 62 66 51 45 60
+27 0 hex 66 51 45 60 68 53 49 64
+28 0 hex 70 55 52 67 69 54 51 66
+29 0 hex 69 54 51 66 71 56 53 68
+30 0 hex 73 58 55 70 72 57 54 69
+31 0 hex 72 57 54 69 74 59 56 71
+32 0 hex 77 78 27 26 75 76 25 24
+33 0 hex 75 76 25 24 79 80 29 28
+34 0 hex 83 84 78 77 81 82 76 75
+35 0 hex 81 82 76 75 85 86 80 79
+36 0 hex 89 90 84 83 87 88 82 81
+37 0 hex 87 88 82 81 91 92 86 85
+38 0 hex 95 96 90 89 93 94 88 87
+39 0 hex 93 94 88 87 97 98 92 91
+40 0 hex 100 77 26 43 99 75 24 42
+41 0 hex 99 75 24 42 101 79 28 44
+42 0 hex 103 83 77 100 102 81 75 99
+43 0 hex 102 81 75 99 104 85 79 101
+44 0 hex 106 89 83 103 105 87 81 102
+45 0 hex 105 87 81 102 107 91 85 104
+46 0 hex 109 95 89 106 108 93 87 105
+47 0 hex 108 93 87 105 110 97 91 107
+48 0 hex 112 100 43 58 111 99 42 57
+49 0 hex 111 99 42 57 113 101 44 59
+50 0 hex 115 103 100 112 114 102 99 111
+51 0 hex 114 102 99 111 116 104 101 113
+52 0 hex 118 106 103 115 117 105 102 114
+53 0 hex 117 105 102 114 119 107 104 116
+54 0 hex 121 109 106 118 120 108 105 117
+55 0 hex 120 108 105 117 122 110 107 119
+56 0 hex 124 112 58 73 123 111 57 72
+57 0 hex 123 111 57 72 125 113 59 74
+58 0 hex 127 115 112 124 126 114 111 123
+59 0 hex 126 114 111 123 128 116 113 125
+60 0 hex 130 118 115 127 129 117 114 126
+61 0 hex 129 117 114 126 131 119 116 128
+62 0 hex 133 121 118 130 132 120 117 129
+63 0 hex 132 120 117 129 134 122 119 131
+64 0 hex 137 62 63 138 135 60 61 136
+65 0 hex 135 60 61 136 139 64 65 140
+66 0 hex 142 67 62 137 141 66 60 135
+67 0 hex 141 66 60 135 143 68 64 139
+68 0 hex 145 70 67 142 144 69 66 141
+69 0 hex 144 69 66 141 146 71 68 143
+70 0 hex 148 73 70 145 147 72 69 144
+71 0 hex 147 72 69 144 149 74 71 146
+72 0 hex 152 137 138 153 150 135 136 151
+73 0 hex 150 135 136 151 154 139 140 155
+74 0 hex 157 142 137 152 156 141 135 150
+75 0 hex 156 141 135 150 158 143 139 154
+76 0 hex 160 145 142 157 159 144 141 156
+77 0 hex 159 144 141 156 161 146 143 158
+78 0 hex 163 148 145 160 162 147 144 159
+79 0 hex 162 147 144 159 164 149 146 161
+80 0 hex 167 152 153 168 165 150 151 166
+81 0 hex 165 150 151 166 169 154 155 170
+82 0 hex 172 157 152 167 171 156 150 165
+83 0 hex 171 156 150 165 173 158 154 169
+84 0 hex 175 160 157 172 174 159 156 171
+85 0 hex 174 159 156 171 176 161 158 173
+86 0 hex 178 163 160 175 177 162 159 174
+87 0 hex 177 162 159 174 179 164 161 176
+88 0 hex 182 167 168 183 180 165 166 181
+89 0 hex 180 165 166 181 184 169 170 185
+90 0 hex 187 172 167 182 186 171 165 180
+91 0 hex 186 171 165 180 188 173 169 184
+92 0 hex 190 175 172 187 189 174 171 186
+93 0 hex 189 174 171 186 191 176 173 188
+94 0 hex 193 178 175 190 192 177 174 189
+95 0 hex 192 177 174 189 194 179 176 191
+96 0 hex 196 124 73 148 195 123 72 147
+97 0 hex 195 123 72 147 197 125 74 149
+98 0 hex 199 127 124 196 198 126 123 195
+99 0 hex 198 126 123 195 200 128 125 197
+100 0 hex 202 130 127 199 201 129 126 198
+101 0 hex 201 129 126 198 203 131 128 200
+102 0 hex 205 133 130 202 204 132 129 201
+103 0 hex 204 132 129 201 206 134 131 203
+104 0 hex 208 196 148 163 207 195 147 162
+105 0 hex 207 195 147 162 209 197 149 164
+106 0 hex 211 199 196 208 210 198 195 207
+107 0 hex 210 198 195 207 212 200 197 209
+108 0 hex 214 202 199 211 213 201 198 210
+109 0 hex 213 201 198 210 215 203 200 212
+110 0 hex 217 205 202 214 216 204 201 213
+111 0 hex 216 204 201 213 218 206 203 215
+112 0 hex 220 208 163 178 219 207 162 177
+113 0 hex 219 207 162 177 221 209 164 179
+114 0 hex 223 211 208 220 222 210 207 219
+115 0 hex 222 210 207 219 224 212 209 221
+116 0 hex 226 214 211 223 225 213 210 222
+117 0 hex 225 213 210 222 227 215 212 224
+118 0 hex 229 217 214 226 228 216 213 225
+119 0 hex 228 216 213 225 230 218 215 227
+120 0 hex 232 220 178 193 231 219 177 192
+121 0 hex 231 219 177 192 233 221 179 194
+122 0 hex 235 223 220 232 234 222 219 231
+123 0 hex 234 222 219 231 236 224 221 233
+124 0 hex 238 226 223 235 237 225 222 234
+125 0 hex 237 225 222 234 239 227 224 236
+126 0 hex 241 229 226 238 240 228 225 237
+127 0 hex 240 228 225 237 242 230 227 239
+#STOP
diff --git a/tools/ogsAutowrap/test-data/test.plt b/tools/ogsAutowrap/test-data/test.plt
new file mode 100644
index 00000000..9ade2244
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.plt
@@ -0,0 +1,3 @@
+# Tecplot Dummy (.plt)
+TITLE = 'Dummy Tecplot Selection File'
+VARIABLES = 'X', 'Y', 'Z'
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.pvtu b/tools/ogsAutowrap/test-data/test.pvtu
new file mode 100644
index 00000000..09ec69c9
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.pvtu
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/ogsAutowrap/test-data/test.sg b/tools/ogsAutowrap/test-data/test.sg
new file mode 100644
index 00000000..1b4254a6
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.sg
@@ -0,0 +1,189 @@
+GOCAD SGrid 1
+HEADER {
+use_reversed_skua_flow_v: true
+cage: false
+bbox: false
+*painted*variable: UNIT
+painted: on
+sections: 3 1 1 66 2 1 46 3 0 16
+volume: true
+*volume*grid: true
+*FenceDiagram*I_selection: 66
+*FenceDiagram*J_selection: 46
+*FenceDiagram*I_clipping: 0 133
+*FenceDiagram*SubBlock*maximum_I: 132
+*FenceDiagram*J_clipping: 0 93
+*FenceDiagram*SubBlock*maximum_J: 92
+*FenceDiagram*K_clipping: 0 33
+*FenceDiagram*SubBlock*maximum_K: 32
+*FenceDiagram*grid_color: 0 0 0 1
+*FenceDiagram*show_grid: on
+*FenceDiagram*show_thin_sections: false
+*volume*solid: true
+name: flow_simulation_grid_stair-stepped
+ascii: off
+double_precision_binary: off
+}
+GOCAD_ORIGINAL_COORDINATE_SYSTEM
+NAME " gocad Local"
+PROJECTION " WGS 84 / UTM grid system (northern hemisphere)"
+DATUM " Mean Sea Level"
+AXIS_NAME X Y Z
+AXIS_UNIT m m m
+ZPOSITIVE Depth
+END_ORIGINAL_COORDINATE_SYSTEM
+CLASSIFICATION ReservoirFlowModel " Flow Models" " Reservoir Model"
+AXIS_N 133 93 33
+PROP_ALIGNMENT CELLS
+POINTS_OFFSET 0
+POINTS_FILE SGrid_Testflow_simulation_grid_stair-stepped__points@@
+FLAGS_OFFSET 0
+FLAGS_FILE SGrid_Testflow_simulation_grid_stair-stepped__flags@@
+
+REGION OGT-1 0
+REGION OGT-2 1
+REGION OBKS-3 2
+REGION OBKS-4 3
+REGION HT-5 4
+REGION UBKS-6 5
+MODEL_LAYER OGT OGT-1 OGT-2 END
+MODEL_LAYER OBKS OBKS-3 OBKS-4 END
+MODEL_LAYER HT HT-5 END
+MODEL_LAYER UBKS UBKS-6 END
+REGION_FLAGS_ARRAY_LENGTH 408177
+REGION_FLAGS_BIT_LENGTH 6
+REGION_FLAGS_ESIZE 1
+REGION_FLAGS_OFFSET 0
+REGION_FLAGS_FILE SGrid_Testflow_simulation_grid_stair-stepped__region_flags@@
+SPLIT 50 60 2 560360.41622924805 5928581.7075195313 26.170173645019531 1 0 0 0 0 0 1 0 0
+SPLIT 4 86 7 555760.416015625 5925981.7075195313 101.11126708984375 2 0 0 0 0 1 0 1 0
+SPLIT 99 61 6 565260.416015625 5928481.7075195313 71.7366943359375 3 0 0 1 1 0 0 1 1
+SPLIT 64 38 3 561760.41625976563 5930781.7075195313 31.800754547119141 4 0 0 0 0 0 0 0 1
+SPLIT 33 12 11 558660.41625976562 5933381.7075195313 136.37799072265625 5 0 0 0 0 0 1 0 1
+SPLIT 62 13 6 561560.41625976562 5933281.7075195312 52.983249664306641 6 0 0 0 0 1 1 1 0
+SPLIT 78 16 4 563160.41625976562 5932981.7075195312 17.220890045166016 7 0 0 0 0 1 1 1 1
+SPLIT 11 80 4 556460.41625976562 5926581.7075195312 68.931381225585938 8 0 0 0 0 1 1 1 1
+SPLIT 94 45 13 564760.416015625 5930081.7076034546 158.68922424316406 9 0 0 0 0 1 0 0 0
+SPLIT 110 48 11 566360.416015625 5929781.7074432373 115.96848297119141 10 0 0 0 1 0 1 1 1
+SPLIT 40 79 4 559360.41625976563 5926681.7075195313 83.359764099121094 11 0 1 1 1 0 1 1 1
+SPLIT 8 89 8 556160.41625976563 5925681.7075195313 108.41818237304688 12 0 0 0 0 1 0 1 1
+SPLIT 107 31 4 566060.416015625 5931481.7075195312 10.394937515258789 13 0 0 0 0 1 1 1 1
+SPLIT 91 50 17 564460.416015625 5929581.7075195312 227.60821533203125 14 0 0 0 0 1 0 0 0
+SPLIT 106 65 5 565960.416015625 5928081.7075195312 33.21868896484375 15 0 0 0 0 1 1 1 1
+SPLIT 71 42 2 562460.41625976562 5930381.7075500488 17.875858306884766 16 0 0 0 0 1 1 1 1
+SPLIT 104 40 8 565760.416015625 5930581.7075805664 68.241371154785156 17 0 0 1 1 0 0 0 1
+SPLIT 127 1 16 568060.416015625 5934481.7075195312 348.91412353515625 18 0 1 1 1 0 1 1 1
+SPLIT 119 77 7 567260.416015625 5926881.7075195313 33.067852020263672 19 0 0 0 0 0 0 1 1
+SPLIT 85 20 3 563860.41625976563 5932581.7077636719 8.2894506454467773 20 0 0 0 0 1 1 1 1
+SPLIT 94 82 4 564760.416015625 5926381.7075195312 23.518163681030273 23947 0 1 0 0 0 0 0 0
+SPLIT 11 87 10 556460.41625976562 5925881.7075195313 145.08709716796875 23948 0 0 0 0 1 1 1 0
+SPLIT 109 26 4 566260.416015625 5931981.7076416016 9.0058422088623047 23949 0 1 1 1 0 0 0 0
+SPLIT 42 90 4 559560.41622924805 5925581.7075195313 53.095809936523438 23950 0 0 0 0 1 1 1 1
+SPLIT 22 12 14 557560.41625976562 5933381.7072753906 206.70942687988281 23951 0 1 0 1 1 1 1 1
+SPLIT 0 60 4 555360.416015625 5928581.7075195313 74.092239379882813 23952 0 0 0 0 1 1 0 0
+SPLIT 54 21 6 560760.41619873047 5932481.7075195313 68.076637268066406 23953 0 0 0 0 1 0 0 0
+SPLIT 73 37 2 562660.41625976562 5930881.7075195313 8.1392107009887695 23954 0 0 0 0 1 1 1 1
+SPLIT 123 30 16 567660.416015625 5931581.7076416016 168.96095275878906 23955 0 1 1 1 0 0 0 1
+SPLIT 97 6 3 565060.416015625 5933981.7072753906 8.0066967010498047 23956 0 0 0 0 1 1 1 0
+SPLIT 5 42 4 555860.416015625 5930381.7074584961 70.121589660644531 23957 0 0 0 0 1 1 1 1
+SPLIT 38 40 10 559160.41619873047 5930581.7075195313 174.30050659179687 23958 0 0 0 0 0 1 0 0
+SPLIT 87 15 3 564060.41625976562 5933081.7075195312 5.0752882957458496 23959 0 0 1 1 0 0 0 0
+SPLIT 20 12 15 557360.41625976563 5933381.7072753906 225.13265991210937 23960 0 0 0 0 1 1 1 1
+SPLIT 54 12 3 560760.41619873047 5933381.7075195313 -6.801175594329834 23961 0 1 0 1 0 0 0 0
+SPLIT 85 83 5 563860.41625976563 5926281.7075195312 42.216259002685547 23962 0 0 0 0 1 1 0 0
+SPLIT 35 49 14 558860.41625976562 5929681.7075500488 273.22412109375 23963 0 1 0 1 1 1 1 1
+SPLIT 11 69 4 556460.41625976562 5927681.7075195313 74.620918273925781 23964 0 0 0 0 1 1 1 1
+
+PROPERTY 1 CELL_VOLUME_CORRECTION_FACTOR
+PROPERTY_CLASS 1 cell_volume_correction_factor
+PROPERTY_KIND 1 " Volume Correction Factor"
+PROPERTY_CLASS_HEADER 1 cell_volume_correction_factor {
+kind: Volume Correction Factor
+unit: unitless
+pclip: 99
+*colormap*classic*colors: 0 0 0 1 64 0 1 1 128 0 1 0 192 1 1 0 255 1 0 0
+}
+PROPERTY_SUBCLASS 1 QUANTITY Float
+PROP_ORIGINAL_UNIT 1 unitless
+PROP_UNIT 1 unitless
+PROP_NO_DATA_VALUE 1 -99999
+PROP_READ_ONLY 1 1
+PROP_FIXED 1 1
+PROP_SAMPLE_STATS 1 296967 0.961285 0.0284523 9.45577e-023 4.16691
+PROP_ESIZE 1 4
+PROP_ETYPE 1 IEEE
+PROP_ALIGNMENT 1 CELLS
+PROP_FORMAT 1 RAW
+PROP_OFFSET 1 0
+PROP_FILE 1 SGrid_Testflow_simulation_grid_stair-stepped_FSG_CELL_VOLUME_CORRECTION_FACTOR@@
+
+PROPERTY 2 fault_blocks
+PROPERTY_CLASS 2 fault_blocks
+PROPERTY_KIND 2 " Region Numbers"
+PROPERTY_CLASS_HEADER 2 fault_blocks {
+kind: Region Numbers
+unit: unitless
+pclip: 99
+*colormap*standard*colors: 0 0 0 0.560783982 85 0 1 1 170 1 0.996078014 0 255 0.498039007 0 0
+}
+PROPERTY_SUBCLASS 2 QUANTITY Float
+PROP_ORIGINAL_UNIT 2 unitless
+PROP_UNIT 2 unitless
+PROP_NO_DATA_VALUE 2 -99999
+PROP_READ_ONLY 2 1
+PROP_FIXED 2 1
+PROP_SAMPLE_STATS 2 296967 1 0 1 1
+PROP_ESIZE 2 4
+PROP_ETYPE 2 IEEE
+PROP_ALIGNMENT 2 CELLS
+PROP_FORMAT 2 RAW
+PROP_OFFSET 2 0
+PROP_FILE 2 SGrid_Testflow_simulation_grid_stair-stepped_FSG_fault_blocks@@
+
+PROPERTY 3 VISIBLE_TETRA_RECORD_ID
+PROPERTY_CLASS 3 visible_tetra_record_id
+PROPERTY_KIND 3 Number
+PROPERTY_CLASS_HEADER 3 visible_tetra_record_id {
+kind: Number
+unit: unitless
+pclip: 99
+*colormap*standard*colors: 0 0 0 0.560783982 85 0 1 1 170 1 0.996078014 0 255 0.498039007 0 0
+}
+PROPERTY_SUBCLASS 3 QUANTITY Float
+PROP_ORIGINAL_UNIT 3 unitless
+PROP_UNIT 3 unitless
+PROP_NO_DATA_VALUE 3 -99999
+PROP_READ_ONLY 3 1
+PROP_FIXED 3 1
+PROP_SAMPLE_STATS 3 296967 62185.5 1.20631e+009 2 126161
+PROP_ESIZE 3 4
+PROP_ETYPE 3 IEEE
+PROP_ALIGNMENT 3 CELLS
+PROP_FORMAT 3 RAW
+PROP_OFFSET 3 0
+PROP_FILE 3 SGrid_Testflow_simulation_grid_stair-stepped_FSG_VISIBLE_TETRA_RECORD_ID@@
+
+PROPERTY 4 GEOLOGIC_K
+PROPERTY_CLASS 4 geologic_k
+PROPERTY_KIND 4 Number
+PROPERTY_CLASS_HEADER 4 geologic_k {
+kind: Number
+unit: unitless
+pclip: 99
+*colormap*standard*colors: 0 0 0 0.560783982 85 0 1 1 170 1 0.996078014 0 255 0.498039007 0 0
+}
+PROPERTY_SUBCLASS 4 QUANTITY Float
+PROP_ORIGINAL_UNIT 4 unitless
+PROP_UNIT 4 unitless
+PROP_NO_DATA_VALUE 4 -99999
+PROP_READ_ONLY 4 1
+PROP_FIXED 4 1
+PROP_SAMPLE_STATS 4 296967 18.6065 61.6334 0 31
+PROP_ESIZE 4 4
+PROP_ETYPE 4 IEEE
+PROP_ALIGNMENT 4 CELLS
+PROP_FORMAT 4 RAW
+PROP_OFFSET 4 0
+PROP_FILE 4 SGrid_Testflow_simulation_grid_stair-stepped_FSG_GEOLOGIC_K@@
+
+END
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.shp b/tools/ogsAutowrap/test-data/test.shp
new file mode 100644
index 00000000..386e8f26
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.shp
@@ -0,0 +1 @@
+# Shapefile Dummy (.shp)
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.tin b/tools/ogsAutowrap/test-data/test.tin
new file mode 100644
index 00000000..f04aef2b
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.tin
@@ -0,0 +1,4 @@
+# TIN Dummy (.tin)
+0 0.0 0.0 0.0
+1 1.0 0.0 0.0
+2 0.0 1.0 0.0
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.ts b/tools/ogsAutowrap/test-data/test.ts
new file mode 100644
index 00000000..2b12cfd4
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.ts
@@ -0,0 +1,38 @@
+GOCAD TSurf 1
+HEADER {
+name:Top-Lower-Shaly
+*visible:true
+*solid*color:0.509804 0.352941 0.509804 1
+}
+PROPERTIES Size Reshape_Thickness Dip_Data_Symbol_Style Measured_Depth Reshape_Thickness2
+NO_DATA_VALUES 1e-30 1e-30 1e-30 1e-30 1e-30
+PROPERTY_CLASSES Size Reshape_Thickness Dip_Data_Symbol_Style Measured_Depth Reshape_Thickness2
+ESIZES 1 1 1 1 1
+GOCAD_ORIGINAL_COORDINATE_SYSTEM
+NAME Default
+AXIS_NAME "X" "Y" "Z"
+AXIS_UNIT "m" "m" "m"
+ZPOSITIVE Elevation
+END_ORIGINAL_COORDINATE_SYSTEM
+TFACE
+PVRTX 1 2579278.52814264 1247733.67194097 617.20657988 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 2 2579282.60181680 1247736.53857467 617.24688941 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 3 2579286.67548204 1247739.40522178 617.28718411 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 4 2579290.74912769 1247742.27189828 617.32744631 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 5 2579294.82253090 1247745.13893885 617.36730595 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 6 2579298.89620636 1247748.00557059 617.40761763 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 7 2579302.96990406 1247750.87216893 617.44796626 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 8 2579307.04367031 1247753.73866435 617.48842868 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 9 2579311.11707638 1247756.60570062 617.52829307 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+PVRTX 10 2579315.19031077 1247759.47299468 617.56787241 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000
+TRGL 3412 3328 3329
+TRGL 2337 2254 2255
+TRGL 2982 2981 2899
+TRGL 2996 2912 2913
+TRGL 3079 3080 3162
+TRGL 2576 2575 2492
+TRGL 3404 3403 3320
+TRGL 3828 3743 3744
+TRGL 4073 4156 4072
+TRGL 4158 4157 4074
+END
\ No newline at end of file
diff --git a/tools/ogsAutowrap/test-data/test.xml b/tools/ogsAutowrap/test-data/test.xml
new file mode 100644
index 00000000..a00d1af8
--- /dev/null
+++ b/tools/ogsAutowrap/test-data/test.xml
@@ -0,0 +1,12 @@
+
+
+ SteadyStateDiffusion
+ STEADY_STATE_DIFFUSION
+ 2
+
+ pressure
+
+
+
+
+
diff --git a/tools/ogsAutowrap/test_macros.xml b/tools/ogsAutowrap/test_macros.xml
new file mode 100644
index 00000000..58368775
--- /dev/null
+++ b/tools/ogsAutowrap/test_macros.xml
@@ -0,0 +1,795 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file