📄 calc_kdif_timestep.f90
字号:
!------------------------------------------------------------------------------!! Procedure : calc_kdif_timestep Auteur : J. Gressier! Date : Septembre 2003! Fonction Modif : (cf historique)! Calcul du pas de temps local et global par zone selon solveur!! Defauts/Limitations/Divers :!!------------------------------------------------------------------------------!subroutine calc_kdif_timestep(deftime, mat, umesh, field, dtloc, ncell)use TYPHMAKEuse OUTPUTuse VARCOMuse MENU_NUMuse DEFFIELDuse USTMESHuse MATERIAUuse MATER_LOIimplicit none! -- Declaration des entrees --type(mnu_time) :: deftime ! parametres pour le calcul du pas de tempstype(st_materiau) :: mat ! donnees du materiautype(st_ustmesh) :: umesh ! donnees geometriquestype(st_field) :: field ! donnees champsinteger :: ncell ! nombre de cellules internes (taille de dtloc)! -- Declaration des sorties --real(krp), dimension(1:ncell) :: dtloc ! tableau de pas de temps local! -- Declaration des variables internes --integer :: if, icreal(krp) :: tc! -- Debut de la procedure --! -- Calcul de somme S_i ** 2 --! pour faire la somme des surfaces des faces, on boucle d'abord sur les faces! internes pour les contributions aux deux cellules voisines, puis on boucle! sur les faces limites pour uniquement ajouter la contribution aux cellules ! internes! initialisation avant somme des faces (**2)dtloc(1:ncell) = 0._krp! somme des surfaces de faces internes sur chaque cellule (boucle sur faces)do if = 1, umesh%nface_int ic = umesh%facecell%fils(if,1) dtloc(ic) = dtloc(ic) + umesh%mesh%iface(if,1,1)%surface **2 ic = umesh%facecell%fils(if,2) dtloc(ic) = dtloc(ic) + umesh%mesh%iface(if,1,1)%surface **2enddo! somme des surfaces de faces limites sur chaque cellule (boucle sur faces)do if = umesh%nface_int+1, umesh%nface ic = umesh%facecell%fils(if,1) dtloc(ic) = dtloc(ic) + umesh%mesh%iface(if,1,1)%surface **2enddo! -- Calcul de V**2 / somme_i S_i **2 et prise en compte du nombre de Fourier --do ic = 1, ncell dtloc(ic) = 2._krp * deftime%stabnb * umesh%mesh%volume(ic,1,1)**2 / dtloc(ic)enddo! -- Calcul des coefficients specifiques du materiau --select case(mat%type)case(mat_LIN) dtloc(1:ncell) = dtloc(1:ncell) * mat%Cp / mat%Kd%valeurcase(mat_KNL) do ic = 1, ncell tc = field%etatprim%tabscal(1)%scal(ic) dtloc(ic) = dtloc(ic) * mat%Cp / valeur_loi(mat%Kd, tc) enddocase(mat_XMAT) call erreur("Calcul de materiau","Materiau non lineaire interdit")endselect! dans le cas de pas de temps global, le pas de temps minimum est calcule et impose! dans la routine appelanteendsubroutine calc_kdif_timestep!------------------------------------------------------------------------------!! Historique des modifications! sept 2003 : creation, calcul par nombre de Fourier, formule generale 3D!------------------------------------------------------------------------------!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -