next up previous contents
Next: Простые примеры PETSc Up: Начальные сведения о PETSc Previous: Запуск программ PETSc.   Contents

Написание программ PETSc

Программы PETSc начинаются с вызова

PetscInitialize (int *argc,char ***argv,char *file,

     char *help);,

который инициализирует PETSc и MPI. Аргументы argc и argv являются аргументами командной строки, передаваемыми всем программам C и C++. Аргумент file опционально указывает альтернативное имя файла опций PETSc, .petscrc, который по умолчанию находится в домашнем каталоге пользователя. База опций PETSc используется для настройки программы во время работы. Последний аргумент help является опциональной строкой символов, которая выводится, если программа запущена с опцией -help. В Фортране команда инициализации имеет вид:

call PetscInitialize (character file,integer ierr)

PetscInitialize() автоматически вызывает MPI_Init(), если MPI не был инициализирован ранее. При определенных условиях, когда MPI нужно инициализировать прямо (или он инициализирован другой библиотекой), пользователь может вначале вызвать MPI_Init() (или позволить другой библиотеке это сделать), а затем вызвать PetscInitialize(). По умолчанию PetscInitialize()
устанавливает `общий'' коммуникатор PETSc, определяемый
PETSC_COMM_WORLD на MPI_COMM_WORLD. Для тех, кто не знаком с MPI, коммуникатор является способом указания набора процессов, которые совместно участвуют в вычислениях или коммуникациях. Коммуникаторы являются переменными типа MPI_Comm. В большинстве случаев пользователи могут пользоваться коммуникатором PETSC_COMM_WORLD, для указания всех запущенных процессов, или PETSC_COMM_SELF, для указания одного процесса. MPI предоставляет процедуры создания новых коммуникаторов, содержащих подмножества процессоров, хотя пользователи очень редко применяют их. Заметьте, что пользователям PETSc не нужно программировать основной обмен сообщениями непосредственно через MPI, но они должны быть знакомы с основными концепциями обмена сообщениями и вычислений в распределенной памяти. Пользователи, которым нужно применить процедуры PETSc на некотором множестве процессоров в большой параллельной задаче, или которые хотят использовать ``главный '' процесс для управления работой ``подчиненных'' процессов PETSc, должны указать альтернативный коммуникатор для PETSC_COMM_WORLD, вызвав
PetscSetCommWorld (MPI Comm comm)
перед вызовом PetscInitialize(), но, конечно, после вызова
MPI_Init().PetscSetCommWorld() может быть вызван как минимум раз в каждом процессе. Большинству пользователей может никогда не понадобиться применять функцию PetscSetCommWorld(). Все процедуры PETSc возвращают целое число, указывающее, возникла ли при вызове ошибка. Код ошибки устанавливается в ненулевое значение, если ошибка возникла; в противном случае возвращается 0. Для интерфейса C/C++ код ошибки является возвращаемым значением, в то время как для версии Фортрана каждая процедура PETSc содержит в качестве последнего аргумента целочисленную переменную кода ошибки. Все программы PETSc должны вызывать PetscFinalize() в качестве последнего оператора, как показано ниже в формате для C/C++ и Фортрана соответственно:

PetscFinalize ();

call PetscFinalize (ierr)

Эта процедура поддерживает опции, вызываемые при завершении программы, а затем вызывает MPI_Finalize(), если вызов
PetscInitialize() предшествовал MPI. Если MPI инициализировался извне PETSc (пользователем или другим приложением), пользователь сам отвечает за вызов MPI_Finalize().



2004-06-22