Custom Query (986 matches)
Results (373 - 375 of 986)
Ticket | Owner | Reporter | Resolution | Summary |
---|---|---|---|---|
#472 | Fixed | FLOAT_VWALK scaling problem | ||
Description |
There are a couple of significant problems with the operation of the FLOAT_VWALK option:
I investigated these problems with a simple case: fluid at rest with uniform diffusivity at 10-5 m2/s, doubly periodic domain 50 m deep, 5 uniformly spaced levels, 300 floats released at 25 m depth and followed for 0.5 days. The standard deviation of the float vertical position should increase with time as sqrt(2 K t) so at 0.5 days should be 0.93 m. However in the simulation it is 9.3 m (VWALK_FORWARD defined) or 6.6 m (not defined). The scaling problem arises because the nudging velocity (nudg) is calculated in vwalk_floats.F in m/s and is then applied in interp_floats.F to calculate the rhs term track(izrhs,...) without further scaling. It should be scaled by the layer depth Hz. I have applied the correct (I think) scaling in a copy of interp_floats.F on my branch on the developers' repository https://www.myroms.org/svn/omlab/branches/hadfield/trunk/ROMS/Nonlinear/interp_floats.F I haven't yet looked into the situation where VWALK_FORWARD is undefined, but presumably it arises from the predictor-corrector scheme trying to cope with impulsive perturbations and can be fixed by multiplying the perturbations by sqrt(2). |
|||
#473 | Fixed | Corrected couple of bugs and typos | ||
Description |
Several typos and bugs have been reported in the forum:
|
|||
#474 | Fixed | IMPORTANT: Corrected parallel bug in float's vertical random walk | ||
Description |
Finally, I figured out how to correct the shared-memory bug in the floats vertical random walk. I mentioned this problem before in src:ticket:472. Getting random number sequences in parallel is very tricky. It is very difficult to get identical ROMS solutions in serial and parallel when random numbers are involved, but it is possible.
IF ((Tinfo(ixgrd,l).lt.0.5_r8).or. & & (Tinfo(iygrd,l).lt.0.5_r8).or. & & (Tinfo(ixgrd,l).gt.REAL(Lm(ng),r8)+0.5_r8).or. & & (Tinfo(iygrd,l).gt.REAL(Mm(ng),r8)+0.5_r8)) THEN bounded(l)=.FALSE. ! outside application grid END IF
|