Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utb19a.F
diff --git a/src/tool/Utilitaire/utb19a.F b/src/tool/Utilitaire/utb19a.F
new file mode 100644 (file)
index 0000000..ffd3718
--- /dev/null
@@ -0,0 +1,540 @@
+      subroutine utb19a ( choix,
+     >                    coonoe, somare,
+     >                    hettri, aretri,
+     >                    famtri, cfatri,
+     >                    hetqua, arequa,
+     >                    famqua, cfaqua,
+     >                    tritet, cotrte, aretet, hettet,
+     >                    quahex, coquhe, arehex, hethex,
+     >                    facpyr, cofapy, arepyr, hetpyr,
+     >                    facpen, cofape, arepen, hetpen,
+     >                    nbiter,
+     >                    tbiau1, tabaur,
+     >                    ulbila,
+     >                    ulsort, langue, codret )
+c ______________________________________________________________________
+c
+c                             H O M A R D
+c
+c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
+c
+c Version originale enregistree le 18 juin 1996 sous le numero 96036
+c aupres des huissiers de justice Simart et Lavoir a Clamart
+c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
+c aupres des huissiers de justice
+c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
+c
+c    HOMARD est une marque deposee d'Electricite de France
+c
+c Copyright EDF 1996
+c Copyright EDF 1998
+c Copyright EDF 2002
+c Copyright EDF 2020
+c ______________________________________________________________________
+c
+c    UTilitaire - Bilan - option 19 - etape a
+c    --           -              --         -
+c  remarque : utb05a et utb19a sont des clones
+c ______________________________________________________________________
+c
+c but : controle des diametres des mailles
+c ______________________________________________________________________
+c .        .     .        .                                            .
+c .  nom   . e/s . taille .           description                      .
+c .____________________________________________________________________.
+c . choix  . e   .   1    . choix du traitement                        .
+c .        .     .        . 0 : creation et affichage des histogrammes .
+c .        .     .        . 2 : sortie du diametre des triangles       .
+c .        .     .        . 3 : sortie du diametre des tetraedres      .
+c .        .     .        . 4 : sortie du diametre des quadrangles     .
+c .        .     .        . 5 : sortie du diametre des pyramides       .
+c .        .     .        . 6 : sortie du diametre des hexaedres       .
+c .        .     .        . 7 : sortie du diametre des pentaedres      .
+c . coonoe . e   . nbnoto . coordonnees des noeuds                     .
+c .        .     . * sdim .                                            .
+c . somare . e   .2*nbarto. numeros des extremites d'arete             .
+c . hettri . e   . nbtrto . historique de l'etat des triangles         .
+c . aretri . e   .nbtrto*3. numeros des 3 aretes des triangles         .
+c . famtri . e   . nbtrto . famille des triangles                      .
+c . cfatri . e   . nctftr*. codes des familles des triangles           .
+c .        .     . nbftri .   1 : famille MED                          .
+c .        .     .        .   2 : type de triangle                     .
+c .        .     .        .   3 : numero de surface de frontiere       .
+c .        .     .        .   4 : famille des aretes internes apres raf.
+c .        .     .        . + l : appartenance a l'equivalence l       .
+c . hetqua . e   . nbquto . historique de l'etat des quadrangles       .
+c . arequa . e   .nbquto*4. numeros des 4 aretes des quadrangles       .
+c . famqua . e   . nbquto . famille des quadrangles                    .
+c . cfaqua . e   . nctfqu*. codes des familles des quadrangles         .
+c .        .     . nbfqua .   1 : famille MED                          .
+c .        .     .        .   2 : type de quadrangle                   .
+c .        .     .        .   3 : numero de surface de frontiere       .
+c .        .     .        .   4 : famille des aretes internes apres raf.
+c .        .     .        .   5 : famille des triangles de conformite  .
+c .        .     .        .   6 : famille de sf active/inactive        .
+c .        .     .        . + l : appartenance a l'equivalence l       .
+c . hettet . e   . nbteto . historique de l'etat des tetraedres        .
+c . tritet . e   .nbtecf*4. numeros des 4 triangles des tetraedres     .
+c . cotrte . e   .nbtecf*4. code des 4 triangles des tetraedres        .
+c . aretet . e   .nbteca*6. numeros des 6 aretes des tetraedres        .
+c . hethex . e   . nbheto . historique de l'etat des hexaedres         .
+c . quahex . e   .nbhecf*6. numeros des 6 quadrangles des hexaedres    .
+c . coquhe . e   .nbhecf*6. codes des 6 quadrangles des hexaedres      .
+c . arehex . e   .nbheca12. numeros des 12 aretes des hexaedres        .
+c . hetpyr . e   . nbpyto . historique de l'etat des pyramides         .
+c . facpyr . e   .nbpycf*5. numeros des 5 faces des pyramides          .
+c . cofapy . e   .nbpycf*5. codes des faces des pyramides              .
+c . arepyr . e   .nbpyca*8. numeros des 8 aretes des pyramides         .
+c . hetpen . e   . nbpeto . historique de l'etat des pentaedres        .
+c . facpen . e   .nbpecf*5. numeros des 5 faces des pentaedres         .
+c . cofape . e   .nbpecf*5. code des 5 faces des pentaedres            .
+c . arepen . e   .nbpeca*9. numeros des 9 aretes des pentaedres        .
+c . tbiau1 .  a  .    *   . liste des entites examinees                .
+c . tabaur .  a  .    *   . qualite des entites                        .
+c . nbiter . e   .   1    . numero de l'iteration courante             .
+c . ulbila . e   .   1    . unite logique d'ecriture du bilan          .
+c . ulsort . e   .   1    . unite logique de la sortie generale        .
+c . langue . e   .    1   . langue des messages                        .
+c .        .     .        . 1 : francais, 2 : anglais                  .
+c . codret .  s  .    1   . code de retour des modules                 .
+c .        .     .        . 0 : pas de probleme                        .
+c .        .     .        . 1 : probleme                               .
+c .____________________________________________________________________.
+c
+c====
+c 0. declarations et dimensionnement
+c====
+c
+c 0.1. ==> generalites
+c
+      implicit none
+      save
+c
+      character*6 nompro
+      parameter ( nompro = 'UTB19A' )
+c
+#include "nblang.h"
+#include "coftex.h"
+c
+c 0.2. ==> communs
+c
+#include "envex1.h"
+c
+#include "dicfen.h"
+#include "nbfami.h"
+#include "nombno.h"
+#include "nombar.h"
+#include "nombtr.h"
+#include "nombqu.h"
+#include "nombte.h"
+#include "nombhe.h"
+#include "nombpy.h"
+#include "nombpe.h"
+#include "envca1.h"
+#include "impr02.h"
+c
+c 0.3. ==> arguments
+c
+      double precision coonoe(nbnoto,sdim)
+      double precision tabaur(*)
+c
+      integer choix
+c
+      integer somare(2,nbarto)
+      integer hettri(nbtrto), aretri(nbtrto,3)
+      integer cfatri(nctftr,nbftri), famtri(nbtrto)
+      integer hetqua(nbquto), arequa(nbquto,4)
+      integer cfaqua(nctfqu,nbfqua), famqua(nbquto)
+      integer tritet(nbtecf,4), cotrte(nbtecf,4), aretet(nbteca,6)
+      integer hettet(nbteto)
+      integer quahex(nbhecf,6), coquhe(nbhecf,6), arehex(nbheca,12)
+      integer hethex(nbheto)
+      integer facpyr(nbpycf,5), cofapy(nbpycf,5), arepyr(nbpyca,8)
+      integer hetpyr(nbpyto)
+      integer facpen(nbpecf,5), cofape(nbpecf,5), arepen(nbpeca,9)
+      integer hetpen(nbpeto)
+      integer tbiau1(*)
+      integer nbiter
+c
+      integer ulbila
+      integer ulsort, langue, codret
+c
+c 0.4. ==> variables locales
+c
+      integer letria, lequad
+      integer iaux, jaux
+      integer nbvoto
+      integer nbeexa
+      integer nbqinf
+      integer tbiau2(1)
+c
+      double precision daux
+      double precision tbdaux(1)
+c
+      integer nbmess
+      parameter (nbmess = 10 )
+      character*80 texte(nblang,nbmess)
+c
+c 0.5. ==> initialisations
+c ______________________________________________________________________
+c
+c====
+c 1. titre
+c====
+c
+#include "impr01.h"
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,1)) 'Entree', nompro
+      call dmflsh (iaux)
+#endif
+c
+      texte(1,4) =
+     > '(//,3x,''DIAMETRES DES MAILLES'',/,3x,21(''=''))'
+      texte(1,5) = '(''Diametre '',a,'' des '',a,'' : '',g12.5)'
+      texte(1,6) = '(''Nombre de '',a,'' a examiner : '',i8)'
+c
+      texte(2,4) =
+     > '(//,3x,''DIAMETERS OF MESHES'',/,3x,19(''=''))'
+      texte(2,5) = '(''Diameter '',a,'' of '',a,'': '',g12.5)'
+      texte(2,6) = '(''Number of '',a,'' to be examined: '',i8)'
+c
+      write (ulsort,texte(langue,4))
+      write (ulbila,texte(langue,4))
+c
+      codret = 0
+c
+      nbvoto = nbteto + nbpyto + nbheto + nbpeto
+c
+      nbqinf = 0
+c
+c====
+c 2. calcul des diametres des tetraedres
+c===
+c
+      if ( choix.eq.0 .or. choix.eq.3 ) then
+c
+        if ( nbteto.ne.0 ) then
+c
+          iaux = 3
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'UTB19C_te', nompro
+#endif
+          call utb19c ( choix, iaux, nbteto, nbtecf, nbteca,
+     >                  coonoe, somare,
+     >                  aretri, arequa,
+     >                  hettet, tritet, cotrte, aretet,
+     >                  nbiter, tabaur,
+     >                  ulbila,
+     >                  ulsort, langue, codret )
+c
+        endif
+c
+      endif
+c
+c====
+c 3. calcul des diametres des pyramides
+c===
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '3. pyramides ; codret = ', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+      if ( choix.eq.0 .or. choix.eq.5 ) then
+c
+        if ( nbpyto.ne.0 ) then
+c
+          iaux = 5
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'UTB19C_py', nompro
+#endif
+          call utb19c ( choix, iaux, nbpyto, nbpycf, nbpyca,
+     >                  coonoe, somare,
+     >                  aretri, arequa,
+     >                  hetpyr, facpyr, cofapy, arepyr,
+     >                  nbiter, tabaur,
+     >                  ulbila,
+     >                  ulsort, langue, codret )
+c
+        endif
+c
+      endif
+c
+      endif
+c
+c====
+c 4. calcul des diametres des hexaedres
+c===
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '4. hexaedres ; codret = ', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+      if ( choix.eq.0 .or. choix.eq.6 ) then
+c
+        if ( nbheto.ne.0 ) then
+c
+          iaux = 6
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'UTB19C_he', nompro
+#endif
+          call utb19c ( choix, iaux, nbheto, nbhecf, nbheca,
+     >                  coonoe, somare,
+     >                  aretri, arequa,
+     >                  hethex, quahex, coquhe, arehex,
+     >                  nbiter, tabaur,
+     >                  ulbila,
+     >                  ulsort, langue, codret )
+c
+        endif
+c
+      endif
+c
+      endif
+c
+c====
+c 5. calcul des diametres des pentaedres
+c===
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '5. pentaedres ; codret = ', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+      if ( choix.eq.0 .or. choix.eq.7 ) then
+c
+        if ( nbpeto.ne.0 ) then
+c
+          iaux = 7
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'UTB19C_pe', nompro
+#endif
+          call utb19c ( choix, iaux, nbpeto, nbpecf, nbpeca,
+     >                  coonoe, somare,
+     >                  aretri, arequa,
+     >                  hetpen, facpen, cofape, arepen,
+     >                  nbiter, tabaur,
+     >                  ulbila,
+     >                  ulsort, langue, codret )
+c
+        endif
+c
+      endif
+c
+      endif
+c
+c====
+c 6. calcul des diametres des triangles d'un maillage 2d ou 2,5d
+c====
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '6. triangles ; codret = ', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+      if ( choix.eq.0 .or. choix.eq.2 ) then
+c
+      if ( nbtrto.ne.0 ) then
+c
+c 6.1. ==> liste des triangles a examiner :
+c       . en l'absence de tetraedre, pentaedre et pyramide, ce sont
+c         tous les triangles actifs ;
+c       . en presence de tetraedre, pentaedre ou pyramide, ce sont les
+c         triangles actifs qui sont des elements de calcul
+c
+      nbeexa = 0
+c
+      if ( nbteto.eq.0 .and. nbpeto.eq.0 .and. nbpyto.eq.0 ) then
+c
+        do 611 , letria = 1 , nbtrto
+          if ( mod(hettri(letria),10).eq.0 ) then
+            nbeexa = nbeexa + 1
+            tbiau1(nbeexa) = letria
+          endif
+  611   continue
+c
+      else
+c
+        do 612 , letria = 1 , nbtrto
+          if ( mod(hettri(letria),10).eq.0 .and.
+     >         cfatri(cotyel,famtri(letria)).ne.0 ) then
+            nbeexa = nbeexa + 1
+            tbiau1(nbeexa) = letria
+          endif
+  612   continue
+c
+      endif
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,6)) mess14(langue,3,2), nbeexa
+#endif
+c
+c 6.2. ==> calcul
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '6.2. calcul ; codret = ', codret
+#endif
+c
+      if ( nbeexa.gt.0 ) then
+c
+      do 62 , iaux = 1 , nbeexa
+c
+        letria = tbiau1(iaux)
+c
+        call utdtri ( letria, daux,
+     >                coonoe, somare, aretri )
+c
+        tabaur(iaux) = daux
+c
+   62 continue
+c
+      endif
+c
+c 6.3. ==> impression sur la sortie standard et sur un fichier
+c          a exploiter par xmgrace
+c
+      if ( choix.eq.0 ) then
+c
+        if ( nbeexa.gt.0 ) then
+c
+          jaux = 0
+          iaux = 2
+c
+#ifdef _DEBUG_HOMARD_
+          write (ulsort,texte(langue,3)) 'UTB05B', nompro
+#endif
+          call utb05b ( jaux, iaux, nbeexa, tabaur, tbdaux,
+     >                  nbiter, rafdef, nbvoto,
+     >                  tbiau2,
+     >                  ulbila,
+     >                  ulsort, langue, codret )
+c
+          endif
+c
+        endif
+c
+      endif
+c
+      endif
+c
+      endif
+c
+c====
+c 7. calcul des diametres des quadrangles d'un maillage 2d ou 2,5d
+c====
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '7. quadrangles ; codret = ', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+      if ( choix.eq.0 .or. choix.eq.4 ) then
+c
+      if ( nbquto.ne.0 ) then
+c
+c 7.1. ==> liste des quadrangles a examiner :
+c       . en l'absence d'hexaedre, pentaedre et pyramide, ce sont
+c         tous les quadrangles actifs ;
+c       . en presence d'hexaedre, pentaedre ou pyramide, ce sont les
+c         quadrangles actifs qui sont des elements de calcul
+c
+      nbeexa = 0
+c
+      if ( nbheto.eq.0 .and. nbpeto.eq.0 .and. nbpyto.eq.0 ) then
+c
+        do 711 , lequad = 1 , nbquto
+          if ( mod(hetqua(lequad),100).eq.0 ) then
+            nbeexa = nbeexa + 1
+            tbiau1(nbeexa) = lequad
+          endif
+  711   continue
+c
+      else
+c
+        do 712 , lequad = 1 , nbquto
+          if ( mod(hetqua(lequad),100).eq.0 .and.
+     >         cfaqua(cotyel,famqua(lequad)).ne.0 ) then
+            nbeexa = nbeexa + 1
+            tbiau1(nbeexa) = lequad
+          endif
+  712   continue
+c
+      endif
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,6)) mess14(langue,3,4), nbeexa
+#endif
+c
+c 7.2. ==> calcul
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '7.2. calcul ; codret = ', codret
+#endif
+c
+      if ( nbeexa.gt.0 ) then
+c
+      do 72 , iaux = 1 , nbeexa
+c
+        lequad = tbiau1(iaux)
+c
+        call utdqua ( lequad, daux,
+     >                coonoe, somare, arequa )
+c
+        tabaur(iaux) = daux
+c
+   72 continue
+c
+      endif
+c
+c 7.3. ==> impression sur la sortie standard et sur un fichier
+c          a exploiter par xmgrace
+c
+      if ( choix.eq.0 ) then
+c
+        if ( nbeexa.gt.0 ) then
+c
+          jaux = 0
+          iaux = 4
+c
+#ifdef _DEBUG_HOMARD_
+        write (ulsort,texte(langue,3)) 'UTB05B', nompro
+#endif
+          call utb05b ( jaux, iaux, nbeexa, tabaur, tbdaux,
+     >                  nbiter, rafdef, nbvoto,
+     >                  tbiau2,
+     >                  ulbila,
+     >                  ulsort, langue, codret )
+c
+        endif
+c
+      endif
+c
+      endif
+c
+      endif
+c
+      endif
+c
+c====
+c 8. la fin
+c====
+c
+      if ( codret.ne.0 ) then
+c
+#include "envex2.h"
+c
+      write (ulsort,texte(langue,1)) 'Sortie', nompro
+      write (ulsort,texte(langue,2)) codret
+c
+      endif
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,1)) 'Sortie', nompro
+      call dmflsh (iaux)
+#endif
+c
+      end