Перейти к содержанию
    

Как запихнуть массив сруктур в коммонблок в фортране

Добрый день,

 

не пинайте, пожалуйста, сильно.

 

На ембеддед GNU линукс в hardkernelовскую борду есть непреодолимое желание притащить в сорсах одну огромную фортрановскую библиотеку. Она компилится, но работает не правильно. Причина: есть структура

TYPE STRUCT_MYS

REAL*8 A

LOGICAL D

...

END TYPE

 

TYPE (STRUCT_MYS) :: MYS(100)

которая включается почти в каждую подпрограмму огромного 120тысяче-спрочного сорса и сидит в отдельном include file.

 

GNU компилер не делает массив MYS(100) статическим и аллоцирует его от балды в каждой подпрограмме, а по идеологии оно должно быть одно для всех.

 

Я хотел положить в коммон блок этот массив, но почему-то компиллер ругается на

COMMON /MY_MYS/ MYS

и не дает компилить схожие вариации...

 

Забыл я фортран, а такими извращениями и никогда не пользовался, а хотелось бы быстро попробовать стоит ли мне этот огромадный софт прикручивать...

 

Вдруг кто помнит, обгуглился уже на на эту тему и всех кого можно было спросил и никто не помнит или не знает, но вдруг здесь кто помнит и подскажет, пожалуйста, подсобите!

 

Спасибо!!!

 

ИИВ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы посоветовал обернуть этот массив структур в MODULE name. И, соответственно, в каждом сорце сделать USE name. Так вроде более кошерно для F90.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы посоветовал обернуть этот массив структур в MODULE name. И, соответственно, в каждом сорце сделать USE name. Так вроде более кошерно для F90.

спасибо! Да, верно, я сначала тоже так хотел, но прикидочно это - неделя работы, ибо этот гребанный инклюд (вернее их у меня 9 штук однотипных) втыкается почти в каждую подпрограмму, а слово include в сорсе встречается примерно 10 тысяч раз.

 

Мне же таки хотелось бы намудрить только в инклюде что-то, чтобы не трогать сами сорсы... Понятно, если другого решения не будет, то сделаю именно так, но больно уж много глупой работы получается.

 

EDIT: я всегда знаю длину массива структуры, и могу положить массив integer такого же размера в какой-то коммон-блок, но почему-то EQUIVALENCE тоже не хочет работать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так, а расскажите подробнее структуру сорсов. Как и где что инклудится сейчас.

 

И чем оно вообще раньше компилилось?

 

EDIT: я всегда знаю длину массива структуры, и могу положить массив integer такого же размера в какой-то коммон-блок, но почему-то EQUIVALENCE тоже не хочет работать...

 

EQUIVALENCE - это ж вроде исключительно локальное дело. Из него не получится глобальную переменную построить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а ларчик-то просто открывался...

 

TYPE, BIND(C):: STRUCT_MYS
REAL*8 A
LOGICAL D
...
END TYPE

TYPE (STRUCT_MYS) :: MYS(100)
COMMON /MY_MYS/ MYS
SAVE /MY_MYS/

 

всем большущее спасибо за обсуждение!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...