norm1c
C NORM1C SOURCE CB215821 20/11/25 13:35:01 10792 ************************************************************************ * * N O R M 1 C * ----------- * * ORIGINE: * --------- * * inspiré de NORMA1.eso et de MAXIM1.eso * utilisé pour le calcul de modes complexes (Rayleigh.eso) * * FONCTION: * --------- * * NORMER UN 'CHPOINT' complexe EN RAMENANT lA PLUS GRANDE VALEUR de sa norme a 1. * * MODE D'APPEL: * ------------- * * CALL NORM1C (ICHP1R,ICHP1I,IPLMOT,MOTCLE,ICHP2R,ICHP2I) * * ARGUMENTS: (E)=ENTREE (S)=SORTIE * ---------- * * ICHP1R + i*ICHP1I ENTIERs E) POINTEUR SUR LEs 'CHPOINT' A NORMER. * IPLMOT ENTIER (E) VOIR LE S.P. "MAXIM1". * MOTCLE CHARACTER (E) VOIR LE S.P. "MAXIM1". * ICHP2R + i*ICHP2I ENTIERs (S) POINTEUR SUR LEs 'CHPOINT' NORMEs. * * AUTEUR, DATE DE CREATION: * ------------------------- * * Benoit Prabel Novembre 2008 * * LANGAGE: * -------- * * ESOPE + FORTRAN77 * ************************************************************************ * *---- Partie declarative ----------------------------------------------* * IMPLICIT INTEGER(I-N) * -INC PPARAM -INC CCOPTIO -INC SMCHPOI -INC SMLMOTS * REAL*8 XMAXR,XMAXI,XMAXN CHARACTER*(*) MOTCLE LOGICAL DEDANS,TRUFAL * *---- Lecture des options ---------------------------------------------* * IF (IPLMOT .EQ. 0) THEN TRUFAL = DEDANS ELSE IF (MOTCLE .EQ. 'AVEC') THEN TRUFAL = .TRUE. ELSE IF (MOTCLE .EQ. 'SANS') THEN TRUFAL = .FALSE. ELSE * MOT-CLE NON RECONNU: MOTERR=MOTCLE RETURN ENDIF MLMOTS = IPLMOT SEGACT,MLMOTS * SEGDES,MLMOTS ENDIF * *---- CALCUL DE LA NORME ----------------------------------------------* * * initialisation MAXSOU = 1 MAXN = 1 MAXNC = 1 XMAXR = 0.D0 XMAXI = 0.D0 XMAXN = 0.D0 * ouverture des chpoints MCHPO1 = ICHP1R MCHPO2 = ICHP1I segact,MCHPO1,MCHPO2 NSOUPO = MCHPO1.IPCHP(/1) NSOUPOI = MCHPO2.IPCHP(/1) if(NSOUPO .NE. NSOUPOI) then write(*,*) 'nom1c.eso : NSOUPO .NE. NSOUPOI' return endif * * IF (IPLMOT .NE. 0) THEN * MLMOTS = IPLMOT * SEGACT,MLMOTS * ENDIF * * RECHERCHE DU MAXIMUM *---> boucle sur les zones des chpoints DO 100 IB100=1,NSOUPO * MSOUP1 = MCHPO1.IPCHP(IB100) MSOUP2 = MCHPO2.IPCHP(IB100) SEGACT,MSOUP1,MSOUP2 NC = MSOUP1.NOCOMP(/2) NCI = MSOUP2.NOCOMP(/2) if(NC .NE. NCI) then write(*,*) 'nom1c.eso : NC .NE. NCI' return endif MPOVA1 = MSOUP1.IPOVAL MPOVA2 = MSOUP2.IPOVAL SEGACT,MPOVA1,MPOVA2 N = MPOVA1.VPOCHA(/1) return endif * *------> boucle sur les composantes DO 120 IB120=1,NC * IF (IPLMOT .NE. 0) THEN ENDIF * * SI LA COMPOSANTE NOCOMP(IB120) FAIT PARTIE DES COMPOSANTES * RETENUES POUR LA RECHERCHE DU MAXIMUM, ALORS... ** IF (DEDANS .EQV. TRUFAL) THEN ** (LIGNE CI-DESSUS INCOMPRISE PAR ESOPE 4.1.1 (MARS 84) ) & THEN *------------> boucle sur les points DO 130 IB130=1,N * calcul de la norme au carré XR = MPOVA1.VPOCHA(IB130,IB120) XI = MPOVA2.VPOCHA(IB130,IB120) XN = (XR ** 2) + (XI ** 2) c write(*,*) IB100,IB120,IB130,' XN,XMAXN=',XN,XMAXN IF (XN .GT. XMAXN) THEN MAXSOU = IB100 MAXN = IB130 MAXNC = IB120 XMAXR = XR XMAXI = XI XMAXN = XN ENDIF 130 CONTINUE *<------------ fin de boucle sur les points ENDIF * 120 CONTINUE *<--------- fin de boucle sur les composantes * SEGDES,MPOVA1,MPOVA2 SEGDES,MSOUP1,MSOUP2 * 100 CONTINUE *<--------- fin de boucle sur les zones * SEGDES,MCHPO1,MCHPO2 IF (IPLMOT .NE. 0) THEN MLMOTS = IPLMOT SEGDES,MLMOTS ENDIF * * A-T-ON OBTENU UN MAXIMUM ? IF (XMAXN .eq. 0.) THEN * SOIT LE 'CHPOINT' EST VIDE, SOIT LE 'LISTMOTS' CONTIENT DES * NOMS DE TYPE TELS QUE, ETANT DONNE LA VALEUR DU MOT-CLE, * TOUTES LES COMPOSANTES DU 'CHPOINT' SONT EXCLUES, * soit le chpoint est nul, ce qui ne nous permet pas de la normer RETURN ENDIF * *---- NORMALISATION Complexe ------------------------------------------* * * ouverture et initialisation des chpoints SEGACT,MCHPO1,MCHPO2 SEGINI,MCHPO3=MCHPO1 SEGINI,MCHPO4=MCHPO2 ICHP2R = MCHPO3 ICHP2I = MCHPO4 * *---> boucle sur les zones des chpoints DO 200 IB200=1,NSOUPO * MSOUP1 = MCHPO1.IPCHP(IB200) MSOUP2 = MCHPO2.IPCHP(IB200) SEGACT,MSOUP1,MSOUP2 NC = MSOUP1.NOCOMP(/2) SEGINI,MSOUP3=MSOUP1 SEGINI,MSOUP4=MSOUP2 MCHPO3.IPCHP(IB200) = MSOUP3 MCHPO4.IPCHP(IB200) = MSOUP4 MPOVA1 = MSOUP1.IPOVAL MPOVA2 = MSOUP2.IPOVAL SEGACT,MPOVA1,MPOVA2 N = MPOVA1.VPOCHA(/1) SEGINI,MPOVA3=MPOVA1 SEGINI,MPOVA4=MPOVA2 MSOUP3.IPOVAL = MPOVA3 MSOUP4.IPOVAL = MPOVA4 * *------> boucle sur les composantes DO 220 IB220=1,NC * *------------> boucle sur les points DO 230 IB230=1,N * calcul du chpoint Complexe normé XR = MPOVA1.VPOCHA(IB230,IB220) XI = MPOVA2.VPOCHA(IB230,IB220) XR2 = ( (XR*XMAXR) + (XI*XMAXI) ) / XMAXN XI2 = ( (XI*XMAXR) - (XR*XMAXI) ) / XMAXN MPOVA3.VPOCHA(IB230,IB220) = XR2 MPOVA4.VPOCHA(IB230,IB220) = XI2 230 CONTINUE *<------------ fin de boucle sur les points * 220 CONTINUE *<--------- fin de boucle sur les composantes * SEGDES,MPOVA1,MPOVA2,MPOVA3,MPOVA4 SEGDES,MSOUP1,MSOUP2,MSOUP3,MSOUP4 * 200 CONTINUE *<--------- fin de boucle sur les zones * SEGDES,MCHPO1,MCHPO2,MCHPO3,MCHPO4 END
© Cast3M 2003 - Tous droits réservés.
Mentions légales