relsur
C RELSUR SOURCE CB215821 24/04/12 21:17:07 11897 C RELSUR SOURCE BP208322 17/04/18 21:15:13 9395 C*********************************************************************** C cet operateur crée une matrice élémentaire de rigidité c pour imposer les relation portées par un modele de sure C C ENTREES : C ________ C C IMODEL pointeur sur le modele élémentaire C C ENTREES/SORTIE : C ________ C c MRIGID rigidité chapeau dans laquelle on va écrire c (à la suite des sous matrices déja présentes) les rigidités c voulues. C*********************************************************************** IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C -INC PPARAM -INC CCOPTIO -INC SMRIGID C-INC SMINTE -INC SMMODEL -INC SMELEME -INC SMCHAML -INC CCHAMP -INC CCGEOME -INC SMCOORD C C C Petit tableau des "couleurs" des relations de conformite DIMENSION LCOLOR(6) DATA LCOLOR / 1, 3, 6, 10, 16, 24 / C C nombre de sous matrice de mrigid (va être ammené a changé) NRIGEL = MRIGID.IRIGEL(/2) IPT1=IMODEL.imamod SEGACT, IPT1 IDEBUT = LCOLOR(IPT1.ICOLOR(1)) - 3 c récupérations du nom des composantes obligatoire du modele de sure nomid=IMODEL.lnomid(1) SEGACT, nomid SEGACT,MCOORD*MOD C********************************************************************** C Boucle sur les composantes primales obligatoires du sure C********************************************************************** ICOMP=0 DO 2 ICOMP=1,nomid.lesobl(/2) C==================== c creation d'un maillage avec un premier noeud par lélément c correspondant à un multiplicateur de lagrange C==================== NBNN=IPT1.NUM(/1)+1 NBELEM=IPT1.NUM(/2) NBSOUS=0 NBREF=0 SEGINI, IPT4 IPT4.ITYPEL=22 DO 1 J=1, NBELEM ipt4.icolor(j)=IPT1.icolor(j) DO 11 I=1,IPT1.NUM(/1) IPT4.NUM(I+1,J)=IPT1.NUM(I,J) 11 CONTINUE 1 CONTINUE C creation n'un nouveau noeud pour supporter chaque multiplicateur de lagrange NBPT1= nbpts NBPTS=NBPT1+(IPT4.NUM(/2)) SEGADJ MCOORD DO 12 J=1, NBELEM NGLOB=(NBPT1+J-1)*(IDIM+1) C remplissage des coordonees des nouveux points DO 13 ID= 1,IDIM XCOOR(NGLOB+ID)=XCOOR((IPT4.NUM(2,J)-1)*(IDIM+1)+ID) 13 CONTINUE IPT4.NUM(1,J) = NBPT1 + J 12 CONTINUE C==================== C *** SEGMENT XMATRI C==================== NLIGRD=IPT4.NUM(/1) NLIGRP=NLIGRD NELRIG=IPT4.NUM(/2) SEGINI, XMATRI DO 3 I=1,NELRIG RE(1,2,i)=-1. RE(2,1,i)=-1. DO 4 ICAZ=3,NLIGRD RE(1,ICAZ,i)=XCOEFF(IDEBUT+ICAZ) RE(ICAZ,1,i)=RE(1,ICAZ,i) 4 CONTINUE 3 CONTINUE C write(*,*) 'COMPOSANTE OBLIGATOIRE DU SURE :' C write(*,*) (nomid.lesobl(ICOMP)) C write(*,*) 'MATRICE elementaire :' C DO 5 I=1,NLIGRD C write(*,*) (RE(i,iou,1), iou=1,NLIGRD) C 5 CONTINUE C==================== C *** SEGMENT DESCR C==================== NEXIST=0 DO 6 I=1,LNOMDD IF (NOMDD(I).EQ.nomid.lesobl(ICOMP)) NEXIST = I 6 CONTINUE IF (NEXIST.EQ.0) THEN ENDIF SEGINI, DESCR LISINC(1)='LX ' LISDUA(1)='FLX ' NOELEP(1)=1 NOELED(1)=1 DO 7 I=2,NLIGRD LISINC(I)=NOMDD(NEXIST) LISDUA(I)=NOMDU(NEXIST) NOELEP(i)=i NOELED(i)=i 7 CONTINUE C==================== C *** stockage de la rigidité construite dans MRIGID C==================== NRIGEL = NRIGEL+1 SEGADJ, MRIGID SEGACT, MRIGID*mod COERIG(NRIGEL)=1. IRIGEL(1,NRIGEL)=IPT4 IRIGEL(3,NRIGEL)=DESCR IRIGEL(4,NRIGEL)=XMATRI c SEGDES, MRIGID SEGDES, DESCR SEGDES, XMATRI SEGDES, IPT4 C********************************************************************** C FIN Boucle sur les composantes primales obligatoires du sure C********************************************************************** 2 CONTINUE c write (*,*) 'nomid.lesfac(/2)', nomid.lesfac(/2) IF (nomid.lesfac(/2).EQ.0) goto 100 c récupération du champ d'enrichissement c MCHEX1= IMODEL.IVAMOD(1) c SEGACT, MCHEX1 c MCHAM1= MCHEX1.ICHAML(1) MCHAM1= IMODEL.IVAMOD(1) SEGACT, MCHAM1 C********************************************************************** C Boucle sur les composantes primales facultatives du sure C********************************************************************** ICOMP=0 DO 101 ICOMP=1,nomid.lesfac(/2) C++++ choix du type d'enrichisement de la composante ICOMP IF (nomid.lesfac(ICOMP).EQ.'AX') MELVA1=MCHAM1.IELVAL(1) IF (nomid.lesfac(ICOMP).EQ.'AY') MELVA1=MCHAM1.IELVAL(1) IF (nomid.lesfac(ICOMP).EQ.'AZ') MELVA1=MCHAM1.IELVAL(1) IF (nomid.lesfac(ICOMP).EQ.'B1X') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'B1Y') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'B1Z') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'C1X') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'C1Y') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'C1Z') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'D1X') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'D1Y') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'D1Z') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'E1X') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'E1Y') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'E1Z') MELVA1=MCHAM1.IELVAL(2) IF (nomid.lesfac(ICOMP).EQ.'B2X') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'B2Y') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'B2Z') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'C2X') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'C2Y') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'C2Z') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'D2X') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'D2Y') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'D2Z') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'E2X') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'E2Y') MELVA1=MCHAM1.IELVAL(3) IF (nomid.lesfac(ICOMP).EQ.'E2Z') MELVA1=MCHAM1.IELVAL(3) SEGACT MELVA1 C==================== c creation d'un maillage de multiplicateurs de lagranges enrichis C==================== NBNN=IPT1.NUM(/1)+1 NBELEM=IPT1.NUM(/2) NBSOUS=0 NBREF=0 SEGINI, IPT4 IPT4.ITYPEL=22 IELENR=0 c++++ BOUCLE sur les éléments de ipt1 DO 102 JELEM=1,IPT1.NUM(/2) NEXIST=0 ipt4.icolor(jelem)=IPT1.icolor(jelem) JNUM = IPT1.NUM(1,JELEM) c+++ Recherche d'une valeur non nulle du champ d'enrichissement VENR1 = MELVA1.VELCHE(1,JELEM) C On prend les elements dont le hanging node est enrichi IF (VENR1.GT.0) THEN NEXIST=NEXIST+1 C On prend les element dont tout les autres noeuds sont enrichis ELSE DO 121 JNOEUD= 2 , IPT1.NUM(/1) VENR1 = MELVA1.VELCHE(JNOEUD,JELEM) IF (VENR1.eq.0) GOTO 121 NEXIST=NEXIST+1 121 CONTINUE ENDIF IF (nexist.eq.0) GOTO 102 IELENR= IELENR+1 C On recopie dans IPT4 les elements de ipt1 sur lequel on veux c imposer une relation de compatibilité DO 122 I=1,IPT1.NUM(/1) IPT4.NUM(I+1,IELENR)=IPT1.NUM(I,JELEM) 122 CONTINUE 102 CONTINUE NBELEM=IELENR SEGADJ IPT4 IF (ielenr.eq.0) then segsup ipt4 goto 101 endif C======================================================================= C creation n'un nouveau noeud pour supporter chaque multiplicateur de lagrange C======================================================================= NBPT1=nbpts NBPTS=NBPT1+IELENR SEGADJ,MCOORD DO 103 J=1,IPT4.NUM(/2) NGLOB=(NBPT1+J-1)*(IDIM+1) C remplissage des coordonees des nouveux points DO 131 ID= 1,IDIM XCOOR(NGLOB+ID)=XCOOR((IPT4.NUM(2,J)-1)*(IDIM+1)+ID) 131 CONTINUE IPT4.NUM(1,J) = NBPT1 + J 103 CONTINUE C==================== C *** SEGMENT XMATRI C==================== NLIGRD=IPT4.NUM(/1) NLIGRP=NLIGRD NELRIG=IPT4.NUM(/2) SEGINI, XMATRI c++++ BOUCLE sur les éléments de ipt4 DO 104 IELEM=1,NELRIG RE(1,2,IELEM)=-1. RE(2,1,IELEM)=-1. DO 141 ICAZ=3,NLIGRD RE(1,ICAZ,IELEM)=XCOEFF(IDEBUT+ICAZ) RE(ICAZ,1,IELEM)=RE(1,ICAZ,IELEM) 141 CONTINUE 104 CONTINUE C write(*,*) 'COMPOSANTE FACULTATIVE DU SURE :' C write(*,*) (nomid.lesfac(ICOMP)) C write(*,*) 'MATRICE elementaire :' C DO 6666 I=1,NLIGRD C write(*,*) (RE(i,iou,1), iou=1,NLIGRD) C 6666 CONTINUE C==================== C *** SEGMENT DESCR C==================== NEXIST=0 DO 105 ICO1=1,LNOMDD IF (NOMDD(ICO1).EQ.nomid.lesfac(ICOMP)) NEXIST = ICO1 105 CONTINUE IF (NEXIST.EQ.0) THEN ENDIF SEGINI, DESCR LISINC(1)='LX ' LISDUA(1)='FLX ' NOELEP(1)=1 NOELED(1)=1 DO 106 ICO2=2,NLIGRD LISINC(ICO2)=NOMDD(NEXIST) LISDUA(ICO2)=NOMDU(NEXIST) NOELEP(ico2)=ico2 NOELED(ico2)=ico2 106 CONTINUE C==================== C *** stockage de la rigidité construite dans MRIGID C==================== C Ajustement du segment rigidite NRIGEL=NRIGEL +1 SEGADJ, MRIGID C* ICHOLE=0 C* IMGEO1=0 C* IMGEO2=0 C* IFORIG=0 C* ISUPEQ=0 COERIG(NRIGEL)=1. IRIGEL(1,NRIGEL)=IPT4 IRIGEL(3,NRIGEL)=DESCR IRIGEL(4,NRIGEL)=XMATRI SEGDES, DESCR SEGDES, XMATRI SEGDES, IPT4 C********************************************************************** C FIN Boucle sur les composantes primales facultatives du sure C********************************************************************** 101 CONTINUE 100 CONTINUE SEGDES, nomid segdes,IPT1, MCOORD C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales