[updated 21.Jun.2003]

Exemple A_mode_guide > Fichier denfgpb.f

Qui appelle denfgpb ?

line
      FUNCTION DENFGPB(X)
line
* Auteur : F.Mahe - 13 mai 1993
* Derniere modification (A.S. Bonnet) le 13 mai 1993
*
* NATURE DU CODE:  Fonction definissant le numerateur de la fonction 
*                 definissant l'equation de dispersiondu guide plan borne.
*
* DEMARCHE SUIVIE: Les parametres sont passes en common.
*
* RAPPEL DE LA Resolution de l'equation de dispersion du guide plan
*                  tg(kappa*d) = F(kappa*d)
*   ou kappa = sqrt(k2*np2-beta2), -beta2 etant la valeur propre, 
*   beta la constante de propagation du guide et d la largeur de la
*   bande centrale d'indice fort.
*                      
*  Sur chaque intervalle de la forme ]-pi/2+k*pi, -pi/2+(k+1)*pi[ (k>0), 
*  on cherche l'intersection des deux courbes qui est unique sur ces 
*  intervalles, sauf pour celui qui contient le pole de F (quand il existe): 
*  ce dernier en contient 2.
*  On determine l'intersection en cherchant les abscisses telles que 
*  tg(x)-F(x) s'annule.
*  On peut utiliser une methode de Newton (il faut alors calculer la derivee)
*  de la section d'or,  de dichotomie ,... jusqu'a arriver a la precision 
*  demandee. On recherche prealablement le pole de F(.) par dichotomie
* ATTENTION : ici, il y a 3 fonctions F(.) differentes, suivant l'intervalle 
* auquel appartient x:
*                  0 < K.sqrt(NP^2-N1^2).D < K.sqrt(NP^2-N2^2).D <
line
      REAL X,ETA1,ETA2,MU1,MU2,SQ1,SQ2,DEN
      REAL BORNE1,BORNE2,TM1,TM2,RIN
*
*     Parametres de la fonction F
*
      COMMON /PARAM/ETA1,ETA2,MU1,MU2,BORNE1,BORNE2
*
*     Parametres definissant le calcul a faire
*
      COMMON /PARATM/TM1,TM2,RIN
*
      IF (X.LT.0) THEN
         PRINT*,'---------->   ATTENTION  :  X < 0   .....'
         STOP
      ENDIF
      IF (RIN.EQ.0) THEN
       IF (X.LE.BORNE1) THEN
         SQ1=SQRT(ETA1-X**2)
         SQ2=SQRT(ETA2-X**2)
         DEN=X**2-SQ1*SQ2*TM1*TM2/(TANH(MU1*SQ1)*TANH(MU2*SQ2))
       ELSE
         IF (X.LE.BORNE2) THEN
            SQ1=SQRT(X**2-ETA1)
            SQ2=SQRT(ETA2-X**2)
            DEN=X**2-SQ1*SQ2*TM1*TM2/(TAN(MU1*SQ1)*TANH(MU2*SQ2))
         ELSE
            SQ1=SQRT(X**2-ETA1)
            SQ2=SQRT(X**2-ETA2)
            DEN=X**2-SQ1*SQ2*TM1*TM2/(TAN(MU1*SQ1)*TAN(MU2*SQ2))
         ENDIF
       ENDIF
      ELSE IF (RIN.EQ.1) THEN
       IF (X.LE.BORNE1) THEN
         SQ1=SQRT(ETA1-X**2)
         SQ2=SQRT(ETA2-X**2)
         DEN=X**2-SQ1*SQ2*TANH(MU1*SQ1)*TANH(MU2*SQ2)
       ELSE
         IF (X.LE.BORNE2) THEN
            SQ1=SQRT(X**2-ETA1)
            SQ2=SQRT(ETA2-X**2)
            DEN=X**2+SQ1*SQ2*TAN(MU1*SQ1)*TANH(MU2*SQ2)
         ELSE
            SQ1=SQRT(X**2-ETA1)
            SQ2=SQRT(X**2-ETA2)
            DEN=X**2-SQ1*SQ2*TAN(MU1*SQ1)*TAN(MU2*SQ2)
         ENDIF
       ENDIF
      ELSE
       PRINT*,'*Denfgpb*   RIN = ',RIN
       PRINT*,'   Cas non prevu'
       STOP
      ENDIF
      DENFGPB=DEN
*
      RETURN
      END
line
top

denfgpb est appelé dans (3 procédures)

00README-cbdisp rpoled.f (A_mode_guide) rpolet.f (A_mode_guide)

top