Bonjour,
Je suis assez mauvais en Fortran. Je cherche à coder une fonction qui retourne un array, sans succès. J'ai bien entendu cherché des exemples sur internet, mais là encore sans succès. Ci-dessous l'un de ces exemples qui est donc sensé fonctionner :
Je me perds dans les différentes façons de déclarer les variables et les fonctions, alors que peut-être le soucis est ailleurs. Je code donc en Fortran 90. Mon compilateur est Intel Fortran XE 14.0.4.237. Le fichier de debug généré est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 real function times2(x,n) result(y) real, intent(in) :: x(n) integer, intent(in) :: n real :: y(n) y = 2*x end function
J'ai essayé un peu tout ce qui me passe par la tête : sans result(), déclarer ou pas le résultat dans la fonction, ajouter le type ou pas devant function, etc..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 Compiling with Intel(R) Visual Fortran Compiler XE 14.0.4.237 [IA-32]... ifort /nologo /debug:full /Od /warn:interfaces /module:"Debug\\" /object:"Debug\\" /Fd"Debug\vc100.pdb" /traceback /check:bounds /check:stack /libs:dll /threads /dbglibs /c /Qvc10 /Qlocation,link,"c:\Program Files (x86)\Microsoft Visual Studio 10.0\Intel Fortran\Microsoft Files\VC\\bin" "C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\Mod_Thruster.f90" C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\Mod_Thruster.f90(55): error #6419: This scalar name is invalid in this context. [Y] real :: y(n) ---------------------^ C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\Mod_Thruster.f90(7): error #6404: This name does not have a type, and must have an explicit type. [GET_THRUST] public :: get_thrust --------------^ C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\Mod_Thruster.f90(57): error #6366: The shapes of the array expressions do not conform. [Y] y = 2*x ------------^ compilation aborted for C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\Mod_Thruster.f90 (code 1) ifort /nologo /debug:full /Od /warn:interfaces /module:"Debug\\" /object:"Debug\\" /Fd"Debug\vc100.pdb" /traceback /check:bounds /check:stack /libs:dll /threads /dbglibs /c /Qvc10 /Qlocation,link,"c:\Program Files (x86)\Microsoft Visual Studio 10.0\Intel Fortran\Microsoft Files\VC\\bin" "C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\dpl_dll.f90" C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\dpl_dll.f90(138): error #5082: Syntax error, found ',' when expecting one of: <END-OF-STATEMENT> ; thrust_arr(1) = 5.0d0, thrust_arr(2) = 11.0d0 ---------------------------------^ C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\dpl_dll.f90(140): error #6404: This name does not have a type, and must have an explicit type. [TIMES2] res = times2(thrust_arr, 3) ------------------^ compilation aborted for C:\Users\cc\Documents\RetD\DP_Fortran\Tests_Math\Operations_matricielles\Code_Source\dpl_dll.f90 (code 1) dpl_dll - 7 error(s), 0 warning(s)
Est-ce que c'est moi qui déconne ou c'est un problème de compilation ? Sachant que je parviens sans soucis à faire une fonction similaire mais qui renvoi un scalaire à la place.
J
Partager