📄 setboco_kdif_hconv.f90
字号:
!------------------------------------------------------------------------------!! Procedure : setboco_kdif_hconv Auteur : J. Gressier/E. Radenac! Date : Juin 2004! Fonction Modif : (cf Historique)! Calcul des conditions aux limites non uniformes pour la conduction de la ! chaleur! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine setboco_kdif_hconv(unif, ustboco, ustdom, champ, flux, defsolver, bckdif)use TYPHMAKEuse OUTPUTuse VARCOMuse MENU_SOLVERuse MENU_BOCOuse USTMESHuse DEFFIELD implicit none! -- Declaration des entrees --integer :: unif ! uniform or nottype(st_ustboco) :: ustboco ! lieu d'application des conditions aux limitestype(st_ustmesh) :: ustdom ! maillage non structuretype(mnu_solver) :: defsolver ! type d'equation a resoudretype(st_boco_kdif) :: bckdif ! parameters and fluxes (field or constant)! -- Declaration des sorties --type(st_field) :: champ ! champ des etatsreal(krp), dimension(ustboco%nface) & :: flux ! flux! -- Declaration des variables internes --integer :: ifb, if, ip ! index de liste, index de face limite et parametresinteger :: ic, ighost ! index de cellule interieure, et de cellule fictivetype(v3d) :: cgface, cg, normale ! centre de face, de cellule, normale facereal(krp) :: d ! distance cellule - face limitereal(krp) :: conduct ! conductivite! -- Debut de la procedure --if (unif == uniform) then!-----------------------------------------! cas uniforme!-----------------------------------------do ifb = 1, ustboco%nface if = ustboco%iface(ifb) ic = ustdom%facecell%fils(if,1) ighost = ustdom%facecell%fils(if,2) ! Calcul "distance ponderee" centre de cellule - centre face cgface = ustdom%mesh%iface(if,1,1)%centre cg = ustdom%mesh%centre(ic,1,1) normale= ustdom%mesh%iface(if,1,1)%normale d = (cgface - cg) .scal. (cgface - cg) / (abs((cgface - cg).scal.normale)) ! Calcul conductivite conduct = valeur_loi(defsolver%defkdif%materiau%Kd, champ%etatprim%tabscal(1)%scal(ic)) ! Calcul approche de la temperature du point fictif pour calcul des gradients do ip = 1, champ%nscal champ%etatprim%tabscal(ip)%scal(ighost) = & ( (conduct/d) * champ%etatprim%tabscal(ip)%scal(ic) + bckdif%h_conv*bckdif%temp_conv ) & / (conduct/d+bckdif%h_conv) enddo ! Calcul du flux flux(ifb) = bckdif%h_conv*(champ%etatprim%tabscal(1)%scal(ighost) - bckdif%temp_conv)enddoelse!-----------------------------------------! cas non uniforme!-----------------------------------------do ifb = 1, ustboco%nface if = ustboco%iface(ifb) ic = ustdom%facecell%fils(if,1) ighost = ustdom%facecell%fils(if,2) ! Calcul "distance ponderee" centre de cellule - centre face cgface = ustdom%mesh%iface(if,1,1)%centre cg = ustdom%mesh%centre(ic,1,1) normale= ustdom%mesh%iface(if,1,1)%normale d = (cgface - cg) .scal. (cgface - cg) / (abs((cgface - cg).scal.normale)) ! Calcul conductivite conduct = valeur_loi(defsolver%defkdif%materiau%Kd, champ%etatprim%tabscal(1)%scal(ic)) ! Calcul approche de la temperature du point fictif pour calcul des gradients do ip = 1, champ%nscal champ%etatprim%tabscal(ip)%scal(ighost) = ( (conduct/d) * & champ%etatprim%tabscal(ip)%scal(ic) + bckdif%tconv_nunif(ifb)*bckdif%h_nunif(ifb) ) & / (conduct/d+bckdif%h_nunif(ifb)) enddo ! Calcul du flux flux(ifb) = bckdif%h_nunif(ifb)*(champ%etatprim%tabscal(1)%scal(ighost) & - bckdif%tconv_nunif(ifb))enddoendifendsubroutine setboco_kdif_hconv!------------------------------------------------------------------------------!! Historique des modifications!! juin 2004 : creation de la procedure! july 2004 : merge of uniform and non-uniform boco settings!------------------------------------------------------------------------------!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -