📄 integration_kdif_ust.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 + -