Generating energy from clean renewable sources is clearly attractive for a number reasons. In stark contrast to other further developed and exploited resources such as wind, tidal-based energy conversion has the crucial benefit of being entirely predictable. However, a new tidal-energy-based industry will only flourish if the development of large installations, such as turbine arrays comprising 100s of individual devices, can be shown to be both economically viable and to have a minimal impact on the environment. This new industry is currently in its early stages where no major projects have yet been developed, although many have been approved and are in various stages of planning. Sophisticated numerical simulation methods are vitally important to support resource analysis, array design, and the optimisation of financial profits while minimising environmental impacts. Since the installation of large numbers of energy converters can fundamentally change the nature of the resource, fully-coupled simulations of the large-scale resource including the presence of arrays of turbines is required. In addition, individual turbines need to be either resolved or parameterised in order to accurately represent the turbulent turbine-wake-turbine interactions which are crucial for the purpose of individual turbine micro-siting as a component of array design analysis and optimisation. This results in the requirement for simulations that resolve spatial scales in the horizontal greater than 100 km to represent the tidal resource, and down to sub-metre scale to resolve turbines and their turbulent wakes: i.e. scales varying by at least five orders of magnitude. Also, depth-averaged dynamics can be considered in the far-field, whilst fully three-dimensional dynamics should be considered at the smallest scales. This is therefore a truly multi-scale, timely and challenging engineering problem which requires the design of highly efficient numerical techniques, especially given that multiple flow calculations will be required as part of array optimisation strategies. In this presentation we will describe the approaches we have taken to tackle this multi-scale problem, including the use of unstructured mesh generation, anisotropic mesh adaptivity, and gradient-based optimisation algorithms. Applications of the developed technology to idealised as well as real-world case studies will be presented. Future topics such as the inclusion of uncertainty, and multi-rate time-stepping may also be discussed