2016-06-02 3 views
0

В настоящее время я пишу код, который включает в себя создание разреженной матрицы в Fortran и решение простой линейной системы AX = b. Для этого я использую разреженную матричную библиотеку Pardiso по просьбе супервизоров проекта.Fortran Pardiso проблемы с разреженной матрицей

Код разбит на две части. Первая половина строит матрицу и правую сторону, а вторая половина вызывает Пардисо для решения этой системы. I знает, что первая половина работает, поскольку экспорт этих данных за пределы Fortran и решение системы на Python дает точно ожидаемые результаты. Однако я не могу заставить Pardiso работать нормально, главным образом потому, что неправильно понимаю сообщения об ошибках, которые он дает. В руководстве объясняется очень мало, а интернет-форумы скудны (не предназначены для каламбуров), заполненных вопросами, связанными с Pardiso.

настройки, которые я использую для Pardiso следующим образом:

iparm(1)=0 
iparm(2)=2 
iparm(6)=0 
iparm(10)=13 
iparm(11)=1 
iparm(13)=1 
iparm(19)=0 
iparm(21)=1 
iparm(26)=1 
iparm(52)=1 
mtype = 11 
iparm(3) = 1 
solver=0 
mtype=11 

Ошибки я получаю:

ошибка проверки PARDISO (sequence_ido, параметры) error_num = 4 Вход:

matrix_number_new 22 ido 32675 несовместимы

Руководство или Интернет не дают никаких указаний относительно того, что это значит. pardiso_chkmatrix и pardiso_printstats не выплевывайте никаких ошибок, поэтому я не уверен, что происходит.

ответ

0

Трудно сказать, в чем проблема, но вот гипотеза. Значение 32675 подозрительно близко к максимальному целочисленному значению, которое может быть сохранено в 2-байтовой переменной (в переменной типа C: «короткий int»), что равно 32767. По-видимому, некоторые внутренние массивы в Pardiso сохраняют целочисленные значения как «короткие int "(2 байта), а не" int "(4 байта), ради экономии памяти. Как я уже сказал, это только возможность.