
NPC Journal 3(3 ) , 1982 , pp 11-17 Mexico 1981 - Spring Project Departing from Heathrow in typical British rain and low cloud I expected sunny Texas to be a pleasant improvement , but arriving in Houston six hours late , I got a bus to Austin and found the weather was just the same - a poor start soon to be improved upon as frantic last minute food and gear buying took place in increasingly hot conditions . After five days of this , based at AMCS ' headquarters ' as a guest of Peter Sprouse and Terri Treacy we hit the road to Mexico , the sheer length of the drive across Texas starting to bring home the size of this continent . We reached Ciudad Victoria , Mexico , the next day and from there we headed towards the mountains and the Río Purificación at Barretal . After a last swim in the river we set off up the long dirt track into the hills , starting out flat and straight past large cacti in the fields , but becoming abruptly steeper as the Sierra Madre Oriental reared up ahead . The track soon became a four wheel drive test piece like the Alum Pot track laid over Hardknott . This lasts for a good fifteen miles passing over the Paso del Muerte , an entertaining bit of road eight feet wide cut into a cliff face rising several hundred feet on the right , and adding an air of seriousness to the almost sheer half mile drop into thick forest on the left . Rounding a tight bend , a vista opened up on the right , of the Cañon Infiernillo , in the steep headwall of which is the massive entrance of Cueva Infiernillo , the bottom entrance to La Sistema Purificación . As darkness descended , we arrived at Conrado Castillo , a tiny forestry hamlet , which was to be our base for the next seven weeks . The first day was spent organising gear , and in finding our way round the immediate area . Our first trip into the Sistema was via the Entrada de los Franceses , an entrance direct into the highest part of the system , Valhalla , a complex fossil phreatic maze in somewhat crumbly rock . The first part of the cave is generally dry and we caved in jeans and shirt sleeves down a series of low passages and then many climbs always leading down over solution etched rock in wierd forms . One or two parts of this area are quite narrow , and as we were carrying quite a bit of gear , our progress was not too fast in the warm cave ( generally about 15° in the upper part of the system ) . A change of character in the cave to darker , firmer limestone somewhat reminiscent of OFD was closely followed by the sound of running water and we soon emerged at roof level above a five metre climb into Valkyrie River , a recently discovered stream passage whose source and destination are unknown . We unpacked gear and got changed into wetsuits in the roof passage and then climbed down into the stream . Upstream through beautiful blue dolly tubs , a series of shallow lakes led to a wide sump pool held back by extensive gravel banks . Here Randy Rumer donned a mask and tried free diving with an electric lamp . The roof levelled out at about -2m in very clear water but Randy needed a large rock in his wetsuit to get enough weight to go further . A small bell about 2m in had no air and as the sump could be seen to go many metres in crystal visibility he retreated . Don Coons dived a couple of times finding nothing new , but the visibility started to deteriorate , so we decided to head downstream to survey in going leads . Downstream from our entry point , deep canals in blue water with calcite encrustations made pleasant going to a sump with a bypass . From here we split into two parties to survey cave which soon degenerated into muddy grovels which closed down or sumped . We reached the surface after 13 hrs underground . After a couple of days rest , we planned a week long trip to Camp 1 in Infiernillo to explore leads in the lower part of the system . Since the cave entrance is halfway up a large cliff at the head of a cañon about an hour and a half from the nearest road access , and major leads are up to 3 miles inside the cave , camping is almost obligatory . We took the trucks down a rough 4-wheel track to where it fizzled out in the middle of the forest . A long trek down into the cañon following an ill-defined trail led to the base of the cliff . Peter Sprouse climbed up and rigged a rope for hauling . It was during the hauling that Peter 's pack broke loose and crashed down into a boulder wiping out one set of surveying gear and all our water purifier . Once we were all assembled in the 20m high entrance , it was getting quite late , but it was only a half hour trek in huge passage to Camp 1 in a side passage above a large static sump . The first day from Camp 1 established a general pattern as we split into three surveying groups working in different areas . I went with Jerry Atkinson , Del Holman and Duwain Whitus into a complex area near the Confusion Tubes on a photographic and surveying trip . The American style of exploring new caves is the only one possible in an area with so much open and going , so we started surveying into virgin passage , eventually extending this area down to the first running water found at Gnome Springs . The second day out , Jerry , Randy , Don and myself went into Moria , the westernmost area of the lower cave , discovered the previous year , which was near base level , and had a powerful draughting choke heading out towards the Great Western System . Jerry placed a substantial charge in the choke , but failed to clear it . The fumes soon cleared in the draught and we spent two hours digging but without success . On the next day a " Glub Glub " trip was planned into Isopod River in which a small stream had developed into a canal downstream . This necessitated heading along the route toward the top of the system , climbing up into the Confusion Tubes . From here we trogged along for half a mile in huge passages to a boulder area which got quite thrutchy . Duwain and I opened up a route to a deep blue canal which we decided to survey . This soon proved abortive in one direction due to low airspace , and the other way eventually led back to known passage , so we tried a dry route which turned out to be an alternative route through the Breakdown Maze back toward Infiernillo . Having spent several hours on this investigation , we decided that we no longer had time to visit Isopod River and so thrashed back to Camp 1 at high speed . On day four , Jerry and I planned to return to the Gnome Springs area with Don and Sheri , but when we got to Misty Borehole , we decided to look briefly at an unpushed climb at the end of this tube . Don tried out a few moves and suddenly shot up the wall , into a hole and out at roof level , much to our surprise . He then traversed over the top and into going passage and vanished for some time , only to return with news of a major borehole . We hurriedly rigged a handline and ascended to start surveying . The rift above soon turned into a tube and then developed into something unusual for the cave - a classic keyhole passage some 2-5m deep below a 2m tube . There were lots of side leads , but the main way carried all the air and we emerged into a sizeable tube . Unfortunately this did n't continue too far before a large flowstone blockage , but a side passage led to an area with cave ice pools and bacon rind stal , from where a beautiful flat flowstone floored tube ascended steeply to a series of climbs . Here we met a small stream depositing calcite which we thought could well feed Gnome Springs , but the water sank into a tiny vertical tube and our route was up the small waterfall into another tube almost blocked by flowstone . The water came from a small passage but the way continued to a deep rift in the floor which we traversed , past a pom-pom stalactite to a climb down into an increasingly complex and muddy area . Here we ran out of time and after a short run ahead we headed back to Camp 1 , pausing only to name the area Ithilien . Back at Camp 1 we found that the " 40 kilometre " party had taken place on the assumption that we had bagged enough booty , but that we had been so long that everyone else had now crashed out . Owing to lack of motivation , and one illness , day 5 was declared the last day of the camp , so we decided to get as far into the cave as possible in two groups - one finally getting into Isopod River and one to take photographs in the Netherhall , a very large chamber about two and a half miles into the system . Beyond the Breakdown Maze , the South Trunk continued very large again to the turn off to the lower Isopod River where the wet team were getting changed . We left them and headed into the Monkey Walk , an awkward stretch of passage with low roof and bouldery floor , leading eventually to the Isopod River , a large passage with a small stream meandering between gravel banks , and containing colonies of troglobytic isopods like little piles of white rice in the stream , which gave the passage its name . By traversing the few pools which blocked the passage , we were able to reach the site of Camp 2 on a shingle bank in dry gear , and from here we started to climb up immediately to reach the Netherhall , which contains a 500 ' high boulder pile - like climbing Great Gable at night . After about half an hour of upward slogging on scree , we reached the summit and spread out to get an idea of scale before spending the next five hours taking photos . This involved firing off over 60 large flashbulbs for two exposures , each with three cameras set up and the second involving various minions from the Isopod River team . Unfortunately , these photographs later proved to be useless and by the time we had made our way back to Camp 1 we had been caving for eleven hours . The next day , everyone had entrance fever to a greater or lesser extent , but by the time we had taken in the shock of all those COLOURS on the eyes and abseiled out into the heat and the flies , it was mid-afternoon . The slog up to the trucks seemed much longer on the way back , and it was dark by the time we reached Conrado Castillo . The Yerbabuena fiasco While the main group went to look at some old mines and possible leads , Jerry and I set off for La Yerbabuena , a small village about 7 km to the south where a sizeable cave ( Calenturas ) had been explored and a resurgence had been seen but not yet reached . We intended to abseil down the cliff that had stopped the previous party , but when , the next day , we struggled down through dense forest on a steep slope to reach the top of the cliff , we found that our 40m rope was hardly sufficient to descend what turned out to be very much the same size and shape as Malham Cove . A large stream was emerging from under an overhang , and we were able to drop rocks into the water about 80m below . The stream falls over a further large cliff into an inaccessible cañon , making an abseil from above the only feasible method of access to what may well be a significant cave . We retreated much frustrated and next day returned to Conrado Castillo to complain about inaccurate information from the previous party . Brinco Camp 3 After this , there was a rapid personnel change - Duwain and Del left and Louise Hose had arrived with Jim Pisarowicz from elsewhere in Mexico . Shortly later , Don and Sheri left , and Jerry , feeling ill , went with them , numbers being made up by the arrival of Patty Mothes and Roy Jameson . The next major project was to be Camp 3 - another major camp , this time a new camp to be set for the first time in the upper cave , about 350m below the Cueva del Brinco entrance and around two miles inside the cave . As the entrance series of the upper cave is much smaller than Infiernillo , but also wet , we had to arrange for gear packs to split into smaller units and be completely waterproof . As this was a new camp , it was thought best to have a supply run to set camp up , followed by a lighter trip to move in any gear which did n't make it first time . We spent a lot of time preparing for the first trip , finally getting underground at 2 pm on Monday 6th April . It is the norm here to spend a long time eating before a long trip and to set off fairly late - there is n't the usual Yorkshire problem of getting out in time for the pub ! Despite its proximity to the fieldhouse , this was the first time I had been into Brinco , but with the heavy gear , we were all moving slowly , so I had a reasonable chance to look around . The first part ( Historic Section ) is roomy and dry with many dead formations . We descended a fair way , mostly in steep passage but with a few climbs , until we reached the Dressing Room . This is where the fun starts with a wet thrutch , The Chute , followed by a narrow fissure , The Crack of Doom . This was quite time consuming with large packs , but once through , progress in the Lunar Way was faster , though strenuous , until another delay at Mud Ball Crawl . Beyond the crawl , the passage opened out into Rio Verde , a steeply descending streamway with steep gours and deep green pools , leading pleasantly to Flowstone Falls , a 20m freeclimb which we , however , rigged with a line to facilitate descent with heavy packs . The falls drop straight into a swimming canal and further cascade before a series of squeezes obstructed the way . Another steep climb led to the beginning of The Canal - a low airspace wade for some way in muddy water . This ended in a climb up and over a barrier and through a lake to the Speedway Bypass - a somewhat awkward passage breaking out dramatically at The World Beyond . The World Beyond is a major trunk passage carrying the largest stream in the system directly away from the resurgence for almost two miles . The going varies from deep swims of up to 100m , to a meandering stream among gravel banks , to climbs over large scale collapse . This ends abruptly where the stream , augmented by a major inlet of unknown source ( possibly Valkyrie River ) , cuts down to the right to form the Angel 's Staircase , eventually sumping at -600m . The main way on to Infiernillo and Camp 3 is to the left starting a series of steep climbs over rotting flowstone and a major change of direction at a pitch . Shortly below this was the site of Camp 3 - a roomy chamber with a coarse gravel floor and a couple of deep pools . Here we dumped the gear and had a rest before setting out for the surface . The trip back out , while not particularly fast , was a good deal easier without too much gear , and we arrived fairly fresh at the Dressing Room , and DRY GEAR . It was only a short run to the surface where we emerged to pleasant sunny daylight at 8.30 am - it had taken us 18½ hours to set Camp 3. Needless to say , this was followed by three days of rest before we set off for the real camp . Carrying only sleeping bags and light gear , we moved much faster - the whole party knew the way this time which also helped , so we got back to the camp in just over six hours . Day one of Camp three ( camp days were on average 28 hours , so we went quite a long way ' out of synch ' with the surface ) we set out in a " boys party " of Peter , Roy and myself to investigate southbound leads nearer to Infiernillo , while the " girls party " of Terri , Louise and Patty went surveying in Gypsum Passage - the southernmost part of the system . It turned out that the passages we surveyed had been explored by the team who first found the connection from the Infiernillo side , but which were generally rather unpleasant with muddy chalkification of the walls . Saturnalia did not lead anywhere of great note , and we returned to camp to find that the girls had reached a solid aragonite blockage in a very pretty passage with no draught . Day two saw the girls surveying a large passage leading from beyond Saturnalia , but which soon broke up into small pointless tubes , while we headed nearer to Infiernillo to investigate a side passage heading north parallel with the main route . Ganymede Passage proved to be a major trunk passage but ended in small tubes which descended abruptly over rotting travertine to a lower series which we did not investigate . Instead , we traversed over lakes in the main route to Infiernillo to find another large passage parallel with the main line , which had also been found from the Infiernillo end . This was easy surveying until the tape got clogged with mud . Day three saw me back in this passage , this time with Louise and Terri , and we reached a complex junction area from where our route turned out to be a dead end . Returning to the junction , we folowed footprints into a large maze area , Medusa 's Maze , which descended down the dip of a major joint to an area with attractive formations . On day four , both parties worked in and around Medusa 's Maze , and we extended the area downwards until stopped by a large phreatic lift going steeply up , The Wall , which proved rather loose at the top . Below this , however , we found yet another downward lead into smaller passages but with a strong draught . This area , Yawndwanaland , continually stepped north , then down dip , then south along the strike , then down dip , then north along the strike and so on , moving very slowly west on balance until at the end of the day we reached a steep climb down . Louise went to investigate , and found that it dropped into a major north-south passage which must by now be both deeper and further west than the main route to Infiernillo . As this passage seemed to promise the major breakthrough needed to extend the system at depth under the ridge to the south , where sinks lie up to 1600m above the Infiernillo sumps , both parties were fielded into it the next day . We elected to survey north while Peter , Roy and Patty went south . Our lead , Death Coral Rift , headed dead straight in a high rift floored with death coral , a sort of muddy calcite encrustation that seems to grow in passage annually flooded with turbid saturated water which drains slowly . We shot leg after leg , mainly easy and long , until we came to a shattered chamber . Climbs led to more bouldery passage , still heading north , until we came to a conclusive , but draughting choke apparently close to the Netherhall . From here we headed back the 800m we had surveyed to see how the others had got on . After stopping for a few photos , we met the other group just beyond the entry point in enlarging passage . They had surveyed over 1200m in generally large draughting passage heading south all the way . This passage was now nearly as far south as the southernmost point of the system . We returned to camp elated after fourteen and a half hours , and discussed stretching food supplies to allow one survey team to carry on south . When Peter , Terri and Louise set off next " morning " however , they quickly returned , having found the system was in flood . This meant that the World Beyond would be difficult , but more important , the Canal might be sumped . Roy , Patty and I set off for the surface immediately , while the others packed up their camp gear . As we ascended the pitch , we could hear the roar of the World Beyond Stream . Fortunately , the passage is large , and the stream by no means impassable , so we quickly hurried on . When we reached the passage just before The Canal , we were relieved to be free of the roar of the stream but worried to find that the draught appeared to be absent . I lowered myself gingerly into The Canal and swum to the lowest point where I found that , though the water was higher , there was still a draught howling through the small airspace . At some risk to lights , we all got through , thinking that our troubles were now over - but the sight that greeted us at the end of The Canal soon changed all that . The Rio Verde stream had risen from a tiny trickle to a sizeable torrent crashing down the climbs , making these very sporting , and causing havoc with the lights in the squeezes . When we reached the Flowstone Falls , it became apparent that it could n't be climbed , even with my Oldham lamp , so we were very glad of the rope we had rigged , though somewhat worried about possible abrasion in the water . I prusikked first , and re-rigged the rope to move the fairly minor abrasion clear , then illuminated the pitch while the others climbed . The rest of the Rio Verde was equally sporting and it was a relief to reach dry passage at Mud Ball Crawl . A brief panic hit us as we heard a loud roar from the Crack of Doom , but the torrent here proved to be mainly illusory . We did n't bother to change into dry gear as we slogged slowly out of the Historic section to be met by Jim Pisarowicz just inside the entrance as we emerged just before midday after ten hours caving . We crashed out quickly in case we had to go back in to take a food stash for the others , as we were sure that The Canal would soon sump behind us . But in fact the others came out about three hours after us , having dumped some gear at the World Beyond . We learned from Jim that almost four inches of rain had fallen in the previous three days , as the start of the wet season was approaching . While Camp 3 was busily succeeding , Jim had not been idle , having spent the time in surface prospecting on the ridge to the south . Of several holes he had investigated , two looked particularly promising , situated above the area that the new Camp 3 passage was heading for , and we soon set off to investigate these . The large hole was a 5m diameter shaft in the bottom of a wooded shakehole , which sounded very deep . We put a 93m rope down it and Jim set off only to find that it was too short . I was volunteered to go next , with two spare ropes to tie on . In fact only one was needed , and when I had passed the knot and sorted out the tangle of rope below it , I was able to reach the floor 105m below the takeoff . The shaft was slightly damp and distinctly chilly , suggesting that it was n't going to go , but as my eyes adjusted I found a small rift in the wall leading to a further pitch , so as Louise came down with the survey rope from above , I rigged the remaining rope and descended to a ledge about -15m overlooking a further drop with large flowstone cascades on the far side ; we were clearly going to have to come back another day . I reascended the small pitch to meet Louise , talking to Peter , who had the top of the tape about halfway down the pitch . The survey showed it to be 105.5m long , but as further progress was impossible , I set off to reascend . About 10m from the top , hidden in vegetation , an unprotected rub had cut into even super-resistant PMI enough to cause concern , and several minutes were spent arranging some protection before Peter and Louise came up . On the next trip , Jim descended the smaller pot to find it choked at -36m so we quickly abandoned Pozu del Peso and returned to the deeper Sotano del Rama . Jim , Lousie and Peter set off down , and about two hours later returned having found a choke at about -140m . After this , Jim and Louise left , leaving just Peter , Terri and myself to spend the final week in sundry pursuits , such as retrieving the last of the gear from the World Beyond , surveying in some of the smaller local caves and surface surveying , before returning to the US . The Spring Project was pretty successful , extending the system from 38km to 45.5km , closely challenging Easegill in the world length stakes . A lot of extremely high quality caving was done and I would like to express my most sincere thanks to Peter and the Proyecto Espeleologico Purificación for allowing me to join them in 1981 . I hope to be able to return to assist in future years in this magnificent system . Andrew Waddington NPC Large Pot Journal 1982 : Next page : Back to contents Previous page : Mexico 1981 - the background Out of print publications list Northern Pennine Club Home page 