qzrest
C QZREST SOURCE BP208322 22/09/16 21:15:12 11454 * ***************************************************************************** * RESTITUTION D'UNE BASE DE MODES COMPLEXES A PARTIR * * D'UNE BASE DE MODES COMPLEXES DEFINIE * * RELATIVEMENT A UNE BASE REELLE * * _________________________________________________________________________ * * * * DATE : le 31 Juillet 1995 * * AUTEUR : Nicolas BENECH * * _________________________________________________________________________ * * * * MODULE(S) APPELANT(S) : VIBRAC * * * * MODULE(S) APPELE(S) : ACCTAB, CRTABL, ECCTAB, EXTRA9, EXTR11 * * _________________________________________________________________________ * * * * EN ENTREE : * * - IPBASR : BASE DE MODES REELS PHYSIQUE * * - IPBASC : BASE DE MODES COMPLEXES RELATIVE A IPBASR (ddl modaux) * * _________________________________________________________________________ * * * * EN SORTIE : * * - IPBASC : BASE DE MODES COMPLEXES sur base EF (ddl PHYSIQUE) * ***************************************************************************** * IMPLICIT INTEGER(I-N) -INC PPARAM -INC CCOPTIO -INC SMCHPOI -INC SMCOORD -INC SMELEME -INC SMLMOTS -INC SMTABLE * REAL*8 XVALRE LOGICAL LOGRE CHARACTER*(8) CHARRE REAL*8 XVAL1, XVAL2, XVAL4 INTEGER I, J, K, NNOEUD, NCOMP, NBMODR, NBMODC, SWAP, PT1, PT2 INTEGER IOBRE LOGICAL AFFICH CHARACTER* (8) TYPEMODR, TYPEMODC CHARACTER*4 MOT1, MOT2 * POINTEUR IPBASR2.MTABLE, IPBASR3.MTABLE POINTEUR IPBASC2.MTABLE, IPBASC3.MTABLE POINTEUR MCHPO5.MCHPOI * *----- Ecriture des messages pour verification NUMAFF = 23 AFFICH = ((MOD(IIMPI, NUMAFF).EQ.0) .AND. (IIMPI.NE.0)) * AFFICH = .TRUE. * *----- Fin faute de donnees IF (IPBASR*IPBASC .EQ. 0) RETURN * *----- Lecture des donnees IF (AFFICH) WRITE (*,*) 'Lecture des donnees ...' & 'TABLE',IVALRE,XVALRE,CHARRE,LOGRE,IPBASR2) & 'TABLE',IVALRE,XVALRE,CHARRE,LOGRE,IPBASC2) * * --- Tri des donnees IF (AFFICH) WRITE (*,*) 'TEST : ordre des donnees ...' & 'TABLE',IVALRE,XVALRE,CHARRE,LOGRE,IPBASR3) & 'TABLE',IVALRE,XVALRE,CHARRE,LOGRE,IPBASC3) * & 'MOT',IVALRE,XVALRE,TYPEMODR,LOGRE,IOBRE) & 'MOT',IVALRE,XVALRE,TYPEMODC,LOGRE,IOBRE) IF (AFFICH) THEN WRITE (*,*) 'TYPEMODR = ',TYPEMODR WRITE (*,*) 'TYPEMODC = ',TYPEMODC ENDIF * IF (((TYPEMODR.EQ.'MODE_COM') .OR. (TYPEMODR.EQ.'MODE_ANN')) & .AND. (TYPEMODC.EQ.'MODE')) THEN IF (AFFICH) WRITE (*,*) 'Permutation !' SWAP=IPBASR IPBASR=IPBASC IPBASC=SWAP SWAP=IPBASR2 IPBASR2=IPBASC2 IPBASC2=SWAP TYPEMODR='MODE' TYPEMODC='MODE_COM' ENDIF IF (.NOT. AFFICH) GOTO 1 IF ((TYPEMODR.EQ.'MODE') .AND. ((TYPEMODC.EQ.'MODE_COM') & .OR. (TYPEMODR.EQ.'MODE_ANN'))) & THEN WRITE (*,*) 'OK' ELSE WRITE (*,*) 'Erreur !' ENDIF 1 CONTINUE * ******************************************* * Donnees fondamentales * ******************************************* * --- nombre de modes complexes SEGACT, IPBASC2 NBMODC = IPBASC2.MLOTAB-2 SEGDES, IPBASC2 * --- nombre de modes reels SEGACT, IPBASR2 NBMODR = IPBASR2.MLOTAB-2 SEGDES, IPBASR2 * --- nombre de SOUPO dans les chpoints reels & 'TABLE ',IVALRE,XVALRE,CHARRE,LOGRE,IPBASR3) & 0,'CHPOINT',IVALRE,XVALRE,CHARRE,LOGRE,MCHPO1) * SEGACT, MCHPO1 NSOUPO=MCHPO1.IPCHP(/1) * ************************************************* * Creation de la table MTAB2 BASE_DE_MODES * ************************************************* * IF (AFFICH) WRITE (*,*) 'Creation de la table BASE_DE_MODES ...' & 'MOT',0,0.0D0,'BASE_DE_MODES',.TRUE.,0) * & 'MAILLAGE',IVALRE,XVALRE,CHARRE,LOGRE,IPT1) & 'MAILLAGE',0,0.0D0,' ',.TRUE.,IPT1) * * *=========================================* * Boucle sur les modes Complexes * *=========================================* * DO 20, I=1, NBMODC IF (AFFICH) WRITE (*,*) 'Boucle sur les MODES ...', I * ************************************************ * Creation de la table MTAB3 du MODE I * ************************************************ * & 'TABLE ',IVALRE,XVALRE,CHARRE,LOGRE,IPBASC3) SEGINI, MTAB3=IPBASC3 SEGDES, MTAB3 & 'MOT',IVALRE,XVALRE,TYPEMODC,LOGRE,IOBRE) IF (TYPEMODC .EQ. 'MODE_ANN') GOTO 20 * ***** CALCUL DE LA DEFORMEE MODALE (mchpo3 + i mchpo4) ***** * * --- Recup de ALFA_R du mode I (=mchpo2) & .TRUE.,0,'CHPOINT',IVALRE,XVALRE,CHARRE,LOGRE,MCHPO2) * --- Recup de ALFA_I du mode I (=mchpo2) & .TRUE.,0,'CHPOINT',IVALRE,XVALRE,CHARRE,LOGRE,MCHPO4) * --- creation du chpoint Resultat depuis le 1er chpoint mode reel mise a 0 * partie reelle MCHPO3 SEGINI, MCHPO3=MCHPO1 SEGACT, MCHPO1 DO 30, J=1, NSOUPO IF (AFFICH) WRITE (*,*) 'creation MCHPO3: Boucle sur les SOUPO',J MSOUP1 = MCHPO1.IPCHP(J) SEGINI, MSOUP3=MSOUP1 MCHPO3.IPCHP(J) = MSOUP3 SEGACT, MSOUP1 MPOVA1 = MSOUP1.IPOVAL SEGACT, MPOVA1 N = MPOVA1.VPOCHA(/1) NC = MPOVA1.VPOCHA(/2) SEGINI, MPOVA3 MSOUP3.IPOVAL = MPOVA3 * Maillage et nom de Composantes ne seront pas detruits 30 CONTINUE * * partie imaginaire MCHPO5 SEGINI, MCHPO5=MCHPO1 SEGACT, MCHPO1 DO 31, J=1, NSOUPO IF (AFFICH) WRITE (*,*) 'creation MCHPO5: Boucle sur les SOUPO',J MSOUP1 = MCHPO1.IPCHP(J) SEGINI, MSOUP5=MSOUP1 MCHPO5.IPCHP(J) = MSOUP5 SEGACT, MSOUP1 MPOVA1 = MSOUP1.IPOVAL SEGACT, MPOVA1 N = MPOVA1.VPOCHA(/1) NC = MPOVA1.VPOCHA(/2) SEGINI, MPOVA5 MSOUP5.IPOVAL = MPOVA5 * Maillage et nom de Composantes ne seront pas detruits 31 CONTINUE * --- Points supports SEGACT, MCHPO2 nsou=MCHPO2.IPCHP(/1) * -- boucle sur les eventuelles zones do 25 isou=1,nsou MSOUP2 = MCHPO2.IPCHP(isou) SEGACT, MSOUP2 IPT2 = MSOUP2.IGEOC SEGACT, IPT2 NBP2 = IPT2.NUM(/2) * --- composantes (rem : on ne fait rien si plus de 1 composante....) SEGACT, MLMOT2 * * ****************************************** * Boucle sur les noeuds supports * ****************************************** * DO 50, K=1, NBP2 IF (AFFICH) WRITE (*,*) '--- Noeud support ',K,' ---' SEGACT, IPT2 PT2 = IPT2.NUM(1,K) * --- Contribution a mchpo3 * --- Contribution a mchpo5 IF (AFFICH) WRITE (*,*) ' alfa_R et alfa_I = ',XVAL2,XVAL4 * --- on recherche le chpoint reel correspondant L=1 & 0,'TABLE ',IVALRE,XVALRE,CHARRE,LOGRE,IPBASR3) & 0,'POINT',IVALRE,XVALRE,CHARRE,LOGRE,PT1) IF (PT1 .NE. PT2) THEN L=L+1 IF (L .LE. NBMODR) GOTO 60 ELSE & .TRUE.,0,'CHPOINT',IVALRE,XVALRE,CHARRE,LOGRE, & MCHPO1) IF (AFFICH) WRITE (*,*) ' Prise en compte du MCHPO1', L,MCHPO1 * * --- Sommes... MSOMM3=0 XVAL1=1.d0 IF (AFFICH) WRITE (*,*) 'Somme ...',MSOMM3,XVAL1,XVAL2 * --- ... pour mchpo3 MCHPO3=MSOMM3 * --- ... pour mchpo5 MCHPO5=MSOMM5 * ENDIF 50 CONTINUE ********************************************* * Fin de boucle sur les noeuds support * ********************************************* * 25 continue IF (AFFICH) WRITE (*,*) 'Enregistrement du CHPOINT ...' * --- enregistrement du chpoint & .TRUE.,0,'CHPOINT',0,0.0D0,' ',.TRUE.,MCHPO3) * --- enregistrement du chpoint & .TRUE.,0,'CHPOINT',0,0.0D0,' ',.TRUE.,MCHPO5) * --- enregistrement du mode & .TRUE.,0,'TABLE ',0,0.0D0,' ',.TRUE.,MTAB3) 20 CONTINUE ****************************************** * Fin boucle sur les modes * ****************************************** * * ****************************************** * Creation de la table BASE_MODALE * ****************************************** * * CALL CRTABL(MTAB1) * CALL ECCTAB(MTAB1,'MOT',0,0.0D0,'SOUSTYPE',.TRUE.,0, * & 'MOT',0,0.0D0,'BASE_MODALE',.TRUE.,0) * CALL ECCTAB(MTAB1,'MOT',I,0.0D0,'MODES', * & .TRUE.,0,'TABLE ',0,0.0D0,' ',.TRUE.,MTAB2) & .TRUE.,0,'TABLE ',0,0.0D0,' ',.TRUE.,MTAB2) * * --- fin * RETURN END *
© Cast3M 2003 - Tous droits réservés.
Mentions légales