[en] Electromagnetic methods (EM) are an invaluable research tool in geophysics whose relevance has increased rapidly in recent years due to its wide industrial adoption. In particular, the forward modelling of three-dimensional marine controlled-source electromagnetics (3D CSEM FM) has become an important technique for reducing ambiguities in the interpretation of geophysical datasets through mapping conductivity variations in the subsurface. As a consequence, the 3D CSEM FM has application in many areas such as hydrocarbon/mineral exploration, reservoir monitoring, CO2 storage characterization, geothermal reservoir imaging and many others due to there quantities often displaying conductivity contrasts with respect to their surrounding sediments. However, the 3D CSEM FM at real scale implies a numerical challenge that requires an important computational effort, often too high for modest multicore computing architectures, especially if it fuels an inversion process. On the other hand, although the HPC code development is dominated by compiled languages, the popularity of high-level languages for scientific computations has increased considerably. Among all of them, Python is probably the language that has shown more interest, mainly because of flexibility and its simple and clean syntax. However, its use for HPC geophysical applications is still limited, which suggests a path for research, development and improvement. Therefore, this thesis reports the attempts at designing and implementing a methodology that has not been systematically applied for solving 3D CSEM FM with an HPC application baked upon Python. The net contribution of this effort is the development and documentation of a new open-source modelling code for 3D CSEM FM in geophysics, namely, the Parallel Edge-based Tool for Geophysical Electromagnetic Modelling (PETGEM). The importance of having this modelling tools lies in the fact that they provide synthetic results that can be compared with real data which has a practical use both in the industry and academia. Still, available 3D CSEM FM codes are usually written in low-level languages whose implemented methods are often innaccessible to the scientific community since they are commercial. PETGEM is written mostly in Python and relies on mpi4py and petsc4py packages for parallel computations. Other scientific Python packages used include Numpy andScipy. This code is designed to cope with the main challenges encountered within the numerical simulation of the problem under consideration: tackle realistic problems with accuracy, efficiency and flexibility. It uses the Nédélec Edge Finite Element Method (EFEM) as discretisation technique because its divergence-free basis is very well suited for solving Maxwell¿s equations. Furthermore, it supports completely unstructured tetrahedral meshes which allows the representation of complex geometries and local refinement, positively impacting the accuracy of the solution. The parallel implementation of the code using shared/distributed-memory architectures is investigated and described throughout this document. In addition, the thesis deals with the numerical and physical challenges of the 3D CSEM FM problem. Through this work, frequency-domain Maxwell's equations have been discretised using EFEM and validated by comparison with analytical solutions and published data, proving that modelling results are highly accurate. Moreover, this work discusses an automatic mesh adaptation strategy and the convergence rate of the iterative solvers that are widely used in the literature for solving the EM problem is presented. In summary, this thesis shows that it is possible to integrate Python and HPC for the solution of 3D CSEM FM at large scale in an effective way. The new modelling tool is easy to use and the adopted algorithms are not only accurate and efficient but also have the possibility to easily add or remove components without having to rewrite large sections of the code.

[es] Los métodos electromagnéticos (EM) son una herramienta de investigación inestimable en geofísica, cuya relevancia ha aumentado rápidamente en los últimos años debido a su amplia adopción industrial. En particular, el modelado electromagnético de fuente controlada (3D CSEM FM) se ha convertido en una técnica importante para reducir las ambigüedades en la interpretación de datos geofísicos a través del mapeo de las variaciones de conductividad en el subsuelo. Como resultado, el 3D CSEM FM tiene aplicación en muchas áreas como la exploración de hidrocarburos/minerales, monitoreo de yacimientos, caracterización de almacenamiento de CO2, imágenes de yacimientos geotérmicos, entre otros, debido a que éstos muestran contrastes de conductividad con respecto a sus sedimentos circundantes. Sin embargo, el 3D CSEM FM a escala real implica un desafío numérico que requiere un esfuerzo computacional importante, a menudo demasiado exigente para arquitecturas multicore modestas, especialmente si éste forma parte de un proceso de inversión. Por otra parte, aunque el desarrollo aplicaciones HPC está dominado por lenguajes compilados, la popularidad de los lenguajes de alto nivel para cómputo científico ha aumentado considerablemente. Entre todos ellos, Python es probablemente el idioma que ha mostrado más interés, principalmente a su flexibilidad y sintaxis simple. Sin embargo, su uso para geocómputo con HPC sigue siendo limitado, lo que sugiere un camino para la investigación, el desarrollo y la mejora. Por lo tanto, esta tesis describe el diseño e implementación de una metodología que hasta ña fecha no se ha aplicado sistemáticamente para resolver el 3D CSEM FM con una aplicación HPC basada en Python. La contribución neta de este esfuerzo es el desarrollo y documentación de un nuevo código open-source para el modelado 3D CSEM FM en geofísica, es decir, Parallel Edge-based Tool for Geophysical Electromagnetic Modelling (PETGEM). La importancia del desarrollo de estas herramientas radica en el hecho de que proporcionan resultados sintéticos que pueden ser comparados con datos reales, lo cual tiene un uso práctico en la industria y el mundo académico. A pesar de ello, los códigos disponibles para 3D CSEM FM suelen estar escritos en lenguajes de bajo nivel, y en muchos casos sus métodos no son accesibles a la comunidad científica ya que son comerciales. PETGEM ha sido principalmente escrito en Python y se basa en paquetes mpi4py y petsc4py para cálculos paralelos. El código está diseñado para hacer frente a los principales desafíos que se encuentran en la simulación numérica del problema en cuestión: abordar problemas realistas con precisión, eficiencia y flexibilidad. Además, utiliza el Método de Elementos Finitos de Borde (EFEM) como técnica de discretización ya que sus bases son muy adecuadas para resolver las ecuaciones de Maxwell. Además, soporta mallas tetraédricas no estructuradas que permiten la representación de geometrías complejas y refinamiento local, impactando positivamente la precisión de la solución. A lo largo del documento se investiga la implementación paralela en arquitecturas de memoria compartida/distribuida. Además, la tesis revisa los desafíos numéricos y físicos del problema 3D CSEM FM. A través de este trabajo, las ecuaciones de Maxwell en el dominio de la frecuencia se han discretizado utilizando EFEM y validado contra soluciones analíticas y datos previamente publicados, lo que demuestra que los resultados del modelado son precisos. Por otra parte, este trabajo discute una estrategia de adaptación automática de malla y la tasa de convergencia de los solvers iterativos que se utilizan ampliamente en la literatura. En resumen, esta tesis muestra que es posible integrar Python y HPC para la solución de 3D CSEM FM a gran escala de una manera efectiva. La nueva herramienta de modelado es fácil de usar y los algoritmos adoptados no sólo son precisos y eficientes, sino también flexibles.