Мне нужно использовать подпрограмму (neqnf
), включенную в библиотеку IMSL, которая позволяет мне решать нелинейные системы. (Ссылка на руководство пользователя, neqnf страница here) main.f90
, является:Ошибка с аргументом и процедурой
program prova_sistema_in_un_modulo
include "link_fnl_shared.h"
use neqnf_int
use modx
implicit none
call d_neqnf(FCN, x, xguess=x_guess, fnorm=f_norm)
end program prova_sistema_in_un_modulo
где подпрограмма СКЛС кодируется во внешнем модуле, modx.f90
:
module modx
implicit none
integer, parameter :: ikind = selected_real_kind(8,99)
integer :: n=3
real(kind=ikind) :: f_norm
real(kind=ikind), dimension(3) :: x, x_guess=(/ 4.0, 4.0, 4.0/)
contains
subroutine FCN(x,f,n)
integer :: n !dummy var
real(kind=ikind), dimension(3) :: x, f !dummy var
f(1)=x(1)+A(x(1))+(x(2)+x(3))*(x(2)+x(3))-27.0 ! =0
f(2)=B(x(1),x(2))+x(3)*x(3)-10.0 ! =0
f(3)=Z(x(2),x(3)) ! =0
end subroutine FCN
function A(x)
real(kind=ikind) :: x !dummy var
real(kind=ikind) :: A !function var
A=exp(x-1.0)
end function A
function B(x,y)
real(kind=ikind) :: x,y !dummy var
real(kind=ikind) :: B !function var
B=exp(y-2.0)/x
end function B
function C(x)
real(kind=ikind) :: x !dummy var
real(kind=ikind) :: C !function var
C=sin(x-2.0)
end function C
function Z(x,y)
real(kind=ikind) :: x,y !dummy var
real(kind=ikind) :: Z !function var
Z=y+C(x)+x*x-7.0
end function Z
end module modx
, но я получаю эти три ошибки:
Error 1 error #7061: The characteristics of dummy argument 1 of the associated actual procedure differ from the characteristics of dummy argument 1 of the dummy procedure. (12.2) [FCN]
Error 2 error #7062: The characteristics of dummy argument 2 of the associated actual procedure differ from the characteristics of dummy argument 2 of the dummy procedure. (12.2) [FCN]
Error 3 error #7063: The characteristics of dummy argument 3 of the associated actual procedure differ from the characteristics of dummy argument 3 of the dummy procedure. (12.2) [FCN]
NB: если я поместил весь код в основную программу, все будет хорошо! в то время как если я код с использованием модуля (как я уже сделал, фактически опубликованный код), я получаю эти ошибки! Может ли кто-нибудь мне помочь?
Я использую Visual Studio (2010 SP1) с Fortran IMSL (2011) –
Я пробовал это только сейчас и добавляю «внешний FCN» между объявлением переменной и содержит инструкцию (правильно ли разместить ее там?) Я получаю этот новый ошибка рядом с вышеупомянутыми тремя ошибками Ошибка ошибка # 6645: имя процедуры модуля конфликтует с именем в охватывающей области охвата. [FCN] ' –
также меняет' ikind = kind (1.d0) 'не решает проблему (и, как еще большее доказательство, я использую другую процедуру _d__ с реальным, и все идет хорошо) –