Переносимый расширяемый инструментарий для научных вычислений (PETSc) успешно продемонстрировал, что использование современных парадигм программирования может облегчить разработку крупномасштабных научных приложений на языках Фортран, C, и C++. Возникнув несколько лет назад, продукт эволюционировал в мощный набор средств для численного решения дифференциальных уравнений в частных производных и сходных проблем высокопроизводительных вычислений. PETSc состоит из нескольких библиотек (подобных классам C++). Каждая библиотека оперирует определенным семейством объектов (например, векторами) и ее операции применяются к этим объектам. Объекты и операции в PETSc разработаны с учетом опыта разработки научных приложений. Модули PETSc работают с множествами индексов, включая перестановки, для индексации векторов, перенумерации, и т.д.; c векторами; c матрицами (обычно разреженными); c распределенными массивами (используются для параллелизации задач с регулярной сетевой структурой); c методами подпространств Крылова; c предобработчиками, включая мультисеточные и прямые разреженные решатели; c нелинейными решателями; c пошаговыми решателями для дифференциальных уравнений в частных производных во времени.
Каждый модуль содержит абстрактный интерфейс (простой набор последовательностей вызова) и одну или несколько его реализаций, использующих определенные структуры данных. Таким образом, PETSc предлагает прозрачные и эффективные коды для различных фаз решения дифференциальных уравнений в частных производных с единообразным подходом к любому классу проблем. Такое построение гарантирует простое использование и сравнение различных алгоритмов (например, для экспериментов с различными методами подпространств Крылова, предобработчикамии, или сокращенными методами Ньютона). Кроме того, PETSc предоставляет удобную среду для моделирования научных приложений, а также быстрого построения или прототипирования алгоритмов. Библиотеки позволяют провести легкую настройку и расширение как алгоритмов, так и реализации. Этот подход улучшает гибкость систем и позволяет повторное использование кода, а также отделяет собственно параллелизацию от выбора алгоритма. Инфраструктура PETSc создает основу для построения крупномасштабных приложений. Ее полезно проанализировать для определения взаимосвязи между отдельными частями PETSc. Рис. 6 представляет собой диаграмму ее отдельных частей; на рис. 7 некоторые части изображены более детально. Эти рисунки иллюстрируют иерархическую организацию библиотеки, что позволяет пользователям применить уровень абстракции, наиболее подходящий для определенной задачи.