Bonjour à tous

Je ne sais pas si ce message est dans le bon forum, mais voila mon souci : je dois passer des tableaux du python vers une subroutine en Fortran 90 avec f2py, et je ne comprend pas mon erreur. voici les codes :

Python
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
 
...
try: // CONSTRUCTION DU TABLEAU
    n = 6
    xs = zeros( (n))
    ys = zeros( (n))
    zs = zeros( (n))
    xs[0]=150.
    ys[0]=150.
    for k in range(1,n):
        xs[k]=xs[0] + cos(2.*pi*k/n)*100.
        ys[k]=ys[0] + sin(2.*pi*k/n)*100.
 
except:
    print("Problem with building Stations array")
 
try:
    essaimod.loc_3d(n, xs, ys, zs) // PASSAGE A LA ROUTINE FORTRAN
    print("No problem with loc_3d module")
except:
    print("Problem with loc_3d module. Quit...")
    exit(1)
..

Et voila la subroutine en Fortran sensée récupérer les tableaux :


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
 
subroutine loc_3d (nbrStations,xs,ys,zs)
 
  integer                                         :: nz,nx,ny ! Size of vel and time
 
  real                                            :: h ! Mesh spacing h : dz=dx=dy 
  real, dimension(nbrStations)                    :: zs,xs,ys
  !f2py intent(in) zs,xs,ys
  integer                                         :: nbrStations
 
  write(6,*)"Here !!"
  ! Allocations, constants and parameters definitions
  ! -----------------------------------------------------------
 
  path = "out_data/" ! Path to store raw data
...
Je compile d'abord le code en Fortran avec

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
f2py -c essai_pymod_fast.f90 time_3db.o -m essaimod
et je lance en suite mon programme python, avec le bon import.

Quand je veux faire tourner tout ce petit monde, Le tableau dans le programme python est bon, mais dans ma subroutine, il est vide.

Des idées ? J'ai l'impression que je récupère mal mon tableau en Fortran, mais impossible de trouver d'où ça vient.

Merci d'avance pour vos suggestions

Mathieu

EDIT : quand je lance ma subroutine avec un try: ... except: exit(1), il me donne comme erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
0-th dimension must be fixed to 0 but got 6
Des idées ?