The GEF File Explained: How a CPT Sounding in GEF Format Is Built Up
GEF (Geotechnical Exchange Format) has been the standard for exchanging geotechnical site investigation data in the Netherlands for decades. Virtually every geotechnical design program reads GEF soundings. The format is surprisingly simple — plain text — but precisely because of that, a lot goes wrong in practice with hand-made or converted files. Below, the anatomy of a GEF CPT file and its pitfalls.
Structure: header and data
A GEF file consists of two parts. First a header with lines starting with
#, terminated by #EOH= (end of header).
Then the data follows: one line per measurement point, usually space- or
semicolon-separated numbers.
#GEFID= 1, 1, 0
#COLUMN= 2
#COLUMNINFO= 1, m, Sondeerlengte, 1
#COLUMNINFO= 2, MPa, Conusweerstand, 2
#ZID= 31000, 1.49, 0.01
#EOH=
0.0000e+000 1.6300e+000
The most important header lines
-
#COLUMNINFOdescribes, for each column, the unit, the name and a standardized column number. For CPTs, column type 1 is the penetration length (m) and column type 2 is the cone resistance (MPa). Software identifies the columns by this number, not by their order. -
#ZIDis the reference level: the level of the zero point of the penetration length, almost always relative to NAP, the Dutch vertical datum (code 31000). If it says 1.49, the starting point of the sounding lies at NAP +1.49 m. -
#XYIDcontains the coordinates, in the Netherlands usually in the Dutch RD (Rijksdriehoek) coordinate system (code 31000). -
#COLUMNVOIDdefines, per column, the value that means "no measurement". Your program must skip lines containing that value. -
#PROCEDURECODE/#REPORTCODEindicate which GEF dialect the file follows; for CPTs this isGEF-CPT-Report.
Penetration length is not depth (and not an NAP level)
The first column is the penetration length: the distance
traveled by the cone from the starting point, positive downwards, starting at 0.
Your design program derives the NAP level from it as
level = ZID − penetration length. Three things often go wrong here:
- Putting levels relative to NAP directly into column 1. The file appears to work, but the sounding ends up at the wrong elevation or upside down in your software.
- Negative or decreasing penetration lengths: many readers reject the file or interpolate nonsense.
- A
#ZIDthat doesn't match the data, shifting all layers.
If you digitize an old sounding whose depth axis is in NAP levels, convert it
to penetration length from the highest point. The
CPT Converter does that automatically and writes the
corresponding level to #ZID —
here's how that works in practice.
Common import errors
- Missing
#in front of header lines: the file is then rejected as unreadable. - Commas as decimal separator: GEF uses points.
- Wrong units: cone resistance belongs in MPa. Old sheets sometimes state kgf/cm² — almost exactly 0.1 MPa (10 kgf/cm² ≈ 1 MPa).
- Unsorted data: measurement points must run from shallow to deep.
GEF and the future: BRO and XML
Since the introduction of the BRO (the Dutch Key Register of the Subsurface), new CPTs are delivered as IMBRO XML. For day-to-day design practice, however, GEF remains the lingua franca for now: virtually all software reads it, and the archive of existing GEF files is enormous. For digitized historical soundings, GEF is therefore still the natural target format.