Skip to content

Commit fde3132

Browse files
fangjianfangjian
authored andcommitted
add h5 block write
1 parent c4592af commit fde3132

12 files changed

Lines changed: 377 additions & 54 deletions

Makefile.pastr

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ srs= pastr_constdef.F90 pastr_commtype.F90 pastr_commvar.F90 pastr_multiblock_t
2828
pastr_utility.F90 pastr_h5io.F90 pastr_io.F90 pastr_tecio.F90 pastr_xdmf.F90 \
2929
pastr_interpolation.F90 pastr_fsolver.F90 pastr_gradients.F90 pastr_thermo_phys.F90 \
3030
pastr_blasius.F90 pastr_flowvis.F90 pastr_input.F90 pastr_data_convert.F90 \
31-
pastr_field_view.F90 pastr_udf.F90 pastr_process.F90 pastr_main.F90
31+
pastr_field_view.F90 pastr_udf.F90 pastr_data_process.F90 pastr_process.F90 \
32+
pastr_main.F90
3233

3334
OBJS=$(srs:.F90=.o)
3435

pastr/src/pastr_commtype.F90

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ module pastr_commtype
1515
end type montype
1616

1717
type :: tblock
18-
integer :: im,jm,nvar
19-
integer :: ilo,ihi,jlo,jhi
18+
character(len=6) :: name
19+
integer :: im,jm,km,nvar
20+
integer :: ilo,ihi,jlo,jhi,klo,khi
2021
character(len=16),allocatable :: varname(:)
21-
real(wp), allocatable, dimension(:,:) :: x,y
22-
real(wp), allocatable, dimension(:,:,:) :: var
22+
real(wp), allocatable, dimension(:,:,:) :: x,y,z
23+
real(wp), allocatable, dimension(:,:,:,:) :: var
2324
contains
2425
procedure :: init_data => alloc_block_data
2526
end type tblock
@@ -42,9 +43,9 @@ subroutine alloc_block_data(ablock)
4243
class(tblock),target :: ablock
4344

4445
allocate(ablock%varname(ablock%nvar))
45-
allocate(ablock%x(0:ablock%im,0:ablock%jm))
46-
allocate(ablock%y(0:ablock%im,0:ablock%jm))
47-
allocate(ablock%var(0:ablock%im,0:ablock%jm,1:ablock%nvar))
46+
allocate(ablock%x(0:ablock%im,0:ablock%jm,0:ablock%km))
47+
allocate(ablock%y(0:ablock%im,0:ablock%jm,0:ablock%km))
48+
allocate(ablock%var(0:ablock%im,0:ablock%jm,0:ablock%km,1:ablock%nvar))
4849

4950
end subroutine alloc_block_data
5051

pastr/src/pastr_data_process.F90

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
module pastr_data_process
2+
3+
use iso_fortran_env, only: wp => real64
4+
5+
implicit none
6+
7+
real(wp),allocatable,dimension(:,:,:) :: ro,u1,u2,u3,p,t
8+
real(wp),allocatable,dimension(:,:) :: ro_xy,u1_xy,u2_xy,u3_xy,p_xy,t_xy
9+
10+
contains
11+
12+
subroutine stats_read_process(mode)
13+
14+
use pastr_commvar, only: im,jm,km
15+
use pastr_io, only : read_stats
16+
17+
character(len=*),intent(in) :: mode
18+
19+
if(mode=='meanflow' .or. mode=='all') then
20+
21+
allocate( ro(0:im,0:jm,0:km),u1(0:im,0:jm,0:km), &
22+
u2(0:im,0:jm,0:km),u3(0:im,0:jm,0:km), &
23+
p(0:im,0:jm,0:km),t(0:im,0:jm,0:km) )
24+
25+
call read_stats(var=ro,varname='rom')
26+
call read_stats(var=u1,varname='u1m')
27+
call read_stats(var=u2,varname='u2m')
28+
call read_stats(var=u3,varname='u3m')
29+
call read_stats(var= p,varname= 'pm')
30+
call read_stats(var= t,varname= 'tm')
31+
32+
allocate( ro_xy(0:im,0:jm),u1_xy(0:im,0:jm), &
33+
u2_xy(0:im,0:jm),u3_xy(0:im,0:jm), &
34+
p_xy(0:im,0:jm), t_xy(0:im,0:jm) )
35+
36+
ro_xy=average(ro)
37+
u1_xy=average(u1)/ro_xy
38+
u2_xy=average(u2)/ro_xy
39+
u3_xy=average(u3)/ro_xy
40+
p_xy=average(p)
41+
t_xy=average(t)/ro_xy
42+
43+
call write_stats()
44+
45+
call plot_meanflow_xy()
46+
47+
elseif(mode=='2ndsta' .or. mode=='all') then
48+
elseif(mode=='3rdsta' .or. mode=='all') then
49+
elseif(mode=='budget' .or. mode=='all') then
50+
else
51+
stop 1
52+
endif
53+
54+
end subroutine stats_read_process
55+
56+
subroutine write_stats
57+
58+
use pastr_commtype, only : tblock
59+
use pastr_commvar, only: im,jm,km
60+
use pastr_multiblock_type, only: block_define
61+
use pastr_h5io
62+
63+
type(tblock),allocatable,target :: pblocks(:)
64+
integer :: nblocks
65+
logical :: multi_block
66+
integer :: i
67+
type(tblock),pointer :: b
68+
69+
call block_define(multi_block,nblocks,pblocks)
70+
71+
do i=1,nblocks
72+
b=>pblocks(i)
73+
b%nvar=6
74+
write(b%name,'(A,I5.5)')'b',i
75+
call b%init_data()
76+
b%var(0:b%im,0:b%jm,0,1)=ro_xy(b%ilo:b%ihi,b%jlo:b%jhi)
77+
b%var(0:b%im,0:b%jm,0,2)=u1_xy(b%ilo:b%ihi,b%jlo:b%jhi)
78+
b%var(0:b%im,0:b%jm,0,3)=u2_xy(b%ilo:b%ihi,b%jlo:b%jhi)
79+
b%var(0:b%im,0:b%jm,0,4)=u3_xy(b%ilo:b%ihi,b%jlo:b%jhi)
80+
b%var(0:b%im,0:b%jm,0,5)= p_xy(b%ilo:b%ihi,b%jlo:b%jhi)
81+
b%var(0:b%im,0:b%jm,0,6)= t_xy(b%ilo:b%ihi,b%jlo:b%jhi)
82+
b%varname(1) = 'ro'
83+
b%varname(2) = 'u'
84+
b%varname(3) = 'v'
85+
b%varname(4) = 'w'
86+
b%varname(5) = 'p'
87+
b%varname(6) = 't'
88+
enddo
89+
90+
call h5_write_blocks(blocks=pblocks,fname='Results/mean.fav.zm.h5')
91+
92+
! call H5WriteArray(ro_xy,im,jm,'ro','Results/mean.fav.zm.h5')
93+
! call H5WriteArray(u1_xy,im,jm,'u1','Results/mean.fav.zm.h5')
94+
! call H5WriteArray(u2_xy,im,jm,'u2','Results/mean.fav.zm.h5')
95+
! call H5WriteArray(u3_xy,im,jm,'u3','Results/mean.fav.zm.h5')
96+
! call H5WriteArray( p_xy,im,jm, 'p','Results/mean.fav.zm.h5')
97+
! call H5WriteArray( t_xy,im,jm, 't','Results/mean.fav.zm.h5')
98+
99+
end subroutine write_stats
100+
101+
subroutine plot_meanflow_xy
102+
103+
use pastr_commvar, only: im,jm,km
104+
use pastr_io, only : read_grid
105+
use pastr_multiblock_type, only: block_define
106+
use pastr_tecio
107+
use pastr_commtype, only : tblock
108+
109+
real(wp),allocatable :: x(:,:),y(:,:),z(:,:)
110+
type(tblock),allocatable,target :: pblocks(:)
111+
integer :: nblocks
112+
logical :: multi_block
113+
integer :: i
114+
type(tblock),pointer :: b
115+
116+
allocate(x(0:im,0:jm),y(0:im,0:jm),z(0:im,0:jm))
117+
118+
call read_grid(x=x,y=y,z=z,kslice=0)
119+
120+
call block_define(multi_block,nblocks,pblocks)
121+
122+
do i=1,nblocks
123+
b=>pblocks(i)
124+
b%nvar=6
125+
call b%init_data()
126+
b%x(0:b%im,0:b%jm,0)=x(b%ilo:b%ihi,b%jlo:b%jhi)
127+
b%y(0:b%im,0:b%jm,0)=y(b%ilo:b%ihi,b%jlo:b%jhi)
128+
b%var(0:b%im,0:b%jm,0,1)=ro_xy(b%ilo:b%ihi,b%jlo:b%jhi)
129+
b%var(0:b%im,0:b%jm,0,2)=u1_xy(b%ilo:b%ihi,b%jlo:b%jhi)
130+
b%var(0:b%im,0:b%jm,0,3)=u2_xy(b%ilo:b%ihi,b%jlo:b%jhi)
131+
b%var(0:b%im,0:b%jm,0,4)=u3_xy(b%ilo:b%ihi,b%jlo:b%jhi)
132+
b%var(0:b%im,0:b%jm,0,5)= p_xy(b%ilo:b%ihi,b%jlo:b%jhi)
133+
b%var(0:b%im,0:b%jm,0,6)= t_xy(b%ilo:b%ihi,b%jlo:b%jhi)
134+
b%varname(1) = 'ro'
135+
b%varname(2) = 'u'
136+
b%varname(3) = 'v'
137+
b%varname(4) = 'w'
138+
b%varname(5) = 'p'
139+
b%varname(6) = 't'
140+
141+
enddo
142+
143+
call tecbin(filename='Results/tecmean',block=pblocks)
144+
145+
end subroutine plot_meanflow_xy
146+
147+
function average(var) result(varm)
148+
149+
use pastr_commvar, only: im,jm,km
150+
151+
real(wp),intent(in) :: var(0:im,0:jm,0:km)
152+
real(wp) :: varm(0:im,0:jm)
153+
154+
integer :: k
155+
156+
varm=0._wp
157+
do k=1,km
158+
varm(:,:)=varm(:,:)+var(:,:,k)
159+
enddo
160+
varm=varm/dble(km)
161+
162+
end function average
163+
164+
end module pastr_data_process

pastr/src/pastr_field_view.F90

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module pastr_field_view
1414
subroutine write_xy_slice(filein,fileout,nfirst,nlast,slice,format)
1515

1616
use pastr_io, only : read_grid,parse_command_line
17+
use pastr_multiblock_type, only: block_define
1718
use pastr_commvar, only : im,jm,km
1819
use pastr_h5io
1920
use pastr_tecio
@@ -101,9 +102,9 @@ subroutine write_xy_slice(filein,fileout,nfirst,nlast,slice,format)
101102
b=>pblocks(i)
102103
b%nvar=num_var_out
103104
call b%init_data()
104-
b%x(0:b%im,0:b%jm)=x(b%ilo:b%ihi,b%jlo:b%jhi)
105-
b%y(0:b%im,0:b%jm)=y(b%ilo:b%ihi,b%jlo:b%jhi)
106-
b%var(0:b%im,0:b%jm,1:num_var_out)=dat_var_out(b%ilo:b%ihi,b%jlo:b%jhi,1:num_var_out )
105+
b%x(0:b%im,0:b%jm,0)=x(b%ilo:b%ihi,b%jlo:b%jhi)
106+
b%y(0:b%im,0:b%jm,0)=y(b%ilo:b%ihi,b%jlo:b%jhi)
107+
b%var(0:b%im,0:b%jm,0,1:num_var_out)=dat_var_out(b%ilo:b%ihi,b%jlo:b%jhi,1:num_var_out )
107108
b%varname=nam_var_out
108109
enddo
109110

@@ -387,40 +388,4 @@ subroutine var_define(num_var_in,nam_var_in,num_var_out,nam_var_out)
387388

388389
end subroutine var_define
389390

390-
subroutine block_define(multi_block,nblocks,pblocks)
391-
392-
use pastr_commtype
393-
394-
logical,intent(out) :: multi_block
395-
integer,intent(out) :: nblocks
396-
type(tblock),intent(out),allocatable :: pblocks(:)
397-
398-
integer :: i
399-
logical :: lfex
400-
401-
inquire(file='blockdef.txt',exist=lfex)
402-
if(lfex) then
403-
multi_block=.true.
404-
else
405-
multi_block=.false.
406-
return
407-
endif
408-
409-
open(12,file='blockdef.txt')
410-
read(12,*)nblocks
411-
allocate(pblocks(nblocks))
412-
do i=1,nblocks
413-
read(12,*)pblocks(i)%ilo,pblocks(i)%ihi,pblocks(i)%jlo,pblocks(i)%jhi
414-
pblocks(i)%im=pblocks(i)%ihi-pblocks(i)%ilo
415-
pblocks(i)%jm=pblocks(i)%jhi-pblocks(i)%jlo
416-
enddo
417-
close(12)
418-
print*,' >> blockdef.txt'
419-
420-
print*,' ** nblocks: ',nblocks
421-
422-
return
423-
424-
end subroutine block_define
425-
426391
end module pastr_field_view

pastr/src/pastr_fsolver.F90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,6 +1427,7 @@ subroutine fsolve ( fcn, n, x, fvec, tol, info )
14271427
!*****************************************************************************80
14281428
!
14291429
!! fsolve() seeks a zero of N nonlinear equations in N variables.
1430+
!! Return the roots of the (non-linear) equations defined by fcn(x) = 0 given a starting estimate.
14301431
!
14311432
! Discussion:
14321433
!

pastr/src/pastr_h5io.F90

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1650,7 +1650,59 @@ end subroutine h5_writesubset
16501650
!+-------------------------------------------------------------------+
16511651
! this subroutine is used to read a 3d array file with hdf5
16521652
!+-------------------------------------------------------------------+
1653-
1653+
1654+
subroutine h5_write_blocks(blocks,fname)
1655+
1656+
use pastr_commtype, only : tblock
1657+
1658+
type(tblock),intent(in),target :: blocks(:)
1659+
character(len=*),intent(in) :: fname
1660+
1661+
logical :: lfilalive
1662+
integer :: i,n
1663+
type(tblock),pointer :: b
1664+
integer(hid_t) :: file_id,group_id
1665+
! file identifier
1666+
integer(hid_t) :: dataspace_id,dset_id
1667+
! dataset identifier
1668+
integer :: h5error ! error flag
1669+
integer(hsize_t) :: dimt(3)
1670+
1671+
call h5open_f(h5error)
1672+
!
1673+
inquire(file=fname, exist=lfilalive)
1674+
if(lfilalive) then
1675+
call h5fopen_f(fname,H5F_ACC_RDWR_F,file_id,h5error)
1676+
else
1677+
call h5fcreate_f(fname,H5F_ACC_TRUNC_F,file_id,h5error)
1678+
end if
1679+
if(h5error.ne.0) stop ' !! error in h5_write_blocks 1'
1680+
1681+
do i=1,size(blocks)
1682+
1683+
b=>blocks(i)
1684+
1685+
call h5gcreate_f(file_id, b%name, group_id, h5error)
1686+
1687+
dimt=(/b%im+1,b%jm+1,b%km+1/)
1688+
1689+
do n=1,b%nvar
1690+
CALL h5screate_simple_f(3, dimt, dataspace_id, h5error)
1691+
call h5dcreate_f(group_id, trim(b%varname(n)), h5t_native_double, &
1692+
dataspace_id, dset_id, h5error)
1693+
call h5dwrite_f(dset_id, h5t_native_double, b%var(:,:,:,n), dimt, h5error)
1694+
CALL h5sclose_f(dataspace_id, h5error)
1695+
call h5dclose_f(dset_id, h5error)
1696+
enddo
1697+
call h5gclose_f(group_id, h5error)
1698+
1699+
enddo
1700+
call h5fclose_f(file_id, h5error)
1701+
1702+
call h5close_f(h5error)
1703+
1704+
end subroutine h5_write_blocks
1705+
16541706
subroutine h5_writearray3d(varin,dim1,dim2,dim3,vname,fname,explicit,ierr)
16551707
!
16561708
integer,intent(in) :: dim1,dim2,dim3

pastr/src/pastr_io.F90

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module pastr_io
88

99
public :: parse_command_line,read_grid
1010
public :: global_n_arguments,read_monitor_data,write_monitor_data
11+
public :: read_stats
1112

1213
integer :: global_n_arguments=0
1314

@@ -196,4 +197,27 @@ subroutine write_monitor_data(mon_data)
196197

197198
end subroutine write_monitor_data
198199

200+
subroutine read_stats(var,varname)
201+
202+
use pastr_commvar, only: im,jm,km
203+
use pastr_h5io
204+
205+
real(wp) :: var(0:im,0:jm,0:km)
206+
character(len=*),intent(in) :: varname
207+
208+
character(len=18) :: fname
209+
integer,save :: nsamples=0
210+
211+
fname='outdat/meanflow.h5'
212+
213+
if(nsamples==0) then
214+
call H5ReadArray(nsamples,'nsamples',fname)
215+
print*,' ** nsamples: ',nsamples
216+
endif
217+
218+
call H5ReadArray(var,im,jm,km,varname,fname)
219+
var = var/dble(nsamples)
220+
221+
end subroutine read_stats
222+
199223
end module pastr_io

0 commit comments

Comments
 (0)