реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как запихнуть массив сруктур в коммонблок в фортране, не пинайте сильно...
iiv
сообщение Oct 22 2017, 14:47
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Добрый день,

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

На ембеддед 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
и не дает компилить схожие вариации...

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

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

Спасибо!!!

ИИВ
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 22 2017, 14:59
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



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


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
iiv
сообщение Oct 22 2017, 15:08
Сообщение #3


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Цитата(Rst7 @ Oct 22 2017, 20:59) *
Я бы посоветовал обернуть этот массив структур в MODULE name. И, соответственно, в каждом сорце сделать USE name. Так вроде более кошерно для F90.

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

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

EDIT: я всегда знаю длину массива структуры, и могу положить массив integer такого же размера в какой-то коммон-блок, но почему-то EQUIVALENCE тоже не хочет работать...
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 22 2017, 15:16
Сообщение #4


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



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

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

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


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


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
iiv
сообщение Oct 22 2017, 15:29
Сообщение #5


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



.
Go to the top of the page
 
+Quote Post
iiv
сообщение Oct 22 2017, 16:30
Сообщение #6


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



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

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

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


всем большущее спасибо за обсуждение!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th July 2025 - 17:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016