1 Introduction

Finite elements have been used in engineering analysis for several decades. Since the 1990s, geometric domains that are used in finite element analysis and design have been built using computer-aided design (CAD) programs. Today’s CAD systems are highly reliable: they deal with most of the complex geometric features of industrial parts or assemblies.

Traditional ocean models are based on finite difference schemes on Cartesian grids (Griffies et al. 2000). It is only recently that finite elements and unstructured meshes have been used in ocean modeling (e.g., Piggott et al. 2007; White et al. 2008; Danilov et al. 2005). One of the advantages of unstructured grids is their ability to conform to coastlines.

As unstructured grid ocean models began to appear, mesh generation algorithms were either specifically developed or simply adapted from classical engineering tools. Le Provost et al. (1994) use the mesh generation tools of Henry and Walters (1993) on several subdomains to obtain a mesh of the World Ocean, aiming at global scale tidal modeling. Further, Lyard et al. (2006) use a higher-resolution version of the same kind of meshes with the state-of-the-art FES2004 tidal model. Hagen et al. (2001) give two algorithms to generate meshes of coastal domains and use them to model tides in the Gulf of Mexico. Legrand et al. (2006) show high-resolution meshes of the Great Barrier Reef (Australia). On the global scale, Legrand et al. (2000) and Gorman et al. (2007) developed specific algorithms to obtain meshes of the World Ocean.

Our domain of interest is the Earth’s surface, i.e., within a sufficiently good approximation, a sphere \(\mathcal S\) centered at the origin and of radius R of about 6,370 km. The World Ocean is bounded by continents’ and islands’ coastlines. The first aim of the paper is to describe an automatic procedure that enables to build a boundary representation (BRep) of the geometry of the World Ocean within a prescribed accuracy. This procedure takes advantage of various sets of data: high-resolution shoreline databases (Wessel and Smith 1996), global relief data (National Geographic Data Center 2006), local cartographic data, etc.

Even if accurate data are available, it cannot be envisaged to build a BRep with the maximal available resolution everywhere. For example, the current global shoreline database has a resolution of about 50 m, which would lead to a huge number of control points (9,451,331). Our procedure enables to construct a model with an adaptive geometrical accuracy. Some regions of interest of the globe are discretized with the maximal available geometrical accuracy while other regions are approximated in a coarser way. Our technique also allows to mix various data sets as input.

Numerical analysis procedures utilize meshes, i.e., discretized versions of the domains described by CAD models. In this paper, we have decided not to develop a new mesh generation algorithm specifically designed for doing meshes that can be used in finite element marine modeling. Here, we have rather decided to build a CAD model that can serve as input for any surface mesher. In the last decade, mesh generation procedures have evolved with the objective of being able to interact directly with CAD models (e.g., Beall and Shephard 1997; Haimes 2000). More specifically, some of the authors of this paper have developed Gmsh: a 3D finite element mesh generator with built-in pre- and postprocessing facilities. The specific nature of the model—the Earth surface with several thousands of islands, including hundreds of thousands of control points—have led us to greatly improve the meshing procedures implemented in Gmsh. Those specific features are also explained in the paper.

The paper is divided in three sections. The first section deals with the procedure for building CAD models of ocean geometries. The second section describes mesh generation procedures. In the last section, we provide illustrative examples with diverse simulation results.

2 A geometric model for the World Ocean

Any 3D model can be defined using its BRep: a volume (called region) is bounded by a set of surfaces, and a surface is bounded by a series of curves; a curve is bounded by two end points. Therefore, three kinds of model entity are used: model vertices \(G^0_i\) (dimension 0), model edges \(G^1_i\) (dimension 1), and model surfaces \(G^2_i\) (dimension 2).

Model entities are topological entities, i.e., they only deal with adjacencies in the model. A geometry has to be associated to each model entity. The geometries of curves and surfaces are their shapes. A parametrization of the shapes, typically a mapping, is usually available.

The geometry of a model edge is its underlying curve defined by the parametrization:

$$ t\in \mathcal{R} \mapsto \boldsymbol{p}(t)\in \mathcal{R}^3. $$

Similarly, the geometry of a model surface is its underlying surface defined by the parametrization:

$$ (u,v)\in \mathcal{R}^2 \mapsto \boldsymbol{p}(u,v)\in \mathcal{R}^3. $$

If a curve is included within a surface, it is usually drawn on the parameter plane (u,v) of the surface:

$$ t \in \mathcal{R} \mapsto (u(t),v(t)) \in \mathcal{R}^2 \mapsto \boldsymbol{p}\left(u(t),v(t)\right) \in \mathcal{R}^3. $$

As an illustration, let us consider the surface represented in Fig. 1. Most important features of model entities are highlighted in this example:

  • The surface is periodic. A seam curve has been introduced in the list of boundary edges of the surface to define its closure properly.

  • The surface is trimmed: it contains four holes and one of those holes is crossed by the seam.

  • One of the model edges on the closure of the model face is degenerated. Degenerated edges are used to take into account singularities of the mapping. Such degeneracy is present in many surface geometries: spheres, cones, and other surfaces of revolution.

Fig. 1
figure 1

A model surface in real (left) and parametric (right) coordinates. The seam of the surface is highlighted in the left plot

From an engineering point of view, dealing with the geometry of the ocean is dealing with a trimmed sphere—i.e., a surface that is periodic, that is bounded by continents and islands and that has degeneracies at both poles.

2.1 Parametrization of the sphere

Several parametrizations exist for the sphere. CAD systems use spherical coordinates. In geosciences, most of the available data are expressed in the geographic coordinate system, which has the same properties as the spherical coordinate system. Spherical coordinates suffer from all the problems that we have just mentioned before: there exist two singular points in the mapping, leading to the definition of two degenerated edges in the model; one of the coordinate directions is periodic, leading to the introduction of one seam edge; shorelines may cross the seam edge, leading to complexity in the definition of the geometry. It is indeed impossible to choose the seam edge so that it does not cross any shoreline. In Fig. 2, a mesh of the World Ocean built using the spherical coordinate system is shown. The seam passes through the Bering Strait and crosses the Pacific Ocean, ending somewhere in the coastline of Antarctica.

Fig. 2
figure 2

Mesh of the World Ocean using the spherical coordinate system. The seam edge is visible on the right plot

Moreover, the spherical coordinates, as with most of the parametrizations, are not conformal. A conformal mapping will conserve the angle at which curves cross each other. Consequently, in order to obtain an isotropic mesh in real space, one has to build an anisotropic mesh in the parametric plane. In the case of spherical coordinates, the mapping is highly distorted near the singularities, i.e., near the poles. Robust surface meshers might be able to deal with that issue, as illustrated in Fig. 2. Anyway, it is always better to use a conformal mapping, such as the stereographic projection of Fig. 3.

Fig. 3
figure 3

Stereographic projection

Let us consider a sphere \({\mathcal S}\) centered at the origin and of radius R, and one point s. This point lies on the surface of the sphere, does no belong to the oceans, and will be the only singular point of the mapping. A suitable choice for s could be a location in the middle of Kazakhstan, but here, we choose \(\boldsymbol{s} = \{0,0,-R\}\). It corresponds to the South Pole. Antarctica being a continent, this choice makes sense for ocean modeling applications. The stereographic projection consists in projecting points p of the sphere on the plane z = R.

The stereographic projection \(\boldsymbol{u}({\boldsymbol{x}}) = \{u,v\}\) of a point \(\boldsymbol{x}\!=\!\{x,{\kern-.5pt} y,{\kern-.5pt} z\}\) is the intersection of vector \(\boldsymbol{q}\!-\!\boldsymbol{p}\) with z = R:

$$\begin{array}{lll} \label{eq:stereo} \boldsymbol{u}&=&\{u,v\} = \left\{\frac{2R}{R+z}x,\frac{2R}{R+z}y\right\},\\\\ \boldsymbol{x}&=&\{x,y,z\} = \frac{4R^2}{u^2+v^2+4R^2}\left\{u,v,R \left(4 R^2-u^2+v^2\right)\right\}\!. \end{array} $$

Figure 4 shows the World Ocean in stereographic coordinates {u,v}. The outside loop surrounding the domain is the stereographic projection of the Antarctica. The radius of the Earth is chosen arbitrarily to R = 1. No seam is required to define the overall domain and no singular point exists in the domain of interest.

Fig. 4
figure 4

The World Ocean in stereographic coordinates. The North Pole is the center, Antarctica constitutes the external boundary

2.2 Coastlines definition

Today, the most accurate shoreline database is the Global Self-consistent Hierarchical High-resolution Shorelines (GSHHS, (Wessel and Smith 1996)). This data set describes the Earth’s coastlines with a global resolution of about 50 m. GSHHS data are guaranteed to be self-consistent, i.e., coastlines in the database do not intersect themselves. In our approach, we define a size field \(\gamma(\boldsymbol{x})\) that expresses the geometrical requested accuracy of the model at any point x. The GSHHS data set is coarsened with respect to this size field and every successive point at x that is closer than \(\gamma(\boldsymbol{x})\) is collapsed.

A coastline is defined in practice as a periodic curve. A first approach could be to use a piecewise linear definition for defining such a curve. A first naive approach would consist in defining such a curve by a piecewise linear interpolation. However, in order to enjoy more flexibility, we use here cubic B-splines with control points taken in the GSHHS database. As B-splines remain inside the convex hull defined by the control points, it can be shown that, if the piecewise linear representation is convex and consistent, then the curvilinear B-splines representation is also consistent.

In Fig. 5, we generate the coastlines of Great Britain and Ireland with different resolutions. With a resolution γ = 100 km, we only consider Ireland and Great Britain, and we neglect all smaller islands. With a resolution of γ = 15 km, 15 contours appear in the domain. Typically, the Isle of Wight is now included. With a resolution of γ = 1.5 km, the domain contains 152 islands. With a resolution of γ = 150 m, the domain contains 2,176 islands and a total of 83,277 control points.

Fig. 5
figure 5

Great Britain and Ireland with resolutions of 100 km (top/left), 15 km (top/right), 1.5 km (bottom/left), and 150 m (bottom/right). Splines control points are depicted on the geometry with the two lowest resolutions

3 Mesh generation

As an accurate representation of the boundaries is now available, the next task involves the generation of finite element meshes on curved surface. Two major approaches are available:

  • Techniques for which the surface mesh is generated directly in the real 3D space

  • Techniques for which the surface mesh is generated in the parametric plane of the surface

When a parametrization of the surface exists, building the mesh in the parametric plane appears to be the most robust choice.

3.1 Definition of a local mesh size field

The aim of the mesh generation process is to build elements of controlled shape and size. Mesh generators are usually able to adapt to a so-called mesh size field. An isotropic mesh size field is a scalar function \(\delta(\boldsymbol{x})\) that defines the optimal length of an edge at position x of the real space. In the domain of ocean modeling, there exist some heuristics on the way mesh sizes should be distributed in the World Ocean.

The mesh should take into account the bathymetry. The bathymetry H(x) is taken into account in two ways, leading to two fields f 1 and f 2. Gravity waves move at speed \(\sqrt{gH}\), with g being the acceleration of gravity. The lengthscale λ of a gravity wave is therefore proportional to \(\lambda = {\mathcal O}(1/\sqrt{H})\). If we consider that N mesh sizes are necessary to capture one wavelength, and if \(\lambda_\text{min}\) is the smallest wavelength that has to be captured for a reference bathymetry H ref , we define f 1 as

$$ f_1(\boldsymbol{x}) = \frac{\lambda_\text{min}}{N} \sqrt\frac{{H_{ref}}}{{H(\boldsymbol{x})}}. $$

Another way of taking into account the bathymetry is to force the mesh to capture its variations with a given accuracy (Gorman et al. 2006). Bathymetry can be seen as a scalar field defined at mesh vertices and interpolated piecewise linearly. As the first term of error in its interpolation is supposed to depend on \(\lambda_{\text{max}}\), the greatest (in absolute value) eigenvalue of the Hessian \(\mathcal{H}(x)\),

$$ \mathcal H(\boldsymbol{x}) = \nabla\nabla\left(\frac{H(\boldsymbol{x})}{H_{ref}}\right), $$

we define the second field as:

$$ f_2(\boldsymbol{x})=\frac 1{\sqrt{\lambda_\text{max}}}. $$

In order to represent coastlines well and to capture the small-scale phenomena generated by the friction on the coasts, mesh size should be even smaller near coastlines. This criterion has already been used in the literature (e.g., Legrand et al. 2006). We define a first field \(f_3(\boldsymbol{x})\) as the distance to the closest shoreline:

$$ f_3(\boldsymbol{x})=d(\boldsymbol{x}). $$

This field f 3 is also called a shore proximity function.

This distance can be computed in place using the Approximated Nearest Neighbor Algorithm (Arya et al. 1998).

For each criterion field f i , a mesh size field δ i is computed as follows:

$$ \delta_i(\boldsymbol{x})=\delta^\text{small}_i+\alpha_i(\boldsymbol{x})\left(\delta^\text{large}_i-\delta^\text{small}_i\right), $$

where

$$ \alpha_i(\boldsymbol{x})=\left\{ \begin{array}{ccc} 0 & \mbox{~if~} & f_i(\boldsymbol{x}) \leq f^\text{min}_i\\ \large \frac {f_i(\boldsymbol{x})-f_i^\text{min}}{f_i^\text{max}-f_i^\text{min}}& \mbox{~if~} & f^\text{min}_i < f_i(\boldsymbol{x}) < f^\text{max}_i\\ 1 & \mbox{~if~} & f_i(\boldsymbol{x}) \geq f_i^\text{max}\\ \end{array} \right. $$

with \(\delta^\text{large}_i\) and \(\delta^\text{small}_i\) as large and small desired mesh sizes and \(f^\text{max}_i\) and \(f^\text{min}_i\) as two field values that define the zone of refinement. The final size field is simply computed as the minimum of all size fields:

$$ \delta(\boldsymbol{x}) = \min{(\delta_1(\boldsymbol{x}),\delta_2(\boldsymbol{x}),\dots)}. $$

Finally, it is always possible to add other size fields as error estimators that may depend on the finite element solution.

In Fig. 6, we consider a straight edge e described by its vector e in the parametric plane, where the mesh generation process is performed. Its length L is computed as follows:

$$ L = \int_e \sqrt{\|d\boldsymbol{x}\|^2} = \int_e{\sqrt{d\boldsymbol{u}^{\;T} {\bf J}^T \; {\bf J} d\boldsymbol{u}\;}} = \int_0^1 \sqrt{\boldsymbol{e}^{\;T} {\bf M} \boldsymbol{e}} \;dt $$

where \({\bf J}=\partial{\boldsymbol{x}}/\partial{\boldsymbol{u}}\) is the Jacobian of the mapping and M = J T J is the metric tensor. In the case of a stereographic projection, both eigenvalues of M are positive and equal:

$$ \lambda(\boldsymbol{u}) = \left(\frac{4 R^2}{u^2 + v^2 + 4 R^2}\right). $$
Fig. 6
figure 6

Three parametrizations of a straight edge

To obtain the mesh in the parametric space but with the right sizing in the real space, a suitable mesh size field \(\delta_u(\boldsymbol{u})\) has to be defined in this parametric plane. As the stereographic projection is a conforming mapping, it can be defined with a simple scaling:

$$ \delta_u(\boldsymbol{u}) = \delta(\boldsymbol{x}(\boldsymbol{u})) \frac{1}{\lambda({\boldsymbol{u}})}. $$

3.2 Coastlines mesh generation

Let us consider a curve in the parametric plane \(\boldsymbol{u}(t) : [0,1] \rightarrow \mathcal{R}^2\). The number of subdivisions N of the curve is the following function of the size field

$$ N=\int_{0}^{1} \frac{1}{\delta_u(\boldsymbol{u}(t))} \| d_t \boldsymbol{u} \|dt, $$

where \(\| d_t \boldsymbol{u} \| = \sqrt{(\partial_{t} u)^2+(\partial_{t} v)^2}\). The N + 1 mesh points on the curve are located at coordinates {t 0,...,t N } where t i is computed using the following rule:

$$ i = \int_{t_0}^{t_i} \frac{1}{\delta_u(\boldsymbol{u}(t))} \| d_t \boldsymbol{c}\|dt. $$

Integration of those expressions must be performed with an adaptive trapeze rule, as coastlines are discretized with cubic splines that contain a large number of control points. Typically, Europe and Asia are discretized by only one spline with more than 20 thousand control points (Fig. 4).

However, this algorithm does not guarantee that, even if the model edges \(G^1_j\) that constitute the boundaries of the domain are nonintersecting, the corresponding 1D meshes do not self-intersect. Figure 7 shows two islands very close to each other. Yet, even if the geometry is itself not self-intersecting, the first 1D generated mesh intersects itself. This can be considered as a critical issue: modifying the mesh size field by hand locally cannot be considered when several thousand islands are to be involved. It is therefore mandatory to define a systematic recovery procedure. Such an algorithm, illustrated in Fig. 7, works as follows:

  1. 1.

    A Delaunay mesh that contains all points of the 1D mesh is initially constructed using a divide-and-conquer algorithm (Dwyer 1986).

  2. 2.

    Missing edges are recovered using edge swaps (Weatherill 1990). If a mesh edge e i that belongs to the 1D mesh is to be swapped for recovering edge e j , then the mesh edges e i and e j that both belong to the 1D mesh intersect.

  3. 3.

    All intersecting edges e k are split in two segments and the new point is snapped onto the geometry. Then, we go back to the first step until the list of intersecting edges is empty.

If an intersecting edge is smaller than the geometrical tolerance, then an error message is thrown claiming that the geometry is self-intersecting. Note that when a unique mesh edge connects two different islands, those islands are numerically merged if a nonslip boundary condition is applied along their coastlines.

Fig. 7
figure 7

A geometry with two islands (in light and dark gray) that are very close to each other. The top image shows the initial 1D mesh that respects mesh size field. The middle image shows the first iteration of the recovery algorithm. The bottom image shows the final mesh that was possible to realize after two recovery iterations

3.3 Surface mesh generation

To generate a mesh on the sphere, three approaches are available in Gmsh software. All of them start with an initial Delaunay mesh that contains all the mesh vertices of the contours. Then, every mesh edge of the 1D mesh is recovered using edge swaps. Then, internal vertices are iteratively inserted inside the domain. The way points are inserted differently in the three algorithms:

  • The del2d algorithm is inspired by the work of the GAMMA team at INRIA (George and Frey 2000). New points are inserted sequentially at the circumcenter of the element that has the largest adimensional circumradius. The mesh is then reconnected using an anisotropic Delaunay criterion.

  • In the frontal algorithm (Rebay 1993), new points are inserted optimally on Voronoï edges. The mesh is then reconnected using the same anisotropic Delaunay criterion as the one in the del2d algorithm. Note that this algorithm’s implementation only differs slightly from that of algorithm del2d.

  • The meshadapt algorithm is very different from the first two ones. It is based on local mesh modification: This technique makes use of edge swaps, splits, and collapses. Long edges are split, short edges are collapsed, and edges are swapped if a better geometrical configuration is obtained.

The frontal algorithm usually gives the highest-quality meshes while the del2d algorithm is the fastest: it produces about five million triangles a minute if the size field δ is not too complex to compute. Figure 8 presents three meshes of one of the models of Fig. 5 for which we have used a shore proximity function as the only size field. Meshes have, respectively, 18,698, 19,514, and 17,154 triangles. The percentage of elements that have an aspect ratio ρ > 0.9 is, respectively, 93.2%, 88.1%, and 84.5%. CPU time for generating meshes was, respectively, 0.7, 0.5, and 5.7 s.

Fig. 8
figure 8

Meshes of the same domain using three different algorithms (ac)

Figures 9 and 10 present a mesh of the World Ocean that makes use of all size fields defined in Section 3.1:

  • A shore proximity function f 1 is used with \(\delta^\text{small}_1=30\) km, \(\delta^\text{large}_1=200\) km, \(f^\text{min}_1 = 0\), and \(f^\text{max}_1 = 500\) km.

  • We use f 2 and refine the mesh proportionally to the square root of the ocean depth. The size field δ 2 ranges from 25 to 500 km.

  • We use f 3 to capture the bathymetry. The size field δ 3 ranges from 25 to 500 km.

The resulting mesh is generated of 436,409 triangles and the whole mesh generation process (data loading, coastline reduction, 1D mesh generation, 2D mesh generation, output files writing) takes 35 s on a recent laptop. Those timings compare advantageously with alternative techniques based on mesh decimation (Gorman et al. 2006). The memory footprint of the meshing algorithms is low: about 12 million triangles (six million nodes) can be generated per gigabyte of memory.

Fig. 9
figure 9

Mesh of the World Ocean. The mesh size field is defined using a shore proximity function, the bathymetry, and its Hessian

Fig. 10
figure 10

Close up of the mesh of Fig. 9 in the north Pacific Ocean; color levels represent the bathymetry (in meters). The effects of the three refinement rules are clearly visible

4 Examples

In the mesh generation community, it is assumed that a good paper should present nice pictures of meshes. We will not circumvent that prerequisite. Yet, mesh generation is usually considered as a tool, not as an aim. Therefore, the meshes that we present in this section are accompanied by some simulation results.

4.1 Sea ice modeling

The mesh presented in Fig. 11 was used to investigate the sensitivity of the Arctic sea ice cover features to the resolution of the narrow straits constituting the Canadian Arctic Archipelago. This mesh constitutes of 17,053 triangles with a resolution of 20 km near the islands in the archipelago and 40 km elsewhere. Far from coasts and islands, the resolution decreases up to 300 km. Model results are shown in Fig. 12. A complete description of the model and its validation can be found in Lietaer et al. (2008).

Fig. 11
figure 11

Mesh of the Arctic region (north of the parallel 50 degrees North) especially refined along coastlines and in the Canadian Arctic Archipelago

Fig. 12
figure 12

Detail of the mesh of Fig. 11. Mean March sea ice thickness pattern (in meters) in the western part of the Canadian Arctic Archipelago as computed by the finite element sea ice model (1979–2005)

4.2 Multiscale model of the Scheldt River

Within the framework of the multidisciplinary project TIMOTHY,Footnote 1 our team is presently involved in the development of a 2D hydrodynamic model of the Scheldt Estuary in the Netherlands. Our main goal in this project is to take advantage of the finite element method to study very specific ecological problems, such as the dynamics of fecal bacteria or heavy metals. We also intend to study the characteristic time scales determining the physics and the biology in the estuary. In this model, the tide is forced at the shelf break, which is more than 1,000 km away from the mouth of the estuary, and the upstream boundary is situated in the areas of Antwerp, where the river width is a few hundred meters. The multiscale character of the problem is then one of its main feature and the use of an unstructured grid is thus totally appropriate. Figure 13 presents a mesh of 27,472 elements used in our preliminary runs. Various criteria based on the distance from coasts, islands, and shelf break are used to define the mesh size fields. The element sizes range from 150 m in the Scheldt river near Antwerp to about 50 km away from the coastlines.

Fig. 13
figure 13

Multiscale mesh: North Sea and Scheld River Estuary. Color levels represent the amplitude of the M2 tidal component (in meters)

4.3 The Great Barrier Reef

Our research team has developed the first multiscale hydrodynamic model of the whole Great Barrier Reef. The Great Barrier Reef is on the continental shelf of the Australian northeastern coastline. There are over 2,500 coral reefs in a strip that is about 2,600 km in length and 200 km in width. The simulation that is presented here makes use of most of the specific mesh generation features that were presented in this paper: a geometric domain with multiple scales, use of a shore proximity function, grid adaptation with respect to the bathymetry, and special refinement in the domain of interest. A complete simulation is described in Lambrechts et al. (2008). Figure 14 shows a mesh built to run small simulations on a single CPU to study a specific region while keeping the boundary conditions of the complete simulation. Around a specific island (Lizard Island), the resolution is sufficient to capture some small-scale hydrodynamic features like tidal jets in small interreef passages and recirculations around islands. Elsewhere on the shelf, the resolution is very coarse, those regions are only used as boundary conditions. Seventy percent of the 20,384 elements are located in the refined region. A plot of velocity vectors is also presented. Tidal jets and eddies due to the interaction of the flow with the topography near the open-sea boundary are clearly visible. Those small-scale features were captured thanks to the accurate description of the bottom topography.

Fig. 14
figure 14

Coarse mesh of the Great Barrier Reef refined around Lizard Island (top). Details of the simulation computed on this mesh in the vicinity of this island (bottom). Color levels show the depth and the arrows indicate the bidimensional velocity field

5 Summary

A CAD-based mesh generation procedure for ocean modeling has been developed. The new approach has the advantage of relying on existing well-known engineering mesh generation procedures. The CAD model, based on a smooth BRep of the domain, allows to build a compact, self-consistent, and portable geometric model. Existing robust meshing procedures can be applied to the CAD model. Various meshes can be constructed based on the same CAD definition, and various meshing algorithms can be used as well. Last but not least, everything that has been described in this paper is now part of Gmsh, a 3D finite element mesh generator with built-in pre- and postprocessing facilities (http://www.geuz.org/gmsh. Since Gmsh is open-source (under the GNU General Public License), anyone within the finite element marine modeling community has the opportunity to use this freely.