provcc
C PROVCC SOURCE PV 22/01/18 21:15:08 11267 C----------------------------------------------------------------------- C PRODUIT VECTORIEL DE 2 CHPOINTS C----------------------------------------------------------------------- C EN STANDARD LE CHPOINT RESULTAT A POUR NUMERO D'HARMONIQUE 0 C EN SERIE DE FOURIER , IL EST TYPE NOHARM C----------------------------------------------------------------------- C ENTREE C MCHPO1 CHPOINT C MLMOT1 LISTMOTS DE COMPOSANTES ASSOCIEES AU CHPOINT MCHPO1 C Si 3D : C MCHPO2 CHPOINT C MLMOT2 LISTMOTS DE COMPOSANTES ASSOCIEES AU CHPOINT MCHPO2 C MLMOT3 LISTMOTS DE COMPOSANTES ASSOCIEES AU CHPOINT RESULTAT C SORTIE C MCHPO3 POINTEUR SUR LE CHPOINT RESULTAT C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCHPOI -INC SMLMOTS -INC SMELEME -INC SMCOORD -INC TMTRAV CHARACTER*4 NOMIL integer*4 iOMIL equivalence (nomil,iomil) DATA NOMIL/'NOHA'/ LOGICAL LDOUB CHARACTER*(LOCOMP) NOIN SEGMENT ITRAV REAL*8 IVAA(NINC,NPOI),IVAB(NINC,NPOI) INTEGER IPOS(NINC),ICPRA(NPOI),ICPRB(NPOI) CHARACTER*(LOCOMP) INCA(NINC),INCB(NINC) ENDSEGMENT * * On vérifie qu'il n'y a pas de doublons dans les LISTMOTS * donnés en entrée * LDOUB=.FALSE. SEGACT,MLMOT1,MLMOT3,MLMOT4,MLMOT6 IF (IDIM.EQ.3) SEGACT,MLMOT2,MLMOT5 IF (IDIM.EQ.3) THEN ELSE NINC2=IDIM NINC5=IDIM ENDIF LDOUB=LDOUB.OR.(NINC1.NE.NINC4) LDOUB=LDOUB.OR.(NINC2.NE.NINC5) LDOUB=LDOUB.OR.(NINC3.NE.NINC6) SEGSUP,MLMOT4,MLMOT6 IF (IDIM.EQ.3) SEGSUP,MLMOT5 IF (LDOUB) THEN * 1019 2 * Une donnée de type %m1:8 contient des doublons MOTERR(1:8)='LISTMOTS' RETURN ENDIF IF (NINC1.NE.IDIM.OR.NINC2.NE.IDIM.OR.NINC3.NE.IDIM) THEN * 1018 2 * On attend un objet de type %m1:8 de dimension %i1 MOTERR(1:8)='LISTMOTS' INTERR(1)=IDIM RETURN ENDIF IF (IDIM.EQ.3) GOTO 1000 * * Cas simple (2D) * SEGINI,MCHPO3=MCHPO1 NSOUPO=0 SEGACT MCHPO1 NSOUP1=MCHPO1.IPCHP(/1) DO 30 ISOUP1=1,NSOUP1 MSOUP1=MCHPO1.IPCHP(ISOUP1) SEGACT MSOUP1 NC1=MSOUP1.NOHARM(/1) NX=0 NY=0 * WRITE(IOIMP,*) 'MOTS1=',MLMOT1.MOTS(1) * WRITE(IOIMP,*) 'MOTS2=',MLMOT1.MOTS(2) DO IC1=1,NC1 * WRITE(IOIMP,*) 'NOCOMP1=',MSOUP1.NOCOMP(IC1) ENDDO NC=0 IF (NX.NE.0) NC=NC+1 IF (NY.NE.0) NC=NC+1 * WRITE(IOIMP,*) 'NX=',NX * WRITE(IOIMP,*) 'NY=',NY IF (NC.EQ.0) GOTO 29 SEGINI MSOUP3 MPOVA1=MSOUP1.IPOVAL SEGACT MPOVA1 N=MPOVA1.VPOCHA(/1) SEGINI MPOVA3 IC=0 IF (NY.NE.0) THEN IC=IC+1 * WRITE(IOIMP,*) 'IC=',IC,' ',MLMOT3.MOTS(1) MSOUP3.NOHARM(IC)=MSOUP1.NOHARM(NY) DO I=1,N MPOVA3.VPOCHA(I,IC)=-1*MPOVA1.VPOCHA(I,NY) ENDDO ENDIF IF (NX.NE.0) THEN IC=IC+1 * WRITE(IOIMP,*) 'IC=',IC,' ',MLMOT3.MOTS(2)(1:4) MSOUP3.NOHARM(IC)=MSOUP1.NOHARM(NX) DO I=1,N MPOVA3.VPOCHA(I,IC)=MPOVA1.VPOCHA(I,NX) ENDDO ENDIF MSOUP3.IGEOC=MSOUP1.IGEOC MSOUP3.IPOVAL=MPOVA3 NSOUPO=NSOUPO+1 MCHPO3.IPCHP(NSOUPO)=MSOUP3 29 CONTINUE 30 CONTINUE NAT=MCHPO3.JATTRI(/1) SEGADJ MCHPO3 RETURN * * Cas dimension 3 repris de la subroutine PROSCAL * 1000 CONTINUE NPOI=nbpts MLMOTS=MLMOT1 SEGACT MLMOTS SEGINI ITRAV DO 1 I = 1, NINC 1 CONTINUE MLMOTS=MLMOT2 SEGACT MLMOTS SEGSUP ITRAV MOTERR(1:4)='PVEC' MOTERR(5:12)='LISTMOTS' RETURN ENDIF DO 21 I = 1, NINC 21 CONTINUE C C ********* IVAA CONTIENDRA LES VALEURS A MULTIPLIER PAR IVAB C ********* CREATION D'ABORD DE IVAA PUIS DE IVAB C MCHPOI=MCHPO1 SEGACT MCHPOI NSOUPO = IPCHP(/1) DO 2 M = 1,NSOUPO MSOUPO = IPCHP(M) SEGACT MSOUPO NC=NOCOMP(/2) DO 10 I = 1,NINC IPOS(I)=0 10 CONTINUE DO 4 K = 1, NINC DO 3 J = 1, NC NOIN= NOCOMP (J) IF(INCA(K). EQ . NOIN) THEN IPOS(K)=J GO TO 4 ENDIF 3 CONTINUE 4 CONTINUE DO 5 I = 1,NINC IF(IPOS(I). NE . 0) GO TO 6 5 CONTINUE GO TO 8 6 CONTINUE MELEME=IGEOC SEGACT MELEME NBELEM=NUM(/2) MPOVAL=IPOVAL SEGACT MPOVAL DO 9 LI = 1,NINC KL = IPOS(LI) IF(KL.EQ.0) GO TO 9 DO 7 I = 1,NBELEM I1 = NUM(1,I) IVAA(LI,I1)=VPOCHA(I,KL) ICPRA(I1)=1 7 CONTINUE 9 CONTINUE 8 CONTINUE 2 CONTINUE C C TRAITEMENT DU 2-EME CHPOINT C IA=0 MCHPOI=MCHPO2 SEGACT MCHPOI NSOUPO = IPCHP(/1) DO 12 M = 1,NSOUPO MSOUPO = IPCHP(M) SEGACT MSOUPO NC=NOCOMP(/2) DO 11 I = 1,NINC IPOS(I)=0 11 CONTINUE DO 14 K= 1,NINC DO 13 J = 1, NC NOIN= NOCOMP (J) IF(INCB(K). EQ . NOIN) THEN IPOS(K)=J GO TO 14 ENDIF 13 CONTINUE 14 CONTINUE DO 15 I = 1,NINC IF(IPOS(I). NE . 0) GO TO 16 15 CONTINUE GO TO 18 16 CONTINUE MELEME=IGEOC SEGACT MELEME NBELEM=NUM(/2) MPOVAL=IPOVAL SEGACT MPOVAL DO 19 LI = 1,NINC KL = IPOS(LI) IF(KL.EQ.0) GO TO 19 DO 17 I = 1,NBELEM I1 = NUM(1,I) IVAB(LI,I1)=VPOCHA(I,KL) IF(ICPRA(I1).NE.0) THEN IA=IA+1 ICPRB(I1)=IA ENDIF 17 CONTINUE 19 CONTINUE 18 CONTINUE 12 CONTINUE IF(IA.EQ.0) THEN C C CHPOINT VIDE C SEGSUP ITRAV NSOUPO=0 NAT=1 SEGINI MCHPOI IFOPOI=IFOUR MCHPO3=MCHPOI RETURN ENDIF C C ON EFFECTUE LE CALCUL C NNIN=3 NNNOE=IA SEGINI MTRAV SEGACT MLMOT3 DO I=1,3 ENDDO * * MODIF MILL LE 18 / 7 / 90 * REMPLISSAGE DE L'HARMONIQUE : NOHARM SI FOURIER , 0 SINON * IF(IFOPOI.EQ.1) THEN NHMIL=iomil DO I=1,3 NHAR(1)=NHMIL ENDDO ENDIF * MCHPOI=MCHPO1 SEGACT MCHPOI NSOUPO=IPCHP(/1) DO 22 M=1,NSOUPO MSOUPO=IPCHP(M) SEGACT MSOUPO MELEME=IGEOC SEGACT MELEME DO 27 J=1,NUM(/2) I1=NUM(1,J) IB=ICPRB(I1) IF(IB.EQ.0) GO TO 27 IF(IGEO(IB).NE.0) GO TO 27 IGEO(IB)=I1 DO 28 LI=1,NINC IBIN(LI,IB)=1 28 CONTINUE BB(1,IB)=BB(1,IB)+IVAA(2,I1)*IVAB(3,I1) $ -IVAA(3,I1)*IVAB(2,I1) BB(2,IB)=BB(2,IB)+IVAA(3,I1)*IVAB(1,I1) $ -IVAA(1,I1)*IVAB(3,I1) BB(3,IB)=BB(3,IB)+IVAA(1,I1)*IVAB(2,I1) $ -IVAA(2,I1)*IVAB(1,I1) 27 CONTINUE 22 CONTINUE SEGSUP ITRAV SEGSUP MTRAV RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales