Appearance
Drillholes, wireframes and block models
From holes in the ground to a grade-tonnage curve.
Three screens, in the order a resource is actually built.
Drillholes
Mining → Drillholes
Every hole filed against the account. The register's job is not really to list holes — it is to answer is this database sound, which is a question nothing in the files themselves can answer and which almost nobody asks until a figure comes out wrong.
Getting your database in
Import drillholes takes the three files a drillhole database actually is, joined on the hole name: collars, downhole surveys, and one or more interval tables (assay, lithology, recovery — you name each one).
They can come out of acQuire, Surpac, Datamine or a spreadsheet somebody keeps by hand, as .csv, .txt or .dat. Because none of those agree on column order, the reader proposes a mapping from the header row and you confirm it before anything is filed.
Assemble reads the files and shows what they hold without filing anything. File commits the holes against the item.
The easting and the northing are the pair to check
Mapped the wrong way round, a collar file loads perfectly, builds a perfectly good database, and puts every hole in the wrong place — mirrored about the diagonal, which on a north-south orebody looks almost plausible.
Without a downhole survey a hole holds its collar attitude all the way down
Right for a short hole, optimistic for a long one. Dip left unset is taken as vertical.
See Working with other packages for the whole exchange, in both directions.
Validation lives on the register, not inside a hole
A duplicate hole identifier cannot be seen from inside a single hole, and it is the worst fault available: two holes' intervals silently become one hole's, at two different places in space.
So Validate checks the whole database at once and reports findings against named holes and depths — "DDH014 at 45 m", not "invalid interval table". Each hole in the register carries its own count of errors and warnings.
What it looks for:
| Group | Examples |
|---|---|
| Collars | No identifier; duplicate identifier; no depth; a dip pointing upward; an azimuth out of range; a position that cannot be placed |
| Downhole surveys | A survey past the end of hole; duplicated depths; an implausible dogleg between two stations |
| Intervals | Overlapping intervals; inverted from-to; gaps beyond tolerance; an interval past the end of hole; suspiciously long intervals |
| Values | Negative grades or recoveries, where you have said a field may not be negative |
Everything found is in the export, not just the first eight shown on screen.
The database in plan
The sheet icon in the register's header draws every hole looking straight down. Each hole is drawn where its downhole survey says it went and named with its depth and, where it is not drilled straight down, its inclination.
Plan sheet, above the drawing, puts the same holes on the sheet a survey plan prints on: the paper, orientation and scale you choose, the four corner blocks, and a print at true size. Every hole is marked at its collar, with a line to where it ended, and named. If you have narrowed the drawing to some deposits, the sheet carries the same holes. Where a scale leaves labels running into each other, or a hole off the map, the sheet says so and names a larger scale.
Once Validate has found something, Hide … with warnings or errors above the drawing leaves those holes out of the plan, the three-dimensional view and the plan sheet, to see the holes that can be relied on. The register still lists every hole.
One hole
Open a hole for where it went, what was in it, and what is wrong with it.
Depth along the hole is not elevation
A hole's interval depths are measured along the hole. Where 100 m actually is depends entirely on the downhole survey: at −60° it is 50 m away from the collar and 86.6 m down; at −90° it is directly underneath.
Treating depth as elevation is the most expensive mistake available in this whole module, because it produces a model wrong by tens of metres that looks entirely reasonable. So the desurveyed position is shown beside every interval, on the mine grid, where it can be read against a plan.
Composites are shown, not implied
Raw samples come at whatever length the geologist logged. An estimation run that mixes 0.3 m and 4 m samples weights them as if they were equal.
The composites shown on the hole are exactly the ones an estimate would use, so the step that most changes a resource is visible rather than buried in a run.
Composite by asks which of two questions you are putting to the hole:
| Composite by | Answers |
|---|---|
| A fixed length | What would an estimate see? Equal lengths, because an estimator weights every sample alike. |
| What the ground is | What does this hole intersect? One row per continuous run of the same ground, however thick, broken on the logged column you name — usually lithology or ore type. |
A run ends where that column's value changes, or where the sampling stops: a composite spanning ground nobody logged would look exactly like one that is solidly sampled. Grades inside a run are weighted by length.
Domain composites are shown, never handed to the estimate
Fixed lengths exist so that every sample carries the same weight. A two-metre band beside a hundred-and-twenty-metre one would break that quietly, so the estimate keeps its own compositing and this view sits where its question is asked: reading a contact, and the thickness of a band.
Wireframes
Mining → Wireframes
Geological interpretations as solids. Outlines are drawn section by section against the holes that pierce them, and the skin between them is tied into a closed body that can be measured — and used to decide which blocks of a model are ore.
A first pass from the drilling
Outlines can be typed or pasted, but on an item that already carries holes the editor offers Build from drillholes instead — and that is the honest place to start, rather than pasting coordinates out of another package.
| You give it | What it is |
|---|---|
| Table, Field, Cut-off | Which interval table the cut-off reads (usually assay), the field it applies to, and the value at or above which an interval is ore. A missing assay is never treated as barren |
| Section bearing | The direction sections are stacked along — normally the strike, so each section looks across the body |
| Section spacing | Distance between sections. Usually the drill spacing |
| Minimum half-width | A section with one intercept is a line, and a line lofts into nothing. It is given this width rather than dropped, because dropping it silently shortens the body at exactly the ends where the drilling is thinnest |
Build the sections reads every hole whole, takes the intervals above the cut-off, cuts them into sections along the bearing and puts a convex hull round the intercepts on each one. What comes back replaces the section boxes and is then edited by hand — which is the point.
A hull, in one sentence
The smallest outline that contains a set of points with no dents in it — hammer a pin in for each intercept, stretch a rubber band round the outside, and let it snap tight. Everything is inside, and the shape bulges outward everywhere and never inward. That last part is the whole limitation below.
This is a shape to edit, never a shape to report
Interpretation is the only step in the chain that is a judgement rather than a calculation. A geologist draws an orebody using structure, logging and everything they know about the deposit, none of which is in the assay table. A hull per section:
- cannot be concave, so a crescent lens comes back as the block that contains it and the barren middle is counted as ore;
- bridges separate shoots on one section into a single body;
- knows nothing about structure — a fault offset between two sections is lofted straight through;
- stops at the outermost hole, so a body open along strike is closed off at the drilling rather than projected.
All four make the solid larger in the middle and smaller at the ends, which is the wrong direction for a resource.
So it never runs silently. It reports how many sections it drew, from how many intercepts in how many holes, and how many metres of ore — then the warnings in full: the hull caveat every time, how many sections were widened rather than dropped, any gap between sections too large to tie together ("they may well be two bodies"), and how many holes carry nothing above the cut-off, since those are what bound the body.
Every row is re-measured rather than trusted
A wireframe's volume comes from the divergence theorem, which is exact only over a closed boundary. On an open mesh it still returns a number — plausible, stable between runs, and wrong.
A solid with one triangle missing reports a tonnage nothing questions
So the register does not show a stored volume. It rebuilds each solid from its own sections, checks that the result is closed, and shows the tonnage only where it is. An unclosed wireframe says so instead: a missing figure is a question somebody asks, and a wrong one is a figure somebody reports.
The checks, in the words the screen uses:
| What is wrong | What it means |
|---|---|
| An edge used by only one triangle | The solid is not closed. An uncapped end is the usual cause. |
| An edge used twice in the same direction | A triangle is inside out, so its part of the body is being subtracted rather than added. |
| An edge joining more than two triangles | The mesh has no consistent inside. |
| A triangle with no area | Contributes nothing but confusion. |
| A triangle referring to a point the mesh does not have | The section outlines and the skin disagree. |
A tonnage needs both a closed solid and a density on the wireframe. Where either is missing, the volume stands alone.
The skin is tied from the outlines each time it is drawn rather than stored, so what you see is always the shape the sections currently make. View in 3D to turn it.
Taking a solid away
The same action that opens a solid offers it as a file, on the mine grid: LandXML with its faces, a DXF drawing of one 3D face per triangle, or a Surpac string file of the section outlines.
See Working with other packages for which to reach for.
Block models
Mining → Block models
The deposit divided into blocks, with a grade on every one.
The curve is the point
A block model is four million numbers. Nobody reads it. What gets read — in the schedule, in the cut-off decision, in the annual report — is the grade-tonnage curve: how much ore there is above each cut-off, and at what grade.
Choose the model, say which field carries the grade, and set the cut-offs. The table reports tonnes, grade and contained metal at each one.
Two other fields change the tonnage and are worth setting deliberately:
- Ore fraction — how much of each block is ore. Without it every block counts whole, which overstates the tonnage on every block at the edge of the orebody.
- Density — a field where it varies block to block, otherwise one figure for the whole model. Everything on the curve scales directly with it.
Two easy ways to get this arithmetic wrong
Both look fine on the page, so both are handled for you:
- The average grade above a cut-off is weighted by tonnes, not by block count. Blocks differ in tonnage whenever density varies or partial blocks are used, and the unweighted mean is a different, wrong number.
- A block with no estimate is left out, not counted as zero. Treating an un-estimated block as barren adds tonnes at zero grade to every row.
The same rules are used wherever else the figure is computed, so the number on this page and the number computed anywhere else are the same number.
Estimating a grade onto the model
Estimate runs an interpolation from the drillholes around each block.
| Method | When you would use it |
|---|---|
| Ordinary kriging | Weights derived from a fitted variogram, with a variance alongside. The standard for a reported resource. |
| Inverse distance | Weights by one over distance to a power. No assumptions, defensible to anybody, and knows nothing about how the deposit behaves. |
| Nearest neighbour | The closest sample and nothing else. Never smooths, so it is the reference a kriged model is judged against rather than a block value. |
You also set the composite length, the search ellipsoid (major, semi-major and minor axes, azimuth and dip), the minimum and maximum samples, a maximum per hole, and — for kriging — the variogram: a nugget plus nested structures.
Checking the variogram against the samples
The nugget and sill describe how quickly grades stop resembling each other with distance, and kriging derives every weight from them — so a model that describes a different deposit gives weights that look exactly like the right ones. Under How grades behave, Plot what the samples say draws the experimental variogram from the composited samples, with the model you typed drawn over it, using the very curve the estimator will use.
| Setting | What it does |
|---|---|
| Lag | Bin width in metres. About the drill spacing is the usual start; much finer and each bin holds too few pairs to mean anything. |
| Bins | How many bins to carry. Past about half the deposit's extent the pairs run out and the curve becomes noise. |
| Along the axis | Pairs only samples lying within 22.5° of the search ellipsoid's own direction. |
Read the two against each other. A curve well above the points overstates how far grades carry and smooths the estimate; one below will chase noise. Bins with few pairs are drawn small and hollow, so a model is not fitted to them. Plot with Along the axis on and off: the two curves reaching their sill at different distances is the anisotropy, measured rather than assumed.
Provenance is kept
Every estimated field records which method and which search produced it, the run it came from, how many blocks were estimated and how many were left alone.
A grade nobody can state the provenance of is a grade nobody can defend
That table is why it is on the screen rather than in a log file.
Looking at it
The viewer draws every estimated block above a cut-off, coloured blue through red with grade. Draw above leaves lower-grade blocks out of the picture entirely, so the ore is not hidden inside a lattice of waste.
Blocks with no estimate are not drawn. They are not barren — they are unspoken about.
Taking the model away
Download as CSV writes the model as CSV: one row per estimated block, with its centroid on the mine grid, its lattice indices, its dimensions and every estimated field. That is what Surpac, Datamine and Vulcan all import, and what a consultant will ask for. The screen says how many blocks it wrote, because only the estimated ones are in the file.
Every block as CSV writes the whole lattice, blanks and all, for a scheduler that will cut the model against its own solids and needs to know where the air is. Definition as JSON writes the lattice alone — origin, bearing, block size, counts, attribute names, the model's reference elsewhere and the account's grid — so the far end rebuilds it exactly. See Working with other packages.
Laying stopes out of the model
The underground twin of the pit optimiser, and it answers the same kind of question one step earlier than a plan does. A plan says when the stopes are mined and what that costs. Lay out stopes says which stopes there are at all, and how the answer moves when the frame or the price moves.
Give it what the rock is worth — the grade field, density, plant recovery, product price, and what a tonne costs to mine and to treat underground — and the shape a stope may be:
| Field | What it is |
|---|---|
| Strike runs along | Which of the model's own axes follows the ore. A resource model is usually built along strike rather than along grid north |
| Sublevel interval, Panel length | How tall and how long one stope is |
| Narrowest, Widest stope | What the equipment can mine and what the ground will stand, across strike |
| Wall slough (ELOS), Slough grade | How far each wall sloughs in, and at what grade. Blank is barren |
| Mining recovery | The fraction of a designed stope actually recovered |
It reports how many stopes pay for themselves out of the panels examined, the tonnes fed and how much of that is slough, the grade the mill sees, and what the layout is worth before development. Then a row per stope: its levels, its width, its feed and slough tonnes, its grade and its worth. The whole thing leaves through the standard take-away actions.
What the ground will stand
The widest stope and the panel length need not be typed from habit. Under What the ground will stand, give the rock mass and its stresses and the dialog works out, by the stability graph for open stopes, how wide a back and how long a panel the rock stands:
| Field | What it is |
|---|---|
| Rock domain | The rock the stopes stand in, from the mine's rock domains. Its UCS is filled in |
| Q′ | Q with water and stress taken as 1: (RQD/Jn)(Jr/Ja) |
| UCS | The intact rock's strength, MPa |
| Stress on the back, Stress on the walls | The induced compressive stress at each surface's centre, MPa, from the mine's stress model or measurements |
| Factor B, back, Factor B, walls | How the critical joint set lies against each surface, from 0.2 to 1, read off the geotechnical engineer's chart |
| Chance of standing | The chance a surface stands that the limits are worked out at. 85 % is a common design line |
Every figure is the mine's own, and nothing is worked out until all are given. Then the dialog says how wide the back stands over the panel length and how long a panel the walls stand over the sublevel interval, warns where the frame asks for more, and offers the width the ground allows. Once laid out, each stope's Back is judged — Stands, Likely to fail or Major failure, with its chance — and the column goes out with the export.
The frame is rounded to whole blocks, and it says so
A stope is built from whole model blocks, so a 25 m sublevel on 10 m blocks is laid out at 30 m and a 3 m minimum width at 10 m. Both are reported rather than silently honoured, because a layout quietly built to a different frame from the one asked for is worse than one that argues.
It files nothing, deliberately
A pit optimiser produces a shell, and a shell is a design you can file and plan against. A stope layout is not a design: it is what a frame and a set of costs imply, and both of those live on the plan, where they are read again every time it computes. Filing the stopes would freeze an answer that is meant to move, and the next reader would have no way of telling which price it was frozen at. To schedule these stopes, open a plan for the item and set its shape to Stopes and headings.
Modelling a seam
A thin seam — a Great Dyke chromitite of 25 to 30 cm, a coal seam, a reef — is a sheet, not a lump, and a block model cannot see it: a 0.3 m seam is 6 % of a 5 m block, and blocks thin enough to hold it are far more than a model may carry. Seams, under Mining, models it the way it lies — as a grid in plan, one cell every few metres, each carrying three figures:
- the level of the seam's floor (its footwall);
- its true thickness, square to the seam;
- its grade, averaged by thickness.
Choose the item, then Model a seam. It reads the item's drillholes and asks how the seam is recognised down them:
| Field | What it is |
|---|---|
| Recognise by | Code — the seam logged as, say, LG6 in a lithology table — or Cut-off — every interval at or above a grade. A code is the better of the two wherever the seam was logged, because a cut-off also picks up disseminated chromite above it |
| Table, Code field, Codes | Where the seam is logged, and the code or codes that mean it |
| Grade table, Grade field | Where its grade is. The grade table need not share the log's boundaries: it is weighted over the seam's own two contacts |
| Join gap | Seam intervals closer than this down the hole are one crossing — a parting thin enough to mine with it |
| Cell size | The grid's cells, metres. A quarter of the drill spacing is usual |
| Seam density | The seam's own, t/m³ — chromitite is nearer 4 than the 2.7 of its host |
| Dip, Dip direction | Typed only where the holes cannot say: the seam's attitude is otherwise fitted through the crossings |
| Estimator | Nearest, inverse distance or kriging, with its search — as for a block model |
Preview shows each hole's crossing — its contacts, true thickness and grade — the holes that never crossed the seam, the dip it was read at, and what the grid holds: cells estimated, plan and true area, tonnes, mean thickness and grade. Save files it; Estimate again re-runs a filed seam with changed settings and replaces its grid whole.
Thickness, and why grade is averaged by it
A hole not square to the seam reads it long: a vertical hole through a seam dipping 15° reads it 3.5 % long, an angled one longer still. Each crossing is corrected to the thickness square to the seam using the seam's dip. The grade is then estimated through the accumulation — grade times thickness — and a cell's grade is its accumulation over its thickness, so a thin rich crossing and a thick lean one are weighed by the rock in them.
Where the model stops
With no limit drawn, the seam stops at the outermost hole that crossed it — a seam open along strike is closed off at the drilling, and the model says so. A faulted seam is modelled one fault block at a time; a seam splitting into leaves too far apart to mine as one is two seams.
Lay out panels and Lay out strips preview what the seam holds as panels between levels underground, or as strips from the outcrop, at a frame and a price — the seam's twin of Laying stopes out of the model. Strips need the Ground, which their overburden is read from. Like the stope layout, they file nothing: a layout is scheduled by a plan whose shape is Seam panels or Seam strips. A seam a plan reads cannot be deleted; the refusal names the plans.
Optimising a pit out of the model
The trending icon on Block models opens Optimise a pit: which blocks are worth mining once the waste above each one is paid for, and therefore what shape the pit is. It is offered once the model carries an estimated field.
| Under | You give it |
|---|---|
| What the rock is worth | The grade field, the price per unit of grade, recovery, and the selling cost per unit. |
| What it costs to get at | Density, mining cost per tonne (every tonne), processing cost per tonne (ore only; a block that cannot pay it is mined as waste, which is where the cut-off comes from), and the wall slope from the geotechnical report. |
| Prices to run | Fractions of the price above. Each gives a pit; the small ones sit inside the big ones, and that nesting is the order to mine in. |
| Surveyed ground | Blocks above the ground are air. Without a survey the optimiser pays to move the sky above the deposit. |
The ultimate pit reports value, ore tonnes, stripping ratio and the floor level, then one row per price. Make it a design files the shell's deepest outline as a pit floor under Mine designs, with the bench height, batter angle and berm width you give.
Whole blocks quantise a wall
A slope built out of whole blocks can only ever steepen a wall. The dialog says what slope the pit actually stands at, and how narrow the blocks would need to be for the one asked for. Blocks with no estimate are mined and paid for as waste, never treated.
The optimisation itself runs on the server rather than in your browser, so it needs a connection — this is the one screen in the module that will not work from a vehicle out of signal. What comes back is the answer: the table, the floor outline and the pushbacks. A model past a million blocks is refused rather than part-solved, because a pit optimised over part of a deposit looks exactly like a pit optimised over all of it; re-estimate on a coarser lattice and run it again.
The plan for what next period takes out of that pit is made under Plans.
When something looks wrong
| What you see | Why, and what to do |
|---|---|
| Two holes' intervals appear at one place | A duplicate hole identifier. Validate the register — this cannot be seen from inside either hole. |
| An interval plots far from where the geologist logged it | The downhole survey. Read the desurveyed position beside the interval rather than the depth. |
| A wireframe shows no tonnage | It is not closed, or it carries no density. The register names which. |
| The grade-tonnage curve looks too good | Check the ore fraction and the density before anything else — both scale the tonnage directly. |
| Tonnes appear at zero grade | They should not. Un-estimated blocks are excluded rather than counted as barren; if you are seeing this, the field you chose is not the estimated one. |
| A model will not load | Loading brings every block's values down, so it happens on a deliberate choice rather than on opening the page. Choose the model. |
| Optimise a pit says the model is too big | Past a million blocks it is refused rather than part-solved. Re-estimate on a coarser lattice — a pit optimised over part of a deposit is not a smaller answer to the same question. |
| A hole, wireframe or model is missing entirely | You are not whitelisted on its tracker group. |

