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