Salome HOME
Homard executable
[modules/homard.git] / src / tool / ES_HOMARD / eslmh2.F
diff --git a/src/tool/ES_HOMARD/eslmh2.F b/src/tool/ES_HOMARD/eslmh2.F
new file mode 100644 (file)
index 0000000..0276421
--- /dev/null
@@ -0,0 +1,498 @@
+      subroutine eslmh2 ( idfmed,
+     >                    nomail, lnomai,
+     >                      sdim,   mdim,
+     >                     degre, maconf, homolo, hierar,
+     >                    rafdef, nbmane, typcca, typsfr, maextr,
+     >                    mailet,
+     >                    dimcst, lgnoig, nbnoco,
+     >                    sdimca, mdimca,
+     >                    exiren, lgpeli,
+     >                    suifro, nomafr, lnomaf,
+     >                    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 du Maillage Homard - phase 2
+c  -      -        -          -        -              -
+c ______________________________________________________________________
+c .  nom   . e/s . taille .           description                      .
+c .____________________________________________________________________.
+c . idfmed . e   .   1    . identificateur du fichier MED              .
+c . nomail . e   . char*8 . nom du maillage a lire                     .
+c . lnomai . e   .   1    . longueur du nom du maillage                .
+c . sdim   .  s  .    1   . dimension de l'espace                      .
+c . mdim   .  s  .    1   . dimension du maillage                      .
+c . degre  .  s  .    1   . degre du maillage                          .
+c . maconf .  s  .    1   . conformite du maillage                     .
+c .        .     .        .  0 : oui                                   .
+c .        .     .        .  1 : non-conforme avec au minimum 2 aretes .
+c .        .     .        .      non decoupees en 2 par face           .
+c .        .     .        .  2 : non-conforme avec 1 seul noeud pendant.
+c .        .     .        .      par arete                             .
+c .        .     .        .  3 : non-conforme fidele a l'indicateur    .
+c .        .     .        . -1 : conforme, avec des boites pour les    .
+c .        .     .        .      quadrangles, hexaedres et pentaedres  .
+c .        .     .        . -2 : non-conforme avec au maximum 1 arete  .
+c .        .     .        .      decoupee en 2 et des boites pour les  .
+c .        .     .        .       quadrangles, hexaedres et pentaedres .
+c .        .     .        . 10 : non-conforme sans autre connaissance  .
+c . homolo .  s  .    1   . type de relations par homologues           .
+c .        .     .        . 0 : pas d'homologues                       .
+c .        .     .        . 1 : relations sur les noeuds               .
+c .        .     .        . 2 : relations sur les noeuds et les aretes .
+c .        .     .        . 3 : relations sur les noeuds, les aretes   .
+c .        .     .        .     et les triangles                       .
+c . hierar .  s  .    1   . maillage hierarchique                      .
+c .        .     .        . 0 : non                                    .
+c .        .     .        . 1 : oui                                    .
+c . rafdef .  s  .    1   . 0 : macro-maillage                         .
+c .        .     .        . 1 : le maillage est inchange               .
+c .        .     .        . 2 : le maillage est issu du raffinement pur.
+c .        .     .        .     d'un autre maillage                    .
+c .        .     .        . 3 : le maillage est issu du deraffinement  .
+c .        .     .        .     pur d'un autre maillage                .
+c .        .     .        . 4 : le maillage est issu de raffinement et .
+c .        .     .        .     de deraffinement d'un autre maillage   .
+c .        .     .        . 12 : le maillage est un maillage passe de  .
+c .        .     .        .      degre 1 a 2                           .
+c .        .     .        . 21 : le maillage est un maillage passe de  .
+c .        .     .        .      degre 2 a 1                           .
+c . nbmane .  s  .    1   . nombre maximum de noeuds par element       .
+c . typcca .  s  .   1    . type du code de calcul                     .
+c . typsfr .  s  .   1    . type du suivi de frontiere                 .
+c .        .     .        . 0 : aucun                                  .
+c .        .     .        . 1 : maillage de degre 1, avec projection   .
+c .        .     .        .     des nouveaux sommets                   .
+c .        .     .        . 2 : maillage de degre 2, seuls les noeuds  .
+c .        .     .        .     P1 sont sur la frontiere ; les noeuds  .
+c .        .     .        .     P2 restent au milieu des P1            .
+c .        .     .        . 3 : maillage de degre 2, les noeuds P2     .
+c .        .     .        .     etant sur la frontiere                 .
+c . maextr .  s  .   1    . maillage extrude                           .
+c .        .     .        . 0 : non                                    .
+c .        .     .        . 1 : selon X                                .
+c .        .     .        . 2 : selon Y                                .
+c .        .     .        . 3 : selon Z (cas de Saturne ou Neptune)    .
+c . mailet .  s  .    1   . presence de mailles etendues               .
+c .        .     .        .  1 : aucune                                .
+c .        .     .        . 2x : TRIA7                                 .
+c .        .     .        . 3x : QUAD9                                 .
+c .        .     .        . 5x : HEXA27                                .
+c . dimcst .  s  .   1    . 0, si toutes les coordonnees varient       .
+c .        .     .        . i, si la i-eme est constante et n'est pas  .
+c .        .     .        .    memorisee sur chaque noeud              .
+c . lgnoig .  s  .   1    . nombre de noeuds lies aux elements ignores .
+c . nbnoco .  s  .   1    . nbr noeuds pour la non-conformite initiale .
+c . sdimca .  s  .    1   . dimension de l'espace du maillage de calcul.
+c . mdimca .  s  .    1   . dimension du maillage du maillage de calcul.
+c . exiren .  s  .   1    . vrai/faux selon presence de renumerotations.
+c . lgpeli .  s  .   1    . longueur du profil des elements elimines   .
+c . suifro . e   .   1    . 1 : pas de suivi de frontiere              .
+c .        .     .        . 2x : frontiere discrete                    .
+c .        .     .        . 3x : frontiere analytique                  .
+c .        .     .        . 5x : frontiere cao                         .
+c . nomafr .  s  . char64 . nom du maillage MED de la frontiere        .
+c . lnomaf .  s  .   1    . longueur du nom du maillage de la frontiere.
+c .        .     .        . 0 : le maillage est absent du fichier      .
+c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
+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 = 'ESLMH2' )
+c
+#include "nblang.h"
+#include "consts.h"
+c
+c 0.2. ==> communs
+c
+#include "envex1.h"
+#include "front1.h"
+c
+c 0.3. ==> arguments
+c
+      integer lnomai
+      integer*8 idfmed
+      integer   sdim,   mdim
+      integer  degre, maconf, homolo, hierar
+      integer rafdef, nbmane, typcca, typsfr, maextr
+      integer mailet
+      integer dimcst, lgnoig, nbnoco
+      integer sdimca, mdimca
+      integer lgpeli
+      integer suifro
+      integer lnomaf
+c
+      character*64 nomail
+      character*64 nomafr
+c
+      logical exiren
+c
+      integer ulsort, langue, codret
+c
+c 0.4. ==> variables locales
+c
+#include "meddc0.h"
+c
+      integer iaux, jaux
+      integer infmgl(30)
+      integer nbprof
+      integer nbvapr
+c
+      logical exiigl
+c
+      character*64 noprof
+      character*64 nomam2
+      integer typrep
+c
+      character*16 nomaxe(3), uniaxe(3)
+c
+      integer nbmess
+      parameter ( nbmess = 150 )
+      character*80 texte(nblang,nbmess)
+c ______________________________________________________________________
+c
+c====
+c 1. intialisations
+c====
+c
+#include "impr01.h"
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,1)) 'Entree', nompro
+      call dmflsh (iaux)
+#endif
+c
+      texte(1,4) = '(''Aucun profil dans le fichier ?'')'
+      texte(1,5) = '(''Les informations globales sont absentes.'')'
+c
+      texte(2,5) = '(''No profile into the file?'')'
+      texte(2,5) = '(''Global information are missing.'')'
+c
+#include "esimpr.h"
+c
+#include "impr03.h"
+c
+c====
+c 2. Le maillage est-il present dans le fichier ?
+c    si oui, on retourne les dimensions de l'espace et du maillage
+c====
+c
+      if ( codret.eq.0 ) then
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'ESLNOM', nompro
+#endif
+      call eslnom ( idfmed, nomail, lnomai,
+     >                sdim,   mdim,
+     >              typrep, nomaxe, uniaxe,
+     >              ulsort, langue, codret )
+      if ( codret.ne.0 ) then
+        codret = 2
+      endif
+c
+      endif
+c
+#ifdef _DEBUG_HOMARD_
+      if ( codret.eq.0 ) then
+      write (ulsort,texte(langue,22)) nomail(1:lnomai)
+      write (ulsort,texte(langue,23)) 'de l''espace', sdim
+      write (ulsort,texte(langue,23)) 'du maillage', mdim
+      endif
+#endif
+c
+c====
+c 3. Recuperation des parametres essentiels
+c====
+c 3.1. ==> Nombre de profils
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) '3.1. Nombre de profils ; codret', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'MPFNPF', nompro
+#endif
+      call mpfnpf ( idfmed, nbprof, codret )
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,86)) nbprof
+#endif
+c
+      endif
+c
+      if ( codret.eq.0 ) then
+c
+      if ( nbprof.eq.0 ) then
+        write (ulsort,texte(langue,86)) nbprof
+        write (ulsort,texte(langue,4))
+        codret = 31
+      endif
+c
+      endif
+c
+c 3.2. ==> Parcours des profils
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) '3.2. Parcours des profils ; codret', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+      exiigl = .false.
+      exiren = .false.
+      lgpeli = 0
+c
+      do 32 , iaux = 1 , nbprof
+c
+c 3.2.1. ==> nom et taille du profil a lire
+c
+        if ( codret.eq.0 ) then
+c
+        jaux = iaux
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'MPFPFI', nompro
+#endif
+        call mpfpfi ( idfmed, jaux, noprof, nbvapr, codret )
+        if ( codret.ne.0 ) then
+        write (ulsort,texte(langue,79))
+        endif
+c
+#ifdef _DEBUG_HOMARD_
+        write (ulsort,texte(langue,61)) noprof
+        write (ulsort,texte(langue,62)) nbvapr
+#endif
+c
+        endif
+c
+c 3.2.2. ==> Les profils que l'on cherche
+c
+        if ( codret.eq.0 ) then
+c
+c 3.2.2.1 ==> Recuperation des parametres essentiels
+c
+c                             1234567890123456789012
+        if ( noprof(1:22).eq.'Info_maillage_globales' ) then
+c
+          if ( codret.eq.0 ) then
+c
+#ifdef _DEBUG_HOMARD_
+          write (ulsort,texte(langue,3)) 'MPFPRR', nompro
+#endif
+          call mpfprr ( idfmed, noprof, infmgl, codret )
+c
+          if ( codret.ne.0 ) then
+            write (ulsort,texte(langue,61)) noprof
+            write (ulsort,texte(langue,79))
+          endif
+c
+          endif
+c
+          if ( codret.eq.0 ) then
+c
+          exiigl = .true.
+c
+c envca1 + divers
+          degre  = infmgl( 3)
+          maconf = infmgl( 4)
+          homolo = infmgl( 5)
+          hierar = infmgl( 6)
+          rafdef = infmgl( 7)
+          nbmane = infmgl( 8)
+          typcca = infmgl( 9)
+          typsfr = infmgl(10)
+          maextr = infmgl(11)
+          mailet = infmgl(12)
+          dimcst = infmgl(13)
+          lgnoig = infmgl(14)
+          nbnoco = infmgl(15)
+c nbutil
+          sdimca = infmgl(16)
+          mdimca = infmgl(17)
+c
+          endif
+c
+c 3.2.2.2. ==> Presence de renumerotation
+c
+c                                 1234567890123456789
+        elseif ( noprof(1:19).eq.'Attributs_de_norenu' ) then
+c
+          exiren = .true.
+c
+c 3.2.2.3. ==> Presence d'elements ignores
+c
+c                                 1234567890123456
+        elseif ( noprof(1:16).eq.'Elements_Ignores' ) then
+c
+          lgpeli = nbvapr
+c
+        endif
+c
+        endif
+c
+   32 continue
+c
+      endif
+c
+c 3.3. ==> controle
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) '3.3. controle ; codret', codret
+#endif
+c
+      if ( codret.eq.0 ) then
+c
+      if ( .not.exiigl ) then
+c
+      write (ulsort,texte(langue,5))
+      codret = 33
+c
+      endif
+c
+      endif
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) 'lgpeli', lgpeli
+#endif
+c
+c====
+c 4. L'eventuelle frontiere discrete
+c    Le nom doit etre coherent avec esecfd
+c====
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) '4. Frontiere discrete ; codret', codret
+#endif
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) 'suifro', suifro
+#endif
+c
+      if ( mod(suifro,2).eq.0 ) then
+c
+c 4.1. ==> Nom du maillage de la frontiere
+c
+        if ( codret.eq.0 ) then
+c
+        nomam2 = blan64
+        nomam2(1:8) = 'AbsCurvi'
+        iaux = 8
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'ESLNOF', nompro
+#endif
+        call eslnof ( idfmed,
+     >                nomail, lnomai,
+     >                nomam2,   iaux,
+     >                nomafr, lnomaf, sfsdim, sfmdim,
+     >                typrep, nomaxe, uniaxe,
+     >                ulsort, langue, codret )
+        if ( codret.ne.0 ) then
+          codret = 2
+        endif
+c
+#ifdef _DEBUG_HOMARD_
+      if ( codret.eq.0 ) then
+      write (ulsort,texte(langue,22)) nomafr
+      write (ulsort,texte(langue,23)) 'de l''espace', sfsdim
+      write (ulsort,texte(langue,23)) 'du maillage', sfmdim
+      endif
+#endif
+c
+        endif
+c
+c 4.2. ==> Si le maillage de la frontiere existe :
+c
+        if ( lnomaf.gt.0 ) then
+c
+c 4.2.1. ==> Nombre de noeuds du maillage de la frontiere
+c
+          if ( codret.eq.0 ) then
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'ESLMMN-'//nomafr(1:lnomaf),nompro
+#endif
+          call eslmmn ( idfmed, nomafr, lnomaf,
+     >                  sfnbso,
+     >                  ulsort, langue, codret )
+c
+          endif
+c
+c 4.2.2. ==> Nombre de noeuds de la description
+c
+          if ( codret.eq.0 ) then
+c
+          iaux = 8
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,texte(langue,3)) 'ESLMMN-'//nomam2(1:iaux),nompro
+#endif
+          call eslmmn ( idfmed, nomam2, iaux,
+     >                  sfnbse,
+     >                  ulsort, langue, codret )
+c
+          endif
+c
+        endif
+c
+      else
+c
+        sfsdim = 0
+        sfmdim = 0
+        sfnbso = 0
+        sfnbse = 0
+c
+      endif
+c
+#ifdef _DEBUG_HOMARD_
+      write (ulsort,90002) 'sfsdim', sfsdim
+      write (ulsort,90002) 'sfmdim', sfmdim
+      write (ulsort,90002) 'sfnbso', sfnbso
+      write (ulsort,90002) 'sfnbse', sfnbse
+#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