📄 integration_ns_ust.f90
字号:
!------------------------------------------------------------------------------!! Procedure : integration_ns_ust Auteur : J. Gressier! Date : July 2004! Fonction Modif : (see history)! 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_ns_ust(dt, defsolver, defspat, domaine, field, flux, & calc_jac, jacL, jacR)use TYPHMAKEuse OUTPUTuse VARCOMuse MENU_SOLVERuse MENU_NUMuse USTMESHuse DEFFIELDuse EQNSimplicit 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 --logical :: gradneeded ! use gradients or notinteger :: 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_nsetat), 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! il sera a tester l'utilisation de tableaux de champs generiques plut魌 que! des definitions type d'etat specifiques (st_nsetat)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 select case(defspat%method) case(hres_none) do it = 1, nfb if = ideb+it-1 icl = domaine%facecell%fils(if,1) icr = domaine%facecell%fils(if,2) cell_l(it)%density = field%etatprim%tabscal(1)%scal(icl) cell_r(it)%density = field%etatprim%tabscal(1)%scal(icr) cell_l(it)%pressure = field%etatprim%tabscal(2)%scal(icl) cell_r(it)%pressure = field%etatprim%tabscal(2)%scal(icr) cell_l(it)%velocity = field%etatprim%tabvect(1)%vect(icl) cell_r(it)%velocity = field%etatprim%tabvect(1)%vect(icr) enddo ! - l'acces au tableau flux n'est pas programme de maniere generale !!! DEV !---------------------------------------------------------------------- ! HIGH ORDER states interpolation !---------------------------------------------------------------------- case(hres_muscl) call hres_ns_muscl(defspat, nfb, ideb, domaine, & field%etatprim, field%gradient, & cell_l, cell_r) case default call erreur("flux computation","unknown high resolution method") endselect !---------------------------------------------------------------------- ! computation of INVISCID fluxes !---------------------------------------------------------------------- ifin = ideb+nfb-1 select case(defspat%sch_hyp) case(sch_hlle) call calc_flux_hlle(defsolver, defspat, & nfb, domaine%mesh%iface(ideb:ifin, 1, 1), & cell_l, cell_r, flux, ideb, & calc_jac, jacL(ideb:ifin), jacR(ideb:ifin)) case default call erreur("error","numerical scheme not implemented (flux computation)") endselect 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)endsubroutine integration_ns_ust!------------------------------------------------------------------------------!! Changes history!! july 2004 : creation de la procedure! nov 2004 : high order interpolation!------------------------------------------------------------------------------!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -