[overture] Re: low massive rigid bodies

  • From: Bill Henshaw <henshaw@xxxxxxxx>
  • To: "overture@xxxxxxxxxxxxx" <overture@xxxxxxxxxxxxx>
  • Date: Fri, 02 Dec 2011 15:01:53 -0800

Hi Alessandro,
This is a known problem that the standard algorithm fails with light rigid bodies. In cg.v24 there is an initial attempt to fix this problem. You can look at the
cgins script cg/ins/cmd/oneDrop.cmd and use for example

cgins oneDrop -g=oneDrop1.hdf -tf=2. -tp=.01 -bodyDensity=.1 -relaxRigidBody=1 -alpha=.1 -nc=10

where the grid "oneDrop1.hdf" can be made with the attached ogen script. If you run this example you will see that the number of correction steps is large (7-10) at the start but then
things settle down to 2-3 corrections.

...Bill


Alessandro Orchini wrote:
Hi,

I'm having a problem with 2D simulations involving a low massive thin flat plate in a uniform flow. I think that since the density of the rigid body is not much higher than the one of the fluid, there's a singularity in the equation of motion: with a low inertia there are huge forces on the body, which tries to assume the flow velocity in a small time.

I assume a possible solution would be to choose time-steps and t_max lower and lower, but it would take an amount of time to run the entire simulation.

Furthermore, i've seen that if I constrain the motion in 1-D along and do not modify any other parameter, the simulation works fine.

I wonder if there is another possible solution for this kind of problems. I attach both cgins and ogen .cmd files in which are contained all the parameters I'm using.

Thanks for the help

Alessandro.



*
* one drop in a channel
*
***************************************************************************
* scale number of grid points in each direction by the following factor
*   ***NOTE: restore file to factor=1 for regression tests *****
* $factor=.5; $name = "oneDrop0.hdf"; $mgLevels=2;
$factor=1; $name = "oneDrop1.hdf";   $mgLevels=2;
* $factor=2; $name = "oneDrop2.hdf";  $mgLevels=3;
* $factor=4; $name = "oneDrop4.hdf";   $mgLevels=3;   
* $factor=8; $name = "oneDrop8.hdf";   $mgLevels=4;   
printf(" factor=$factor, mgLevels=$mgLevels\n");
*
*-----
  $mgFactor=2**$mgLevels;
*-----
*
* Define a subroutine to convert the number of grid points
sub getGridPoints\
{ local($n1,$n2)=@_; \
  $nx=int(($n1-1)*$factor+1.5); $ny=int(($n2-1)*$factor+1.5); \
  $nx=int( int(($nx-1)/$mgFactor)*$mgFactor+1.5); if( $nx==1 ){ 
$nx=int($mgFactor+1.5); } \
  $ny=int( int(($ny-1)/$mgFactor)*$mgFactor+1.5); if( $ny==1 ){ 
$ny=int($mgFactor+1.5); }\
}
*
***************************************************************************
create mappings
*
rectangle
  # $xa =-1.; $xb=1.; $ya=-3.; $yb=1.; 
  $xa =-1.; $xb=1.; $ya=-1.; $yb=1.; 
  set corners
    $xa $xb $ya $yb 
  lines
    $nx = int( 25*($xb-$xa)+1.5);  $ny=int( 25*($yb-$ya)+1.5);
    getGridPoints($nx,$ny);
    $nx $ny 
  boundary conditions
    1 1 1 1
  mappingName
   channel
exit
*
Annulus
  lines
    $nya=9;  # fix radial lines since outer radius is reduced
    $nymg=int( int(($nya+$mgFactor-1)/$mgFactor)*$mgFactor+1.5); 
   getGridPoints(57,$nymg);
    $nx $nymg
  inner and outer radii
    $innerRadius=.25;
    $outerRadius=$innerRadius+(.25/$factor)*($nymg/$nya);
    $innerRadius $outerRadius
  centre for annulus
    0. 0. 
  boundary conditions
    -1 -1 1 0
  mappingName
   drop-unstretched
exit
*
  stretch coordinates
    Stretch r2:itanh
    STP:stretch r2 itanh: layer 0 1 4 0 (id>=0,weight,exponent,position)
    stretch grid
    mappingName
     drop
   exit
*
*
exit
generate an overlapping grid
    channel
    drop
  done
  change parameters
    ghost points
      all
      2 2 2 2 2 2
  exit
*  display intermediate results
  compute overlap
*  pause
  exit
*
save an overlapping grid
$name
oneDrop
exit

Other related posts: