Download probap.eso

Back to the list

   1 : C PROBAP    SOURCE    GOUNAND   05/12/21    21:35:49     5281           
   2 :       SUBROUTINE PROBAP(BAPOL1,BAPOL2,
   3 :      $     BAPROD,
   4 :      $     IMPR,IRET)
   5 :       IMPLICIT REAL*8 (A-H,O-Z)
   6 :       IMPLICIT INTEGER (I-N)
   7 : C***********************************************************************
   8 : C NOM         : PROBAP
   9 : C DESCRIPTION : Produit de deux bases polynômiales (au même sens que le
  10 : C               produit des éléments dans prolrf.eso)
  11 : C               Ex : base polynomiale (dim. 2)  (1, \ksi, \eta)
  12 : C                  * base polynomiale (dim. 1)  (1, \ksi)
  13 : C                 -> base polynomiale (dim. 3)  (1, \ksi, \eta,
  14 : C                                   \zeta, \ksi\zeta, \eta\zeta)
  15 : C
  16 : C LANGAGE     : ESOPE
  17 : C AUTEUR      : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  18 : C               mél : gounand@semt2.smts.cea.fr
  19 : C***********************************************************************
  20 : C APPELES          : -
  21 : C APPELE PAR       : INELQU, INELPR, INELCU
  22 : C***********************************************************************
  23 : C ENTREES            : BAPOL1, BAPOL2
  24 : C ENTREES/SORTIES    : -
  25 : C SORTIES            : BAPROD
  26 : C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  27 : C***********************************************************************
  28 : C VERSION    : v1, 10/05/2000, version initiale
  29 : C HISTORIQUE : v1, 10/05/2000, création
  30 : C HISTORIQUE :
  31 : C HISTORIQUE :
  32 : C***********************************************************************
  33 : C Prière de PRENDRE LE TEMPS de compléter les commentaires
  34 : C en cas de modification de ce sous-programme afin de faciliter
  35 : C la maintenance !
  36 : C***********************************************************************
  37 : -INC CCOPTIO
  38 : CBEGININCLUDE SPOLYNO
  39 :       SEGMENT POLYNO
  40 :       REAL*8  COEMON(NBMON)
  41 :       INTEGER EXPMON(NDIML,NBMON)
  42 :       ENDSEGMENT 
  43 :       SEGMENT POLYNS
  44 :       POINTEUR LIPOLY(NBPOLY).POLYNO
  45 :       ENDSEGMENT
  46 : CENDINCLUDE SPOLYNO
  47 :       POINTEUR BAPOL1.POLYNS
  48 :       POINTEUR BAPOL2.POLYNS
  49 :       INTEGER NBPOLY
  50 :       POINTEUR BAPROD.POLYNS
  51 :       POINTEUR POLY1.POLYNO
  52 :       POINTEUR POLY2.POLYNO
  53 :       INTEGER NBMON,NDIML
  54 :       POINTEUR POLYP.POLYNO
  55 : *
  56 :       INTEGER IMPR,IRET
  57 : *
  58 :       INTEGER NBPOL1,NBPOL2
  59 :       INTEGER IBPOL1,IBPOL2
  60 :       INTEGER NBMON1,NBMON2,NBMONP
  61 :       INTEGER IBMON1,IBMON2,IBMONP
  62 :       INTEGER NDIML1,NDIML2,NDIMLP,NDIMLT
  63 :       INTEGER IDIML1,IDIML2,IDIMLP
  64 : *     
  65 : * Executable statements
  66 : *
  67 :       IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans probap.eso' 
  68 : * Les SEGACT et SEGDES sont dans cet ordre car on peut avoir
  69 : * BAPOL1=BAPOL2
  70 :       SEGACT BAPOL1
  71 :       SEGACT BAPOL2
  72 :       SEGACT BAPOL1.LIPOLY(*)
  73 :       SEGACT BAPOL2.LIPOLY(*)
  74 :       NBPOL1=BAPOL1.LIPOLY(/1)
  75 :       NBPOL2=BAPOL2.LIPOLY(/1)
  76 :       POLY1=BAPOL1.LIPOLY(1)
  77 :       POLY2=BAPOL2.LIPOLY(1)
  78 :       NDIML1=POLY1.EXPMON(/1)
  79 :       NDIML2=POLY2.EXPMON(/1)
  80 :       NDIMLP=NDIML1+NDIML2
  81 :       NBPOLY=0
  82 :       SEGINI BAPROD
  83 :       DO 1 IBPOL2=1,NBPOL2
  84 :          POLY2=BAPOL2.LIPOLY(IBPOL2)
  85 :          NBMON2=POLY2.COEMON(/1)
  86 :          NDIMLT=POLY2.EXPMON(/1)
  87 :          IF (NDIMLT.NE.NDIML2) THEN
  88 :             WRITE(IOIMP,*) 'Base poly. 2 invalide'
  89 :             GOTO 9999
  90 :          ENDIF
  91 :          DO 12 IBPOL1=1,NBPOL1
  92 :             POLY1=BAPOL1.LIPOLY(IBPOL1)
  93 :             NBMON1=POLY1.COEMON(/1)
  94 :             NDIMLT=POLY1.EXPMON(/1)
  95 :             IF (NDIMLT.NE.NDIML1) THEN
  96 :                WRITE(IOIMP,*) 'Base poly. 1 invalide'
  97 :                GOTO 9999
  98 :             ENDIF
  99 :             NBMONP=NBMON1*NBMON2
 100 :             NBMON=NBMONP
 101 :             NDIML=NDIMLP
 102 :             SEGINI POLYP
 103 :             IBMONP=0
 104 :             DO 122 IBMON2=1,NBMON2
 105 :                DO 1222 IBMON1=1,NBMON1
 106 :                   IBMONP=IBMONP+1
 107 :                   POLYP.COEMON(IBMONP)=
 108 :      $                 POLY2.COEMON(IBMON2)*POLY1.COEMON(IBMON1)
 109 :                   IDIMLP=0
 110 :                   DO 12222 IDIML1=1,NDIML1
 111 :                      IDIMLP=IDIMLP+1
 112 :                      POLYP.EXPMON(IDIMLP,IBMONP)=
 113 :      $                    POLY1.EXPMON(IDIML1,IBMON1)
 114 : 12222             CONTINUE
 115 :                   DO 12224 IDIML2=1,NDIML2
 116 :                      IDIMLP=IDIMLP+1
 117 :                      POLYP.EXPMON(IDIMLP,IBMONP)=
 118 :      $                    POLY2.EXPMON(IDIML2,IBMON2)
 119 : 12224             CONTINUE
 120 :  1222          CONTINUE
 121 :  122        CONTINUE
 122 :             SEGDES POLYP
 123 :             BAPROD.LIPOLY(**)=POLYP
 124 :  12      CONTINUE
 125 :  1    CONTINUE
 126 :       SEGDES BAPROD
 127 :       SEGDES BAPOL2.LIPOLY(*)
 128 :       SEGDES BAPOL1.LIPOLY(*)
 129 :       SEGDES BAPOL2
 130 :       SEGDES BAPOL1
 131 : *
 132 : * Normal termination
 133 : *
 134 :       IRET=0
 135 :       RETURN
 136 : *
 137 : * Format handling
 138 : *
 139 : *
 140 : * Error handling
 141 : *
 142 :  9999 CONTINUE
 143 :       IRET=1
 144 :       WRITE(IOIMP,*) 'An error was detected in subroutine probap'
 145 :       RETURN
 146 : *
 147 : * End of subroutine PROBAP
 148 : *
 149 :       END
 150 : 
 151 :  
 152 :  

© Cast3M 2003 - All rights reserved.
Disclaimer