dyne19
C DYNE19 SOURCE BP208322 20/08/17 21:15:19 10692 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * Operateur DYNE : * * ________________________________________________ * * * * Remplissage des tableaux de description des liaisons sur * * la base a partir des informations contenues dans la * * table ILIA. * * * * Parametres: * * * * e ILIA Table rassemblant la description des liaisons * * e KCPR Segment descriptif des points. * * e PDT Pas de temps. * * es KTLIAA Segment descriptif des liaisons sur la base A. * * * * Parametres de dimensionnement pour une liaison sur base: * * * * NIPALA : nombre de parametres pour definir le type des * * liaisons (NIPALA est fixe a 3). * * NXPALA : nombre maxi de parametres internes pour definir * * les liaisons. * * NPLAA : nombre maxi de points intervenant dans une liaison. * * * * NPLA : nombre total de points. * * NLIAA : nombre total de liaisons. * * * * * * Tableaux fortran pour les liaisons sur base: * * * * XPALA(NLIAA,NXPALA) : parametres de la liaison. * * IPALA(NLIAA,NIPALA) : renseigne sur le type de liaison. * * JPLIA(NPLA) : numero global des points. * * IPLIA(NLIAA,NPLAA) : numeros locaux des points concernes par * * la liaison. * * * * Auteur, date de creation: * * * * Lionel VIVAN, le 21 aout 1989. * * * *--------------------------------------------------------------------* * -INC PPARAM -INC CCOPTIO -INC CCNOYAU -INC SMCOORD -INC SMTABLE -INC CCASSIS -INC SMLREEL * SEGMENT,ICPR(nbpts) * SEGMENT MTLIAA INTEGER IPALA(NLIAA,NIPALA),IPLIA(NLIAA,NPLAA),JPLIA(NPLA) REAL*8 XPALA(NLIAA,NXPALA) ENDSEGMENT SEGMENT icorres (nliaa) * LOGICAL L0,L1 CHARACTER*8 MONAMO,MONOBJ,TYPIND,TYPOBJ,CHARRE CHARACTER*40 CMOT,MONMOT,CMOT2 CHARACTER*(20) CHAI1 CHARACTER*(18) CHAI2 CHARACTER*(15) CHAI3 CHARACTER*(16) CHAI4 CHARACTER*(14) CHAI5 CHARACTER*(11) CHAI6 PARAMETER (XZERO = 0.D0) DATA CHAI1 /'EXPOSANT_DEPLACEMENT'/ DATA CHAI2 /'RETARD_DEPLACEMENT'/ DATA CHAI3 /'JEU_DEPLACEMENT'/ DATA CHAI4 /'EXPOSANT_VITESSE'/ DATA CHAI5 /'RETARD_VITESSE'/ DATA CHAI6 /'JEU_VITESSE'/ * ICPR = KCPR MTLIAA = KTLIAA NLIAA = IPALA(/1) NXPALA = XPALA(/2) NIPALA = IPALA(/2) NPLAA = IPLIA(/2) NPLA = JPLIA(/1) XPDTS2 = 0.5 * PDT segini icorres * * Boucle sur le nombre de liaisons * II = 0 DO 10 I = 1,NLIAA & 'TABLE',I0,X0,' ',L1,ITLIAI) IF (IERR.NE.0) RETURN icorres ( i ) = itliai & 'MOT',I1,X0,MONMOT,L1,IP1) IF (IERR.NE.0) RETURN * * Liaison elementaire * IF (MONMOT(1:19).EQ.'LIAISON_ELEMENTAIRE') THEN & 'MOT',I1,X0,CMOT,L1,IP1) IF (IERR.NE.0) RETURN * IF (CMOT(1:17).EQ.'POINT_PLAN_FLUIDE') THEN * * ------------ choc POINT_PLAN_FLUIDE * & 'POINT',I1,X1,' ',L1,IMOD) IF (IERR.NE.0) RETURN & L0,IP0,'FLOTTANT',I0,XINER,' ',L1,IP1) IF (IERR.NE.0) RETURN IF (IERR.NE.0) RETURN & L0,IP0,'FLOTTANT',I0,XVISC,' ',L1,IP1) IF (IERR.NE.0) RETURN & 'COEFFICIENT_P_D_C_ELOIGNEMENT',L0,IP0, & 'FLOTTANT',I0,XPCEL,' ',L1,IP1) IF (IERR.NE.0) RETURN & 'COEFFICIENT_P_D_C_RAPPROCHEMENT',L0,IP0, & 'FLOTTANT',I0,XPCRA,' ',L1,IP1) IF (IERR.NE.0) RETURN & 'FLOTTANT',I0,XJEU,' ',L1,IP1) IF (IERR.NE.0) RETURN * IPALA(I,1) = 3 XPALA(I,1) = XINER XPALA(I,3) = XVISC XPALA(I,4) = XPCEL XPALA(I,5) = XPCRA XPALA(I,6) = XJEU IK = ICPR(IMOD) IPLIA(I,1) = IK JPLIA(IK) = IMOD ELSE IF (CMOT(1:10).EQ.'POINT_PLAN') THEN MONAMO = ' ' & MONAMO,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN * * ------------ choc POINT_PLAN avec amortissement * IF (MONAMO.EQ.'FLOTTANT') THEN & 'POINT',I1,X1,' ',L1,IMOD) IF (IERR.NE.0) RETURN & 'FLOTTANT',I0,XRAID,' ',L1,IP1) IF (IERR.NE.0) RETURN & 'FLOTTANT',I0,XJEU,' ',L1,IP1) IF (IERR.NE.0) RETURN * IPALA(I,1) = 2 XPALA(I,1) = XRAID XPALA(I,2) = XJEU XPALA(I,3) = XAMO IK = ICPR(IMOD) IPLIA(I,1) = IK JPLIA(IK) = IMOD * * ------------ choc POINT_PLAN sans amortissement * ELSE & 'POINT',I1,X1,' ',L1,IMOD) IF (IERR.NE.0) RETURN & 'FLOTTANT',I0,XRAID,' ',L1,IP1) IF (IERR.NE.0) RETURN & 'FLOTTANT',I0,XJEU,' ',L1,IP1) IF (IERR.NE.0) RETURN * IPALA(I,1) = 1 XPALA(I,1) = XRAID XPALA(I,2) = XJEU IK = ICPR(IMOD) IPLIA(I,1) = IK JPLIA(IK) = IMOD ENDIF * * --------- liaison de couplage en vitesse * ELSE IF (CMOT(1:16).EQ.'COUPLAGE_VITESSE') THEN & 'POINT',I1,X1,' ',L1,ISUPP) IF (IERR.NE.0) RETURN & 'POINT',I1,X1,' ',L1,IORIG) IF (IERR.NE.0) RETURN & 'FLOTTANT',I1,XCPLGE,' ',L1,IP1) IF (IERR.NE.0) RETURN * IPALA(I,1) = 4 XPALA(I,1) = XCPLGE IKX = ICPR(ISUPP) IPLIA(I,1) = IKX JPLIA(IKX) = ISUPP IKY = ICPR(IORIG) IPLIA(I,2) = IKY JPLIA(IKY) = IORIG * * --------- liaison de couplage en deplacement * ELSE IF (CMOT(1:20).EQ.'COUPLAGE_DEPLACEMENT') THEN & 'POINT',I1,X1,' ',L1,ISUPP) IF (IERR.NE.0) RETURN & 'POINT',I1,X1,' ',L1,IORIG) IF (IERR.NE.0) RETURN & 'FLOTTANT',I1,XCPLGE,' ',L1,IP1) IF (IERR.NE.0) RETURN * IPALA(I,1) = 5 XPALA(I,1) = XCPLGE IKX = ICPR(ISUPP) IPLIA(I,1) = IKX JPLIA(IKX) = ISUPP IKY = ICPR(IORIG) IPLIA(I,2) = IKY JPLIA(IKY) = IORIG * * lectures facultatives EXPOSANT OU FONCTION TYPOBJ = ' ' & TYPOBJ,I1,XEXPO,' ',L1,IP1) IF (IERR.NE.0) RETURN IF(TYPOBJ.EQ.'ENTIER') THEN XPALA(I,2) = DBLE(I1) ELSEIF(TYPOBJ.EQ.'FLOTTANT') THEN XPALA(I,2) = XEXPO ELSE XPALA(I,2) = 1.D0 * lectures facultatives FONCTION TYPOBJ = ' ' & TYPOBJ,I1,X1,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN IF(TYPOBJ.EQ.'MOT') THEN c uniquement fonctions trigonometriques IF(CHARRE.EQ.'COS') THEN IPALA(I,3) = 1 ELSEIF(CHARRE.EQ.'SIN') THEN IPALA(I,3) = 2 ELSE WRITE(IOIMP,*) 'FONCTION non reconnue !' RETURN ENDIF c fontions de q ou du temps ? IF(IPALA(I,3).EQ.1.OR.IPALA(I,3).EQ.2) THEN TYPOBJ = ' ' & TYPOBJ,IFREQ,XFREQ,' ',L1,IP1) IF (IERR.NE.0) RETURN c -il s'agit de cos(wt)*q IF(TYPOBJ.EQ.'FLOTTANT') THEN XPALA(I,2) = XFREQ IPALA(I,3) = IPALA(I,3) + 10 ELSEIF(TYPOBJ.EQ.'ENTIER') THEN XPALA(I,2) = DBLE(IFREQ) IPALA(I,3) = IPALA(I,3) + 10 c -il s'agit de cos(q) --> on ne fait rien c ELSE ENDIF ENDIF ENDIF ENDIF * * lectures facultatives FONCTION_CONVOLUTION TYPOBJ = ' ' & L0,IP0,TYPOBJ,I1,X1,CMOT2,L1,IP1) IF (IERR.NE.0) RETURN IF(TYPOBJ.EQ.'LISTREEL') THEN c write(*,*) 'dyne19: FONCTION_CONVOLUTION+LISTREEL' c on signale le type de fonction IPALA(I,3) = 100 c on recupere et active le listreel h(\tau_k) IPALA(I,4)=IP1 MLREE1=IP1 segact,MLREE1 c on cree et initialise le listreel x(t-\tau_k) c write(*,*) 'dyne19: LISTREEL=',(MLREE1.PROG(iou),iou=1,3) c & ,'...',JG segini,MLREE2 IP2=MLREE2 IPALA(I,5)=IP2 c + listreel des demi-pas x(t-\tau_k) avec t={t_n+1/2 ...} segini,MLREE3 IP3=MLREE3 IPALA(I,6)=IP3 c si reprise, on remplira ces 2 derniers listreels dans dyna14 ELSEIF(TYPOBJ.EQ.'MOT') THEN IF (CMOT2.EQ.'GRANGER_PAIDOUSSIS') THEN & 'FLOTTANT',I1,XVIT1,CMOT2,L1,IP1) IF (IERR.NE.0) RETURN & 'FLOTTANT',I1,XDIA1,CMOT2,L1,IP1) IF (IERR.NE.0) RETURN & 'LISTREEL',I1,X1,CMOT2,L1,IP1) IF (IERR.NE.0) RETURN & 'LISTREEL',I1,X1,CMOT2,L1,IP2) IF (IERR.NE.0) RETURN c write(*,*) '>dyne19: FONCTION_CONVOLUTION+GRANGER' c on signale le type de fonction IPALA(I,3) = 101 c on recupere et active les listreel alpha_i et delta_i MLREE1=IP1 segact,MLREE1 MLREE2=IP2 segact,MLREE2 IF(JG1.NE.JG2) THEN MOTERR(1:8)='LISTREEL' RETURN ENDIF c IPALA(I,4)=IP1 c IPALA(I,5)=IP2 c --> optimisation par precalcul : c on cree 1 listreel + efficace que alpha et delta c contenant a_i*d_i , EXP(+AUX) et EXP(-AUX) c ok tant que le PDT est constant JG=3*JG1 segini,MLREEL do ig1=1,jg1 c pour differences_centrees: AUX=XDELT*XVIT1/XDIA1*PDT c pour de_vogelaere on prend dt/2: if (IALGO.EQ.1) AUX=AUX*0.5D0 enddo IPALA(I,4)=MLREEL IPALA(I,5)=0 c on cree et initialise le listreel y(t_n-1)_i JG=JG1 segini,MLREEL c IPALA(I,6)=MLREEL IPALA(I,5)=MLREEL c + listreel de S_i(t_n-1) = integrale de y(t_n-1)_i segini,MLREEL c IPALA(I,7)=MLREEL IPALA(I,6)=MLREEL c si reprise, on remplira ces 2 derniers listreels dans dyna14 c il reste le rapport V/D XPALA(I,2)=XVIT1/XDIA1 c et la constante alpha0 = 1 - \sum_i alpha_i XALPH0=1.D0 DO IG1=1,JG1 ENDDO XPALA(I,3)=XALPH0 ENDIF ENDIF * * --------- liaison de type force POLYNOMIALE * ELSE IF (CMOT(1:11).EQ.'POLYNOMIALE') THEN & 'POINT',I1,X1,' ',L1,ISUPP) IF (IERR.NE.0) RETURN & 'FLOTTANT',I1,XCOEF,' ',L1,IP1) IF (IERR.NE.0) RETURN * on met un flag reconnaissable ( cf dypol1) pour * reconnaissance du temps de demmarrage de la liaison do 101 ip = 1 , nxpala xpala(i,ip) = 123456.7 101 continue IPALA(I,1) = 6 IKX = ICPR(ISUPP) IPLIA(I,1) = IKX JPLIA(IKX) = ISUPP XPALA(I,1) = XCOEF MTABLE = ITLIAI SEGACT MTABLE NIND1 = MLOTAB * * contributions des autres modes * K1 = 2 K2 = 1 if(nbesc.ne.0) segact ipiloc DO 20 J=1,NIND1 * valeurs nulles par defaut XPALA(I,K1) = 0d0 XPALA(I,K1+1) = 0d0 XPALA(I,K1+2) = 0d0 XPALA(I,K1+3) = 0d0 XPALA(I,K1+4) = 0d0 XPALA(I,K1+5) = 0d0 TYPIND = MTABTI(J) IF (TYPIND.EQ.'POINT ') THEN TYPOBJ = MTABTV(J) IF (TYPOBJ.EQ.'TABLE ') THEN K2 = K2 + 1 IORIG = MTABII(J) IKX = ICPR(IORIG) IPLIA(I,K2) = IKX JPLIA(IKX) = IORIG MTAB1 = MTABIV(J) SEGACT MTAB1 NIND2 = MTAB1.MLOTAB RD = XZERO RV = XZERO DO 30 K=1,NIND2 TYPIND = MTAB1.MTABTI(K) IF (TYPIND.EQ.'MOT ') THEN IP = MTAB1.MTABII(K) ID = IPCHAR(IP) IFI = IPCHAR(IP+1) IL1 = IFI - ID IF (IL1.EQ.20) THEN c EXPOSANT_DEPLACEMENT IF (CHAI1.EQ.ICHARA(ID:ID+19)) THEN TYPOBJ = MTAB1.MTABTV(K) IF (TYPOBJ.EQ.'FLOTTANT') THEN XPALA(I,K1) = MTAB1.RMTABV(K) ENDIF ENDIF ELSE IF (IL1.EQ.18) THEN c RETARD_DEPLACEMENT IF (CHAI2.EQ.ICHARA(ID:ID+17)) THEN TYPOBJ = MTAB1.MTABTV(K) IF (TYPOBJ.EQ.'FLOTTANT') THEN RD = MTAB1.RMTABV(K) XPALA(I,K1+1) = RD ENDIF ENDIF ELSE IF (IL1.EQ.15) THEN c JEU_DEPLACEMENT IF (CHAI3.EQ.ICHARA(ID:ID+14)) THEN TYPOBJ = MTAB1.MTABTV(K) IF (TYPOBJ.EQ.'FLOTTANT') THEN XPALA(I,K1+2) = MTAB1.RMTABV(K) ENDIF ENDIF ELSE IF (IL1.EQ.16) THEN c EXPOSANT_VITESSE IF (CHAI4.EQ.ICHARA(ID:ID+15)) THEN TYPOBJ = MTAB1.MTABTV(K) IF (TYPOBJ.EQ.'FLOTTANT') THEN XPALA(I,K1+3) = MTAB1.RMTABV(K) ENDIF ENDIF ELSE IF (IL1.EQ.14) THEN c RETARD_VITESSE IF (CHAI5.EQ.ICHARA(ID:ID+13)) THEN TYPOBJ = MTAB1.MTABTV(K) IF (TYPOBJ.EQ.'FLOTTANT') THEN RV = MTAB1.RMTABV(K) XPALA(I,K1+4) = RV ENDIF ENDIF ELSE IF (IL1.EQ.11) THEN c JEU_VITESSE IF (CHAI6.EQ.ICHARA(ID:ID+10)) THEN TYPOBJ = MTAB1.MTABTV(K) IF (TYPOBJ.EQ.'FLOTTANT') THEN XPALA(I,K1+5) = MTAB1.RMTABV(K) ENDIF ENDIF ENDIF ENDIF 30 CONTINUE ND = INT(RD/XPDTS2) + 1 NV = INT(RV/XPDTS2) + 2 NMAX = MAX(ND,NV) K1 = K1 + 6 + NMAX ENDIF ENDIF 20 CONTINUE if(nbesc.ne.0)SEGDES,IPILOC SEGDES MTABLE * * Nombre de modes "origine" * IPALA(I,2) = K2 - 1 * * --------- choc ........... * * ELSE IF (CMOT(1: ).EQ.' ') THEN * ....... * ....... * ELSE RETURN ENDIF * * Liaison ........... * * ELSE IF (MONMOT(1: ).EQ.' ') THEN * ....... * ....... * ELSE RETURN ENDIF 10 CONTINUE * * * * ----- liaisons conditionnelles ? * * DO 11 I = 1,NLIAA ksi = 0 & 'TABLE',I0,X0,' ',L1,ITLIAI) DO 111 j = 1,NLIAA jtliai = icorres ( j ) monmot = ' ' & monmot,I1,X0,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN * ------- si on trouve un logique en face d'une table * de liaison , c'est bon IF (MONMOT.EQ.'LOGIQUE ') THEN ksi = ksi + 1 ipala(i,2) = 1 IF (L1 ) tHEN ipala (i,3+ksi) = j ELSE IF (.NOT. L1) THEN ipala (i,3+ksi) = -1 * j ENDIF ENDIF 111 CONTINUE 11 CONTINUE * * * * * end do IF (IIMPI.EQ.333) THEN DO 1000 IN = 1,NLIAA DO 1002 II = 1,NIPALA WRITE(IOIMP,*)'DYNE19 : IPALA(',IN,',',II,') =',IPALA(IN,II) 1002 CONTINUE DO 1004 IX = 1,NXPALA WRITE(IOIMP,*)'DYNE19 : XPALA(',IN,',',IX,') =',XPALA(IN,IX) 1004 CONTINUE DO 1006 IP = 1,NPLAA WRITE(IOIMP,*)'DYNE19 : IPLIA(',IN,',',IP,') =',IPLIA(IN,IP) 1006 CONTINUE 1000 CONTINUE DO 1008 IP = 1,NPLA WRITE(IOIMP,*)'DYNE19 : JPLIA(',IP,') =',JPLIA(IP) 1008 CONTINUE ENDIF * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales