📄 comp_flux.f90
字号:
!------------------------------------------------------------------------------!! Procedure : comp_flux Auteur : E. Radenac! Date : Juin 2003! Fonction Modif : Juillet 2003! Comparaison des flux de part et d'autre d'une interface de deux zones!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine comp_flux(zone1, zone2, nbc1, nbc2, nfacelim, curtps, ncoupl)use DEFZONEuse OUTPUTuse TYPHMAKEuse GEO3Duse VARCOMuse MATER_LOIimplicit none! -- Declaration des entrees --type(st_zone) :: zone1, zone2integer :: nbc1, nbc2integer :: nfacelimreal(krp) :: curtpsinteger :: ncoupl! -- Declaration des sorties --! -- Declaration des variables internes --real(krp), dimension(nfacelim) :: d1, d2real(krp), dimension(nfacelim) :: conduct1, conduct2real(krp), dimension(nfacelim) :: flux1, flux2real(krp), dimension(nfacelim) :: temp1, temp2, tempinterreal(krp) :: dflux, dfluxcalcinteger :: i, if1, if2, ic1, ic2, icg1type(v3d) :: cg1, cg2, cgfacetype(v3d) :: vecinter! -- Debut de la procedure --do i=1, nfacelim ! indices des faces concernees if1 = zone1%grid%umesh%boco(nbc1)%iface(i) if2 = zone2%grid%umesh%boco(nbc2)%iface(i) cgface = zone1%grid%umesh%mesh%iface(if1,1,1)%centre ic1 = zone1%grid%umesh%facecell%fils(if1,1) icg1 = zone1%grid%umesh%facecell%fils(if1,2) cg1 = zone1%grid%umesh%mesh%centre(ic1,1,1) ic2 = zone2%grid%umesh%facecell%fils(if2,1) cg2 = zone2%grid%umesh%mesh%centre(ic2,1,1) ! calcul du vecteur unitaire "inter-cellules" vecinter = (cg2 - cg1) / abs((cg2 - cg1)) ! Calcul des distances d1 et d2 entre les cellules (des zones 1 et 2) et l'interface. d1(i) = (cgface-cg1).scal.vecinter d2(i) = (cg2-cgface).scal.vecinter ! Temperatures temp1(i) = zone1%grid%field_loc%etatprim%tabscal(1)%scal(ic1) temp2(i) = zone2%grid%field_loc%etatprim%tabscal(1)%scal(ic2) tempinter(i) = zone1%grid%field_loc%etatprim%tabscal(1)%scal(icg1) enddo ! Conductivites :!--DVT--------------------------------------------------------------do i=1, nfacelim select case(zone1%defsolver%defkdif%materiau%type) case(mat_LIN, mat_KNL) conduct1(i) = valeur_loi(zone1%defsolver%defkdif%materiau%Kd, temp1(i)) case(mat_XMAT) call erreur("Calcul de materiau","Materiau non lineaire interdit") endselect select case(zone2%defsolver%defkdif%materiau%type) case(mat_LIN, mat_KNL) conduct2(i) = valeur_loi(zone2%defsolver%defkdif%materiau%Kd, temp2(i)) case(mat_XMAT) call erreur("Calcul de materiau","Materiau non lineaire interdit") endselect enddo!-------------------------------------------------------------------!select case(zone1%defsolver%defkdif%materiau%type)!case(mat_LIN)! conduct1(:) = zone1%defsolver%defkdif%materiau%Kd%valeur!case(mat_KNL, mat_XMAT)! call erreur("Calcul de materiau","Materiau non lineaire interdit")!endselect!!select case(zone2%defsolver%defkdif%materiau%type)!case(mat_LIN)! conduct2(:) = zone2%defsolver%defkdif%materiau%Kd%valeur!case(mat_KNL, mat_XMAT)! call erreur("Calcul de materiau","Materiau non lineaire interdit")!endselect! Flux :flux1(:) = - conduct1(:) * ( tempinter(:) - temp1(:) ) / d1(:)flux2(:) = - conduct2(:) * ( temp2(:) - tempinter(:) ) / d2(:)! Ecriture d'un fichier TECPLOT :do i = 1, nfacelim if (abs(flux1(i)) == 0._krp) then if (abs(flux2(i)) == 0._krp) then dflux = 0._krp else dflux = 1._krp endif else dflux = abs( abs(flux2(i)) - abs(flux1(i)) ) / abs(flux1(i)) endif if (abs(flux1(i)) == 0._krp) then if (zone1%defsolver%boco(zone1%grid%umesh%boco(nbc1)%idefboco)%boco_kdif%flux_nunif(i) == 0._krp) then dfluxcalc = 0._krp else dfluxcalc = 1._krp endif else dfluxcalc = abs( zone1%defsolver%boco(zone1%grid%umesh%boco(nbc1)%idefboco)%boco_kdif%flux_nunif(i) - & abs(flux1(i)) )/ abs(flux1(i)) endif write(uf_compflux,'(6e18.8)') curtps, abs(flux1(i)), abs(flux2(i)), dflux, & zone1%defsolver%boco(zone1%grid%umesh%boco(nbc1)%idefboco)%boco_kdif%flux_nunif(i), & dfluxcalc enddoendsubroutine comp_flux!------------------------------------------------------------------------------!! Historique des modifications!! juin 2003 (v0.0.1b): creation de la procedure! juillet 2003 : conductivite non constante! oct 2004 : field chained list!------------------------------------------------------------------------------!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -