Salome HOME
Homard executable
[modules/homard.git] / src / tool / ES_HOMARD / esleen.F
diff --git a/src/tool/ES_HOMARD/esleen.F b/src/tool/ES_HOMARD/esleen.F
new file mode 100644 (file)
index 0000000..0df43bc
--- /dev/null
@@ -0,0 +1,429 @@
+      subroutine esleen ( idfmed, nomamd,
+     >                    nhmapo, nharet, nhtria, nhquad,
+     >                    nhtetr, nhhexa, nhpyra, nhpent,
+     >                    ltbiau, tbiaux,
+     >                    ulsort, langue, codret)
+c
+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  Entree-Sortie : LEcture des ENtites
+c  -      -        --          --
+c ______________________________________________________________________
+c .  nom   . e/s . taille .           description                      .
+c .____________________________________________________________________.
+c . idfmed . e   .   1    . identificateur du fichier MED              .
+c . nomamd . e   . char64 . nom du maillage MED voulu                  .
+c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
+c . ltbiau . e   .    1   . longueur allouee a tbiaux                  .
+c . tbiaux .     .    *   . tableau tampon entier                      .
+c . langue . e   .    1   . langue des messages                        .
+c .        .     .        . 1 : francais, 2 : anglais                  .
+c . codret . es  .    1   . code de retour des modules                 .
+c .        .     .        . 0 : pas de 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 = 'ESLEEN' )
+c
+#include "nblang.h"
+#include "consts.h"
+c
+c 0.2. ==> communs
+c
+#include "envex1.h"
+#include "gmenti.h"
+c
+#include "envca1.h"
+#include "nbfami.h"
+#include "dicfen.h"
+#include "nombmp.h"
+#include "nombar.h"
+#include "nombtr.h"
+#include "nombqu.h"
+#include "nombte.h"
+#include "nombpy.h"
+#include "nombhe.h"
+#include "nombpe.h"
+c
+#include "impr02.h"
+c
+c 0.3. ==> arguments
+c
+      integer*8 idfmed
+      integer ltbiau, tbiaux(ltbiau)
+c
+      character*8 nhmapo, nharet, nhtria, nhquad
+      character*8 nhtetr, nhhexa, nhpyra, nhpent
+      character*64 nomamd
+c
+      integer ulsort, langue, codret
+c
+c 0.4. ==> variables locales
+c
+#include "meddc0.h"
+c
+      integer iaux, jaux
+      integer typenh, typgeo, typent
+      integer nbenti, nbencf, nbenca, nbrfma, nbrama, numfam
+      integer nctfen, nbfent
+      integer adcode, adcoar
+      integer adfami, adcofa
+      integer codre0
+      integer codre1, codre2, codre3, codre4
+c
+      character*8 nhenti, nhenfa
+c
+      integer nbmess
+      parameter ( nbmess = 150 )
+      character*80 texte(nblang,nbmess)
+c ______________________________________________________________________
+c
+c====
+c 1. initialisations
+c====
+c 1.1. ==> messages
+c
+#include "impr01.h"
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,1)) 'Entree', nompro
+      call dmflsh (iaux)
+#endif
+c
+      texte(1,4) = '(''. Lecture des mailles.'')'
+      texte(1,5) = '(''... Taille du tableau temporaire :'',i10)'
+      texte(1,6) = '(''.. Lecture des '',a14)'
+c
+      texte(2,4) = '(''. Readings of meshes.'')'
+      texte(2,5) = '(''... Size of temporary array :'',i10)'
+      texte(2,6) = '(''.. Readings of the '',a14)'
+c
+#include "impr03.h"
+c
+#include "esimpr.h"
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,4))
+#endif
+c
+      codret = 0
+c
+c====
+c 2. Lecture type par type
+c====
+c
+      do 21 , typenh = 0 , 7
+c
+c 2.1. ==> decodage des caracteristiques
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '2.1. decodage ; codret = ', codret
+#endif
+c
+        if ( codret.eq.0 ) then
+c
+#ifdef _DEBUG_HOMARD_
+        write (ulsort,texte(langue,6)) mess14(langue,3,typenh)
+#endif
+c
+        nbenca = 0
+        nbrama = 0
+c
+        if ( typenh.eq.0 ) then
+          nbenti = nbmpto
+          nhenti = nhmapo
+          nbencf = nbenti
+          typgeo = edpoi1
+          typent = edmail
+          numfam = 0
+          nctfen = nctfmp
+          nbfent = nbfmpo
+          nbrfma = 1
+        elseif ( typenh.eq.1 ) then
+          nbenti = nbarto
+          nbencf = nbenti
+          nhenti = nharet
+          if ( degre.eq.1 ) then
+            typgeo = edseg2
+            nbrfma = 2
+          else
+            typgeo = edseg3
+            nbrfma = 3
+          endif
+          typent = edaret
+          numfam = numfam - nbfmpo
+          nctfen = nctfar
+          nbfent = nbfare
+        elseif ( typenh.eq.2 ) then
+          nbenti = nbtrto
+          nbencf = nbenti
+          nhenti = nhtria
+          if ( degre.eq.1 ) then
+            typgeo = edtri3
+          else
+            typgeo = edtri6
+          endif
+          typent = edface
+          numfam = numfam - nbfare
+          nctfen = nctftr
+          nbfent = nbftri
+          nbrfma = 3
+       elseif ( typenh.eq.3 ) then
+          nbenti = nbteto
+          nbencf = nbtecf
+          nbenca = nbteca
+          nhenti = nhtetr
+          if ( degre.eq.1 ) then
+            typgeo = edtet4
+          else
+            typgeo = edte10
+          endif
+          typent = edmail
+          numfam = numfam - nbftri
+          nctfen = nctfte
+          nbfent = nbftet
+          nbrfma = 4
+          nbrama = 6
+        elseif ( typenh.eq.4 ) then
+          nbenti = nbquto
+          nbencf = nbenti
+          nhenti = nhquad
+          if ( degre.eq.1 ) then
+            typgeo = edqua4
+          else
+            typgeo = edqua8
+          endif
+          typent = edface
+          numfam = numfam - nbftet
+          nctfen = nctfqu
+          nbfent = nbfqua
+          nbrfma = 4
+        elseif ( typenh.eq.5 ) then
+          nbenti = nbpyto
+          nbencf = nbpycf
+          nbenca = nbpyca
+          nhenti = nhpyra
+          if ( degre.eq.1 ) then
+            typgeo = edpyr5
+          else
+            typgeo = edpy13
+          endif
+          typent = edmail
+          numfam = numfam - nbfqua
+          nctfen = nctfpy
+          nbfent = nbfpyr
+          nbrfma = 5
+          nbrama = 8
+        elseif ( typenh.eq.6 ) then
+          nbenti = nbheto
+          nbencf = nbhecf
+          nbenca = nbheca
+          nhenti = nhhexa
+          if ( degre.eq.1 ) then
+            typgeo = edhex8
+          else
+            typgeo = edhe20
+          endif
+          typent = edmail
+          numfam = numfam - nbfpyr
+          nctfen = nctfhe
+          nbfent = nbfhex
+          nbrfma = 6
+          nbrama = 12
+        else
+          nbenti = nbpeto
+          nbencf = nbpecf
+          nbenca = nbpeca
+          nhenti = nhpent
+          if ( degre.eq.1 ) then
+            typgeo = edpen6
+          else
+            typgeo = edpe15
+          endif
+          typent = edmail
+          numfam = numfam - nbfhex
+          nctfen = nctfpe
+          nbfent = nbfpen
+          nbrfma = 5
+          nbrama = 9
+        endif
+c
+#ifdef _DEBUG_HOMARD_
+          if ( codret.eq.0 ) then
+          write (ulsort,*) ' '
+          write (ulsort,*) mess14(langue,4,typenh)
+          write (ulsort,90002) 'nbenti, nbencf, nbenca',
+     >                          nbenti, nbencf, nbenca
+          endif
+#endif
+c
+        endif
+c
+c 2.2. ==> gestion de la memoire
+c 2.2.1. ==> connectivite
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '2.2.1. connectivite ; codret = ', codret
+#endif
+c
+        if ( nbenti.gt.0 ) then
+c
+#ifdef _DEBUG_HOMARD_
+          if ( codret.eq.0 ) then
+          write (ulsort,90002) 'typgeo', typgeo
+          write (ulsort,90002) 'typent', typent
+          write (ulsort,90002) 'nctfen', nctfen
+          write (ulsort,90002) 'nbfent', nbfent
+          write (ulsort,90002) 'nbrfma', nbrfma
+          write (ulsort,90002) 'nbrama', nbrama
+          write (ulsort,90002) 'numfam', numfam
+          endif
+#endif
+c
+          if ( codret.eq.0 ) then
+c
+          call gmecat ( nhenti, 1, nbenti, codre1 )
+          call gmecat ( nhenti, 2, nbenca, codre2 )
+          if ( typenh.eq.1 ) then
+            iaux = 2*nbencf
+          else
+            iaux = nbrfma*nbencf
+          endif
+          call gmaloj ( nhenti//'.ConnDesc', ' ', iaux,
+     >                  adcode, codre3 )
+          if ( nbenca.gt.0 ) then
+            iaux = nbrama*nbenca
+            call gmaloj ( nhenti//'.ConnAret', ' ', iaux,
+     >                    adcoar, codre4 )
+          else
+            codre4 = 0
+          endif
+c
+          codre0 = min ( codre1, codre2 )
+          codret = max ( abs(codre0), codret,
+     >                   codre1, codre2, codre3, codre4 )
+c
+          endif
+c
+        endif
+c
+c 2.2.2. ==> appel du programme generique pour l'allocation de
+c            la branche liee aux familles
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '2.2.2. familles ; codret = ', codret
+#endif
+c
+        if ( codret.eq.0 ) then
+c
+#ifdef _DEBUG_HOMARD_
+        write (ulsort,texte(langue,3)) 'UTALFE', nompro
+#endif
+        iaux = typenh
+        call utalfe ( iaux, nhenti,
+     >                nbenti, nctfen, nbfent,
+     >                nhenfa, adfami, adcofa,
+     >                ulsort, langue, codret)
+c
+        endif
+c
+c 2.3. ==> Lecture des connectivites
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '2.3. lecture ; codret = ', codret
+#endif
+c
+        if ( nbenti.gt.0 ) then
+c
+          if ( codret.eq.0 ) then
+c
+          jaux = typenh
+#ifdef _DEBUG_HOMARD_
+        write (ulsort,texte(langue,3)) 'ESLEE0', nompro
+#endif
+          call eslee0 ( idfmed, nomamd,
+     >                  jaux, typgeo, typent,
+     >                  nbencf, nbenca, nbrfma, nbrama,
+     >                  imem(adcode), imem(adcoar),
+     >                  tbiaux,
+     >                  ulsort, langue, codret )
+c
+          endif
+c
+        endif
+c
+c 2.4. ==> Lecture des complements
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,*) '2.4. complements ; codret = ', codret
+#endif
+c
+        if ( nbenti.gt.0 ) then
+c
+          if ( codret.eq.0 ) then
+c
+          jaux = typenh
+#ifdef _DEBUG_HOMARD_
+        write (ulsort,texte(langue,3)) 'ESLEE2', nompro
+#endif
+          call eslee2 ( idfmed, nomamd,
+     >                  nhenti,
+     >                  jaux, typgeo, typent,
+     >                  nbenti, nbencf, nbenca,
+     >                  tbiaux,
+     >                  ulsort, langue, codret )
+c
+cgn        call gmprsx ( nompro, nhenti )
+cgn        call gmprsx ( nompro, nhenti//'.Famille' )
+cgn        call gmprsx ( nompro, nhenti//'.ConnDesc' )
+cgn        call gmprsx ( nompro, nhenti//'.HistEtat' )
+cgn        call gmprsx ( nompro, nhenti//'.Mere' )
+cgn        call gmprsx ( nompro, nhenti//'.InfoSupp' )
+c
+          endif
+c
+        endif
+c
+   21 continue
+c
+c====
+c 3. 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