C CHAME4 SOURCE FANDEUR 10/08/31 21:15:52 6734 SUBROUTINE CHAME4(IPCHAM,IPMINT,MELEME) *____________________________________________________________________* * * * Transformation d'un MCHAML en T TINF TSUP en un MCHAML * * uniquement en T mais dont la répartition est parabolique dans * * l'épaisseur . Ce sous-programme n'est utilisé que pour les * * éléments coques avec intégration dans l'épaisseur * * * * Entr{es: * * ________ * * * * IPCHAM Pointeur sur le MCHAML * * * * Sorties: * * ________ * * * * IPCHAM Pointeur sur le MCHAML r{sultat * * * *____________________________________________________________________* * IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) * -INC CCOPTIO * -INC SMCHAML -INC SMELEME -INC SMINTE * CHARACTER*8 NOMC CHARACTER*16 TYPC * *----- mise en ordre des composantes : TINF et TSUP en dernier ----- * * write(6,*) '2 ipcham,ipmint,meleme',ipcham,ipmint,meleme MCHAML = IPCHAM * segdes mchaml segact mchaml*mod NCOMP = NOMCHE(/2) ITINF=0 ITSUP=0 IT=0 DO 10 I1=1,NCOMP IF(NOMCHE(I1).EQ.'TINF ') ITINF = I1 IF(NOMCHE(I1).EQ.'TSUP ') ITSUP = I1 IF(NOMCHE(I1).EQ.'T ') IT = I1 10 CONTINUE IF(ITINF*ITSUP*IT.EQ.0) THEN moterr(1:8)='CHAME4-2' call erreur(359) return endif NLIMIT = NCOMP - 2 * *------------------ On s'occupe de la composante TINF -------------- * IF(ITINF.LE.NLIMIT) THEN IF(NOMCHE(NLIMIT + 1).NE.'TSUP ') THEN INTER = IELVAL(ITINF) NOMC = NOMCHE(ITINF) TYPC = TYPCHE(ITINF) IELVAL(ITINF) = IELVAL(NLIMIT + 1) NOMCHE(ITINF) = NOMCHE(NLIMIT + 1) TYPCHE(ITINF) = TYPCHE(NLIMIT + 1) ITINF = NLIMIT + 1 IELVAL(ITINF) = INTER NOMCHE(ITINF) = NOMC TYPCHE(ITINF) = TYPC ELSEIF (NOMCHE(NLIMIT + 2).NE.'TSUP ') THEN INTER = IELVAL(ITINF) NOMC = NOMCHE(ITINF) TYPC = TYPCHE(ITINF) IELVAL(ITINF) = IELVAL(NLIMIT + 2) NOMCHE(ITINF) = NOMCHE(NLIMIT + 2) TYPCHE(ITINF) = TYPCHE(NLIMIT + 2) ITINF = NLIMIT + 2 IELVAL(ITINF) = INTER NOMCHE(ITINF) = NOMC TYPCHE(ITINF) = TYPC ENDIF ENDIF * *------------------ On s'occupe de la composante TSUP -------------- * IF(ITSUP.LE.NLIMIT) THEN IF(NOMCHE(NLIMIT + 1).NE.'TINF ') THEN INTER = IELVAL(ITSUP) NOMC = NOMCHE(ITSUP) TYPC = TYPCHE(ITSUP) IELVAL(ITSUP) = IELVAL(NLIMIT + 1) NOMCHE(ITSUP) = NOMCHE(NLIMIT + 1) TYPCHE(ITSUP) = TYPCHE(NLIMIT + 1) ITSUP = NLIMIT + 1 IELVAL(ITSUP) = INTER NOMCHE(ITSUP) = NOMC TYPCHE(ITSUP) = TYPC ELSEIF (NOMCHE(NLIMIT + 2).NE.'TSUP ') THEN INTER = IELVAL(ITSUP) NOMC = NOMCHE(ITSUP) TYPC = TYPCHE(ITSUP) IELVAL(ITSUP) = IELVAL(NLIMIT + 2) NOMCHE(ITSUP) = NOMCHE(NLIMIT + 2) TYPCHE(ITSUP) = TYPCHE(NLIMIT + 2) ITSUP = NLIMIT + 2 IELVAL(ITSUP) = INTER NOMCHE(ITSUP) = NOMC TYPCHE(ITSUP) = TYPC ENDIF ENDIF DO 11 I1=1,NCOMP IF(NOMCHE(I1).EQ.'TINF ') ITINF = I1 IF(NOMCHE(I1).EQ.'TSUP ') ITSUP = I1 IF(NOMCHE(I1).EQ.'T ') IT = I1 11 CONTINUE IF( ITINF+ITSUP.NE.NCOMP*2-1) then moterr(1:8)='CHAME4-1' call erreur (349) return endif * SEGACT MELEME NBELEM = NUM(/2) SEGDES MELEME MINTE = IPMINT C* SEGACT MINTE <- Actif en (E/S) NBGAUS = POIGAU(/1) N1EL = NBELEM N1PTEL = NBGAUS N2EL = 0 N2PTEL = 0 SEGINI MELVA3 * *-------------- Calcul de T a partir de T TINF et TSUP ------------- * * write(6,*) ' it , itinf, itsup',it , itinf, itsup MELVAL = IELVAL(IT) MELVA1 = IELVAL(ITINF) MELVA2 = IELVAL(ITSUP) * write(6,*) '1 melval,melva1,melva2',melval,melva1,melva2 SEGACT MELVAL SEGACT MELVA1 SEGACT MELVA2 NPT = VELCHE(/1) NEL = VELCHE(/2) N1PT = MELVA1.VELCHE(/1) N1EL = MELVA1.VELCHE(/2) N2PT = MELVA2.VELCHE(/1) N2EL = MELVA2.VELCHE(/2) C write(6,*) 'NPT ',NPT C write(6,*) 'N1PT ',N1PT C write(6,*) 'N2PT ',N2PT C write(6,*) 'NEL ',NEL C write(6,*) 'N1EL ',N1EL C write(6,*) 'N2EL ',N2EL * *------------------------ boucle sur les elements ----------------- *-------------------- boucle sur les points de gauss -------------- * DO 20 I2=1,NBELEM C write(6,*) ' ' C write(6,*) '------------------------------' C write(6,*) 'Element numero :',I2 DO 30 I3=1,NBGAUS C write(6,*) 'Point numero :',I3 IF(NPT.EQ.1.AND.NEL.EQ.1) THEN T = VELCHE(1,1) ELSEIF(NPT.EQ.1) THEN T = VELCHE(1,I2) ELSE T = VELCHE(I3,I2) ENDIF IF(N1PT.EQ.1.AND.N1EL.EQ.1) THEN TINF = MELVA1.VELCHE(1,1) ELSEIF(N1PT.EQ.1) THEN TINF = MELVA1.VELCHE(1,I2) ELSE TINF = MELVA1.VELCHE(I3,I2) ENDIF IF(N2PT.EQ.1.AND.N2EL.EQ.1) THEN TSUP = MELVA2.VELCHE(1,1) ELSEIF(N2PT.EQ.1) THEN TSUP = MELVA2.VELCHE(1,I2) ELSE TSUP = MELVA2.VELCHE(I3,I2) ENDIF ZZ = DZEGAU(I3) C write(6,*) 'ZZ ',ZZ C write(6,*) 'T : ',T C write(6,*) 'TINF : ',TINF C write(6,*) 'TSUP : ',TSUP TT = (0.5D0 * (TINF + TSUP - (2.D0 * T)) * (ZZ*ZZ)) 1 + (0.5D0*(TSUP - TINF) * ZZ) + T C write(6,*) 'Temperature calculee : ',TT MELVA3.VELCHE(I3,I2) = TT 30 CONTINUE 20 CONTINUE * *--------- desactivation et suppression des segments --------------- * N2 = NLIMIT SEGADJ MCHAML * write(6,*) ' melval,melva1,melva2',melval,melva1,melva2 SEGSUP MELVAL IELVAL(IT) = MELVA3 SEGSUP MELVA1,MELVA2 C* SEGDES MINTE <- Actif en (E/S) SEGDES MELVA3 RETURN END