[Nek5000-users] opdiv and multd

nek5000-users at lists.mcs.anl.gov nek5000-users at lists.mcs.anl.gov
Wed Dec 8 09:02:07 CST 2010


Thanks Francesco!

Paul


On Wed, 8 Dec 2010, nek5000-users at lists.mcs.anl.gov wrote:

> Thank you Paul,
> that solved the problem.
>
> The correct result is obtained by :
>      call multd (RES(1),vx,rym2,sym2,tym2,2,iflg)
>      call dssum(RES(1))
>      call col2(RES(1),binvm1,lt)
>
> francesco
>
>
>
> On 12/08/2010 02:17 PM, nek5000-users at lists.mcs.anl.gov wrote:
>> 
>> Hi Francesco,
>> 
>> Several of the routines internal to nek are the so-called weak
>> derivatives, implying that they somehow involve the mass matrix
>> or the transpose of the operator, so it takes a bit of investigation
>> to understand precisely what each operator is doing.  (Note that the
>> functionality also differs slightly between PN-PN and PN-PN-2 
>> formulations.)
>> 
>> As an example, axhelm does not multiply by the (negative) Laplacian.
>> Instead, it creates (for h1==1, h2==0):
>>
>>    w = A * u
>>
>>      = grad^T B grad u
>> 
>> where B is the mass matrix.
>> 
>> Similarly, opdiv is most likely returning   d = B*grad u (or perhaps
>> the negative of this).     Moreover, d is returned on the pressure
>> mesh (mesh 2), which is the same as the velocity mesh (mesh 1) for the 
>> PN-PN formulation that you use.
>> 
>> In Nek, the mass matrix is diagonal and the mesh 1 inverse is stored
>> in binvm1.  It seems probable that you'll get the correct result
>> after
>>
>>       call col2(d,binvm1,n)
>> 
>> where d holds the output of opdiv and n is the number of points on
>> mesh 1, assuming you're using PN-Pn.
>> 
>> Paul
>> 
>> 
>> 
>> On Wed, 8 Dec 2010, nek5000-users at lists.mcs.anl.gov wrote:
>> 
>>> Hi all,
>>> 
>>> I am having some problems using the subroutines opdiv and multd.
>>> For some reasons they do not give me correct results.
>>> Do they need any special treatment or precautions?
>>> 
>>> I was trying to compute the divergence of a 3D field, and i realized that 
>>> in my case the multd subroutine used
>>> by opdiv does not gives good results, while the same derivative computed 
>>> from gram1 gives no problems.
>>> 
>>> For example, I overwrite an analytical field :
>>>
>>>         ...
>>>         parameter(lt=lx1*ly1*lz1*lelt)
>>>         real       Res(lt)
>>>         ...
>>>                    vx(i,j,k,e)=   1.0*sin(x)*cos(y)*cos(z)
>>>         ...
>>>             call print_line(vx)
>>>         ...
>>>         iflg = 1
>>>         call multd (RES(1),vx,rym2,sym2,tym2,2,iflg)
>>>            call print_line(Res(1) )
>>>
>>>        call gradm1(work1,Res(1),work2,vx)
>>>            call print_line(Res(1) )
>>>         ...
>>>         if (lx2.ne.lx1) then
>>>         ...
>>>         STOP
>>>         endif
>>> 
>>> 
>>> and  print output a (xr,:,zr) the result  (performed by print_line) .
>>> In vxi.eps i compare the result (lines) with the analytical solution( 
>>> symbols). The result of multd is not correct while all
>>> the others match perfectly the analytical solution.
>>> In vxy.eps i plot only the result of multd. Note that on y i have 12 
>>> elements the same number of peaks of the solution.
>>> 
>>> Does anybody have an idea on how to fix this?
>>> 
>>> Thank you very much for any help or suggestion
>>> 
>>> francesco
>>> 
>>> 
>>> 
>>> 
>> _______________________________________________
>> Nek5000-users mailing list
>> Nek5000-users at lists.mcs.anl.gov
>> https://lists.mcs.anl.gov/mailman/listinfo/nek5000-users
>
> _______________________________________________
> Nek5000-users mailing list
> Nek5000-users at lists.mcs.anl.gov
> https://lists.mcs.anl.gov/mailman/listinfo/nek5000-users
>



More information about the Nek5000-users mailing list