Fortran 77 не поддерживает рекурсию, и, следовательно, стандартный соответствующий компилятор может размещать все переменные в разделе данных программы; в принципе, ни стек, ни куча не нужны [1].
Возможно, это то, что делает f2c, и если это так, то это может быть то, что шаг f2c делает программу не поточно-ориентированной, а не саму программу. Конечно, как уже упоминали другие, проверьте и ОБЩИЕ блоки. EDIT : Также проверьте наличие явных директив SAVE. SAVE означает, что значение переменной должно сохраняться между последующими вызовами процедуры, подобно статическому в C. Теперь, выделение всех локальных данных процедуры в разделе данных делает все переменные неявным образом SAVE, и, к сожалению, существует много старых код, который предполагает это, даже если это не гарантируется стандартом Fortran. Такой код, очевидно, не является потокобезопасным. Wrt. В частности, ARPACK, я ничего не могу обещать, но ARPACK, как правило, хорошо рассматривается и широко используется, поэтому я был бы удивлен, если бы он страдал от таких проблем с пылевой колода.
Большинство современных компиляторов Фортрана используют распределение в стеке. Возможно, вам больше повезет, если вы скомпилируете ARPACK, скажем, с gfortran и опцией -frecursive.
РЕДАКТИРОВАТЬ :
[1] Не потому, что он более эффективен, а потому, что Fortran был изначально спроектирован до того, как были изобретены стеки и кучи, и по какой-то причине комитет по стандартизации хотел сохранить возможность реализации Fortran на оборудовании без поддержки стека и кучи вплоть до Fortran 90. На самом деле, я бы предположил, что стеки более эффективны на современном аппаратно-зависимом оборудовании, чем доступ к локальным данным процедуры, которые распределены по всему разделу данных.