Re-Hugh !

Alors voilà, j'ai vu ça là :
http://www.developpez.net/forums/d19...-tre-fonction/

Apparemment on peut passer des tableau en argument sans passer la taille : cool !

Alors je pars du code suivant
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
function f1(x) 
  implicit none
  real :: f1
  real ,dimension(2) :: x
  write(*,*) x 
  f1=1.0  
end function f1
 
subroutine programme(fonction)
  implicit none
  real fonction
  real temp
  real a(2)
  a(1)=2.0
  a(2)=2.0
  temp=fonction(a)
end subroutine programme
 
program main
  implicit none
  external f1  
  call programme(f1)
end program main
qui marche et j'enlève la dimension spécifiée à 2 dans la fonction :
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
function f1(x) 
  implicit none
  real :: f1
  real ,dimension(:) :: x
  write(*,*) x 
  f1=1.0  
end function f1
 
subroutine programme(fonction)
  implicit none
  real fonction
  real temp
  real a(2)
  a(1)=2.0
  a(2)=2.0
  temp=fonction(a)
end subroutine programme
 
program main
  implicit none
  external f1  
  call programme(f1)
end program main
Et là misère ça ne marche plus...

Vous auriez une idée ?

PS : la structure de ce programme est un peu tordue mais c'est voulu : mon problème est de faire un algorithme d'optim sur une fonction donnée
-> fonction est la fonction donnée, qui est définie en dehors de tout
-> program est le programme qui lance l'optim
-> subroutine est l'algo d'optim qui reçoit donc la fonction f en argument (car celle-ci peut changer)