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

📄 integration_kdif_ust.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
字号:
!------------------------------------------------------------------------------!! Procedure : integration_kdif_ust        Auteur : J. Gressier!                                         Date   : Avril 2003! Fonction                                Modif  : (cf historique)!   Integration d'un domaine non structure!   Le corps de la routine consiste a distribuer les etats et les gradients!   sur chaque face.!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine integration_kdif_ust(dt, defsolver, defspat, domaine, field, flux, &                                calc_jac, jacL, jacR)use TYPHMAKEuse OUTPUTuse VARCOMuse MENU_SOLVERuse MENU_NUMuse USTMESHuse DEFFIELDuse EQKDIFimplicit none! -- Declaration des entrees --real(krp)        :: dt               ! pas de temps CFLtype(mnu_solver) :: defsolver        ! type d'equation a resoudretype(mnu_spat)   :: defspat          ! parametres d'integration spatialetype(st_ustmesh) :: domaine          ! domaine non structure a integrerlogical          :: calc_jac         ! choix de calcul de la jacobienne! -- Declaration des entrees/sorties --type(st_field)   :: field            ! champ des valeurs et residus! -- Declaration des sorties --type(st_genericfield)   :: flux        ! flux physiquesreal(krp), dimension(*) :: jacL, jacR  ! jacobiennes associees (gauche et droite)! -- Declaration des variables internes --integer :: if, nfb              ! index de face et taille de bloc courantinteger :: nbuf                 ! taille de buffer integer :: ib, nbloc            ! index de bloc et nombre de blocsinteger :: ideb, ifin           ! index de debut et fin de blocinteger :: it                   ! index de tableauinteger :: icl, icr             ! index de cellule a gauche et a droitetype(st_kdifetat), dimension(:), allocatable &         :: cell_l, cell_r       ! tableau de cellules a gauche et a droitetype(v3d), dimension(:), allocatable &        :: grad_l, grad_r       ! tableau des gradientstype(v3d), dimension(:), allocatable &        :: cg_l, cg_r           ! tableau des centres de cellules a gauche et a droite   ! -- Debut de la procedure --! On peut ici decouper la maillage complet en blocs de taille fixe pour optimiser! l'encombrement memoire et la vectorisation! nombre de blocs (<= taille_buffer) necessaires pour domaine%nfacenbloc = 1 + (domaine%nface-1) / taille_buffernbuf  = 1 + (domaine%nface-1) / nbloc          ! taille de bloc buffernfb   = 1 + mod(domaine%nface-1, nbuf)         ! taille de 1er bloc peut etre <> de nbuf!print*,"!!! DEBUG integration kdif", domaine%nface, nbloc, nbuf, nfb, taille_buffer! il sera a tester l'utilisation de tableaux de champs generiques plut魌 que! des definitions type d'etat specifiques (st_kdifetat)allocate(grad_l(nbuf), grad_r(nbuf))allocate(cell_l(nbuf), cell_r(nbuf))allocate(  cg_l(nbuf),   cg_r(nbuf))ideb = 1do ib = 1, nbloc  !print*,"!!! DEBUG integration bloc,",ib," de",ideb," a",ideb+nfb-1  !! DEV : optimisation ? 13% du temps de calcul en explicite !!!  do it = 1, nfb    if  = ideb+it-1    icl = domaine%facecell%fils(if,1)    icr = domaine%facecell%fils(if,2)    grad_l(it) = field%gradient%tabvect(1)%vect(icl)    grad_r(it) = field%gradient%tabvect(1)%vect(icr)    cell_l(it)%temperature = field%etatprim%tabscal(1)%scal(icl)    cell_r(it)%temperature = field%etatprim%tabscal(1)%scal(icr)    cg_l(it)   = domaine%mesh%centre(icl, 1, 1)    cg_r(it)   = domaine%mesh%centre(icr, 1, 1)  enddo  ! - dans une version ulterieure, il sera necessaire de faire intervenir les gradients  ! - l'acces au tableau flux n'est pas programme de maniere generale !!! DEV  ifin = ideb+nfb-1  ! ATTENTION : le flux n'est passe ici que pour UN SEUL scalaire  call calc_kdif_flux(defsolver, defspat,                             &                      nfb, domaine%mesh%iface(ideb:ifin, 1, 1),       &                      cg_l, cell_l, grad_l, cg_r, cell_r, grad_r,     &                      flux%tabscal(1)%scal(ideb:ifin),                &                      calc_jac, jacL(ideb:ifin), jacR(ideb:ifin))  ideb = ideb + nfb  nfb  = nbuf         ! tous les blocs suivants sont de taille nbuf  enddodeallocate(grad_l, grad_r, cell_l, cell_r, cg_l, cg_r)call fluxlimite(defsolver, domaine, flux)endsubroutine integration_kdif_ust!------------------------------------------------------------------------------!! Historique des modifications!! avr  2003 : creation de la procedure! juin 2003 : maj gestion variables conservatives et primitives! oct  2003 : ajout des gradients dans la distribution des etats gauche et droit! avr  2004 : calcul des jacobiennes pour implicitation!------------------------------------------------------------------------------!

⌨️ 快捷键说明

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