Типы подключения, определенные в разных модулях в Фортране - PullRequest
2 голосов
/ 12 марта 2012

Я пишу довольно маленькое приложение для решения pde на Фортране и пытаюсь использовать ООП. Теперь у меня есть несколько модулей, некоторые из них определяют типы с соответствующими внутренними процедурами.

Теперь проблема в том, что мне делать, если один модуль работает с типом, определенным в другом модуле и , более поздняя модель также работает с типом первого? Я приведу пример.

Скажем, у меня есть два модуля: один определяет тип Mesh , другой - тип NodeVariable . Теперь я хочу, чтобы каждый NodeVariable был связан с сеткой, с которой он будет решаться, поэтому я добавляю поле type(Mesh) :: mesh в определении типа. Пока нет проблем, я могу написать use module-mesh, чтобы получить доступ к определению типа mesh . Но я также хочу, чтобы меш знал о переменных, определенных в нем, поэтому я объявляю type(NodeVariable), allocatable :: var(:) как поле и добавляю процедуру для добавления переменных в меш на лету. Но теперь я застрял, потому что я не могу позволить себе еще один оператор use : он заставляет модуль использовать сам по себе, и поэтому все вылетает. Решение

1 Ответ

0 голосов
/ 12 марта 2012

Рассмотрим ваши модули, связанные с помощью операторов использования в граф.Фортран запрещает циклы на этом графике, как вы обнаружили.Решение состоит в том, чтобы изменить дизайн графика, чтобы избежать циклов.

В вашем случае вы можете просто определить оба типа в одном модуле.

...