simul7
C SIMUL7 SOURCE CB215821 20/11/25 13:39:54 10792 C C*********************************************************************** C C SBR APPELE PAR SIMUL1 C C VERSION 11/06/86 AUTEUR D. BROCHARD C modifs BP 06/01/2012 : ajout cas M non definie positive C C CALCUL MASSE GENERALISEE ET DEPL. GEN. DANS LE CAS OU L ON FAIT C UN CALCUL DE MODES (VIBRATION) OPTION SIMULTANEE C C IPSOLU : POINTEUR SUR L OBJET SOLUTION C IPMASS : POINTEUR SUR L OBJET RIGIDITE DE TYPE MASSE C PROPRE : VOIR ITINV C C SOUS-PROGRAMMES APPELES : XTMX,MASGEN,DEPGEN C C*********************************************************************** C C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) REAL*8 PROPRE(5) -INC CCREEL -INC SMSOLUT -INC SMCHPOI -INC PPARAM -INC CCOPTIO * SEGMENT TRAV REAL*8 TT(NM),TT1(NM) INTEGER IORD(NM),IPOS(NM) ENDSEGMENT * MSOLUT=IPSOLU SEGACT MSOLUT MSOLEN=MSOLIS(4) SEGACT MSOLEN NBMOD=ISOLEN(/1) * NM=NBMOD SEGINI TRAV * MSOLE1=MSOLIS(5) SEGACT MSOLE1 C C DO 10 NMOD=1,NBMOD IPX=MSOLE1.ISOLEN(NMOD) C C CALCUL DE XTMX (MASSE GENERALISEE SANS COEFF.) C ** CALL XTMX(MCHPOI,IPMASS,X1TMX1) ** PROPRE(2)=X1TMX1 * C IF(NMOD.EQ.1) CALL CORRSP(IPX,IPBX,IPLMOX,IPLMOY) PROPRE(2)=XMG * C C CALCUL MASSE GEN. AVEC COEF. C C C CALCUL DEPL. GEN. C C C MODIFICATION DE L OBJET SOLUTION C MMODE=ISOLEN(NMOD) SEGACT MMODE*MOD TT(NMOD)=FMMODD(1) DO 20 I=2,5 FMMODD(I)=PROPRE(I) 20 CONTINUE SEGDES MMODE 10 CONTINUE C C RANGER DANS TT1 LES FREQUENCES PAR ORDRE CROISSANT C IPOS(I) POSITION DANS TT DE LA IEME FREQ. C DO 400 I=1,NBMOD 400 TT1(I)=0.E0 C TT1(1)=TT(1) DO 410 N1=2,NBMOD IF(TT(N1).LT.TT1(N1-1)) GOTO 420 TT1(N1)=TT(N1) GOTO 410 420 CONTINUE DO 430 N2=1,(N1-1) N1M2=N1-N2-1 IF(N1M2.EQ.0) GOTO 500 IF(TT(N1).GT.TT1(N1M2)) GOTO 500 430 CONTINUE C C 500 CONTINUE N1M21=N1M2+1 J=0 DO 510 I=N1M21,(N1-1) TT1(N1-J)=TT1(N1-J-1) J=J+1 510 CONTINUE TT1(N1M21)=TT(N1) 410 CONTINUE C C CALCUL DE LA POSITION DE LA IEME FREQUENCE C DO 600 I=1,NBMOD FR=TT1(I) DO 605 J=1,NBMOD IF(FR.EQ.TT(J)) GOTO 610 605 CONTINUE 610 CONTINUE TT(J)=-1. IPOS(I)=J 600 CONTINUE C C C CALCUL DU NUMERO DU MODE C *ajout bp 06/01/2012: * correction pour elements fluides (inconnue PI mise à 0 via INITFL) c nvp0M = nvp0M - IFLU * bp 10/01/2012: nvp0M et NEMSM ne semblent pas bien calculés ... * (resultats dependant machine -> cf. dyna7.dgibi) * on propose la solution qui suppose que nvp0M si M est LIQUIDE if(IFLU.gt.0) nvp0M=0 if(nvp0M.ne.0) then if (W2.gt.0.D0) then IND0=nvp0M+IND0 elseif (W2.lt.0.D0) then IND0=nvp0M-IND0 else IND0=nvp0M endif endif *rem : le cas ou ni K ni M ne sont defini positifs n est pas prevu pour * l instant car le théroème de Sylvester ne s'applique pas. * on va donc utiliser la formule ci dessus et planter dans strate * (ou au mieux fournir un numero faux) DO 100 IN=2,NBMOD 100 CONTINUE C 120 CONTINUE C C FIN INF. A TT1(1) ON ASSOCIE IND0 A TT1(1) C IREP=1 IND0=IND0+1 GOTO 140 130 CONTINUE C C FIN SUP TT1(NMOD) ON ASSOCIE IND0 A TT1(NMOD) C IREP=NBMOD GOTO 140 110 CONTINUE C C CAS GENERAL ON ASSOCIE IND0 AU MODE JUSTE EN DESSOUS C C IREP=IN C IF((TT1(IN)-FIN).LE.(FIN-TT1(IN-1))) GOTO 140 IREP=IN-1 140 CONTINUE DO 220 I=1,NBMOD IORD(IPOS(I))=IND0-IREP+I 220 CONTINUE C C IF(IIMPI.NE.30) GOTO 1500 WRITE(IOIMP,*) (TT(I),I=1,NBMOD) WRITE(IOIMP,*) (TT1(I),I=1,NBMOD) WRITE(IOIMP,*) (IPOS(I),I=1,NBMOD) WRITE(IOIMP,*) (IORD(I),I=1,NBMOD) C C C MODIFICATION DE L OBJET SOLUTION C 1500 CONTINUE DO 310 NMOD=1,NBMOD MMODE=ISOLEN(NMOD) SEGACT MMODE*MOD IMMODD(1)=IORD(NMOD) SEGDES MMODE 310 CONTINUE SEGDES MSOLE1,MSOLEN,MSOLUT SEGSUP TRAV IPMODE=MSOLUT C C MESSAGE D AVERTISSEMENT C IF (IIMPI.EQ.2) THEN WRITE(IOIMP,1000) 1000 FORMAT(/40X,'ATTENTION OPERATEUR VIBRA OPTION SIMUL', C /40X,'--------------------------------------', C/10X,'LE NUMERO DU MODE EST CALCULE A PARTIR DU NOMBRE MODES', C/10X,' PROPRES INFERIEURS A LA FREQUENCE FOURNIE PAR L UTILI', C 'SATEUR') C * IMPRESSION DU MODE CALCULE: WRITE (IOIMP,2000) 2000 FORMAT ('1MODE PROPRE CALCULE:'/' --------------------'//) ENDIF * C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales