* fichier :  mulmatflo.dgibi
***********************************************************
**** OPERATEUR 'KOPS'                                  ****
**** OPERATEUR 'MDIA'                                  ****
**** Multiplication MATRIK FLOTTANT et                 ****   
**** MATRIK CHPOINT                                    ****
**** Creation de CHPOINTs 'ET' MATRIKs vides           ****
****                                                   ****
**** A. BECCANTINI, LTMF    AOUT    2001               ****
***********************************************************


 'OPTION'  'ECHO' 0 ;
 'OPTION'  'DIME' 2 ;
 'OPTION'  'ELEM' 'TRI3' ;
 'OPTION'  'TRAC' 'X' ;

 GRAPH = FAUX ;
* GRAPH = VRAI ;
 
*
*** MAILLAGE
*

 
 P0 = 0.0D0 0.0D0 ;
 P1 = 3.0D0 0.0D0 ;
 P2 = 3.0D0 3.0D0 ;
 P3 = 0.0D0 3.0D0 ;
 P4 = 6.0D0 0.0D0 ;
 P5 = 6.0D0 3.0D0 ;

 RAF = 1 ;
 
 N1 = 2 '*' RAF ;
 N2 = 2 '*' RAF ;
 N3 = 2 '*' RAF ;
 N4 = 2 '*' RAF ;
 N5 = 1 '*' RAF ;
 N6 = 2 '*' RAF ;
 N7 = 2 '*' RAF ;


 LINEXT1 = ((P0 'DROIT'  N1 P1) 'ET' (P1 'DROIT'  N2 P2) 'ET' 
           (P2 'DROIT'  N3 P3) 'ET' (P3 'DROIT'  N4 P0)) ;
          
 LINEXT2 = ((P1 'DROIT'  N2 P2) 'ET' (P2 'DROIT'  N5 P5) 'ET' 
           (P5 'DROIT'  N6 P4) 'ET' (P4 'DROIT'  N7 P1)) ;          

 'OPTION' 'ELEM' QUA4 ;
 DOM1 = 'SURFACE'  LINEXT1 'PLAN' ;

 'OPTION' 'ELEM' TRI3 ;
 DOM2 = 'SURFACE'  LINEXT2 'PLAN' ;

 DOMTOT = DOM1 'ET' DOM2;
 'ELIMINATION' 1D-6 DOMTOT;

 CHPBRU = ('NOMC' 'UX' ('BRUI' 'BLAN' 'UNIF' 0.0  0.4 DOMTOT)
           'NATU' 'DISCRET') 'ET'
          ('NOMC' 'UY' ('BRUI' 'BLAN' 'UNIF' 0.0  0.2 DOMTOT)
           'NATU' 'DISCRET') ;
            
 'FORME' CHPBRU ;

 'SI' GRAPH ;
    'TRACER' DOMTOT ;
 'FINSI' ;
 
 $DOMTOT = 'DOMA' DOMTOT ;
 VOLUME = 'DOMA' $DOMTOT 'VOLUME' ;

*
**** 'MDIA' pour la creation d'une matrice identité
*                                  matrice identité permuté
*

 RV = 'EQEX' $DOMTOT 'ITMA' 10 
   'OPTI' 'VF' 'IMPL' 'CENTREE'
   'ZONE' $DOMTOT 'OPER' 'MDIA'
   ('INVERSE' ($DOMTOT . 'XXVOLUM'))
   'INCO' 'UX' 'UX'
   'ZONE' $DOMTOT 'OPER' 'MDIA'
   ('INVERSE' ($DOMTOT . 'XXVOLUM'))
   'INCO' 'UY' 'UY'    ;

 RV . 'INCO' = 'TABLE' 'INCO' ;
 RV . 'INCO' . 'UX' = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 0.0 ;
 RV . 'INCO' . 'UY' = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 0.0 ;

 MDIA (RV . '1MDIA') ;
 MAT4 = RV . '1MDIA' . 'MATELM' ;

 MDIA (RV . '2MDIA') ;
 MAT5 = RV . '2MDIA' . 'MATELM' ;

 MAT6 = MAT4 'ET' MAT5 ;

 UN = ('NOMC' 'UX' ('BRUI' 'BLAN' 'UNIF' 0.0  0.4 $DOMTOT . 'CENTRE')
       'NATU' 'DISCRET') 'ET'
      ('NOMC' 'UY' ('BRUI' 'BLAN' 'UNIF' 0.0  0.2 $DOMTOT . 'CENTRE')
       'NATU' 'DISCRET') ;

 UN1 = 'KOPS' MAT6 'MULT' UN ;
 
 ERRO = 'MAXIMUM' (UN1 '-' UN) 'ABS' ;

 'SI' (ERRO > 1.0D-12) ;
      'MESSAGE' 'Probleme en KOPS ou en MDIA' ;
      'ERREUR' 5 ;
 'FINSI' ;

* Matrice identité permuté
* Variable primale: 'UX'
* Variable duale  : 'UY'
 
 RV = 'EQEX' $DOMTOT 'ITMA' 10 
   'OPTI' 'VF' 'IMPL' 'CENTREE'
   'ZONE' $DOMTOT 'OPER' 'MDIA'
   ('INVERSE' ($DOMTOT . 'XXVOLUM'))
   'INCO' 'UX' 'UY' ;

 RV . 'INCO' = 'TABLE' 'INCO' ;
 RV . 'INCO' . 'UX' = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 0.0 ;
 RV . 'INCO' . 'UY' = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' 0.0 ;

 MDIA (RV . '1MDIA') ;
 MAT4 = RV . '1MDIA' . 'MATELM' ;

 UN1 = ('NOMC' 'UX' ('BRUI' 'BLAN' 'UNIF' 0.0  0.4 $DOMTOT . 'CENTRE')
        'NATU' 'DISCRET') ;
 UN2 = 'NOMC' 'UY' UN1 'NATU' 'DISCRET' ;

 UN3 = 'KOPS' MAT4 'MULT' UN1 ;
 
 ERRO = 'MAXIMUM' (UN2 '-' UN3) 'ABS' ;

 'SI' (ERRO > 1.0D-12) ;
      'MESSAGE' 'Probleme en KOPS ou en MDIA' ;
      'ERREUR' 5 ;
 'FINSI' ;

*
**** 'KOPS' 'MATIDE' pour la creation d'une matrice identité
*

 LMOT = 'MOTS' 'UX' 'UY' ;

 COEF = 4.0 ;
 
 MAT1 = 'KOPS' 'MATIDE' LMOT ($DOMTOT . 'CENTRE') 'MATRIK' ;
 MAT2 = 'KOPS' 'MATIDE' LMOT ($DOMTOT . 'CENTRE') 'MATRIK' ;
 MAT3 = 'KOPS' 'MATIDE' LMOT ($DOMTOT . 'CENTRE') 'MATRIK' ;

*
**** Distibutivité entre '+' et 'MULT'
*

 MATR1 = ('KOPS' MAT1 'MULT' COEF) 'ET'
         ('KOPS' MAT2 'MULT' COEF) 'ET'
         ('KOPS' MAT3 'MULT' COEF) ;

 MATR2 = 'KOPS' (MAT1 'ET' MAT2 'ET' MAT3)
         'MULT' COEF ;
 
 UN = ('MANUEL' 'CHPO' ($DOMTOT . 'CENTRE') 2
       'UX' 1.0 'UY' 0.0 'NATU' 'DISCRET') ;
 
 RIS1 = ('KOPS' MATR1 'MULT' UN) ;
 RIS2 = ('KOPS' MATR2 'MULT' UN) ;    
 RISEX = ('MANUEL' 'CHPO' ($DOMTOT . 'CENTRE') 2
       'UX' (COEF '*' 3.) 'UY' 0.0 'NATU' 'DISCRET') ;

*
***         

 ERRO = 'MAXIMUM' (RIS1 '-' RISEX) 'ABS' ;
 ERRO = 'MAXIMUM' ('PROG' ERRO ('MAXIMUM' (RIS1 '-' RISEX) 'ABS')) ;

 'SI' (ERRO > 1.0D-12) ;
      'MESSAGE' 'Probleme en ET or en KOPS ' ;
      'ERREUR' 5 ;
 'FINSI' ;

* Les CHPOINTs et les MATRIKs vides

 CHPVIDE MATVID = 'KOPS' 'MATRIK' ;

 MATR3 = MATR2 'ET' ('KOPS' MATVID 'MULT' 17.5D0) ;
 RIS3 = ('KOPS' MATR3 'MULT' UN) 'ET' (CHPVIDE '*' 2.1D0)
        'ET' ('KOPS' CHPVIDE 'MULT' 12.2D0) ;

 ERRO = 'MAXIMUM' (RIS3 '-' RISEX) 'ABS' ;

 'SI' (ERRO > 1.0D-12) ;
      'MESSAGE' 'Probleme en ET or en KOPS ' ;
      'ERREUR' 5 ;
 'FINSI' ;
 
 
 'FIN' ;
 

 

 

 

