rlexf3
C RLEXF3 SOURCE OF166741 24/12/13 21:17:31 12097
C************************************************************************
C
C PROJET : CASTEM 2000
C
C NOM : RLEXF3
C
C DESCRIPTION : Appelle par PENDI3
C
C LANGAGE : FORTRAN 77 + ESOPE 2000 (avec extensions CISI)
C
C AUTEUR : A. BECCANTINI
C
C************************************************************************
C
C Inputs:
C
C MCHGRA : CHAMPOINT we want to compute the gradient of which
C
C MCHLI1 : CHAMPOINT Dirichlet BC
C
C MCHLI2 : CHAMPOINT: VN BC
C
C MCHNOR : CHAMPOINT: interfaces normales
C
C MCHELM : MCHAML which contains the coeff. to coppute the gradient
C
C Output:
C
C MCHGRA : CHAMPOINT, gradient of MCHGRA
C
IMPLICIT INTEGER(I-N)
-INC PPARAM
-INC CCOPTIO
INTEGER NBNN, NBELEM
-INC SMELEME
-INC SMCHAML
C
-INC SMCHPOI
POINTEUR MCHCEN.MCHPOI, MCHLI1.MCHPOI, MCHLI2.MCHPOI
& ,MCHGRA.MCHPOI, MCHNOR.MCHPOI
POINTEUR MPOCEN.MPOVAL, MPOLI1.MPOVAL, MPOLI2.MPOVAL,MPOGRA.MPOVAL
& ,MPONOR.MPOVAL
C
-INC SMLENTI
POINTEUR MLECEN.MLENTI, MLELI1.MLENTI,MLELI2.MLENTI,MLEGRA.MLENTI
C
INTEGER IGEOM, NCOM, ISOUS, NBSOUS, IELEM, IVOI, NGV, NLF
& ,NLV,NLL1,NLL2,ICOM,I2,NLNO
REAL*8 VAL
CHARACTER*(LOCOMP) NOM1
C
C**** We read MCHCEN, MPOCEN (its MPOVAL)
C and we create MLECEN
C
IF(IERR.NE.0)GOTO 9999
NCOM=MPOCEN.VPOCHA(/2)
C En LICHT SEGACT*MOD MPOCEN
IF(IERR.NE.0)GOTO 9999
C SEGACT IGEOM
C SEGINI MLECEN
MELEME=IGEOM
SEGDES MELEME
C
C**** For the boundary conditions
C
C MPOLI1, MLELI1,
C MPOLI2, MLELI2
C
IF(MCHLI1.GT.0)THEN
IF(IERR.NE.0)GOTO 9999
C En LICHT SEGACT*MOD MPOLI1
IF(IERR.NE.0)GOTO 9999
C SEGACT IGEOM
C SEGINI MLELI1
MELEME=IGEOM
SEGDES MELEME
ELSE
MPOLI1=0
ENDIF
C
IF(MCHLI2.GT.0)THEN
IF(IERR.NE.0)GOTO 9999
C En LICHT SEGACT*MOD MPOLI2
IF(IERR.NE.0)GOTO 9999
C SEGACT IGEOM
C SEGINI MLELI2
MELEME=IGEOM
SEGDES MELEME
ELSE
MPOLI2=0
ENDIF
C
C**** The gradient
C
C MPOGRA, MLEGRA
C
IF(IERR.NE.0)GOTO 9999
C En LICHT SEGACT*MOD MPOGRA
IF(IERR.NE.0)GOTO 9999
C En KRIPAD
C SEGACT IGEOM
C SEGINI MLEGRA
C
MELEME=IGEOM
SEGDES MELEME
C
C**** The normals
C
C MPONOR (same order as MPOGRA)
C
IF(IERR.NE.0)GOTO 9999
C En LICHT SEGACT*MOD MPONOR
C
C**** Computation
C
SEGACT MCHELM
NBSOUS=MCHELM.IMACHE(/1)
C
DO ISOUS=1,NBSOUS,1
MELEME=MCHELM.IMACHE(ISOUS)
MCHAM1=MCHELM.ICHAML(ISOUS)
SEGACT MELEME
SEGACT MCHAM1
MELVA1=MCHAM1.IELVAL(1)
MELVA2=MCHAM1.IELVAL(2)
SEGACT MELVA1
SEGACT MELVA2
NOM1=MCHAM1.NOMCHE(1)
IF(NOM1 .NE. 'alphax ')THEN
WRITE(IOIMP,*) NOM1, '!=', 'alphax '
C 21 2
C Données incompatibles
GOTO 9999
ENDIF
NOM1=MCHAM1.NOMCHE(2)
IF(NOM1 .NE. 'alphay ')THEN
WRITE(IOIMP,*) NOM1, '!=', 'alphay '
C 21 2
C Données incompatibles
GOTO 9999
ENDIF
IF(IDIM.EQ.3)THEN
MELVA3=MCHAM1.IELVAL(3)
SEGACT MELVA3
NOM1=MCHAM1.NOMCHE(3)
IF(NOM1 .NE. 'alphaz ')THEN
WRITE(IOIMP,*) NOM1, '!=', 'alphaz '
C 21 2
C Données incompatibles
GOTO 9999
ENDIF
ENDIF
C
NBNN=MELEME.NUM(/1)
NBELEM=MELEME.NUM(/2)
C
DO IELEM=1,NBELEM,1
DO IVOI=1,NBNN,1
NGV=MELEME.NUM(IVOI,IELEM)
IF(IVOI .EQ. 1)THEN
NLF=MLEGRA.LECT(NGV)
C write(*,*) 'NGF=',ngv
IF(NLF.EQ.0)THEN
WRITE (IOIMP,*) 'MCHAML of coefficients???'
C 21 2
C Données incompatibles
GOTO 9999
ENDIF
NLV=0
NLL1=MLELI1.LECT(NGV)
NLL2=MLELI2.LECT(NGV)
ELSE
NLV=MLECEN.LECT(NGV)
NLL1=MLELI1.LECT(NGV)
NLL2=MLELI2.LECT(NGV)
ENDIF
C write(*,*) 'NGV=',ngv
IF((NLL1*NLL2) .NE. 0)THEN
WRITE(IOIMP,*) 'Boundary conditions.'
C 21 2
C Données incompatibles
GOTO 9999
ENDIF
C
DO ICOM = 1, NCOM, 1
IF(NLV.NE.0)THEN
VAL=MPOCEN.VPOCHA(NLV,ICOM)
ELSEIF(NLL1.NE.0)THEN
VAL=MPOLI1.VPOCHA(NLL1,ICOM)
ELSEIF(NLL2.NE.0)THEN
NLNO=MLEGRA.LECT(NGV)
IF(IDIM .EQ. 3) VAL=VAL+
ELSEIF(IVOI .EQ. 1)THEN
VAL=0.0D0
C They can be all equal to 0 just at the first
C iteration (internal FACE point not belonging to BC)
C We chack that the MELVAL are 0
C
IF((MELVA1.VELCHE(IVOI,IELEM) .NE. 0) .OR.
& (MELVA2.VELCHE(IVOI,IELEM) .NE. 0))THEN
WRITE(IOIMP,*) 'Boundary conditions'
C 21 2
C Données incompatibles
GOTO 9999
ELSEIF(IDIM .EQ.3)THEN
IF(MELVA3.VELCHE(IVOI,IELEM) .NE. 0)THEN
WRITE(IOIMP,*) 'Boundary conditions'
C 21 2
C Données incompatibles
GOTO 9999
ENDIF
ENDIF
ELSE
WRITE(IOIMP,*) 'Boundary conditions'
C 21 2
C Données incompatibles
GOTO 9999
ENDIF
C write(*,*) 'VAL =',VAL
& (MELVA1.VELCHE(IVOI,IELEM)*VAL)
& (MELVA2.VELCHE(IVOI,IELEM)*VAL)
IF(IDIM.EQ.3)
& (MELVA3.VELCHE(IVOI,IELEM)*VAL)
ENDDO
ENDDO
ENDDO
SEGDES MELEME
SEGDES MCHAM1
SEGDES MELVA1
SEGDES MELVA2
IF(IDIM.EQ.3) SEGDES MELVA3
ENDDO
C
SEGDES MCHELM
IF(MPOLI1 .NE. 0) SEGDES MPOLI1
SEGSUP MLELI1
IF(MPOLI2 .NE. 0) SEGDES MPOLI2
SEGSUP MLELI2
SEGDES MPOGRA
SEGDES MPOCEN
SEGSUP MLECEN
SEGSUP MLEGRA
SEGDES MPONOR
C
9999 RETURN
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales