[updated 7.May.2002]
SUBROUTINE GHLMZ2 (TYNOYO,K,CORM,CORP,E,D1EM,D1EP,D2EMP)
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
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
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
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
ghlmz2 est appelé dans (2 procédures)