def _eval_base(self, coors, diff=False, ori=None, suppress_errors=False, eps=1e-15): """ See PolySpace.eval_base(). """ from extmods.lobatto_bases import eval_lobatto_tensor_product as ev c_min, c_max = self.bbox[:, 0] base = ev(coors, self.nodes, c_min, c_max, self.order, diff) if ori is not None: ebase = nm.tile(base, (ori.shape[0], 1, 1, 1)) if self.edge_indx.shape[0]: # Orient edge functions. ie, ii = nm.where(ori[:, self.edge_indx] == 1) ii = self.edge_indx[ii] ebase[ie, :, :, ii] *= -1.0 if self.face_indx.shape[0]: # Orient face functions. fori = ori[:, self.face_indx] # ... normal axis order ie, ii = nm.where((fori == 1) | (fori == 2)) ii = self.face_indx[ii] ebase[ie, :, :, ii] *= -1.0 # ... swapped axis order sbase = ev(coors, self.sfnodes, c_min, c_max, self.order, diff) sbase = insert_strided_axis(sbase, 0, ori.shape[0]) # ...overwrite with swapped axes basis. ie, ii = nm.where(fori >= 4) ii2 = self.face_indx[ii] ebase[ie, :, :, ii2] = sbase[ie, :, :, ii] # ...deal with orientation. ie, ii = nm.where((fori == 5) | (fori == 6)) ii = self.face_indx[ii] ebase[ie, :, :, ii] *= -1.0 base = ebase return base
def _eval_base_debug(self, coors, diff=False, ori=None, suppress_errors=False, eps=1e-15): """Python version of eval_base().""" dim = self.geometry.dim ev = self.ps1d.eval_base if diff: base = nm.ones((coors.shape[0], dim, self.n_nod), dtype=nm.float64) for ii in xrange(dim): self.ps1d.nodes = self.nodes[:, 2 * ii:2 * ii + 2].copy() self.ps1d.n_nod = self.n_nod for iv in xrange(dim): if ii == iv: base[:, iv:iv + 1, :] *= ev( coors[:, ii:ii + 1].copy(), diff=True, suppress_errors=suppress_errors, eps=eps) else: base[:, iv:iv + 1, :] *= ev( coors[:, ii:ii + 1].copy(), diff=False, suppress_errors=suppress_errors, eps=eps) else: base = nm.ones((coors.shape[0], 1, self.n_nod), dtype=nm.float64) for ii in xrange(dim): self.ps1d.nodes = self.nodes[:, 2 * ii:2 * ii + 2].copy() self.ps1d.n_nod = self.n_nod base *= ev(coors[:, ii:ii + 1].copy(), diff=diff, suppress_errors=suppress_errors, eps=eps) return base
def _eval_base_debug(self, coors, diff=False, ori=None, suppress_errors=False, eps=1e-15): """Python version of eval_base().""" dim = self.geometry.dim ev = self.ps1d.eval_base if diff: base = nm.ones((coors.shape[0], dim, self.n_nod), dtype=nm.float64) for ii in xrange(dim): self.ps1d.nodes = self.nodes[:,2*ii:2*ii+2].copy() self.ps1d.n_nod = self.n_nod for iv in xrange(dim): if ii == iv: base[:,iv:iv+1,:] *= ev(coors[:,ii:ii+1].copy(), diff=True, suppress_errors=suppress_errors, eps=eps) else: base[:,iv:iv+1,:] *= ev(coors[:,ii:ii+1].copy(), diff=False, suppress_errors=suppress_errors, eps=eps) else: base = nm.ones((coors.shape[0], 1, self.n_nod), dtype=nm.float64) for ii in xrange(dim): self.ps1d.nodes = self.nodes[:,2*ii:2*ii+2].copy() self.ps1d.n_nod = self.n_nod base *= ev(coors[:,ii:ii+1].copy(), diff=diff, suppress_errors=suppress_errors, eps=eps) return base