bugfix: symmetrization chose wrong mirror plane if the lower point coincided with the boundary; also changed default internal names of derivatives
This commit is contained in:
parent
352b3ae860
commit
e147024374
30
parallel.py
30
parallel.py
|
|
@ -198,7 +198,7 @@ class PPP:
|
||||||
def differentiate(self,key,axis,key_out=None,on_pressure_grid=False):
|
def differentiate(self,key,axis,key_out=None,on_pressure_grid=False):
|
||||||
assert axis<3, "'axis' must be one of 0,1,2."
|
assert axis<3, "'axis' must be one of 0,1,2."
|
||||||
if key_out is None:
|
if key_out is None:
|
||||||
key_out = 'd'+key+('/dx','/dy','/dz')[axis]
|
key_out = 'd'+key+('dx','dy','dz')[axis]
|
||||||
key_grid = self._key_grid(key)
|
key_grid = self._key_grid(key)
|
||||||
origin = list(self.origin[key_grid])
|
origin = list(self.origin[key_grid])
|
||||||
shifting_state = self.shifting_state(key,axis=axis)
|
shifting_state = self.shifting_state(key,axis=axis)
|
||||||
|
|
@ -270,7 +270,7 @@ class PPP:
|
||||||
keyx = ('x','y','z')
|
keyx = ('x','y','z')
|
||||||
keyu = ('u','v','w')
|
keyu = ('u','v','w')
|
||||||
for ii in range(3):
|
for ii in range(3):
|
||||||
key_tmp = 'd'+keyu[ii]+'/d'+keyx[ii]
|
key_tmp = 'd'+keyu[ii]+'d'+keyx[ii]
|
||||||
parprint(key_tmp)
|
parprint(key_tmp)
|
||||||
self.differentiate(keyu[ii],axis=ii,key_out=key_tmp,on_pressure_grid=True)
|
self.differentiate(keyu[ii],axis=ii,key_out=key_tmp,on_pressure_grid=True)
|
||||||
self.field[key_out] += self.field[key_tmp]**2
|
self.field[key_out] += self.field[key_tmp]**2
|
||||||
|
|
@ -278,8 +278,8 @@ class PPP:
|
||||||
self.delete(key_tmp)
|
self.delete(key_tmp)
|
||||||
#
|
#
|
||||||
iip1 = (ii+1)%3
|
iip1 = (ii+1)%3
|
||||||
key_tmp1 = 'd'+keyu[ii]+'/d'+keyx[iip1]
|
key_tmp1 = 'd'+keyu[ii]+'d'+keyx[iip1]
|
||||||
key_tmp2 = 'd'+keyu[iip1]+'/d'+keyx[ii]
|
key_tmp2 = 'd'+keyu[iip1]+'d'+keyx[ii]
|
||||||
parprint(key_tmp1,key_tmp2)
|
parprint(key_tmp1,key_tmp2)
|
||||||
self.differentiate(keyu[ii],axis=iip1,key_out=key_tmp1,on_pressure_grid=True)
|
self.differentiate(keyu[ii],axis=iip1,key_out=key_tmp1,on_pressure_grid=True)
|
||||||
self.differentiate(keyu[iip1],axis=ii,key_out=key_tmp2,on_pressure_grid=True)
|
self.differentiate(keyu[iip1],axis=ii,key_out=key_tmp2,on_pressure_grid=True)
|
||||||
|
|
@ -983,10 +983,15 @@ class PPP:
|
||||||
for axis in range(3):
|
for axis in range(3):
|
||||||
if positionBd[axis]==-1: # lower boundary
|
if positionBd[axis]==-1: # lower boundary
|
||||||
# index of first point within the domain
|
# index of first point within the domain
|
||||||
idx = self.field[key].nearest_gridpoint(self.bounds[2*axis],axis=axis,lower=True)+1
|
idx = self.field[key].nearest_gridpoint(self.bounds[2*axis],axis=axis)
|
||||||
|
dist = self.field[key].coordinate(idx,axis=axis)-self.bounds[2*axis]
|
||||||
|
if np.abs(dist)>self.field[key].eps_collapse and np.sign(dist)<0.0:
|
||||||
|
idx += 1
|
||||||
|
dist = self.field[key].coordinate(idx,axis=axis)-self.bounds[2*axis]
|
||||||
# distance first point to wall: should be either 0 or dx/2
|
# distance first point to wall: should be either 0 or dx/2
|
||||||
dist = np.abs(self.field[key].coordinate(idx,axis=axis)-self.bounds[2*axis])
|
assert (dist<=self.field[key].eps_collapse or
|
||||||
if dist>=0.25*self.spacing[axis]: # no point on boundary
|
(dist-0.5*self.spacing[axis])<=self.field[key].eps_collapse)
|
||||||
|
if np.abs(dist)>=0.25*self.spacing[axis]: # no point on boundary
|
||||||
sl_dst[axis] = slice(0,idx,1)
|
sl_dst[axis] = slice(0,idx,1)
|
||||||
sl_src[axis] = slice(2*idx-1,idx-1,-1)
|
sl_src[axis] = slice(2*idx-1,idx-1,-1)
|
||||||
else: # point on boundary
|
else: # point on boundary
|
||||||
|
|
@ -995,10 +1000,15 @@ class PPP:
|
||||||
break
|
break
|
||||||
elif positionBd[axis]==1: # upper boundary
|
elif positionBd[axis]==1: # upper boundary
|
||||||
# index of last point within the domain
|
# index of last point within the domain
|
||||||
idx = self.field[key].nearest_gridpoint(self.bounds[2*axis+1],axis=axis,lower=True)
|
idx = self.field[key].nearest_gridpoint(self.bounds[2*axis+1],axis=axis)
|
||||||
|
dist = self.field[key].coordinate(idx,axis=axis)-self.bounds[2*axis+1]
|
||||||
|
if np.abs(dist)>self.field[key].eps_collapse and np.sign(dist)>0.0:
|
||||||
|
idx -= 1
|
||||||
|
dist = self.field[key].coordinate(idx,axis=axis)-self.bounds[2*axis+1]
|
||||||
# distance last point to wall: should be either 0 or -dx/2
|
# distance last point to wall: should be either 0 or -dx/2
|
||||||
dist = np.abs(self.field[key].coordinate(idx,axis=axis)-self.bounds[2*axis+1])
|
assert (dist<=self.field[key].eps_collapse or
|
||||||
if dist>=0.25*self.spacing[axis]: # no point on boundary
|
(dist+0.5*self.spacing[axis])<=self.field[key].eps_collapse)
|
||||||
|
if np.abs(dist)>=0.25*self.spacing[axis]: # no point on boundary
|
||||||
sl_dst[axis] = slice(idx+1,self.field[key].dim(axis=axis),1)
|
sl_dst[axis] = slice(idx+1,self.field[key].dim(axis=axis),1)
|
||||||
sl_src[axis] = slice(idx,2*idx+1-self.field[key].dim(axis=axis),-1)
|
sl_src[axis] = slice(idx,2*idx+1-self.field[key].dim(axis=axis),-1)
|
||||||
else: # point on boundary
|
else: # point on boundary
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue