pjblch
C PJBLCH SOURCE FANDEUR 22/01/03 21:15:35 11136 ************************************************************************ * NOM : PJBLCH * DESCRIPTION : Calcule les coefficients de projection d'un signal * instationnaire sur une base de modes ************************************************************************ * APPELE PAR : pjba.eso ************************************************************************ * ENTREES : ILCHP1 = pointeur vers le LISTCHPO du signal instationnaire * (les mult. de Lagrange sont ignores) * ITBAS1 = pointeur vers la TABLE de sous-type BASE_MODALE * NBMOD1 = nombre de modes concernes (0 => tous) * IRIGI1 = matrice utilisee pour faire le produit scalaire * (0 si aucune) * SORTIES : ILCHP2 = pointeur vers l'objet LISTCHPO contenant les * coefficients de projection en fonction du temps ************************************************************************ * SYNTAXE (GIBIANE) : * * LCHPO2 = PJBA | LCHPO1 | (LIPDT1) TBAS1 (NMOD1) (RIGI1) ; * | TAB1 (MOT1) | * ************************************************************************ IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMLCHPO -INC SMCHPOI -INC SMELEME -INC SMLENTI -INC SMLMOTS -INC SMTABLE -INC CCHAMP * SEGMENT,ICHMOD(NMO) SEGMENT,XNOMOD(NMO)*D SEGMENT,IPOMOD(NMO) * CHARACTER*8 CHA8 CHARACTER*12 CH12 * LOGICAL ZLOGI * * * NOMBRE DE MODES CONTENUS DANS LA TABLE * ====================================== & 'TABLE',IVAL,XVAL,CHA8,ZLOGI,MTAB1) SEGACT,MTAB1 MLOTA=MTAB1.MLOTAB NBMOD2=0 DO I=1,MLOTA IF (MTAB1.MTABTI(I).EQ.'ENTIER') NBMOD2=NBMOD2+1 ENDDO SEGDES,MTAB1 IF (NBMOD2.EQ.0) THEN MOTERR(1:8)='TABLE' RETURN ENDIF * * * NOMBRE DE MODES SUR LESQUELS CALCULER LA PROJECTION * =================================================== IF (NBMOD1.GT.0) THEN IF (NBMOD1.GT.NBMOD2) THEN INTERR(1)=NBMOD1 RETURN ENDIF NMO=NBMOD1 ELSE NMO=NBMOD2 ENDIF * * * MEMORISATION DU POINTEUR DU CHPOINT, DE SA NORME EUCLIDIENNE * (AU CARRE) ET DU NOEUD DE CHAQUE MODE * ============================================================ SEGINI,XNOMOD,ICHMOD,IPOMOD DO IMO=1,NMO & 'TABLE',IVAL,XVAL,CHA8,ZLOGI,ITAB2) IF (IERR.NE.0) RETURN * & 'CHPOINT',IVAL,XVAL,CHA8,ZLOGI,ICHP3) IF (IERR.NE.0) RETURN ICHMOD(IMO)=ICHP3 * IF (IRIGI1.GT.0) THEN ELSE ENDIF IF (IERR.NE.0) RETURN XNOMOD(IMO)=VAL * & 'POINT',IVAL,XVAL,CHA8,ZLOGI,IPOI3) IF (IERR.NE.0) RETURN IPOMOD(IMO)=IPOI3 * ENDDO * * * CREATION DU MAILLAGE SUPPORT DES CHPOINTS DANS L'ESPACE MODAL * ============================================================= NBNN=1 NBELEM=NMO NBSOUS=0 NBREF=0 SEGINI,MELEME IMAI1=MELEME ITYPEL=1 DO I=1,NBELEM NUM(1,I)=IPOMOD(I) ENDDO SEGSUP,IPOMOD SEGDES,MELEME * * * CORRESPONDANCE ENTRE LES NOMS DES COMPOSANTES (NECESSAIRE SI * AUCUNE MATRICE N'EST FOURNIE) * ============================================================ * MLCHP1=ILCHP1 SEGACT,MLCHP1 N1=MLCHP1.ICHPOI(/1) * SEGINI,MLCHP2 ILCHP2=MLCHP2 * IF (N1.EQ.0) GOTO 999 * IF (IRIGI1.EQ.0) THEN * * COMPOSANTES DU SIGNAL CONTENU DANS LE LISTCHPO => MLENT1 ICHP1=MLCHP1.ICHPOI(1) IF (IERR.NE.0) RETURN SEGACT,MLENT1 JG=MLENT1.LECT(/1) DO I=2,N1 ICHP1=MLCHP1.ICHPOI(I) IF (IERR.NE.0) RETURN IF (ICOTY1.NE.ICOD1.OR.ICOD1.EQ.-1) THEN RETURN ENDIF SEGACT,MLENTI NBC=LECT(/1) DO 10 J=1,NBC JJ=LECT(J) DO K=1,JG IF (JJ.EQ.MLENT1.LECT(K)) GOTO 10 ENDDO JG=JG+1 SEGADJ,MLENT1 MLENT1.LECT(JG)=JJ 10 CONTINUE SEGSUP,MLENTI ENDDO JG1=JG * * COMPOSANTES DES MODES DE LA TABLE BASE_MODALE => MLENT2 ICHP2=ICHMOD(1) IF (IERR.NE.0) RETURN SEGACT,MLENT2 JG=MLENT2.LECT(/1) DO I=2,NMO ICHP2=ICHMOD(I) IF (IERR.NE.0) RETURN IF (ICOTY2.NE.ICOD2.OR.ICOD2.EQ.-1) THEN RETURN ENDIF SEGACT,MLENTI NBC=LECT(/1) DO 20 J=1,NBC JJ=LECT(J) DO K=1,JG IF (JJ.EQ.MLENT2.LECT(K)) GOTO 20 ENDDO JG=JG+1 SEGADJ,MLENT2 MLENT2.LECT(JG)=JJ 20 CONTINUE SEGSUP,MLENTI ENDDO JG2=JG * * COMPOSANTES COMMUNES ENTRE LE SIGNAL ET LA BASE MODALE JG=MAX(JG1,JG2) SEGINI,MLENTI JG=0 DO 30 J1=1,JG1 JJ1=MLENT1.LECT(J1) JG=JG+1 LECT(JG)=JJ1 GOTO 30 ENDIF ENDDO 30 CONTINUE SEGSUP,MLENT1,MLENT2 * IF (JG.EQ.0) THEN RETURN ENDIF * * CREATION DES OBJETS LISTMOTS JGN=4 JGM=JG SEGINI,MLMOT1,MLMOT2 DO K=1,JG IF (ICOTY1.EQ.1) THEN ELSE ENDIF IF (ICOTY2.EQ.1) THEN ELSE ENDIF ENDDO SEGSUP,MLENTI * ENDIF * * * CALCUL DE LA PROJECTION SUR CHAQUE MODE, POUR CHAQUE PAS DE TEMPS * ================================================================= * * BOUCLE SUR LES PAS DE TEMPS DO IT=1,N1 ICHPO1=MLCHP1.ICHPOI(IT) MCHPO1=ICHPO1 SEGACT,MCHPO1 * * CREATION DU CHPOINT POUR LE PAS DE TEMPS IT NC=1 N=NMO SEGINI,MPOVA3,MSOUP3 MSOUP3.NOCOMP(1)='ALFA' MSOUP3.NOHARM(1)=0 MSOUP3.IGEOC=IMAI1 MSOUP3.IPOVAL=MPOVA3 NAT=1 NSOUPO=1 SEGINI,MCHPO3 MLCHP2.ICHPOI(IT)=MCHPO3 MCHPO3.MTYPOI=' ' WRITE(CH12,FMT='(I12)') IT WRITE(CHA8,FMT='(I8)') ICHPO1 WRITE(MCHPO3.MOCHDE,FMT='(5A)') MCHPO3.IFOPOI=IFOUR MCHPO3.JATTRI(1)=MCHPO1.JATTRI(1) MCHPO3.IPCHP(1)=MSOUP3 SEGDES,MCHPO3,MSOUP3 * * BOUCLE SUR LES MODES DO IMO=1,NMO ICHP2=ICHMOD(IMO) XNOR2=XNOMOD(IMO) IF (IRIGI1.GT.0) THEN ELSE ENDIF IF (IERR.NE.0) RETURN MPOVA3.VPOCHA(IMO,1)=VAL/XNOR2 ENDDO * SEGDES,MCHPO1,MPOVA3 * ENDDO * IF (IRIGI1.EQ.0) SEGSUP,MLMOT1,MLMOT2 999 CONTINUE SEGDES,MLCHP1,MLCHP2 SEGSUP,XNOMOD,ICHMOD * RETURN * END *
© Cast3M 2003 - Tous droits réservés.
Mentions légales