*
************************************************************************
* Section : Mathematiques Fonctions
************************************************************************
* fichier : pvec2.dgibi
*
*
'SAUTER' 2 'LIGNE' ;
'MESSAGE' ' Execution de pvec2.dgibi' ;
'SAUTER' 2 'LIGNE' ;
*
interact = faux ;
*
************************************************************************
* NOM         : PVEC2
* DESCRIPTION : Cas-test pour l'opérateur PVEC avec des MCHAMLs
*               On vérifie en 2D :
*               | PVEC A |^2 = | A | ^ 2
*               | PSCA A (PVEC A) |^2 = 0
*               et en 3D l'égalité :
*               | PVEC A B |^2 + | PSCA A B |^2 = | A |^2 | B |^2
*
*
* LANGAGE     : GIBIANE-CAST3M
* AUTEUR      : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
*               mél : stephane.gounand@cea.fr
**********************************************************************
* VERSION    : v1, 30/09/2011, version initiale
* HISTORIQUE : v1, 30/09/2011, création
* HISTORIQUE : pvec2.dgibi inspire de pvec.dgibi (BP,2020)
* HISTORIQUE :
************************************************************************
*
lpass = vrai ;

lnew = VRAI ;
*lnew = FAUX ;
* procedures de produit vectoriel temporaire
* 2D
DEBP @PVEC2 che1 lmo1 lmo3;
che3 = (EXCO che1 (extr lmo1 2) (extr lmo3 1))
     - (EXCO che1 (extr lmo1 1) (extr lmo3 2));
FINP che3;
* 3D
DEBP @PVEC3 che1 che2 lmo1 lmo2 lmo3;
che3_1 = (   (EXCO che1 (extr lmo1 2) (extr lmo3 1)) 
           * (EXCO che2 (extr lmo2 3) (extr lmo3 1)) )
       - (   (EXCO che1 (extr lmo1 3) (extr lmo3 1)) 
           * (EXCO che2 (extr lmo2 2) (extr lmo3 1)) ) ;
che3_2 = (   (EXCO che1 (extr lmo1 3) (extr lmo3 2)) 
           * (EXCO che2 (extr lmo2 1) (extr lmo3 2)) )
       - (   (EXCO che1 (extr lmo1 1) (extr lmo3 2)) 
           * (EXCO che2 (extr lmo2 3) (extr lmo3 2)) ) ;
che3_3 = (   (EXCO che1 (extr lmo1 1) (extr lmo3 3)) 
           * (EXCO che2 (extr lmo2 2) (extr lmo3 3)) )
       - (   (EXCO che1 (extr lmo1 2) (extr lmo3 3)) 
           * (EXCO che2 (extr lmo2 1) (extr lmo3 3)) ) ;
che3 = che3_1 et che3_2 et che3_3;
FINP che3;

************************************************************************
*                               CAS 2D                                 *
************************************************************************

'OPTI' 'DIME' 2 'ELEM' 'QUA4' ;

************************************************************************
* maillage ET MODELE
************************************************************************

p0 = 0. 0. ; p1 = 1. 0.22 ;
gen1 = 'DROIT' 2 p0 p1 ;
s1 =  'TRANSLATION' gen1 2 (0. 1.) ;
gen2 = 'COTE' 3 s1 ;
s2 =  'TRANSLATION' gen2 2 (0. 1.) ;
gen3 = 'COTE' 3 s2 ;
s3 =  'TRANSLATION' gen3 2 (0. 1.) ;
st = s1 'ET' s2 'ET' s3 ;
*'TRACER' st ;
*MODT = MODE st MECANIQUE ELASTIQUE ISOTROPE;

************************************************************************
* champs
************************************************************************

ux1 = 'BRUIT' 'BLAN' 'UNIF' 0. 1. (s1 'ET' s2) ;
uy1 = 'BRUIT' 'BLAN' 'UNIF' 0. 1. (s1 'ET' s2) ;
ux1 = chan 'CHAM' ux1 st;
uy1 = chan 'CHAM' uy1 st;

vA = ('NOMC' 'UX' ux1) '+'  ('NOMC' 'UY' uy1) ;
*vB = ('NOMC' 'FX' ux2) '+'  ('NOMC' 'FY' uy2) ;

************************************************************************
* operations vectorielles
************************************************************************

l1 = 'MOTS' 'UX' 'UY' ; l2 = 'MOTS' 'FX' 'FY' ;
si lnew;  veca =  PVEC  vA l1 l2 ;
sinon;    veca = @PVEC2 vA l1 l2 ;
finsi;
* opti donn 5;
na   = 'PSCAL' vA vA l1 l1 ;
nveca = 'PSCAL' veca veca l2 l2 ;
aveca = 'PSCAL' vA veca l1 l2 ;
naveca = '**' aveca 2 ;
*
nna = 'MAXIMUM' ('-' na nveca) 'ABS' ;
nnb = 'MAXIMUM' naveca ;
*
tolerr = 1.D-13 ;
tst1 = 'EGA' nna 0. tolerr ;
tst2 = 'EGA' nnb 0. tolerr ;
*
*opti donn 5;

************************************************************************
*                               CAS 3D                                 *
************************************************************************
'OPTI' 'DIME' 3 ;
*
uz1 = 'BRUIT' 'BLAN' 'UNIF' 0. 1. (s1 'ET' s2) ;
ux2 = 'BRUIT' 'BLAN' 'UNIF' 0. 1. (s1 'ET' s2 'ET' s3) ;
uy2 = 'BRUIT' 'BLAN' 'UNIF' 0. 1. (s2 'ET' s3) ;
uz2 = 'BRUIT' 'BLAN' 'UNIF' 0. 1. s2  ;
uz1 = chan 'CHAM' uz1 st;
ux2 = chan 'CHAM' ux2 st;
uy2 = chan 'CHAM' uy2 st;
uz2 = chan 'CHAM' uz2 st;
*
vA = ('NOMC' 'UX' ux1) '+'  ('NOMC' 'UY' uy1) '+' ('NOMC' 'UZ' uz1) ;
vB = ('NOMC' 'FX' ux2) '+'  ('NOMC' 'FY' uy2) '+' ('NOMC' 'FZ' uz2) ;
l1 = 'MOTS' 'UX' 'UY' 'UZ' ; l2 = 'MOTS' 'FX' 'FY' 'FZ' ;
*
si lnew;  avecb =  PVEC  vA vB l1 l2 l1 ;
sinon;    avecb = @PVEC3 vA vB l1 l2 l1 ;
finsi;

ascab = 'PSCAL' vA vB l1 l2 ;

navecb = 'PSCAL' avecb avecb l1 l1 ;
nascab = '**' ascab 2 ;
na     = 'PSCAL' vA vA l1 l1 ;
nb     = 'PSCAL' vB vB l2 l2 ;
nab = '*' na nb ;
*
res = nab '-' navecb '-' nascab ;
nres = 'MAXIMUM' res 'ABS' ;
tst3 = 'EGA' nnb 0. tolerr ;
tst = tst1 'ET' tst2 'ET' tst3 ;

opti echo 0;

'MESSAGE' ('CHAINE' 'Test :')   ;
'MESSAGE' ('CHAINE' '         nna  = ' nna )  ;
'MESSAGE' ('CHAINE' '         nnb  = ' nnb )  ;
'MESSAGE' ('CHAINE' '         nres = ' nres)  ;
'SI' tst ;
   'MESSAGE' 'Test OK' ;
'SINON' ;   
   'MESSAGE' '!!! Test not passed  ' ;
'FINSI' ;
lpass = lpass 'ET' tst ;
*
'SAUTER' 2 'LIGNE' ;
'SI' lpass ;
   'MESSAGE' 'Tout sest bien passe' ;
'SINON' ;
   'MESSAGE' 'Il y a eu des erreurs' ;
'FINSI' ;   
'SAUTER' 2 'LIGNE' ;
'SI' interact ;
   'OPTION' 'DONN' 5 'ECHO' 1 ;
'FINSI' ;   
'SI' ('NON' lpass) ;
   'ERREUR' 5 ;
'FINSI' ;   

'FIN' ; 
 

 

 

