reshpx
C RESHPX SOURCE BP208322 16/11/18 21:20:58 9177 C 20.04.2005 C C C===================================================================== C MET LES VALEURS DES FONCTIONS DE FORMES DANS SHPTOT C ET LES COORDOONEES REDUITES+LES POIDS D INTEGRATION C DANS QSIGAU ETAGAU DZEGAU POIGAU ; LE TOUT EST C MIS DANS LE POINTEUR MINTE SON POINTEUR EST IPT C NNN =NOMBRE DE POINTS DE GAUSS C NBSH =NOMBRE DE FONCTIONS D'INTERPOLATION C IELE =NUMERO DE L ELEMENT DANS NOMS (VOIR CCGEOME ) C MELE =NUMERO DE L ELEMENT DANS NOMTP C NPINT=NOMBRE DE POINTS D'INTEGRATION DONS LE CAS DES C ELEMENTS COQUES INTEGRES C IPT = POINTEUR SUR MINTE C IRET=1 OU 0 SUIVANT QUE MINTE A ETE CREEE OU PAS C C CETTE ROUTINE GERE LES MESSAGES D ERREURS C PROVENANT DE L INCOMPATIBILTE ENTRE NOMS C D ELEMENTS,NOMBRE DE POINTS DE GAUSS,ET FONCTIONS DE FORME C===================================================================== C IMPLICIT REAL*8(A-H,O-Z) C -INC CCREEL -INC CCGEOME -INC SMINTE -INC PPARAM -INC CCOPTIO c c INTEGER NBG,NBSH,IELE,MELE,NPINT,IRET INTEGER NBNN,NBPGAU,NBNO,II,JJ,KK,KGAU,IENR,NBENR,INI c REAL*8 DELTAQSI,QSI0,ETA0 C PARAMETER (XZER=0.D0,UNDEMI=.5D0,UN=1.D0,DEUX=2.D0) PARAMETER (TROIS=3.D0,QUATRE=4.D0,HUIT=8.D0) C PARAMETER (NGAUMAX=8) C REAL*8 QSIREF(NGAUMAX),ETAREF(NGAUMAX),POIREF(NGAUMAX) REAL*8 DZEREF(NGAUMAX) REAL*8 QSI,ETA,DELTAQSI,QSI0,ETA0 REAL*8 DZE,DZE0 REAL*8 SHP1,SHP2,SHP3,SHP4,SHP1Q,SHP2Q,SHP3Q,SHP4Q REAL*8 SHP5,SHP6,SHP7,SHP8,SHP5Q,SHP6Q,SHP7Q,SHP8Q REAL*8 SHP1E,SHP2E,SHP3E,SHP4E REAL*8 SHP5E,SHP6E,SHP7E,SHP8E REAL*8 SHP1D,SHP2D,SHP3D,SHP4D REAL*8 SHP5D,SHP6D,SHP7D,SHP8D C C DATA X577/.577350269189626D0/ C IF (IDIM.EQ.2) THEN c if (MELE.eq.263) then C++++++++ QUADRANGLE A 4 NOEUDS NBNN = 4 NGAU = 4 QSIREF(1)=-X577 QSIREF(2)= X577 QSIREF(3)= X577 QSIREF(4)=-X577 ETAREF(1)=-X577 ETAREF(2)=-X577 ETAREF(3)= X577 ETAREF(4)= X577 POIREF(1)= UN POIREF(2)= UN POIREF(3)= UN POIREF(4)= UN endif c ENDIF c C IF (IDIM.EQ.3) THEN c if (MELE.eq.264) then C++++++++ CUBE A 8 NOEUDS NBNN = 8 NGAU = 8 QSIREF(1)=-X577 QSIREF(2)= X577 QSIREF(3)= X577 QSIREF(4)=-X577 QSIREF(5)=-X577 QSIREF(6)= X577 QSIREF(7)= X577 QSIREF(8)=-X577 ETAREF(1)=-X577 ETAREF(2)=-X577 ETAREF(3)= X577 ETAREF(4)= X577 ETAREF(5)=-X577 ETAREF(6)=-X577 ETAREF(7)= X577 ETAREF(8)= X577 DZEREF(1)=-X577 DZEREF(2)=-X577 DZEREF(3)=-X577 DZEREF(4)=-X577 DZEREF(5)= X577 DZEREF(6)= X577 DZEREF(7)= X577 DZEREF(8)= X577 POIREF(1)= UN POIREF(2)= UN POIREF(3)= UN POIREF(4)= UN POIREF(5)= UN POIREF(6)= UN POIREF(7)= UN POIREF(8)= UN c endif c ENDIF C C===================================================================== C INITIALISATIONS C NBPGAU= NBG NBNO = NBSH SEGINI,MINTE IPT = MINTE IRET=1 C NBENR = NBSH/NBNN C C===================================================================== C EN 2D SOUS DECOUPAGE EN NBSSEF Q4 A 4 POINT DE GAUSS C EN 3D SOUS DECOUPAGE EN NBSSEF CUB8 A 8 POINT DE GAUSS IF(MOD(NBG,NBNN).NE.0) $ WRITE(*,*) 'NOMBRE DE PT DE GAUSS INDIVISIBLE PAR 4(2D) ou 8(3D)' XDIM = 1./IDIM NBSSEF = NINT( (NBG / NBNN)**(XDIM) ) C NBSSEF = NINT( (NBG / NBNN)**(1/IDIM) ) C WRITE(*,*) 'TY',IDIM,XDIM,NBG,NBNN,NBSSEF IF((NBNN*(NBSSEF**IDIM)).NE.NBG) $ WRITE(*,*) 'NOMBRE DE PT DE GAUSS INCORRECT' C KGAU = 0 C write(*,*) '--->boucle sur',NBSSEF,'^2 elements *', C $ NGAU,' pt de G' C DELTAQSI = DEUX/(FLOAT(NBSSEF)) C write(*,*) 'deltaqsi',deltaqsi C C===================================================================== C EN 2D SOUS DECOUPAGE EN NBSSEF Q4 A 4 POINT DE GAUSS IF (IDIM.EQ.2) THEN C********* boucle sur les lignes ********* DO JJ=1,NBSSEF C********* boucle sur les colonnes ********* DO II=1,NBSSEF C C coordonnees au centre du sous element QSI0 = DELTAQSI*(FLOAT(II)-UNDEMI) - UN ETA0 = DELTAQSI*(FLOAT(JJ)-UNDEMI) - UN C C***** boucle sur les pts de gauss du Pseudo-sous element ***** DO KK=1,NGAU KGAU = KGAU + 1 C calcul des coordonnees + poids QSIGAU(KGAU) = (UNDEMI*DELTAQSI*QSIREF(KK)) + QSI0 ETAGAU(KGAU) = (UNDEMI*DELTAQSI*ETAREF(KK)) + ETA0 POIGAU(KGAU) = POIREF(KK) / (FLOAT(NBSSEF**IDIM)) c WRITE(*,*) KGAU,QSIGAU(KGAU),ETAGAU(KGAU),POIGAU(KGAU) ENDDO C** fin de boucle sur les points de gauss du sous element ** ENDDO C***** fin de boucle sur les colonnes ****** ENDDO C*******fin de boucle sur les lignes ****** C===================================================================== C EN 3D SOUS DECOUPAGE EN NBSSEF CUB8 A 8 POINT DE GAUSS ELSE c (IDIM.EQ.3) JZMAX= NBSSEF C********* boucle sur la 3eme direction ********* DO JZ=1,JZMAX C********* boucle sur les lignes ********* DO JJ=1,NBSSEF C********* boucle sur les colonnes ********* DO II=1,NBSSEF C C coordonnees au centre du sous element QSI0 = DELTAQSI*(FLOAT(II)-UNDEMI) - UN ETA0 = DELTAQSI*(FLOAT(JJ)-UNDEMI) - UN DZE0 = DELTAQSI*(FLOAT(JZ)-UNDEMI) - UN C C***** boucle sur les pts de gauss du Pseudo-sous element ***** DO KK=1,NGAU KGAU = KGAU + 1 C calcul des coordonnees + poids QSIGAU(KGAU) = (UNDEMI*DELTAQSI*QSIREF(KK)) + QSI0 ETAGAU(KGAU) = (UNDEMI*DELTAQSI*ETAREF(KK)) + ETA0 DZEGAU(KGAU) = (UNDEMI*DELTAQSI*DZEREF(KK)) + DZE0 POIGAU(KGAU) = POIREF(KK) / (FLOAT(NBSSEF**IDIM)) c WRITE(*,*) KGAU,QSIGAU(KGAU),ETAGAU(KGAU),POIGAU(KGAU) ENDDO C** fin de boucle sur les points de gauss du sous element ** ENDDO C***** fin de boucle sur les colonnes ****** ENDDO C*******fin de boucle sur les lignes ****** ENDDO C*******fin de boucle sur la 3eme direction ****** ENDIF C C===================================================================== C C======================================================= C ON MET LES Ni STD PARTOUT C C***** boucle sur les points de gauss ***** DO 2001 KGAU=1,NBPGAU QSI = QSIGAU(KGAU) ETA = ETAGAU(KGAU) IF (IDIM.EQ.2) THEN C fonctions standards : Ni SHP1 = (UN-QSI)*(UN-ETA)/QUATRE SHP2 = (UN+QSI)*(UN-ETA)/QUATRE SHP3 = (UN+QSI)*(UN+ETA)/QUATRE SHP4 = (UN-QSI)*(UN+ETA)/QUATRE C dérivée des fonctions standards : Ni,qsi SHP1Q = (ETA-UN)/QUATRE SHP2Q = -SHP1Q SHP3Q = (ETA+UN)/QUATRE SHP4Q = -SHP3Q C dérivée des fonctions standards : Ni,eta SHP1E = (QSI-UN)/QUATRE SHP2E = -(UN+QSI)/QUATRE SHP3E = -SHP2E SHP4E = -SHP1E C ELSE DZE = DZEGAU(KGAU) C fonctions standards : Ni SHP1 = (UN-QSI)*(UN-ETA)*(UN-DZE)/HUIT SHP2 = (UN+QSI)*(UN-ETA)*(UN-DZE)/HUIT SHP3 = (UN+QSI)*(UN+ETA)*(UN-DZE)/HUIT SHP4 = (UN-QSI)*(UN+ETA)*(UN-DZE)/HUIT SHP5 = (UN-QSI)*(UN-ETA)*(UN+DZE)/HUIT SHP6 = (UN+QSI)*(UN-ETA)*(UN+DZE)/HUIT SHP7 = (UN+QSI)*(UN+ETA)*(UN+DZE)/HUIT SHP8 = (UN-QSI)*(UN+ETA)*(UN+DZE)/HUIT C dérivée des fonctions standards : Ni,qsi SHP1Q = (ETA-UN)*(UN-DZE)/HUIT SHP2Q = -SHP1Q SHP3Q = (ETA+UN)*(UN-DZE)/HUIT SHP4Q = -SHP3Q SHP5Q = (ETA-UN)*(UN+DZE)/HUIT SHP6Q = -SHP5Q SHP7Q = (ETA+UN)*(UN+DZE)/HUIT SHP8Q = -SHP7Q C dérivée des fonctions standards : Ni,eta SHP1E = (QSI-UN)*(UN-DZE)/HUIT SHP2E = -(UN+QSI)*(UN-DZE)/HUIT SHP3E = -SHP2E SHP4E = -SHP1E SHP5E = (QSI-UN)*(UN+DZE)/HUIT SHP6E = -(UN+QSI)*(UN+DZE)/HUIT SHP7E = -SHP6E SHP8E = -SHP5E C dérivée des fonctions standards : Ni,dze SHP1D = (UN-QSI)*(ETA-UN)/HUIT SHP2D = (UN+QSI)*(ETA-UN)/HUIT SHP3D = -(UN+QSI)*(UN+ETA)/HUIT SHP4D = (QSI-UN)*(UN+ETA)/HUIT SHP5D = -SHP1D SHP6D = -SHP2D SHP7D = -SHP3D SHP8D = -SHP4D ENDIF C***** boucle sur les enrichissements ***** DO 2002 IENR=1,NBENR II = (IENR-1)*NBNN + 1 C fonctions standards : Ni SHPTOT(1,II,KGAU) = SHP1 SHPTOT(1,II+1,KGAU) = SHP2 SHPTOT(1,II+2,KGAU) = SHP3 SHPTOT(1,II+3,KGAU) = SHP4 C dérivée des fonctions standards : Ni,qsi SHPTOT(2,II,KGAU) = SHP1Q SHPTOT(2,II+1,KGAU) = SHP2Q SHPTOT(2,II+2,KGAU) = SHP3Q SHPTOT(2,II+3,KGAU) = SHP4Q C dérivée des fonctions standards : Ni,eta SHPTOT(3,II,KGAU) = SHP1E SHPTOT(3,II+1,KGAU) = SHP2E SHPTOT(3,II+2,KGAU) = SHP3E SHPTOT(3,II+3,KGAU) = SHP4E C IF (IDIM.EQ.3) THEN C fonctions standards : Ni SHPTOT(1,II+4,KGAU) = SHP5 SHPTOT(1,II+5,KGAU) = SHP6 SHPTOT(1,II+6,KGAU) = SHP7 SHPTOT(1,II+7,KGAU) = SHP8 C dérivée des fonctions standards : Ni,qsi SHPTOT(2,II+4,KGAU) = SHP5Q SHPTOT(2,II+5,KGAU) = SHP6Q SHPTOT(2,II+6,KGAU) = SHP7Q SHPTOT(2,II+7,KGAU) = SHP8Q C dérivée des fonctions standards : Ni,eta SHPTOT(3,II+4,KGAU) = SHP5E SHPTOT(3,II+5,KGAU) = SHP6E SHPTOT(3,II+6,KGAU) = SHP7E SHPTOT(3,II+7,KGAU) = SHP8E C dérivée des fonctions standards : Ni,dze SHPTOT(4,II,KGAU) = SHP1D SHPTOT(4,II+1,KGAU) = SHP2D SHPTOT(4,II+2,KGAU) = SHP3D SHPTOT(4,II+3,KGAU) = SHP4D SHPTOT(4,II+4,KGAU) = SHP5D SHPTOT(4,II+5,KGAU) = SHP6D SHPTOT(4,II+6,KGAU) = SHP7D SHPTOT(4,II+7,KGAU) = SHP8D ENDIF C C 2002 CONTINUE 2001 CONTINUE C C======================================================= C ON CALCULE LES FONCTIONS D EXTRAPOLATIONS C C CALL EXTRAP(SHPTOT,NNN,NBBB,NBNO) C C C======================================================= C ON DESACTIVE LES SEGMENTS SEGDES MINTE C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales