Bonjour,
Je rencontre des difficultés pour écrire un code 3D de différences finies. Pour cela, j'utilise des structures qui représente des morceaux de mon domaine de calcul, celles-ci contiennent des entiers (type Dom):
Or quand je veux appeler ma subroutine de différence finies sur le domaine ciblé via:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 type :: Dom integer :: Xor, Yor, Zor, Xfin, Yfin, Zfin end type Dom type(dom) :: D D%Xor = 1 D%Xfin = Nbx D%Yor = 1 D%Yfin = Nby D%Zor = 1 D%Zfin = Nbz
Ifort stop sans afficher de message d'erreur. Valgrind renseigne un segfault sur la ligne d'appelle de la subroutine. Avec Gfortran, il semble ne pas y avoir de soucis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CALL dfonc3dxd(rhoE_inter(D%Xor:D%Xfin,D%Yor:D%Yfin,D%Zor:D%Zfin),& rhoE(D%Xor:D%Xfin,D%Yor:D%Yfin,D%Zor:D%Zfin),& Nbx, Nby, Nbz, dx)
Ai-je mal compris le fonctionnement des structures?
Je joins un exemple de code complet et le Makefile associé.
Merci pour l'aide vous pourrez m'apporter
Version Ifort: ifort (IFORT) 15.0.1 20141023
version gfortran: ifort (IFORT) 15.0.1 20141023
Le tout sur une distribution linux CentOS à jour
PS: étant nouveau dans le domaine et n'aillant jamais suivis de cours de fortran, n'hésitez pas à signaler toute mauvaise pratique de programmation qui vous sauterais au yeux
Partager