[updated 7.May.2002]

Librairie-d'application appl_helmz2d > Fichier ghlmz2.f

Qui appelle ghlmz2 ?

line
       SUBROUTINE GHLMZ2 (TYNOYO,K,CORM,CORP,E,D1EM,D1EP,D2EMP)
line
  Auteur : D.Martin (Octobre 1989)
  Derniere modification : D.Martin (7 Mai 2002)
  Version 1.0.1
   
  Solution Elementaire au point 'CORM' de l'Equation de HELMHOLTZ dans R2  
  au facteur (i/4) pres :    J0(K*R)+iY0(K*R) 
  ou J0 (resp. Y0) est la fonction de Bessel d'ordre 0 de 1e (resp. 2e) espece  
   
 -- Arguments d'entree -- 
  TYNOYO: type du noyau de Green a calculer
  K     : constante K de J0(K*R)+iY0(K*R)  
  CORM  : coordonnees du point source  
  CORP  : coordonnees du point image
 -- Arguments de sortie --
  E     : J0(K*R)+iY0(K*R) 
  D1EM  : derivees de E par rapport aux coordonnees de M
  D1EP  : derivees de E par rapport aux coordonnees de P
  D2EMP : derivees secondes croisees dans l'ordre suivant  
          d2E/dxmdxp, d2E/dxmdyp, d2E/dymdxp, d2E/dymdyp
   
 -- Remarques: La multiplication par i/4 n'est pas effectuee dans ce S-P 
   On utilise la relation  dJ0/dz = -J1 et dY0/dz = -Y1 pour la derivee
   On utilise l'equa diff de Bessel : z**2 d2y/dz2 + z dy/dz + z**2 y = 0
   pour le calcul de la derivee seconde
line
      CHARACTER*(*) TYNOYO
      COMPLEX E,D1EP(*),D1EM(*),D2EMP(*)
      REAL K,CORP(*),CORM(*),XM(2)
 
      INTEGER IRANG2
      REAL R2,R,UNSUR,AJ0,AJ1,AY0,AY1
      COMPLEX EPRIME,ESECON
line
      R2=0.
      DO 1 I=1,2
         X=CORP(I)-CORM(I) 
         R2=R2+X*X 
         XM(I)=X
1     CONTINUE
      IF (R2.LT.1.E-06) GOTO 999
      R=SQRT(R2)
      UNSUR=1./R
   
      Calcul des fonctions de Bessel de 1ere et 2nde espece d'ordre 0 et 1 
   
      CALL BEJY01 (K*R,AJ0,AJ1,AY0,AY1,.TRUE.)  
   
      E=CMPLX (AJ0,AY0) 
   
      EPRIME=(K/R)*(J0PRIM(K*R) +i YOPRIM(K*R))=-(K/R)*(J1(K*R) +i Y1(K*R)) 
   
      EPRIME=-K*UNSUR*CMPLX (AJ1,AY1)
   
      DO 2 I=1,2
         D1EP(I) = XM(I)*EPRIME
         D1EM(I) =-D1EP(I) 
         XM(I)=UNSUR*XM(I)
2     CONTINUE 
   
      IF (TYNOYO(:3).EQ.'FOU'.OR.TYNOYO(:3).EQ.'NEU') THEN  
   
         ESECON =-K**2 * ((J0seconde(K*R)  + i YOseconde(K*R))
                = K**2(J0(K*R) +i Y0(K*R)) + (K/R)*(J0prim(K*R) +i YOprim(K*R))
                = K**2(J0(K*R) +i Y0(K*R)) - (K/R)*(J1(K*R) +i YOprim(K*R))
   
         ESECON=K*K*E +EPRIME  
         ESECON=ESECON+EPRIME  
         IRANG2=1  
         DO 4 I=1,2
            DO 3 J=1,2 
               D2EMP(IRANG2)=XM(I)*XM(J)*ESECON
               IRANG2=IRANG2+1
3           CONTINUE
4        CONTINUE
         D2EMP(1)=D2EMP(1)-EPRIME  
         D2EMP(4)=D2EMP(4)-EPRIME  
      ENDIF
      RETURN
line
999   WRITE (*,1000) (CORP(I),I=1,2),(CORM(I),I=1,2)
      CALL BAISE  ('Erreur dans le maillage ?')
1000  FORMAT('*Ghlmz2* On essaie de calculer la fonction de green pour'
     &,' une distance < 10**-6'/T11,'XP =',E12.4,' YP=',E12.4
     &,'      XM=',E12.4,' YM=',E12.4/)
                                                                    END !Ghlmz2
line
top

ghlmz2 est appelé dans (2 procédures)

top