2012-03-12 2 views
2

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

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

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

+1

Возможно, вам потребуется создать все ваши определения 'TYPE()' в одном общем модуле и переместить функции для разделения дополнительных модулей. Это уходит от ООП, но мы все еще говорим о Фортране здесь, помните. Если вы попытаетесь заставить слишком много парадигмы ООП, вы завяжете себя узлами! – ja72

+0

Субмодулы, вероятно, также будут удобны в подобных ситуациях, но пока они не получили широкого распространения, поэтому я не знаю их достаточно хорошо. –

+0

Да, я думаю, у меня будет специальный модуль только для определений! – tiam

ответ

0

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

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

+0

Да, я думаю, это единственный возможный ответ. Благодарю. – tiam

Смежные вопросы