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

📄 calc_flux_hlle.f90

📁 国外大名顶顶的“台风”并行计算流体力学CFD软件的早期版本的源代码
💻 F90
字号:
!------------------------------------------------------------------------------!! Procedure : calc_flux_hlle              Auteur : J. Gressier!                                         Date   : July 2004! Fonction                                Modif  : (cf historique)!   Computation of HLLE flux for Euler equations!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine calc_flux_hlle(defsolver, defspat, nflux, face,        &                          cell_l, cell_r, flux, ideb,             &                          calc_jac, jacL, jacR)use TYPHMAKEuse OUTPUTuse VARCOMuse MENU_SOLVERuse MENU_NUMuse MESHBASEuse DEFFIELDuse EQNSuse GEO3Dimplicit none! -- Declaration des entrees --type(mnu_solver)      :: defsolver        ! parametres de definition du solveurtype(mnu_spat)        :: defspat          ! parametres d'integration spatialeinteger               :: nflux            ! nombre de flux (face) a calculerinteger               :: ideb             ! indice du premier flux a remplirtype(st_face), dimension(1:nflux) &                       :: face             ! donnees geometriques des facestype(st_nsetat), dimension(1:nflux) &                      :: cell_l, cell_r   ! champs des valeurs primitiveslogical               :: calc_jac         ! choix de calcul de la jacobienne! -- Declaration des sorties --type(st_genericfield)        :: fluxreal(krp), dimension(nflux)  :: jacL, jacR  ! jac associees! -- Declaration des variables internes --integer                   :: iftype(st_nsetat), dimension(:), allocatable &                          :: roetype(v3d)                 :: fnreal(krp)                 :: g, ig1, sl, sr, iks, kl, kr, kureal(krp)                 :: am, al, ar, vm, vnl, vnr, rel, rer! -- Debut de la procedure --g   = defsolver%defns%properties(1)%gammaig1 = 1._krp/(g - 1._krp)! -- Calculs preliminaires --allocate(roe(1:nflux))call calc_roe_states(defsolver%defns%properties(1), nflux, cell_l, cell_r, roe)! -- Calcul du flux --do if = 1, nflux  !print*,"roe",abs(roe(if)%velocity)  fn  = face(if)%normale   vnl = cell_l(if)%velocity.scal.fn                    ! face normal velocity (left  state)  vnr = cell_r(if)%velocity.scal.fn                    !                      (right state)  vm  =    roe(if)%velocity.scal.fn                    !                      (roe average state)  al  = sqrt(g*cell_l(if)%pressure/cell_l(if)%density) ! sound speed          (left state)  ar  = sqrt(g*cell_r(if)%pressure/cell_r(if)%density) !                      (right state)  am  = sqrt(g*   roe(if)%pressure/   roe(if)%density) !                      (roe average state)  ! volumic total energy (left and right)  rel = ig1*cell_l(if)%pressure + .5_krp*cell_l(if)%density*sqrabs(cell_l(if)%velocity)  rer = ig1*cell_r(if)%pressure + .5_krp*cell_r(if)%density*sqrabs(cell_r(if)%velocity)  sl  = min(0._krp, vnl-al, vm-am)                  ! left  highest wave speed  !print*, cell_l(if)%density  !print*, cell_r(if)%pressure  sr  = max(0._krp, vnr+ar, vm+am)                  ! right highest wave speed  iks = 1._krp/(sr-sl)  kl  =  sr*iks  kr  = -sl*iks  ku  =  sl*sr*iks  ! mass flux  flux%tabscal(1)%scal(ideb-1+if) = (kl*vnl-ku)*cell_l(if)%density + (kr*vnr+ku)*cell_r(if)%density  ! energy flux  flux%tabscal(2)%scal(ideb-1+if) = (kl*vnl-ku)*rel + (kr*vnr+ku)*rer &                                  + (kl*vnl*cell_l(if)%pressure + kr*vnr*cell_r(if)%pressure)  ! momentum flux  flux%tabvect(1)%vect(ideb-1+if) = ((kl*vnl-ku)*cell_l(if)%density)*cell_l(if)%velocity &                                  + ((kr*vnr+ku)*cell_r(if)%density)*cell_r(if)%velocity &                                  + (kl*cell_l(if)%pressure + kr*cell_r(if)%pressure)*fnenddodeallocate(roe)!--------------------------------------------------------------! Calcul des jacobiennes!--------------------------------------------------------------if (calc_jac) then  call erreur("Developpement","Calcul de jacobiennes du flux HLLE non implemente")endif!  do if = 1, nflux!    jacR(if) =  - kH(if) * (vLR(if).scal.face(if)%normale) &!                  / (defsolver%defkdif%materiau%Cp * dLR(if)**2)!    jacL(if) = -jacR(if)!  enddo!endif!deallocate()endsubroutine calc_flux_hlle!------------------------------------------------------------------------------!! Changes history!! July 2004 : creation, HLLE flux!------------------------------------------------------------------------------!

⌨️ 快捷键说明

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