
Eighth session Kingston , Jamaica 5-16 August 2002 Summary presentations on polymetallic massive sulphide deposits and cobalt-rich ferromanganese crusts Marine minerals and the United Nations Convention on the Law of the Sea1 A scientific revolution in our understanding of the way the Earth works occurred in the 1970s and early 1980s which significantly expanded our knowledge of marine minerals while the United Nations Convention on the Law of the Sea was being formulated . The scientific revolution entailed a major change in viewing the ocean basins and continents . Before the scientific revolution , the ocean basins were viewed as passive containers for the oceans . The continents and ocean basins were viewed as permanent features that had remained in their present positions through most of Earth 's history . The marine mineral provisions of the Convention were written in terms of this old view , which only recognized those marine mineral deposits that had been derived from erosion of land and carried into the ocean in particulate or dissolved form by rivers . These minerals comprised heavy metal deposits ( tin , gold , etc. ) and gemstones ( especially diamonds ) deposited in sediments on continental margins , and manganese nodules precipitated on the floor of the deep ocean from metals dissolved in seawater . The scientific revolution revealed that the ocean basins are dynamic features that open and close on a time scale of millions of years , with concomitant movement of the land areas known as continental drift . The scientific revolution recognized the ocean basins as sources of types of mineral deposits in addition to those previously known . These newly recognized types of marine mineral resources include polymetallic sulphides containing copper , zinc , silver and gold in varying amounts . Polymetallic sulphide deposits are concentrated over thousands of years by seafloor hot springs at sites along an active global submerged volcanic mountain range that extends through all the ocean basins of the world . Polymetallic sulphide deposits also occur at sites associated with volcanic island chains such as those along the western boundary of the Pacific Ocean . Another newly recognized type of marine mineral resource is cobalt-rich iron-manganese crusts that are precipitated over millions of years on the submerged flanks of inactive underwater volcanoes from metals dissolved in seawater derived from input of metals by both rivers and seafloor hot springs . The hot springs not only concentrate polymetallic sulphide deposits and disperse metals into the oceans that contribute to the accumulation of cobalt-rich iron-manganese crusts , but also provide chemical energy from the Earth 's interior that is used by microbes for their growth . The microbes are at the base of the food chain of an ecosystem of life forms at the hot springs that is largely independent of the light energy that fuels the photosynthesis in plants at the base of the food chain on land . The microbes are proving important as the source of new compounds for industrial and medical applications , and also include primitive forms that may hold the key to the origin of life . A current challenge is to incorporate these new mineral resources into the Convention regime in a way that protects the valuable life forms that they host . Polymetallic massive sulphide deposits at the modern seafloor and their resource potential2 Since 1979 , polymetallic massive sulphide deposits have been found at water depths up to 3,700 m in a variety of tectonic settings at the modern seafloor , including mid-ocean ridges , back-arc rifts and seamounts . Many of the sulphide deposits consist of a black smoker complex on top of a sulphide mound which commonly is underlain by a stockwork zone . It has been widely established that circulating seawater which is modified in a reaction zone close to a subaxial magma chamber is the principal carrier of metals and sulphur which are leached out of the oceanic basement . Precipitation of massive and stockwork sulphides at and beneath the seafloor takes place in response to mixing of the high-temperature ( up to 400°C ) metal-rich hydrothermal seawater fluid with ambient seawater . Polymetallic seafloor sulphide deposits can reach considerable size ( up to 100 million tonnes ) and often carry high concentrations of copper ( chalcopyrite ) , zinc ( sphalerite ) and lead ( galena ) in addition to gold and silver . It has been clearly documented that the mineralogical and chemical composition of polymetallic massive sulphides at the basalt-dominated mid-ocean ridges differs from those at back-arc spreading centres which are associated with more felsic volcanic rocks ( dacite , rhyolite ) . The latter are more similar to major sulphide deposits that are being mined on land today but which were once formed at spreading centres of paleo-oceans . Extremely high concentrations of gold ( up to 230 g/t with an average of 26 g/t for 40 samples analysed ) have recently been found in a new type of seafloor mineral deposit located in the crater of an extinct volcano in the territorial waters of Papua New Guinea . The particular style of mineralization and alteration bears many similarities to so-called “ epithermal gold deposits ” so far only known on the continents . In addition to circulating seawater , magmatic fluids carrying high concentrations of gold appear to be a significant metal source and are likely responsible for the strong precious metal enrichment . This type of mineralization is most likely to exist in other arc-related environments of the world 's oceans . Due to the high concentration of base and precious metals , seafloor polymetallic sulphide deposits have recently attracted the interest of the international mining industry . The recovery of some of these deposits appears to be both economically and environmentally feasible due to certain advantages over land-based deposits and will likely become a reality within the present decade . Cobalt-rich ferromanganese crusts : geology , resources and technology3 Cobalt-rich iron-manganese crusts occur throughout the global ocean on seamounts , ridges and plateaux where currents have kept the rocks swept clean of sediments for millions of years . Crusts precipitate from cold ambient seawater onto rock substrates , forming pavements up to 250 mm thick . Crusts are important as a potential resource primarily for cobalt , but also for titanium , cerium , nickel , platinum , manganese , thallium , tellurium , tungsten , bismuth , zirconium and other metals . Crusts form at water depths of about 400-4,000 m , with the thickest and most cobalt-rich crusts occurring at depths of about 800-2,500 m. Gravity processes such as landslides , as well as sediment cover , submerged and emergent reefs , and currents control the distribution and thickness of crusts . Crusts occur on a wide variety of substrate rocks , making it difficult to distinguish the crusts from the substrate using remotely sensed data , which is an important aspect in terms of developing exploration technologies . Fortunately , crusts can be distinguished from the substrates by their much higher levels of gamma radiation . The physical properties of crusts , such as high mean porosity ( 60 per cent ) and extremely high mean surface area ( 300 m2/g ) , as well as their incredibly slow rates of growth ( 1-6 millimetres per million years ) , are instrumental in allowing for the adsorption of large quantities of economically important metals from seawater onto the crust surfaces . Crusts are composed of the minerals vernadite ( manganese oxide ) and feroxyhyte ( iron oxide ) , with moderate amounts of carbonate fluorapatite ( CFA ) in thick crusts and minor amounts of quartz and feldspar in most crusts . Elements that commonly adsorbed on the vernadite include cobalt , nickel , zinc and thallium , and on the iron oxide , copper , lead , titanium , molybdenum , arsenic , vanadium , tungsten , zirconium , bismuth and tellurium . Bulk crusts contain maximum cobalt contents of up to 1.7 per cent , nickel to 1.1 per cent , and platinum to 1.3 parts per million ( ppm ) . Average cobalt contents of up to 0.5 to 1 per cent for large regions of the oceans make crusts the richest potential ore for cobalt that exists , onshore as well as offshore . Cobalt , nickel , titanium and platinum concentrations decrease , whereas silicon and aluminium increase in continental-margin crusts and in crusts with close proximity to West Pacific volcanic arcs . Vernadite-related elements decrease , whereas iron and copper increase with increasing water depth of crust occurrence . Cobalt , cerium , thallium , titanium , lead , tellurium and platinum are strongly concentrated in crusts over other metals because they are incorporated by oxidation reactions that produce more stable , less mobile compounds . Total rare-earth elements commonly vary between 0.1 per cent and 0.3 per cent and are derived from seawater along with other hydrogenetic elements , cobalt , manganese , nickel , etc. Cerium is a rare-earth element that is strongly enriched in crusts and has important economic potential . The seamounts and ridges on which crusts grow obstruct the flow of oceanic water masses , thereby creating a wide array of seamount-generated currents of generally enhanced energy relative to flow away from the seamounts . The effects of these currents are strongest at the outer rim of the summit region of seamounts , the area where the thickest crusts are found . Those seamount-specific currents also enhance turbulent mixing and produce upwelling , which increases primary productivity . These physical processes affect seamount biological communities , which vary from seamount to seamount . Seamount communities are characterized by relatively low density and low diversity where the crusts are thickest and cobalt-rich . The make-up of the seamount communities is determined by current patterns , topography , bottom sediment and rock types and coverage , seamount size , water depth , and size and magnitude of the oxygen-minimum zone . Environmental impact documents will require a much better understanding of seamount ecosystems and communities than currently exits . About 40 research cruises have been dedicated to the study of cobalt-rich crusts , mainly by Germany , Japan , United States of America , the Republic of Korea , the Russia Federation , China and France . The estimate of 40 cruises does not include some cruises completed by the USSR ( and later the Russia Federation ) and China that are not available to the author . However , based on an estimated 42 research cruises from 1981 through 2001 , it is suggested that minimum expenditures were about US$ 32 million for ship and associated scientific operations related to fieldwork , and $42 million for shore-based research , for a total investment of about $74 million . Research and development on the technology for mining crusts are only in their infancy . Detailed maps of crust deposits and a comprehensive understanding of small-scale seamount topography are not available , but are required to design the most appropriate mining strategies . Typical field operations for exploration have been to produce SeaBeam bathymetric maps and derivative back-scatter and slope-angle maps , along with seismic profiles , which are used together to select sampling sites . For reconnaissance work , 15 to 20 dredge hauls and cores are taken per seamount . Then video-camera surveys delineate crust , rock and sediment types and distributions , as well as crust thicknesses if possible . These exploration activities require the use of a large , well-equipped research vessel because of the large number of bottom acoustic beacons , the large towed equipment and the volume of samples collected . During advanced stages of exploration and site-specific surveys , it is suggested to use deep-towed side-scan sonar including swath bathymetry , and tethered remotely operated vehicles ( ROVs ) for mapping and delineation of small-scale topography . Extensive sampling of deposits can be accomplished by dredging , coring , using ROVs , and a device to take close-spaced samples that has not yet been developed . Gamma-radiation surveys will delineate crust thicknesses and the existence of crusts under thin blankets of sediment . Current-meter moorings will be required for an understanding of the seamount environment and biological sampling and surveys will be necessary . Twelve criteria have been developed for exploration for and exploitation of crusts : ( a ) Regional criteria ( i ) Large volcanic edifices shallower than 1,000-1,500 m ; ( ii ) Volcanic edifices older than 20 million years ; ( iii ) Volcanic structures not capped by large atolls or reefs ; ( iv ) Areas of strong and persistent bottom currents ; ( v ) A shallow and well-developed oxygen-minimum zone ; ( vi ) Areas isolated from input of abundant fluvial and eolian debris . ( b ) Site-specific criteria ( vii ) Subdued small-scale topography ; ( viii ) Summit terraces , saddles and passes ; ( ix ) Slope stability ; ( x ) Absence of local volcanism ; ( xi ) Average cobalt contents ≥0.8 per cent ; ( xii ) Average crust thicknesses ≥40 mm . Crust mining is technologically more difficult than manganese nodule mining . Recovery of nodules is relatively easy because they sit on a soft-sediment substrate , whereas crusts are weakly to strongly attached to substrate rock . For successful crust mining , it is essential to recover the crusts without collecting substrate rock , which would significantly dilute the ore grade . Five possible crust mining operations include fragmentation , crushing , lifting , pick-up and separation . The proposed method of crust recovery consists of a bottom-crawling vehicle attached to a surface-mining vessel by means of a hydraulic-pipe lift system and an electrical umbilical . The mining machine provides its own propulsion and travels at a speed of about 20 cm/s . Material throughput for the base-case mining scenario is 1,000,000 t/y . That scenario allows 80 per cent fragmentation efficiency and 25 per cent dilution of crust with substrate as reasonable miner capabilities . Some new and innovative systems that have been suggested for crust mining include water-jet stripping of crusts from the substrate , in situ leaching techniques and sonic removal of crusts from substrates . These suggestions offer promise and need to be further developed . The importance to the world economy of metals contained in crusts is reflected in their patterns of consumption . The primary uses of manganese , cobalt and nickel are in the manufacture of steel , to which they provide unique characteristics . Cobalt is also used in the electrical , communications , aerospace , and engine and tool manufacturing industries . Nickel is used additionally in chemical plants , petroleum refineries , electrical appliances and motor vehicles . Cobalt is produced as a by-product of copper mining and consequently the supply of cobalt is tied to the demand for copper . This is also true for tellurium , which is produced as a by-product of both copper and gold mining . This uncertainty in supply has caused industry to seek alternatives to cobalt and tellurium , resulting in only a modest growth in their markets over the past decade , and consequently relatively low prices . If substantial alternative sources of these metals are developed , there should be a greater incentive to reintroduce them in products and expanding markets . It has recently been determined that crusts contain metals other than manganese , cobalt , nickel , copper and platinum that may offer additional incentives in recovery . For example , titanium has the highest value after cobalt , cerium has a greater value than nickel , zirconium is equivalent to nickel , and tellurium has nearly twice the value of copper . This analysis assumes that economic extractive metallurgy can be developed for each of those metals . Based on grade , tonnage and oceanographic conditions , the central-equatorial Pacific region offers the best potential for crust mining , particularly the exclusive economic zone of Johnston Island ( United States ) , the Marshall Islands and international waters in the Mid-Pacific Mountains , although the exclusive economic zone of French Polynesia , Kiribati and the Federated States of Micronesia should also be considered . Supplies of the many metals found in crusts are essential for maintaining the efficiency of modern industrial societies and in improving the standard of living in the twenty-first century . There is a growing recognition that cobalt-rich crusts are an important potential resource . Accordingly , it is necessary to fill the information gap concerning various aspects of crust mining through research , exploration and technology development . Sulphide mineral resource exploitation and the hydrothermal vent fauna4 More than 500 new animal species have been described from deep-sea hydrothermal vents since their discovery in 1977. Deep-sea vents have a high scientific value because they contain a large number of endemic and unusual species and are refuges for close relatives of ancient forms of life . Because they are visually spectacular , extreme environments , vent ecosystems have generated widespread public interest and are a resource which can be used to inform the public about earth processes and the way in which scientists work . It is not currently possible to predict how rapidly vent sites may recover from mining operations . Some organisms will be directly killed by mining machinery , while others nearby risk smothering by material settling from plumes of particulate matter . Individuals surviving these perturbations would be subject to a radical change in habitat , and the exploited sites will have a lesser scientific and educational value . Long-lived vent fields that host the largest mineral deposits are likely to be the most ecologically stable and have the highest biodiversity . A concentration of mining activities at such sites could produce regional effects on biological processes and organism abundance , to the point where the survival of some species could become an issue . The management or protection of all of the world 's marine hydrothermal and seep sites is an unrealistic goal . Discussions should focus instead on the criteria for identifying sites for future protection that are of critical importance , or particularly sensitive to disturbance , because of their scientific or educational value or their significance for species survival . Notes 1 Peter A. Roma , Institute of Marine and Coastal Sciences , Rutgers University , New Jersey , United States of America . 2 Peter M. Herzig , Freiberg University of Mining and Technology , Germany . 3 James R. Hein , President , International Marine Minerals Society . Kim Juniper , Université du Québec , Montréal , Canada . 