Interactive model · Summary · Full report

Contents

Where does Kite Beach's sand go? A report on the Cabarete–Encuentro sand study

Version 0.11, 12 October 2026 (the version history is at the end). An independent study using free satellite data and open-source models. The models have not yet been checked against measurements in the water, so treat the numbers as first estimates. See also the short summary and the interactive model.

Version 0.11: north swells leave a mark at Kite Beach. A new satellite test asked whether the beaches change after north swells in particular (from about north-north-west to north-north-east), rather than after big swells of any direction. They do, in a small way. A typical north swell leaves the south-east half of Kite Beach about 2 m wider within a few days (90% range 1.2–3.4 m), and western Cabarete Bay about 1.7 m wider. The summer stretch tends to be about 1 m narrower, but less surely. That is the pattern of sand pushed south-east, from the summer stretch into Kite Beach and on past the point, and it fits the wave models. Each step is smaller than the scatter in a single satellite image, so it shows only on average over many swells. With about six north swells a winter, the steps could add up to much of Kite Beach's winter widening, but that is a rough estimate (Section 7.5).

Version 0.10: an error in reading XBeach's currents, found and fixed. XBeach writes its currents, wave forces and sand transport as east and north components. Our scripts treated them as components along XBeach's own grid and turned them a second time, which scrambled the direction of every 2D XBeach current in versions up to 0.9. The scripts are fixed and the existing XBeach runs re-analysed (no new runs were needed). What changed in the conclusions: - At the Kite point the models now agree. XBeach (both pilots) and the current model both run the water near the beach just south-east of the point towards Cabarete Bay. The "unresolved disagreement" of version 0.9 is gone. The waves agree too: SWAN, XBeach and 98% of 103 satellite images taken during swells have them crossing the reef at the point from north of the coast normal. A finer model grid (5 m, with the wave push at 5 m or 2.5 m) does not change the answer (Sections 7.4, 7.5 and 15.7). - Along the coast the two current models now broadly agree, including in the eastern half of Cabarete Bay, where both run the water towards the Kite point. The old "eastern bay disagreement" is gone (Section 7.5). - The Kite Beach channel is a weaker rip than published on typical winter days and in big north-east swells (average about 0.35 and 0.5 m/s, surges up to about 0.6 and 1.1 m/s) and strongest in big north swells (about 1.0 m/s, surges up to about 1.9 m/s). XBeach now confirms the current model's main exit through the lower reef at Kite Beach's north-west end (Section 15.3). - Which way the sand goes at the point is still unresolved. The water near the shore there flows towards Cabarete Bay, so some Kite Beach sand may leave south-east past the point, and some sand from the small beach by the point may carry on into the bay, with the current. But the waves' push along the beach face runs the other way, towards Kite Beach. Neither is measured sand movement (Section 7.4). - Local knowledge (9 October 2026): the bottom is sandy. A local reports that the whole bottom of Cabarete Bay and from Kite Beach to Encuentro is sandy, out past the reefs too, with "lots and lots of sand", visible in the murky water. Our picture of where sand lies came only from the Coral Atlas, a satellite map of reef shapes that does not measure sand, so we now take the local observation as the better evidence (it says nothing about the sand's thickness or grain size). It removes one of our explanations for the failed sand budgets (Section 15.6), makes a flow of sand passing through Encuentro more likely than a shortage of sand (Section 7.4), and makes some sand moving south-east past the Kite point more likely than we said (Section 15.7). No new model results.

Version 0.9: the quality review has been worked through. An independent line-by-line review of the code and of this report (7 October 2026) found problems. The code has been fixed, the analyses rerun, and every affected section rewritten from the new results. What changed in the conclusions: - One test, the 2D XBeach "seasonal reproduction" of Kite Beach, is withdrawn. Every wave condition built the beach in proportion to its wave energy: a start-up effect of the model, not the beach's real response (Section 13.2). This does not mean the models miss the seasons. The waves' push along the shore still reverses with the seasons at Kite Beach's north-west end (Section 7.4), and the summer stretch's width is still predicted from that push (Section 7.3). What no model yet gives is the size of Kite Beach's swing (Section 7.2). - The ten-year trends are weaker than stated. Kite Beach shows no clear trend. The small beach on the Cabarete side of the Kite point is narrowing by about 2 m a year, not widening, and the between stretch is widening. So the satellites do not show Kite Beach gaining sand; the "sand trap" now rests only on where the waves' push meets (Section 7.4). - The waves' potential sand volumes are about twice what was printed (a coefficient error), and the along-shore model now runs on the corrected depths. They are still only the waves' capacity to move sand, not measured movement, and the model still fails beach by beach (Section 7). - The changes after big swells cannot be told apart from chance. At most the summer stretch is about 2.6 m narrower in the ten days after a long-period swell, and even that could be chance (Section 6.3). - The satellite line sits about 10–17 m landward of the water's edge, and sun glint had made summer beaches look 4–5 m narrower (now removed). The timing of the seasons is firm, but the sizes of the swings are uncertain by several metres (Section 3.1). - The water crossing the reef has been recounted (Section 15). The flow pattern stands, but several amounts changed, and the model's edges matter much less than version 0.8 said. Version 0.9 also said that which way the water goes right at the Kite point was unresolved between the two models; that came from the XBeach reading error, fixed in 0.10 (above).

Each finding and what was done about it is in docs/qa/QA_REGISTER.md; the version history at the end lists the fixes.

Executive summary

Where everything is

Where everything is

The places named in this report, from west of Encuentro to east of Cabarete Bay: - Beach stretches: coloured along the waterline. - Surf spots: red triangles. "Cabarete Main Reef" is the surf break about 800 m off western Cabarete Bay, not the reef at Cabarete's eastern point. - The Kite point: the star, where the coast turns from Kite Beach into Cabarete Bay. - Distances along the shore: the white dots, measured from the Encuentro end. The report uses these throughout; for example, Kite Beach is at about 4.8–5.5 km. - The reef and the back-reef: the reef is the line where waves break: about 180–200 m offshore at Encuentro, 450–550 m at Kite Beach, about 600 m at the Kite point and up to 750 m off western Cabarete Bay. The middle of Cabarete Bay has no reef across it. The back-reef is the shallow water between the reef and the beach. We don't call it a lagoon, because locally "the lagoon" means the true lagoon behind Cabarete town.

Two models are named throughout: SWAN, a standard wave model that follows the waves from offshore across the reef to the beach, and XBeach, a standard model of waves, currents and sand in the surf zone (Section 4).

The findings at a glance

Executive summary

A: where the waves push sand along the shore in winter (December–March, blue arrows) and summer (June–August, red arrows). The star marks where the year-average push meets, in the south-east part of Kite Beach. The arrows show the waves' capacity to move sand, not measured sand movement: Kite Beach is a "trap" in the pattern of the push, not in the satellite trends. B: the typical year at Kite Beach and the summer stretch, from ten years of satellite images. They swing in opposite seasons, by about 18–22 m; the timing is firm, the sizes are uncertain by several metres (Section 3.1). C: the coloured bars are the net change over ten years (the trend × 10), with bars of two standard errors either way. Only the small beach by the Kite point (narrowing) and the between stretch (widening) are clearly away from zero; the summer stretch only just. The grey bars are the change in the ten days after a big long-period swell, minus the change after random dates; none stands out from chance (Section 6.3).

The six questions

1. Where does Kite Beach's sand come from, and where does it go? - As far as the waves' capacity goes, Kite Beach is a sand trap. In the monthly averages, the waves inside the reef push sand along the shore into Kite Beach from both ends, and the two pushes meet in the south-east part of the beach, at about 5.2–5.35 km (Section 7.4): - from the south-east, the Cabarete Bay side, in every month's average. The push runs towards the Kite point along the whole of Cabarete Bay and is strongest in its west. The point is rock; sand passes it through the shallow water in front; - from the north-west, from about September to April, when the push from the between stretch also runs into Kite Beach. - This is what the waves could do, not measured sand movement. The satellites do not show Kite Beach gaining sand over the ten years, and the along-shore model that gives the push does not reproduce the sizes of the beaches' changes stretch by stretch (Section 7.2). Locals report that the bottom is sandy almost everywhere, so sand to move is probably not short; whether it actually collects depends on how much of it the waves really move, which depends on its grain size and has not been measured. - Where the sand would come from: mainly western Cabarete Bay. On true north-swell days (about one day in 30, mostly November to April), the push at the south-east end of Kite Beach turns south-east, towards the point; on the Cabarete side of the point it stays towards Kite Beach even then (Section 7.5). - The satellites show the small beach on the Cabarete side of the point trading sand with Kite Beach: it is widest in August and narrowest in April, opposite to Kite Beach. How the sand moves between them is not settled (question 5). - In summer, the north-west end of Kite Beach switches. In June and July most of all, the push there turns north-west, towards the between and summer stretches, and the summer stretch is widest in August–September. - Over most of the coast west of Kite Beach, the push is towards Encuentro, strongest in summer (outside the north-west end's switch above). Yet Encuentro is not filling up: its seasonal swing is small (about 4.5 m, and uncertain) and it shows no clear ten-year trend. Two explanations fit. Little loose sand reaches it, partly because Kite Beach holds sand that would otherwise travel on; or a steady flow passes through, towards Sosúa or offshore, leaving as fast as it arrives. The satellites cannot tell these apart. But locals report that the bottom is sandy from Cabarete Bay to Encuentro and out past the reefs, so the second, a flow passing through, now looks the more likely; the first may still apply close to the beach, if Kite Beach holds the sand moving along the beach face (Section 7.4). - Evidence: the SWAN waves and the along-shore model (Section 7), and the satellite record (Section 3).

2. What conditions build the beach, and what shrinks it? - Kite Beach widens from October to February and narrows from March to September in the typical year. It is widest in February and narrowest in September, about 18 m apart. The timing is firm; the size is uncertain by several metres (14–19 m depending on the method; Sections 3.1–3.2). - The models do show the seasonal switch that most likely causes this. The big seasonal change is in the swell, not the wind. The trade wind blows from about the east in every month's average, a little stronger in June–July. But from about September to April north-east swells dominate, while in summer (about June–August) the waves are mostly short easterly trade-wind waves. From about September to April the waves push sand into Kite Beach from both ends. In June–July the push at the beach's north-west end reverses and drains that end north-west, towards the between and summer stretches (Section 7.4). This is the waves' capacity to move sand, not measured sand movement. - What no model gives yet is the size of Kite Beach's swing. Run forward day by day, the along-shore model gets the timing at Kite Beach roughly right (widest in May, against April in the satellite record over the same test years), but it swings only about 0.5 m against about 17 m observed: one strength setting has to fit the whole coast (Section 7.2). And the beach's departures from its typical year are not predicted by the waves at the beach (Section 7.3). - The summer stretch does the opposite: narrowest in April, widest in August–September. Its width is reproduced from the waves' push along and onto the shore over the previous ~90 days, on years the model never saw. Its skill is +0.46 (90% range +0.30 to +0.57) against a smooth seasonal cycle with a trend, and +0.61 against the average year (Section 7.3; a skill of 0 is no better than the baseline, 1 is perfect). - The 2D XBeach "seasonal reproduction" of earlier versions is withdrawn. It was a start-up effect of the model, not the beach's real response (Section 13.2). That was one failed test, not proof that the models cannot show the seasons. - The wind itself also blows dry sand, mostly in June–August, along the beach towards Encuentro and partly inland. It may add a little to the summer loss, and the sand blown inland is a slow permanent loss, probably a few cubic metres per metre of beach a year (Section 7.6). - Big swells as a whole leave no clear mark on Kite Beach's waterline in the satellite record: no change after big swells stands out from ordinary weeks, although a change of 1–2 m could be missed (Section 6.3). In the XBeach runs they cut the dry upper beach a little and park the sand just offshore, where calmer waves can bring it back (Section 6.4). - North swells are the exception: they widen the south-east half of Kite Beach. A typical north swell leaves it about 2 m wider within a few days, and western Cabarete Bay about 1.7 m wider, while the summer stretch tends to narrow. There are about six north swells a winter, so these steps could account for much of Kite Beach's widening from October to February. That is a rough estimate, and each step is smaller than the scatter between single satellite images (Section 7.5).

3. Sandbars: can we see them? Does sand move left and right, or on and off the beach? - Sandbars can't be seen in 10 m satellite images. Drone time-exposure images or a kayak echo sounder would show them. - Both kinds of movement happen: - Left and right (along the shore) probably drives the seasons, and is where the waves' capacity is largest. The models show the push reversing with the seasons at Kite Beach's north-west end, but not yet the size of each beach's swing. - On and off the beach happens in each swell: the dry beach is cut and the sand is parked just offshore, then returned in calmer weather. - The whole coast is also a little wider in winter. Sand moving along the shore cannot do that, so it must come from the on-and-off exchange or from beyond the study area (Section 7.2).

4. Does surf beat build or erode the beach?

Surf beat is the slow surge of water up and down the beach every minute or two. When a set of bigger waves breaks on the reef, it pushes extra water in towards the beach, and that water drains back out in the lull before the next set.

5. Does Kite Beach sand ever move south-east, towards Cabarete? - According to the waves' push along the beach, very little; but the current near the point runs the other way, so some sand may. - The push runs from western Cabarete Bay, past the Kite point, towards Kite Beach in every month's average, and on the Cabarete side of the point on practically every day (Section 7.5). - At the south-east end of Kite Beach it turns south-east, towards the point, on most true north-swell days. Those are only about 3% of days (north and north-north-east swells together are about one day in eight). - The water near the shore at the point flows towards Cabarete Bay, and both current models now agree on this. In the strip 20–150 m off the waterline just south-east of the point, the current model gives +0.15 to +0.23 m/s towards Cabarete Bay (summer and winter) and XBeach, both pilots on the corrected depths, +0.18 to +0.20 m/s. (Up to version 0.9 XBeach seemed to run it towards Kite Beach; that was an error in how we read XBeach's output, now fixed.) The waves agree too: SWAN, XBeach and the satellite images all have them crossing the reef at the point from north of the coast normal, which pushes the water towards the bay (Sections 7.4 and 15.7). - So the push along the beach and the current a little further out point different ways. The push is the small waves' capacity to move sand along the beach face; the current is driven by the bigger waves breaking on the reef further out. So some Kite Beach sand could leave south-east past the point, and some sand from the small beach could carry on into Cabarete Bay, with the current. Locals report a sandy bottom there, so the current has sand to carry, and some sand moving south-east past the point is more likely than earlier versions said. This is what the models allow, not measured sand movement. Which way wins at the point, and how much sand moves, is still unresolved: the grain size and how much of the sand is loose and stirred up are not known, and nothing has been measured (Section 7.4). - The satellites show sand moving south-east after north swells. After a typical north swell the south-east half of Kite Beach is about 2 m wider and western Cabarete Bay about 1.7 m wider, within a few days; the summer stretch tends to be narrower. So in north swells some sand does pass the point into Cabarete Bay. North swells are uncommon, so this is a few events a year, not the usual direction (Section 7.5). - The small beach on the Cabarete side of the point behaves like a seasonal store. It is widest in August and narrowest in April, opposite to Kite Beach, with a similar seasonal swing of beach area (11,600 against 13,700 m²), and its ups and downs run opposite to Kite Beach's. So the two trade sand, but the satellites do not say by which route. - Over the ten years it has narrowed by about 2 m a year. Where that sand went is not known: Kite Beach and western Cabarete Bay show no clear trend (Section 7.5). - The back-reef water splits along Kite Beach, like water off a ridge. On typical winter days and in big north-east swells the split is at about 5.2 km, so the south-east part of Kite Beach drains into Cabarete Bay; on summer and trade-wind days it moves to about 5.6–5.7 km, at the point, and the whole Kite Beach back-reef drains north-west (Section 15.2). - In the eastern half of the bay the wave push and both current models now all run towards the Kite point (Section 7.5).

6. Does sand move back and forth, or gradually walk one way? - The sand stored on the beaches mostly goes back and forth. Kite Beach swings about 18 m every year, and its ten-year trend (+0.3 ± 0.9 m a year) cannot be told apart from zero. - What the satellites cannot see is sand passing through. They measure how much sand is on each beach, not which grains. A steady flow of sand arriving from the east and leaving to the west, or out to sea, at the same rate would leave the widths unchanged. The waves push sand north-west on most days, and locals report plenty of sand on the bottom, so some through-flow is likely. But the models could not measure it reliably (Section 15.6), so how much sand leaves towards Sosúa or into deep water is still an open question. - Clear slow trends are few (Section 7.4). The small beach on the Cabarete side of the point is narrowing (about 2 m a year) and the between stretch is widening (+0.7 ± 0.4 m a year). The summer stretch may be narrowing slowly (−0.8 ± 0.7 m a year, only just outside zero). Kite Beach, Encuentro and western Cabarete Bay show no clear trend. So the satellites do not show Kite Beach steadily trapping sand. - The waves could move much more sand than the beaches show. Their potential drift from the summer stretch to Encuentro is about 150,000–200,000 m³ a year, yet Encuentro is not growing. Either the supply of loose sand limits the drift, or a large flow passes through; the satellites cannot tell which. Since locals report plenty of sand on the bottom, a flow passing through is the more likely (question 1). - Where sediment leaves offshore: after big winter swells, compared with quieter winter days, the water outside the reef is cloudier all along the coast, Encuentro included, and most of all off Cabarete Bay. There is no extra peak off the Kite Beach exits. That fits plenty of sand on the bottom being stirred up by the swell, as locals see in the murky water; but rain runoff, which often comes with the same swells, has not been separated (Section 15.4).

Also answered

Confidence at a glance

Finding Confidence
Kite Beach widest in February, narrowest in September; the summer stretch the opposite (narrowest in April, widest in August–September) High for the timing; medium for the size (about 14–19 m at Kite Beach depending on the method; Section 3.1)
Ten-year trends: the small beach by the Kite point narrowing about 2 m a year, the between stretch widening Medium; low elsewhere, and Kite Beach shows no clear trend
The reef shelters Kite Beach; the waves at the beach are a few tenths of a metre Medium-high (no wave measurements inside the reef)
The waves' along-shore push: towards Encuentro west of Kite Beach, towards the Kite point in Cabarete Bay, meeting inside Kite Beach Medium (the waves' capacity, not measured movement; the along-shore model fails beach by beach)
The summer stretch's width follows that push Medium (beats both baselines on unseen years; a statistical fit)
The waves push sand onshore at the beach in normal conditions Medium
Big swells cut the dry beach and park the sand just offshore Medium-low (1D XBeach only; the satellites show no change after big swells that stands out from chance)
Which way the water goes right at the Kite point: towards Cabarete Bay Medium (the current model and XBeach agree, and so do the wave directions in SWAN, XBeach and the satellite images; no current measurements). Which way the sand goes there: low (the push along the beach runs the other way; grain size and how much sand moves are unmeasured)
Back-reef flow pattern: north-west behind the north-west part of Kite Beach, out at its north-west end, into Cabarete Bay at the point Medium (holds in every depth version and with both kinds of model edge; agrees with the photos, the satellite breaking and cloudiness, and broadly with XBeach)
Kite Beach channel: a surging rip, strongest in big north swells Medium-low (the channel's depth is a guess)
North swells widen the south-east half of Kite Beach (about 2 m each) and western Cabarete Bay, within a few days Medium (stands out from chance after allowing for the number of comparisons, and holds when the north sector is changed or the 2017 hurricanes are left out; small against the scatter of single images; Section 7.5)
All sand volumes Low (locals report plenty of sand on the bottom, but its grain size, how deep it is stirred and the active beach height are assumed)
How much sand passes through the system to Sosúa or deep water Not yet known (two model budgets failed the satellite test; Section 15.6)
Wind blows sand along the beach and inland, mostly in June–August; a few m³ per metre of beach per year lost inland Low-medium (the ERA5 wind underestimates afternoon winds; the formula tends to overestimate)
Reef depths, and so the sheltering and the capped surf heights Medium-low: the drone depths read deeper than the Atlas, most on the shallow reef. Local knowledge supports the Atlas there, but nothing has been measured directly (Section 3.6)
Surf heights at the spots Medium for patterns, low for exact heights (not yet checked against observations)

1. The short version


2. The coast and the question

The study coast

The study covers about 10 km of the north coast of the Dominican Republic, from Encuentro (west) through Kite Beach and round the Kite point to the east end of Cabarete Bay. A coral reef runs along most of the coast: about 180–200 m offshore at Encuentro, 450–550 m at Kite Beach, about 600 m at the Kite point and up to 750 m off western Cabarete Bay. There is no reef across the middle of Cabarete Bay. Between the reef and the beach is a shallow back-reef.

The questions: 1. Where does Kite Beach's sand come from, and where does it go? 2. What conditions build the beach, and what conditions shrink it? 3. Are there sandbars, and does sand move along the beach or on and off it? 4. Does surf beat build or erode the beach? 5. Does Kite Beach sand ever move south-east, towards Cabarete? 6. Does sand move back and forth, or gradually walk one way?

Added later: what we can learn at Encuentro and Coco Pipe, about sand and about surfing; where the water goes behind the reef, and whether there is a channel (Section 15); and lookup tables for the surf forecast.

Distances in this report are measured along the shore from the Encuentro end (0 km). Encuentro beach is at about 0.4–2.2 km, the summer stretch at 3.1–3.6 km, the "between" stretch at 3.6–4.7 km, Kite Beach at about 4.8–5.5 km, the small beach on the Cabarete side of the Kite point at 5.5–6.0 km, and Cabarete Bay beyond that, to about 8.75 km.


3. What we observed

3.1 Ten years of satellite images

We traced the waterline on cloud-free Sentinel-2 images from 2017–2026, every 25 m along the coast. Sentinel-2 is a free European satellite that passes about every five days. Two sets of images are used: 343 images of the "wide" area (Encuentro to the Kite point, about 7 km of coast) and 325 images of the "coast" area (Encuentro to the east end of Cabarete Bay, 10.1 km).

How the line is found. On each image a computer compares green light with short-wave infrared light (a "water index", here the MNDWI, modified normalised difference water index). Water absorbs infrared light, so it looks dark in that band and sand looks bright. The line where the index changes from "water" to "land" is the traced waterline. Each line is then corrected for the tide at the time of the image (Section 3.5).

Two corrections and one finding in version 0.9 (7 October 2026): - Sun glint is now removed. From April to September the sun is high when the satellite passes, and sunlight reflecting off the sea (glint) makes the water look brighter in the infrared. That made glinted images put the waterline further up the beach, so the beaches looked about 4–5 m narrower in summer than they were. The glint is now measured over open sea on each image and subtracted before the water index is computed. All the satellite widths in this report are from the corrected images. - The traced line is not the water's edge. A close look at the images showed that it sits about 10–17 m landward of the water's edge, in the wet sand. The infrared band has 20 m pixels, which blur across a beach only 20–40 m wide. The line is still a consistent marker from image to image, so its changes measure changes in beach width, as long as the back of the beach stays put. Its absolute position should not be read as the water's edge. - An independent cross-check (waterline_crosscheck.py, outputs/waterline_crosscheck.md) traces the water's edge itself from the sharper 10 m bands (green against near-infrared). It gives the same timing of the seasons: Kite Beach widest in February–March and narrow from May to September, and the summer stretch narrowest in April and widest in August–September. It gives different sizes of swing at some stretches: about 14 m against 19 m at Kite Beach, and 6 m against 16 m on the between stretch. So the timing of the seasons is robust, but the sizes of the swings are uncertain by several metres.

Time-lapse

The time-lapse of Kite Beach. The red line marks Kite Beach; the graph below shows its width.

3.2 The two beaches breathe in opposite seasons

Seasonal cycles

The numbers below are medians for each calendar month over 2017–2026 (outputs/beach_trends.md). They describe the typical year, not every year. - Kite Beach is widest in February and narrowest in September, a swing of about 18 m from the widest to the narrowest month. On average it is about 15 m wider in January–April than in August–September. By May it is only slightly wider than average. - The summer stretch is narrowest in April and widest in August, a swing of about 22 m in the opposite season (about 15 m narrower in January–April than in August–September). - The rest of the wide area swings much less. The between stretch swings about 7 m (widest in December, narrowest in August). Encuentro swings only about 4.5 m (widest in November, narrowest in July); the water's-edge cross-check gives about 9 m there, so Encuentro's swing is small and uncertain. Along the wide area as a whole, about 60% of the waterline is widest between November and March. - As Section 3.1 explains, the sizes of these swings are uncertain by several metres; the timing is not.

Seasonal map

The coast coloured by the month each stretch is widest; thicker lines mean bigger swings. Since version 0.9 this map is made from tide-corrected waterlines, as the rest of the report is.

3.3 Things we checked, so they don't fool us

Possible artefact Check Result
Sun glint on summer images Glint measured over open sea on each image (Section 3.1) Glint made summer beaches look about 4–5 m narrower. It is now removed. The opposite timing of Kite Beach and the summer stretch was there before and after the fix, so the cycles themselves are not a glint effect
Where the line sits A second, independent line traced at the water's edge from the 10 m bands (Section 3.1) Our line sits about 10–17 m landward of the water's edge. Both lines give the same seasons; the sizes of the swings differ by up to about 10 m at some stretches
Satellite lighting A fixed feature (the vegetation line) should not move In the first, uncorrected version of the images it moved about ±3 m with the seasons, so a few metres of any signal can be image noise. This check has not been repeated on the glint-corrected images
The tide Water level at the time of each image, measured at the Puerto Plata tide gauge (Section 3.5) The water is higher at image time in autumn and winter, so the tide slightly hides the winter width. Correcting for it makes Kite Beach's January–April lead over August–September slightly bigger (about 14.6 m before, 15.3 m after); the cycle is real
Wave set-up (bigger waves raise the average water level at the shore) SWASH runs of September 2026 (SWASH is a wave-by-wave model, Section 6; outputs/swash_transects.md) Typical winter waves raise the water at the shore by only 0.04–0.06 m more than typical summer waves. On these beaches (13–15 m of width per metre of water level, from the tide correction) that moves the waterline by about 0.5–0.9 m, so the images show winter beaches very slightly narrower than they are. This is small next to the seasonal swings

3.4 Sandbars

Sandbars could not be seen in these images. The 10 m pixels are too coarse, and the water colour changes after every swell. The reef shows clearly, but bars near the beach do not. Seeing them needs: - drone time-exposure images (a few minutes of video averaged together), or - a kayak with an echo sounder.


3.5 The tide: from a San Juan prediction to the Puerto Plata gauge

At first (September 2026) the study used the wave-model project's tide: NOAA's prediction for San Juan, Puerto Rico, scaled by 1.44. Since late September it has used the measured water level from the Puerto Plata tide gauge, about 30 km west of Cabarete, and every result in this report uses it. The gauge is UHSLC station 777 (IOC code ptpl), with hourly data from 2010 to 2026 and 93% of hours covered for 2017–2026. A harmonic tide model fitted to the gauge (the tide written as a sum of regular tidal cycles, each with its own size and timing) fills the gaps.

The zero level (datum). Water levels are given relative to the mean sea level of 2017–2026 at the gauge. Until version 0.9 the zero was set slightly differently, which put the whole series about 1.6 cm too high; that is now fixed, and the effect on the results is negligible.

Puerto Plata tide gauge

Result
Puerto Plata vs San Juan Puerto Plata's tide runs about 15 minutes ahead of San Juan, with 1.25 times its amplitude, not 1.44
The tide at Puerto Plata Mixed, mainly twice-daily. The main tidal cycles ("constituents"): the twice-daily lunar tide M2 22.5 cm; the daily tides K1 8.4 cm and O1 6.7 cm. Spring range about 0.8 m
Seasonal mean sea level About 14 cm from lowest to highest: lowest in February–April (−5 to −6 cm), highest in September–October (+7 to +8 cm), relative to the 2017–2026 mean. A tide prediction doesn't include this
How well each matches the measured level (hourly; RMS = the typical size of the difference, the root-mean-square) San Juan × 1.44: 10.7 cm. Best San Juan mapping: 9.9 cm. Harmonic fit to the gauge: 8.7 cm (the rest is weather)

What changed in the results when the tide was switched: - The seasonal cycles did not change. Kite Beach and the summer stretch kept their opposite seasons, and the before-and-after-swell results stayed the same. - One earlier result did not survive: a link between Kite Beach's width and wave energy (Section 7.3). The old tide lacked the seasonal sea-level cycle, which runs in step with the seasonal wave energy, and the energy model had partly been fitting that. - For the wave-model project: its fixed 1.44 factor overstates the Cabarete tide by about 15%. The gauge, or a harmonic fit to it (tide_gauge.py), would be more accurate.

3.6 The depths: drone surveys vs the Coral Atlas

The depth maps combine: - the drone surveys from the ubathy project: 24 hovers, about 42,500 points over the Kite Beach reef and Cabarete Main Reef (the surf break about 800 m off western Cabarete Bay, not the reef at Cabarete's eastern point); - the Allen Coral Atlas (depths estimated from satellite images, typically about 1–3 m accurate); - an assumed beach profile.

Two things came up when checking the drone depths against each other and against the Atlas.

1. The hovers disagree with each other. Where hovers overlap, their depths spread by about 1 m (the median, over the overlapping 10 m cells, of the standard deviation between hovers), while each hover reports ±0.1–0.5 m. At the Cabarete Main Reef peak, individual hovers give:

Hover Depth at the peak Its own error estimate
0416 6.2 m ±0.36 m
0489 4.1 m ±0.15 m
0476 4.0 m ±0.47 m
0417 2.9 m ±0.11 m
0438 2.7 m ±0.10 m
0477 2.0 m ±0.26 m
0475 1.7 m ±0.10 m

2. The drone depths read deeper than the Atlas, and by how much depends on the depth. - On average the drone depths are about 1.3 m deeper than the Atlas where they overlap. The ubathy project's own final comparison (all stations, corrected for the drone's heading and the tide) agrees: −1.15 m (drone deeper), RMSE 2.7 m (the typical size of the difference), correlation r +0.59 (1 would be a perfect match). - The gap depends on depth (6,900 cells where both exist; data/bathy_survey.npz):

Where (Atlas depth) Drone minus Atlas (median)
Shallow reef, 0–1 m +2.5 m (drone deeper)
Reef, 1–2 m +3.5 m
2–4 m +1.8 m
4–8 m +0.8 m
Deeper than 8 m −0.3 m (drone slightly shallower)

Is it a single datum error? No. (A datum is the zero level that depths are measured from; a datum error would be a wrong zero.) Hover by hover, the drone depths differ from the Atlas by very different amounts, even within one survey day:

Survey batch Hovers Drone − Atlas (median per hover) Batch median
The original six stations (23 April) 0395–0408 −1.4 to +2.8 m +1.5 m
0416–0423 −0.5 to +3.0 m +1.2 m
0001, 0003 +2.0 m, +7.7 m (0003 looks wrong) –
0438–0441 0.0 to +2.4 m +1.9 m
0475–0489 −1.5 to +3.5 m +1.1 m

What was and was not rebuilt on the corrected depths (as of version 0.9, 7 October 2026): - Rebuilt: the SWAN tables for the Kite Beach, Encuentro and Cabarete Bay areas and the surf lookup tables made from them (1–2 October); and, on 7 October, the hourly nearshore wave record (Section 5.3), the along-shore model (Section 7), the response model (Section 7.3) and the surf-spot products and figures of Section 10. - Not affected: the SWASH lines (Section 6). They cross no drone-survey cells, so their depths are the same on the old and corrected maps. - Also rerun on the corrected depths (7 October): the two 2D XBeach pilots (Sections 7.4, 7.5 and 13.1); their currents were re-read for version 0.10 (8 October) after the direction error was fixed. The XBeach runs of the Kite Beach channel (Section 15.3) used the corrected depths from the start. - Not rebuilt: the 1D XBeach lines (Section 6) and the 2D XBeach seasons runs (Section 13.2), which used the earlier depths. The depth test below also used the earlier map.

How much does it matter? A SWAN test (depth_sensitivity.py, outputs/depth_sensitivity.md). SWAN is the wave model of Sections 4 and 5. The same two wave conditions were run on three versions of the earlier (drone-blended) Kite Beach depths: - as used (before the 1–2 October correction); - "Atlas level": the drone cells replaced by the Atlas depths; - "drone level": all Atlas cells made 1.36 m deeper.

Condition Quantity As used Atlas level Drone level
Typical winter (1.5 m, 10 s) Wave height where it breaks, Kite Beach / Main Reef 1.83 / 1.93 m 1.68 / 1.82 m 1.72 / 1.94 m
Wave height at the Kite Beach shore 0.32 m 0.31 m 0.79 m
Along-shore wave power at Kite Beach (the sand push) 0.06 kW/m 0.07 0.26
Wave height at the summer-stretch shore 0.60 m 0.60 m 0.98 m
Big swell (3 m, 12 s) Wave height where it breaks, Kite Beach / Main Reef 2.88 / 3.03 m 2.69 / 2.64 m 3.15 / 3.15 m
Wave height at the Kite Beach shore 0.33 m 0.33 m 0.82 m
Along-shore wave power at Kite Beach 0.08 kW/m 0.09 0.37
Along-shore wave power at the summer stretch 0.34 kW/m 0.34 0.73

kW/m: kilowatts per metre of beach, the rate at which the waves carry energy along the shore. It measures the waves' capacity to push sand, not how much sand actually moves.

What it means: - Surf heights at the breaks: a modest effect, mostly 5–15% between the three versions, and up to about 20% (Main Reef in the big swell, Atlas level against drone level). The waves break on the reef edge, whose depth the two sources roughly agree on. - The beach and the back-reef: a large effect. If the Atlas is really 1.4 m too shallow everywhere, the back-reef is deeper and much less wave energy is lost crossing it. Waves at the Kite Beach shore would then be about 2.5 times bigger (0.8 m instead of 0.3 m), and the along-shore sand push about 4 times stronger. The evidence now favours the Atlas on the shallow reef, so this "drone level" case is unlikely. It was the biggest single uncertainty in the sand volumes and in "how sheltered is Kite Beach". - The directions and seasons of the sand drift are much less affected at Kite Beach. They depend on how the push changes with wave direction and season, not on its absolute size, and the push's sign at Kite Beach is the same in all three versions here. The satellite-based results (the seasonal cycles, trends and before-and-after-swell test) do not depend on the depths at all. - "As used" and "Atlas level" are almost identical near the Kite Beach shore, because the drone surveys cover the outer reef, not the inner back-reef. The corrected depths agree at Kite Beach too (from the corrected Kite Beach table: shore wave height 0.35 / 0.37 m and push 0.06 / 0.08 kW/m in the two conditions). But they change the summer stretch, which the "Atlas level" test did not reproduce. In the big swell, the wave height at the summer-stretch shore falls from 0.80 to 0.63 m and the push from 0.34 to 0.11 kW/m; in the typical winter condition the push turns from slightly towards Cabarete (+0.04) to about zero (−0.01, slightly towards Encuentro). Over ten years of hourly waves, the summer stretch's push towards Encuentro is about a third stronger on the corrected depths, mostly because in winter it now points towards Encuentro instead of about zero (Section 5.3). - Measured back-reef depths would be the most valuable single addition: a few kayak sonar lines at a known tide, with the Puerto Plata gauge now available for the tide.

3.7 The seabed from Encuentro to Cabarete Bay: where are the reef gaps and channels?

Waves breaking on the reef push water into the back-reef (the shallow water between the reef and the beach). That water has to get back out to sea. Where it leaves, it runs as a current and can carry sand away. So we looked for the gaps and channels in the reef along the whole coast (bathy_survey.py).

How we looked: - Pictures of the seabed. We took the median of the 25 clearest, calmest Sentinel-2 images from 2017–2026 and stretched the colours in the water. Pale areas are shallow sand or reef top. Dark areas are deeper water, but they can also be dense seagrass or coral. - Depths. We used the Coral Atlas depths everywhere, so the whole coast comes from one consistent source. We left the drone depths out of this map. They read deeper than the Atlas, by up to 2.5–3.5 m on the shallow reef (Section 3.6), so mixing them in would create false steps at the edges of each drone patch. - The deepest way out. For every spot in the back-reef, the computer finds the route out to the open sea (8 m deep) whose shallowest point is as deep as possible. It records that shallowest point on the route. Where many routes share the same shallowest point, the program groups them as one "outlet". These outlets are not necessarily gaps in the reef. Most of them (outlets 1, 3 and 7–11) lie only 48–110 m off the waterline, inside the back-reef: there the shallowest step on the way out is in the back-reef itself, close to the beach, not on the reef. Only outlets 2, 4 and 6 lie near the reef line (about 240–450 m out); outlet 5, in the between stretch, is in the back-reef about 160 m out. - A cross-check. We also made our own depth estimate from the clearest images, using the usual blue-to-green colour-ratio method. It follows the Atlas only loosely (correlation 0.74, typical difference 1.7 m). So we use it only to confirm that a deep patch is not a one-off in the Atlas.

Seabed and depths, whole coast

Kite Beach close-up

Along the coast

What the depths show (Coral Atlas; 0 km is Encuentro's west end):

Stretch The reef The back-reef (between reef and beach) The shallowest point on the deepest route out (outlet number)
Encuentro beach (0–2.2 km) Close in, about 180–200 m out, and very shallow (0.5–1 m) Narrow and shallow, about 1 m About 0.9 m deep, about 100 m off the beach, in the back-reef (1). No deeper route
Encuentro to the summer stretch (2.2–3.6 km) Shallow, moving further out 1–3 m 1–2 m deep (2, 3, 4); outlets 2 and 4 are near the reef line
Between stretch (3.6–4.7 km) Lower and broken, 1.5–3 m deep over the top, 400–500 m out Wide and deep, 5–7 m in pockets The deepest way out on this part of the coast: a lower section of reef at about 4.2–4.6 km, about 3 m deep, 450 m out (6). It takes the routes from about 3.95 to 5.1 km
Kite Beach (4.8–5.55 km) The shallowest reef on the whole coast in the Atlas: 0.3–0.8 m over the top, 450–550 m out to its outer edge Pockets 3–7 m deep The north-west end (to about 5.1 km) leads north-west along the back-reef to outlet 6. Further south-east, the shallowest points are in the back-reef about 100 m off the beach, 2.3–2.6 m deep (7, 8). The Atlas shows no deep gap through the reef here, although there is a channel at about 5.0 km (below)
Kite point and the small beach (5.55–6.0 km) About 600 m out 2–4 m About 3 m deep, about 70 m off the beach (9); the way out is into Cabarete Bay
Cabarete Bay west and middle (6.0–7.75 km) Up to 750 m out off the west side; no reef across the middle (6.5–7.7 km) Open water, 3–7 m About 3 m deep, close to the beach (10); open to the sea
Cabarete Bay east (7.75–8.75 km) The reef at Cabarete's eastern point, close in Shallow About 2.5 m deep, about 100 m off the beach (11)

What it means: - The Atlas shows no channel through the reef off Kite Beach, but there is one. Local photos and the satellite breaking record show a channel at about 5.0 km, in the north-west half of Kite Beach, and XBeach (a model of waves, currents and sand in the surf zone, Section 4) shows it as a surging rip, strongest in big north swells (Section 15.3). Behind Kite Beach the back-reef is deep in places, and its water can also leave along the back-reef to the lower, broken reef off the between stretch. - The back-reef flow model (Section 15) agrees: behind the north-west part of Kite Beach the water runs north-west and leaves mainly through the lower reef at Kite Beach's north-west end, with the channel as a second route out. Further south-east it divides, and the rest flows round the Kite point into Cabarete Bay. Where it divides moves with the waves: at about 5.2 km on typical winter days and in big north-east swells, and at about 5.6–5.7 km, at the point, on summer and trade-wind days (Section 15.2). - The north-west end of Kite Beach is where much of that outflow turns out to sea. That is also where the "hinge" is (Section 7). - The Encuentro back-reef is shallow and has no deep way out. Water pushed over its reef leaves through shallow spots along its length, rather than in one strong outflow.

How much to trust it: - The Atlas depths are satellite estimates, typically about 1–3 m accurate. Dense seagrass and dark coral look "deep" to a satellite, so some of the 5–7 m pockets in the back-reef may really be dark seabed at 2–3 m. The whitewater on the reef crest can also make the crest look shallower than it is. - The "outlets" are a property of the depth map, not measured currents. They show where the shallowest step on the deepest way out lies; for most stretches that is in the back-reef near the beach, which says the back-reef, not the reef, limits the deepest route out. - The drone surveys read deeper than the Atlas, most on the shallow reef. Local knowledge and the photos in Section 15 support the Atlas and this map (Section 3.6), although they are not measurements. - A channel narrower than about 20–30 m would not show at the 10 m resolution of these images.

4. The tools we used, and why

Tool chain

Tool What it is Why we used it What it cannot do
Sentinel-2 waterlines Automatic tracing of a waterline on satellite images (343 images over about 7 km, and 325 over 10.1 km). The traced line is a consistent marker in the wet sand, about 10–17 m landward of the water's edge (Section 3.1) Ten years of free, regular observations: the "truth" every model is tested against See sandbars, or anything faster than the 5-day revisit. It measures changes in width well, but the sizes of the seasonal swings are uncertain by several metres
ERA5 waves and wind The European weather service's hourly reconstruction of past weather and waves The only complete, free record of the offshore waves, 2017–2026 Resolve the coast (its grid is about 50 km); it underestimates the local trade winds
Coral Atlas + drone depths Satellite-estimated depths (typically about 1–3 m accurate), plus drone surveys over the Kite Beach reef and Cabarete Main Reef The only depth data available. Since 1–2 October 2026 the wave models use the Atlas only on the reef (Section 3.6) Measure the surf zone and beach; those are assumed
SWAN The standard open-source coastal wave model (TU Delft). It follows the wave energy across the reef on a 20 m grid. Turns offshore waves into waves over the reef, in the back-reef and at the beach. Each area has a lookup table of 720 runs (6 wave heights × 5 periods × 8 directions × 3 tide levels), so every hour since 2017 can be translated to the beach. Three areas (Encuentro, Kite Beach, Cabarete Bay) were run first, and again on the corrected depths on 1–2 October 2026: 4,320 runs in all. Individual waves, sets or surf beat
SWASH SWAN's sister model. It simulates every individual wave along a line from deep water up the beach, 1 m apart. Gives what pushes sand on or off the beach: the undertow, the wave shape, surf beat and run-up. Work in 2D over a large area (too slow). Our lines are 1D, which exaggerates surf beat.
Along-shore sand model The classic "one-line" model. The waves' push along the shore (from SWAN) gives the sand the waves could move; where that flow changes, the beach would grow or shrink. The standard way to test "is sand moving along the coast?" Sand moving on and offshore; it only moves sand around. Tested against the satellites, it gives the pattern of the push but not the size of each beach's changes (Section 7.2)
Response model A statistical model: beach width responds, with a memory, to the wave push at that beach Tests which wave property explains the width, on years it never saw, against two baselines: the average year, and a smooth seasonal cycle with a trend Explain how the sand moves
Flow and sand model Our GPU current model with a standard sand formula Currents through the reef gaps and the back-reef (Section 15) The on-and-offshore processes at the beach. Its sand budget failed the satellite test (Section 15.6)

Why this combination: each tool fills a gap in the others. The satellites give the answer to test against. SWAN gives the waves everywhere, all the time. SWASH gives the detail at the beach that SWAN leaves out. The sand models then test the two main ideas: sand moving along the shore, or on and off it.

Two more tools, added later:

Tool What it is Why we used it What it cannot do
XBeach (Deltares, v1.24) The standard storm-and-beach model: wave groups, surf beat, undertow, sand stirred by breaking waves, and bed change Settles whether a swell event builds or erodes the beach, the question SWASH could not answer The slow rebuilding of a beach in calm weather. Most of our runs are 1D lines; the 2D runs are pilots (Section 13)
Before-and-after-swell test Satellite widths just before and after the 76 biggest swells of 2017–2026, compared with randomly chosen dates An independent, data-only check of what big swells do See sand volume; it sees only the waterline

A quick guide: how waves move sand

Waves move sand in two directions, and on a real beach both usually happen at once: - Along the beach (sideways): waves arriving at an angle push sand a little way along the shore with each wave. This is along-shore drift. It can carry a beach's sand to a neighbouring beach, and it reverses when the swell direction changes. Section 7 is about this. - On and off the beach (straight in and out): big, steep or stormy waves pull sand off the upper beach and leave it a little way offshore, often as a sandbar or, here, in the back-reef. Smaller, gentler waves, especially long-period swell, push it back up the beach over the following days and weeks. Section 6 is about this. - Usually a combination: sand moves diagonally, out and sideways in a storm, back in and sideways in calm weather. Over a season, what counts is the balance.

At Kite Beach, the evidence suggests the seasonal change is mainly the sideways kind (Section 8). The models show the sideways push switching with the seasons, but they cannot yet give the size of each beach's swing. Every big swell also does an on-and-off swap.

5. The waves at the beach (SWAN)

5.1 The offshore waves

Wave climate

Monthly averages of the ERA5 offshore waves, 2017–2026. The "period" is the time between wave crests. We use the peak period (the period of the waves carrying the most energy), taken as 1.2 times ERA5's mean period; ERA5's own peak period, available to July 2024, confirms that ratio in every month. Directions are where the waves come from, in degrees from north.

Season Height offshore Peak period Coming from
December–April 1.4–1.6 m about 8.5–9 s, with longer swells North-east (about 50–65°)
June–August 1.1–1.2 m about 7 s (trade-wind chop) East (about 75–85°)
September–October about 1.3 m about 9 s; the most long-period swell of the year (about 31% of hours with a peak period of 10 s or more) North-east (about 50–65°)

5.2 The reef shelters Kite Beach

SWAN winter and summer

The winter and summer cases on the earlier (drone-blended) depths, before the 1–2 October 2026 correction. At Kite Beach the corrected depths give almost the same shore waves (Section 3.6); at the summer stretch they give smaller waves in big swells.

The numbers below are from the SWAN lookup table on the corrected depths (data/swan_table_kite_v2.npz), averaged over the beach zone 20–120 m off the waterline. - The reef breaks most of the waves. Behind it, waves at Kite Beach stay between about 0.13 and 0.55 m over the whole table, whatever happens offshore (0.2–0.5 m in 98% of the hours of 2017–2026). The summer stretch is less sheltered, reaching up to about 0.9 m. - The tide matters a lot inside the reef. A 0.4 m higher tide lets about 40% more wave height through to the Kite Beach shore, and about a third more at the summer stretch.

SWAN vs satellite

Check: where SWAN breaks waves matches where the satellite images most often show white water (rank correlation 0.64 over the Kite Beach model area, on the earlier depths; a rank correlation compares the order of the values, not their sizes, and 1 would be a perfect match). That is a good sign, but not a measurement of wave height.

5.3 Ten years of waves at the beach

Nearshore waves

We translated every hour of 2017–2026 to the beach using the SWAN lookup table on the corrected depths (data/nearshore_hindcast.csv, rebuilt on 7 October 2026). The right-hand panel shows the key result: the push of the waves along the shore (the along-shore wave power, in kW per metre of beach). This is the waves' capacity to move sand along the beach, not the sand that actually moves (Section 7). - On the summer stretch, the monthly average push is towards Encuentro in every month, strongest in July (about −0.13 kW/m) and weakest in January (about −0.04 kW/m). On the earlier depths it was about zero in winter; the corrected depths turn it towards Encuentro. - On the between stretch, it is towards Encuentro from April to October, strongest in July (about −0.09 kW/m), and about zero from November to March. - At Kite Beach, it is weak and towards Cabarete in the monthly average of every month: strongest in November–January (about +0.05 kW/m) and weakest in June–July (about +0.004 kW/m, close to zero). About 11% of individual hours push the other way, towards Encuentro.


6. What pushes sand on and off the beach

6.1 Across the reef

Across the reef

We ran SWASH along three lines: the middle and the west end of Kite Beach, and the summer stretch. All SWASH runs were redone on 7 October 2026 with two fixes from the quality review: the random waves sent in at the offshore end no longer repeat every 30 minutes, so the statistics now use the full analysed hour; and the beach no longer stops at +2 m, but carries on rising at 1 in 10 (to about +6.5 m at Kite Beach), so the run-up in big swells is no longer cut off. On typical days the results barely changed.

Place What the waves do Effect on sand
Reef crest Waves break; a strong seaward flow near the bed (the undertow), up to 0.22–0.37 m/s on typical winter and summer days Pushes sand offshore, but there is little sand on the rock
Back-reef Small waves, with a sharp shoreward surge and a weak seaward flow (on average 0.004–0.024 m/s) Pushes sand gently onshore
Beach Small waves (0.2–0.55 m high 10 m off the waterline) plus surf beat; the shoreward surges are sharper still Onshore in every case we ran

SWASH winter and summer

6.2 What about big swells?

We ran each line with offshore swells of 1, 2, 3 and 4 m, at 8 s and 12 s.

SWASH sweep

What the sweep shows (rows from top): 1. Surf beat is usually the bigger water motion at the beach, and it grows much faster with long-period swell (see the box below). How much bigger depends on the place. At the middle of Kite Beach it is 2.5–3 times the height of the ordinary waves in every run. At the summer stretch it is about 2–4.5 times, rising with swell height and period. At the west end of Kite Beach, where more ordinary wave height gets through, it is only 1.1–1.6 times on 1 m days, rising to about 1.5–3 times in 2–3 m swells. In a 2 m swell at the west end, for example, it is 0.45 m at 8 s but 1.02 m at 12 s. 2. The undertow at the beach grows with wave height and period, to about 0.16 m/s at the west end of Kite Beach for a 4 m, 12 s swell. 3. The sand push at the beach stays onshore at every height, by this measure. 4. Run-up (how high the water reaches up the beach, exceeded by 2% of waves):

Place Typical summer Typical winter 3 m, 12 s swell 4 m, 12 s swell Standard open-beach formula, 3 m / 4 m, 12 s swell
Kite Beach, middle 0.41 m 0.66 m 1.30 m 1.72 m 1.9 m / 2.2 m
Kite Beach, west end 0.55 m 0.81 m 2.91 m 4.36 m 1.9 m / 2.2 m
Summer stretch 0.39 m 0.52 m 1.86 m 3.69 m 1.9 m / 2.2 m

The reef cuts run-up a lot on small and medium days, and at the middle of Kite Beach even in big swells. At the west end of Kite Beach in 3–4 m long-period swells, and at the summer stretch in 4 m ones, the model gives more run-up than the open-beach formula, because of the surf beat. Read these big-swell numbers as an upper limit. A 1D line puts all the wave energy onto one profile, with no spreading along the shore, and so overstates surf beat and run-up. In version 0.8 the west end was given as "at least 2.0 m": that was the top of the modelled beach, where the old lines stopped. The line now carries on up the beach, so the run-up is no longer capped.

Surf beat, in brief. Waves arrive in sets. A big set breaking on the reef pushes extra water into the back-reef, and the water drains back out in the lull. The result is a slow rise and fall of the water level every 30 seconds to a few minutes. You see it as the water creeping further up the beach every minute or two, surges in the back-reef, and pulsing currents in the reef gaps. Behind a reef, surf beat passes almost unhindered while the ordinary waves are broken. So it becomes the main water motion at the beach, especially in long-period swell.

How sure are we? - Onshore push in typical conditions: medium confidence. The model's sand measure uses the near-bed flow only. It leaves out sand stirred up by breaking waves and carried off by surf beat's slow seaward flow, which is how big swells erode beaches behind reefs. - Big swells: the beach may well lose sand from the upper beach, with scarping and overwash, even though our measure says onshore. - The lines are 1D, which overstates surf beat and the big-swell run-up. - XBeach, which models that stirring-and-carrying process, is in Section 6.4. It shows that big swells do cut the upper beach.

Does surf beat build or erode the beach? - It can do either. In moderate conditions, its long, slow uprush carries sand up the beach face and builds the berm. In big swells, it lifts the water level so waves attack the upper beach, and its slow seaward flow carries off sand stirred up by the breaking waves. - The answer from XBeach (Section 6.4; the satellites cannot settle it, Section 6.3): in swell events, surf beat helps erode the upper beach, most in long-period swell. At the sheltered middle of Kite Beach the effect is small, possibly even a slight gain. On most lines the sand is only moved just offshore, where calmer waves can bring it back; Encuentro beach in 4 m swells is the exception.


6.3 Big swells in the satellite record: before and after

The test: - The events: the 76 biggest swell events of 2017–2026 (offshore height above 2.1 m, the top 5% of hours, at least 10 days apart). Half are long-period swells (11 s or more); half are short-period trade-wind seas. - The comparison: for each event, we compared the satellite beach width in the last image before the swell (within 12 days) with the width in the days and months after it. The waterlines are the sun-glint-corrected, tide-corrected series (Section 3.1). - Taking out the seasons: widths were measured relative to the usual width for that time of year, and the same calculation was done for 2,000 random dates in the same months (1,655 of them have usable images). - Checking for chance: for each stretch, type of swell and time window, we asked how often the same number of random dates gives a median change at least as far from the random-date median as the events' median is (the p value; small p = unlikely to be chance). We made 32 such comparisons, so about 3 would reach p < 0.1 by chance alone. The q value adjusts p for the number of comparisons.

Before and after big swells

Stretch Change 0–10 days after a long-period swell After a short-period sea Random dates
Kite Beach −1.1 m (18 events; p = 0.78) −2.1 m (20 events; p = 0.31) −0.7 m
Summer stretch −2.6 m (18 events; p = 0.06) −1.2 m (20 events; p = 0.26) +0.3 m
Between −1.1 m (18 events; p = 0.39) −2.0 m (20 events; p = 0.12) +0.1 m
Encuentro −0.9 m (18 events; p = 0.55) −2.1 m (20 events; p = 0.04) −0.2 m

The n in the figure legend (25 long-period, 27 short-period) counts the events with a usable image before the swell.

Median change over events, counting only events with an image 0–10 days after the swell. p compares each change with the random dates. After allowing for the 32 comparisons, none stands out (q about 0.9 or more for every one). Later windows (10–120 days) are in outputs/swell_events.md.

What it shows: - No change after big swells stands out from ordinary weeks once the number of comparisons is allowed for. The satellites cannot pick out a clear effect of swell events on any stretch. The smallest p is at Encuentro after short-period seas (2.1 m narrower, against 0.2 m on random dates; p = 0.04); among 32 comparisons, one or two this low are expected by chance. - Kite Beach shows no clear mark. After short-period seas it is 2.1 m narrower in the first 10 days, against 0.7 m narrower on random dates (p = 0.31); after long-period swells, 1.1 m against 0.7 m (p = 0.78). Neither difference is distinguishable from chance. That does not prove the beach is unaffected: with this scatter (half of the random-date changes lie between about −4 and +4 m), a change of 1–2 m could be missed. - At most, the summer stretch is about 2.6 m narrower in the 10 days after a long-period swell (random dates: 0.3 m wider; p = 0.06 before allowing for the number of comparisons). This could be chance. If it is real, it fits the summer stretch being less sheltered than Kite Beach (Section 5.2). After 10 days, its changes are no different from the random dates. - The satellite limit: it sees the waterline, not the sand volume. A beach can lose sand from its dry upper part while the waterline stays put or even moves seaward (see 6.4). - Swell direction matters more than size or period. This test sorts swells by period, not direction. Sorted by direction, north swells do leave a mark: the south-east half of Kite Beach about 2 m wider within a few days (version 0.11; Section 7.5).

6.4 XBeach: what a swell event does to the beach

XBeach is the standard model for this question. Unlike our SWASH measure, it includes sand stirred up by breaking waves and carried off by the undertow and surf beat, and it updates the bed as sand moves.

How it was run: - Lines: the same six as SWASH: the middle and west end of Kite Beach and the summer stretch, and three at Encuentro (Encuentro Right, Coco Pipe and Encuentro beach). - Events: each case is a 12-hour swell event, at offshore heights of 1–4 m and periods of 8 s and 12 s, plus typical winter and summer waves at Kite Beach. - Sand and rock: the reef is treated as rock with no loose sand (Coral Atlas reef zones); the back-reef floor and beach are sand. Locals report a sandy bottom almost everywhere, out past the reefs too, so the model may understate the sand available; the reef crest itself is rock, and whether the reef flats just inside it are sand or rock is not known. - Sensitivity test: every case was run twice. The second run uses a larger value (0.25 instead of 0.1) of the setting that controls how much the waves' onshore push moves sand back (facua). The default is known to lean towards erosion, and published calibrations usually fall between the two.

XBeach at Kite Beach

XBeach at Encuentro

Top: the bed change after a 12-hour swell. Middle: sand gained (+) or lost (−) on the dry beach. Bottom: sand gained in the back-reef. Strong colours = default setting, faded = the milder setting; circles = 8 s swells, squares = 12 s. All from 30°, at mid tide. Two bookkeeping limits of the figures: the "back-reef" total counts everything under water more than 600 m along the line from its offshore end, which at Encuentro, where the reef is close to the beach, also takes in the reef crest and the outer face of the reef; and the time-averaged values include the first hour (the start-up hour, before the bed is allowed to change) and miss the last hour. Neither affects the dry-beach numbers in the table below.

Line Typical winter (12 h) 2 m, 12 s swell 4 m, 12 s swell 2 m and 4 m, 12 s, with the milder setting
Kite Beach, middle −0.4 m³/m −0.7 −1.5 +0.2 to +0.4 (gains)
Kite Beach, west end −2.2 −3.9 −7.4 −2.0 to −4.0
Summer stretch −0.6 −0.8 −2.8 −0.3 to −1.3
Encuentro Right – −2.0 −5.4 −0.6 to −2.2
Coco Pipe – −2.3 −7.0 −0.8 to −2.6
Encuentro beach – −1.7 −4.1 −0.5 to −2.6

Sand lost from the dry beach, above still water, in m³ per metre of beach per 12-hour event.

What it shows: 1. Swells cut the dry beach and park the sand just offshore. On every line except the middle of Kite Beach, the dry beach loses sand in every swell under both settings, more with bigger and longer-period swells. On the Kite Beach and summer stretch lines, the sand goes into the lower beach and inner back-reef, just seaward of the water's edge: what the dry beach loses, the back-reef gains. There it is not lost; it is moved within reach of the beach. Encuentro beach in 4 m swells is the exception: the back-reef part of the line loses sand too (1.8 m³/m at 8 s and 12.4 m³/m at 12 s, on top of the dry beach's 2.1 and 4.1), so in the model that sand is carried out past the reef, beyond easy reach of calmer waves. With the milder setting this happens only in the 4 m, 8 s swell, on a much smaller scale (about 1 m³/m at Encuentro beach and 0.3 m³/m at Encuentro Right). 2. The middle of Kite Beach is the most sheltered place on the coast. Its losses are small (0.1–1.5 m³/m per event), and with the milder setting it gains slightly in every swell. The model cannot tell us whether it gains or loses; either way the change is small. 3. The west end of Kite Beach, the summer stretch and Encuentro are more exposed, with losses of about 3–7 m³/m in a 4 m, 12 s swell. That fits the hint in the satellites (not strong enough to rule out chance) that the summer stretch narrows after long-period swells (Section 6.3). 4. The waterline often moves seaward while the dry beach loses sand. The sand settles just below the water's edge, so the still-water waterline advances: in a 4 m, 12 s swell by about 7 m at the middle of Kite Beach, 5 m at the summer stretch and 8–16 m on the Encuentro lines. (At the west end of Kite Beach it moves landward, by up to about 5 m, except in the 3–4 m, 12 s swells.) This may help explain why the satellites, which see the waterline, show no clear change after big swells. 5. Long-period swell does more than short-period swell of the same height, through its bigger surf beat. This answers the earlier question: in big swells, surf beat erodes the upper beach, and the reef reduces this a lot at the middle of Kite Beach.

How big is that compared with the seasons? Kite Beach's seasonal swing is about 18 m of width (outputs/beach_trends.md), which is roughly 55 m³ of sand per metre of beach, taking an active height of 3 m. A swell event in these runs moves up to about 7 m³/m across the beach, and mostly just offshore, where calmer waves can bring it back (Encuentro beach in 4 m swells is the exception). So swell events shuffle sand between the dry beach and the water's edge; they do not make the seasonal cycle. The seasonal cycle most likely comes from sand moving along the shore (Section 7).

Limits: - Recovery isn't modelled. XBeach is built for storms and is poor at the slow rebuilding of a beach in calm weather, so these runs show the cut, not the recovery. - The rest is assumed: the beach and back-reef floor sand, the sand grain size and the beach profile. - The lines are 1D: no currents along the shore or through reef gaps.

7. What moves sand along the shore

Version 0.9: the along-shore model, the nearshore wave record (hindcast) and the response model in this section now run on the SWAN wave tables built on the corrected reef depths of 1–2 October (Section 5). The along-shore formula's coefficient has also been corrected, so every potential volume is about twice what earlier versions printed. The changes this made are noted where they matter. The model numbers quoted below that are not in outputs/alongshore_swan.md (where the push flips, stretch potentials, gross volumes, the day-by-day table) come from alongshore_numbers.py (outputs/alongshore_numbers.md).

7.1 The seasonal sand circulation

Sand circulation

This map shows the along-shore sand model's transport, driven by the SWAN waves at every stretch of beach and averaged over winter (December–March) and summer (May–August). It shows the waves' capacity to move sand along the shore (the "push"), not the sand that actually moves.

Potential amounts: averaged over each stretch, the model gives potential drifts of about 150,000–450,000 m³ per year to the north-west: about 170,000 at Encuentro, 190,000–200,000 at the summer and between stretches, 150,000 at the small beach on the Cabarete side of the point and 450,000 in western Cabarete Bay (in the bay, north-west means towards the Kite point). At Kite Beach the net is much smaller, about 50,000 m³ per year towards the point. (outputs/alongshore_numbers.md.) These are capacities, not actual volumes: the formula's coefficient is not calibrated here, and how much of the sand the waves actually move depends on its grain size, which has not been measured. (Locals report plenty of sand on the bottom, so a shortage of sand is probably not what limits it.)

Along-shore model details

The top panel of this figure is on the model's calibrated scale (about 3% of the potential; Section 7.2), so its numbers are much smaller than the potential amounts above and should not be compared with them.

7.2 Does the along-shore model reproduce the satellite record? No, not beach by beach

We ran the full model day by day, 2017–2026, and compared it with the satellite waterline at every point. It does not reproduce the observed changes beach by beach. This is unchanged on the corrected depths. - The best fit was again the model with the least movement (the smallest scale tried, 3% of the potential). - Its seasonal swings are far too small: 0.5 m at Kite Beach against 16.8 m observed, 0.8 m at the summer stretch against 18.4 m. A single strength setting has to fit the whole coast, and the setting that fits best overall moves very little sand. - Over the coast as a whole, its seasonal timing does not match: the median correlation between the modelled and observed seasonal cycles, point by point, is 0.00. At Kite Beach the timing is roughly right (on the test years the model is widest in May, the satellite record in April; correlation 0.62), but the swing is far too small to count as reproducing the beach. - The between stretch scores well on the test years (skill +0.72), but its modelled swing is under 1 m and it is widest in July instead of January, so we do not count this as a success. - Adding sand traps at headlands and reef spurs did not help; any apparent fit changed sign with small changes in the settings.

Why: - The waves are computed at 20 m resolution in the back-reef, where the along-shore flow changes sharply at every reef gap. The model responds to those changes, which are mostly noise at this scale. - Much of the satellite signal is coast-wide: the whole coast is wider in winter. Along-shore transport can only move sand around, not add it everywhere at once. That part must come from on-and-offshore exchange (Section 6), or from beyond the study area.

What the model does give: the direction and rough pattern of the push, by season (the map above), including its seasonal reversal at Kite Beach's north-west end (Section 7.4). Even this is a pattern of capacity, not a measured flow.

7.3 A simpler model that works for one beach: which waves explain the beach width?

Response model

A statistical "response" model links each beach's width to the wave push at that beach, with a memory. It is driven by the hourly nearshore wave record on the corrected depths, fitted on 2017–2023 and tested on 2024–2026 (92 images). The kind of wave push used for each beach was chosen on the training years only, by the lowest error there.

"Skill" measures how much better the model is than a simple baseline: 0 means no better, 1 means perfect, below 0 means worse. We use two baselines: - the average year: each month's usual width; - the seasonal cycle plus a trend: a smooth seasonal cycle with a straight-line trend. This is the harder test, because the summer stretch has narrowed over the decade.

The ranges in brackets are 90% intervals.

Beach Best explanation (chosen on the training years) Memory Skill on the test years: vs average year vs seasonal cycle + trend
Summer stretch Push along the shore plus push onto it: wider when the push towards Encuentro has been strong 90 days +0.61 (correlation 0.90) +0.46 (+0.30 to +0.57)
Kite Beach Push along the shore 120 days +0.15 −0.10 (−0.46 to +0.18)
Either beach Wave energy alone, or two textbook beach models based on wave energy – Worse than the average year –

With the measured Puerto Plata tide (Section 3.5). An earlier version with the San Juan tide appeared to link Kite Beach to wave energy with a 1-year memory; that link came mostly from the tide correction.

What this means: - The summer stretch fills when sand is pushed towards it from the south-east, the Kite Beach side. It beats both baselines, though by less against the harder one. That matches the circulation map. - Kite Beach's year-to-year wiggles are not explained by any single wave measure. The along-shore push does a little better than the average year, but not better than a smooth seasonal cycle with a trend. Its average year is regular, but departures from it are not predictable from the waves at the beach. That fits a beach fed from both ends (Section 7.4), where the width depends on the balance of two flows and on how much sand is available, more than on the waves of the moment. Big waves do not clearly make it narrower either (Sections 6.3–6.4).


7.4 Two questions: does Kite Beach sand go south-east? Does sand swing back and forth, or walk one way?

Where the waves push the sand, month by month

Red = pushed south-east (towards Kite Beach from the west; away from the Kite point in Cabarete Bay); blue = north-west (towards Encuentro; in Cabarete Bay, towards the Kite point). ★ = where the push converges (sand would collect); ○ = where it diverges (sand would be pulled apart). All amounts are potential (capacity). The three SWAN model areas join at about 3.4 km (inside the summer stretch) and 5.6 km (at the small beach on the Cabarete side of the point); there is no clear jump in the transport at either join.

Where the push changes direction. The monthly along-shore transport around Kite Beach (smoothed over 250 m; positions by month in outputs/alongshore_numbers.md) shows two points where the push flips: - Sand collects at about 5.2–5.35 km, in the south-east part of Kite Beach, in the average of every month. South-east of it, through the point to the Cabarete side, the push is towards Kite Beach (north-west) in every month's average. - The split point to the north-west moves with the seasons. - September to April: it sits at about 4.35 km, in the between stretch north-west of the beach, so sand from there is pushed into Kite Beach. - June–July: it moves to about 4.9 km, just inside the north-west end of Kite Beach, so sand from that end is pushed away towards the between and summer stretches. May and August are in between. - The north-west end of Kite Beach is therefore the hinge of the seasonal swing. - What the corrected depths changed: the collecting point is now at about 5.2–5.35 km (about 5.2 km before), and the summer hinge moved from about 4.75 km to about 4.9 km. The pattern is otherwise the same.

Does Kite Beach sand go south-east, towards Cabarete? According to the wave-push model, very little, but this is not settled. - At the south-east end of Kite Beach (about 5.4–5.5 km): the push runs south-east on most true north-swell days. Those are only about 3% of days, mostly November to April (Section 7.5). - On the Cabarete side of the point: on the corrected depths the push runs towards the point on practically every day, whatever the swell direction. The earlier version's south-east push there on north-swell days has gone. - The water currents near the point run the other way, towards Cabarete Bay, and the models now agree on this. In the strip 20–150 m off the waterline just south-east of the point (5.55–6.0 km), the mean current along the shore is (m/s, + = towards Cabarete Bay; winter / summer): - the back-reef current model (Section 15): +0.23 / +0.15; - the 2D XBeach Kite Beach pilot on the corrected depths: +0.18 / +0.18 (outputs/xbeach2d_v2_pilot.md); - the 2D XBeach bay pilot on the corrected depths: +0.20 / +0.19 (outputs/xbeach2d_bay_v2_pilot.md).

On the older depths the Kite Beach pilot also runs it towards the bay (+0.24 / +0.28); the older bay pilot does in winter (+0.16) but has almost no current there in summer (outputs/xbeach2d_pilot.md, outputs/xbeach2d_bay_pilot.md). - Why version 0.9 said the opposite. XBeach writes its currents as east and north components; our scripts treated them as components along XBeach's own grid and turned them a second time. That scrambled every 2D XBeach current direction up to version 0.9, and made XBeach appear to run the water at the point towards Kite Beach. Read correctly, the time-averaged XBeach flow balances far better (it must neither pile up nor drain water; the mismatch falls from about 85% to about 12% of the flow, in both pilots), and XBeach's wave force in the breaking zone points straight at the shore (outputs/kite_point_nest.md). - The waves agree. On the reef at the point the waves come from about 31–33° in SWAN and 32–37° in XBeach, and from about 22° in the satellite images (the median of 103 images taken during swells, 900 m out; 98% of them from north of the coast normal; outputs/waves_from_space.md). The coast at the point faces 57°, so the waves cross the reef from north of straight-on and push the water along the shore towards Cabarete Bay. XBeach's push on the reef there (+2.6 to +3.2 N/m² along the shore in winter) is close to SWAN's (+2.2). - Grid size does not change it. Rerun on a 5 m grid instead of 10 m, with the wave push from SWAN nested at 5 m or 2.5 m around the point, the current model gives +0.25 to +0.30 m/s in winter and +0.16 to +0.19 m/s in summer in the same strip, against +0.22 and +0.14 on the 10 m grid in the same test (outputs/kite_point_nest.md). With SWAN's full wave force instead of the breaking-only push it gives +0.22 in winter and +0.17 in summer. - So the push along the beach and the current a little further out point different ways. The along-shore push (above) is the capacity of the small waves that reach the beach, after the reef and the point have bent them, to move sand along the beach face. The current is driven by the bigger waves breaking on the reef 400–700 m out, and flows past the point through the strip 20–150 m off the waterline. (The along-shore model reads its waves 20–120 m off the waterline, so the two bands overlap; that the push acts mainly at the beach face and the current mainly further out is our interpretation, not something the models show.) This makes it more likely that some Kite Beach sand leaves south-east past the point, and some small-beach sand goes on into Cabarete Bay, with the current. - The current has sand to carry. A local reports (9 October 2026) that the whole bottom of Cabarete Bay and from Kite Beach to Encuentro is sandy, out past the reefs too, with plenty of sand to be seen in the murky water. Up to now our picture of where sand lies came only from the Coral Atlas, a satellite map of reef shapes that does not measure sand; the local observation is the better evidence for where sand lies, though it says nothing about thickness or grain size. With sand on the bed in the strip 20–150 m out, some sand moving south-east past the point is more likely than earlier versions said. The push along the beach face still runs towards Kite Beach. How much the current moves, and whether it outweighs that push, the models cannot say: that depends on the grain size and on how much of the sand is loose and stirred up, and it would take measurements (Section 12).

Back and forth, or walking one way? Mostly back and forth. Only two stretches show a clear trend.

Stretch Seasonal swing (satellite) Widest / narrowest Trend 2017–2026
Encuentro 4.5 m Nov / Jul −0.15 ± 0.25 m/yr (no clear trend)
Summer stretch 22 m Aug / Apr −0.8 ± 0.7 m/yr (narrowing, only just outside zero)
Between 7 m Dec / Aug +0.7 ± 0.4 m/yr (widening)
Kite Beach 18 m Feb / Sep +0.3 ± 0.9 m/yr (no clear trend)
Small beach on the Cabarete side of the point 26 m Aug / Apr −2.0 ± 0.6 m/yr (narrowing)
Cabarete Bay west 22 m Jan / Aug +0.6 ± 0.6 m/yr (no clear trend)

From beach_trends.md: tide-corrected satellite waterlines; trends from monthly means with the seasonal cycle removed; ± is two standard errors, allowing for the way one month's width carries over into the next. The seasonal swing is the range of the monthly medians. The timing of the seasons is robust, but the sizes of the swings are uncertain by several metres (Section 3.1).

7.5 Around the Kite point: Cabarete Bay

The study was extended about 2.5 km past Kite Beach, round the Kite point and along the whole of Cabarete Bay, to its eastern headland. This added: - a new satellite waterline analysis of 325 images, 2017–2026, over 10.1 km of coast; - a third SWAN wave model area with its own 720-run table; - a wider 2D XBeach model, from Kite Beach through the point to the bay's east end.

Kite Beach and Cabarete Bay time-lapse

Kite Beach (top left) round the point into Cabarete Bay, 2017–2026 (every second image).

Seasonal map of the whole coast

What the satellites show (coast_budget.py):

Kite Beach and Cabarete Bay budget

Stretch Widest Narrowest Seasonal range Seasonal swing of beach area Trend 2017–2026
Kite Beach Feb Aug 18 m 13,700 m² +0.4 ± 0.8 m/yr (no clear trend)
Small beach on the Cabarete side of the Kite point Aug Apr 26 m 11,600 m² −2.0 ± 0.6 m/yr
Cabarete Bay west Jan Aug 22 m 16,300 m² +0.6 ± 0.6 m/yr (no clear trend)
Cabarete Bay middle (town beach) Jul Apr 9 m 9,100 m² +0.2 ± 0.5 m/yr
Cabarete Bay east Dec Jun 9 m 8,700 m² −0.5 ± 0.5 m/yr

These figures come from the wider coast analysis, which draws the stretch boundaries a little differently, so Kite Beach's numbers differ slightly from Section 7.4 (here +0.4 ± 0.8 m/yr and narrowest in August, there +0.3 ± 0.9 m/yr and narrowest in September; August and September differ by only about 1 m in the typical year, and neither trend is distinguishable from zero).

What this means: - The small beach on the Cabarete side of the Kite point is the odd one out. It is widest in August, when Kite Beach and Cabarete Bay west are narrowest. - Its ups and downs, after removing the average year, run opposite to Kite Beach's. The correlation is negative at every delay from 4 months one way to 4 months the other (−0.22 to −0.51). It is clear (p between 0.001 and 0.04) at every delay except zero (−0.22, p = 0.14). This broad pattern says the two trade sand, but it does not tell which one leads, or by how long. - Its seasonal swing of beach area is close to Kite Beach's (11,600 against 13,700 m²). - That is the fingerprint of sand being traded, in one direction or the other. - It is also the one stretch here clearly losing sand over the decade (−2.0 ± 0.6 m/yr). None of the other four stretches shows a trend that can be told apart from zero. - Kite Beach and Cabarete Bay west move together (correlation +0.81 in the same month): both widest in winter.

What the models show: - The wave push (SWAN, along-shore model; the month-by-month chart in 7.4) runs north-west, towards the Kite point, along all of Cabarete Bay, in the average of every month. It is strongest in the bay's west, about 30,000–45,000 m³ per month of potential transport averaged over that stretch. - At the small beach on the Cabarete side of the point, the push is towards the point in every month, and changes little through the year. Whether the model has this beach gaining or losing sand depends on exactly where its ends are drawn, so the model does not show the summer filling and winter emptying that the satellites see. - The currents near the shore: 2D XBeach against the current model. Read correctly (version 0.10; Section 7.4 explains the error that scrambled XBeach's directions up to version 0.9), the two models broadly agree along the coast:

Stretch XBeach bay pilot (corrected depths) XBeach Kite Beach pilot (corrected depths) Current model (Section 15)
Between stretch (4.1–4.8 km) +0.13 / +0.06 +0.11 / +0.06 +0.08 / −0.02
Kite Beach (4.8–5.55 km) −0.05 / −0.01 −0.12 / −0.06 −0.01 / −0.17
Kite point, SE side (5.55–6.0 km) +0.20 / +0.19 +0.18 / +0.18 +0.23 / +0.15
Cabarete Bay west (6.0–6.75 km) −0.05 / +0.21 +0.12 / +0.12 (near the model's edge) −0.10 / −0.04
Cabarete Bay middle (6.75–7.75 km) −0.07 / −0.02 – −0.13 / −0.18
Cabarete Bay east (7.75–8.3 km) −0.40 / −0.34 – −0.31 / −0.32

Mean current along the shore, 20–150 m off the waterline (m/s, winter / summer); + = south-east, towards the Kite point from the Kite Beach side and towards the bay's east end beyond it; − = north-west. From outputs/xbeach2d_bay_v2_pilot.md, outputs/xbeach2d_v2_pilot.md and outputs/kite_point_nest.md.

2D XBeach, Kite Beach to Cabarete Bay, on the corrected depths

Columns: wave height; difference from SWAN; mean current (arrows, read correctly since version 0.10); bed change over 2 hours. Top: winter. Bottom: summer. Corrected depths.

Does north swell reverse the push? Only at the south-east end of Kite Beach. The monthly averages hide what happens on individual days. Here is the day-by-day push (2017–2026) from the along-shore model on the corrected depths, by the day's average swell direction offshore:

Swell comes from Share of days South-east end of Kite Beach (5.45 km) Small beach on the Cabarete side of the point (5.75 km) Cabarete Bay west (6.4 km)
North (0–15°) 3% south-east (towards the point) on about 70% of days north-west on about 98% north-west on about 94%
North-north-east (15–35°) 9% north-west on about 85% north-west every day north-west every day
North-east, east-north-east, east (35°+) 88% north-west every day north-west every day north-west every day

North-west is towards Kite Beach (and, on the Cabarete side, towards the point); south-east is towards Cabarete. From alongshore_numbers.py (outputs/alongshore_numbers.md): the model's daily push, by the day's mean offshore (ERA5) swell direction. The wave model's table covers swell from 0° to 105°, so swell from north-north-west is treated as due north. About four in five north-swell days fall between November and April.

What the satellites show after north swells (new in version 0.11): a small step at Kite Beach. If north swells really turn the sand south-east, the satellites should see it: the south-east end of Kite Beach wider after north swells, and stretches further north-west narrower.

The test: - The image pairs: every pair of clear satellite images taken no more than 30 days apart, about 320 pairs from 2017 to 2026. For each pair, the change in beach width on each stretch (tide-corrected, Section 3.1). Kite Beach is split into its north-west half (4.8–5.15 km) and south-east half (5.15–5.5 km). - The waves between the two images: the offshore wave energy (ERA5; height squared times period) that arrived between them. It is split into north swells (from 320° to 25°, north-west to north-north-east) and all other waves. - The fit: the width change against both kinds of energy at once. So a rough winter in general cannot pass for a north-swell effect. The result is given as metres per typical north swell (the median north-swell energy among the pairs that had any). - Allowing for delay: the wave window was also moved 3, 7 and 14 days earlier, so a swell counts only if it came at least that long before the image. This tests whether sand arrives some days after the swell. - Checking for chance: the p value comes from shuffling the north-swell energy among the pairs 5,000 times. q adjusts p for the 49 comparisons made (this test and the event-by-event check below). - North swells: about 75 in the ten years with offshore height at least 1.5 m (peaks at least 10 days apart), about six each November–April.

After north swells

Stretch (north-west to south-east) Per north swell, waves up to the image Per north swell, waves up to 3 days before p (3 days) q (3 days)
Encuentro 0.0 m +0.5 m 0.12 0.48
Summer stretch −1.2 m (−2.8 to −0.4; p = 0.03) −0.7 m 0.24 0.59
Between +0.3 m +0.9 m (0.0 to +1.6) 0.03 0.27
Kite Beach, north-west half −0.5 m +0.5 m 0.35 0.59
Kite Beach, south-east half +1.5 m (+0.6 to +2.4; p = 0.01) +2.3 m (+1.2 to +3.4) < 0.001 0.02
Small beach on the Cabarete side of the point −1.0 m (p = 0.09) −0.1 m 0.84 0.87
Cabarete Bay west +1.0 m (p = 0.03) +1.7 m (+0.6 to +2.7) 0.002 0.06

From north_swell_events.py (outputs/north_swell_events.md). In brackets: 90% ranges from resampling the image pairs. With the window moved 7 or 14 days earlier, no stretch stands out.

What it shows: - After a north swell, the south-east half of Kite Beach is wider, by about 2 m for a typical swell. This stands out from chance even after allowing for the 49 comparisons. It holds when the north sector is narrowed (330°–15°, 340°–10°) or widened (300°–30°), and when the 2017 hurricanes (Irma and Maria) are left out. - Western Cabarete Bay is wider too, by about 1.7 m. So some of the sand carries on past the point into the bay. The along-shore model does not show this (its push on the Cabarete side of the point stays towards Kite Beach, above). But it fits the current near the point, which runs towards Cabarete Bay (Section 15). - The summer stretch tends to be narrower, by about 1 m, mostly in images taken during or just after the swell. This is less sure: it does not stand out once the number of comparisons is allowed for. - The north-west half of Kite Beach does not gain. The sand seems to pass along it and settle at the south-east end, in the shallows on the west side of the point. That is also where the along-shore push turns south-east on north-swell days (above). - The step comes within a few days. It is clearest when only swells at least 3 days before the image are counted, and gone at 7 days. So the sand arrives within about a week of the swell. - It fits the wave models. The along-shore model turns the push south-east at the south-east end of Kite Beach on north-swell days. A new whole-coast XBeach run (not yet written up in this report) turns the sand flow south-east along the whole coast in a north swell, from Encuentro to Cabarete Bay, and north-west in every other kind of wave.

Steps, or steady movement? Probably both, and the satellites cannot fully tell them apart. - Each step is small against the scatter. North swells explain only about 5% of the change from one image to the next at the south-east half of Kite Beach. Most of that change is scatter in where the satellite line falls, about 9 m between images there. So single swells cannot be seen; the effect shows only on average. - But the steps could add up. About six north swells a winter, at about 2 m each, is roughly 12–14 m. That is most of Kite Beach's seasonal swing of about 18 m. The beach is widest in February, at the end of the north-swell season. So north swells could account for much of the winter widening at the south-east half of Kite Beach, with steadier movement the rest of the year, such as the summer drain back towards the summer stretch (Section 7.4). This is a rough estimate, not a measured budget.

A check, event by event. The same question asked the way Section 6.3 asks it: the width after each north-swell peak against random dates in the same months, with the usual seasonal change taken out. It gives the same directions but weaker results. In the 10 days after a north swell, the south-east half of Kite Beach was wider after 63% of them and the summer stretch narrower after 71%; neither stands out once the number of comparisons is allowed for. Taking out the seasonal change also takes out part of the north-swell effect if north swells help make the seasons, so this check is expected to be weaker.

Caveats: - ERA5 gives one average direction for all the waves. Many of these "north" swells are near the edge of the sector (20–25°), where a north swell and the trade-wind waves are blended. - The satellite sees the waterline, not the sand volume (Section 6.3).

Putting it together: - The small beach on the Cabarete side of the Kite point behaves like a seasonal sand store. (The point itself is rock; the sand passes it through the shallow water in front.) It fills in summer and empties by April, opposite to Kite Beach, and the two trade sand according to the satellites. - How the sand moves between them is not settled. - The wave-push model pushes sand from western Cabarete Bay, past the small beach and the point, into Kite Beach in every month's average, with little seasonal change. It does not explain why the small beach fills in summer and empties in winter. - The current near the point runs towards Cabarete Bay in both models and both seasons, with little seasonal change (above), so it does not explain the small beach's seasons either. (An earlier idea, that the current past the point is weak in summer and strong towards Kite Beach in winter, came from the misread XBeach output and is withdrawn.) - Because the water near the point flows towards Cabarete Bay, some sand from Kite Beach and the small beach may go that way with the current, while the push along the beach face runs towards Kite Beach (Section 7.4). With a sandy bottom there (local observation), the current has sand to carry, so some sand going that way is likely; but the models cannot say which wins, or how much moves. That depends on the grain size and how much of the sand is stirred up, and is unmeasured. - Over the decade this small beach has narrowed about 2 m a year. Where that sand went is not known: Kite Beach and the bay west show no clear trend. - In the middle and east of the bay the models agree: the wave push and both current models all run north-west, towards the Kite point. (Up to version 0.9 the 2D XBeach currents seemed to run south-east there; that came from the same reading error.)

7.6 Does the wind itself move sand?

Besides making waves, a strong wind blows dry sand directly across the beach. You can see it on windy afternoons as a thin sheet of grains skipping along the dry upper beach. We estimated this for every hour of 2017–2026 (aeolian.py).

How the estimate works: - Wind strength. Dry beach sand of this size starts to move at about 6.7 m/s (13 knots) of wind. Above that, the amount moved rises very steeply with wind speed. - Dry sand only. Hours with rain in that hour or the six before were treated as wet (23% of hours), and the wet strip at the water's edge was left out. - Beach width. The wind needs a run of dry sand to pick up a full load. We measured each beach's dry width on the satellite images: about 10 m at Encuentro, 30 m at the summer and between stretches, 55 m at Kite Beach and western Cabarete Bay, and 75 m at the town beach. These are rough, to perhaps ±10 m. - The weak point is the wind record. The ERA5 wind data we have underestimate Cabarete's afternoon sea breeze: they show typical afternoon winds of 5–7 m/s, while kite-season afternoons are commonly 8–13 m/s. So we ran three versions, with daytime winds as recorded, 1.3 times stronger, and 1.6 times stronger.

Wind-blown sand

Beach Dry beach width Sand blown inland per metre of beach per year (daytime wind × 1.0 / × 1.3 / × 1.6) Sand blown along the beach per year, towards Encuentro (wind × 1.3)
Encuentro beach 10 m 1 / 6 / 17 m³ about 230 m³
Summer stretch 30 m 3 / 16 / 43 m³ about 520 m³
Between stretch 30 m 3 / 18 / 47 m³ about 470 m³
Kite Beach 55 m 2 / 13 / 34 m³ about 1,100 m³
Small beach on the Cabarete side of the Kite point 35 m 3 / 20 / 52 m³ about 460 m³
Cabarete Bay west 55 m 3 / 19 / 50 m³ about 790 m³
Cabarete Bay middle (town beach) 75 m 1 / 8 / 20 m³ about 1,700 m³
Cabarete Bay east 40 m 1 / 8 / 20 m³ about 900 m³

What it means: - The wind blows sand mostly along the beach towards Encuentro, and partly inland. The trade wind comes from the east, while the beaches face north to north-east, so it blows at an angle across them. - It happens mostly in summer. Wind-blown sand peaks in June–August, when the trades are strongest and the weather driest, and is lowest from September to December. That is the same season Kite Beach narrows, so the wind may add a little to the summer loss. - Along the beach, the wind moves far less sand than the waves could. It shifts hundreds to a few thousand cubic metres a year per stretch, against the waves' capacity of tens of thousands (net, at Kite Beach) to hundreds of thousands of cubic metres a year. - The sand blown inland matters for the long term. Sand blown into the vegetation, gardens, roads and buildings behind the beach usually does not come back, so it is a slow, permanent loss. - The likely size is small. - Middle estimate (wind × 1.3): about 13 m³ per metre of beach a year at Kite Beach. That would be equivalent to about 4 m of beach width a year if the sea didn't replace it. - Why it is probably less in reality: the satellites show no such loss at Kite Beach (its ten-year trend cannot be told apart from zero). Formulas like this one generally overstate the real amount, because of damp sand, shells and coarser grains, people, kite gear and buildings; we have not measured by how much here. - Best guess: the real inland loss is a few cubic metres per metre of beach per year. That is small compared with the seasonal swing (about 55 m³ per metre: an 18 m swing over a 3 m active height), but not negligible over decades. - To pin it down, a local wind record (the Cabarete Tempest station) would be the best improvement. Simple sand traps at the back of Kite Beach for a few weeks in summer would also measure it directly (Section 12).

8. Putting it together: the sand story

Revised for version 0.9 (7 October 2026); item 5 updated for version 0.10 (8 October 2026). What the satellites measured is stated as fact; what the models say the waves could do is stated as the waves' capacity, not as measured sand movement.

  1. Winter (December–March). North-east swells arrive. The reef breaks them, but the part that gets through pushes along the back-reef towards Kite Beach from both its ends: from its north-west end, and from the Cabarete side, past the rocky point. In the monthly averages the two pushes meet inside Kite Beach, at about 5.2–5.35 km. The satellites show Kite Beach at its widest in February. In the back-reef and at the beach, the waves also push sand gently onshore.
  2. Summer (May–August). The swell drops, and the trade winds bring short, steep waves from the east. At the north-west end of Kite Beach the push reverses, towards Encuentro (most of all in June–July), so that end drains north-west. The summer stretch fills: it is widest in August–September, and of all the wave measures, the along-shore push of the waves explains its width best (Section 7.3).
  3. Autumn (September–November). Swells return from the north-east, and September–October has the most long-period swell of the year (Section 5.1). Kite Beach is at its narrowest in September, then recovers.
  4. Big swells. In the 1D XBeach runs each big swell cuts the dry beach and parks the sand just offshore, and calmer waves then push it back onshore (SWASH). The satellites cannot pick out a clear effect: the changes in the days and weeks after big swells are not bigger than after ordinary days, once the number of comparisons is allowed for (Section 6.3). At most, the summer stretch is about 2.6 m narrower in the ten days after a long-period swell (random dates: +0.3 m), but this could be chance.
  5. Past the point: the small beach on the Cabarete side of the Kite point fills in summer and empties by April, opposite to Kite Beach, and the two trade sand according to the satellites (Section 7.5). How the sand moves between them is not settled: the wave push along the beach face runs towards Kite Beach in every month's average, while the water near the point drains into Cabarete Bay, on which the current model and XBeach now agree (Sections 7.4, 7.5 and 15.7). Locals report a sandy bottom there, so the current has sand to carry, and some sand leaving south-east past the point with it is likely. Which way wins there, and how much moves, is unresolved (grain size and how much sand is stirred up are unmeasured), and neither model explains why the small beach fills in summer and empties by April.
  6. Over the years: most of the change is the seasonal swing. Underneath it, the small beach by the point has narrowed by about 2 m a year and the between stretch has widened; Kite Beach, Encuentro and western Cabarete Bay show no clear trend over these ten years (Section 7.4). So the satellites do not show Kite Beach steadily trapping sand; the "trap" is where the waves' push converges, which is a capacity, not a measured gain.
  7. On top of that, most of the coast is a little wider in winter.
  8. Through-flow: some sand probably passes through the system, towards Sosúa or out to sea through the reef exits, but the models could not measure how much (Section 15.6). Locals report that the bottom is sandy from Cabarete Bay to Encuentro and out past the reefs, so there is plenty of sand to feed such a flow, and it is the more likely reason that Encuentro does not fill up despite the waves' large capacity (Section 7.4). After big winter swells the water outside the reef is cloudier all along the coast, most of all off Cabarete Bay, which fits plenty of sand on the bottom being stirred up, although rain runoff has not been separated (Section 15.4).

Confidence: - High for the timing of the seasonal swings at Kite Beach and the summer stretch; medium for their size. - Medium: the direction of the waves' along-shore push and its seasonal reversal at Kite Beach's north-west end, and that the summer stretch follows it. - Medium: the onshore push in normal conditions; the two clear ten-year trends (the small beach by the point narrowing, the between stretch widening). - Medium: the water near the shore at the Kite point flows into Cabarete Bay (both current models and the wave directions agree; not measured). - Medium-low: big swells cut the dry beach and park the sand just offshore (1D XBeach only). - Low: the trends at the other beaches, all the volumes, and which way the sand goes at the Kite point. - Not yet known: how much sand passes through the system.


9. Encuentro and Coco Pipe (new model area)

We built a second SWAN model area for Encuentro and Coco Pipe, with its own 720 runs. Unlike Kite Beach, it has no drone depths: it uses the Coral Atlas depths plus an assumed beach profile. Its lookup table was rebuilt with the rest on the corrected depths of 2 October (data/swan_table_encuentro_v2.npz), and the surf and along-shore numbers use that version.

Encuentro depths (the corrected map of 2 October 2026)

9.1 What it tells us about sand

9.2 What it tells us about surfing

See Section 10 for all five spots.

9.3 Across the reef at Encuentro and Coco Pipe (SWASH)

SWASH lines through the Encuentro Right peak, the Coco Pipe peak and the middle of Encuentro beach, for offshore swells of 1–4 m at 8 s and 12 s (rerun on 7 October 2026 with the fixes described in Section 6.1):

SWASH at Encuentro


10. What a surfer can learn

Breaking maps

Where the waves break in the three wave-model areas (top: Kite Beach; middle: Encuentro and Coco Pipe; bottom: Cabarete Bay with Cabarete Main Reef). Left: a typical winter swell (2 m offshore, 12 s, from 30°). Right: a big swell (4 m, 14 s, from 15°). Colour is the wave height; the white and red contours mark where 5% and 20% of waves are breaking. Redrawn on 7 October 2026 on the corrected depths.

All the numbers in this section come from the wave model SWAN (Section 5) run over the corrected depths of 1–2 October 2026 (Coral Atlas only, reef crest kept shallow, Kite Beach channel added), with Cabarete Main Reef taken from the Cabarete Bay model area. The heights and the tide effect are read from the surf lookup tables (data/spot_tables.npz, SURF_LOOKUP_TABLES_PRIMER.md); the wave shape and the monthly climate come from outputs/spots_summary.md (made by spots.py, rerun on 7 October 2026 on the same corrected tables). The two sources give the same heights. The figures in this section were also redrawn on 7 October; the versions before that still used the older depths.

10.1 How big does each spot get?

Spot transfer

Breaking height at each spot against offshore height (left), swell direction (middle) and swell period (right).

Heights are the significant wave height (Hs) where the waves break at each spot. Hs is the average height of the highest third of the waves. The model takes the biggest height within 150 m of each spot's listed position among the places where at least 5% of the waves are breaking. As a rough guide, the face height of the bigger set waves is about 1.5–2 × Hs; that is a surfers' rule of thumb, not something the model works out.

The lookup tables were rebuilt on 2 October 2026 on the corrected depths. Compared with the first tables, which blended in the drone depths, Kite Beach's breaking heights are about 6% lower and Cabarete Main Reef's biggest days about 0.5 m smaller (2.7 m instead of 3.3 m for 4 m offshore); Encuentro and Coco Pipe are unchanged.

Spot Offshore 1 m 2 m 3 m 4 m (all 12 s, from 30°, mid tide) Tide effect (high against low tide, 2 m swell) Best swell direction Wave shape (breaker indicator, 2 m, 12 s)
Encuentro Left 1.4 2.5 3.4 4.3 m None North (0°) Plunging, hollow (0.71)
Encuentro Right 1.4 2.5 3.4 4.1 m None North (0°) Plunging, hollow (0.80, the most)
Coco Pipe 1.4 2.5 3.4 4.2 m None North-north-east (15–30°) Plunging (0.58)
Kite Beach (outer reef) 1.3 2.2 2.7 2.9 m +6% North-north-east to north-east (30–45°) Plunging (0.56)
Cabarete Main Reef 1.5 2.4 2.6 2.7 m +8% North-north-east to north-east (30–45°, almost equal); the least sensitive to direction Borderline between spilling and plunging (0.42): the least hollow of the five

The breaker indicator (the Iribarren number) compares the steepness of the reef in front of the break with the steepness of the waves. Below about 0.4 the waves tend to spill (break gently from the top, softer); above it they plunge (throw forward, hollow). It uses the bed slope over the 60 m seaward of the break, and the depths there are satellite estimates (±1.5 m), so it is only a rough guide to wave shape.

What this means: - Encuentro and Coco Pipe take the swell almost at full size, with extra height as the waves slow down and steepen over the shallowing reef before they break (shoaling): 1 m offshore becomes about 1.4 m at the break. They work best in north swell, which fits their reputation, and the waves come out hollow. - Kite Beach and Cabarete Main Reef top out on big days, at about 2.7–2.9 m for 4 m offshore, much less than Encuentro's 4.1–4.3 m. They favour north-north-east to north-east swell. - On the corrected depths, all five spots plunge in a typical swell. Cabarete Main Reef is the softest, right on the border between spilling and plunging. Kite Beach, which the earlier depths showed as spilling, now comes out plunging (0.56), much like Coco Pipe. - Longer period means bigger surf everywhere: 14 s swell gives the most height at every spot, about 35–55% more than 6 s swell of the same offshore height. - The tide barely changes the breaking height at Encuentro and Coco Pipe. At Kite Beach and Cabarete Main Reef high tide gives 6–8% more height than low tide in 2 m swell, and 12–17% more in 3–4 m swell, because the extra water over the shallow reef crest lets bigger waves reach the break. Everywhere, the tide changes how much breaks: at low tide more of the waves break, and break harder; at high tide more roll over the reef unbroken. Inside the Kite Beach back-reef the tide matters a lot more (Section 5.2). - Behind the reefs, surf beat matters. Surf beat is the slow rise and fall of the water level with the sets. On big long-period days, expect strong surges and currents in the back-reefs and reef gaps, and water running far up the beach (Section 6).

10.2 Surf climate by month (2017–2026)

Surf climate

Top: share of days in each size class, from each day's largest daylight height at the spot (fun 0.6–1.2 m, solid 1.2–2 m, big over 2 m, in Hs). Bottom: share of early mornings (7–9 am) with light wind (under 4 m/s), offshore wind, or onshore wind of 4 m/s or more.

The offshore waves and winds are ERA5, a global reconstruction of past weather (European Centre for Medium-Range Weather Forecasts), hourly from January 2017 to September 2026. The swell's peak period is taken as 1.2 × ERA5's mean wave period; ERA5's own peak period, available to July 2024, confirms this (median ratio 1.22, about the same in every month).

Month Median daylight height at Encuentro Right (Hs at the break) Share of hours with long-period swell (≥ 10 s) Share of hours with swell from north to north-east
Jan 1.5 m 27% 35%
Feb 1.5 m 19% 25%
Mar 1.6 m 24% 36%
Apr 1.4 m 15% 28%
May 1.0 m 5% 6%
Jun 0.9 m 0% 1%
Jul 0.9 m 0% 0%
Aug 0.9 m 2% 6%
Sep 1.2 m 31% 25%
Oct 1.3 m 31% 30%
Nov 1.5 m 26% 36%
Dec 1.6 m 23% 33%

Heights from outputs/spots_summary.md; the two shares are counted from the hourly ERA5 offshore record (north to north-east here means from about 326° to 45°).

Caveats for surfers: - The heights have not been checked against surf reports or a buoy. - The depths at all five spots are satellite estimates (±1.5 m), which affects how and where waves break, and especially the wave shape. - ERA5 blends wind chop and swell into one height and period, so it undercounts groundswell hidden under the trade-wind chop.


11. Limits and confidence

Revised for version 0.9 (7 October 2026), after the quality review and the reruns; the Kite point, back-reef flow and channel rows updated for version 0.10 (8 October 2026), the sand rows on 9 October after a local's report that the bottom is sandy, and the north-swell row added for version 0.11 (12 October 2026).

Finding Confidence Main uncertainty
Kite Beach's seasonal cycle: widest in February, narrowest in September High for the timing; medium for the size (about 14–19 m depending on the method) The traced line sits 10–17 m landward of the water's edge; sun glint (now removed) made summer images read narrower (Section 3)
The summer stretch's opposite cycle: narrowest in April, widest in August–September High for the timing; medium for the size (about 19–22 m depending on the method) As above
The ten-year trends Medium for the small beach on the Cabarete side of the Kite point (narrowing about 2 m a year) and the between stretch (widening); low elsewhere: Kite Beach shows no clear trend Ten years is short; neighbouring months are not independent (Section 7.4)
The reef shelters Kite Beach; waves at the beach are small (a few tenths of a metre) Medium-high No wave measurements inside the reef
The summer stretch's width follows the along-shore push of the waves Medium It beats both baselines on test years it was not fitted to (Section 7.3); a statistical fit, not a physical proof
The waves' along-shore push: towards Encuentro west of Kite Beach, towards the Kite point in Cabarete Bay, meeting inside Kite Beach Medium (was medium-high) It is the waves' capacity, not measured sand movement; the along-shore model fails beach by beach (Section 7.2)
The waves push sand onshore at the beach in normal conditions Medium Our sand measure leaves out stirring by breaking waves
Big swells cut the dry beach and park the sand just offshore Medium-low XBeach 1D only; the satellites show no change after big swells that stands out from ordinary weeks (Section 6.3)
North swells widen the south-east half of Kite Beach (about 2 m each) and western Cabarete Bay (about 1.7 m), within a few days; the summer stretch tends to narrow Medium (new in version 0.11) Stands out from chance after allowing for 49 comparisons and holds for other north sectors and without the 2017 hurricanes; but each step is small against the scatter of single images, ERA5 gives one average wave direction, and the event-by-event check is weaker. How much of the seasons it explains is a rough estimate (Section 7.5)
Wind blows dry sand along the beach and inland, mostly in June–August; a few m³ per metre of beach a year lost inland Low-medium The ERA5 wind underestimates afternoon winds, and the sand-blowing formula tends to overestimate (Section 7.6)
Sand volumes Low Sand appears plentiful on the bottom (local observation, 9 October 2026), but the amounts are still unknown: the grain size and how deep the sand is stirred have not been measured, and the active beach height is assumed
Spot heights and surf climate Medium for patterns, low for exact heights Depths; ERA5; not yet checked against surf observations
Reef depths Medium-low The drone reads deeper than the Atlas on the shallow reef; local knowledge supports the Atlas; nothing measured directly (Section 3.6)
Back-reef flow pattern: north-west behind the north-west part of Kite Beach, out at its north-west end, into Cabarete Bay at the point (Section 15) Medium Holds in every depth version and with both kinds of model edge, and XBeach now broadly agrees, including on the main exit at Kite Beach's north-west end (Section 15.3). Uncertain: the depths of the gaps; the currents are averages over 1.5 hours; the edges matter somewhat for the amounts in the big north-east swell (Section 15.8); no current has been measured
Which way the water goes right at the Kite point: into Cabarete Bay Medium (was low, unresolved, in 0.9) The current model and XBeach agree, the result does not change with grid size, and the wave directions in SWAN, XBeach and the satellite images agree; but no current has been measured there (Sections 7.4 and 15.7)
Which way the sand goes at the Kite point Low The push along the beach face runs towards Kite Beach, the current a little further out towards Cabarete Bay. Locals report a sandy bottom there, so the current has sand to carry and some sand moving south-east past the point is more likely than earlier versions said. Which wins, and how much moves, depends on the grain size and on how much of the sand is loose and stirred up, and nothing has been measured (Sections 7.4 and 15.7); drifters and sand samples would help (Section 12)
Kite Beach channel: a surging rip, strongest in big north swells (about 1.0 m/s on average, surges to about 1.9 m/s) and weaker on typical winter days and in big north-east swells (about 0.35–0.5 m/s) Medium-low The channel's depth is a guess (a deeper channel takes more of the outflow, Section 15.5); the surges come from XBeach only, although the averaged current model gives similar average speeds (Section 15.3)
How much sand passes through the system Not yet known Two model budgets failed the satellite test (Section 15.6); the 2D XBeach seasonal test was not valid (Section 13.2)

12. Next steps, and how to take sand samples

1 October 2026; updated 7 and 8 October 2026. The models have gone about as far as they can on the data we have. The questions still open need measurements, not more computing. The pass and fail tests for each measurement were set in advance, before any data exist (docs/VALIDATION_PLAN.md). Steps 1–6 are in order of value; step 7, the drifter test, is the quickest and cheapest.

# Step What it settles Effort
1 Measure the depth through the Kite Beach channel and the lower reef at Kite Beach's north-west end How the outflow divides between the two exits, and how strong the rip is One calm morning at low tide, kayak or SUP
2 Take sand samples (method below) The grain size every sand calculation assumes (0.25 mm), and where the sand comes from and goes A few hours on one day; ideally again six months later
3 Keep a simple surf log Whether the surf-forecast tables give the right heights at each spot A line per session
4 Straight-down drone photos at low tide in calm, clear water The exact shape of the channels, and whether the reef flats just inside the breaking line are sand or rock One flight per area
5 Repeat beach and back-reef surveys, twice a year The only way to measure how much sand actually moves, and so the sand passing through to Sosúa or deep water A morning, twice a year
6 A local wind record The afternoon sea breeze that the global records miss, for the wind-blown sand and the forecasts Download from a local station
7 Drifters (method in 12.4) Which way the back-reef water goes behind Kite Beach and past the Kite point, and how fast A morning on a typical winter day

Already done in this study: - the surf-forecast tables, with warnings; - the back-reef flow over the whole reef, and the channel from photos; - the plume check (satellite cloudiness after big swells, Section 15.4); - two attempts at a model sand budget (they failed the satellite test, Section 15.6); - at the Kite point, a finer-grid test of the current model and the wave directions in the satellite images (Section 7.4).

The surf tables were rebuilt on the corrected depths on 2 October 2026; Cabarete Main Reef now comes from the Cabarete Bay table, with its position confirmed by a local's pin.

On 7 October 2026 an independent quality review of the code and this report led to the fixes and reruns of version 0.9, and on 8 October the correction of how we read XBeach's current directions led to version 0.10 (the version history at the end, and docs/qa/QA_REGISTER.md).

When the measurements arrive: - put the measured channel and gap depths into the depth map, and rerun the flow cases (about a minute each); - use the measured grain size in all the sand calculations; - check the surf tables against the surf log, and the current models against the drifter tracks; - with two or more repeat surveys, run XBeach through whole seasons and tune it until it reproduces the measured changes. Only then can it give the sand passing through.

12.1 Measuring the channel and gap depths

12.2 How to take sand samples

Where (about 15 samples):

Site Samples
Kite Beach: north-west end, middle, south-east end 3 at each (see "across the beach" below)
The small beach on the Cabarete side of the Kite point 3
Cabarete Bay west and the town beach 3 each
The summer stretch 3
Encuentro 3
The back-reef behind Kite Beach, in a sand lane (knee to waist deep) 1–2
Optional, the most telling: sand just outside the lower reef at Kite Beach's north-west end, in 5–8 m, collected by a snorkeller or diver 1–2

Across the beach, at each beach site: one from the dry upper beach, one from the middle of the beach, and one at the water's edge at low tide, where the backwash runs.

How to take each sample: 1. Use a clean jar or a zip-lock bag, one per sample. 2. Scrape up the top 2–3 cm only. That is the layer that moves. About a cupful (200–300 g) is plenty. 3. Avoid clumps of shell, weed or rubbish, but don't pick out individual shell grains: they are part of the sand. 4. Label each bag: site, position on the beach (dry, middle, water's edge), date and time. 5. Take a GPS pin and a photo of the spot, with a coin or ruler in the picture for scale. 6. Take all the samples on the same day. Ideally repeat in the other season, for example February and August, to see whether the sand changes with the seasons.

What to do with them:

  1. Rinse and dry. Rinse with fresh water to remove the salt, then dry in the sun or a low oven.
  2. Grain size (the most useful number). Choose one: - Sieves: a small set of sieves (2, 1, 0.5, 0.25 and 0.125 mm) and a kitchen scale. Weigh what stays on each sieve, and work out the median grain size, the size half the sand is finer than. - Photo: spread a teaspoon of grains thinly on white paper next to a ruler and take a sharp close-up photo. The grain sizes can be measured from the photo. - A laboratory: a university or soils lab measures grain size by laser for a modest fee.
  3. What the sand is made of. This tells us where it comes from. - Colour: white or cream grains are made by the reef (broken coral, shells, algae). Dark grains come from the land, through rivers such as the Yásica at La Boca, or from the lagoon behind Cabarete town. - The vinegar test: a few drops of vinegar make reef sand fizz. To get a number, weigh a dry sample, soak it in vinegar until it stops fizzing, rinse, dry and weigh again. The weight lost is the reef-made share.

What the samples tell us: - The grain size replaces the 0.25 mm we assumed in every sand calculation. Finer sand moves more easily and settles more slowly, so it is more likely to be carried out to sea. Coarser sand stays put. - Matching samples show where sand travels. If Kite Beach's sand matches western Cabarete Bay's more than Encuentro's, that supports the finding that its sand comes round the point. - Dark grains at Cabarete would show sand arriving from the rivers to the east. - Sand outside the lower reef that matches Kite Beach's sand would confirm that the north-west exit is a route by which beach sand is lost offshore. - At the Kite point, samples from the water's edge and the shallow strip in front of the small beach would give the grain size of the sand there. Locals report a sandy bottom in that strip, so the current has sand to carry; how easily the current and the waves move it depends on its grain size, and that is part of what decides which way sand moves past the point (Section 15.7).

12.3 A simple surf log

12.4 A drifter test

A drifter is a float that moves with the water, so its track shows where the back-reef water goes. The test checks validation plan V2 (direction) and V3 (speed). The current model and XBeach both say that the back-reef water behind the middle of Kite Beach runs north-west, and that near the beach just south-east of the Kite point it runs into Cabarete Bay at about 0.15–0.2 m/s (Sections 15.2 and 15.7).

Drifters show where the water goes, not the sand. Which way sand moves at the point also needs the sand samples (12.2) and, ideally, a sand tracer test (coloured sand placed at the water's edge and looked for again a few days later).

12.5 Model work for later


13. XBeach in 2D: the pilot, and whether to move to the GPU

XBeach is a coastal model that follows waves, currents, sand movement and the change of the seabed together. The plan is in XBEACH_2D_PLAN.md: try the standard XBeach on the computer's main processor (CPU) first, and only build a version for the graphics card (GPU) if the CPU results are worth having but too slow.

13.1 Stage 1: the pilot

The pilot: - Grid: Kite Beach and its back-reef, 1.45 km across the shore by 2.6 km along it, rotated to the coast. Cells are 10 m across the shore and 20 m along it, about 19,000 in all. - Depths: the smoothed depth map of late September 2026, which still blended in the drone depths. These are not the corrected depths of 1–2 October (Section 5). - Physics: XBeach's surf-beat mode (it follows the wave groups, and so the slow surges they drive, not every single wave), with waves from a spread of directions, wind, sand transport and bed change. Rock and sand: every area the Coral Atlas maps as reef, including the inner and shoreward reef flats that it maps over much of the back-reef floor, is treated as rock that cannot erode; about a fifth of the cells. Sand (3 m deep) is allowed only outside those areas and on the beach and the 40 m of seabed in front of it. (The current models of Section 15 treat the inner reef flats as sand instead; the two set-ups are not yet consistent.) Locals report that the bottom is sandy almost everywhere, out past the reefs too, so this set-up probably underestimates the sand available; a rerun with sand everywhere except the reef crest is planned (Section 12.5). - Cases: a typical winter day and a typical summer day, 3 hours each (1 hour to settle the waves and currents, then 2 hours with the bed changing).

2D XBeach pilot

Columns: wave height; difference from SWAN; mean current (arrows); bed change over 2 hours. Top: winter. Bottom: summer. On the earlier, drone-blended depths.

Stage-1 checks (outputs/xbeach2d_pilot.md, 28 September 2026):

Check Result
Stable? Yes. Water levels −0.31 to +0.45 m. Mean currents up to about 1.0–1.15 m/s, on the reef crest and in the gaps.
Waves agree with SWAN? Yes. Over the reef and back-reef, XBeach's typical wave height is 7–9% above SWAN's (2–5% offshore), and the pattern matches closely (correlation 0.96–0.98).
Currents agree with the current model? Mostly, once XBeach's output is read correctly (version 0.10; up to 0.9 our scripts turned XBeach's east/north currents a second time, which scrambled their directions, Section 7.4). The six direction checks are the mean current along the shore 20–150 m off the waterline in three stretches and two seasons, against the whole-reef current model of Section 15. On the corrected depths (outputs/xbeach2d_v2_pilot.md) 5 of 6 agree: at the Kite point towards Cabarete Bay in both seasons (+0.18 m/s, against +0.23 / +0.15), at Kite Beach towards Encuentro in both (−0.12 / −0.06, against −0.01 / −0.17), and north-west of Kite Beach towards Kite Beach in winter (+0.11, against +0.08). The one difference is that stretch in summer, where both currents are weak (+0.06 against −0.02). On the earlier depths (outputs/xbeach2d_pilot.md, against the same current model) 4 of 6 agree: the point in both seasons (+0.24 / +0.28), and Kite Beach (−0.05) and north-west of Kite Beach (+0.06) in winter. In summer the currents at Kite Beach (+0.03) and north-west of it (+0.05) are weak and run the other way.
Bed change sensible? Yes. Changes are concentrated on the sand patches at the reef edge and on the beach face, which loses a little in both seasons (on average 1–4 mm over the 2 hours), as in the 1D runs.
Speed 12 minutes per simulated hour on one processor core.

Getting there took four fixes: 1. Grid corners: the rotated grid's corners reached past the depth map. 2. Speckle: the raw Coral Atlas depths gave speckled bed changes, so the smoothed depths (as used by SWAN) are used instead. 3. Edge jets: the ends of the domain produced false currents, so the depths are blended to a uniform profile over the outer 250 m. 4. Wind direction: this XBeach version reads it as the direction the wind blows towards. We found this by testing.

The GPU question (gate 1 of the plan): the CPU is fast enough for the next stage. A season of representative conditions is about 10 conditions × 4 hours with morphological acceleration (the bed change multiplied so that a few hours of waves stand for a longer period), which is 40 simulated hours. That is about 8 hours of computing on one core. Running conditions side by side helps only up to the 8 physical cores: with 12 at once, each ran about 5 times slower, so the whole CPU manages about 5–6 minutes per simulated hour, or about 4 hours per season. Converting to the GPU was not needed for stage 2. It would only pay off for many long runs (several years, or scenarios).

13.2 Stage 2: a year of representative conditions (test not valid)

Method: - Conditions: for each calendar month, every hour of 2017–2026 was grouped into 3 representative wave-and-wind conditions (36 in all), weighted by the share of the month's hours each represents. This is a "reduced wave climate". - Runs: each condition was run in the 2D Kite Beach pilot model (same depths and rock as above) for 2 hours with the bed changing, all from the same starting beach. - Monthly change: the sum of each condition's rate of beach change × the hours it represents. - What it was meant to test: the pattern through the year, not the size. The beach does not evolve between conditions, and nothing limits how much sand is available.

2D XBeach through the year

Top: change in beach width by month. Grey = satellite (with its average removed); orange = model, on its own scale. Bottom: the average year. The model's line at each stretch only goes one way, up or down, all year.

What went wrong. Each rate is the bed change in the first 2 hours from the same starting bed. That bed has not settled to the waves: in the first hours the model reshapes it in the same direction whatever the conditions, and faster when the waves are bigger. This start-up effect swamps any real seasonal response. The test added on 7 October 2026 (outputs/xbeach2d_seasons.md, outputs/xbeach2d_seasons_stats.json) shows it:

Stretch Conditions (of 36) that build the stretch Model's monthly change against the month's wave energy (correlation) Model average (m per month) Model against satellites (correlation, 12 months) Months with the same sign as the satellites
North-west of Kite Beach (4.15–4.7 km) 0 −0.94 −14.0 −0.27 (p 0.40) 7 of 12
Kite Beach 36 +0.93 +3.5 +0.68 (p 0.02) 6 of 12
Kite point (5.5–6.1 km) 0 −0.98 −108 +0.46 (p 0.13) 6 of 12

Wave energy here is the hours in each condition × the square of the wave height at the model's edge, summed over the month. p is the chance of a correlation this strong arising by luck. Same-sign months use the model with its average removed.

What it means: 1. Every condition builds Kite Beach, and no condition builds its neighbours. So the model's "season" at each stretch is just its fixed start-up direction, multiplied by how much wave energy the month has. At Kite Beach that makes the model's monthly change follow the wave energy almost exactly (correlation +0.93). 2. Kite Beach's seasons are therefore not reproduced from physics. The earlier version of this section said they were (+3.5 against +4.0 m per month, 9 of 12 months with the same sign). That claim is withdrawn. Kite Beach is wider in the more energetic months, so any series that follows wave energy correlates with it to some degree, which is all the +0.68 shows; the signs agree in only 6 of 12 months, no better than chance. The model's most-building month is January and its least-building June, against October and July in the satellite record. 3. The "sand trap" pattern is not evidence either. Sand moving into Kite Beach from its neighbours in every month is the same start-up direction, so this test neither supports nor rules out the trap found by other methods (Section 7). 4. The sizes are impossible. Added over a year, the model's Kite Beach gains about 42 m, while the satellites show no clear trend (+0.3 ± 0.9 m per year, outputs/beach_trends.md). The Kite point loses over 1 km of beach a year in the model; it is also close to the model's edge.

What the pilot does still show (13.1): XBeach runs stably over this reef at a usable speed, and its waves agree with SWAN's to within a few per cent. Read correctly (version 0.10), its currents on the corrected depths agree with the current model's in 5 of the 6 direction checks, including the flow at the point towards Cabarete Bay (13.1; outputs/xbeach2d_v2_pilot.md).

What would be needed for a real test of the seasons: - Runs that let the bed settle first, then measure the rate of change after that (or remove the start-up part from each run), on the corrected depths and with the rock and sand treated the same way as in the other models. - Or a whole year in sequence: the actual waves hour by hour, with the bed evolving and a limit on how much sand the back-reef floor holds, on a domain wide enough to keep the Kite point away from the edge. - Either way, tuned against measurements: the satellite widths and, ideally, beach-profile surveys (Section 12).

Gate 2 of the plan (is the GPU worth it?). Not yet answerable: stage 2 has not given a valid result. A year in sequence with morphological acceleration of about 20 needs about 440 simulated hours in a single run, which cannot be split into independent runs across cores. Rough times:

How Estimated time
One core about 90 hours
XBeach's multi-processor version on 8 cores about 12–15 hours
A GPU version about 1–3 hours

14. How fast is this computer? Speed benchmarks

The computer: - CPU: Intel Core i9-9900K, 8 cores / 16 threads, 3.6 GHz. - Memory: 64 GB. - GPU: NVIDIA GeForce RTX 5070, 12 GB.

All times below were measured on this machine during this study.

Model One run is Grid Time Per simulated hour
SWAN (waves, steady state: one settled sea state per run; 8 threads) Kite Beach area, 3.2 × 2.1 km 40 m (4,160 cells) 5 s –
20 m (16,800 cells) 21 s –
10 m (67,200 cells) 79 s –
5 m (268,800 cells) 393 s –
SWAN lookup table 720 runs, 2 at a time × 8 threads 20 m 3.8–5 h (median 37–48 s per run) –
SWASH (every wave; 1 core per run) 940 m line, 1 m, 2 layers, 70 min of waves 940 points 5.5–10 min 5–9 min
XBeach 1D (1 core per run) 940 m line, 2 m, 13 h swell event 471 points 13–36 min (8–16 runs at once) 0.6 min alone; 1–2.8 min when 8–16 run together
XBeach 2D (1 core per run) Kite Beach and back-reef, 1.45 × 2.6 km 10 × 20 m (19,126 cells) 36 min for 3 h 12 min
Our GPU flow model (RTX 5070) Kite Beach area, currents with wave forcing 10 m (67,200 cells) – 4 s
5 m (268,800 cells) – 8 s
2.5 m (1.08 million cells) – 44 s
Hourly nearshore wave record 85,000 hours × 3 stretches, from the SWAN table – 5 min –
Surf-spot products; before-and-after-swell test 2017–2026 – 11 s; 5 s –

What these numbers mean: - SWAN's cost goes up about 4–5 times each time the grid spacing halves. That's why the lookup tables (Sections 5 and 10) were built on a 20 m grid: each run takes well under a minute, so a 720-run table takes hours rather than days. 10 m would cost about 4 times as much, and 5 m is practical only for single cases. - The CPU's 16 threads are best used running many small models side by side, but only up to about 8. Most of our runs used one core each, 4–16 at a time. Beyond the 8 physical cores, runs just share the cores and memory: 12 2D XBeach runs at once each ran about 5 times slower than one alone, for no gain in total output. - The GPU is in a different league for plain currents. At 10 m it simulates an hour of back-reef currents in 4 seconds, about 900 times faster than real time, so a year takes about 10 hours. At 2.5 m it still handles over a million cells, at about 1.2 billion cell-updates per second. - Per cell per time step, XBeach does far more work than the GPU flow model: wave groups in 16 directions, the roller (the foam riding on each breaking wave), and sand. Both use similar time steps (about 0.27 s for XBeach, 0.3 s for the GPU model at 10 m), and XBeach on one core manages about 0.35 million cell-updates per second (a cell-update is one grid cell advanced by one time step). A GPU version of XBeach-style physics would probably land at 5–50 million: roughly 15–150 times one CPU core. Since the whole CPU, running 12 XBeach cases side by side, gives only about 2.4 times one core's output, that is roughly 6–60 times the whole CPU. These are estimates, not measurements.

Update, 7 October 2026. The GPU flow model was updated to the newer version of the same code built for the Kingston harbour model. It gives the same results to the last digit on the Kite Beach cases, and adds faster options (recording the time steps once and replaying them on the graphics card) and more kinds of model edge. The scripts here still step the model one time step at a time, so they run at the speeds above.

What might be possible on this machine:

Task Estimated time
A 10 m SWAN table with a wind axis (about 2,000 runs) about 2 days (each 10 m run costs about 4 times a 20 m run)
A season of 2D XBeach at Kite Beach (reduced wave climate) about 4 hours using the whole CPU (throughput about 5–6 min per simulated hour)
A full year of 2D XBeach, every real wave condition in sequence (bed change speeded up about 20 times) about 90 hours on one core, 12–15 hours with the multi-processor version on 8 cores, 1–3 hours on a GPU version (Section 13.2)
A year of back-reef currents at 10 m on the GPU (without surf beat, the slow surges that come with the sets) about 10 hours
The whole reef, 1.5 km west of Encuentro to past Cabarete (9.6 × 6.8 km at 10 m, 650,000 cells), on the GPU (done, Section 15) about 1 minute per 4-hour run
The whole-reef XBeach budget, 32 runs of 2 hours (done, Section 15.6) about 15 hours, 8 at a time

15. Where the water goes: the back-reef flow from Encuentro to Cabarete Bay

Rewritten on 30 September 2026 after three corrections. The earlier version of this section had the model area stopping at Encuentro and the Kite point, drone depths blended into the reef, and a wave-force method that pushed the water too weakly on the reef and falsely in deep water. Revised again on 7 October 2026 (version 0.9) after the quality review: the water crossing the reef line is now counted along the reef line itself, following its bends (before, it was counted as if the line ran parallel to the beach); the wave push now comes from wave breaking alone; and the sand formula now uses the right measure of the wave motion at the seabed. All the tables are recomputed. The flow patterns hardly changed, but several amounts did, most of all at the north-west end of Kite Beach and at the opening of Cabarete Bay.

The idea. When waves break on the reef, they push water over it into the back-reef (the shallow water between the reef and the beach). That water has to get back out to sea. It does so as currents through the lower and deeper gaps in the reef. Where those currents speed up they can scour sand, and where they slow down they drop it. Adding up the water that comes in over the reef and the water that goes out through each gap gives a flow budget for the whole coast.

15.1 The model

Back-reef currents around Kite Beach

Water and sand budget along the reef

15.2 What the currents do

Case Water pushed in over the reef, Encuentro to Cabarete (m³/s) Out through the lower reef at Kite Beach's north-west end and the between stretch, 4.1–4.8 km (m³/s) Flow along the Kite Beach back-reef at 5.15 km (m³/s; + towards Encuentro) Flow at the Kite point, 5.75 km (m³/s; − = towards Cabarete Bay)
Typical winter day (1.5 m, 10 s, from the north-east) 3,761 273 +66 −189
Typical summer day (1.15 m, 7 s, east-north-east) 1,740 284 +117 −59
Strong trade winds (2 m, 8 s) 2,577 272 +170 −65
Big north-east swell (3 m, 12 s), mid tide 4,712 395 +58 −331
Same swell, low tide (−0.3 m) 3,890 342 +40 −263
Same swell, high tide (+0.3 m) 5,582 416 +78 −360
Big north swell (3 m, 13 s) 4,441 417 +9 −499

15.3 The Kite Beach channel: surges from sets (XBeach)

The current model averages over 1.5 hours. Real outflows come in surges, as each set of waves pushes a slug of water over the reef and it drains back out (surf beat). So we ran XBeach over the Kite Beach back-reef (4.0–5.9 km), with the corrected depths and the channel, and recorded the currents every 10 seconds (xbeach_reef.py). The analysis was rerun on 7 October with the same corrected counting along the reef line as the current model, and again on 8 October (version 0.10) with XBeach's currents read correctly: XBeach writes them as east and north components, and up to version 0.9 our script turned them a second time, which gave wrong speeds and directions through the reef (no new runs were needed).

XBeach outflow through the reef

Current out through the reef (m/s) Typical winter day Big north-east swell Big north swell
Kite Beach channel (4.9–5.35 km), average over the hour 0.35 0.51 1.01
… strongest 10-second surges 0.59 1.13 1.93
… net flow over the whole 450 m stretch (m³/s) 275 in 490 in 204 in
Lower reef at Kite Beach's north-west end (4.3–4.8 km), average 0.70 0.97 0.43
… strongest surges 0.93 1.45 1.08
… net flow (m³/s) 44 out 288 out 213 out

From outputs/xbeach_reef.json. The speeds are the fastest outflow along each stretch of the reef line. Version 0.9 had, wrongly, the channel at about 1.0, 1.2 and 0.3 m/s on average and the north-west end with almost no net outflow in the big north-east swell and a net inflow in the big north swell.

15.4 Where the water turns cloudy after big swells (satellites)

If sand and fine sediment are stirred up behind the reef in big swells and carried out, the water outside the reef should turn cloudier. We compared Sentinel-2 images taken after big swells (waves over 2 m in the 24 hours before the image) with images from quieter days (waves no higher than 1.3 m), with white water, cloud and cloud shadow removed (plume_check.py). Both groups are from the same season, November to April (26 and 30 images), because most big swells come in winter and most calm days in summer, and the season alone changes how the water looks. The earlier all-year comparison (32 against 50 images) is kept in the figure for reference. Cloudiness is measured as the brightness of the water in green light above that of clear deep water (in reflectance × 10,000), 60–400 m outside the reef line.

Cloudier water after big swells

15.5 How much depends on the unmeasured depths?

We reran four cases with the channel 2 m and 4 m deep instead of 3 m, and with the back-reef's deepest pockets capped at 3 m, in case they are really dark seagrass rather than deep water.

Big north-east swell Channel 2 m Channel 3 m (main runs) Channel 4 m Back-reef capped at 3 m
Out at Kite Beach's north-west end and the between stretch, 4.1–4.8 km (m³/s) 396 395 265 341
Fastest average outflow through the channel, 4.8–5.1 km (m/s) 0.32 0.42 0.84 0.47
Flow along the Kite Beach back-reef at 5.15 km (m³/s) +55 +58 +62 +60
Flow at the Kite point, 5.75 km (m³/s) −351 −331 −331 −346

15.6 A sand budget from these currents: not reliable

We tried to turn the currents into a year-round sand budget (sand_budget.py, rerun on 7 October with the corrected currents and near-bed wave speed). - Method. Every hour of 2017–2026 was matched to one of the seven cases by its waves and tide, and the sand the currents could carry was scaled by the cube of the wave height. We then counted the sand crossing lines along and across the coast, and compared each beach's gain or loss with the satellite trends. - It failed. The currents could carry 14 to about 4,000 times more sand than the beaches actually gained or lost (150–1,000 times in most stretches). The sign of the gain or loss matched the satellites in only 4 of 9 stretches, no better than chance, and beach by beach the correlation was weak and the wrong way (−0.3). - Why. The sand formula (Soulsby–van Rijn) is not calibrated here, and the grain size it assumes (0.25 mm) has not been measured, so the amounts it gives are only a capacity. A steady current model also leaves out what waves do at the beach itself: the swash, the undertow and the surges. (Earlier versions also said that much of the back-reef is really rock or seagrass with only a thin, patchy cover of sand, so that the model moved sand that isn't there. That idea came only from the Coral Atlas, a satellite map of reef shapes that does not measure sand, and locals report the opposite: the bottom is sandy from Cabarete Bay to Encuentro and out past the reefs, with plenty of sand. We have withdrawn it.) - So we don't trust its numbers for sand lost to Sosúa or to deep water. It gives about 71,000 m³ a year carried west past Encuentro and about 2.8 million m³ a year carried out to sea, far more than the beaches' small changes could allow. - The second try: XBeach over the whole reef (xbeach_budget.py). XBeach limits sand movement to the sand that is there, and includes what waves do at the beach. - It ran on two model areas, one from Encuentro to past Kite Beach, the other from Kite Beach across Cabarete Bay, with the corrected depths. - Sand was 3 m thick on the beach and near shore, a thin 0.3 m layer on the back-reef flats, and absent on the Coral Atlas reef zones, which were treated as rock (in the 2D XBeach runs about 21% of the cells). With the plentiful sand that locals report, this set-up underestimates the sand available; a rerun with sand everywhere except the reef crest is planned (Section 12.5). - The year was represented by 16 typical conditions (from 1 m trade-wind days at 1,170 hours a year to a 4 m north swell at 16 hours a year), each run for 1 hour after a 1-hour start. - All 32 runs took about 15 hours. - It failed the test as well. - The yearly totals are swamped by the start-up. In each run the beach and seabed first reshape themselves to suit the model's physics. That makes the beach in eight of the nine stretches "gain" sand, typically a few hundred times faster than the satellites record (from about 70 to 4,000 times); the ninth, the small beach by the Kite point, hardly changes. Counting the back-reef as well, five stretches lose sand (from Encuentro beach to Kite Beach) and the four from the small beach by the point to eastern Cabarete Bay gain, but not in a way that matches the satellites. (Re-analysed in version 0.10 with XBeach's sand transport read correctly: the beach changes are unchanged, but the sand moving along the shore and out to sea changed, and with it this back-reef count; version 0.9 had three stretches losing.) The sign matched in 5 of 9 stretches, with no correlation (−0.02). - Its month-by-month pattern is not a test either. The 2D XBeach season runs (Section 13.2) showed that, in such short runs, a stretch's monthly "change" mostly follows that month's wave energy with a fixed sign. So a partial match with the satellites' average year would not show that the model gets the seasons right, and we do not use it. - What this means. The beaches change by only up to about 6 m³ per metre a year (from the satellite trends), much less than their seasonal swings (Section 3). A budget that can see the yearly changes, and so the sand passing through towards Sosúa or out to sea, needs: - long runs that follow the beach through whole seasons after it has settled, not 1-hour rates added up; - sand allowed everywhere it really lies, which by local observation is almost everywhere except the reef crest; - and measurements to tune them: grain size, how deep the sand is stirred, and repeated surveys.

So both budgets failed for the reasons above: XBeach's start-up effect, the uncalibrated sand formula, the unknown grain size, and a steady current model that leaves out what the waves do at the beach. A lack of sand on the bottom is no longer one of them. With what we have, the models give the directions and the mechanisms, and the satellites give the amounts stored on the beaches. How much sand passes through the system and is lost to the west or offshore stays an open question.

15.7 What it means, and how much to trust it

15.8 Do the model's edges change the answers?

Added 7 October 2026 (version 0.8); redone for version 0.9 on the corrected model.

A current model has to stop somewhere, and what it assumes at its edges can leak into the answers. In this model the water level is held at sea level along the offshore edge and along both side edges. But the side edges cross the surf zone, where breaking waves raise the water level (wave setup), so holding them at sea level could drive false currents. A test in another model we built with the same computer code (for a harbour in Canada) showed that this kind of edge can matter. So we reran both current models with "free" side edges instead. A free edge lets the level and the current carry on unchanged across the edge, which is the usual choice where the coast continues beyond the model; XBeach uses it by default (boundary_sensitivity.py, reef_boundary_test.py).

The Kite Beach model (Sections 6 and 7; typical winter and summer days): - With free side edges, the average currents change by less than 2% at Kite Beach, along the summer stretch and between them. Fewer than 5% of the cells away from the edges change by more than 5 cm/s. - On version 0.8 of this model, we also checked that differences of this size are real and not the model's own natural eddies: a run with the wind changed by 0.1% changed almost nothing. That check has not been repeated on version 0.9. - A third set-up, a "radiation" edge that lets water out towards sea level, did change the answers (the currents along the summer stretch dropped by about a quarter): it drained the wave setup out sideways, which is wrong where the beach carries on beyond the edge. We did not use it. - So the edges do not affect this model's results.

The whole-reef model (this section), all seven cases:

Case Water in over the reef (m³/s): held edges (as in 15.2) / free side edges Out at Kite Beach's north-west end and the between stretch, 4.1–4.8 km Along the Kite Beach back-reef, 5.15 km At the Kite point, 5.75 km
Typical winter day 3,761 / 3,724 273 / 270 +66 / +67 −189 / −188
Typical summer day 1,740 / 1,753 284 / 284 +117 / +117 −59 / −60
Strong trade winds 2,577 / 2,595 272 / 274 +170 / +169 −65 / −69
Big north-east swell, mid tide 4,712 / 4,771 395 / 394 +58 / +64 −331 / −341
Same swell, low tide 3,890 / 4,031 342 / 292 +40 / +35 −263 / −284
Same swell, high tide 5,582 / 5,599 416 / 517 +78 / +83 −360 / −363
Big north swell 4,441 / 4,449 417 / 413 +9 / +7 −499 / −501

What this means. With the corrected counting, the edges matter much less than version 0.8 reported (there, for example, 593 against 335 m³/s out at the north-west end at mid tide). The amounts given for the big north-east swell around Kite Beach (Sections 15.2 and 15.5) should be read as uncertain by about a quarter, and the local directions of sand movement in the back-reef at the north-west end of Kite Beach in that swell are not reliable. The typical days and the north swell are not affected. A firmer answer would need a wider model, so that its edges are far from Kite Beach, or measurements. Future big-swell runs should be made with both kinds of edge and reported only where they agree (docs/VALIDATION_PLAN.md).

Appendix: fixing SWASH's output

The first SWASH runs finished, but two of their outputs could not be read: 1. The near-bed velocity file came in SWASH's "STAB" format, with a long header, not a plain table. It is standard for velocities output per layer. We wrote a reader for it (read_stab in swash_transects.py). We also learned that dry points are not flagged, so they are detected by water depth instead. 2. The run-up output was meaningless (values of about 10⁻³⁸). The manual says run-up must be written with the special output set 'NOGRID', not at a point. We fixed that, and added output points every 1 m across the swash zone as an independent check. The two run-up estimates now agree to within about 0.06 m. 3. We added surf-beat analysis: the water level at each point is split into ordinary waves (under 25 s) and surf beat (over 25 s).

All 54 SWASH runs (3 Kite lines × 10 cases, 3 Encuentro lines × 8 cases) were rerun with the corrected output.

Appendix: files

Figures and scripts, all in G:\github\cabarete-sand:

Topic Scripts Main outputs
Satellite waterlines fetch_s2.py, timelapse.py (sun glint removed), segment_budget.py, map_seasonal.py (tide_correct.py is the older San Juan correction, superseded) outputs/kite_timelapse.mp4, outputs/kite_timelapse.gif, outputs/shoreline_positions.csv, outputs/wide/
Tide tide_gauge.py (Puerto Plata gauge, UHSLC 777; data/tide_gauge/h777.csv); fetch_tide.py (the older San Juan × 1.44, superseded) data/tide_cabarete.csv, outputs/tide_gauge.md, outputs/tide_gauge.png
Depths build_bathymetry.py [kite\|encuentro] data/model_bathymetry_*.tif, outputs/model_bathymetry_*.png
Back-reef flow, whole reef build_bathymetry.py reef (Atlas only, crest kept shallow, Kite Beach channel), reef_flow.py (breaking-based wave force); sensitivity build_bathymetry.py reef_ch2/reef_ch4/reef_cap3 with REEF_DOMAIN=...; surges xbeach_reef.py; cloudiness plume_check.py; budgets sand_budget.py, xbeach_budget.py data/model_bathymetry_reef*.tif, model/reef_flow/, outputs/reef_flow*.json, outputs/reef_flow_*.png, outputs/reef_flow_run.log (outlet lists); outputs/xbeach_reef.json/.png; outputs/plume_check.json/.png; outputs/sand_budget.json/.png; outputs/xbeach_budget.json/.png
Currents and sand, Kite Beach model (Sections 6, 7 and 15.8) flow_sand_cases.py (GPU current model on the Kite Beach SWAN cases) model/flow/, outputs/flow_sand_*.png, outputs/flow_sand_summary.txt
Mapping drone photos onto the ground photo_rectify.py (needs the drone's position and angles in the photo) outputs/photo_*.png
Reef gaps and channels, whole coast bathy_survey.py outputs/bathy_survey*.png, outputs/bathy_survey.json, data/bathy_survey.npz
SWAN swan_cases.py, swan_table.py (CABARETE_DOMAIN=encuentro for the new area), swan_hindcast.py, table_summary.py; offshore wave climate figure longshore_model.py data/swan_table*.npz, data/nearshore_hindcast.csv, outputs/swan_cases.png, outputs/swan_vs_whitewater.png, outputs/nearshore_waves.png, outputs/wave_climate.png
SWASH swash_transects.py (--sweep, --encuentro, --analyse), swash_figure.py model/swash/, outputs/swash_*.png, outputs/swash_*.md
XBeach 2D pilot xbeach_2d.py, xbeach_2d_figure.py (XB2D_DEPTH=reef for the corrected depths); plan in XBEACH_2D_PLAN.md model/xbeach2d/, model/xbeach2d_v2/, outputs/xbeach2d_pilot.png/.md, outputs/xbeach2d_v2_pilot.png/.md
XBeach 2D stage 2 (reduced climate) xbeach_2d_seasons.py model/xbeach2d_seasons/, outputs/xbeach2d_seasons.png, outputs/xbeach2d_seasons.md, outputs/xbeach2d_seasons_stats.json
Kite point and Cabarete Bay fetch_s2.py --coast, CABARETE_AREA=coast timelapse.py (water-frequency reference line for the curved coast), coast_budget.py, build_bathymetry.py cabarete, CABARETE_DOMAIN=cabarete swan_table.py, XB2D_SET=bay xbeach_2d.py outputs/coast/, outputs/coast_budget.png/.md, data/swan_table_cabarete*.npz, outputs/xbeach2d_bay_pilot.png/.md, outputs/xbeach2d_bay_v2_pilot.png/.md
Wind-blown sand aeolian.py (ERA5 wind and rain, data/rain_era5.csv; dry beach widths from the satellite images) outputs/aeolian.png, outputs/aeolian.md, data/aeolian_monthly.csv
Depth sensitivity depth_sensitivity.py outputs/depth_sensitivity.md
Summary figures summary_figures.py outputs/report/exec_summary.png, outputs/report/transport_hinge.png
Spot lookup for the surf forecast spot_downscale.py (with per-hour warnings), primer_figures.py; the primer SURF_LOOKUP_TABLES_PRIMER.md; the GPU surf-forecast plan GPU_SURF_FORECAST_PLAN.md data/spot_tables.npz, outputs/spot_downscale_demo.png, outputs/primer/
Speed benchmark (GPU) benchmark_gpu.py outputs/benchmark_gpu.json
XBeach xbeach_lines.py (--encuentro; XB_FACUA, XB_SUBDIR for the sensitivity runs), xbeach_figure.py model/xbeach/, outputs/xbeach_*.png
Before and after big swells swell_events.py outputs/swell_events.png, outputs/swell_events.md/.json
After north swells (version 0.11) north_swell_events.py outputs/north_swell_events.png, outputs/north_swell_events.md/.json
Along-shore sand alongshore_swan.py outputs/alongshore_swan.md, outputs/alongshore_swan*.png, data/alongshore_forcing.npz
Response models response_model.py, equilibrium_model.py outputs/response_model.md/.png, outputs/equilibrium_model.md/.png
Surf spots spots.py outputs/spots_*.png, outputs/spots_summary.md, data/spots_hindcast.csv
Report figures report_figures.py outputs/report/
SWAN data for other projects – SWAN_DATA_GUIDE.md
Checks added in version 0.9 waterline_crosscheck.py (an independent waterline from the 10 m bands), beach_trends.py (trends and swings), alongshore_numbers.py (the along-shore model's numbers quoted in Section 7), boundary_sensitivity.py (the edges of the Kite Beach current model, flow_sand_cases.py) and reef_boundary_test.py (the edges of the whole-reef model), xbeach_reef.py --analyse-olddepths; ERA5 peak periods fetch_waves.py --peak outputs/waterline_crosscheck.md, outputs/beach_trends.md, outputs/alongshore_numbers.md, outputs/boundary_sensitivity.json, outputs/reef_boundary_*.json, outputs/xbeach_reef_olddepths.json, data/waves_era5_peak.csv
Checks added in version 0.10 kite_point_nest.py (the current model at 5 m with SWAN nested at 5 m and 2.5 m around the Kite point), waves_from_space.py (wave-crest directions in the satellite images); the XBeach reading fix in xbeach_2d_figure.py, xbeach_reef.py, xbeach_budget.py outputs/kite_point_nest.md/.json, outputs/waves_from_space.md/.json/.csv, outputs/xbeach2d_*pilot.md/.png, outputs/xbeach_reef*.json/.png, outputs/xbeach_budget.json/.png; the 0.9 versions in outputs/archive/2026-10-08_v0.9/
Quality review and validation – docs/qa/ (findings and register), docs/VALIDATION_PLAN.md
Earlier results – outputs/archive/<date>_<version>/, model/archive/, data/archive/

Version history

Version numbers were added on 7 October 2026 and given to the earlier states of the report from the project's change record (git). From now on, every change to the report's results, figures or web pages gets a new number here.

Version Date What changed
0.1 28 Sep 2026 First report: ten years of satellite shorelines, the SWAN and SWASH wave models, the along-shore and across-reef sand models, and the surf-spot products.
0.2 28 Sep 2026 XBeach 1D swell events and their onshore-transport sensitivity; the before-and-after-swell satellite test (Sections 6.3–6.4); the 2D XBeach pilot and the speed benchmarks (Sections 13–14).
0.3 29 Sep 2026 The measured Puerto Plata tide replaced the scaled San Juan prediction, and the tide-dependent analyses were rerun (Sections 3.5, 7.4). Stage 2 of 2D XBeach (a reduced year of waves), which appeared to reproduce Kite Beach's seasons (withdrawn in 0.9 as a start-up effect). The executive summary answering the six questions. The surf-spot lookup module.
0.4 30 Sep 2026 The study area was extended to Cabarete Bay (satellite waterline, SWAN table, along-shore model, Section 7.5); depth sensitivity (Section 3.6); "lagoon" renamed "back-reef"; the summary (REPORT_SUMMARY.md); wind-blown sand (Section 7.6); the north-swell reversal near the Kite point; the whole-coast seabed survey (Section 3.7).
0.5 30 Sep 2026 The whole-reef back-reef flow model (Section 15), rewritten the same day after three corrections (wider area, Coral Atlas depths only with the reef crest kept shallow, wave push from breaking); XBeach surges in the Kite Beach channel; the plume check; channel and back-reef depth sensitivity. First publication of the web viewer, the report and the summary at kewlmermaid.com/kite-beach-sand/.
0.6 1 Oct 2026 Reef line traced from the model depths; the XBeach whole-reef sand budget (it failed the satellite test, Section 15.6); the back-reef water split near the south-east end of Kite Beach made explicit; a consistency pass; drone against Atlas depths by depth band; the surf lookup-table primer.
0.7 2 Oct 2026 The surf lookup tables rebuilt on the corrected depths; Cabarete Main Reef located from a local's pin and taken from the Cabarete Bay table.
0.8 7 Oct 2026 The current models' GPU solver updated to the version of the Kingston harbour model (same results to the last digit, faster options). A test of the current models' open edges (Section 15.8): the Kite Beach model and the typical days in the whole-reef model are not sensitive to them, but the big-swell results at Kite Beach are, and are now marked as such. Independent quality review of the code and the report (findings register in docs/qa/). Validation plan with pass/fail criteria set in advance (docs/VALIDATION_PLAN.md). Version numbers and this history.
0.9 7 Oct 2026 The quality review's findings worked through (docs/qa/QA_REGISTER.md). Fixes: sun glint removed from the satellite waterline, and a second, independent waterline as a check (the traced line sits 10–17 m landward of the water's edge; the timing of the seasons holds, their sizes are less certain); the tide measured from its 2017–2026 mean; trends from monthly means with honest error bars (Kite Beach shows no clear trend; the small beach by the Kite point narrows about 2 m a year); swell-event changes tested against the random dates and for the number of tests (none stands out); the response model tested against a stronger baseline (it still works for the summer stretch); the along-shore model, wave record and surf-spot products moved to the corrected depths, and the sand-transport coefficient corrected (the waves' potential volumes are about twice what was printed); the 2D XBeach seasonal test withdrawn (a start-up effect); the reef-flow model's count of water crossing the reef corrected and its wave push limited to breaking (the outflow at Kite Beach's north-west end is about 270–420 m³/s in every case; the edge test of 0.8 redone: the big-swell sensitivity is much smaller than 0.8 said); the plume check compared within the same season; SWASH rerun without a repeating wave train and with the beach no longer capped at +2 m (big-swell run-up was capped before); the XBeach pilots rerun on the corrected depths. Executive summary, summary and every affected section rewritten from the new outputs.
0.10 8 Oct 2026 XBeach direction fix. XBeach writes its currents, wave forces and sand transport as east/north components; our scripts (xbeach_2d_figure.py, xbeach_reef.py, xbeach_budget.py) turned them a second time, which scrambled every 2D XBeach current direction up to 0.9. Fixed, and the existing XBeach runs re-analysed (no new runs; the 0.9 outputs are in outputs/archive/2026-10-08_v0.9/). Grid-size test (kite_point_nest.py): the current model on a 5 m grid, with SWAN nested at 5 m and 2.5 m around the Kite point, gives the same answer as the 10 m model, so grid size was not the cause of the apparent disagreement. Satellite wave crests (waves_from_space.py): on the reef approach at the point the swell comes from about 22°, north of the coast normal (57°) in 98% of 103 images, as in SWAN and XBeach. Consequences: at the Kite point XBeach and the current model now agree that the water near the beach runs into Cabarete Bay (the 0.9 "unresolved disagreement" is gone; confidence medium); the two broadly agree along the coast, including the eastern bay; the Kite Beach channel is a weaker rip than published on typical winter days and in big north-east swells (about 0.35 and 0.5 m/s on average) and strongest in big north swells (about 1.0 m/s, surges about 1.9 m/s); 0.9 had it at about 1.0–1.2 m/s on typical winter days and in big north-east swells, with surges to 1.8 m/s; XBeach now confirms the main exit at Kite Beach's north-west end; the XBeach whole-reef budget's along-shore and offshore sand movement changed, but it still fails the satellite test. Which way the sand moves at the point is still not known: the push along the beach face runs towards Kite Beach, the current further out towards Cabarete Bay, so some Kite Beach sand may leave south-east past the point; drifters and sand samples are added to the next steps (Sections 7.4, 7.5, 12, 13.1, 15.3, 15.6, 15.7). Local knowledge (9 Oct 2026): a local reports that the bottom of Cabarete Bay and from Kite Beach to Encuentro is sandy, out past the reefs too, with plenty of sand; our sand cover had come only from the Coral Atlas. No new model results, but the reasoning changed: "the back-reef is mostly rock with a thin cover, so the model moves sand that isn't there" is withdrawn as a reason for the failed sand budgets; a flow passing through now looks the likelier reason Encuentro does not fill up; some sand moving south-east past the Kite point is more likely (sand direction there still low confidence; grain size and how much moves are the unknowns); the cloudy water after swells fits a sandy bottom; a rerun with sand everywhere except the reef crest is planned (Sections 7.4, 9, 11, 12.5, 15.4, 15.6, 15.7).
0.11 12 Oct 2026 North swells in the satellite record (north_swell_events.py). Image pairs no more than 30 days apart, with the width change fitted to the north-swell (320°–25°) and other wave energy between the images. After a typical north swell the south-east half of Kite Beach is about 2 m wider within a few days (q = 0.02 after 49 comparisons) and western Cabarete Bay about 1.7 m wider (q = 0.06); the summer stretch tends to be narrower (not significant after the comparisons). This is the first clear mark of a swell type in the satellite record, and the first satellite sign of sand moving south-east past the Kite point. Added to Section 7.5, with notes in the executive summary, Section 6.3 and the confidence tables. No other results changed.