oh, I just noticed that u and phi are defined in the same space, so this is even simpler. Basically you just need to do
grad_norm = gf.asm_generic(self.IM, 1, "(2+2*p)*sign(u)*pow(abs(u), 1+2*p)*Test_u", -1, md) or grad_norm = gf.asm_generic(self.IM, 1, "(2+2*p)*u*pow(abs(u), 2*p)*Test_u", -1, md) or grad_norm = gf.asm_generic(self.IM, 1, "(2+2*p)*u*pow(sqr(u), p)*Test_u", -1, md) without defining phi at all. On Fri, Sep 30, 2022 at 3:58 PM Konstantinos Poulios < logar...@googlemail.com> wrote: > actually the last one should be > > grad_norm = gf.asm_generic(self.IM, 1, "(2+2*p)*u*pow(abs(u), > 2*p)*Test_phi", -1, md, "select_output", "phi") > or > grad_norm = gf.asm_generic(self.IM, 1, "(2+2*p)*u*pow(sqr(u), > p)*Test_phi", -1, md, "select_output", "phi") > > > > On Fri, Sep 30, 2022 at 3:55 PM Konstantinos Poulios < > logar...@googlemail.com> wrote: > >> this is a minor problem, try: >> >> grad_norm = gf.asm_generic(self.IM, 1, "(2+2*p)*sign(u)*pow(abs(u), >> 1+2*p)*Test_phi", -1, md, "select_output", "phi") >> >> or even better: >> >> grad_norm = gf.asm_generic(self.IM, 1, "(2+2*p)*u*pow(u, 2*p)*Test_phi", >> -1, md, "select_output", "phi") >> >> BR >> Kostas >> >> >> On Fri, Sep 30, 2022 at 2:05 PM Eloi Martinet <eloi.marti...@gmail.com> >> wrote: >> >>> I actually tried it, but the problem was that u was declared as a >>> fem_variable and not fem_data and getfem kept telling me "Cannot derive >>> function sign. No derivative provided or not derivable function." >>> Could you explain this behaviour to me? I would like to understand what >>> happens when u is declared as a variable. >>> Thank you for your help and kindness. >>> Best, >>> Eloi. >>> >>> Le ven. 30 sept. 2022 à 11:16, Konstantinos Poulios < >>> logar...@googlemail.com> a écrit : >>> >>>> ok, what you are doing is equivalent to >>>> >>>> grad_norm = gf.asm_generic(self.IM, 1, "(2+2*p)*sign(u)*pow(abs(u), >>>> 1+2*p)*Test_phi", -1, md) >>>> >>>> This is the definition of assembling a residual vector, assembling the >>>> product with each basis function. >>>> >>>> BR >>>> Kostas >>>> >>>> On Fri, Sep 30, 2022 at 10:01 AM Eloi Martinet <eloi.marti...@gmail.com> >>>> wrote: >>>> >>>>> Hello, >>>>> Here is what I do currently : >>>>> >>>>> md = gf.Model("real") >>>>> md.add_fem_variable("u", self.V) >>>>> md.add_fem_variable("phi", self.V) # Represents a basis function >>>>> md.add_data("p", 1) >>>>> md.set_variable("p", p) >>>>> md.set_variable("u", u) >>>>> >>>>> grad_norm = np.zeros(nbdof_V) >>>>> >>>>> for i in tqdm(range(nbdof_V)): >>>>> phi = np.zeros(self.nbdof_V) >>>>> phi[i] = 1 >>>>> self.md.set_variable("phi", phi) >>>>> >>>>> grad_norm[i] = (2+2*p)*gf.asm_generic(self.IM, 0, >>>>> "sign(u)*pow(abs(u), 1+2*p)*phi", -1, md) >>>>> >>>>> Sorry I should have included this snippet from the beginning. >>>>> Have a great day. >>>>> Best, >>>>> Eloi. >>>>> >>>>> Le jeu. 29 sept. 2022 à 21:39, Konstantinos Poulios < >>>>> logar...@googlemail.com> a écrit : >>>>> >>>>>> Hello, would you like to send us a naive implementation of your >>>>>> assembly with asm_generic (and a loop) to take it from there? >>>>>> >>>>>> BR >>>>>> Kostas >>>>>> >>>>>> On Thu, Sep 29, 2022 at 6:27 PM Eloi Martinet < >>>>>> eloi.marti...@univ-smb.fr> wrote: >>>>>> >>>>>>> Hello everyone, >>>>>>> My problem is the following : I have a FE space V with basis phi_i. >>>>>>> Let u be a function on V and f a real valued function. What is the >>>>>>> quickest >>>>>>> way to compute the vector (\int f(u)*phi_i)_i ? I would like to use >>>>>>> asm_generic but I don't see how to do it without looping on i and >>>>>>> computing >>>>>>> it for all i, which is way too long. >>>>>>> >>>>>>> Thank you, have a good day. >>>>>>> Best regards, >>>>>>> Eloi. >>>>>>> >>>>>>