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

📄 readcgns_ustconnect.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
字号:
!------------------------------------------------------------------------------!! Procedure : readcgns_ustconnect         Auteur : J. Gressier!                                         Date   : Novembre 2002! Fonction                                Modif  : (cf historique)!   Lecture des de la connectivite de tous les elements!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine readcgns_ustconnect(unit, ib, iz, zone, nmax_elem)                 use CGNSLIB       ! definition des mots-clefsuse CGNS_STRUCT   ! Definition des structures CGNSuse OUTPUT        ! Sorties standard TYPHONimplicit none! -- Entrees --integer             :: unit       ! numero d'unite pour la lectureinteger             :: ib, iz     ! numero de base et de zoneinteger             :: nmax_elem  ! nombre total d'elements! -- Sorties --type(st_cgns_zone)  :: zone       ! connectivite cellule->sommets                                  !              faces  ->sommets                                  ! dans la structure zone! -- Variables internes --                                        integer             :: ier        ! code erreurinteger             :: ifam, nfam ! indice de famille et nombre total de famillesinteger             :: ideb, ifin ! indice des cellules repertoriees dans la sectioninteger             :: itype      ! type d'elementinteger             :: nbd, ip    ! entiers non utilises en sortietype(st_cgns_ustconnect), pointer &                    :: pfam       ! pointeur sur une familleinteger, dimension(:,:), allocatable &                    :: elem       ! tableau de connectivite intermediairecharacter(len=cgnslen) :: nom     ! nom fantome! -- Debut de procedurewrite(str_w,'(a,i8,a)') "lecture des connectivites du maillage non structure :",nmax_elem," elements"call print_info(5, adjustl(str_w))! --- Lecture du nombre de sections ---! (les cellules sont regroupees par section selon leur type)call cg_nsections_f(unit, ib, iz, nfam, ier)if (ier /= 0)   call erreur("Lecture CGNS","Probleme a la lecture du nombre de sections")! --- Lecture des types de section et affectation aux familles ---zone%ncellfam = 0zone%nfacefam = 0zone%nedgefam = 0allocate(zone%cellfam(nfam))    ! on surdimensionne les listes de familles au nombreallocate(zone%facefam(nfam))    ! de familles maximal alors que seule la somme doitallocate(zone%edgefam(nfam))    ! faire "nfam"do ifam = 1, nfam               ! Boucle sur l'ensemble des sections  call cg_section_read_f(unit, ib, iz, ifam, nom, itype, ideb, ifin, nbd, ip, ier)  if (ier /= 0) call erreur("Lecture CGNS",&                            "Probleme a la lecture des informations de la section")  select case(zone%imesh) ! TRAITEMENT SELON 2D OU 3D  case(2) ! 2D    select case(itype)      case(NODE)        zone%nedgefam = zone%nedgefam + 1        pfam => zone%edgefam(zone%nedgefam)      case(BAR_2,BAR_3)        zone%nfacefam = zone%nfacefam + 1        pfam => zone%facefam(zone%nfacefam)      case(TRI_3,QUAD_4,TRI_6,QUAD_8,QUAD_9)        zone%ncellfam = zone%ncellfam + 1        pfam => zone%cellfam(zone%ncellfam)      case(TETRA_4,PYRA_5,PENTA_6,HEXA_8,TETRA_10,PYRA_14,PENTA_15,PENTA_18,HEXA_20,HEXA_27)        call erreur("Gestion CGNS", "Elements volumiques inattendus en 2D")      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")    endselect  case(3) ! 3D    select case(itype)      case(NODE)        call erreur("Gestion CGNS","Elements NODE inattendus en 3D")      case(BAR_2,BAR_3)        zone%nedgefam = zone%nedgefam + 1        pfam => zone%edgefam(zone%nedgefam)      case(TRI_3,QUAD_4,TRI_6,QUAD_8,QUAD_9)        zone%nfacefam = zone%nfacefam + 1        pfam => zone%facefam(zone%nfacefam)      case(TETRA_4,PYRA_5,PENTA_6,HEXA_8,TETRA_10,PYRA_14,PENTA_15,PENTA_18,HEXA_20,HEXA_27)        zone%ncellfam = zone%ncellfam + 1        pfam => zone%cellfam(zone%ncellfam)      case(MIXED, NGON_n)        call erreur("Gestion CGNS", "Elements MIXED et NGON_n non traites")      case default        call erreur("Gestion CGNS", "Type d'element non reconnu dans CGNSLIB")    endselect  case default    call erreur("Developpement", "incoherence de programmation (imesh)")  endselect  ! --- Lecture du nombre de sommets pour le type d'element itype // allocation ---   call cg_npe_f(itype, pfam%nbfils, ier)  if (ier /= 0)    call erreur("Lecture CGNS","Probleme a la lecture du type d'element")  pfam%type    = itype  pfam%ideb    = ideb  pfam%ifin    = ifin  pfam%nbnodes = ifin - ideb + 1  allocate(pfam%fils(ideb:ifin, pfam%nbfils))    write(str_w,'(a,a,a,i8,a,i2,a)') ". ",ElementTypeName(itype)(1:12),": ",&                                   pfam%nbnodes," elements a", pfam%nbfils," sommets"  call print_info(8, adjustl(str_w))  allocate(elem(pfam%nbfils, pfam%nbnodes))  ! tableau intermediaire pour echanger les indices  elem = 0  call cg_elements_read_f(unit, ib, iz, ifam, elem, ip, ier)       ! lecture  if (ier /= 0) call erreur("Lecture CGNS", &                            "Probleme a la lecture de connectivite dans une section")  pfam%fils(ideb:ifin, 1:pfam%nbfils) = transpose(elem)            ! echange des indices  deallocate(elem)                                                 ! desallocation  ! ---  ---  ! Il est envisageable de renumeroter les famille par ensemble volumiques et surfaciques  ! pour imposer une continuite de la numerotation. Mais cela n'est a priori pas obligatoireenddo ! fin de la boucle sur les sections!------------------------------endsubroutine readcgns_ustconnect

⌨️ 快捷键说明

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