У меня возникли проблемы с реализацией подхода к вызову метода Ньютона в программе на Фортране. Поэтому я хочу использовать метод Ньютона для решения уравнения по ссылке а>
Однако моя программа немного отличается от приведенного выше примера. В моем случае уравнение требует некоторой дополнительной информации, которая создается во время выполнения.
subroutine solve(f, fp, x0, x, iters, debug)
что означает, что f вычисляется не только на основе x, но и на основе нескольких других переменных (но x неизвестен).
У меня есть решение, которое работает только для простого случая: я использовал модуль для включения решателя Ньютона. Я также определил производный тип данных для хранения всех аргументов внутри модуля. Теперь это работает хорошо.
Мой вопрос: мне нужно много раз вызывать метод Ньютона, и каждый раз аргументы разные. Как мне спроектировать структуру модулей? Или я должен использовать другое решение?
Ниже я привел простой пример:
module solver
type argu
integer :: m
end type argu
type(argu):: aArgu_test !should I put here?
contains
subroutine solve(f, fp, x0, x, iters, debug)
...
!m is used inside here
end subroutine solve
subroutine set_parameter(m_in)
aArgu%m = m_in
end subroutine set_parameter()
end module solver
И вызывающий модуль:
!only one set of argument, but used many times
module A
use module solver
do i = 1, 4, 1
set_parameter(i)
!call Newtow method
...
enddo
end module A
!can I use an array for argu type if possible?
module B
use module solver
type(argu), dimension(:), allocable :: aArgu ! or should I put here or inside solver module?
end module B
Насколько я понимаю, если я помещу объект argu в модуль решателя, то все вызовы решателя будут использовать одни и те же аргументы (я все еще могу сохранить их все внутри модуля A, используя описанный выше метод). В этом случае мне нужно обновлять аргументы во время каждого цикла for?
Поскольку программа работает с использованием MPI/OpenMP, я хочу убедиться, что между потоками нет перезаписи. Спасибо.
x
для заданного набора параметров, а затем найти новую цельx
для другого набора параметров? - person Ross   schedule 06.09.2018