d2vlfa
C D2VLFA SOURCE BP208322 20/09/18 21:15:17 10718 c & NLIAA,PDT,T,NPAS,IND,FINERT,IVINIT,FTEST, & KTOTXA,KTOTVA,GETJAC) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * Operateur DYN* : Calcul des forces de choc base A * *--------------------------------------------------------------------* * * * Parametres: * * * * e Q1(.,.) Vecteur des deplacements generalises. * * e Q2(.,.) Vecteur des vitesses generalisees. * * es FTOTA Forces exterieures totalisees sur la base A. * * es KTOTXA Matrice tangente,X des efforts non-lineaires (base A) * * es KTOTVA Matrice tangente,V des efforts non-lineaires (base A) * * e NA1 Nombre total d'inconnues en base A. * * e IPALA Renseigne sur le type de la liaison. * * e IPLIA Tableau contenant les numeros "DYNE" de la liaison. * * e XPALA Tableau contenant les parametres de la liaison. * * es XVALA Tableau contenant les variables internes des liaisons * * e NLIAA Nombre de liaisons sur la base A. * * e PDT pas de temps * * e T temps * * e NPAS Numero du pas de temps * * e IND Indice du demi-pas de temps * * = 2 si 1er demi-pas = 1 si 2eme demi-pas * * es FINERT Forces d'inertie * * e IVINIT =1 si vitesses initiales, =0 sinon * * e GETJAC .TRUE. si on doit calculer la jacobienne KTOTXA,KTOTVA * * * * remarque: * * ========= * * Si jeu negatif (cas particulier de la base A ou il n'y a pas de * * normale), on renverse les variables avec XNORM. * * * *--------------------------------------------------------------------* * INTEGER IPALA(NLIAA,*),IPLIA(NLIAA,*) REAL*8 XPALA(NLIAA,*),Q1(NA1,*),Q2(NA1,*),FTOTA(NA1,*) REAL*8 XVALA(NLIAA,4,*),FINERT(NA1,*) PARAMETER (XZERO = 0.D0, XONE=1.D0) REAL*8 FTest(nA1,4) cbp, supprime le 2020-08-07 REAL*8 FTOTA0(NA1,4) REAL*8 KTOTXA(NA1,*),KTOTVA(NA1,*) LOGICAL GETJAC * XFIN = 0.D0 PDTS2 = PDT *--------------------------------------------------------------------* * BOUCLE SUR LES LIAISONS *--------------------------------------------------------------------* DO 10 I = 1,NLIAA ITYP = IPALA(I,1) icond= IPALA(I,2) iannul= 0 IF (ICOND .NE. 1 ) GOTO 199 * CAS DES LIAISONS CONDITIONNELLES : *>>>>>>> BOUCLE SUR LES LIAISONS "TESTS" <<<<<<<<<<<<<<<<<<<<<<<<<< DO 101 j = 4,20 jliai = ipala(i,j) jpliai = abs ( jliai) if (jliai.EQ.0) goto 101 jtyp = ipala(jpliai,1) do 102 jk = 1,4 do 103 ik = 1,nA1 ftest(ik,jk) = 0d0 cbp, supprime le 2020-08-07 ftota0 (ik,jk) = ftota(ik,jk) 103 continue 102 continue * >>> CALCUL DES FORCES DES LIAISONS TEST <<< * * ------ choc elementaire POINT_PLAN sans amortissement * IF (JTYP.EQ.1) THEN XRAID = XPALA(jpliai,1) XJEU = XPALA(jpliai,2) ETA = 0.D0 XNORM = XONE IF (XJEU.LT.0D0) THEN XNORM = -XONE XJEU = -XJEU ENDIF INA1 = IPLIA(jpliai,1) XDEP = XNORM*Q1(INA1,IND) XVALA(jpliai,IND,1) = XNORM*XFL XVALA(jpliai,IND,4) = XNORM*XDEP FTest(INA1,IND) =Ftest(INA1,IND) + XNORM*XFL * * ------ choc elementaire POINT_PLAN avec amortissement * ELSE IF (JTYP.EQ.2) THEN XRAID = XPALA(jpliai,1) XJEU = XPALA(jpliai,2) XAMO = XPALA(jpliai,3) ETA = 0.D0 XNORM = XONE IPERM = 0 IF (XJEU.LT.XZERO) THEN XNORM = -XONE XJEU = -XJEU ENDIF INA1 = IPLIA(jpliai,1) XDEP = XNORM * Q1(INA1,IND) cbp,2020-09 IF (((NPAS.EQ.1).AND.(IND.EQ.3))) THEN XVIT = XNORM * Q2(INA1,IND) cbp,2020-09 ELSE cbp,2020-09 IND2 = IND + 1 cbp,2020-09 XDEPM1 = XNORM * Q1(INA1,IND2) cbp,2020-09 XVIT = (XDEP - XDEPM1) / PDTS2 cbp,2020-09 ENDIF XVALA(jpliai,IND,3) = XNORM*XVIT & XFL,DFDX,DFDV,IPERM,iannul) * bp,2020 : pertinence des 2 lignes ci-dessous (cf. dycham) ? * -> a verifier + tard ... c IF(ETA.EQ.0.)THEN c IF (XDEP.GT.0.D0 .AND. XFL.GT.0.D0) XFL = 0.D0 c IF (XDEP.LT.0.D0 .AND. XFL.LT.0.D0) XFL = 0.D0 c ENDIF XVALA(jpliai,IND,1) = XNORM*XFL XVALA(jpliai,IND,4) = XNORM*XDEP FTest(INA1,IND) =Ftest(INA1,IND) + XNORM*XFL * * ------ choc elementaire POINT_PLAN_FLUIDE * ELSE IF (JTYP.EQ.3) THEN XINER = XPALA(jpliai,1) XVISC = XPALA(jpliai,3) XPCEL = XPALA(jpliai,4) XPCRA = XPALA(jpliai,5) XJEU = XPALA(jpliai,6) INA1 = IPLIA(jpliai,1) XDEP = Q1(INA1,IND) cbp,2020-09 IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN XVIT = Q2(INA1,IND) cbp,2020-09 ELSE cbp,2020-09 IND2 = IND + 1 cbp,2020-09 XDEPM1 = Q1(INA1,IND2) cbp,2020-09 XVIT = (XDEP - XDEPM1) / PDTS2 cbp,2020-09 ENDIF IF (XJEU.GT.0D0) THEN XDH= XJEU - XDEP XNORM = XONE ELSE XDH= XDEP - XJEU XNORM = -XONE ENDIF * Calcul de la masse ajoutee XXIN = -XINER / XDH FINERT(INA1,IND) = FINERT(INA1,IND) + XXIN * Calcul de la force de convection * Calcul de la force de viscosite * Calcul de la force de perte de charge XFL = (XFCO* XNORM ) + XFVI + XFPE XVALA(jpliai,IND,1) = XDEP XVALA(jpliai,IND,2) = XVIT XVALA(jpliai,IND,3) = XXIN XVALA(jpliai,IND,4) = XFCO*XNORM XVALA(jpliai,IND,5) = XFVI XVALA(jpliai,IND,6) = XFPE FTest(INA1,IND) =Ftest(iNA1,IND) + XFL * * ------ force elementaire de COUPLAGE EN VITESSE * ELSE IF (JTYP.EQ.4) THEN INA1 = IPLIA(jpliai,1) INA2 = IPLIA(jpliai,2) XDEP = Q1(INA2,IND) cbp,2020-09 IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN XVIT = Q2(INA2,IND) cbp,2020-09 ELSE cbp,2020-09 IND2 = IND + 1 cbp,2020-09 XDEPM1 = Q1(INA2,IND2) cbp,2020-09 XVIT = (XDEP - XDEPM1) / PDTS2 cbp,2020-09 ENDIF XCPLGE = XPALA(jpliai,1) XVALA(jpliai,IND,3) = XVIT XVALA(jpliai,IND,1) = XFL XVALA(jpliai,IND,4) = XDEP FTest(INA1,IND) =Ftest(INA1,IND) + XFL * * ------ force elementaire de COUPLAGE EN DEPLACEMENT * ELSE IF (JTYP.EQ.5) THEN INA1 = IPLIA(jpliai,1) INA2 = IPLIA(jpliai,2) XDEP = Q1(INA2,IND) XCPLGE = XPALA(jpliai,1) jfonct = ipala(jpliai,3) cbp - calcul eventuel d'un produit de convolution : c XDEP=\int_0^T h(\tau)*Qj(t-\tau) d\tau if(jfonct.eq.100) then IP1=IPALA(jpliai,4) c t_{n+1} ou t_{n} c if (IND.eq.1.or.IND.eq.3) then c t_{n+1} ou t_{0} pour diff centreee ? c if (IND.eq.1.or.IND.eq.2) then IP2=IPALA(jpliai,5) c c t_{n+1/2} ou t_{n-1/2} (seulement pour devogelaere) c else c IP2=IPALA(jpliai,6) c endif cbp - calcul d'un produit de convolution GRANGER_PAIDOUSSIS elseif(jfonct.eq.101) then IP1=IPALA(jpliai,4) IP2=IPALA(jpliai,5) IP3=IPALA(jpliai,6) VSD=XPALA(jpliai,2) XA0=XPALA(jpliai,3) cbp - calcul du produit par une fonction trigo cos(q) c rem : on pourrait aussi prevoir cos(coef2*q) avec coef2=XPALA(jpliai,2) elseif(jfonct.eq.1) then XFL = XCPLGE * COS(XDEP) elseif(jfonct.eq.2) then XFL = XCPLGE * SIN(XDEP) cbp - calcul du produit par une fonction temporelle cos(wt)*q elseif(jfonct.ge.11.and.jfonct.le.12) then XFREQ = XPALA(jpliai,2) XTIME = DBLE(NPAS-1)*PDT if(IND.EQ.2) XTIME=XTIME-PDTS2 if(jfonct.eq.1) XFONCT = COS(XFREQ*XTIME) if(jfonct.eq.2) XFONCT = SIN(XFREQ*XTIME) XFL = XCPLGE * XDEP * XFONCT c - simple raideur (ou raideur en puissance) else Xexpo = XPALA(jpliai,2) if(Xexpo.eq.XONE) then XFL = XCPLGE * XDEP elseif(Xexpo.eq.3.D0) then XFL = XCPLGE * (XDEP**3) IF(GETJAC) DFDX = Xexpo*XCPLGE*(XDEP**2) else XFL = XCPLGE * (XDEP**Xexpo) endif endif cbp, ici prise en compte de la possibilite de liaison conditionnelle IF(iannul.ne.0) XFL=0.D0 XVALA(jpliai,IND,1) = XFL XVALA(jpliai,IND,4) = XDEP FTest(INA1,IND) =Ftest(INA1,IND) + XFL * * ------ force elementaire de type POLYNOMIALE * ELSE IF (JTYP.EQ.6) THEN * nombre de modes "origine" NMOD = IPALA(I,2) & NPAS,jpliai,NMOD,FTest,IVINIT,iannul) * * ------ choc elementaire ... * * ELSE IF (JTYP.EQ. ) THEN * ....... * ....... * ENDIF * >>> TEST SUR j POUR VOIR SI ELLE ANNULE LA LIAISON I <<< xff = 0d0 do 104 ik = 1,na1 do 105 jk = 1,4 xff = xff + ( ftest(ik,jk) ** 2) 105 continue 104 continue xff = xff ** .5 if ( ((xff .le. 1e-20 ) .and. ( jliai .gt. 0) ) & .OR. ((xff .gt. 1e-20 ) .and. ( jliai .lt. 0) ) ) & then iannul = 1 endif 101 CONTINUE *>>>>>>> FIN DE BOUCLE SUR LES LIAISONS "TESTS" <<<<<<<<<<<<<<<<<<<< 199 CONTINUE *>>>>>>> CALCUL DES FORCES DE LIAISONS <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< * ------ choc elementaire POINT_PLAN sans amortissement * IF (ITYP.EQ.1) THEN XRAID = XPALA(I,1) XJEU = XPALA(I,2) ETA = 0.D0 XNORM = XONE IF (XJEU.LT.0D0) THEN XNORM = -XONE XJEU = -XJEU ENDIF INA1 = IPLIA(I,1) XDEP = XNORM*Q1(INA1,IND) XVALA(I,IND,1) = XNORM*XFL XVALA(I,IND,4) = XNORM*XDEP FTOTA(INA1,IND) = FTOTA(INA1,IND) + XNORM*XFL IF (GETJAC) THEN KTOTXA(INA1,INA1) = KTOTXA(INA1,INA1) + DFDX ENDIF * * ------ choc elementaire POINT_PLAN avec amortissement * ELSE IF (ITYP.EQ.2) THEN XRAID = XPALA(I,1) XJEU = XPALA(I,2) XAMO = XPALA(I,3) ETA = 0.D0 XNORM = XONE IPERM = 0 IF (XJEU.LT.XZERO) THEN XNORM = -XONE XJEU = -XJEU ENDIF INA1 = IPLIA(I,1) XDEP = XNORM * Q1(INA1,IND) cbp,2020-09 IF (((NPAS.EQ.1).AND.(IND.EQ.3))) THEN XVIT = XNORM * Q2(INA1,IND) cbp,2020-09 ELSE cbp,2020-09 IND2 = IND + 1 cbp,2020-09 XDEPM1 = XNORM * Q1(INA1,IND2) cbp,2020-09 XVIT = (XDEP - XDEPM1) / PDTS2 cbp,2020-09 ENDIF XVALA(I,IND,3) = XNORM*XVIT & XFL,DFDX,DFDV,IPERM,iannul) * bp,2020 : pertinence des 2 lignes ci-dessous (cf. dycham) ? * -> on commente... a verifier + tard * IF (XDEP.GT.0.D0 .AND. XFL.GT.0.D0) XFL = 0.D0 * IF (XDEP.LT.0.D0 .AND. XFL.LT.0.D0) XFL = 0.D0 XVALA(I,IND,1) = XNORM*XFL XVALA(I,IND,4) = XNORM*XDEP FTOTA(INA1,IND) = FTOTA(INA1,IND) + XNORM*XFL IF (GETJAC) THEN KTOTXA(INA1,INA1) = KTOTXA(INA1,INA1) + DFDX KTOTVA(INA1,INA1) = KTOTVA(INA1,INA1) + DFDV ENDIF * * ------ choc elementaire POINT_PLAN_FLUIDE * ELSE IF (ITYP.EQ.3) THEN XINER = XPALA(I,1) XVISC = XPALA(I,3) XPCEL = XPALA(I,4) XPCRA = XPALA(I,5) XJEU = XPALA(I,6) INA1 = IPLIA(I,1) XDEP = Q1(INA1,IND) * cbp,2020-09 IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN XVIT = Q2(INA1,IND) cbp,2020-09 ELSE cbp,2020-09 IND2 = IND + 1 cbp,2020-09 XDEPM1 = Q1(INA1,IND2) cbp,2020-09 XVIT = (XDEP - XDEPM1) / PDTS2 cbp,2020-09 ENDIF IF (XJEU.GT.0D0) THEN XDH= XJEU - XDEP XNORM = XONE ELSE XDH= XDEP - XJEU XNORM = -XONE ENDIF * Calcul de la masse ajoutee XXIN = -XINER / XDH FINERT(INA1,IND) = FINERT(INA1,IND) + XXIN * Calcul de la force de convection * Calcul de la force de viscosite * Calcul de la force de perte de charge XFL = (XFCO* XNORM ) + XFVI + XFPE XVALA(I,IND,1) = XDEP XVALA(I,IND,2) = XVIT XVALA(I,IND,3) = XXIN XVALA(I,IND,4) = XFCO*XNORM XVALA(I,IND,5) = XFVI XVALA(I,IND,6) = XFPE FTOTA(INA1,IND) = FTOTA(INA1,IND) + XFL * TODO : * IF (GETJAC) THEN * KTOTXA(INA1,INA1)=KTOTXA(INA1,INA1)+DFDXc*XNORM+DFDXv+DFDXp * KTOTVA(INA1,INA1)=KTOTVA(INA1,INA1)+DFDVc*XNORM+DFDVv+DFDVp * ENDIF * * * ------ force elementaire de COUPLAGE EN VITESSE * ELSE IF (ITYP.EQ.4) THEN INA1 = IPLIA(I,1) INA2 = IPLIA(I,2) XDEP = Q1(INA2,IND) cbp,2020-09 IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN XVIT = Q2(INA2,IND) cbp,2020-09 ELSE cbp,2020-09 IND2 = IND + 1 cbp,2020-09 XDEPM1 = Q1(INA2,IND2) cbp,2020-09 XVIT = (XDEP - XDEPM1) / PDTS2 cbp,2020-09 ENDIF XCPLGE = XPALA(I,1) c WRITE(*,*) 't=',(NPAS*PDT),'dx/dt=',XVIT,'F2=',XFL XVALA(I,IND,3) = XVIT XVALA(I,IND,1) = XFL XVALA(I,IND,4) = XDEP FTOTA(INA1,IND) = FTOTA(INA1,IND) + XFL IF (GETJAC) THEN IF(IANNUL.EQ.0) KTOTVA(INA1,INA2)=KTOTVA(INA1,INA2)+XCPLGE ENDIF * * ------ force elementaire de COUPLAGE EN DEPLACEMENT * ELSE IF (ITYP.EQ.5) THEN INA1 = IPLIA(I,1) INA2 = IPLIA(I,2) XDEP = Q1(INA2,IND) XCPLGE = XPALA(I,1) jfonct = ipala(I,3) c avant d'avoir defini DFDX pour toutes les liaisons, mise a 0 DFDX=0.d0 cbp calcul eventuel d'un produit de convolution : c XDEP=\int_0^T h(\tau)*Qj(t-\tau) d\tau if(jfonct.eq.100) then IP1=IPALA(I,4) c t_{n+1} ou t_{n} c if (IND.eq.1.or.IND.eq.3) then c t_{n+1} ou t_{0} pour diff centreee ? c if (IND.eq.1.or.IND.eq.2) then IP2=IPALA(I,5) c c t_{n+1/2} ou t_{n-1/2} (seulement pour devogelaere) c else c IP2=IPALA(I,6) c endif cbp - calcul d'un produit de convolution GRANGER_PAIDOUSSIS *TODO (cas particulier HBM : la force fluide-elastique est * prise en compte dans Z directement) elseif(jfonct.eq.101) then IP1=IPALA(I,4) IP2=IPALA(I,5) IP3=IPALA(I,6) VSD=XPALA(I,2) XA0=XPALA(I,3) cbp - calcul du produit par une fonction trigo cos(q) c rem : on pourrait aussi prevoir cos(coef2*q) avec coef2=XPALA(I,2) elseif(jfonct.eq.1) then XFL = XCPLGE * COS(XDEP) IF(GETJAC) DFDX= -XCPLGE * SIN(XDEP) elseif(jfonct.eq.2) then XFL = XCPLGE * SIN(XDEP) IF(GETJAC) DFDX= XCPLGE * COS(XDEP) cbp - calcul du produit par une fonction temporelle cos(wt)*q elseif(jfonct.ge.11.and.jfonct.le.12) then XFREQ = XPALA(I,2) XTIME = DBLE(NPAS-1)*PDT if(IND.EQ.2) XTIME=XTIME-PDTS2 if(jfonct.eq.1) XFONCT = COS(XFREQ*XTIME) if(jfonct.eq.2) XFONCT = SIN(XFREQ*XTIME) XFL = XCPLGE * XDEP * XFONCT c - simple raideur (ou raideur en puissance) else Xexpo = XPALA(I,2) if(Xexpo.eq.XONE) then XFL = XCPLGE * XDEP IF(GETJAC) DFDX = XCPLGE elseif(Xexpo.eq.3.D0) then XFL = XCPLGE * (XDEP**3) IF(GETJAC) DFDX = Xexpo*XCPLGE*(XDEP**2) else XFL = XCPLGE * (XDEP**Xexpo) IF(GETJAC) DFDX = Xexpo*XCPLGE*(XDEP**(Xexpo-1.d0)) endif endif cbp, ici prise en compte de la possibilite de liaison conditionnelle IF(iannul.ne.0) XFL=0.D0 XVALA(I,IND,1) = XFL XVALA(I,IND,4) = XDEP FTOTA(INA1,IND) = FTOTA(INA1,IND) + XFL IF(GETJAC) THEN KTOTXA(INA1,INA1) = KTOTXA(INA1,INA1) + DFDX ENDIF * * ------ force elementaire de type POLYNOMIALE * ELSE IF (ITYP.EQ.6) THEN * nombre de modes "origine" NMOD = IPALA(I,2) & NPAS,I,NMOD,FTOTA,IVINIT,iannul) * * ------ choc elementaire ... * * ELSE IF (ITYP.EQ. ) THEN * ....... * ....... * ENDIF * * la suite n'est plus utile car on passe iannul aux s_p de calcul des * forces de liaisons. * si la liaison etait annulee on l'annule * if ( ( icond.eq. 1 ) .and. ( iannul.eq.1)) then * on annule l'increment de ftotb * do 112 ik = 1,na1 * do 113 jk = 1,4 * ftota (ik,jk) = ftota0(ik,jk) * 113 continue * 112 continue * end if 10 CONTINUE *--------------------------------------------------------------------* * FIN DE BOUCLE SUR LES LIAISONS *--------------------------------------------------------------------* * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales