Я пишу довольно небольшое приложение для решения pde в FORTRAN, и я пытаюсь использовать OOP. Теперь у меня есть несколько модулей, некоторые из которых определяют типы с соответствующими внутренними процедурами.Типы соединений, определенные в разных модулях в Fortran
Теперь проблема в том, что мне делать, если один модуль работает с типом, определенным в другом модуле и. Более поздняя модель также работает с типом первого? Приведу пример.
Скажем, у меня есть два модуля, один определяет тип Mesh, другой к типу NodeVariable. Теперь я хочу, чтобы каждый NodeVariable был связан с сеткой, на котором он будет разрешен, поэтому я добавляю поле type(Mesh) :: mesh
в определении типа. Пока это не проблема, я могу написать use module-mesh
, чтобы получить доступ к определению типа mesh. Но я также хочу, чтобы меш знал о переменных, определенных на нем, поэтому я объявляю type(NodeVariable), allocatable :: var(:)
как поле и добавляю процедуру для добавления переменных в сетку на лету. Но теперь я застрял, потому что я не могу позволить себе использовать: он вызывает модуль сам и, следовательно, все сбой. Решение?
Возможно, вам потребуется создать все ваши определения 'TYPE()' в одном общем модуле и переместить функции для разделения дополнительных модулей. Это уходит от ООП, но мы все еще говорим о Фортране здесь, помните. Если вы попытаетесь заставить слишком много парадигмы ООП, вы завяжете себя узлами! – ja72
Субмодулы, вероятно, также будут удобны в подобных ситуациях, но пока они не получили широкого распространения, поэтому я не знаю их достаточно хорошо. –
Да, я думаю, у меня будет специальный модуль только для определений! – tiam