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