Skip to content

Commit 5fb7dcf

Browse files
fangjianfangjian
authored andcommitted
correct node fix and multi-block pastr
1 parent ce5a8f1 commit 5fb7dcf

9 files changed

Lines changed: 349 additions & 202 deletions

pastr/src/pastr_data_convert.F90

Lines changed: 100 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,7 @@ end function dat_out_cal_2d
163163
function dat_out_cal_3d(data_in,name_in,name_out,x,y,z) result(data_out)
164164

165165
use pastr_commvar, only : im,jm,km,const2
166-
use pastr_flowvis, only : schlieren_xy
167-
use pastr_gradients, only : grad_xy
166+
use pastr_gradients, only : grad_3d
168167
use pastr_thermo_phys, only : sos
169168

170169
real(wp),intent(in) :: data_in(:,:,:,:)
@@ -191,8 +190,107 @@ function dat_out_cal_3d(data_in,name_in,name_out,x,y,z) result(data_out)
191190

192191
enddo
193192

193+
194+
if(name_out(i)=='lci') then
195+
196+
allocate(is(3))
197+
is=0
198+
do j=1,nvar_in
199+
if(name_in(j)=='u1') is(1)=j
200+
if(name_in(j)=='u2') is(2)=j
201+
if(name_in(j)=='u3') is(3)=j
202+
enddo
203+
204+
if(.not. allocated(du1)) then
205+
allocate(du1(1:3,0:im,0:jm,0:km),du2(1:3,0:im,0:jm,0:km),du3(1:3,0:im,0:jm,0:km))
206+
du1=grad_3d(data_in(:,:,:,is(1)),x,y,z)
207+
du2=grad_3d(data_in(:,:,:,is(2)))
208+
du3=grad_3d(data_in(:,:,:,is(3)))
209+
endif
210+
211+
212+
data_out(:,:,:,i)=lambdacical(du1,du2,du3,im,jm,km)
213+
214+
deallocate(is)
215+
216+
endif
217+
194218
enddo
195219

220+
196221
end function dat_out_cal_3d
197222

223+
function lambdacical(du,dv,dw,im,jm,km)
224+
225+
use pastr_utility, only: cube_root
226+
227+
real(wp) :: lambdacical(0:im,0:jm,0:km)
228+
!
229+
integer,intent(in) :: im,jm,km
230+
real(wp),intent(in) :: du(1:3,0:im,0:jm,0:km), &
231+
dv(1:3,0:im,0:jm,0:km), &
232+
dw(1:3,0:im,0:jm,0:km)
233+
!
234+
integer :: i,j,k
235+
real(wp) :: del,a11,a12,a13,a21,a22,a23,a31,a32,a33,Q,R,var1,var2, &
236+
var3,delta,lambmax,duref
237+
real(wp),save :: lambref=0._wp
238+
239+
duref=1.d0
240+
241+
lambmax=0._wp
242+
!$omp parallel default(shared) private(i,j,k,del,a11,a12,a13,a21, &
243+
!$omp a22,a23,a31,a32,a33,q,r,var1,var2,var3,delta)
244+
!
245+
!$omp do
246+
do k=0,km
247+
do j=0,jm
248+
do i=0,im
249+
!
250+
del=-(du(1,i,j,k)/duref+dv(2,i,j,k)/duref+dw(3,i,j,k)/duref)/3._wp
251+
!
252+
a11=du(1,i,j,k)/duref+del; a12=du(2,i,j,k)/duref; a13=du(3,i,j,k)/duref
253+
a21=dv(1,i,j,k)/duref; a22=dv(2,i,j,k)/duref+del; a23=dv(3,i,j,k)/duref
254+
a31=dw(1,i,j,k)/duref; a32=dw(2,i,j,k)/duref; a33=dw(3,i,j,k)/duref+del
255+
256+
Q=-0.5_wp*(a11*a11+a12*a21+a13*a31+ a21*a12+a22*a22+a23*a32+ &
257+
a31*a13+a32*a23+a33*a33 )
258+
R=-1._wp/3._wp*(a11*a11*a11+a11*a12*a21+a11*a13*a31+ &
259+
a12*a21*a11+a12*a22*a21+a12*a23*a31+ &
260+
a13*a31*a11+a13*a32*a21+a13*a33*a31+ &
261+
a21*a11*a12+a21*a12*a22+a21*a13*a32+ &
262+
a22*a21*a12+a22*a22*a22+a22*a23*a32+ &
263+
a23*a31*a12+a23*a32*a22+a23*a33*a32+ &
264+
a31*a11*a13+a31*a12*a23+a31*a13*a33+ &
265+
a32*a21*a13+a32*a22*a23+a32*a23*a33+ &
266+
a33*a31*a13+a33*a32*a23+a33*a33*a33 )
267+
!
268+
delta=Q**3/27._wp+R**2/4._wp
269+
!
270+
! To solve the eqation: lambda**3+Q*lambda+R=0
271+
if(delta>=tiny(0._wp) ) then
272+
var1=cube_root(-0.5_wp*R+sqrt(delta))
273+
var2=cube_root(-0.5_wp*R-sqrt(delta))
274+
var3=0.5_wp*sqrt(3._wp)*(var1-var2)
275+
lambdacical(i,j,k)=var3*var3
276+
277+
else
278+
lambdacical(i,j,k)=0._wp
279+
end if
280+
281+
lambmax=max(lambmax,lambdacical(i,j,k))
282+
283+
284+
end do
285+
end do
286+
end do
287+
!$omp end do
288+
!$omp end parallel
289+
290+
print*,' ** max lambdaci=',lambmax
291+
!
292+
print*,' ** Swirling strength λ calculated'
293+
!
294+
end function lambdacical
295+
198296
end module pastr_data_convert

pastr/src/pastr_field_view.F90

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,8 @@ subroutine write_3d_field(filein,fileout,nfirst,nlast,format)
258258

259259
call H5ReadArray(r8dat,im,jm,km,trim(nam_var_in(m)),trim(file2read))
260260

261-
dat_var_in(:,:,:,m)=real(r8dat)
261+
dat_var_in(:,:,:,m)=r8dat
262+
262263
enddo
263264

264265
dat_var_out=dat_out_cal(dat_var_in,nam_var_in,nam_var_out,x,y,z)

pastr/src/pastr_gradients.F90

Lines changed: 74 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,13 @@ subroutine gridjacobian_3d(x,y,z,ddi,ddj,ddk)
132132
!$OMP DO
133133
do j=0,jm
134134
do i=0,im
135-
dx(3,i,j,:)=dfdk(x(i,j,:))
136-
dy(3,i,j,:)=dfdk(y(i,j,:))
137-
dz(3,i,j,:)=dfdk(z(i,j,:))
135+
dx(3,i,j,:)=dfdk(x(i,j,:),geom=.true.)
136+
dy(3,i,j,:)=dfdk(y(i,j,:),geom=.true.)
137+
dz(3,i,j,:)=dfdk(z(i,j,:),geom=.true.)
138138
end do
139139
end do
140140
!$OMP END DO
141-
!
141+
142142
!$OMP DO
143143
do k=0,km
144144
do j=0,jm
@@ -177,7 +177,7 @@ subroutine gridjacobian_3d(x,y,z,ddi,ddj,ddk)
177177
!$OMP END DO
178178
!
179179
!$OMP END PARALLEL
180-
!
180+
181181
deallocate(dx,dy,dz)
182182
!
183183
print*, ' ** Grid Jacobian matrix is calculated'
@@ -316,12 +316,25 @@ function dfdj(var)
316316

317317
end function dfdj
318318
!
319-
function dfdk(var)
319+
function dfdk(var,geom)
320320

321321
real(wp) ,allocatable :: dfdk(:)
322322
real(wp),intent(in) :: var(0:km)
323+
logical,intent(in),optional :: geom
324+
325+
logical :: lgeom
326+
327+
if(present(geom)) then
328+
lgeom=geom
329+
else
330+
lgeom=.false.
331+
endif
323332

324-
dfdk =diff6ec(var,km,lkhomo)
333+
if(lgeom) then
334+
dfdk =diff6ec_geom(var,km,lkhomo)
335+
else
336+
dfdk =diff6ec(var,km,lkhomo)
337+
endif
325338

326339
end function dfdk
327340

@@ -387,5 +400,59 @@ end function diff6ec
387400
!+-------------------------------------------------------------------+
388401
!| The end of the function diff6ec. |
389402
!+-------------------------------------------------------------------+
403+
function diff6ec_geom(vin,dim,homo) result(vout)
404+
405+
integer,intent(in) :: dim
406+
logical,intent(in) :: homo
407+
real(8),intent(in) :: vin(0:dim)
408+
real(8) :: vout(0:dim)
409+
410+
! local data
411+
integer :: i
412+
413+
if(homo) then
414+
415+
vout(0)=0.75d0 *((vin(1)-vin(0))-(vin(dim-1)-vin(dim)))- &
416+
0.15d0 *((vin(2)-vin(0))-(vin(dim-2)-vin(dim)))+ &
417+
num1d60*((vin(3)-vin(0))-(vin(dim-3)-vin(dim)))
418+
vout(1)=0.75d0 *((vin(2)-vin(0))-(vin(0)-vin(0))) - &
419+
0.15d0 *((vin(3)-vin(0))-(vin(dim-1)-vin(dim)))+ &
420+
num1d60*((vin(4)-vin(0))-(vin(dim-2)-vin(dim)))
421+
vout(2)=0.75d0 *((vin(3)-vin(0))-(vin(1)-vin(0))) - &
422+
0.15d0 *((vin(4)-vin(0))-(vin(0)-vin(0))) + &
423+
num1d60*((vin(5)-vin(0))-(vin(dim-1)-vin(dim)))
424+
425+
vout(dim-2) =0.75d0 *(vin(dim-1)-vin(dim-3))- &
426+
0.15d0 *(vin(dim) -vin(dim-4))+ &
427+
num1d60*(vin(1)-vin(0) -(vin(dim-5)-vin(dim)))
428+
vout(dim-1)=0.75d0 *(vin(dim)-vin(dim-2))- &
429+
0.15d0 *(vin(1)-vin(0) +vin(dim)-vin(dim-3))+ &
430+
num1d60*(vin(2)-vin(0) +vin(dim)-vin(dim-4))
431+
vout(dim) =0.75d0 *(vin(1)-vin(0) +vin(dim)-vin(dim-1))- &
432+
0.15d0 *(vin(2)-vin(0) +vin(dim)-vin(dim-2))+ &
433+
num1d60*(vin(3)-vin(0) +vin(dim)-vin(dim-3))
434+
else
435+
436+
vout(0)=-0.5d0*vin(2)+2.d0*vin(1)-1.5d0*vin(0)
437+
vout(1)=0.5d0*(vin(2)-vin(0))
438+
vout(2)=num2d3*(vin(3)-vin(1))-num1d12*(vin(4)-vin(0))
439+
440+
vout(dim-2) =num2d3*(vin(dim-1)-vin(dim-3))- &
441+
num1d12*(vin(dim) -vin(dim-4))
442+
vout(dim-1)=0.5d0*(vin(dim)-vin(dim-2))
443+
vout(dim) =0.5d0*vin(dim-2)-2.d0*vin(dim-1)+1.5d0*vin(dim)
444+
445+
endif
446+
447+
do i=3,dim-3
448+
vout(i) =0.75d0 *(vin(i+1)-vin(i-1))- &
449+
0.15d0 *(vin(i+2)-vin(i-2))+ &
450+
num1d60*(vin(i+3)-vin(i-3))
451+
enddo
452+
453+
end function diff6ec_geom
454+
!+-------------------------------------------------------------------+
455+
!| The end of the function diff6ec. |
456+
!+-------------------------------------------------------------------+
390457

391458
end module pastr_gradients

0 commit comments

Comments
 (0)