getfem-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Getfem-users] High level generic assembly procedures


From: Marco Pischedda
Subject: Re: [Getfem-users] High level generic assembly procedures
Date: Mon, 14 Apr 2014 11:23:57 +0200

Dear Yves,

thank you for your answer.
Is there also something for the function (1-cos(phi))/(phi*phi) when
phi tends to zero?

Thanks in advance

Marco



2014-04-13 10:44 GMT+02:00 Yves Renard <address@hidden>:
> Dear Marco,
>
> The message "WARNING: detected wrong equivalent nodes" is a debugging message 
> which can be ignored, it serves to control the efficiency of the hash codes 
> for the semantic trees produced by the generic assembly.
>
> For the moment, their is no conditional expressions in the language. However, 
> you can use pos_part and neg_part.
> Concerning the cardinal sine function (sin(t)/t) I added it to the language. 
> It is called "sinc" now in the generic assembly.
>
> Yves.
>
>
>
>
>
> ----- Original Message -----
> From: "Marco Pischedda" <address@hidden>
> To: "Yves Renard" <address@hidden>
> Cc: address@hidden
> Sent: Friday, April 11, 2014 9:28:22 AM
> Subject: Re: [Getfem-users] High level generic assembly procedures
>
> Dear Yves,
>
> thank you for your answer.  I understand how to impose the boundary condition.
> I have another question: in my formulation I'm assembling a term
> A(rho)*f.Test_f, where A(rho) is a symmetric matrix defined as
> follows:
>
>  " [-sqr(rho(2))-sqr(rho(3)), rho(1)*rho(2), rho(1)*rho(3);"
>  " rho(1)*rho(2), -sqr(rho(1))-sqr(rho(3)), rho(2)*rho(3);"
>  " rho(1)*rho(3), rho(2)*rho(3) , -sqr(rho(1))-sqr(rho(2))]";
>
> where rho and f are two FemVariables. When I'm assembling this term I
> receive this warning message:  "WARNING: detected wrong equivalent
> nodes".
> What does it mean?
>
> Then I have an expression "sin(phi)/phi", how can I insert an "if
> condition" (i.e if phi<1e-8) in the expression when "phi" tends to
> zero?
>
> Thanks in advance
>
> Marco
>
>
>
> 2014-04-08 15:29 GMT+02:00 Yves Renard <address@hidden>:
>>
>>
>> Dear Marco,
>>
>> No, "Grad_u.Test_p +p.Grad_Test_u+p.Test_u + p(0)u(0)-p(L)u(L)" is not
>> valid. The expression of an assembly string is to be evaluated at each
>> Gauss point of the concerned region. An expression such as "p(0)" will
>> be understand to be the component 0 of p which is not valid because the
>> first component is 1.
>> If you want to add some expression on a boundary (an extremity of the
>> intervall [0, L] here) then it is possible but not in the same assembly
>> string. In your example you have to add the assembly string "p.u" at the
>> boundary x=0 and "-p.u" at the boundary x=L.
>>
>> However, if you need to prescribe a Dirichlet boundary condition, the
>> best would be to use a corresponding model brick (if you use the model
>> system).
>>
>>
>> Yves.
>>
>>
>>
>>
>>
>> Le 07/04/2014 15:43, Marco Pischedda a écrit :
>>> Hi,
>>>
>>> how can I impose the boundary condition with high level generic
>>> assembly? For example I want to assemble "Grad_u.Test_p +
>>> p.Grad_Test_u+p.Test_u" and then imposing the value of p on the
>>> boundaries of the 1d domain, i.e x=0 and x=L. It is possible
>>> to write "Grad_u.Test_p +p.Grad_Test_u+p.Test_u + p(0)u(0)-p(L)u(L)",
>>> i.e can I insert the boundaries conditions in the assembling string?
>>>
>>> Thanks in advance
>>>
>>> Marco
>>>
>>>
>>> 2014-04-03 9:52 GMT+02:00 Marco Pischedda <address@hidden>:
>>>> Dear Yves,
>>>>
>>>> thank you for bug correction, now it works.
>>>>
>>>>> Concerning your question on Grad_u for a vector field, it is usually an
>>>>> order two  tensor (a matrix) except in 1D.
>>>>   Ok that's good.
>>>>
>>>> I will let you know if there are other problems.
>>>>
>>>> Thank you
>>>>
>>>> Marco
>>>>
>>>> 2014-04-03 9:25 GMT+02:00 Yves Renard <address@hidden>:
>>>>>
>>>>> Dear Marco,
>>>>>
>>>>> Concerning your question on Grad_u for a vector field, it is usually an
>>>>> order two  tensor (a matrix) except in 1D.
>>>>> I tried to to the best to make the most operations "dimension
>>>>> indepedent" so there is some permitivity in the langage (components of
>>>>> size 1 are sometimes ignored).
>>>>> Remember also that you can have the expression of any term with the
>>>>> commant Print. For instance "Print( Grad_u).Test_p" will print the
>>>>> gradient of u on each Gauss point. It does a lot of print, but at least,
>>>>> you can see the format of the term.
>>>>>
>>>>> Yves.
>>>>>
>>>>>
>>>>> Le 02/04/2014 17:21, Marco Pischedda a écrit :
>>>>>> Hi,
>>>>>>
>>>>>> I have other questions:
>>>>>>
>>>>>> - I tried to assemble separately the following terms:
>>>>>>   "Grad_u.Test_p" , "p.Grad_Test_u", "p.Test_u" and the code works 
>>>>>> correctly.
>>>>>>   Then I want to assemble the sum of this terms, i.e: "Grad_u.Test_p +
>>>>>> p.Grad_Test_u+p.Test_u"
>>>>>>   but I receive the following error:
>>>>>>
>>>>>>    Addition or substraction of incompatible expressions or of different 
>>>>>> sizes
>>>>>>    terminate called after throwing an instance of 'gmm::gmm_error'
>>>>>>    what():  Error in getfem_generic_assembly.cc, line 3591 :
>>>>>>    Error in assembly string
>>>>>>    Aborted
>>>>>>
>>>>>> - I'm working in 1d problem with vectors as unknowns. Grad_u is
>>>>>> therefore a vector or is a        tensor? When I do Grad_u.Test_p the
>>>>>> result is a scalar or a vector? Test_p is a vector or a scalar?
>>>>>>
>>>>>> Thanks in Advance
>>>>>>
>>>>>> Marco
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2014-04-01 17:51 GMT+02:00 Marco Pischedda <address@hidden>:
>>>>>>> Ok thank you,
>>>>>>>
>>>>>>> I tried it and it works. I will let you know if there are other 
>>>>>>> problems.
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> Marco
>>>>>>>
>>>>>>> 2014-04-01 17:16 GMT+02:00 Yves Renard <address@hidden>:
>>>>>>>> Dear Marco,
>>>>>>>>
>>>>>>>> All seems to me correct in your implementation. This is probably just
>>>>>>>> the test line 2074 of getfem_generic_assembly.cc
>>>>>>>> which is not correct for one-dimensionnal problems.
>>>>>>>>
>>>>>>>> I think the test should be
>>>>>>>>
>>>>>>>>  GA_DEBUG_ASSERT((qdim == 1 && t.sizes()[0] == N) ||
>>>>>>>>                       (t.sizes()[1] == N && t.sizes()[0] == qdim) ||
>>>>>>>>                       (N == 1 && t.sizes()[0] == qdim),
>>>>>>>>                       "dimensions mismatch");
>>>>>>>>
>>>>>>>> May be you can try this. I will validate it if it works.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>
>>>>>>>> Yves.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Le 01/04/2014 16:56, Marco Pischedda a écrit :
>>>>>>>>> Dear Yves,
>>>>>>>>>
>>>>>>>>> thank you for your fast answer.
>>>>>>>>>
>>>>>>>>> I have another question:
>>>>>>>>>
>>>>>>>>> - I have a monodimensional problem but the unknowns are vectorial. I
>>>>>>>>> set the vectorial
>>>>>>>>> dimension of the unknows with mf_u.set_qdim(3) and with 
>>>>>>>>> mf_p.set_qdim(3).
>>>>>>>>> When I define the expression " Grad_u.Test_p "  i receive the 
>>>>>>>>> following error:
>>>>>>>>>
>>>>>>>>> terminate called after throwing an instance of 'gmm::gmm_error'
>>>>>>>>>   what():  Error in
>>>>>>>>> ../../getfem-svn/getfem/src/getfem_generic_assembly.cc, line 2074 :
>>>>>>>>> dimensions mismatch
>>>>>>>>>
>>>>>>>>> Grad_u should be a 2nd order tensor, while Test_p should be a vector.
>>>>>>>>> I suppose the
>>>>>>>>> problem is that Grad_u is interpreted as a vector while Test_p is
>>>>>>>>> interpreted as a scalar.
>>>>>>>>> How can I use the high level generic assembly procedures on vectorial 
>>>>>>>>> problems
>>>>>>>>> defined on a monodimensional computational domain?
>>>>>>>>>
>>>>>>>>> Thanks in advance
>>>>>>>>>
>>>>>>>>> Marco
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2014-04-01 8:42 GMT+02:00 Yves Renard <address@hidden>:
>>>>>>>>>> Dear Marco,
>>>>>>>>>>
>>>>>>>>>> Yes, your code is correct and it should work correctly.
>>>>>>>>>> Note that you can also use the high level generic assembly with the
>>>>>>>>>> model object using a generic assembly brick.
>>>>>>>>>> Note also that high level assembly is only available in the svn
>>>>>>>>>> repository version of Getfem
>>>>>>>>>> (and a very recent version, at least r4570 because a bug have been
>>>>>>>>>> corrected on coupled problems recently).
>>>>>>>>>>
>>>>>>>>>> Yves.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Le 31/03/2014 14:00, Marco Pischedda a écrit :
>>>>>>>>>>> Dear all,
>>>>>>>>>>>
>>>>>>>>>>> I want to use the high level generic assembly procedures in order to
>>>>>>>>>>> use the automatic differentation for calculating the Jacobian of a
>>>>>>>>>>> non-linear problem.
>>>>>>>>>>>
>>>>>>>>>>> For example I want to calculate the Jacobian of two vectorial
>>>>>>>>>>> equations in the unknowns "u" and "p". The first vectorial equation 
>>>>>>>>>>> is
>>>>>>>>>>> (u+p).Test_u while the second is (u+p).Test_p.
>>>>>>>>>>>
>>>>>>>>>>>  It is correct the following code?
>>>>>>>>>>>
>>>>>>>>>>>  gmm::sub_interval Iu(0, ndofs_u);
>>>>>>>>>>>  gmm::sub_interval Ip(ndofs_u,ndofs_p);
>>>>>>>>>>>  workspace.add_fem_variable("u", mf_u, Iu, U);
>>>>>>>>>>>  workspace.add_fem_variable("p", mf_p, Ip, P);
>>>>>>>>>>>  workspace.add_expression("(u+p).Test_u + (u+p).Test_p",mim);
>>>>>>>>>>>  getfem::model_real_sparse_matrix Jac(ndofs_u+ndofs_p, 
>>>>>>>>>>> ndofs_u+ndofs_p);
>>>>>>>>>>>  workspace.set_assembled_matrix(Jac);
>>>>>>>>>>>  workspace.assembly(2);
>>>>>>>>>>>
>>>>>>>>>>> In the matrix Jac I have the Jacobian of the system?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Thanks in advance
>>>>>>>>>>>
>>>>>>>>>>> Marco
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Getfem-users mailing list
>>>>>>>>>>> address@hidden
>>>>>>>>>>> https://mail.gna.org/listinfo/getfem-users
>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>>   Yves Renard (address@hidden)       tel : (33) 04.72.43.87.08
>>>>>>>>>>   Pole de Mathematiques, INSA-Lyon             fax : (33) 
>>>>>>>>>> 04.72.43.85.29
>>>>>>>>>>   20, rue Albert Einstein
>>>>>>>>>>   69621 Villeurbanne Cedex, FRANCE
>>>>>>>>>>   http://math.univ-lyon1.fr/~renard
>>>>>>>>>>
>>>>>>>>>> ---------
>>>>>>>>>>
>>>>>>>> --
>>>>>>>>
>>>>>>>>   Yves Renard (address@hidden)       tel : (33) 04.72.43.87.08
>>>>>>>>   Pole de Mathematiques, INSA-Lyon             fax : (33) 
>>>>>>>> 04.72.43.85.29
>>>>>>>>   20, rue Albert Einstein
>>>>>>>>   69621 Villeurbanne Cedex, FRANCE
>>>>>>>>   http://math.univ-lyon1.fr/~renard
>>>>>>>>
>>>>>>>> ---------
>>>>>>>>
>>>>>
>>>>> --
>>>>>
>>>>>   Yves Renard (address@hidden)       tel : (33) 04.72.43.87.08
>>>>>   Pole de Mathematiques, INSA-Lyon             fax : (33) 04.72.43.85.29
>>>>>   20, rue Albert Einstein
>>>>>   69621 Villeurbanne Cedex, FRANCE
>>>>>   http://math.univ-lyon1.fr/~renard
>>>>>
>>>>> ---------
>>>>>
>>
>>
>> --
>>
>>   Yves Renard (address@hidden)       tel : (33) 04.72.43.87.08
>>   Pole de Mathematiques, INSA-Lyon             fax : (33) 04.72.43.85.29
>>   20, rue Albert Einstein
>>   69621 Villeurbanne Cedex, FRANCE
>>   http://math.univ-lyon1.fr/~renard
>>
>> ---------
>>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]