Télécharger testalea.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : testalea.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. GRAPH = faux ;
  5.  
  6. ********************* CAS TEST : testalea.dgibi ************************
  7. *
  8. * Cas-Test vérifiant le bon fonctionnement de l'opérateur 'ALEA'
  9. * avec différentes options.
  10. * Test de la bonne statistique du champ résultat.
  11. *
  12. ************************************************************************
  13. *
  14. * Paramètres d'entrée :
  15. * ---------------------
  16.  
  17. 'OPTION' echo 1 ;
  18. 'OPTION' 'DIME' 2 'ELEM' 'QUA4' ;
  19. 'OPTION' 'TRACER' PSC ;
  20.  
  21. * Vérifie la syntaxe et les différentes possibilités d'usage ?
  22. verisynt = vrai ;
  23.  
  24. * Vérifie la corection statistique des résultats ?
  25. veriresu = vrai ;
  26.  
  27. * Longueur de corrélation :
  28. portee = .7 ;
  29.  
  30. * Moyenne et Ecart-type du Logarithme népérien de perméabilité :
  31. VALYM = -4.;
  32. SIGMAY = 1. ;
  33. VARIAN = sigmay * sigmay ;
  34.  
  35.  
  36. *======================================================================
  37. *== ==
  38. *== PROCEDURES ==
  39. *== ==
  40. *======================================================================
  41.  
  42.  
  43. 'DEBPROC' FCT xtab*'TABLE' p*'LISTREEL' ;
  44. * pour la procédure AJUSTE
  45. * Calcul de la fonction objectif
  46. * tbfonc . 'F' . i (fonction non-linéaire précédée d'un coef. inconnu n°i)
  47. * tbfonc . 'G' (fonction non-linéaire non précédée d'un coef. inconnu)
  48. * y = q^i f_i(x,p) + g(x,p)
  49. x = xtab . 1 ;
  50. n = 'DIME' x ;
  51. b = 'EXTR' p 1;
  52. tbfonc = 'TABLE';
  53. tbfonc.'F' = 'TABLE';
  54. tbfonc.'F' . 1 = 'EXP' (-1. / b * x);
  55. 'FINPROC' tbfonc;
  56.  
  57. 'DEBPROC' DERI xtab*'TABLE' p*'LISTREEL';
  58. * pour la procédure AJUSTE
  59. * Calcul de la dérivée de la fonction objectif par rapport aux
  60. * paramètres non linéaires
  61. * tbderi . 'F' . i . k (dérivée par rapport au param k de la fonction f_i)
  62. * tbderi . 'G' . k (dérivée par rapport au param k de la fonction g)
  63. * dy_k / dp_k= q^i (df_i(x,p) / dp_k) + (dg(x,p) / dp_k)
  64. x = xtab . 1;
  65. n = 'DIME' x;
  66. b = 'EXTR' p 1;
  67. tbderi = 'TABLE';
  68. tbderi . 'F' = 'TABLE';
  69. tbderi . 'F' . 1 = 'TABLE';
  70. tbderi . 'F' . 1 . 1 = x / b / b * ('EXP' (-1. * x / b)) ;
  71. 'FINPROC' tbderi;
  72.  
  73. *======================================================================
  74. *== ==
  75. *== PROGRAMME PRINCIPAL ==
  76. *== ==
  77. *======================================================================
  78.  
  79. * ===========================================
  80. * Test de la syntaxe et des différents usages
  81. * ===========================================
  82.  
  83. 'SI' verisynt ;
  84.  
  85. * Création maillage (grossier) :
  86. * ------------------------------
  87. * Nombre de mailles pour 1 lambda :
  88. Np = 1.;
  89.  
  90. * Dimensions :
  91. lx = 2. * portee;
  92. ly = 2. * portee;
  93. lz = 2. * portee;
  94.  
  95. * Discrétisation :
  96. * le +10d-10 sert à compenser l'imprécision machine pour ne pas avoir
  97. * des valeurs de nx et ny trop petites de 1
  98. nx = 'ENTIER' (lx / portee * Np + 0.0001) ;
  99. ny = 'ENTIER' (ly / portee * Np + 0.0001) ;
  100. nz = 'ENTIER' (lz / portee * Np + 0.0001) ;
  101.  
  102. * Points :
  103. p1 = 0. 0. ;
  104. p2 = lx 0. ;
  105. p3 = lx ly ;
  106. p4 = 0. ly ;
  107.  
  108. * Droites :
  109. p1p2 = 'DROIT' p1 p2 nx ;
  110. p2p3 = 'DROIT' p2 p3 ny ;
  111. p3p4 = 'DROIT' p3 p4 nx ;
  112. p4p1 = 'DROIT' p4 p1 ny ;
  113.  
  114. * Surface :
  115. carre = 'SURFACE' (p1p2 'ET' p2p3 'ET' p3p4 'ET' p4p1) ;
  116.  
  117. * domaine
  118. DOMHYB = 'CHANGER' CARRE 'QUAF';
  119.  
  120. * modèle :
  121. MODHYB = 'MODELE' DOMHYB 'DARCY' 'ISOTROPE' ;
  122.  
  123. * points centres :
  124. HYSOM = 'DOMA' MODHYB 'SOMMET';
  125. HYCEN = 'DOMA' MODHYB 'CENTRE';
  126.  
  127. * -- Début tests syntaxiques --
  128. * Syntaxe de base
  129. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB 'GRAVITE'
  130. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM
  131. 'LAMBDA1' portee (0. 1.) ;
  132.  
  133. YY = 'ALEA' 'BANDES_TOURNANTES' modhyb 'GRAVITE'
  134. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  135.  
  136. * Syntaxes alternatives
  137.  
  138. *- en 2D
  139. * champ aléatoire dans une direction 1D
  140. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB 'GRAVITE'
  141. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  142.  
  143. 'SI' GRAPH ;
  144. 'TITRE' 'Champ aleatoire unidirectionnel 2D, bandes tournantes';
  145. 'TRACER' MODHYB YY ;
  146. 'FINSI' ;
  147.  
  148. * champ aléatoire dans une direction 1D en spécifiant la direction
  149. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB 'GRAVITE'
  150. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM
  151. 'LAMBDA1' portee (0. 1.) ;
  152.  
  153. * champ point centre
  154. YY = 'ALEA' 'BANDES_TOURNANTES' HYCEN
  155. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  156.  
  157. * champ point sommet (on fournit en test le maillage de 'QUA4')
  158. YY = 'ALEA' 'BANDES_TOURNANTES' CARRE
  159. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  160.  
  161. * champ par élément sommet
  162. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB 'NOEUD'
  163. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  164.  
  165. * champ par élément centre
  166. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB 'GRAVITE'
  167. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  168.  
  169. * sans le mot-clef 'MOYENNE'
  170. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB 'GRAVITE'
  171. 'EXPO' 'SIGMA' sigmay 'LAMBDA' portee ;
  172.  
  173. * avec un modèle mécanique
  174. modmec = 'MODELE' CARRE 'MECANIQUE' ;
  175. YY = 'ALEA' 'BANDES_TOURNANTES' modmec 'MASSE'
  176. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  177.  
  178. YY = 'ALEA' 'BANDES_TOURNANTES' modmec 'STRESSES'
  179. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  180.  
  181. * avec un double modèle dont l'un seulement convient
  182. mod2 = modhyb 'ET' modmec ;
  183. YY = 'ALEA' 'BANDES_TOURNANTES' mod2 'RIGIDITE'
  184. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  185.  
  186. * anisotrope penché
  187. portee1 = 3*portee ;
  188. portee2 = .2*portee ;
  189. vec1 = 2. 1. ;
  190. vec2 = -1. 2.;
  191. YY = 'ALEA' 'BANDES_TOURNANTES' CARRE
  192. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM
  193. 'LAMBDA1' portee1 vec1 'LAMBDA2' portee2 vec2 ;
  194.  
  195. *- en 3D
  196. 'SI' vrai ;
  197. 'OPTION' 'DIME' 3 'ELEM' 'CUB8' ;
  198. cube = 'VOLUME' carre nz 'TRANSLATION' (0 0 lz) ;
  199. domhyb3D = 'CHANGER' cube 'QUAF' ;
  200. modhyb3D = 'MODELE' DOMHYB3D 'DARCY' 'ISOTROPE' ;
  201.  
  202. * plan
  203. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB 'GRAVITE'
  204. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee;
  205. 'SI' GRAPH;
  206. 'TITRE' 'Champ aleatoire plan en 3D, bandes tournantes';
  207. 'TRACER' MODHYB YY ;
  208. 'FINSI' ;
  209.  
  210. * isotrope
  211. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB3D 'GRAVITE'
  212. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee;
  213. 'SI' GRAPH;
  214. 'TITRE' 'Champ aleatoire isotrope 3D, bandes tournantes';
  215. 'TRACER' MODHYB YY ;
  216. 'FINSI' ;
  217.  
  218. * unidirectionnel
  219. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB3D 'GRAVITE'
  220. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM
  221. 'LAMBDA1' portee (0 0 1) ;
  222. 'SI' GRAPH;
  223. 'TITRE' 'Champ aleatoire monodirectionnel 3D, bandes tournantes';
  224. 'TRACER' MODHYB YY ;
  225. 'FINSI' ;
  226.  
  227. * bidirectionnel
  228. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB3D 'GRAVITE'
  229. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM
  230. 'LAMBDA1' portee 'LAMBDA2' portee ;
  231. * 'SI' GRAPH;
  232. 'TITRE' 'Champ aleatoire bidirectionnel 3D, bandes tournantes';
  233. 'TRACER' MODHYB YY ;
  234. * 'FINSI' ;
  235.  
  236. * tridirectionnel stratifié
  237. YY = 'ALEA' 'BANDES_TOURNANTES' MODHYB3D 'GRAVITE'
  238. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM
  239. 'LAMBDA1' portee 'LAMBDA2' portee 'LAMBDA3' (.1*portee);
  240. 'SI' GRAPH;
  241. 'TITRE' 'Champ aleatoire stratifie 3D, bandes tournantes';
  242. 'TRACER' MODHYB YY ;
  243. 'FINSI' ;
  244.  
  245. 'OPTION' 'DIME' 2 ;
  246. 'FINSI';
  247.  
  248. 'FINSI' ;
  249.  
  250. * =====================================
  251. * Test de la qualité de la génération :
  252. * =====================================
  253. * en 2D
  254.  
  255. 'SI' veriresu ;
  256.  
  257. *-- on utilise un maillage plus fin et plus vaste :
  258. portee1 = portee ;
  259. portee2 = portee ;
  260. vec1 = (1. 0.) ;
  261. vec2 = (0. 1.) ;
  262. lx = 20. * portee1;
  263. ly = 20. * portee2;
  264. Np = 5.;
  265. nx = 'ENTIER' (lx / portee * Np + 0.0001) ;
  266. ny = 'ENTIER' (ly / portee * Np + 0.0001) ;
  267.  
  268. p1 = 0. 0. ;
  269. p2 = lx 0. ;
  270. p3 = lx ly ;
  271. p4 = 0. ly ;
  272. p1p2 = 'DROIT' p1 p2 nx ;
  273. p2p3 = 'DROIT' p2 p3 ny ;
  274. p3p4 = 'DROIT' p3 p4 nx ;
  275. p4p1 = 'DROIT' p4 p1 ny ;
  276. carre = 'SURFACE' (p1p2 'ET' p2p3 'ET' p3p4 'ET' p4p1) ;
  277. DOMHYB = 'CHANGER' CARRE 'QUAF';
  278. MODHYB = 'MODELE' DOMHYB 'DARCY' 'ISOTROPE' ;
  279.  
  280. * génération :
  281. YY = 'ALEA' 'BANDES_TOURNANTES' CARRE
  282. 'EXPO' 'SIGMA' sigmay 'MOYENNE' VALYM 'LAMBDA' portee ;
  283.  
  284. * Tracé :
  285. 'SI' GRAPH;
  286. 'TITRE' ('CHAINE' 'Champ aleatoire fin 2D, bandes tournantes, '
  287. ((lx / portee) @ARR 0) 'x' ((ly / portee) @ARR 0) ', l/'
  288. (Np @ARR 0) ) ;
  289. 'TRACER' CARRE YY ('CONTOUR' CARRE) ;
  290. 'FINSI' ;
  291.  
  292. *-- Calcul de la moyenne
  293. moyc = ('MINIMUM' ('RESULT' yy)) / ('NBNO' ('EXTR' yy 'MAIL')) ;
  294. mess 'moyenne : ' (moyc @ARR 3) ', objectif : ' (valym @ARR 3) ;
  295. err1 = 'ABS' ((moyc - valym) / ('MAXIMUM' ('PROG' moyc valym) 'ABS'));
  296.  
  297. *-- Calcul de l'écart-type
  298. sigc = ( ('MINIMUM' ('RESULT' ((yy - moyc) * (yy - moyc))))
  299. / ('NBEL' ('EXTR' yy 'MAIL')) ) ** .5 ;
  300. mess 'écart-type : ' (sigc @ARR 3) ', objectif : ' (sigmay @ARR 3) ;
  301. err2 = 'ABS' ((sigc - sigmay) / sigmay) ;
  302.  
  303. ******************************************************
  304. 'SI' faux ;
  305. * l'opérateur STAT n'est pas encore évolué.
  306.  
  307. *-- Calcul de la fonction de corrélation
  308. * ====================================
  309. * on opère une transformation de l'espace réel qui ramène au cas
  310. * isotrope de longueur de corrélation 1.
  311. 'DEPLACER' carre 'AFFI' (1./portee1) (0. 0.) vec1 ;
  312. 'DEPLACER' carre 'AFFI' (1./portee2) (0. 0.) vec2 ;
  313. portee0 = 1. ;
  314.  
  315. lidist = 'PROG' 0. 'PAS' (portee0 / Np) lx ;
  316. YYM = 'MANU' 'CHPO' CARRE 1 'SCAL' moyc ;
  317. 'SI' (portee1 'EGA' portee2) ;
  318. ev0 = 'STAT' 'COVA' YY YYM lidist 'REGU' ;
  319. 'SINON' ;
  320. ev0 = 'STAT' 'COVA' YY YYM lidist ;
  321. 'FINSI' ;
  322.  
  323. evcov = 'COULEUR' ('EXTR' ev0 'COURBE' 1) 'ROUGE' ;
  324. evnb = 'COULEUR' (('EXTR' ev0 'COURBE' 2)) 'VERT' ;
  325. evnb = evnb * (varian / ('MAXIMUM' ('EXTR' evnb 'ORDO'))) ;
  326.  
  327. liabs = 'EXTR' evcov 'ABSC' ;
  328. licov = 'EXTR' evcov 'ORDO' ;
  329. * on impose la valeur de la variance calculée avant (rétroactif)
  330. 'REMPLACER' licov 1 (sigc * sigc) ;
  331.  
  332. liordth = varian * ('EXP' (-1. * liabs / portee0)) ;
  333. evcovth = 'EVOL' 'DEFA' 'MANU' 'h' liabs 'Cyy' liordth ;
  334.  
  335. *-- Calcul de la longueur de corrélation
  336. * ====================================
  337. * On cale la fonction evcov sur
  338. * y = varian * exp (- l * x)
  339. * sur les 10 premières longueurs :
  340. litest = 'MASQUE' liabs 'EGINFE' (10. * portee0) ;
  341. ntest = 'ENTIER' ('RESULT' litest) ;
  342. liind = 'LECT' 1 'PAS' 1 ntest ;
  343. liabs2 = 'EXTR' liabs liind ;
  344. licov2 = 'EXTR' licov liind ;
  345.  
  346. * on part d'un jeu de couple yi = f(xi)
  347.  
  348. * utilisation de la procedure AJUSTE :
  349. * on cherche a identifier les parametres a et b de la fonction
  350. * y = a * (exp (- x / b))
  351. *
  352. * on part d'un jeu de couple yj = f(xj)
  353. * p = ensemble des paramètres k mis-en-jeu dans des expressions non linéaires
  354. * q = ensemble des paramètres i mis-en-jeu dans des expressions linéaires
  355. *
  356.  
  357. * Table des couples (x_j,y_j) à atteindre :
  358. * NOTA : l'indice 'F' suivant aurait dû s'appeller plutôt 'Y'.
  359. tab1 = 'TABLE' ;
  360. tab1.'X' = 'TABLE' ;
  361. tab1.'X' . 1 = liabs ;
  362. tab1.'F' = licov;
  363.  
  364. * nombre de paramètres non linéaires
  365. tab1.'K' = 1;
  366. * nombre de paramètres linéaires (nb de jeux de valeurs à caler)
  367. tab1.'L' = 1;
  368.  
  369. * espace de discrétisation pour les paramètres
  370. pmin = 'PROG' 0.001;
  371. pmax = 'PROG' 10.;
  372. prc = 'PROG' 0.0001;
  373.  
  374. tab1.'MXTER' = 150;
  375. tab1.'PMIN' = pmin ;
  376. tab1.'PMAX' = pmax ;
  377. tab1.'PRECISION' = prc ;
  378.  
  379. * Calcul de l'ajustement de la variance et de la longueur de
  380. * corrélation :
  381. q p = AJUSTE tab1;
  382.  
  383. varical = 'EXTR' q 1 ;
  384. lambcal = 'EXTR' p 1 ;
  385.  
  386. ycal = varical * ('EXP' (-1. / lambcal * liabs));
  387. evcal = 'EVOL' 'ROUG' 'MANU' 'X' liabs 'Y1' ycal;
  388.  
  389. portcal = 1. / lambcal ;
  390. err3 = 'ABS' ((portcal - portee0) / portee0) ;
  391.  
  392. *-- tracé de la corrélation spatiale
  393. 'SI' GRAPH;
  394. tabdess = 'TABLE' ;
  395. tabdess.1 = 'MOT' ' ';
  396. tabdess.2 = 'MOT' 'TIRR';
  397. tabdess.3 = 'MOT' 'TIRC';
  398. tabdess.4 = 'MOT' 'TIRL';
  399. tabdess.titre = table ;
  400. tabdess.titre.1 = 'CHAINE' 'Bantou';
  401. tabdess.titre.2 = 'CHAINE' 'Calage' ;
  402. tabdess.titre.3 = 'CHAINE' 'Theorique' ;
  403. tabdess.titre.4 = 'CHAINE' 'Nb couples' ;
  404. titdess = 'Correlation du champ aleatoire, bandes tournantes' ;
  405. 'DESSIN' (evcov 'ET' evcal 'ET' evcovth 'ET' evnb)
  406. 'MIMA' 'LEGE' 'TITRE' titdess tabdess 'AXES'
  407. 'XBOR' 0. ('MINIMUM' ('PROG' lx (10.*portee0))) ;
  408. 'FINSI' ;
  409.  
  410. 'SINON' ;
  411. err3 = 0;
  412. 'FINSI' ;
  413. ******************************************************
  414.  
  415. *-- Les valeurs calculées doivent être conformes aux valeurs théoriques
  416. * à 5% pour la moyenne et l'écart-type, 20% pour la longueur de corrélation.
  417. mess 'erreurs sur la moyenne, écart-type et covariance (%) = ';
  418. mess (100 * err1) (100 * err2) (100 * err3) ;
  419.  
  420. 'SI' ((err1 > 0.05) 'OU' (err2 > 0.05) 'OU' (err3 > 0.20));
  421. 'ERREUR' 5;
  422. 'SINON';
  423. 'ERREUR' 0;
  424. 'FINSI';
  425.  
  426. 'FINSI' ; 'COMM' 'finsi veriresu' ;
  427.  
  428. 'TEMPS' 'SGAC' 'IMPR' ;
  429.  
  430. 'FIN' ;
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales