⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cgns2typhon_ustmesh.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
字号:
!------------------------------------------------------------------------------!! Procedure : cgns2typhon_ustmesh         Auteur : J. Gressier!                                         Date   : Novembre 2002! Fonction                                Modif  : (cf historique)!   Conversion d'une zone CGNS en structure Maillage NON structure pour Typhon!   Creation des connectivites FACE->SOMMETS et FACES->CELLULES!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine cgns2typhon_ustmesh(cgnszone, mesh) use CGNS_STRUCT   ! Definition des structures CGNSuse DEFZONE       ! Definition des structures ZONEuse USTMESH       ! Definition des structures maillages non structuresuse OUTPUT        ! Sorties standard TYPHONimplicit none ! -- Entrees --type(st_cgns_zone) :: cgnszone          ! structure ZONE des donnees CGNS! -- Sorties --type(st_ustmesh)   :: mesh           ! structure USTMESH des donnees TYPHON! -- Variables internes --integer, parameter  :: nmax_cell = 20   ! nb max de cellules dans la connectivite vtex->celltype(st_connect)    :: face_vtex, &     ! connectivite intermediaire faces   -> sommets                       face_cell        ! connectivite intermediaire faces   -> cellulesinteger             :: ntotcell         ! calcul du nombre total de cellulesinteger             :: maxvtex, maxface ! nombre de sommets/face, face/celluleinteger             :: nface            ! estimation du nombre de facesinteger             :: iconn, icell, ivtex   ! indices courants! -- Debut de procedurecall print_info(8,". conversion du maillage et creation des connectivites")if (cgnszone%type /= Unstructured) then  call erreur("Developpement","incoherence dans l'appel de subroutine")endifselect case(cgnszone%imesh)    ! transfert du nombre de dimensions (2D ou 3D)case(2)  mesh%mesh%info%geom = msh_2dplancase(3)  mesh%mesh%info%geom = msh_3dendselect! --- conversion du nuage du point ---call print_info(8,"  nuage de points")mesh%mesh%nvtex  = cgnszone%mesh%ni         ! nb de sommetsallocate(mesh%mesh%vertex(mesh%mesh%nvtex, 1, 1))mesh%mesh%vertex = cgnszone%mesh%vertex     ! copie du nuage de pointsmesh%nvtex       = mesh%mesh%nvtex          ! nb de sommets (redondant)! on specifie que le tableau de faces ne sera pas alloueenullify(mesh%mesh%iface)mesh%mesh%nface = 0! --- creation des connectivites (cellule -> faces) et (face -> sommets) ---call print_info(8,"  creation des faces et connectivites associees")! recherche des tailles de tableaux selon les types d'elementsntotcell = 0    ! nombre total de cellulesmaxvtex  = 0    ! nombre de sommets max par facemaxface  = 0    ! nombre de faces   max par cellulenface    = 0    ! estimation du nombre de faces maxcall init(mesh%cellvtex)do iconn = 1, cgnszone%ncellfam          ! boucle sur les sections de cellules   ! cumul du nombre de cellules  ntotcell = ntotcell + cgnszone%cellfam(iconn)%nbnodes    !print*,iconn," ",cgnszone%cellfam(iconn)%type !! DEBUG  select case(cgnszone%cellfam(iconn)%type)  case(NODE)    call erreur("Developpement", "Type de cellule inattendu (NODE)")  case(BAR_2,BAR_3)    call erreur("Developpement", "Type de cellule inattendu (BAR)")  case(TRI_3,TRI_6)    maxvtex = max(maxvtex, 2)    maxface = max(maxface, 3)    nface   = nface + 3*cgnszone%cellfam(iconn)%nbnodes    mesh%cellvtex%ntri = mesh%cellvtex%ntri + cgnszone%cellfam(iconn)%nbnodes  case(QUAD_4,QUAD_8,QUAD_9)    maxvtex = max(maxvtex, 2)    maxface = max(maxface, 4)    nface   = nface + 4*cgnszone%cellfam(iconn)%nbnodes    mesh%cellvtex%nquad = mesh%cellvtex%nquad + cgnszone%cellfam(iconn)%nbnodes  case(TETRA_4,TETRA_10)    maxvtex = max(maxvtex, 3)    maxface = max(maxface, 4)    nface   = nface + 4*cgnszone%cellfam(iconn)%nbnodes    mesh%cellvtex%ntetra = mesh%cellvtex%ntetra + cgnszone%cellfam(iconn)%nbnodes  case(PYRA_5,PYRA_14)    maxvtex = max(maxvtex, 4)    maxface = max(maxface, 5)    nface   = nface + 5*cgnszone%cellfam(iconn)%nbnodes    mesh%cellvtex%npyra = mesh%cellvtex%npyra + cgnszone%cellfam(iconn)%nbnodes  case(PENTA_6,PENTA_15,PENTA_18)    maxvtex = max(maxvtex, 4)    maxface = max(maxface, 5)    nface   = nface + 5*cgnszone%cellfam(iconn)%nbnodes    mesh%cellvtex%npenta = mesh%cellvtex%npenta + cgnszone%cellfam(iconn)%nbnodes  case(HEXA_8,HEXA_20,HEXA_27)    maxvtex = max(maxvtex, 4)    maxface = max(maxface, 6)    nface   = nface + 6*cgnszone%cellfam(iconn)%nbnodes    mesh%cellvtex%nhexa = mesh%cellvtex%nhexa + cgnszone%cellfam(iconn)%nbnodes  case(MIXED, NGON_n)    call erreur("Gestion CGNS", "Elements MIXED et NFON_n non traites")  case default    call erreur("Gestion CGNS", "Type d'element non reconnu dans CGNSLIB")  endselectenddo! -- copie des connectivites cell->vtex --call new(mesh%cellvtex)do iconn = 1, cgnszone%ncellfam          ! boucle sur les sections de cellules   select case(cgnszone%cellfam(iconn)%type)  case(NODE)    call erreur("Developpement", "Type de cellule inattendu (NODE)")  case(BAR_2,BAR_3)    call erreur("Developpement", "Type de cellule inattendu (BAR)")  case(TRI_3)    mesh%cellvtex%tri%fils(:,1:3) = cgnszone%cellfam(iconn)%fils(:,1:3)    mesh%cellvtex%itri(:) = (/ (icell, icell = cgnszone%cellfam(iconn)%ideb, &                                               cgnszone%cellfam(iconn)%ifin  ) /)  case(TRI_6)    call erreur("Developpement", "Type de cellule inattendu (TRI_6)")    !mesh%cellvtex%tri%fils(:,1:3) = cgnszone%cellfam(iconn)%fils(:,1:3)  case(QUAD_4)    mesh%cellvtex%quad%fils(:,1:4) = cgnszone%cellfam(iconn)%fils(:,1:4)    mesh%cellvtex%iquad(:) = (/ (icell, icell = cgnszone%cellfam(iconn)%ideb, &                                                cgnszone%cellfam(iconn)%ifin  ) /)  case(QUAD_8,QUAD_9)    call erreur("Developpement", "Type de cellule inattendu (QUAD_8/9)")  case(TETRA_4)    mesh%cellvtex%tetra%fils(:,1:4) = cgnszone%cellfam(iconn)%fils(:,1:4)    mesh%cellvtex%itetra(:) = (/ (icell, icell = cgnszone%cellfam(iconn)%ideb, &                                                 cgnszone%cellfam(iconn)%ifin  ) /)  case(TETRA_10)    call erreur("Developpement", "Type de cellule inattendu (TETRA_10)")  case(PYRA_5)    mesh%cellvtex%pyra%fils(:,1:5) = cgnszone%cellfam(iconn)%fils(:,1:5)    mesh%cellvtex%ipyra(:) = (/ (icell, icell = cgnszone%cellfam(iconn)%ideb, &                                                cgnszone%cellfam(iconn)%ifin  ) /)  case(PYRA_14)    call erreur("Developpement", "Type de cellule inattendu (PYRA_14)")  case(PENTA_6)    mesh%cellvtex%penta%fils(:,1:6) = cgnszone%cellfam(iconn)%fils(:,1:6)    mesh%cellvtex%ipenta(:) = (/ (icell, icell = cgnszone%cellfam(iconn)%ideb, &                                                 cgnszone%cellfam(iconn)%ifin  ) /)  case(PENTA_15,PENTA_18)    call erreur("Developpement", "Type de cellule inattendu (PENTA_15/18)")  case(HEXA_8)    mesh%cellvtex%hexa%fils(:,1:8) = cgnszone%cellfam(iconn)%fils(:,1:8)    mesh%cellvtex%ihexa(:) = (/ (icell, icell = cgnszone%cellfam(iconn)%ideb, &                                                cgnszone%cellfam(iconn)%ifin  ) /)  case(HEXA_20,HEXA_27)    call erreur("Developpement", "Type de cellule inattendu (HEXA_20/27)")  case(MIXED, NGON_n)    call erreur("Gestion CGNS", "Elements MIXED et NFON_n non traites")  case default    call erreur("Gestion CGNS", "Type d'element non reconnu dans CGNSLIB")  endselectenddo! allocation des tableaux de connectivites! -- connectivite intermediaire face->sommets --call new(face_vtex, nface, maxvtex)face_vtex%nbnodes   = 0                     ! reinitialisation : nombre de faces creesface_vtex%fils(:,:) = 0                     ! initialisation de la connectivite! -- connectivite intermediaire face->cellules --call new(face_cell, nface, 2)face_cell%nbnodes   = 0                     ! reinitialisation : nombre de faces creesface_cell%fils(:,:) = 0                     ! initialisation de la connectivite! -- creation des faces et des connectivites --call createface_fromcgns(mesh%nvtex, cgnszone, face_cell, face_vtex)! Recopie des connectivites dans la structure TYPHON! avec le nombre exact de faces reconstruitesnface          = face_vtex%nbnodes     ! meme valeur que face_cell%nbnodes aussimesh%nface     = nfacemesh%ncell_int = ntotcellwrite(str_w,'(i10,a)') nface,"faces creees"call print_info(8,str_w)call new(mesh%facevtex, nface, maxvtex)call new(mesh%facecell, nface, 2)mesh%facevtex%fils(1:nface,1:maxvtex) = face_vtex%fils(1:nface,1:maxvtex)mesh%facecell%fils(1:nface,1:2)       = face_cell%fils(1:nface,1:2)! desallocation!deallocate(vtex_cell, ncell)call delete(face_cell)call delete(face_vtex)! -- Renumerotation des faces --call reorder_ustconnect(0, mesh)    ! action sur les connectivites uniquement! -- Conversion des conditions aux limites  --call cgns2typhon_ustboco(cgnszone, mesh)!print*,"fin de creation des structures TYPHON" !!! DEBUGmesh%ncell_lim = mesh%nface_limmesh%ncell     = mesh%ncell_int + mesh%ncell_lim!-------------------------endsubroutine cgns2typhon_ustmesh!------------------------------------------------------------------------------!! Historique des modifications!! nov  2002 : creation de la procedure! fev  2004 : renseignements dans structure INFO_MESH! juin 2004 : memorisation de la connectivite cell->vtex!             construction de faces avec toutes les familles!------------------------------------------------------------------------------!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -