Turb_man » 07 июл 2017, 11:18
c Сорртировка скоростей в узлах сетки, для применения базисных полиномов
Код: Выделить всё
subroutine velocity(num_step, third_name, v11, v22, v33)
character(16) third_name
real*8 vx, vy, vz, p
real*8 v1(512), v2(512), v3(512)
real*8 v11(1,8,8,8), v22(1,8,8,8), v33(1,8,8,8)
integer size_file, num_step(512), m, l, r, s, q
open(unit = 2, file = third_name, form='unformatted',
& status='old')
read(2) size_file
c Я считываю данные из файла и записываю их так, чтобы применить метод Лагранжа.
do l = 1, size_file
read(2) vx, vy, vz, p
do m = 1, 512
if(l.eq.num_step(m)) then
v1(m) = vx
v2(m) = vy
v3(m) = vz
endif
enddo
enddo
close(2)
c Отсортированный массив трёх компонет скорости
do m = 1, 1
do r = 1, 8
do s = 1, 8
do q = 1, 8
v11(m,r,s,q) = v1(q+8*(s-1)+64*(r-1)+512*(m-1))
v22(m,r,s,q) = v2(q+8*(s-1)+64*(r-1)+512*(m-1))
v33(m,r,s,q) = v3(q+8*(s-1)+64*(r-1)+512*(m-1))
c write(3,*) v11(m,r,s,q), v22(m,r,s,q), v33(m,r,s,q)
enddo
enddo
enddo
enddo
end
c--------------------------------------------------------------------------
c--------------------------------------------------------------------------
Вычисление среднего значения скорости для каждой точки
subroutine av_velocity(xx, yy, zz, pox, poy, poz, v11, v22, v33)
real*8 v11(1,8,8,8), v22(1,8,8,8), v33(1,8,8,8), lag(1,8,8,8)
integer i, j, k, n, xstep(1), ystep(1), zstep(1)
real*8 vx(1), vy(1), vz(1), xx(1), yy(1), zz(1)
real*8 pox(1,8,8,8), poy(1,8,8,8), poz(1,8,8,8)
call place(xx, yy, zz, xstep, ystep, zstep)
vx = 0
vy = 0
vz = 0
lag = 1
do n = 1, 1
do i = 1, 8
do j = 1, 8
do k = 1, 8
c write(*,*) v11(n,i,j,k), v22(n,i,j,k), v33(n,i,j,k)
c Применние интерполяционных полиномов Лагранжа
call lagrange(xx(n),yy(n),zz(n),pox(n,:,:, :) ,poy(n,:,:, :) ,
& poz(n,:,:, :) , lag(n,:,:, :) , i, j, k)
vx(n) = vx(n) + v11(n,i,j,k) * lag(n,i,j,k)
vy(n) = vy(n) + v22(n,i,j,k) * lag(n,i,j,k)
vz(n) = vz(n) + v33(n,i,j,k) * lag(n,i,j,k)
enddo
enddo
enddo
enddo
call place(xx, yy, zz, xstep, ystep, zstep)
do n = 1, 1
c write(3,*) xx(n), yy(n), zz(n), vx(n), vy(n), vz(n)
enddo
end
c----------------------------------------------------------------------------
c Нахождение зависимости эволюции средних скоростей
c частиц в зависимости отвремени
subroutine v_time
integer i, num_step(512)
character(6) first_name
character(16) third_name
real*8 v11(1,8,8,8), v22(1,8,8,8), v33(1,8,8,8), poz(1,8,8,8)
real*8 xx(1), yy(1), zz(1), pox(1,8,8,8), poy(1,8,8,8)
c call polpoint(lag, num_step)
third_name = 'Velo_total_00001'
first_name = '5_file'
open(unit = 3, file = first_name)
call polpoint(pox, poy, poz, num_step)
do i = 1, 1
write(third_name(12:16),'(I5.5)') i
call velocity(num_step, third_name, v11, v22, v33)
call av_velocity(xx, yy, zz, pox, poy, poz, v11, v22, v33)
write(3,*) " "
enddo
close(3)
end
c Сорртировка скоростей в узлах сетки, для применения базисных полиномов
[code]
subroutine velocity(num_step, third_name, v11, v22, v33)
character(16) third_name
real*8 vx, vy, vz, p
real*8 v1(512), v2(512), v3(512)
real*8 v11(1,8,8,8), v22(1,8,8,8), v33(1,8,8,8)
integer size_file, num_step(512), m, l, r, s, q
open(unit = 2, file = third_name, form='unformatted',
& status='old')
read(2) size_file
c Я считываю данные из файла и записываю их так, чтобы применить метод Лагранжа.
do l = 1, size_file
read(2) vx, vy, vz, p
do m = 1, 512
if(l.eq.num_step(m)) then
v1(m) = vx
v2(m) = vy
v3(m) = vz
endif
enddo
enddo
close(2)
c Отсортированный массив трёх компонет скорости
do m = 1, 1
do r = 1, 8
do s = 1, 8
do q = 1, 8
v11(m,r,s,q) = v1(q+8*(s-1)+64*(r-1)+512*(m-1))
v22(m,r,s,q) = v2(q+8*(s-1)+64*(r-1)+512*(m-1))
v33(m,r,s,q) = v3(q+8*(s-1)+64*(r-1)+512*(m-1))
c write(3,*) v11(m,r,s,q), v22(m,r,s,q), v33(m,r,s,q)
enddo
enddo
enddo
enddo
end
c--------------------------------------------------------------------------
c--------------------------------------------------------------------------
Вычисление среднего значения скорости для каждой точки
subroutine av_velocity(xx, yy, zz, pox, poy, poz, v11, v22, v33)
real*8 v11(1,8,8,8), v22(1,8,8,8), v33(1,8,8,8), lag(1,8,8,8)
integer i, j, k, n, xstep(1), ystep(1), zstep(1)
real*8 vx(1), vy(1), vz(1), xx(1), yy(1), zz(1)
real*8 pox(1,8,8,8), poy(1,8,8,8), poz(1,8,8,8)
call place(xx, yy, zz, xstep, ystep, zstep)
vx = 0
vy = 0
vz = 0
lag = 1
do n = 1, 1
do i = 1, 8
do j = 1, 8
do k = 1, 8
c write(*,*) v11(n,i,j,k), v22(n,i,j,k), v33(n,i,j,k)
c Применние интерполяционных полиномов Лагранжа
call lagrange(xx(n),yy(n),zz(n),pox(n,:,:, :) ,poy(n,:,:, :) ,
& poz(n,:,:, :) , lag(n,:,:, :) , i, j, k)
vx(n) = vx(n) + v11(n,i,j,k) * lag(n,i,j,k)
vy(n) = vy(n) + v22(n,i,j,k) * lag(n,i,j,k)
vz(n) = vz(n) + v33(n,i,j,k) * lag(n,i,j,k)
enddo
enddo
enddo
enddo
call place(xx, yy, zz, xstep, ystep, zstep)
do n = 1, 1
c write(3,*) xx(n), yy(n), zz(n), vx(n), vy(n), vz(n)
enddo
end
c----------------------------------------------------------------------------
c Нахождение зависимости эволюции средних скоростей
c частиц в зависимости отвремени
subroutine v_time
integer i, num_step(512)
character(6) first_name
character(16) third_name
real*8 v11(1,8,8,8), v22(1,8,8,8), v33(1,8,8,8), poz(1,8,8,8)
real*8 xx(1), yy(1), zz(1), pox(1,8,8,8), poy(1,8,8,8)
c call polpoint(lag, num_step)
third_name = 'Velo_total_00001'
first_name = '5_file'
open(unit = 3, file = first_name)
call polpoint(pox, poy, poz, num_step)
do i = 1, 1
write(third_name(12:16),'(I5.5)') i
call velocity(num_step, third_name, v11, v22, v33)
call av_velocity(xx, yy, zz, pox, poy, poz, v11, v22, v33)
write(3,*) " "
enddo
close(3)
end
[/code]