Arhn - архитектура программирования

Назначение имени подпрограммы другой подпрограмме в Фортране

У меня есть решатель, который повторяется в течение большого количества времени (несколько часов), и я пытаюсь удалить несколько операторов if из основного цикла, чтобы сэкономить время.

По сути, я пытаюсь здесь создать подпрограмму updateGhosts, которая указывает на назначенную подпрограмму. Эта подпрограмма относится к производному типу данных, который содержит несколько других свойств и подпрограмм. Я хочу использовать подпрограмму setGhosts, чтобы установить для updateGhost значение ghostOne или ghostTwo, которые будут подпрограммами, корректно обновляющими некоторые условия.

Кажется, я не могу понять метод, который приводит к компиляции кода, хотя я пробовал несколько разных вещей безрезультатно.

Я попытался максимально сократить пример кода для простоты, но на самом деле типы GridPoint и BlockType имеют гораздо больше параметров, с которыми нужно работать, поэтому простой рефакторинг невозможен.

Вот сокращенный код:

module BlockModule
  implicit none

  type GridPoint
    real(kind=8) :: x, y, T
  end type GridPoint

  type BlockType
    integer :: BC
    type (GridPoint) :: Points(0:102,0:102)
  contains
    procedure :: setGhosts, updateGhosts
    procedure :: ghostOne, ghostTwo
  end type BlockType

contains
  subroutine setGhosts(this)
    class(BlockType), intent(inout) :: this

    if (this%BC == -1) then
      ! We want to assign updateGhosts to ghostOne.
      this%updateGhosts => this%ghostOne
    else
      ! We want to assign updateGhosts to ghostTwo.
      this%updateGhosts => this%ghostTwo
    end if
  end subroutine

  ! Routine that will be either ghostOne or ghostTwo.
  subroutine updateGhosts(this)
    class(BlockType), intent(inout) :: this
  end subroutine

  ! Routine will do something.
  subroutine ghostOne(this)
    class(BlockType), intent(inout) :: this
  end subroutine

  ! Routine will do something completely different, with same inputs.
  subroutine ghostTwo(this)
    class(BlockType), intent(inout) :: this
  end subroutine
end module

Как я могу назначить имя подпрограммы, чтобы оно указывало на другую подпрограмму в Fortran 90/95/03? (Самая старая версия идеальна, но не обязательна.) Извините, если подобные вопросы уже задавались, я попробовал поиск, но не совсем уверен, что мне нужно искать.

Спасибо за чтение!


  • Возможно, этот пример кода поможет: фортран">stackoverflow.com/questions/8612466/ . 10.11.2013
  • Это похоже на то, к чему я стремлюсь, но как я могу затем определить подпрограмму как часть производного типа данных (и избежать вызова через call Blocks(i)%updateGhosts(Blocks(i))? 10.11.2013
  • Это помогает? stackoverflow.com/a/5504247/2611496 10.11.2013
  • Да! В этом была хитрость. Спасибо! 10.11.2013

Ответы:


1

(Ответ на вопрос был дан в комментарии. См. Вопрос без ответов, но проблема решена в комментариях (или дополнена в чате) )

@SuperCow написал:

Это помогает? Указатель процедуры, производный тип

ОП написал:

Да! В этом была хитрость.

25.01.2015
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..