|
沙发

楼主 |
发表于 2023-9-8 15:58:42
|
只看该作者
[Fortran] 纯文本查看 复制代码 005 | real , parameter :: gamma = 1.4 |
006 | real , parameter :: L = 10.0 |
007 | real , parameter :: nx = 20 |
008 | real , parameter :: dx = L / nx |
009 | real , parameter :: t_final = 1.6 |
010 | real , parameter :: dt = 0.08 |
013 | integer :: i , n , tsteps |
015 | real , dimension ( 0 : nx ) :: rho , u , p |
016 | open ( 100 , file = 'resulr.dat' ) |
021 | if ( x <= 0.5 * L ) then |
034 | tsteps = t_final / dt |
041 | if ( x <= 0.5 * L ) then |
054 | rho ( i ) = rho ( i ) - dt / dx * ( flux ( rho , u , p , i ) - flux ( rho , u , p , i -1 ) ) |
055 | u ( i ) = u ( i ) - dt / dx * ( flux ( rho * u , u * u + p , u * ( u ( i ) + p ( i ) / ( rho ( i ) * ( gamma -1 ) ) ) , i ) - & |
056 | flux ( rho * u , u * u + p , u * ( u ( i -1 ) + p ( i -1 ) / ( rho ( i -1 ) * ( gamma -1 ) ) ) , i -1 ) ) |
057 | p ( i ) = p ( i ) - dt / dx * ( flux ( ( p / ( gamma -1 ) +0.5 * rho * u * u ) , ( u * ( u ( i ) + p ( i ) / ( rho ( i ) * ( gamma -1 ) ) ) ) , & |
058 | ( ( rho * u * u + p ) * ( u ( i ) + p ( i ) / ( rho ( i ) * ( gamma -1 ) ) ) ) / ( gamma -1 ) , i ) - & |
059 | flux ( ( p / ( gamma -1 ) +0.5 * rho * u * u ) , ( u * ( u ( i -1 ) + p ( i -1 ) / ( rho ( i -1 ) * ( gamma -1 ) ) ) ) , & |
060 | ( ( rho * u * u + p ) * ( u ( i -1 ) + p ( i -1 ) / ( rho ( i -1 ) * ( gamma -1 ) ) ) ) / ( gamma -1 ) , i -1 ) ) |
079 | write ( 100 , * ) 'variables=' , '"x","rho","u","p"' |
084 | write ( 100 , "(4(e15.7))" ) x , rho ( i ) , u ( i ) , p ( i ) |
091 | function flux ( rho , u , p , i ) result ( f ) |
092 | real , intent ( in ) :: rho ( : ) , u ( : ) , p ( : ) |
093 | integer , intent ( in ) :: i |
100 | end program shock_tube |
|
|