|
各位大佬,最近刚学lbm,利用Fortran进行编程,但是代码输出数据全部是零,不知道该怎么改了,特来求教,请解答,以下附属代码
[Fortran] 纯文本查看 复制代码 001 | parameter ( n = 1000 , m = 40 ) |
003 | real feq ( 0 : 8 , 0 : n , 0 : m ) , rho ( 0 : n , 0 : m ) |
004 | real w ( 0 : 8 ) , cx ( 0 : 8 ) , cy ( 0 : 8 ) |
005 | real u ( 0 : n , 0 : m ) , v ( 0 : n , 0 : m ) |
008 | open ( 2 , file = 'uvfield' ) |
021 | omega = 1.0 / ( 3 . * alpha +0.5 ) |
023 | cx ( : ) = ( / 0.0 , 1.0 , 0.0 , -1.0 , 0.0 , 1.0 , -1.0 , -1.0 , 1.0 / ) |
024 | cy ( : ) = ( / 0.0 , 0.0 , 1.0 , 0.0 , -1.0 , 1.0 , 1.0 , -1.0 , -1.0 / ) |
025 | w ( : ) = ( / 4 . / 9 . , 1 . / 9 . , 1 . / 9 . , 1 . / 9 . , 1 . / 9 . , 1 . / 36 . , 1 . / 36 . , 1 . / 36 . , 1 . / 36 . / ) |
048 | call collesion ( u , v , f , feq , rho , omega , w , cx , cy , n , m ) |
051 | call sfbound ( f , n , m , uo ) |
052 | call rhouv ( f , rho , u , v , cx , cy , n , m ) |
054 | write ( 8 , * ) kk , u ( n / 2 , m / 2 ) , v ( n / 2 , m / 2 ) |
057 | call result ( u , v , rho , uo , n , m ) |
060 | subroutine collesion ( u , v , f , feq , rho , omega , w , cx , cy , n , m ) |
062 | real feq ( 0 : 8 , 0 : n , 0 : m ) , rho ( 0 : n , 0 : m ) |
063 | real w ( 0 : 8 ) , cx ( 0 : 8 ) , cy ( 0 : 8 ) |
064 | real u ( 0 : n , 0 : m ) , v ( 0 : n , 0 : m ) |
067 | t 1 = u ( i , j ) * u ( i , j ) + v ( i , j ) * v ( i , j ) |
069 | t 2 = u ( i , j ) * cx ( k ) + v ( i , j ) * cy ( k ) |
070 | feq ( k , i , j ) = rho ( i , j ) * w ( k ) * ( 1.0 +3.0 * t 2 +4.50 * t 2 * t 2 -1.50 * t 1 ) |
071 | f ( k , i , j ) = omega * feq ( k , i , j ) + ( 1 . - omega ) * f ( k , i , j ) |
077 | t 1 = u ( i , j ) * u ( i , j ) + v ( i , j ) * v ( i , j ) |
079 | t 2 = u ( i , j ) * cx ( k ) + v ( i , j ) * cy ( k ) |
080 | feq ( k , i , j ) = rho ( i , j ) * w ( k ) * ( 1.0 +3.0 * t 2 +4.50 * t 2 * t 2 -1.50 * t 1 ) |
081 | f ( k , i , j ) = omega * feq ( k , i , j ) + ( 1 . - omega ) * f ( k , i , j ) |
087 | subroutine streaming ( f , n , m ) |
104 | f ( 5 , i , j ) = f ( 5 , i -1 , j -1 ) |
107 | f ( 6 , i , j ) = f ( 6 , i +1 , j -1 ) |
115 | f ( 7 , i , j ) = f ( 7 , i +1 , j +1 ) |
118 | f ( 8 , i , j ) = f ( 8 , i -1 , j +1 ) |
153 | subroutine sfbound ( f , n , m , uo ) |
176 | rhow = ( f ( 0 , 0 , j ) + f ( 2 , 0 , j ) + f ( 4 , 0 , j ) +2 . * ( f ( 3 , 0 , j ) + f ( 6 , 0 , j ) + f ( 7 , 0 , j ) ) ) / ( 1 . - uo ) |
177 | f ( 1 , 0 , j ) = f ( 3 , 0 , j ) +2 . * rhow * uo / 3 . |
178 | f ( 5 , 0 , j ) = f ( 7 , 0 , j ) + rhow * uo / 6 . |
179 | f ( 8 , 0 , j ) = f ( 6 , 0 , j ) + rhow * uo / 6 . |
189 | f ( 1 , n , j ) = 2 . * f ( 1 , n -1 , j ) - f ( 1 , n -2 , j ) |
190 | f ( 5 , n , j ) = 2 . * f ( 5 , n -1 , j ) - f ( 5 , n -2 , j ) |
191 | f ( 8 , n , j ) = 2 . * f ( 8 , n -1 , j ) - f ( 8 , n -2 , j ) |
195 | subroutine rhouv ( f , rho , u , v , cx , cy , n , m ) |
196 | real f ( 0 : 8 , 0 : n , 0 : m ) , rho ( 0 : n , 0 : m ) , u ( 0 : n , 0 : m ) , v ( 0 : n , 0 : m ) , cx ( 0 : 8 ) , cy ( 0 : 8 ) |
198 | real :: ssum , usum , vsum |
210 | usum = usum + f ( k , i , j ) * cx ( k ) |
211 | vsum = vsum + f ( k , i , j ) * cy ( k ) |
230 | usum = usum + f ( k , i , j ) * cx ( k ) |
231 | vsum = vsum + f ( k , i , j ) * cy ( k ) |
248 | subroutine result ( u , v , rho , uo , n , m ) |
250 | real u ( 0 : n , 0 : m ) , v ( 0 : n , 0 : m ) , rho ( 0 : n , 0 : m ) , strf ( 0 : n , 0 : m ) |
253 | open ( 5 , file = 'streamf' ) |
256 | rhoav = 0.5 * ( rho ( i -1 , 0 ) + rho ( i , 0 ) ) |
257 | strf ( i , 0 ) = strf ( i -1 , 0 ) - rhoav * 0.5 * ( v ( i -1 , 0 ) + v ( i , 0 ) ) |
261 | rhom = 0.5 * ( rho ( i , j ) + rho ( i , j -1 ) ) |
262 | strf ( i , j ) = strf ( i , j -1 ) + rhom * 0.5 * ( u ( i , j -1 ) + u ( i , j ) ) |
267 | rhom = 0.5 * ( rho ( i , j ) + rho ( i , j -1 ) ) |
268 | strf ( i , j ) = strf ( i , j -1 ) + rhom * 0.5 * ( u ( i , j -1 ) + u ( i , j ) ) |
272 | write ( 2 , * ) "VARIABLES =X, Y, U, V, S" |
273 | write ( 2 , * ) "ZONE " , "I=" , n +1 , "J=" , m +1 , "," , "F=BLOCK" |
276 | write ( 2 , * ) i , j , u ( i , j ) , v ( i , j ) , strf ( i , j ) |
280 | write ( 3 , * ) j / float ( m ) , u ( n / 2 , j ) / uo , u ( n / 4 , j ) / uo , u ( 3 * n / 4 , j ) / uo |
283 | write ( 4 , * ) i / float ( n ) , v ( i , m / 2 ) / uo |
|
|