crtbas
C CRTBAS SOURCE CB215821 20/11/25 13:23:26 10792 C*********************************************************************** C C C R T B A S C ----------- C C SOUS-PROGRAMME ASSOCIE A L'OPERATEUR "VIBRATION" C C FONCTION: C --------- C C CREATION D'UNE TABLE DE TYPE BASE_MODALE COMME SORTIE C DE L'OPERATEUR "VIBRATION" C C ARGUMENTS D'ENTREE: C ------------------ C C IPSOLU = POINTEUR SUR L'OBJET SOLUTION C IPMASS = POINTEUR SUR LA MATRICE MASSE C C DESCRIPTION DE LA TABLE BASE_MODALE CREE: C ---------------------------------------- C C TAB1 = 'TABLE' 'BASE_MODALE' ( POINTEUR IPTAB1 ) C TAB2 = 'TABLE' 'BASE_DE_MODES' ( POINTEUR IPTAB2 ) C DE MEME STRUCTURE QUE CELLE ISSUE DE LA PROCEDURE C TRADUIRE. C TAB3 = 'TABLE' 'MODE' ( POINTEUR IPTAB3 ) C TAB4 = 'TABLE' 'DEPLACEMENTS_GENERALISES' ( POINTEUR IPTAB4 ) C C ---------------------------------------- C C TAB1.'SOUSTYPE' = 'BASE_MODALE' C TAB1.'MODES' = IPTAB2 C C TAB2.'SOUSTYPE' = 'BASE_DE_MODES' C TAB2.'MAILLAGE' = IPG1 ( POINTEUR SUR LE C MAILLAGE EXTRAIT DE LA MATRICE C MASSE ) C C PUIS POUR CHAQUE MODE IMOD1 CONTENU DANS L'OBJET SOLUTION C C TAB3.'SOUSTYPE' = 'MODE' C TAB4.'SOUSTYPE' = 'DEPLACEMENTS_GENERALISES' C C TAB4.1 = QX DU MODE C TAB4.2 = QY DU MODE C TAB4.3 = QZ DU MODE C C TAB3.'NUMERO_MODE' = NUME1 ( NUMERO DU MODE ) C TAB3.'POINT_REPERE' = IPOIN1 ( NUMERO DU POINT ASSOCIE C AU MODE ) C TAB3.'FREQUENCE' = FREQ1 DU MODE C TAB3.'MASSE_GENERALISEE' = XMGEN1 DU MODE C TAB3.'DEPLACEMENTS_GENERALISES' = IPTAB4 C TAB3.'DEFORMEE_MODALE' = IPDEP1 ( POINTEUR SUR LE CHAMP C DE DEPLACEMENTS DU MODE ) C C TAB2.IMOD1 = IPTAB3 C C C AUTEUR, DATE DE CREATION: C ------------------------- C C NADINE BLAY 21 OCTOBRE 1991 C C*********************************************************************** C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C -INC PPARAM -INC CCOPTIO C -INC SMSOLUT -INC SMRIGID -INC SMTABLE -INC SMELEME -INC SMLREEL -INC SMLENTI -INC SMCHPOI CHARACTER*8 letyp,charre LOGICAL boolin,ltelq CHARACTER *72 ITEX C C--- RECUPERATION DU MAILLAGE DANS LA MATRICE MASSE C MRIGID=IPMASS SEGACT MRIGID NBSOUS=IRIGEL(/2) IPG1=IRIGEL(1,1) C c IF(NBSOUS.GT.1) THEN c DO 10 I=2,NBSOUS c IPP2=IRIGEL(1,I) c ltelq=.false. c CALL FUSE(IPG1,IPP2,IRET,ltelq) c IPG1=IRET c 10 CONTINUE c ENDIF cbp : FUSE ne teste pas si il genere des doublons... c on preferera utiliser fusebo IF(NBSOUS.GT.1) THEN nbref=0 nbnn=0 nbelem=0 segini ipt4 kt4 = 1 ipt4.lisous(kt4) = IPG1 DO 10 I=2,NBSOUS IPP2=IRIGEL(1,I) do 1029 kk=1,kt4 c maillage deja vu --> on saute if(IPP2.eq.ipt4.lisous(kk)) goto 10 1029 continue kt4=kt4+1 ipt4.lisous(kt4) = IPP2 10 CONTINUE nbsous = kt4 segadj ipt4 IPG1=IRET ENDIF SEGDES MRIGID C C--- CREATION DE LA TABLE BASE_DE_MODES C # 'MOT',0,0.D0,'BASE_DE_MODES',.TRUE.,0) # 'MAILLAGE',0,0.D0,' ',.TRUE.,IPG1) C C--- EXTRACTION DES INFORMATIONS DE L'OBJET SOLUTION C MSOLUT=IPSOLU SEGACT MSOLUT C MSOLE1=MSOLIS(4) * si l'objet solution n'est pas vide if (msole1.ne.0) then SEGACT MSOLE1 NBMOD1=MSOLE1.ISOLEN(/1) C MSOLE2=MSOLIS(5) SEGACT MSOLE2 C DO 20 I=1,NBMOD1 IMOD1=I C C--- CREATION DE LA TABLE MODE C # 'MOT',0,0.D0,'MODE',.TRUE.,0) C C--- CREATION DE LA TABLE DEPLACEMENTS_GENERALISES C # 'MOT',0,0.D0,'DEPLACEMENTS_GENERALISES',.TRUE.,0) C MMODE=MSOLE1.ISOLEN(IMOD1) SEGACT MMODE C NUME1=IMMODD(1) FRQ1=FMMODD(1) XMGEN1=FMMODD(2) QX1=FMMODD(3) QY1=FMMODD(4) QZ1=FMMODD(5) C MELEME=MSOLIS(3) SEGACT MELEME IPOIN1=NUM(1,IMOD1) SEGDES MELEME C IPDEP1=MSOLE2.ISOLEN(IMOD1) c ajout du titre au chpoint MCHPOI=IPDEP1 segact,MCHPOI*MOD MOCHDE=ITEX segdes,MCHPOI C C--- REMPLISSAGE DE LA TABLE DEPLACEMENTS_GENERALISES C # 'FLOTTANT',0,QX1,' ',.TRUE.,0) # 'FLOTTANT',0,QY1,' ',.TRUE.,0) # 'FLOTTANT',0,QZ1,' ',.TRUE.,0) C C--- REMPLISSAGE DE LA TABLE MODE C # 'ENTIER',NUME1,0.D0,' ',.TRUE.,0) # 'POINT',0,0.D0,' ',.TRUE.,IPOIN1) # 'FLOTTANT',0,FRQ1,' ',.TRUE.,0) # 'FLOTTANT',0,XMGEN1,' ',.TRUE.,0) # .TRUE.,0,'TABLE',0,0.D0,' ',.TRUE.,IPTAB4) # 'CHPOINT',0,0.D0,' ',.TRUE.,IPDEP1) C C--- SUITE DU REMPLISSAGE DE LA TABLE BASE_DE_MODES C # 'TABLE',0,0.D0,' ',.TRUE.,IPTAB3) C SEGDES MMODE 20 CONTINUE C C SEGDES MSOLE1 SEGDES MSOLE2 SEGDES MSOLUT endif * * tri selon les frequences jg = 10000 segini mlreel,mlenti do 350 i = 1, 10000 letyp=' ' $ letyp,ivalre,xvalre,charre,boolin,mtab2) if(letyp.ne.'TABLE ') go to 351 lect(i) = mtab2 $ 'FLOTTANT',ivalre,xvalre,charre,boolin,ioboi) 350 continue 351 jg = i - 1 segadj mlreel,mlenti call ORDONN IF (IERR.NE.0) RETURN segact mlenti do i = 1,jg mtab2 = lect(i) $ 'TABLE ',ivalre,xvalre,charre,boolin,mtab2) enddo C C--- CREATION DE LA TABLE BASE_MODALE C # 'MOT',0,0.D0,'BASE_MODALE',.TRUE.,0) # 'TABLE',0,0.D0,' ',.TRUE.,IPTAB2) C END
© Cast3M 2003 - Tous droits réservés.
Mentions légales