# Introduction ## Overview [OPS](https://github.com/OP-DSL/OPS) (Oxford Parallel library for Structured mesh solvers) is a high-level embedded domain specific language (eDSL) for writing **multi-block structured mesh** algorithms, and the corresponding software library and code translation tools to enable automatic parallelization on multi-core and many-core architectures. Multi-block structured meshes consist of an unstructured collection of structured meshes. The OPS API is embedded in C/C++ and Fortran. The current OPS eDSL supports generating code targeting multi-core/multi-threaded CPUs, many-core GPUs and clusters of CPUs and GPUs using a range of parallelization models including SIMD vectorization, OpenMP, CUDA, HIP, SYCL, OpenMP offload and their combinations with MPI. Various optimizations for each parallelization can be generated automatically, including cache blocking tiling to improve locality. The OPS API and library can also be used to solve multi-dimensional tridiagonal systems using an optimized [tridsolver](https://github.com/OP-DSL/tridsolver) library. These pages provide detailed documentation on using OPS, including an installation guide, developing and running OPS applications, the OPS API, developer documentation and performance tuning. ## Applicability ### What Kind of Codes Suit OPS-DSL? OPS is designed specifically for applications operating on multi-block structured grids and using explicit solvers. It provides a clean abstraction for stencil-based computations over structured domains, allowing automatic parallelization and performance portability across CPUs, GPUs, and distributed systems. ### Suitable Application Types **OPS-DSL is best suited for:** - Multi-block structured mesh codes with regular grid topology - Explicit time-stepping solvers - Algorithms based on stencil computations - Applications with static data dependencies and regular iteration patterns **Typical domains:** - Computational Fluid Dynamics (CFD) - Finite Difference Time Domain (FDTD) methods - Heat transfer - Shallow water models ### Limitations / Unsuitable Use Cases OPS is not suitable for: - **Unstructured grid-based applications** → For these, the [OP2 DSL](https://github.com/OP-DSL/OP2-Common) is a more appropriate framework. - **Implicit solvers**, where the global data dependencies and sparse matrix assembly patterns are generally not well-suited to OPS’s local update model. - However, OPS does support certain classes of implicit problems—specifically tridiagonal systems—through integration with a third-party [tridiagonal](https://github.com/OP-DSL/tridsolver/tree/master) solver library. - Example applications such as `adi`, `adi_burger`, and `adi_burger_3D` in the `OPS/apps/c` directory demonstrate the use of the tridiagonal solver via the OPS API and can serve as useful references for users interested in implementing similar methods. - **Adaptive Mesh Refinement (AMR)** techniques, where the grid structure is dynamic and hierarchical, breaking the assumptions of regular, structured block iteration used in OPS. ## Licensing OPS is released as an open-source project under the BSD 3-Clause License. See the [LICENSE](https://github.com/OP-DSL/OPS/blob/master/LICENSE) file for more information. ## Citing To cite OPS, please reference the following paper: [I. Z. Reguly, G. R. Mudalige and M. B. Giles, Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS, in IEEE Transactions on Parallel and Distributed Systems, vol. 29, no. 4, pp. 873-886, 1 April 2018, doi: 10.1109/TPDS.2017.2778161.](https://ieeexplore.ieee.org/abstract/document/8121995) ``` @ARTICLE{Reguly_et_al_2018, author={Reguly, István Z. and Mudalige, Gihan R. and Giles, Michael B.}, journal={IEEE Transactions on Parallel and Distributed Systems}, title={Loop Tiling in Large-Scale Stencil Codes at Run-Time with OPS}, year={2018}, volume={29}, number={4}, pages={873-886}, doi={10.1109/TPDS.2017.2778161}} ``` Full list of publications from the OPS project can be found in the [Publications](https://ops-dsl.readthedocs.io/en/latest/pubs.html) section. ## Support The preferred method of reporting bugs and issues with OPS is to submit an issue via the repository’s issue tracker. Users can also email the authors directly by contacting the [OP-DSL team](https://op-dsl.github.io/about.html). ## Funding The development of OPS was in part supported by the UK Engineering and Physical Sciences Research Council (EPSRC) grants [EP/K038494/1](https://gow.epsrc.ukri.org/NGBOViewGrant.aspx?GrantRef=EP/K038494/1) (“Future-proof massively-parallel execution of multi-block applications”), [EP/J010553/1](https://gow.epsrc.ukri.org/NGBOViewGrant.aspx?GrantRef=EP/J010553/1) (“Software for Emerging Architectures - ASEArch"), The UK Turbulence Consortium grant [EP/T026170/1](https://gow.epsrc.ukri.org/NGBOViewGrant.aspx?GrantRef=EP/T026170/1), The Janos Bolyai Research Scholarship of the Hungarian Academy of Sciences, the Royal Society through their Industry Fellowship Scheme (INF/R1/180012), and the Thematic Research Cooperation Establishing Innovative Informatic and Info-communication Solutions Project, which has been supported by the European Union and co-financed by the European Social Fund under grant number EFOP-3.6.2-16-2017-00013. Research funding support was also provided by the UK AWE under grants CDK0660 ("The Production of Predictive Models for Future Computing Requirements"), CDK0724 ("AWE Technical Outreach Programme"), AWE grant for "High-level Abstractions for Performance, Portability and Continuity of Scientific Software on Future Computing Systems" and the Numerical Algorithms Group [NAG](https://www.nag.com/). Hardware resources for development and testing provided by the Oak Ridge Leadership Computing Facility at the Oak Ridge National Laboratory, which is supported by the Office of Science of the U.S. Department of Energy under Contract No. DE-AC05-00OR22725, the [ARCHER](http://www.archer.ac.uk) and [ARCHER2](https://www.archer2.ac.uk/) UK National Supercomputing Service, [University of Oxford Advanced Research Computing (ARC) facility](http://dx.doi.org/10.5281/zenodo.22558) and through hardware donations and access provided by NVIDIA