probap
C PROBAP SOURCE GOUNAND 21/06/02 21:17:31 11022 $ BAPROD, $ IMPR,IRET) IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : PROBAP C DESCRIPTION : Produit de deux bases polynômiales (au même sens que le C produit des éléments dans prolrf.eso) C Ex : base polynomiale (dim. 2) (1, \ksi, \eta) C * base polynomiale (dim. 1) (1, \ksi) C -> base polynomiale (dim. 3) (1, \ksi, \eta, C \zeta, \ksi\zeta, \eta\zeta) C C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : - C APPELE PAR : INELQU, INELPR, INELCU C*********************************************************************** C ENTREES : BAPOL1, BAPOL2 C ENTREES/SORTIES : - C SORTIES : BAPROD C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 10/05/2000, version initiale C HISTORIQUE : v1, 10/05/2000, création C HISTORIQUE : C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMPS de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** -INC PPARAM -INC CCOPTIO -INC TNLIN *-INC SPOLYNO POINTEUR BAPOL1.POLYNS POINTEUR BAPOL2.POLYNS INTEGER NBPOLY POINTEUR BAPROD.POLYNS POINTEUR POLY1.POLYNO POINTEUR POLY2.POLYNO INTEGER NBMON,NDIML POINTEUR POLYP.POLYNO * INTEGER IMPR,IRET * INTEGER NBPOL1,NBPOL2 INTEGER IBPOL1,IBPOL2 INTEGER NBMON1,NBMON2,NBMONP INTEGER IBMON1,IBMON2,IBMONP INTEGER NDIML1,NDIML2,NDIMLP,NDIMLT INTEGER IDIML1,IDIML2,IDIMLP * * Executable statements * IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans probap.eso' * Les SEGACT et SEGDES sont dans cet ordre car on peut avoir * BAPOL1=BAPOL2 SEGACT BAPOL1 SEGACT BAPOL2 SEGACT BAPOL1.LIPOLY(*) SEGACT BAPOL2.LIPOLY(*) NBPOL1=BAPOL1.LIPOLY(/1) NBPOL2=BAPOL2.LIPOLY(/1) POLY1=BAPOL1.LIPOLY(1) POLY2=BAPOL2.LIPOLY(1) NDIML1=POLY1.EXPMON(/1) NDIML2=POLY2.EXPMON(/1) NDIMLP=NDIML1+NDIML2 NBPOLY=0 SEGINI BAPROD DO 1 IBPOL2=1,NBPOL2 POLY2=BAPOL2.LIPOLY(IBPOL2) NBMON2=POLY2.COEMON(/1) NDIMLT=POLY2.EXPMON(/1) IF (NDIMLT.NE.NDIML2) THEN WRITE(IOIMP,*) 'Base poly. 2 invalide' GOTO 9999 ENDIF DO 12 IBPOL1=1,NBPOL1 POLY1=BAPOL1.LIPOLY(IBPOL1) NBMON1=POLY1.COEMON(/1) NDIMLT=POLY1.EXPMON(/1) IF (NDIMLT.NE.NDIML1) THEN WRITE(IOIMP,*) 'Base poly. 1 invalide' GOTO 9999 ENDIF NBMONP=NBMON1*NBMON2 NBMON=NBMONP NDIML=NDIMLP SEGINI POLYP IBMONP=0 DO 122 IBMON2=1,NBMON2 DO 1222 IBMON1=1,NBMON1 IBMONP=IBMONP+1 POLYP.COEMON(IBMONP)= $ POLY2.COEMON(IBMON2)*POLY1.COEMON(IBMON1) IDIMLP=0 DO 12222 IDIML1=1,NDIML1 IDIMLP=IDIMLP+1 POLYP.EXPMON(IDIMLP,IBMONP)= $ POLY1.EXPMON(IDIML1,IBMON1) 12222 CONTINUE DO 12224 IDIML2=1,NDIML2 IDIMLP=IDIMLP+1 POLYP.EXPMON(IDIMLP,IBMONP)= $ POLY2.EXPMON(IDIML2,IBMON2) 12224 CONTINUE 1222 CONTINUE 122 CONTINUE SEGDES POLYP BAPROD.LIPOLY(**)=POLYP 12 CONTINUE 1 CONTINUE SEGDES BAPROD SEGDES BAPOL2.LIPOLY(*) SEGDES BAPOL1.LIPOLY(*) SEGDES BAPOL2 SEGDES BAPOL1 * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine probap' RETURN * * End of subroutine PROBAP * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales