← Back to team overview

dolfin team mailing list archive

Re: zero normal velocities / corrupted vtk output

 

On 5/17/10 9:50 AM, Patrick Riesen wrote:
> Anders Logg wrote:
>> On Fri, May 07, 2010 at 02:39:41PM +0200, Patrick Riesen wrote:
>>> hello,
>>>
>>> i want to zero the normal velocity on a boundary part of my
>>> 2D-domain, so i used something like
>>>
>>> n = cell.n
>>> a = ... + inner(w,dot(v,n)*n)*ds(2) + ...
>>>
>>> in my form-file (w=testfunction, v=trialfunction).
>>>
>>> i marked the boundary part using the "exterior facet domains"
>>> meshfunction, which will be picked up in assemble(..):
>>>
>>> MeshFunction< uint >* _ext_facet_domains =
>>> mesh.data().create_mesh_function("exterior facet domains", 1)
>>>
>>> *_ext_facet_domains = 5;
>>> boundary.mark(*_ext_facet_domains, 2)
>>>
>>> can i do this? or what is wrong with the above way? because i don't
>>> get zero velocities...
>>>
>>> thank your for help,
>>>
>>> patrick
>>
>> What if you add a (big) parameter in front of that term? Does it have
>> any effect at all on the solution?
>>
>> I would also suggest writing the term as
>>
>>   dot(w, n)*dot(v, n)*ds(2)
> 
> thank you for the help anders,
> 
> so i noticed the following:
> without parameter in front, i could see no effect at all. if i add a
> parameter C in front and increase it stepwise until C is about 10^6 i
> can observe how the velocities cancel out on that boundary.
> 
> i guess this approach works, but there is something else:
> looking at the (time-dependent) solution (*pvd file set or single vtu
> files) in paraview, i ran into several
> 
> ERROR: In
> /home/kitware/Dashboard/MyTests/ParaView-3-8/ParaView-3.8/ParaView/VTK/IO/vtkXMLDataReader.cxx,
> line 509
> vtkXMLUnstructuredGridReader (0x1398ce0): Cannot read point data array
> "U" from PointData in piece 0.  The data array in the element may be too
> short.
> 
> I noticed that the reader crashes on some absurd numbers appearing in
> PointData "U"  as
> 
> [...]
> -3.949617e-105 9.769857e-104 0.000000e+00
> [...]
> 
> If i set those to zero, there is no problem. but the appearance of such
>  'almost-zero' numbers is clearly connected to using the parameter C.
> 
> do you suggest me another way how to do this?
> 
> or do you think that the VTK output writing should check for numbers <
> DOLFIN_EPS to avoid such corrupted output, and the approach is ok?

I have seen this for a while and use the following bash script to get
around this error:

1. cleanup.sh:

#!/usr/bin/env bash

for file in *.vtu
do
    gawk -f truncate.gawk $file  > tmp_$file
    mv tmp_$file $file


2. truncate.gawk:

function truncate(x)
{
    EPS=1.e-16
    absx = x >= 0 ? x : -x
    if (absx < EPS) {
	return "0.0"
    }
    else {
	return x
    }
}

{
    if (NF == 1)
	$i = truncate($i);
    print
}

Harish



Follow ups

References