devlfa
C DEVLFA SOURCE BP208322 20/09/18 21:15:38 10718
& NLIAA,PDT,T,NPAS,IND,FINERT,IVINIT,FTEST)
cbp, supprime le 2020-08-07 ,FTOTA0)
IMPLICIT INTEGER(I-N)
IMPLICIT REAL*8(A-H,O-Z)
*--------------------------------------------------------------------*
* *
* Operateur DYNE : algorithme de Fu - de Vogelaere *
* ________________________________________________ *
* *
* 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. *
* 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 *
* *
* 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)
PDTS2 = 0.5D0 * 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 = XZERO
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 = XZERO
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}
if (IND.eq.1.or.IND.eq.3) then
IP2=IPALA(jpliai,5)
c t_{n+1/2} ou t_{n-1/2}
else
IP2=IPALA(jpliai,6)
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
else
XFL = XCPLGE * (XDEP**Xexpo)
endif
endif
cbp, ici prise en compte de la possibilite de liaison conditionnelle
IF(iannul.ne.0) XFL=XZERO
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 = XZERO
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
*
* ------ choc elementaire POINT_PLAN avec amortissement
*
ELSE IF (ITYP.EQ.2) THEN
XRAID = XPALA(I,1)
XJEU = XPALA(I,2)
XAMO = XPALA(I,3)
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
*
* ------ 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)
*
IF ((NPAS.EQ.1).AND.(IND.EQ.3)) THEN
XVIT = Q2(INA1,IND)
ELSE
IND2 = IND + 1
XDEPM1 = Q1(INA1,IND2)
XVIT = (XDEP - XDEPM1) / PDTS2
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
& iannul)
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
*
* ------ 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
*
* ------ 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)
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}
if (IND.eq.1.or.IND.eq.3) then
IP2=IPALA(I,5)
c t_{n+1/2} ou t_{n-1/2}
else
IP2=IPALA(I,6)
endif
cbp - calcul d'un produit de convolution GRANGER_PAIDOUSSIS
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)
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(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
else
XFL = XCPLGE * (XDEP**Xexpo)
endif
endif
cbp, ici prise en compte de la possibilite de liaison conditionnelle
IF(iannul.ne.0) XFL=XZERO
XVALA(I,IND,1) = XFL
XVALA(I,IND,4) = XDEP
FTOTA(INA1,IND) = FTOTA(INA1,IND) + XFL
*
* ------ 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