def weak_residual(self, x, x_test, m, e): """ The weak residual """ u, p, gamma = dl.split(x) u_test, p_test, g_test = dl.split(x_test) hbinv = hinv_u(self.metric, self.tg) res_u = dl.Constant(2.)*(self.nu+self.nu_t(x, m))*dl.inner( self.strain(u), self.strain(u_test))*dl.dx \ + dl.inner(dl.grad(u)*u, u_test)*dl.dx \ - p*dl.div(u_test)*dl.dx \ + self.Cd*(self.nu+self.nu_t(x, m))*hbinv*dl.dot(u - self.u_ff, self.tg)*dl.dot(u_test, self.tg)*self.ds_ff \ - dl.dot( self.sigma_n(self.nu+self.nu_t(x, m), u), self.tg) * dl.dot(u_test, self.tg)*self.ds_ff \ - dl.dot( self.sigma_n(self.nu+self.nu_t(x, m), u_test), self.tg ) * dl.dot(u - self.u_ff, self.tg)*self.ds_ff res_p = dl.div(u) * p_test * dl.dx D = self.nu_g(x, m, e) h_o_u = h_over_u(self.metric, u, D) res_g = dl.inner( D*dl.grad(gamma), dl.grad(g_test) )*dl.dx \ + h_o_u*dl.dot(u, dl.grad(gamma))*dl.dot(u, dl.grad(g_test))*dl.dx \ + dl.dot(u, dl.grad(gamma))*g_test*dl.dx \ - dl.Constant(.5)*gamma*g_test*(dl.dot(u, self.e1)/(self.xfun + self._offset(m)))*dl.dx return res_u + res_p + res_g
def tau(self, nu, u, metric): """ Stabilization parameter """ h2 = h_u2(self.metric, u, self.reg_norm * self.nu * self.nu) Pe = dl.Constant(.5) * h_dot_u(metric, u, self.reg_norm * self.nu * self.nu) / nu num = dl.Constant(1.) + dl.exp(dl.Constant(-2.) * Pe) den = dl.Constant(1.) - dl.exp(dl.Constant(-2.) * Pe) # [0.1 0.01]* [a1] = [ coth(.1) - 1./(.1) ] # [1. 0.2 ] [a2] [ -csch(.1)^2 + 1./(.1)^2] a1 = dl.Constant(0.333554921691650) a2 = dl.Constant(-0.004435991517475) tau_1 = (num / den - dl.Constant(1.) / Pe) * h_over_u( metric, u, self.reg_norm * self.nu * self.nu) tau_2 = (a1 + a2 * Pe) * dl.Constant(.5) * h2 / nu return dl.conditional(dl.ge(Pe, .1), tau_1, tau_2)