F90 - problème compréhension fonction retournant un array
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 :
Code:
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 |
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:
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) |
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..
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