C IPLN2I    SOURCE    BP208322  21/01/28    21:15:09     10868          
      SUBROUTINE IPLN2I(ithr)
C  Interface avec IPLNU2 qui peut être appelee en parallele
C  pour un ensemble de valeurs a interpoler
C
C
C  Creation : 08/04/2015
C  Createur : CB215821

      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8 (A-H,O-Z)


-INC PPARAM
-INC CCOPTIO
-INC SMCHAML
-INC SMCHPOI
-INC SMNUAGE

C     Declaration du COMMON pour le travail en parallele
      COMMON/iplnuc/XP1,NBTHR,INUAG,ITR1,MAXI1,IVAL,N,NN,MM,NNMM,
     &              IMPOV1,IMPOV2,
     &              IMCHA1,IMCHA2,N1EL,N1PTEL,
     &              ITR2,XELIM1

      SEGMENT MTR2
        REAL*8  XI(N,NN)
        REAL*8  YI(N,MM)
      ENDSEGMENT


CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C            Utilisation du bon pointeur : MPOVAL ou MCHAML            C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      IF     (IMPOV1 .NE. 0) THEN
C       Cas d'un CHPOINT passe a IPOL
C        Write(IOIMP,*)' Cas des CHPOINT'
        MPOVAL = IMPOV1
        MPOVA1 = IMPOV2
      ELSEIF (IMCHA1 .NE. 0) THEN
C       Cas d'un MCHAML  passe a IPOL
C        Write(IOIMP,*)' Cas des MCHAML'
        MCHAML = IMCHA1
        MCHAM1 = IMCHA2
        MTR2   = ITR2
      ELSE
C       Ce cas ne peut en theorie pas arriver, mais ne sait on jamais
        CALL ERREUR(5)
        RETURN
      ENDIF

CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
C          Debut du Travail sur tous les points a interpoler           C
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
      IF (IMPOV1 .NE. 0) THEN
C       Cas des CHPOINTS
        NNC = N
        IRES  = MOD(NNC,NBTHR)
        IF (IRES .EQ. 0) THEN
          ILON  = NNC / NBTHR
          IDEB  = (ithr -1)* ILON + 1
        ELSE
          IF (ithr .LE. IRES) THEN
            ILON  = (NNC / NBTHR) + 1
            IDEB  = (ithr -1)* ILON + 1
          ELSE
            ILON  = NNC / NBTHR
            IDEB  = (IRES * (ILON+1)) + (ithr-IRES-1)* ILON + 1
          ENDIF
        ENDIF
        IFIN  = IDEB + ILON - 1

        DO J=IDEB,IFIN
C         Interpolation
          CALL IPLNU2(INUAG,ITR1,MPOVAL.VPOCHA(1,1),
     &                           MPOVA1.VPOCHA(1,1),
     &                MAXI1,IVAL,
     &                N,J,NN,MM,NNMM,XP1,XELIM1)
          IF (IERR .NE. 0) RETURN
        ENDDO

      ELSE
C       Cas des MCHAML
        NNC = N1EL
        IRES  = MOD(NNC,NBTHR)
        IF (IRES .EQ. 0) THEN
          ILON  = NNC / NBTHR
          IDEB  = (ithr -1)* ILON + 1
        ELSE
          IF (ithr .LE. IRES) THEN
            ILON  = (NNC / NBTHR) + 1
            IDEB  = (ithr -1)* ILON + 1
          ELSE
            ILON  = NNC / NBTHR
            IDEB  = (IRES * (ILON+1)) + (ithr-IRES-1)* ILON + 1
          ENDIF
        ENDIF
        IFIN  = IDEB + ILON - 1

        DO J=IDEB,IFIN
          DO K=1,N1PTEL
            INDICE = (J-1)*N1PTEL+K
            DO L=1,NN
C             Boucle sur les composantes CONNUES
              MELVAL = IELVAL(L)
              MTR2.XI(INDICE,L) = VELCHE(K,J)
            ENDDO

C           Interpolation
            CALL IPLNU2(INUAG,ITR1,MTR2.XI(1,1),
     &                             MTR2.YI(1,1),
     &                  MAXI1,IVAL,
     &                  N,INDICE,NN,MM,NNMM,XP1,XELIM1)
            IF ( IERR .NE. 0 ) RETURN
C
C           Ecriture des resultats stockes dans YI
            DO L=1,MM
              MELVAL = MCHAM1.IELVAL(L)
              VELCHE(K,J) = MTR2.YI(INDICE,L)
            ENDDO
          ENDDO
        ENDDO
      ENDIF

      RETURN
      END

 
 
 
