C BORNE5 SOURCE PV 11/03/07 21:15:13 6885 SUBROUTINE BORNE5 (IPCHME,MLCOMP,MLIOPE,MLBMIN,MLBMAX, IPCHMS) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC CCOPTIO -INC SMCHAML -INC SMLENTI -INC SMLMOTS -INC SMLREEL POINTEUR MLREE4.MLREEL CHARACTER*4 mot4 IPCHMS = 0 IRETS = 0 MCHEL1 = IPCHME SEGINI,MCHELM=MCHEL1 C- Quelques verifications MLMOTS = MLCOMP C* SEGACT,MLMOTS DO i = 1, MOTS(/2) mot4 = MOTS(i) DO j = 1, i-1 IF (mot4.EQ.MOTS(j)) MOTS(j) = ' ' ENDDO ENDDO NCOMP = 0 DO i = 1, MOTS(/2) IF (MOTS(i).NE.' ') NCOMP = NCOMP+1 ENDDO IF (NCOMP.EQ.0) CALL ERREUR(5) MLENTI = MLIOPE C* SEGACT,MLENTI MLREE1 = MLBMIN C* SEGACT,MLREE1 MLREE2 = MLBMAX C* SEGACT,MLREE2 C- Realisation du bornage des champs par element N1 = ICHAML(/1) N3 = INFCHE(/2) DO i = 1, N1 MCHAM1 = ICHAML(i) SEGACT,MCHAM1 NCOMP = MCHAM1.NOMCHE(/2) SEGINI,MCHAML=MCHAM1 N2 = 0 DO icour = 1, NCOMP mot4 = MCHAM1.NOMCHE(icour) C* IF (mot4.EQ.' ') GOTO 100 CALL PLACE(MOTS,MOTS(/2),ncour,mot4) IF (ncour.NE.0) THEN N2 = N2+1 NOMCHE(N2) = mot4 TYPCHE(N2) = MCHAM1.TYPCHE(icour) MELVA1 = MCHAM1.IELVAL(icour) SEGINI,MELVAL=MELVA1 IELVAL(N2) = MELVAL INDOPE = MLENTI.LECT(ncour) XBMIN = MLREE1.PROG(ncour) XBMAX = MLREE2.PROG(ncour) IF (TYPCHE(N2).EQ.'REAL*8') THEN N1PTEL = VELCHE(/1) N1EL = VELCHE(/2) C- BORNER 'MAXIMUM' : IF (INDOPE.EQ.1) THEN DO iel = 1, N1EL DO igau = 1, N1PTEL VELCHE(igau,iel) = MIN( VELCHE(igau,iel), XBMAX) ENDDO ENDDO C- BORNER 'MINIMUM' : ELSE IF (INDOPE.EQ.2) THEN DO iel = 1, N1EL DO igau = 1, N1PTEL VELCHE(igau,iel) = MAX( VELCHE(igau,iel), XBMIN) ENDDO ENDDO C- BORNER 'COMPRIS' : ELSE IF (INDOPE.EQ.3) THEN DO iel = 1, N1EL DO igau = 1, N1PTEL x = MIN( VELCHE(igau,iel), XBMAX) VELCHE(igau,iel) = MAX( x, XBMIN) ENDDO ENDDO ELSE CALL ERREUR(5) ENDIF ELSE IF (TYPCHE(N2).EQ.'POINTEURLISTREEL') THEN N2PTEL = IELCHE(/1) N2EL = IELCHE(/2) DO iel = 1, N2EL DO igau = 1, N2PTEL ILREEE = IELCHE(igau,iel) CALL BORNE2(ILREEE,INDOPE,XBMIN,XBMAX, ILREES) IELCHE(igau,iel) = ILREES ENDDO ENDDO ELSE IF (TYPCHE(N2).EQ.'POINTEUREVOLUTIO') THEN N2PTEL = IELCHE(/1) N2EL = IELCHE(/2) JG = 1 SEGINI,MLENT2,MLENT3,MLREE3,MLREE4 MLENT2.LECT(1) = 1 MLENT3.LECT(1) = INDOPE MLREE3.PROG(1) = XBMIN MLREE4.PROG(1) = XBMAX DO iel = 1, N2EL DO igau = 1, N2PTEL IEVOLE = IELCHE(igau,iel) CALL BORNE3(IEVOLE,MLENT2,MLENT3,MLREE3,MLREE4,IEVOLS) IELCHE(igau,iel) = IEVOLS IF (IEVOLS.EQ.0) IRETS = -1 ENDDO ENDDO SEGSUP,MLENT2,MLENT3,MLREE3,MLREE4 ELSE IF (TYPCHE(N2).EQ.'POINTEURLISTENTI') THEN N2PTEL = IELCHE(/1) N2EL = IELCHE(/2) IBMIN = nint(XBMIN) IBMAX = nint(XBMAX) DO iel = 1, N2EL DO igau = 1, N2PTEL ILENTE = IELCHE(igau,iel) CALL BORNE1(ILENTE,INDOPE,IBMIN,IBMAX, ILENTS) IELCHE(igau,iel) = ILENTS ENDDO ENDDO ELSE MOTERR(1:8)=MCHAM1.NOMCHE(icour) CALL ERREUR(679) IRETS = -1 ENDIF SEGDES,MELVAL ENDIF C*100 CONTINUE ENDDO IF (IRETS.NE.-1) THEN IF (N2.NE.0) THEN IRETS = IRETS + 1 IF (N2.NE.NCOMP) THEN SEGADJ,MCHAML ENDIF SEGDES,MCHAML ICHAML(IRETS) = MCHAML IF (IRETS.NE.i) THEN CONCHE(IRETS) = CONCHE(i) IMACHE(IRETS) = IMACHE(i) DO j = 1, N3 INFCHE(IRETS,j) = INFCHE(i,j) ENDDO ENDIF ELSE SEGSUP,MCHAML ENDIF ENDIF SEGDES,MCHAM1 ENDDO IF (IRETS.GT.0) THEN IF (IRETS.NE.N1) THEN N1 = IRETS L1 = TITCHE(/1) SEGADJ,MCHELM ENDIF IPCHMS = MCHELM ELSE IF (IRETS.EQ.0) THEN CALL ERREUR(280) ENDIF 900 CONTINUE IF (IPCHMS.NE.0) THEN SEGDES,MCHELM ELSE SEGSUP,MCHELM ENDIF RETURN END