]> SALOME platform Git repositories - modules/homard.git/blobdiff - src/tool/Utilitaire/utb11a.F
Salome HOME
Homard executable
[modules/homard.git] / src / tool / Utilitaire / utb11a.F
diff --git a/src/tool/Utilitaire/utb11a.F b/src/tool/Utilitaire/utb11a.F
new file mode 100644 (file)
index 0000000..50da5a1
--- /dev/null
@@ -0,0 +1,447 @@
+      subroutine utb11a ( hetare, somare,
+     >                    hettri, aretri,
+     >                    voltri, pypetr,
+     >                    hetqua, arequa,
+     >                    volqua, pypequ,
+     >                    hettet, tritet,
+     >                    hethex, quahex,
+     >                    hetpyr, facpyr,
+     >                    hetpen, facpen,
+     >                    povoso, voisom,
+     >                    posifa, facare,
+     >                    famare, cfaare,
+     >                    famtri, cfatri,
+     >                    famqua, cfaqua,
+     >                    famtet, cfatet,
+     >                    famhex, cfahex,
+     >                    fampyr, cfapyr,
+     >                    fampen, cfapen,
+     >                    tabau1, tabau2, tabau3, tabau4,
+     >                    taba11, taba12, taba13, taba14,
+     >                    taba15, taba16,
+     >                    nublen,
+     >                    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 sur le maillage - option 11
+c    --           -                              --
+c ______________________________________________________________________
+c
+c    analyse de la connexite du maillage de calcul
+c    remarque : pour du raffinement non-conforme, chaque niveau est
+c               un bloc
+c ______________________________________________________________________
+c .        .     .        .                                            .
+c .  nom   . e/s . taille .           description                      .
+c .____________________________________________________________________.
+c . hetare . e   . nbarto . historique de l'etat des aretes            .
+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 . voltri . e   .2*nbtrto. numeros des 2 volumes par triangle         .
+c .        .     .        . voltri(i,k) definit le i-eme voisin de k   .
+c .        .     .        .   0 : pas de voisin                        .
+c .        .     .        . j>0 : tetraedre j                          .
+c .        .     .        . j<0 : pyramide/pentaedre dans pypetr(1/2,j).
+c . pypetr . e   .2*lgpype. pypetr(1,j) = numero de la pyramide voisine.
+c .        .     .        . du triangle k tel que voltri(1/2,k) = -j   .
+c .        .     .        . pypetr(2,j) = numero du pentaedre voisin   .
+c .        .     .        . du triangle k tel que voltri(1/2,k) = -j   .
+c . hetqua . e   . nbquto . historique de l'etat des quadrangles       .
+c . arequa . e   .nbquto*4. numeros des 4 aretes des quadrangles       .
+c . volqua . e   .2*nbquto. numeros des 2 volumes par quadrangle       .
+c .        .     .        . volqua(i,k) definit le i-eme voisin de k   .
+c .        .     .        .   0 : pas de voisin                        .
+c .        .     .        . j>0 : hexaedre j                           .
+c .        .     .        . j<0 : pyramide/pentaedre dans pypequ(1/2,j).
+c . pypequ . e   .2*lgpype. pypequ(1,j) = numero de la pyramide voisine.
+c .        .     .        . du quadrangle k tel que volqua(1/2,k) = -j .
+c .        .     .        . pypequ(2,j) = numero du pentaedre voisin   .
+c .        .     .        . du quadrangle k tel que volqua(1/2,k) = -j .
+c . hettet . e   . nbteto . historique de l'etat des tetraedres        .
+c . tritet . e   .nbtecf*4. numeros des 4 triangles des tetraedres     .
+c . hethex . e   . nbheto . historique de l'etat des hexaedres         .
+c . quahex . e   .nbhecf*6. numeros des 6 quadrangles des hexaedres    .
+c . hetpyr . e   . nbpyto . historique de l'etat des pyramides         .
+c . facpyr . e   .nbpycf*5. numeros des 5 faces des pyramides          .
+c . hetpen . e   . nbpeto . historique de l'etat des pentaedres        .
+c . facpen . e   .nbpecf*5. numeros des 5 faces des pentaedres         .
+c . povoso . e   .0:nbnoto. pointeur des voisins par noeud             .
+c . voisom . e   . nvosom . aretes voisines de chaque noeud            .
+c . posifa . e   .0:nbarto. pointeur sur tableau facare                .
+c . facare . e   . nbfaar . liste des faces contenant une arete        .
+c . famare . e   . nbarto . famille des aretes                         .
+c . cfaare . e   . nctfar*. codes des familles des aretes              .
+c .        .     . nbfare .   1 : famille MED                          .
+c .        .     .        .   2 : type de segment                      .
+c .        .     .        .   3 : orientation                          .
+c .        .     .        .   4 : famille d'orientation inverse        .
+c .        .     .        .   5 : numero de ligne de frontiere         .
+c .        .     .        .  > 0 si concernee par le suivi de frontiere.
+c .        .     .        . <= 0 si non concernee                      .
+c .        .     .        .   6 : famille frontiere active/inactive    .
+c .        .     .        .   7 : numero de surface de frontiere       .
+c .        .     .        . + l : appartenance a l'equivalence l       .
+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 . 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 . famtet . e   . nbteto . famille des tetraedres                     .
+c . cfatet .     . nctfte*. codes des familles des tetraedres          .
+c .        .     . nbftet .   1 : famille MED                          .
+c .        .     .        .   2 : type de tetraedres                   .
+c . famhex . e   . nbheto . famille des hexaedres                      .
+c . cfahex .     . nctfhe*. codes des familles des hexaedres           .
+c .        .     . nbfhex .   1 : famille MED                          .
+c .        .     .        .   2 : type d'hexaedres                     .
+c .        .     .        .   3 : famille des tetraedres de conformite .
+c .        .     .        .   4 : famille des pyramides de conformite  .
+c . fampyr . e   . nbpyto . famille des pyramides                      .
+c . cfapyr .     . nctfpy*. codes des familles des pyramides           .
+c .        .     . nbfpyr .   1 : famille MED                          .
+c .        .     .        .   2 : type de pyramides                    .
+c . fampen . e   . nbpeto . famille des pentaedres                     .
+c . cfapen .     . nctfpe*. codes des familles des pentaedres          .
+c .        .     . nbfpen .   1 : famille MED                          .
+c .        .     .        .   2 : type de pentaedres                   .
+c .        .     .        .   3 : famille des tetraedres de conformite .
+c .        .     .        .   4 : famille des pyramides de conformite  .
+c . tabau1 .  a  .   *    . tableau de travail                         .
+c . tabau2 .  a  .   *    . tableau de travail                         .
+c . tabau3 .  a  .   *    . tableau de travail                         .
+c . tabau4 .  a  .-nbquto . tableau de travail                         .
+c .        .     . :nbtrto.                                            .
+c . taba11 .  a  .    *   . tableau de travail                         .
+c . taba12 .  a  . nbnoto . tableau de travail                         .
+c . taba13 .  a  . nbarto . tableau de travail                         .
+c . taba14 .  a  .    *   . tableau de travail                         .
+c . taba15 .  a  . nbarto . tableau de travail                         .
+c . taba16 .  a  .   *    . tableau de travail                         .
+c . nublen .  s  .   *    . numero de blocs par entite                 .
+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 = 'UTB11A' )
+c
+#include "nblang.h"
+c
+c 0.2. ==> communs
+c
+#include "envex1.h"
+c
+#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"
+c
+#include "dicfen.h"
+#include "impr02.h"
+c
+c 0.3. ==> arguments
+c
+      integer hetare(nbarto), somare(2,nbarto)
+      integer hettri(nbtrto), aretri(nbtrto,3)
+      integer voltri(2,nbtrto), pypetr(2,*)
+      integer hetqua(nbquto), arequa(nbquto,4)
+      integer volqua(2,nbquto), pypequ(2,*)
+      integer hettet(nbteto), tritet(nbtecf,4)
+      integer hethex(nbheto), quahex(nbhecf,6)
+      integer hetpyr(nbpyto), facpyr(nbpycf,5)
+      integer hetpen(nbpeto), facpen(nbpecf,5)
+      integer povoso(0:nbnoto), voisom(*)
+      integer posifa(0:nbarto), facare(nbfaar)
+c
+      integer famare(nbarto), cfaare(nctfar,nbfare)
+      integer famtri(nbtrto), cfatri(nctftr,nbftri)
+      integer famqua(nbquto), cfaqua(nctfqu,nbfqua)
+      integer famtet(nbteto), cfatet(nctfte,nbftet)
+      integer famhex(nbheto), cfahex(nctfhe,nbfhex)
+      integer fampyr(nbpyto), cfapyr(nctfpy,nbfpyr)
+      integer fampen(nbpeto), cfapen(nctfpe,nbfpen)
+c
+      integer tabau1(*)
+      integer tabau2(nbnoto)
+      integer tabau3(nbarto)
+      integer tabau4(-nbquto:*)
+      integer taba11(*)
+      integer taba12(nbnoto)
+      integer taba13(nbarto)
+      integer taba14(*)
+      integer taba15(nbarto)
+      integer taba16(*)
+      integer nublen(-nbquto:*)
+c
+      integer ulbila
+      integer ulsort, langue, codret
+c
+c 0.4. ==> variables locales
+c
+      integer iaux
+      integer nbblar, nbblfa, nbblvo
+c
+      integer nbmess
+      parameter (nbmess = 10 )
+      character*80 texte(nblang,nbmess)
+c
+c 0.5. ==> initialisations
+c ______________________________________________________________________
+c
+c====
+c 1. messages
+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,''CONNEXITE DES ENTITES DU CALCUL'',/,3x,31(''=''),/)'
+      texte(1,5) =
+     >'(5x,''*'',19x,''Blocs de '',a,14x,''*'')'
+c
+      texte(2,4) =
+     > '(//,3x,''CONNEXITY OF CALCULATION ENTITIES'',/,3x,33(''=''),/)'
+      texte(2,5) =
+     >'(5x,''*'',19x,''Blocks of '',a,13x,''*'')'
+c
+      write (ulbila,texte(langue,4))
+c
+#ifdef _DEBUG_HOMARD_
+10001 format(4x,60('-'))
+#endif
+c
+#include "impr03.h"
+c
+      codret = 0
+c
+c====
+c 2. blocs de volumes
+c    Remarque : impossible si des volumes sont decrits par leurs aretes
+c====
+c
+      if ( codret.eq.0 ) then
+c
+      if ( nbteca.eq.0 .and. nbheca.eq.0 .and.
+     >     nbpyca.eq.0 .and. nbpeca.eq.0 ) then
+c
+c
+      if ( nbteac.gt.0 .or. nbheac.gt.0 .or.
+     >     nbpyac.gt.0 .or. nbpeac.gt.0 ) then
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'UTB11B', nompro
+#endif
+        call utb11b ( nbblvo,
+     >                hetare, somare,
+     >                hettri, aretri,
+     >                hetqua, arequa,
+     >                hettet, tritet,
+     >                hethex, quahex,
+     >                hetpyr, facpyr,
+     >                hetpen, facpen,
+     >                povoso, voisom,
+     >                posifa, facare,
+     >                voltri, pypetr,
+     >                volqua, pypequ,
+     >                famare, cfaare,
+     >                famtri, cfatri,
+     >                famqua, cfaqua,
+     >                famtet, cfatet,
+     >                famhex, cfahex,
+     >                fampyr, cfapyr,
+     >                fampen, cfapen,
+     >                tabau1, tabau2, tabau3, tabau4,
+     >                taba11, taba12, taba13, taba14,
+     >                taba15, taba16,
+     >                nublen,
+     >                ulbila,
+     >                ulsort, langue, codret )
+c
+#ifdef _DEBUG_HOMARD_
+      write(ulsort,90002) 'Fin etape 2 avec codret', codret
+      write(ulsort,texte(langue,5)) mess14(langue,3,3)
+      write(ulsort,91040) (iaux,
+     > iaux=1,min(20,nbteto+nbheto+nbpyto-nbquto))
+      write(ulsort,10001)
+      write(ulsort,91040) (nublen(iaux),
+     > iaux=-nbquto,nbteto+nbheto+nbpyto-nbquto-1)
+#endif
+c
+      endif
+c
+      endif
+c
+      endif
+c
+c====
+c 3. blocs de faces
+c====
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) '3. bloc de faces ; codret', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+      if ( nbtrac.gt.0 .or. nbquac.gt.0 ) then
+c
+c       on examine toutes les faces actives du calcul
+c
+        do 31 , iaux = -nbquto, nbtrto
+          tabau4(iaux) = 1
+   31   continue
+        tabau4(0) = 0
+        iaux = 2
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'UTB11C', nompro
+#endif
+        call utb11c ( nbblfa, iaux, tabau4,
+     >                hetare, somare,
+     >                hettri, aretri,
+     >                hetqua, arequa,
+     >                povoso, voisom,
+     >                posifa, facare,
+     >                famare, cfaare,
+     >                famtri, cfatri,
+     >                famqua, cfaqua,
+     >                tabau1, tabau2, tabau3,
+     >                taba15, taba16,
+     >                nublen,
+     >                ulbila,
+     >                ulsort, langue, codret )
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) 'Fin etape 3 avec codret', codret
+      if ( nbtrac.gt.0  ) then
+        write(ulsort,texte(langue,5)) mess14(langue,3,2)
+        write(ulsort,91040) (iaux,iaux=1,min(20,nbtrto))
+        write(ulsort,10001)
+        write(ulsort,91040)
+     >(nublen(iaux),iaux=-nbquto+1,-nbquto+min(100,nbtrto))
+      endif
+      if ( nbquac.gt.0  ) then
+        write(ulsort,texte(langue,5)) mess14(langue,3,4)
+        write(ulsort,91040) (iaux,iaux=1,min(20,nbquto))
+        write(ulsort,10001)
+        write(ulsort,91040)
+     >(nublen(iaux),iaux=-nbquto,-nbquto+min(100,nbquto)-1)
+      endif
+#endif
+c
+      endif
+c
+      endif
+c
+c====
+c 4. blocs d'aretes
+c====
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) '4. bloc d aretes ; codret', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+c       on examine toutes les aretes actives du calcul
+c
+        do 41 , iaux = 1, nbarto
+          tabau3(iaux) = 1
+   41   continue
+        iaux = 2
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'UTB11D', nompro
+#endif
+        call utb11d ( nbblar, iaux, tabau3,
+     >                hetare, somare,
+     >                povoso, voisom,
+     >                famare, cfaare,
+     >                tabau1, tabau2,
+     >                nublen,
+     >                ulbila,
+     >                ulsort, langue, codret )
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) 'Fin etape 4 avec codret', codret
+      write(ulsort,texte(langue,5)) mess14(langue,3,1)
+      write(ulsort,91040) (iaux,iaux=1,min(20,nbarto))
+      write(ulsort,10001)
+      write(ulsort,91040)
+     >(nublen(iaux),iaux=-nbquto,-nbquto+min(100,nbarto)-1)
+#endif
+c
+      endif
+c
+c====
+c 5. 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