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.
>>>>>
>>>>

Reply via email to