mod_geo_typ.f90

### TABLE OF CONTENTS

- 1. GEO/geo_typ

## GEO/geo_typ [ Methods ]

[ Top ] [ Methods ]

NOM

     geo_typ

DESCRIPTION

     Descrition des types de structures GEOmetrie/maillage

     Description of GEOmetry/mesh structure types

SOURCE

    ! Ce logiciel est regi par la licence [CeCILL-B]
    ! This software is governed by the [CeCILL-B] license
    !=========================== DEBUT DES DECLARATIONS ====================
    !.1-----  Implicit, Use
      use phy
      IMPLICIT NONE
    !=========================== DEBUT DU CODE EXECUTABLE ==================
    !----- Grandeurs communes necessaires a la description de la geometrie
    !----- Common variables necessary for the description of the geometry
    ! distance minimale de recollement / minimal distance for merging
      real(kind=kind(0.d0)) :: petit = 1.d-6, hpetit
    ! distance minimale pour la numerotation de morton / minimal distance for morton numbering
      real(kind=kind(0.d0)) :: petit_morton = 1.d-6
    ! decalage pour la numerotation de morton suivant x,y,z / offset for morton numbering in x,y,z
      real(kind=kind(0.d0)) :: x_min_morton = 0.d0
      real(kind=kind(0.d0)) :: y_min_morton = 0.d0
      real(kind=kind(0.d0)) :: z_min_morton = 0.d0

    ! nombre maximum de solides dans le calcul / maximum number of solids in the calculation
        integer, parameter              :: nb_sol_max=10

    !----- Debut Type ------------------------------------------------------
      TYPE point
          real(kind=kind(0.d0)):: x,y,z
      END TYPE point
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
      TYPE face
        integer,dimension(4)    :: vertex    ! tableau des points (au plus 4) : numero LOCAL au domaine des sommets
        integer                 :: nbvertex  ! nombre effectif de points (3 ou 4)
        integer                 :: ic1,ic2   ! numero LOCAL des deux cellules voisines si ic2 <=0  ---> condition aux limites
        real(kind=kind(0.d0))   :: surf      ! surface
        integer                 :: flevel
        type(vect_3)            :: vnorm     ! vecteur normal, orientÃ© de ic1 vers ic2 (obligatoire)
        type(point)             :: center    ! barycentre
      END TYPE face
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
      TYPE cell
          type(point)             :: center           ! barycentre
          real(kind=kind(0.d0))   :: vol              ! volume
          real(kind=kind(0.d0))   :: h                ! Rapport Volume sur surface du bord : homogene Ã  une distance: soit le "diametre" de la cellule
          integer                 :: clevel           ! dans le cas de la turbulence distance a la paroi et yplus et indicateur solide
          !real(kind=kind(0.d0))   :: dip
          !real(kind=kind(0.d0))   :: yplus
          integer                 :: isolid=0
          !type(vect_3)            :: vnpa             ! vecteur normal a la paroi
          type(state)             :: w                ! vecteur d etat au centre de la maille
          type(vect_nvar)         :: balance          ! bilan des flux et des sources sur la maille
          type(vect_nvar)         :: fp               ! flux precedent
          integer                 :: num,idom,numloc  ! numero de la maille, numero de sous-domaine, numero local
      END TYPE cell
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
    ! type liste d entier allouable
      TYPE list_int
          integer,pointer,dimension(:):: L => null()
      END TYPE list_int
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
    ! type liste vect-nvar allouable
      TYPE list_vec
         type(vect_nvar),pointer,dimension(:):: vec => null()
      END TYPE list_vec
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
    ! type maillage
      TYPE mesh
         integer                             :: numdom,nb_cell,nb_face        ! numero du sous-domaine, nombre de cellules et de faces
         integer                             :: nb_dom,nb_vertex              ! nombre de sous-domaines, nombre de sommets
         integer                             :: nb_level_face,nb_level_cell   ! nombre de niveaux par faces et par cellules
         integer                             :: ndim                          ! dimension du maillage 0/ Axi, 1/1D, 2/2D , 3/3D
         real(kind=kind(0.d0))               :: small,big                     ! dimensions de la plus petite et plus grosse cellule
         type(face),pointer,dimension(:)     :: list_face => null()           ! tableaux des cellules
         type(cell),pointer,dimension(:)     :: list_cell => null()           ! tableaux des faces
         type(point),pointer,dimension(:)    :: list_vertex => null()         ! tableaux des vertex
         type(list_int),pointer,dimension(:) :: list_send => null()           ! tableau des listes de numeros de cellules Ã  envoyer pour domaines voisins
         type(list_int),pointer,dimension(:) :: list_recv => null()           ! tableau des listes de numeros de cellules Ã  recevoir des domaines voisins
      END TYPE mesh
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
    ! type Bloc
      TYPE bloc
         integer                            :: numbl,idom              ! numero de bloc et de domaine
         integer                            :: morton                  !  Numero issu du Z-order (code de morton)
         integer                            :: nrb,nx,ny,nz            ! nbre de cellules suivant x,y,z et niveau de raffinement (puissance de 2),
         type(point),dimension(8)           :: s                       ! Definition geometrique de la boite par ces 8 sommets
         real(kind=kind(0.d0))              :: volc                    ! volume du bloc
         integer,dimension(6)               :: cl(6)                   ! Cl ou numero du bloc voisin: clxmin,clxmax,clymin,clymax,clzmin,clzmax
         integer,dimension(6)               :: nrf(6)                  ! Niveau de raffinement de la frontiere du bloc : nrxmin,nrxmax,nrymin,nrymax,nrzmin,nrzmax
         integer,dimension(6)               :: dom(6)                  ! Numero de domaine du bloc voisin:
         integer                            :: first_cell, nb_cell     ! Numero de la premiere cellule, nombre de cellules
         integer                            :: first_face, nb_face     ! Numero de la premiere face, nombre de faces
         integer                            :: first_vertex, nb_vertex ! Numero du premier sommet, nombre de sommet
         logical                            :: isol                    ! Indicatrice de presence du solide
         real(kind=kind(0.d0)),dimension(8) :: vb            ! valeurs stockees par bloc pour SV: bathymetrie aux 4 premiers sommets
                                                             ! et coefficient de friction aux 4 premiers sommets
      END TYPE bloc
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
    ! type chaineR1
      TYPE chaineR1
         integer                  :: num, interieur
         real*8                   :: z,phi
         Type(chaineR1), pointer  :: prec,suiv
      END TYPE chaineR1
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
    ! type chaineR2
      TYPE chaineR2
         real*8                   :: y
         type(chaineR1), pointer  :: cr1
         type(chaineR2), pointer  :: prec,suiv
      END TYPE chaineR2
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
    ! type chaineR3
      TYPE chaineR3
          real*8                  :: x
          type(chaineR2), pointer :: cr2
          type(chaineR3), pointer :: prec,suiv
      END TYPE chaineR3
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
      TYPE facette
    ! tableau des points (au plus 3)
         integer,dimension(3)    :: vertex
      END TYPE facette
    !----- Fin Type --------------------------------------------------------

    !----- Debut Type ------------------------------------------------------
    ! --  TYPE solide
      TYPE solide
          integer                                   :: id=0
    ! Identifiant (numero) du solide
          integer                                   :: imv=0
    ! mouvement du solide: =-1 fixe ; =0 libre ; >0 prescrit par la fonction numero imv
          integer                                   :: nb_vert=0,nb_face=0
    ! Nbre de sommets, facettes ou aretes definissant le solide
          real(kind=kind(0.d0))                     :: xmin_s=0.d0,xmax_s=0.d0,ymin_s=0.d0,ymax_s=0.d0,zmin_s=0.d0,zmax_s=0.d0
    ! Bounding Box du solide
          real(kind=kind(0.d0))                     :: rho=0.d0
    ! Masse volumique du solide
          type(vect_3)                              :: xg,theta
    ! Position du centre de gravite du solide, angle de rotation par rapport au referentiel global
          type(facette), dimension(:), allocatable  :: list_facette
    ! Liste des facettes constituant l'enveloppe du solide
          type(point), dimension(:), allocatable    :: list_vertex
    ! Liste des vertex sur l enveloppe du solide
          integer                                   :: nb_cell=0
    ! Nbre de cellules contenues dans le solide
    !      integer, dimension(:), allocatable        :: list_cells
      END TYPE solide
    !----- Fin Type --------------------------------------------------------
    !===========================   FIN DU MODULE   =========================

      END MODULE geo_typ