dyne22
C DYNE22 SOURCE PV 20/03/30 21:18:13 10567 & NIPALB,NIP) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *--------------------------------------------------------------------* * * * Operateur DYNE : * * Determination des parametres de liaison pour la base B. * * * *--------------------------------------------------------------------* * * * Parametres: * * * * e ITLB Table rassemblant la description des liaisons * * s NLIAB Nombre total de liaisons sur base B. * * s NXPALB Maxi du nombre de parametres definissant une liaison. * * s NPLBB Maxi du nombre de points intervenant dans une liaison. * * s NPLB Nombre total de points. * * s IDIMB Dimension de travail des liaisons. * * s KCPR Segment de points. * * s NIPALB Maxi du nombre de parametres definissant une liaison. * * s NIP Nb de pts dans l'evolution de la loi de comportement * * * *--------------------------------------------------------------------* -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC SMELEME -INC SMEVOLL -INC SMLREEL * SEGMENT,NCPR(nbpts) * LOGICAL L0,L1 CHARACTER*8 TYPRET,MONSYM,MONESC,CMOT1,CHARRE CHARACTER*40 CMOT * SEGINI,NCPR KCPR = NCPR * NXPALB = 0 NIPALB = 20 cbp, indices NIPALB=4,20 reserves pour liaisons conditionelles c c.a.d. 15 liaisons conditionelles (ca marche pas pour 'PROFIL..;') NPLBB = 0 NPLB = 0 IDIMB = 0 NLIAB = 0 C NIP = 1 dans le cas ou la liaison n'est pas ITYP = 16/17 ou ITYP = 50/51 NIP = 1 * *--------------------------------------------------------------------* * Boucle sur le nombre de liaisons *--------------------------------------------------------------------* IL = 0 10 CONTINUE IL = IL+ 1 TYPRET = ' ' & TYPRET,I0,X0,CHARRE,L1,ITLIAI) IF (IERR.NE.0) RETURN *-----Cas ou la IL ieme liaison existe ------------------------------ IF (ITLIAI.NE.0) THEN NLIAB = NLIAB + 1 & 'MOT',I1,X0,CMOT,L1,IP1) IF (IERR.NE.0) RETURN * * ------ choc elementaire POINT_PLAN_FLUIDE * IF (CMOT(1:17).EQ.'POINT_PLAN_FLUIDE') THEN & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF KPLBB = 1 KDIMB = IDIM KIPALB = 3 KXPALB = 9 + IDIM NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * ------ choc elementaire POINT_PLAN_FROTTEMENT * ELSE IF (CMOT(1:21).EQ.'POINT_PLAN_FROTTEMENT') THEN TYPRET = ' ' & IP0,TYPRET,I1,X1,' ',L1,IPEVO) IF (IERR.NE.0) RETURN * IF (TYPRET.EQ.'EVOLUTIO')THEN MEVOLL = IPEVO SEGACT MEVOLL KEVOLL = IEVOLL(1) SEGACT KEVOLL MLREE1 = IPROGX MLREE2 = IPROGY SEGACT MLREE1 SEGACT MLREE2 SEGDES MLREE1 SEGDES MLREE2 SEGDES KEVOLL SEGDES MEVOLL ELSE KNIP = 0 ENDIF * & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF TYPRET = ' ' KPLBB = 1 KDIMB = IDIM KIPALB = 3 cbp,2020 : ajout Ve(idim) et regul(n et t) KXPALB = 7 + 7 * IDIM KXPALB = 9 + 8 * IDIM NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) NIP = MAX(NIP,KNIP) * * ------ choc elementaire POINT_PLAN * ELSE IF (CMOT(1:10).EQ.'POINT_PLAN') THEN TYPRET = ' ' & IP0,TYPRET,I1,X1,' ',L1,IPEVO) IF (IERR.NE.0) RETURN * IF (TYPRET.EQ.'EVOLUTIO')THEN MEVOLL = IPEVO SEGACT MEVOLL KEVOLL = IEVOLL(1) SEGACT KEVOLL MLREE1 = IPROGX MLREE2 = IPROGY SEGACT MLREE1 SEGACT MLREE2 SEGDES MLREE1 SEGDES MLREE2 SEGDES KEVOLL SEGDES MEVOLL ELSE KNIP = 0 ENDIF * & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF TYPRET = ' ' KPLBB = 1 KDIMB = IDIM KIPALB = 4 KXPALB = 3 + IDIM ** ianis TYPRET = ' ' & L0,IP0,TYPRET,I1,XSEUIL,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN IF (TYPRET.EQ.'FLOTTANT'.OR.TYPRET.EQ.'ENTIER ')THEN KXPALB = 3 + IDIM + 2 ENDIF * NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) NIP = MAX(NIP,KNIP) * * ----- choc elementaire POINT_POINT_FROTTEMENT * ELSE IF (CMOT(1:22).EQ.'POINT_POINT_FROTTEMENT') THEN & 'POINT',I1,X0,' ',L1,INOA) IF (IERR.NE.0) RETURN IF (NCPR(INOA).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOA) = NPLB ENDIF & 'POINT',I1,X0,' ',L1,INOB) IF (IERR.NE.0) RETURN IF (NCPR(INOB).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOB) = NPLB ENDIF TYPRET = ' ' & IP0,TYPRET,I1,X1,' ',L1,IPEVO) IF (IERR.NE.0) RETURN * IF (TYPRET.EQ.'EVOLUTIO')THEN MEVOLL = IPEVO SEGACT MEVOLL KEVOLL = IEVOLL(1) SEGACT KEVOLL MLREE1 = IPROGX MLREE2 = IPROGY SEGACT MLREE1 SEGACT MLREE2 SEGDES MLREE1 SEGDES MLREE2 SEGDES KEVOLL SEGDES MEVOLL ELSE KNIP = 0 ENDIF KPLBB = 2 KDIMB = IDIM KIPALB = 3 KXPALB = 7 + 7 * IDIM NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) NIP = MAX(NIP,KNIP) * * ----- choc elementaire POINT_POINT_DEPLACEMENT_PLASTIQUE * ELSE IF & (CMOT(1:33).EQ.'POINT_POINT_DEPLACEMENT_PLASTIQUE') THEN & IP0,'EVOLUTIO',I1,X1,' ',L1,IPEVO) IF (IERR.NE.0) RETURN * MEVOLL = IPEVO SEGACT MEVOLL KEVOLL = IEVOLL(1) SEGACT KEVOLL MLREE1 = IPROGX MLREE2 = IPROGY SEGACT MLREE1 SEGACT MLREE2 SEGDES MLREE1 SEGDES MLREE2 SEGDES KEVOLL SEGDES MEVOLL * & 'POINT',I1,X0,' ',L1,INOA) IF (IERR.NE.0) RETURN IF (NCPR(INOA).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOA) = NPLB ENDIF & 'POINT',I1,X0,' ',L1,INOB) IF (IERR.NE.0) RETURN IF (NCPR(INOB).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOB) = NPLB ENDIF TYPRET = ' ' & L0,IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN KPLBB = 2 KDIMB = IDIM C KIPALB = 5 IF (TYPRET.EQ.'FLOTTANT') THEN KXPALB = 5 + IDIM ELSE IF (TYPRET.EQ.' ') THEN KXPALB = 4 + IDIM ELSE RETURN ENDIF NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) NIP = MAX(NIP,KNIP) * * ----- choc elementaire POINT_POINT_ROTATION_PLASTIQUE * ELSE IF & (CMOT(1:30).EQ.'POINT_POINT_ROTATION_PLASTIQUE') THEN & IP0,'EVOLUTIO',I1,X1,' ',L1,IPEVO) IF (IERR.NE.0) RETURN * MEVOLL = IPEVO SEGACT MEVOLL KEVOLL = IEVOLL(1) SEGACT KEVOLL MLREE1 = IPROGX MLREE2 = IPROGY SEGACT MLREE1 SEGACT MLREE2 SEGDES MLREE1 SEGDES MLREE2 SEGDES KEVOLL SEGDES MEVOLL * & 'POINT',I1,X0,' ',L1,INOA) IF (IERR.NE.0) RETURN IF (NCPR(INOA).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOA) = NPLB ENDIF & 'POINT',I1,X0,' ',L1,INOB) IF (IERR.NE.0) RETURN IF (NCPR(INOB).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOB) = NPLB ENDIF TYPRET = ' ' & L0,IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN KPLBB = 2 * * NW Dans le cas de la rotule, on passe en dimension 6 * car on aura Ux,Uy,Uz,Rx,Ry,Rz * KDIMB = 3+IDIM * * KIPALB = 5 : nombre maxi de parametres pour la liaison * KIPALB = 5 IF (TYPRET.EQ.'FLOTTANT') THEN KXPALB = 5 + IDIM ELSE IF (TYPRET.EQ.' ') THEN KXPALB = 4 + IDIM ELSE RETURN ENDIF NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) NIP = MAX(NIP,KNIP) * * ----- choc elementaire POINT_POINT * ELSE IF (CMOT(1:11).EQ.'POINT_POINT') THEN & 'POINT',I1,X0,' ',L1,INOA) IF (IERR.NE.0) RETURN IF (NCPR(INOA).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOA) = NPLB ENDIF & 'POINT',I1,X0,' ',L1,INOB) IF (IERR.NE.0) RETURN IF (NCPR(INOB).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOB) = NPLB ENDIF TYPRET = ' ' & IP0,TYPRET,I1,X1,' ',L1,IPEVO) IF (IERR.NE.0) RETURN * IF (TYPRET.EQ.'EVOLUTIO')THEN MEVOLL = IPEVO SEGACT MEVOLL KEVOLL = IEVOLL(1) SEGACT KEVOLL MLREE1 = IPROGX MLREE2 = IPROGY SEGACT MLREE1 SEGACT MLREE2 SEGDES MLREE1 SEGDES MLREE2 SEGDES KEVOLL SEGDES MEVOLL ELSE KNIP = 0 ENDIF KPLBB = 2 KDIMB = IDIM KIPALB = 4 KXPALB = 3 + IDIM NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) NIP = MAX(NIP,KNIP) * * ianis * * ----- choc elementaire POINT_CERCLE_MOBILE * ELSE IF (CMOT(1:19).EQ.'POINT_CERCLE_MOBILE') THEN & 'POINT',I1,X0,' ',L1,INOA) IF (IERR.NE.0) RETURN IF (NCPR(INOA).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOA) = NPLB ENDIF & 'POINT',I1,X0,' ',L1,INOB) IF (IERR.NE.0) RETURN IF (NCPR(INOB).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOB) = NPLB ENDIF TYPRET = ' ' & IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN KPLBB = 2 * on neglige les rotations KDIMB = IDIM KIPALB = 4 IF (TYPRET.EQ.'FLOTTANT'.OR.TYPRET.EQ.'ENTIER ') THEN KXPALB = 7 + 9 * IDIM ELSE IF (TYPRET.EQ.' ') THEN KXPALB = 6 + 9 * IDIM ELSE RETURN ENDIF NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * * ----- choc elementaire POINT_CERCLE_FROTTEMENT * ELSE IF (CMOT(1:23).EQ.'POINT_CERCLE_FROTTEMENT') THEN & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF KPLBB = 1 KDIMB = IDIM KIPALB = 4 c TYPRET = ' ' c CALL ACCTAB(ITLIAI,'MOT',I0,X0,'AMORTISSEMENT',L0, c & IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) c IF (IERR.NE.0) RETURN c IF (TYPRET.EQ.'FLOTTANT') THEN c KXPALB = 7 + 9 * IDIM c ELSE IF (TYPRET.EQ.' ') THEN c KXPALB = 6 + 9 * IDIM c ELSE c CALL ERREUR(522) c RETURN c ENDIF cbp,2020 : tjrs amortissement + ajout Ve et regul(n et t) KXPALB = 10 + 9 * IDIM NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * ----- choc elementaire POINT_CERCLE * ELSE IF (CMOT(1:12).EQ.'POINT_CERCLE') THEN & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF TYPRET = ' ' & L0,IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN KPLBB = 1 KDIMB = IDIM KIPALB = 3 IF (TYPRET.EQ.'FLOTTANT') THEN KXPALB = 3 + 2 * IDIM ELSE IF (TYPRET.EQ.' ') THEN KXPALB = 2 + 2 * IDIM ELSE RETURN ENDIF NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * ----- choc elementaire CERCLE_PLAN_FROTTEMENT * ELSE IF (CMOT(1:22).EQ.'CERCLE_PLAN_FROTTEMENT') THEN & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF TYPRET = ' ' & IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN KPLBB = 1 KDIMB = 2 * IDIM KIPALB = 3 IF (TYPRET.EQ.'FLOTTANT') THEN KXPALB = 8 + 7 * IDIM ELSE IF (TYPRET.EQ.' ') THEN KXPALB = 7 + 7 * IDIM ELSE RETURN ENDIF NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * ----- choc elementaire CERCLE_CERCLE_FROTTEMENT * ELSE IF (CMOT(1:24).EQ.'CERCLE_CERCLE_FROTTEMENT') THEN & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF TYPRET = ' ' & IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN KPLBB = 1 KDIMB = 2 * IDIM KIPALB = 4 IF (TYPRET.EQ.'FLOTTANT') THEN KXPALB = 8 + 9*IDIM ELSE IF (TYPRET.EQ.' ') THEN KXPALB = 7 + 9*IDIM ELSE RETURN ENDIF NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * ----- choc elementaire PROFIL_PROFIL_INTERIEUR * ----- choc elementaire PROFIL_PROFIL_EXTERIEUR * ELSE IF (CMOT(1:23).EQ.'PROFIL_PROFIL_INTERIEUR' .OR. & CMOT(1:23).EQ.'PROFIL_PROFIL_EXTERIEUR') THEN & 'MAILLAGE',I1,X0,' ',L1,IMA1) IF (IERR.NE.0) RETURN & 'MAILLAGE',I1,X0,' ',L1,IMA2) IF (IERR.NE.0) RETURN & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF KPLBB = 1 KDIMB = 3 MELEME = IMA1 SEGACT MELEME NOMBN1 = NUM(/2) SEGDES MELEME MELEME = IMA2 SEGACT MELEME NOMBN2 = NUM(/2) SEGDES MELEME KXPALB = 3 + 5*IDIM + 5*NOMBN1 + 3*NOMBN2 KIPALB = 5 + NOMBN1 + 2*NOMBN1*NOMBN2 NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * ----- choc elementaire LIGNE_LIGNE_FROTTEMENT * ELSE IF & (CMOT(1:22).EQ.'LIGNE_LIGNE_FROTTEMENT') THEN & 'MAILLAGE',I1,X1,' ',L1,IMAI) IF (IERR.NE.0) RETURN MONESC= ' ' & MONESC,I1,X1,CHARRE,L1,IESC) TYPRET = ' ' & L0,IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN * MELEME = IMAI SEGACT MELEME NELEMA = NUM(/2) IF (NUM(1,1).EQ.NUM(2,NELEMA)) THEN NNOEMA = NELEMA ELSE NNOEMA = NELEMA+1 ENDIF INOE = NUM(1,1) IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF DO 20 IE = 1,(NNOEMA-1) INOE = NUM(2,IE) IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF 20 CONTINUE SEGDES MELEME * Maillage_esclave IF (MONESC.EQ.'POINT') THEN * La ligne-esclave est un point IF (NCPR(IESC).EQ.0) THEN NPLB = NPLB + 1 NCPR(IESC) = NPLB ENDIF NNOEES=1 ELSE IF (MONESC.EQ.'MAILLAGE') THEN * La ligne-esclave est un MAILLAGE MELEME = IESC SEGACT MELEME NELEES = NUM(/2) IF (NUM(1,1).EQ.NUM(2,NELEES)) THEN NNOEES = NELEES ELSE NNOEES = NELEES+1 ENDIF INOE = NUM(1,1) IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF DO 30 IE = 1,(NNOEES-1) INOE = NUM(2,IE) IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF 30 CONTINUE SEGDES MELEME ENDIF ENDIF KPLBB = NNOEMA + NNOEES IF (IDIM.EQ.3) THEN KDIMB = 6 ELSE KDIMB = 3 ENDIF * Pour le nombre maxi de parametres entiers on prend * en compte les 16 espaces dus aux liaisons conditionnelles * + nos 10 autres propres parametres * + la place pour les noeuds voisins * + la place pour les indicateurs de choc KIPALB = 16 + 10 +3*(NNOEMA+NNOEES) * IF (TYPRET.EQ.'CHPOINT') THEN KXPALB = 7 + (2*(NNOEMA+NNOEES)+4)*IDIM+2*(NNOEMA+ &NNOEES) ELSE IF (TYPRET.EQ.' ') THEN KXPALB = 6 + (2*(NNOEMA+NNOEES)+4)*IDIM+(NNOEMA+ &NNOEES) ELSE RETURN ENDIF * NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * ----- choc elementaire LIGNE_CERCLE_FROTTEMENT ELSE IF & (CMOT(1:23).EQ.'LIGNE_CERCLE_FROTTEMENT') THEN & 'MAILLAGE',I1,X1,' ',L1,IMAI) IF (IERR.NE.0) RETURN MONESC= ' ' & MONESC,I1,X1,CHARRE,L1,IESC) TYPRET = ' ' & L0,IP0,TYPRET,I1,XAMO,CHARRE,L1,IP1) IF (IERR.NE.0) RETURN * MELEME = IMAI SEGACT MELEME NELEMA = NUM(/2) IF (NUM(1,1).EQ.NUM(2,NELEMA)) THEN NNOEMA = NELEMA ELSE NNOEMA = NELEMA+1 ENDIF INOE = NUM(1,1) IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF DO 40 IE = 1,(NNOEMA-1) INOE = NUM(2,IE) IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF 40 CONTINUE SEGDES MELEME * Maillage_esclave IF (MONESC.EQ.'POINT') THEN * La ligne-esclave est un point IF (NCPR(IESC).EQ.0) THEN NPLB = NPLB + 1 NCPR(IESC) = NPLB ENDIF NNOEES=1 ELSE IF (MONESC.EQ.'MAILLAGE') THEN * La ligne-esclave est un MAILLAGE MELEME = IESC SEGACT MELEME NELEES = NUM(/2) IF (NUM(1,1).EQ.NUM(2,NELEES)) THEN NNOEES = NELEES ELSE NNOEES = NELEES+1 ENDIF INOE = NUM(1,1) IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF DO 50 IE = 1,(NNOEES-1) INOE = NUM(2,IE) IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF 50 CONTINUE SEGDES MELEME ENDIF ENDIF KPLBB = NNOEMA + NNOEES IF (IDIM.EQ.3) THEN KDIMB = 6 ELSE KDIMB = 3 ENDIF * Pour le nombre maxi de parametres entiers on prend * en compte les 16 espaces dus aux liaisons conditionnelles * + nos 10 autres propres parametres * + la place pour les noeuds voisins * + la place pour les indicateurs de choc KIPALB = 16 + 10 +3*(NNOEMA+NNOEES) * IF (TYPRET.EQ.'CHPOINT') THEN KXPALB = 7 + (2*(NNOEMA+NNOEES)+4)*IDIM+2*(NNOEMA+ &NNOEES) ELSE IF (TYPRET.EQ.' ') THEN KXPALB = 6 + (2*(NNOEMA+NNOEES)+4)*IDIM+(NNOEMA+ &NNOEES) ELSE RETURN ENDIF * NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * ------ liaison PALIER_FLUIDE * ELSE IF (CMOT(1:13).EQ.'PALIER_FLUIDE') THEN * cbp KPLBB = 1 KPLBB = 2 cbp KDIMB = IDIM : on est necessairement en 3D ou 2D Fourier KDIMB = 3 * C I) Gestion du(des) point(s) support(s) * & 'POINT',I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF * TYPRET=' ' & TYPRET,I1,X0,' ',L1,INOE) IF (IERR.NE.0) RETURN IF(TYPRET.EQ.'POINT') THEN cbp KPLBB = 2 IF (NCPR(INOE).EQ.0) THEN NPLB = NPLB + 1 NCPR(INOE) = NPLB ENDIF ENDIF * C II) Decompte du nombre de parametres entiers et reels * & 'MOT',I1,X0,CMOT,L1,IP1) IF (IERR.NE.0) RETURN * C II.1) Decompte du nombre de parametres propres aux differents types C de paliers (KIPLB2 pour les entiers, LXPLB2 pour les reels) : * IF (CMOT.EQ.'RODELI') THEN * C -- Cas du palier cylindrique ou à lobes, avec modele de Rhode et Li : * & L0,IP0,'TABLE',I0,X0,' ',L1,ITGEOM) IF (IERR.NE.0) RETURN & 'ENTIER',NLOB,X0,' ',L1,IP1) IF (IERR.NE.0) RETURN KIPLB2 = 2 + NLOB KXPLB2 = 1 + (6*NLOB) * C -- Cas du palier cylindrique court (ajout BP, 2015) : ELSEIF (CMOT.EQ.'PALIER_COURT') THEN KIPLB2 = 1 KXPLB2 = 1 * C -- Cas du palier cylindrique long (ajout BP, 2015) : ELSEIF (CMOT.EQ.'PALIER_LONG') THEN KIPLB2 = 1 KXPLB2 = 1 * C -- Cas des autres types de paliers (à definir si necessaire) * C ELSE IF (CMOT.EQ.'...') THEN C KIPLB2 = ... C KXPLB2 = ... ELSE WRITE(IOIMP,*) 'MODELE_PALIER non reconnu !' RETURN ENDIF * C II.2) Nombres totaux de parametres entiers et reels : * KIPALB = 6 + KIPLB2 cbp KXPALB = 7 + KXPLB2 + 4 cbp , 2015 pourquoi pas : KXPALB = 9 + KXPLB2 * C Dimensionnement des variables de sortie : * NXPALB = MAX(NXPALB,KXPALB) NIPALB = MAX(NIPALB,KIPALB) NPLBB = MAX(NPLBB,KPLBB) IDIMB = MAX(IDIMB,KDIMB) * * --> fin liaison PALIER * * ----- ERREUR : Le TYPE d'une liaison est incorrect ELSE RETURN ENDIF GOTO 10 * On Boucle sur les liaisons ENDIF *-----Fin de Cas ou la IL ieme liaison existe ------------------------- * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales