$$$$ DIFFANIS
* DIFFANIS  PROCEDUR  GBM       04/12/22    21:15:18     4973           
*---------------------------------------------------------------------
*---------PROCEDURE DE CALCUL DE LA DISPERSIVITE----------------------
*---------------------------------------------------------------------
'DEBP'  DIFFANIS MateDiff*'CHPOINT' typdi/'MOT' ANISO/'LOGIQUE'    ;
*  |-----------------------------------------------------------------|
*  | Généralités : DIFFANIS remet un teneur de diffusion isotrope avec
*  |               un format général anisotrope K11 K21 etc ....     |
*  |-----------------------------------------------------------------|
*  |                                                                 |
*  |-----------------------------------------------------------------|
*  |                         ENTREES                                 |
*  |-----------------------------------------------------------------|
*  |                                                                 |
*  | ANISO      LOGIQUE VRAI SI ANISOTROPE, FAUX SINON               |
*  |                                                                 |
*  | MateDiff : Tenseur de diffusion  (type iso, ..) champoint       |
*  |             de composante 'K' en isotrope, 'K11', 'K21',        |
*  |            'K22' en anisotrope 2d et  'K11', 'K21', 'K22', 'K31'|
*  |            'K32', 'K33' en anisotrope 3d. Type 'CARACTERISTIQUE'|
*  |                                                                 |
*  | typdi   si 'EFMH' calcul particulier
*  |                                                                 |
*  |-----------------------------------------------------------------|
*  |                         SORTIES                                 |
*  |-----------------------------------------------------------------|
*  |                                                                 |
*  |                                                                 |
*  | newdiff  : matrice de diffusion identique à Matediff mais écrite|
*  |            sous la forme d'un tenseur si elle était isotrope à  |
*  |            une composante K (cette composante est alors reportée|
*  |            à l'identique sur K11, K22 et K33)                   |
*  |                                                                 |
*  |                                                                 |
**********************************************************************


SI (non (EXISTE ANISO))                                                ;
   ANISO = FAUX                                                        ;
FINSI                                                                  ;

SI (non (EXISTE typdi))                                                ;
   typdi = 'VF'                                                        ;
FINSI                                                                  ;

DEANISO = 'NEG' ('DIME' ('EXTRAIRE' Matediff 'COMP')) 1                ;
'SI' (DEANISO)                                                         ;
*  le tenseur est inchangé mais mis au type caractéristique
*  On ne garde également que les bons noms de composantes 
  'SI' ('EGA' ('VALEUR' 'DIME') 2)                                     ;
     D11P = 'EXCO' Matediff 'K11' 'K11'                                ;
     D22P = 'EXCO' Matediff 'K22' 'K22'                                ;
     D21P = 'EXCO' Matediff 'K21' 'K21'                                ;
     newdiff = D11P '+' D22P '+' D21P                                  ;
  'FINSI'                                                              ;
  'SI' ('EGA' ('VALEUR' 'DIME') 3)                                     ;
     D11P = 'EXCO' Matediff 'K11' 'K11'                                ;
     D22P = 'EXCO' Matediff 'K22' 'K22'                                ;
     D33P = 'EXCO' Matediff 'K33' 'K33'                                ;
     D21P = 'EXCO' Matediff 'K21' 'K21'                                ;
     D31P = 'EXCO' Matediff 'K31' 'K31'                                ;
     D32P = 'EXCO' Matediff 'K32' 'K32'                                ;
     newdiff = D11P '+' D22P '+' D33P '+' D21P '+' D31P '+' D32P       ;
  'FINSI'                                                              ;  
'SINON'                                                                ;
   SI ((NEG typdi 'EFMH') OU ANISO)                                    ;
* Le tenseur est isotrope, on charge ses composantes sur la
* diagonale du tenseur de diffusion totale (qui contiendra la
* dispersion et la diffusion numérique)
     'SI' ('EGA' ('VALEUR' 'DIME') 2)                                  ;        
        D11P = 'NOMC' 'K11'  Matediff                                  ;
        D21P = 'NOMC' 'K21'  (0.0D0*Matediff)                          ; 
        D22P = 'NOMC' 'K22'  Matediff                                  ;
        newdiff = D11P '+' D22P '+' D21P                               ;
     'FINSI'                                                           ;
     'SI' ('EGA' ('VALEUR' 'DIME') 3)                                  ;
        D11P = 'NOMC' 'K11' Matediff                                   ;
        D21P = 'NOMC' 'K21' (0.0D0*Matediff)                           ; 
        D22P = 'NOMC' 'K22' Matediff                                   ;
        D31P = 'NOMC' 'K31' (0.0*Matediff)                             ;
        D32P = 'NOMC' 'K32' (0.0*Matediff)                             ; 
        D33P = 'NOMC' 'K33' Matediff                                   ;
        newdiff = D11P '+' D22P '+' D33P '+' D21P '+' D31P '+' D32P    ;
     'FINSI'                                                           ;
   'SINON'                                                             ;
      newdiff = 'NOMC' 'K' Matediff                                    ;
   'FINSI'                                                             ;
FINSI                                                                  ;
'FINPROC' newdiff                                                      ;


 
