intva2
C INTVA2 SOURCE CHAT 05/01/13 00:41:46 5004 ************************************************************************ * * I N T V A 2 * ----------- * * FONCTION: * --------- * * ISOLATION DES PULSATIONS PROPRES CONTENUES DANS UN INTERVALLE * DONNE ET CALCUL DES MODES PROPRES CORRESPONDANTS. * * MODE D'APPEL: * ------------- * * CALL INTVA2 (IPRIGI,IPMASS,NBFREQ,INF0,IPSOLU) * * PARAMETRES: (E)=ENTREE (S)=SORTIE * ----------- * * IPRIGI ENTIER (E) POINTEUR SUR UNE 'RIGIDITE'. * IPMASS ENTIER (E) POINTEUR SUR UNE 'RIGIDITE'. * NBFREQ ENTIER (E) NOMBRE MAXIMAL DE MODES PROPRES DEMANDES. * IPSOLU ENTIER (S) POINTEUR SUR LA 'SOLUTION' CONTENANT LES * MODES PROPRES. * * VOIR AUSSI LE PARAGRAPHE "COMMUN CINTVA". * * COMMUN "CINTVA": * ---------------- * * IMULTP ENTIER MIS A 1 SI INTERVALLE A DETECTE UN MODE * MULTIPLE (=0 SINON) (8 AVRIL 86) * IPW2 ENTIER POINTEUR SUR LE 'LISTREEL' REPRESENTANT LA * PARTITION DE L'INTERVALLE DE PULSATIONS AU * CARRE. * W2A REEL DP AVANT DERNIERE VALEUR DANS LE 'LISTREEL' DE * POINTEUR "IPW2". * W2B REEL DP DERNIERE VALEUR DANS LE 'LISTREEL' DE POINTEUR * "IPW2". * W2I REEL DP MILIEU DU SOUS-INTERVALLE (W2A,W2B). * NBW2 ENTIER NOMBRE DE SOUS-INTERVALLES PLUS 1 DE LA * PARTITION. * IPNUM ENTIER POINTEUR SUR LE 'LISTENTI' CONTENANT LA * COLLECTION DES NOMBRES DE PULSATIONS PROPRES AU * CARRE INFERIEURES AUX PULSATIONS AU CARRE * COLLECTEES DANS LE 'LISTREEL' DE POINTEUR * "IPW2". * NUM... ENTIER NOMBRE DE PULSATIONS PROPRES AU CARRE * INFERIEURES A ... ("..." REPRESENTANT "W2A", * "W2B" OU "W2I") A UNE CONSTANTE PRES ,DEPENDANT * DE LA 'RIGIDITE' DE POINTEUR "IPRIGI". * IUN ENTIER = +1 SI LA SUITE DE PULSATIONS DEFINISSANT LA * PARTITION DE L'INTERVALLE EST EN ORDRE * DECROISSANT, * = -1 SINON. * * A L'ENTREE DANS "INTVA2", LES VALEURS SUIVANTES DU COMMUN "CINTVA" * ONT ETE INITIALISEES OU FIXEES PAR LE PROGRAMME APPELANT: * INITIALISEES: W2A, W2B, NBW2, NUMW2A, NUMW2B. * FIXEES: IPW2, IPNUM, IUN. * * SOUS-PROGRAMMES APPELES: * ------------------------ * * DESOLU, FUSOLU, INTVA3, INTVA4, INTVA5, INTVA6, VRFINT. * * AUTEUR, DATE DE CREATION: * ------------------------- * * PASCAL MANIGOT 2 JANVIER 1985 * * LANGAGE: * -------- * * FORTRAN77 * LES ' GOTO 105 ' ONT ETE AJOUTES EN RAISON D'UNE ERREUR DE * COMPILATEUR LE 8 AVRIL 86 * ************************************************************************ * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC CCREEL -INC PPARAM -INC CCOPTIO -INC SMSOLUT * * REGROUPEMENT DES INFORMATIONS SUR LA SUITE DE PULSATIONS AU CARRE: COMMON/CINTVA/IMULTP,IPW2,W2A,W2I,W2B,NBW2,IPNUM,NUMW2A,NUMW2I, & NUMW2B ,IUN * LOGICAL NONVID,LIMAGE,LMULT * PARAMETER (SMALL = 1.D-2 , SMALS2 = SMALL/2.D0) PARAMETER (DEUXPI = (2.D0*XPI)) * NONVID = .TRUE. IFREQ = 0 IMULTP=0 IALEAT=0 INSYM=0 IBID1=0 IBID2=0 * * /FAIRE TANT QUE .../ 105 CONTINUE IF (NONVID .AND. (IFREQ .LT. NBFREQ) ) THEN * * IF (NUMW2A .EQ. NUMW2B) THEN * * ON RACCOURCIT L'INTERVALLE EN SUPPRIMANT LA PARTIE (W2A,W2B) IF (IERR .NE. 0) RETURN GOTO 105 * ELSE IF (NUMW2A .EQ. (NUMW2B + IUN) & .OR. ABS( (W2A-W2B) / (W2A+W2B) ) .LT. SMALS2) THEN * IF (NUMW2A .NE. (NUMW2B + IUN) ) THEN IF (.NOT.LMULT) THEN IF (IIMPI.EQ.2) WRITE (IOIMP,2000) SMALL,W2A,W2B 2000 FORMAT (//,' ***** ATTENTION: MODES PROPRES DE MEME ' & ,'PULSATION OU DE PULSATIONS AU CARRE VOISINES '/ & ,' ***** A MOINS DE ',1PE8.1,' (ECART RELATIF)' & ,' DANS L''INTERVALLE (',1PE12.5,',',1PE12.5,').'/ & ,' ***** ON NE RECHERCHE QU''UN SEUL MODE DANS CET' & ,' INTERVALLE.'///) IMULTP=1 ENDIF END IF * * RECHERCHE DE MODE PROPRE: ********************************************************************** * * -- RECHERCHE DES MODES PROPRES MULTIPLES MISE EN PLACE * LE 29/08/94 . -- * ********************************************************************** NBMOD = NUMW2A - NUMW2B IF ( (NBMOD .EQ. 1) .OR. ( .NOT. LMULT ) ) THEN ****** * -- AVANT L'AJOUT DES MODES MULTIPLES -- *** ELSE ****** * -- APRES L'AJOUT DES MODES MULTIPLES -- *** W2 = ( W2A + W2B ) / 2.D0 FREQ = SQRT( ABS(W2) ) / DEUXPI FREQ = SIGN( FREQ, W2 ) $ , INSYM,IBID1,IBID2) ENDIF ****** * -- FIN DE LA MODIFICATION -- *** IMULTP=0 IF (IERR .NE. 0) RETURN IFREQ = IFREQ + 1 * * AJOUT DU MODE A L'ENSEMBLE DES MODES: IF (IFREQ .EQ. 1) THEN IPSOLU = IPMODE ELSE IF (IERR .NE. 0) RETURN CALL DESOLU (IPMODE) CALL DESOLU (IPSOLU) IPSOLU = IPSOL1 END IF * * ON RACCOURCIT L'INTERVALLE EN SUPPRIMANT LA PARTIE (W2A,W2B) IF (IERR .NE. 0) RETURN GOTO 105 * ELSE IF ( (IUN*(NUMW2A -NUMW2B) ) .GT. 0) THEN * W2I = (W2A + W2B) / 2.D0 IF (IERR .NE. 0) RETURN * IF (NUMW2I .EQ. NUMW2B) THEN * ON RACCOURCIT L'INTERVALLE EN REMPLACANT "W2B" PAR "W2I": CALL INTVA5 IF (IERR .NE. 0) RETURN ELSE * ON INSERE "W2I" AVANT "W2B" DANS LA PARTITION: CALL INTVA4 IF (IERR .NE. 0) RETURN END IF * ELSE * NUMERR = 185 RETURN * END IF * GOTO 105 END IF * /FIN FAIRE/ * IF(IFREQ.EQ.0) THEN NIPO=0 SEGINI MSOLUT ITYSOL='MODE ' SEGDES MSOLUT IPSOLU=MSOLUT ENDIF END
© Cast3M 2003 - Tous droits réservés.
Mentions légales