Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utqqua.F
1       subroutine utqqua ( lequad, qualit, surf,
2      >                    coonoe, somare, arequa )
3 c ______________________________________________________________________
4 c
5 c                             H O M A R D
6 c
7 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
8 c
9 c Version originale enregistree le 18 juin 1996 sous le numero 96036
10 c aupres des huissiers de justice Simart et Lavoir a Clamart
11 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
12 c aupres des huissiers de justice
13 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
14 c
15 c    HOMARD est une marque deposee d'Electricite de France
16 c
17 c Copyright EDF 1996
18 c Copyright EDF 1998
19 c Copyright EDF 2002
20 c Copyright EDF 2020
21 c ______________________________________________________________________
22 c
23 c     UTilitaire : Qualite d'un QUAdrangle
24 c     --           -            ---
25 c ______________________________________________________________________
26 c
27 c    on utilise le critere decrit dans
28 c     'Pascal Jean Frey, Paul-Louis George'
29 c     'Maillages - applications aux elements finis, Hermes, 1999'
30 c
31 c     Chapitre 8 'Optimisation des maillages', page 610
32 c
33 c                                           hmax * hs
34 c    le critere de qualite, q, vaut alpha * ---------
35 c                                             Smin
36 c    hmax est la plus grande longueur entre les 4 cotes et les
37 c    2 diagonales
38 c    hs est la moyenne quadratique des longueur des cotes
39 c    Smin est la plus petite des surfaces des 4 triangles que l'on
40 c    peut tracer dans le quadrangle
41 c    alpha est un coefficient de normalisation pour que le critere q
42 c    vaille 1 pour un carre ==> alpha = racine(2)/8
43 c
44 c    pour tout autre quadrangle, le critere est donc superieur a 1
45 c ______________________________________________________________________
46 c .        .     .        .                                            .
47 c .  nom   . e/s . taille .           description                      .
48 c .____________________________________________________________________.
49 c . lequad . e   .  1     . numero du quadrangle a examiner            .
50 c . qualit .  s  .  1     . qualite                                    .
51 c . surf   .  s  .  1     . surface                                    .
52 c . coonoe . e   . nbnoto . coordonnees des noeuds                     .
53 c .        .     . * sdim .                                            .
54 c . somare . e   .2*nbarto. numeros des extremites d'arete             .
55 c . arequa . e   .nbquto*4. numeros des 4 aretes des quadrangles       .
56 c .____________________________________________________________________.
57 c
58 c====
59 c 0. declarations et dimensionnement
60 c====
61 c
62 c 0.1. ==> generalites
63 c
64       implicit none
65       save
66 c
67       character*6 nompro
68       parameter ( nompro = 'UTQQUA' )
69 c
70 #include "nblang.h"
71 c
72 c 0.2. ==> communs
73 c
74 #include "nombno.h"
75 #include "nombar.h"
76 #include "nombqu.h"
77 #include "envca1.h"
78 c
79 c 0.3. ==> arguments
80 c
81       double precision qualit, surf, coonoe(nbnoto,sdim)
82 c
83       integer somare(2,nbarto), arequa(nbquto,4)
84 c
85       integer lequad
86 c
87 c 0.4. ==> variables locales
88 c
89       integer a1, a2, a3, a4
90       integer sa1a2, sa2a3, sa3a4, sa4a1
91       integer iaux
92 c
93       double precision cooloc(4,3)
94 c
95 c 0.5. ==> initialisations
96 c ______________________________________________________________________
97 c
98 c====
99 c 1. le calcul
100 c====
101 c
102 c 1.1. ==> les aretes
103 c
104       a1 = arequa(lequad,1)
105       a2 = arequa(lequad,2)
106       a3 = arequa(lequad,3)
107       a4 = arequa(lequad,4)
108 c
109 c 1.2. ==> les sommets
110 c
111       call utsoqu ( somare, a1, a2, a3, a4,
112      >              sa1a2, sa2a3, sa3a4, sa4a1 )
113 c
114       do 12 , iaux = 1 , sdim
115         cooloc(1,iaux) = coonoe(sa1a2,iaux)
116         cooloc(2,iaux) = coonoe(sa2a3,iaux)
117         cooloc(3,iaux) = coonoe(sa3a4,iaux)
118         cooloc(4,iaux) = coonoe(sa4a1,iaux)
119   12  continue
120 c
121 c 1.3. ==> qualite et surface
122 c
123       call utqqu0 ( qualit, surf, sdim, cooloc )
124 c
125       end