Download scacha.eso

Back to the list

   1 : C SCACHA    SOURCE    BP208322  09/09/25    21:15:37     6513           
   2 :       SUBROUTINE SCACHA(IPCHE1,IPCHE2,MLMOTX,MLMOTY,IRET)
   3 : *********************************************************************      
   4 : *                 PRODUIT SCALAIRE DE 2 CHAMELEMS                      
   5 : *********************************************************************
   6 :       IMPLICIT INTEGER(I-N)
   7 : *      IMPLICIT REAL*8(A-H,O-Z)
   8 : C--------------------------------------------------------------------        
   9 : C  ENTREE                                                                       
  10 : C     IPCHE1   CHAMELEM                                                           
  11 : C     IPCHE2   CHAMELEM                                                           
  12 : C     MLMOTX  LISTMOTS DE COMPOSANTES ASSOCIEES AU 1-ER  CHAMP                
  13 : C     MLMOTY  LISTMOTS DE COMPOSANTES ASSOCIEES AU 2-EME CHAMP                 
  14 : C  SORTIE                                                                       
  15 : C     IRET    POINTEUR SUR LE MCHAML RESULTAT                                  
  16 : C--------------------------------------------------------------------
  17 : 
  18 : -INC CCOPTIO
  19 : -INC CCHAMP
  20 : -INC SMCHAML
  21 : -INC SMELEME
  22 : -INC SMLMOTS
  23 : C
  24 :       CHARACTER*8 NOIN
  25 :       SEGMENT ITRAV                                                                                                                          
  26 :        CHARACTER*8 INCA(NINC),INCB(NINC)                                        
  27 :       ENDSEGMENT
  28 : 
  29 :      
  30 : C       
  31 :       IRET=0
  32 :       MCHAML=0
  33 : C      
  34 : C     travail  sur les listmots       
  35 :       
  36 :       MLMOTS=MLMOTX                                                             
  37 :       SEGACT MLMOTS                                                             
  38 :       NINC= MOTS(/2)                                                            
  39 :       SEGINI ITRAV                                                              
  40 :       DO 1 I = 1, NINC                                                          
  41 :       INCA(I)=MOTS(I)                                                           
  42 :   1   CONTINUE                                                                  
  43 :       SEGDES MLMOTS                                                             
  44 :       MLMOTS=MLMOTY                                                             
  45 :       SEGACT MLMOTS                                                             
  46 :         IF(MOTS(/2).NE.NINC) THEN                                                 
  47 :       SEGDES MLMOTS                                                             
  48 :       SEGSUP ITRAV                                                              
  49 :       MOTERR(1:4)='PSCA'                                                        
  50 :       MOTERR(5:12)='LISTMOTS'                                                   
  50 :       CALL ERREUR(125)                                                          
  51 :       RETURN                                                                    
  52 :         ENDIF                                                                     
  53 :       DO 21 I = 1, NINC                                                         
  54 :       INCB(I)=MOTS(I)                                                           
  55 :  21   CONTINUE                                                                  
  56 :       SEGDES MLMOTS 
  57 :       
  58 : C=========================================================
  59 : C     VERIFICATION DU LIEU SUPPORT DES MCHAML 
  60 : C       presence des      memes sous zones
  61 : C       presence des composantes declarées
  62 : C       identité  des points supports 
  63 : C
  64 : C
  65 :       MCHEL1=IPCHE1
  66 :       MCHEL2=IPCHE2      
  67 :       SEGACT MCHEL1,MCHEL2
  68 :       N1=MCHEL1.IMACHE(/1)
  69 :       NP1=MCHEL2.IMACHE(/1)
  70 : C  verification du nombre de sous zones geometriques        
  71 :        if(N1.ne.NP1)  then 
  71 :       CALL ERREUR(329)      
  72 :       segdes MCHEL1,mchel2 
  73 :       return 
  74 :        endif
  75 :        
  76 :       if(mchel1.ifoche.ne.mchel2.ifoche) then
  76 :       call erreur(21)
  77 :       segdes MCHEL1,mchel2 
  78 :       return 
  79 :        endif
  80 :       
  81 :       L1=11
  82 :       N3=6    
  83 :       SEGINI MCHEL3,MCHEL4 
  84 : C          
  85 : C   on fabrique deux CHAMPS temporaires  ordonnés        
  86 : C
  87 :       ipb1 = 0 
  88 :       DO 10  ISOUS = 1,N1 
  89 :       in1 = 0
  90 :       in2 = 0       
  91 :       IPT1 = MCHEL1.IMACHE(ISOUS)
  92 :       MCHAM1 = MCHEL1.ICHAML(ISOUS)
  93 :       SEGACT MCHAM1
  94 :       N2=NINC
  95 :       SEGINI MCHAM3,MCHAM4 
  96 :         do 16 j=1,ninc  
  97 :         do 17 k=1,MCHAM1.nomche(/2)
  98 :         noin = MCHAM1.nomche(k)
  99 :         if(noin.eq.inca(j)) then
 100 :         in1= in1 + 1    
 101 :         MCHEL3.IMACHE(isous)=IPT1
 102 :         MCHEL3.ICHAML(isous)=MCHAM3
 103 :         inf1 = mchel1.infche(isous,3)
 104 :         inf2 = mchel1.infche(isous,4) 
 105 :         melva1= MCHAM1.IELVAL(k)
 106 :         segini ,melval=melva1
 107 :         MCHAM3.IELVAL(in1)=melval
 108 :         MCHAM3.NOMCHE(in1)=noin
 109 :         segdes melva1,melval     
 110 :         goto 16
 111 :         endif
 112 : 17    continue 
 113 : 16    continue
 114 : C 
 115 :       segdes mcham1
 116 : C      
 117 :       DO 12  ii = 1,N1     
 118 :       IPT2 = MCHEL2.IMACHE(II)
 119 :             if(ipt2.eq.ipt1) then       
 120 :       MCHAM2 = MCHEL2.ICHAML(II) 
 121 :       SEGACT MCHAM2         
 122 :         do 18 j=1,ninc
 123 :         do 19 k=1,MCHAM2.nomche(/2)
 124 :         noin = MCHAM2.nomche(k)
 125 :          if(noin.eq.incb(j)) then
 126 :         in2= in2 + 1
 127 :       if(mchel2.infche(II,3).ne.inf1.or. 
 128 :      & mchel2.infche(II,4).ne.inf2) then
 129 :       ipb1 = 1 
 130 :       endif             
 131 :         MCHEL4.IMACHE(isous) = IPT2
 132 :         MCHEL4.ICHAML(isous) = MCHAM4
 133 :         melva1 = MCHAM2.IELVAL(k)
 134 :         segini , melval=melva1
 135 :         MCHAM4.IELVAL(in2) = melval
 136 :         MCHAM4.NOMCHE(in2)=noin
 137 :         segdes melva1,melval    
 138 :         goto 18         
 139 :          endif
 140 : 19    continue 
 141 : 18    continue 
 142 :         segdes mcham2        
 143 :              endif
 144 : 12    CONTINUE 
 145 :       if(ipb1.eq.1) then 
 146 :       moterr(1:8) = MCHEL1.TITCHE(1:8) 
 147 :       moterr(9:16)= MCHEL2.TITCHE(1:8) 
 148 :       segdes mchel1,mchel2
 149 :       segsup MCHAM3,MCHAM4,MCHEL3,MCHEL4,itrav             
 149 :       call erreur(175)
 150 :       RETURN
 151 :       endif
 152 : C======       
 153 :       if(in1.ne.ninc.or.in2.ne.ninc) then
 154 :       segdes mchel1,mchel2      
 155 :       segsup MCHAM3,MCHAM4,MCHEL3,MCHEL4,itrav      
 156 : C      write(6,*) ' incoherence entre composantes et listmots   '
 156 :       call erreur(911)       
 157 :       RETURN
 158 :         endif 
 159 : C====== 
 160 : 10    CONTINUE
 161 : C
 162 :       segsup itrav 
 163 :       if (mchel1.ne.mchel2) segdes mchel2
 164 : 
 165 :        
 166 : C----------------------------------------------------------          
 167 : C
 168 : C     CREATION DU MCHELM
 169 : C
 170 :       L1=11 
 171 :       N3=6
 172 : C
 173 :       SEGINI MCHELM
 174 :       TITCHE='PROSCAL'
 175 :             
 176 :       IFOCHE=MCHEL1.IFOCHE
 177 :       IRET=MCHELM
 178 : C____________________________________________________________________
 179 : C
 180 : C     DEBUT DE LA BOUCLE SUR LES DIFFERENTES ZONES
 181 : C____________________________________________________________________
 182 : C
 183 :       DO 500 ISOUS=1,N1
 184 : *
 185 : *   INITIALISATION
 186 : *
 187 :  
 188 :       MELEME = MCHEL1.IMACHE(ISOUS)      
 189 :       IMACHE(ISOUS)= MELEME 
 190 :       CONCHE(ISOUS)= MCHEL1.CONCHE(ISOUS) 
 191 : C      
 192 : C    
 193 :       INFCHE(ISOUS,1)=0
 194 :       INFCHE(ISOUS,2)=0
 195 :       INFCHE(ISOUS,3)=MCHEL1.INFCHE(ISOUS,3)
 196 :       INFCHE(ISOUS,4)=MCHEL1.INFCHE(ISOUS,4)
 197 :       INFCHE(ISOUS,5)=0
 198 :       INFCHE(ISOUS,6)=MCHEL1.INFCHE(ISOUS,6)
 199 : C
 200 : C     RECHERCHE DE LA TAILLE DES MELVAL A ALLOUER
 201 : C     bp (septembre 2009): modif pour permettre d'avoir des zones de champs
 202 : C     cst et d'autres variables => differentes tailles de supports
 203 : C 
 204 :       MCHAM3=MCHEL3.ICHAML(ISOUS)
 205 :       MCHAM4=MCHEL4.ICHAML(ISOUS)         
 206 :       N1PTEL = 0
 207 :       N1EL   = 0
 208 :       DO ICOMP=1,NINC
 209 :         MELVA1 = MCHAM3.IELVAL(ICOMP)
 210 :         MELVA2 = MCHAM4.IELVAL(ICOMP)
 211 :         SEGACT MELVA1,MELVA2 
 212 :         N1PTEL = max(N1PTEL,MELVA1.VELCHE(/1))
 213 :         N1EL   = max(N1EL,MELVA1.VELCHE(/2))
 214 :         SEGDES MELVA1,MELVA2 
 215 :       ENDDO
 216 : C
 217 : C     CREATION DU MCHAML RESULTAT DE LA SOUS ZONE
 218 : C
 219 :       N2=1
 220 :       SEGINI MCHAML
 221 :       ICHAML(ISOUS)=MCHAML
 222 : 
 223 :         NOMCHE(1)='SCAL'
 224 :         TYPCHE(1)='REAL*8'
 225 :         N2PTEL=0
 226 :         N2EL=0
 227 :         SEGINI MELVAL
 228 :         IELVAL(1)=MELVAL
 229 : c      mise a 0 initiale (necessaire?)
 230 :        DO  IE= 1,N1EL
 231 :        DO  IB= 1,N1PTEL
 232 :          VELCHE(IB,IE) = 0.D0 
 233 :        ENDDO     
 234 :        ENDDO    
 235 : C
 236 :        DO 110  ICOMP=1,NINC
 237 :          MELVA1= MCHAM3.IELVAL(ICOMP)
 238 :          MELVA2= MCHAM4.IELVAL(ICOMP)
 239 :          segact melva1,melva2
 240 :          IB1MAX = MELVA1.VELCHE(/1)
 241 :          IE1MAX = MELVA1.VELCHE(/2)
 242 :          IB2MAX = MELVA2.VELCHE(/1)
 243 :          IE2MAX = MELVA2.VELCHE(/2)
 244 : c         write(6,*) 'comp',MCHAM3.NOMCHE(icomp),MCHAM4.NOMCHE(icomp)
 245 : C        write(6,*) 'melvals' ,melva1,melva2 
 246 :          DO  IE= 1,N1EL
 247 :          DO  IB= 1,N1PTEL
 248 :            IB1 = min(IB,IB1MAX)
 249 :            IB2 = min(IB,IB2MAX)
 250 :            IE1 = min(IE,IE1MAX)
 251 :            IE2 = min(IE,IE2MAX)
 252 : c           write(6,*) 'VELCHE(IB,IE) = ',VELCHE(IB,IE),' + ', 
 253 : c     &     (MELVA1.VELCHE(IB1,IE1)),' * ',(MELVA2.VELCHE(IB2,IE2))
 254 :            VELCHE(IB,IE) = VELCHE(IB,IE) 
 255 :      &     + MELVA1.VELCHE(IB1,IE1)*MELVA2.VELCHE(IB2,IE2)
 256 :          ENDDO     
 257 :          ENDDO    
 258 :        segdes melva1,melva2                     
 259 : 110    CONTINUE
 260 : C
 261 : C      segsup MCHAM3,MCHAM4
 262 :       segdes,MELVAL,MCHAML
 263 :  
 264 : 500   CONTINUE
 264 :       call dtcham(mchel3)
 264 :       call dtcham(mchel4) 
 265 :       segdes mchel1,mchelm     
 266 :       RETURN
 267 :       END
 268 : 
 269 : 
 270 :  

© Cast3M 2003 - All rights reserved.
Disclaimer